ADR-0080:单向长表的实际页码与准确声明总数
状态:已采纳。
背景
逐行读取、逐页交付无法在未知源结束前得知总页数。提前解析 PAGE 会使移页正文和重复表头取错值;预估总数会把错误字段写入成功结果;全量缓存或隐式二遍读取违背一次性来源契约。
决策
保留一次行测量及未解析的固定宽字段框,放置到实际物理页时解析 PAGE。PAGES 仅接受正数 expectedPages 声明;开始新页不得超过声明,EOF 时必须严格匹配,即使没有 PAGES 也执行校验。未知值 0 只允许 PAGE。最终失败沿用已有原子路径与资源关闭契约。
完整文档与单向路径共享文字层 InlineFieldInk,只负责按实际字体角色绘制一行固定宽值。值生成、原位置、预算、诊断上下文与分页仍由各调用路径负责,文字层不依赖布局核心或组件。生成警告使用局部 UTF-16 和 INLINE_FIELD:n 上下文;用户回调不纳入文字布局异常包装。
新增实际呈现字段及生成码点预算,默认 100,000 与 1,000,000;源预算继续只计原始内容一次。兼容之前 StreamingTable、StreamingTableLimits 与 StreamingTableDiagnostic 构造形状,新诊断 region 默认为原有 STREAMING_TABLE。
结果与边界
重复表头逐页取值、完整行续排字段使用真实片段页码;页数声明无法通过 WARN/IGNORE 绕过。高级接收器可能已接收前面页,只有路径入口提供完整失败原子性。未来引用、隐式统计读取、自动字段扩宽、分节显示页码和完整 PDF 恒内存不由本决策引入。