跳到正文

ADR-0012:连续文字区域与当前页分栏 ​

  • 状态:已接受
  • 日期:2026-10-14

背景 ​

既有 MultiColumn 使用新页固定栏高,平衡模式有界重复测量。它无法表达“当前页多个短栏、续页多个完整栏”,而不重新换行或丢失原文第一行缩进。PageableComponent 的首片段高度不足以表达一组不同高度的逻辑区域。

决策 ​

在布局核心增加 FlowRegions 和 RegionFlow,只表达等宽区域的有限较短前缀、完整续区以及片段的区域归属。FlowText 与 OpenTypeText 测量一次后按完整行分配;原有 layoutParts API 委托此路径。过短前缀可以跳过,续区必须消耗原文,否则失败。

组件层提供 ContinuousColumns,首组区域对应当前页剩余正文高度,后续区域对应新页完整正文高度。按区域索引组合物理片段,验证尺寸、顺序、数量和连续推进,每栏裁剪。最后物理片段保留实际最高栏高,使后续正文继续流动。保持旧 MultiColumn 的整页与有界平衡行为,不混用两种测量契约。

现有正文分页器通过首片段实际高度决定是否移页。跳过整组首栏时,首个实际物理片段必须超过剩余高度;不能把隐式换页藏在一个小片段中。核心不导入组件实现,后端只消费预计算指令。

后果和边界 ​

可在已有正文之后连续分栏,保持字体组诊断、原文顺序、一次换行、首行缩进和同步取消。没有新增模块、Maven 依赖或系统字体回退。区域流是明确的新 SPI;当前不把任意混合组件强制适配为文字行,也不支持变栏宽和自动末页平衡。

验证包含短栏/完整续栏、最低行数跳过、三栏、中阿混排、缺字 UTF-16 范围、无效自定义区域与取消恢复,以及最终 PDF 坐标、SVG 原文、PNG 和独立 Maven 调用方。完整契约见连续分栏 API,证据见验收记录。