跳到正文

ADR-0078:语义表格按实际区域宽度布局 ​

状态:已采纳。

背景 ​

固定宽度 TableCursor 缓存完整文字行及已消费行号;直接跨栏使用会保留错误的换行和列宽。拆分模型后重新建立小表还会改变原始行列、ID、预算、合并 owner 和字段上下文。

决策 ​

在布局核心增加显式循环宽度的 layoutTableRegions 重载,组件 SemanticTable 实现已有 WidthAwareRegionFlow。同一个源表格按实际使用的每种宽度准备一次,保留完整行/合并行组的测量结果,分配时引用原始模型及实际对应候选,不制造新来源。

源预算只检查一次。候选准备与最终呈现行分别计费:最多 16 种宽度、累计 4,000,000 个源 UTF-16 单位;每个候选受独立行上限保护,最终只计已选正文和实际表头。候选测量不要求所有原子块格适应当前高度,真正分配时检查所选完整组能否放入;否则未使用的窄栏候选会提前拒绝本应在宽栏呈现的嵌套内容。

初始短区允许不消费来源,完整续区必须推进。合并连通组整体移动,完整源的片段序号贯穿字体作用域、混合流与最终语义登记;字段和图文链接继续由最终分页解析。

边界 ​

相同宽度沿用旧游标及完整行续排。不同宽度明确要求原子行;半行消费、递归子树游标和组件网格需要独立的跨宽来源推进设计,不能把固定宽度行号当作另一宽度的来源游标。后端不重新换行或分页。

验证见阶段七十一。

后续扩展:ADR-0082补齐行内格按完整原文在变宽区域的完整行续排;纵向合并拆分、递归子树及组件网格仍保持独立边界。