跳到正文

ADR-0065:递归语义格续排 ​

状态:已接受。

决定 ​

复用显式 TableFormat.allowRowSplit,将 Paragraph/Table 格内容按完整行、内表行及原子内容续排。每张表单独控制其正文是否可拆;内表表头随自己的片段重复。关闭开关时保留原连通行组整体移动行为。固定/比例列宽只解析一次,字体、原文 UTF-16、图文外链及未解析字段进入缓存 IR,不在后端再次排版。

纵向格在原始锚点行消费内容;该行可以占多个片段,结束后继续后面的物理行。已完成的纵向 owner 仍覆盖后续行,同页相邻空续格合并边框;覆盖行不复制来源内容。显式拆分模式不承诺保留原子模式的行高分配。源行列始终指向 owner,而不是当前覆盖行。

取片先构造局部候选状态。短区、取消和输出预算失败均不提交状态;成功后才提交外层游标与额外表头/空续行预算。递归子游标不重置全局额度。语义表深统一限为 16 层,XML、HTML 与 DOCX 入口采用同一个上限,原有输入/节点/文字/结构预算继续适用。

IR CellFragment.Blocks 显式保存原格块序号,允许无内容续格。后续段落即使是续页上的第一个块,其 CellLocation.blockIndex 仍指向原格位置。最终字段映射必须保留这份来源列表。保留旧源码构造器;record 分量变化不保证既有二进制调用兼容。

连续富文本使用 RichTextComponent.flow,沿用原运行快照、字体角色、装饰、固定行框和字素边界。ContinuousColumns.balanced(true) 以至多 24 次确定性试排缩短公共栏高,保持页数及已跳过的首页;旧构造和默认行为保持。当前仍为等宽栏,平衡会重新测量可信组件。

边界 ​

块格与内表继续拒绝 Auto,重复父表头中的块格、格内注释/组件、段落换页前置/与下段保持和单向源块格仍不支持。keepTogether 与孤行控制在格段续排中生效。DOCX 写入标准可拆行策略及原生嵌套树;Word 实际分页和保存回读不能由该结构检查推断。

验证 ​

见块格 API、阶段五十七。覆盖深度边界、短区纯取片、原始序号、重复表头、纵向覆盖尾行、完整来源顺序、固定保持和独立输出。