ADR-0099:保留已接受行宽的递归续排与显式轮廓锚点
状态:已采纳。
背景
变宽行内格已有共享区域计划,但 Paragraph/Table 递归子树和组件网格仍只缓存固定宽度的行。直接换用另一宽度的行号会重复或漏失来源;切片原文又会改变 UTF-16、首行缩进、字段和塑形上下文。首片段矩形浮动也无法表达跨页轮廓。
决策
为递归表格增加布局局部的 VariableTableCursor。每次改变宽度时,从完整原文准备新的剩余测量;已接受行使用其历史实际宽度,未接受行使用本次宽度。树游标仅迁移原始块/行位置,不重置来源、不提前解析字段。失败的 take 不改变来源状态;重复测量与最终输出分别计费。
GridTable 实现 WidthAwareRegionFlow。格内标准文字、静态表单、OpenType 文字、递归语义表格和混合列各自保留消费游标。每区域按实际列宽测量,重新满足剩余逻辑行与跨度约束;表头最后在已确认占用的区域输出,跳过短区不留下未使用的语义呈现。默认完整合并行组与显式完整行拆分继续分开。
新增 ContourFloatText,使用显式闭合路径、水平位置、尺寸、净距和锚点。按整行带与曲线区域的相交计算可用水平区间;采用最宽连续区间,等宽取左。文字锚点位于其来源行之后,按原文顺序定位,避免依赖未消费文字的无界循环求解。跨区域图形使用互不重叠的遮罩分片;文字与语义内容通过 RegionFlow 自身的片段保留唯一来源。
边界与验证
以上都属于布局和 Display List 准备,后端不重排。字体、图片与组件保持借用;原文位置、字段、链接、取消和预算契约继续适用。完整源重测设有限累计工作预算,不能视为大表恒内存接口;后者由显式流式 API 负责。
轮廓是明确的视觉遮罩,调用方应按遮罩编写浮动内容;不会从其他文件格式自动推断等价锚点或分页。任意自定义组件仍按其公开的原子/区域流契约处理,不通过裁切原子文字冒充续排。API 及复现入口见变宽表格、组件网格与轮廓浮动。