跳到正文

ADR-0110:用语义栅格连接轨道布局、XML 保存与设计器 ​

  • 状态:接受。
  • 日期:2026-11-02。

背景 ​

连续分栏解决文章流动和通栏图表交替;图文并排、跨三栏中的两栏和偏移留空需要显式区域。组件层已有 GridTable,但它属于运行时组件、要求完整覆盖格子,不能直接放入仅依赖模型的 XML 适配器。把栅格内容预先绘制或伪装成表格会混淆真实来源与编辑结构。

决策 ​

新增不可变 GridLayout/GridItem。GridLayout 保存 1~12 条等宽轨道、pt 行列间距和有序项;GridItem 通过独立 ID、1-based 行号/起始轨/跨轨数及真实子块声明区域。项按行号和起始轨有序,同一行不重叠,可留空轨道;跳过行号不制造空白物理行。

布局核心直接测量项内 Paragraph/Table,输出原始 ID 和 UTF-16 的真实片段。每行高度取各项最大值,整行原子分页;短剩余区整行移动,超高行失败。空绘制 ComponentFragment 保存栅格与项的最终选择矩形,后端仍只消费既有 IR 和 Display List,不重新排版。

SemanticTree、来源预算、最终字段/链接和编辑候选验证递归真实子树。GridItem 只在 GridLayout 内合法;页区、格内、独立项及互相嵌套均明确拒绝。默认 Java 语义编辑保留整块不透明边界,XML/设计器负责项内编辑,不以增加一种模型来默许未实现的定位 API。

DocumentTemplate 增加 Grid/GridItem 节点,XML 使用 grid/item 和显式坐标;源码 ZIP 与展开后模型保存继续走既有链路。动态内容在绑定后核验有效项顺序与区间,不做隐式排序或密集回填。设计器可插入栅格、改变轨道/跨度/间距,依据实际 IR 选中项并编辑原始内容。

DOCX/Web 尚无原生映射。直接导出拒绝;统一 GRID_LAYOUT/DEGRADE 按阅读顺序展平并报告布局损失,WARN/IGNORE 均保留真实 issues。没有新的运行依赖,核心不反向依赖组件或浏览器。

结果与边界 ​

编辑器、保存结构和最终输出中的栅格区域使用同一来源身份和几何。ColumnFlow 与 GridLayout 可以作为正文相邻块同页接续。

本批不包含跨行项、独立项内跨页续排、自动放置、固定高度、任意重叠或嵌套布局容器。需要这些能力时须分别定义来源、分页与保存契约,不能通过缩放、裁切、静默丢弃或输出旧模型来扩展本决定。

API 与验证见栅格指南及专项验收。