文本排版规则引擎 —— 设计总览
基于 Pretext 架构 + CSS Text Module Level 3 的行级排版规则
规则 1:两阶段分离
prepare() 一次性文本预处理(Intl.Segmenter 字素分割 + Canvas 测量 + 缓存),layout() 纯算术 O(n) 换行,可每帧调用。与 Pretext 的设计哲学一致。
规则 2:Unicode 感知
Intl.Segmenter grapheme 粒度分割。CJK 字符按单字断行,Emoji ZWJ 序列不可拆分,拉丁单词边界断行。覆盖中日韩、阿拉伯、泰文、Emoji 等脚本。
规则 3:CSS 兼容换行
强断 > 软断 > 溢出断。空格为软断点,CJK 字符前后均可断行,标点禁止出现在行首。无断点时执行 overflow-wrap: break-word 策略。
规则 4:宽度缓存
(text, font) 为 key 的全局 LRU 宽度缓存。prepare() 后 segment 可复用,避免同一文本重复 Canvas 测量。字体变更后调用 clearCache()。
规则 5:虚拟滚动高度
computeVirtualHeights() 批量预计算每项高度与累计偏移,findVisibleRange() 二分查找可见区间,O(log n) 定位。
规则 6:芯片流原子性
芯片(chip)作为不可断行原子元素参与 inline 排版,换行时整体移动。extraWidth 承载边框/内边距/关闭按钮等额外宽度。