ADR-0071:变宽栏的最低行数
状态:已接受。
决定
FlowText 与 RichTextComponent.flow(policy) 的变宽区域接收已有的断点前/后最低行数。等宽区域仍一次换行后取完整行;变宽区域必须按最终分配的栏宽测量,不能直接移动已在另一宽度测量的末行。
首次使用各区完整行槽测量全部原文;不满足最低行数时,以总行数及邻近候选建立分配,再按候选行槽重新测量完整原文。接受条件是实际行槽满足策略,所有片段均完整适应所在栏。重排后总行数可能改变,直接保留已验证的实际分配,不按新总行数再次贪心切分。来源字符串、运行、UTF-16 位置和首行缩进始终属于完整原文;只返回最终一次测量的诊断。
预算与边界
每次区域调用最多 32 次测量,重复工作最多 4,000,000 个源 UTF-16 单位;沿用原文字和输出行预算。候选枚举、测量及分配同步检查取消。预算内找不到已验证方案时明确失败,不输出部分结果、放宽最低行数或无限重试。此为有界可验证方案搜索,不承诺找到全部数学可行的分配。
最低行数沿用现有 PaginationPolicy 语义:只在实际拆分时适用;完整放入单个短区的短文本仍可接受。有限首区可跳过,完整续区必须推进。相邻块约束仍属于语义文档流。表格跨变宽区域仍需独立契约;本项不通过缩放或裁切扩展表格。
验证
定向回归覆盖短/零首区、3/2 行分配、普通与富文本真实换宽、自定义最低行数、首行缩进、复杂文字、缺字 UTF-16 和不可能约束。输出及隔离调用方见阶段六十三。