跨越样式的富文本附加符

typed 富文本保留原始逻辑 V 与规范化 RV,同时把行首 combining mark 定位到同一物理行上实际前一个已渲染字形处

base 与 mark 可以使用不同的 supplied regular、bold、italic 或 bold-italic 字体程序、不同磅值与不同颜色

定位读取真实的 GPOS mark-to-base、mark-to-ligature 与 mark-to-mark 附加,包括 extension positioning lookup;base 锚点使用自己的字体与缩放,mark 锚点也使用自己的字体与缩放

上下文相关的阿拉伯文连写跨样式边界仍然生效,附加的 mark 使用连接后的 base 字形而不是孤立的 nominal 字形

行首 mark 获得独立的子变换,附加 mark 不会移动后续普通文本,也不改变逻辑字符间距步进

富子表单保留字形外溢,包括负原点 combining mark 与斜体轮廓;所属外观提供控件裁剪、旋转与段落对齐

附加墨迹参与行范围拟合,堆叠 mark 因此能保持在字段顶部可见;高于控件的不可拆分簇保留既有的有界裁剪行为

缺少匹配的附加覆盖时,真实选中 TrueType 的字形头部边界提供回退定位,带独立磅值缩放与原生 Unicode combining class

回退定位区分上方、下方、贴合、左右与双重 mark;同侧 mark 堆叠,异侧 mark 回到 base 轮廓,匹配的 GPOS 锚点始终优先

双重 combining mark 即使 Unicode line-break class 为 nonbreaking 也仍是附加候选;逻辑文本、原始样式与后续字符间距步进保持不变

双重 mark 的回退侧向遵循其文本项实际解析出的 bidi level,包括段落内嵌的反向文本项

回退边界描述真实字体声明的轮廓头部;任意字体族的自动重建不在这份 supplied 字体契约之内

字体表读取仅限真实 GPOS 表、响应取消,并在所有 supplied 样式字体间共享遍历预算;非法表偏移在文档字段被修改之前失败

未 hint 的 PDF 轮廓使用设计坐标锚点,不做设备相关像素调整

验收

HotPDFHeadlessRichMarkTests.pas 保存并重新加载真实的拉丁、阿拉伯与希伯来 mark 外观、堆叠 mark、真实阿拉伯连字、混合字号与颜色、折行、间距、对齐与旋转

Verify-HeadlessRichMarks.py 用 fontTools 读取真实内嵌字体程序、独立计算 GPOS 锚点、核对源值与样式,并通过渲染省略该 mark 的同一真实外观确认每个 mark 都贡献了可见 MuPDF 像素

HotPDFHeadlessRichMarkFallbackTests.pas 与 Verify-HeadlessRichMarkFallback.py 检查真实的缺 GPOS 字体、可见的已保存外观、原始 combining class、选中字形边界与取消;同时验证匹配锚点对回退定位保持优先

选中的 TrueType 字形边界 · 原始规范 combining class

外观 builder · 原生富文本字段 · 跨样式的字素适配