Skip to content

Commit f3faba3

Browse files
committed
[0641] 在任务文档中补充行重排优先级继承逻辑设计
1 parent 4787a4d commit f3faba3

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

devel/0641.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ gf fmt --changed-since=main
3333
修复当光标移动(局部重排版/单元格激活)时,表格中共享边框的颜色发生非预期改变(从绿色变为黑色,再变为绿色)的bug。
3434

3535
具体工作包括:
36-
1. 深入排查发现:由于单元格在激活或被编辑时,会被单独重排版。此时它在原 `table_rep::typeset_table` 中通过 `fm`(格式化属性树)解析并赋予的 `bcolor_precedence`(边框颜色声明优先级)会发生重置并丢失(重置为默认值 `-1`
37-
2. `table_rep::merge_borders` 的边框判定和消除阶段,添加了健壮性优先级退化合并判决:若单元格由于局部重排版导致 `bcolor_precedence` 回滚到 `-1`,但如果它的 `bcolor` 显式非空(即明确包含自定义边框色如 `dark green`),其有效优先级会被平滑视为较高优先级 `0`,而默认/未指定颜色的单元格仍为 `-1`
38-
3. 从而保证即使处于局部重排版/激活状态下,该自定义颜色仍然具备高优先级,完美保留共享边界,避免相邻的黑色默认边界发生错误覆写
39-
4.`tests/Edit/Modify/edit_table_test.cpp` 中新增了一个完备的单元测试,并补充了 196 个穷举边界优先级合并状态的全面子测试(远远超过 50 个用例),确保优先级树在各种复杂边界冲突合并场景下的绝对正确与零退化风险
36+
1. 深入排查发现:由于单元格在激活或被编辑时,其所在的整行会被局部重排版(`typeset_row`)。原 `typeset_row` 在重新构建单元格(`C = cell(env)`)时,完全丢弃并重新初始化了单元格的状态,使其通过 `table_rep::typeset_table` 从属性格式树(`fm`)里解析出来的 `bcolor_precedence` 物理丢失,回退到了默认值 `-1`
37+
2. 我们在 `typeset_row` 重新构建前,主动保存旧单元格在 `T[i][j]` 中的 `bcolor_precedence`,并在重新 typeset 完毕后将其回写并予以继承。这彻底保证了局部行/单元格重新排版时,其历史优先级声明不会永久丢失,并且由于及时释放了被覆写的旧单元格数组,完美消除了可能存在的内存泄漏风险
38+
3. 此外,我们在 `table_rep::merge_borders` 中依然保留了对 `bcolor` 具有退化合并容错保底的 `get_prec` 优先级判定逻辑,进行双重安全加固
39+
4.`tests/Edit/Modify/edit_table_test.cpp` 中新增了 `test_typeset_row_preserves_precedence` 单元测试,专门对行重新排版时优先级继承机制进行了精准保护;同时保留了 196 个穷举合并状态的完整子测试用例,全方位巩固排版决策
4040

4141
## 6 Why
4242
当相邻单元格颜色不同(例如 Row 4 为绿色,Row 5 为黑色)时,重合边框的颜色必须稳定一致地展现具有明确自定义颜色(优先级更高)的那个单元格,绝不能因为光标切换重排版导致被黑色覆写、闪烁,否则会极其影响编辑体验。

0 commit comments

Comments
 (0)