跨樣式的 Rich Text 標記

typed rich text 保留原始邏輯 V 與 canonical RV,同時把開頭的 combining mark 對位到同一實體行上前一個實際 rendered glyph

base 與 mark 可以使用不同的 supplied regular、bold、italic 或 bold-italic 字型程式、不同的 point size 與不同顏色

定位會讀取真實的 GPOS mark-to-base、mark-to-ligature 與 mark-to-mark 附加,包含 extension positioning lookup;base 錨點使用自己的字型與縮放,mark 錨點也使用自己的字型與縮放

阿拉伯文的情境連接在樣式邊界之間仍然生效,附加的 mark 會使用連接後的 base glyph,而不是孤立的名義 glyph

開頭標記取得獨立的子變換,因此附加 mark 不會移動後續的一般文字,也不會改變邏輯的 character-spacing 前進量

rich 子表單保留 glyph 外溢,包括負原點的 combining marks 與斜體輪廓;所屬外觀提供 widget 裁切、旋轉與段落對齊

附加的墨跡會計入行範圍的估算,因此堆疊標記仍可在欄位頂部保持可見;高於 widget 的不可分割 cluster 保留既有的有界裁切行為

缺少相符的附加涵蓋時,改以實際選用 TrueType 的 glyph-header 邊界提供放置 fallback,採用獨立的 point-size 縮放與原生 Unicode combining class

fallback 放置會區分上方、下方、附加、左/右與雙標記;同側標記堆疊,異側標記回到 base 輪廓,相符的 GPOS 錨點永遠優先

雙 combining marks 即使 Unicode line-break class 為 nonbreaking,仍是附加候選;邏輯文字、原始樣式與後續的 character-spacing 前進量保持不變

雙標記的 fallback 側邊跟隨其文字項實際解析出的 bidi level,包括段落內嵌的反向文字項

fallback 邊界描述實際字型宣告的輪廓標頭;任意字型家族的自動重建不在這個 supplied-font 契約範圍內

字型表讀取只限於實際的 GPOS 表、遵守取消機制,並在所有 supplied 樣式字型之間共用走訪預算;無效的表偏移會在文件欄位被修改前失敗

未 hint 的 PDF 輪廓使用 design 座標錨點,不做裝置相關的像素調整

驗收

HotPDFHeadlessRichMarkTests.pas 會儲存並重新載入真實的拉丁、阿拉伯與希伯來標記外觀、堆疊標記、真實阿拉伯連字、混合大小與顏色、換行、間距、對齊與旋轉

Verify-HeadlessRichMarks.py 透過 fontTools 讀取真實內嵌字型程式、獨立計算 GPOS 錨點、驗證來源值與樣式,並以省略該標記的方式 render 同一實際外觀,確認每個標記都貢獻了可見的 MuPDF 像素

HotPDFHeadlessRichMarkFallbackTests.pas 與 Verify-HeadlessRichMarkFallback.py 檢查真實缺 GPOS 的字型、可見的已儲存外觀、原始 combining classes、選用的 glyph 邊界與取消;也驗證相符錨點相對 fallback 放置保持優先

選用的 TrueType glyph 邊界 · 原始 canonical combining classes

外觀建構器 · 原生 rich-text 欄位 · 跨樣式的 grapheme 排版