|
Automatic Shaping Pipeline (Phase 8) Opt-in producer-side GSUB pipeline (v2.119.59 - v2.120.10)
|
Arabic Shaping Multi-Script Shaping GSUB Engine |
|
Автоматичният конвейер за шейпинг превръща двигателя OpenType GSUB от повърхност за запитване само за възможности в производствена функция, която се прилага автоматично при извеждане на текст в PDF потоци за съдържание. Ползвателите включват конкретни GSUB функции чрез типизиран набор (
Opt-in framework (v2.119.59 / Phase 8a) A new enum and property control which automatic substitutions run during text emission:
type THPDFShapingFeature = ( sfArabicGSUB, // native Arabic init / medi / fina / isol + rlig / calt / rclt sfStandardLigatures, // Latin 'liga' (ff / fi / fl / ffi / ffl / sft / st) sfContextualLigatures,// Latin 'clig' (contextual ligatures) sfContextualAlternates,// 'rclt' (Required Contextual Alternates) sfIndicShaping); // Devanagari Repha + pre-base I-matra reorder THPDFShapingFeatures = set of THPDFShapingFeature;
property ShapingFeatures: THPDFShapingFeatures read ... write ...;
По подразбиране е [] (празен набор), което запазва byte-identical изхода за извикващи, които разчитат на v2.119.32-58 статичния post-pass shaper. Задаването на един или повече флагове превежда engine-а в автоматичен режим за съответните функции
sfArabicGSUB - native Arabic GSUB shaping (v2.185.0) Когато
Задаването на sfArabicGSUB имплицитно заобикаля v2.85.0 статичния 4-позиционен shaper за Arabic - извикващи, които искат статичният shaper да продължи да обработва codepoints извън това, което GSUB на шрифта декларира, трябва да оставят sfArabicGSUB изключен
sfStandardLigatures / sfContextualLigatures - Phase 8b (v2.119.65) Когато
sfContextualAlternates - GSUB 'rclt' (v2.119.66) Когато
Canonical users of
sfIndicShaping - Phase 8e (v2.119.67) Когато
Advance-query support (v2.119.64 / Phase 8c.5) Спътстващото API разкрива кеширания /W em-fraction, за да могат извикващите да изчисляват word-wrap коректно при emission на GSUB-substituted glyphs
function GetCodepointAdvance(CP: Cardinal): Single;
Връща advance width, получен от hmtx, като част от em за glyph-а, разрешен през cmap при CP. Същата версия поправя и CodeUnitAdvance, така че Arabic Presentation Forms (U+FB50-FDFF + U+FE70-FEFF) да се класифицират като NARROW вместо WIDE, тъй като heuristic fallback-ът беше грешен преди v2.65
Typical workflow (full Arabic auto-shaping)
PDF.RegisterUnicodeTTF('NotoArab', 'NotoSansArabic-Regular.ttf'); PDF.ShapingFeatures := [sfArabicGSUB, // native Arabic GSUB contextual glyphs sfCursiveAttachment]; // GPOS cursive entry / exit anchors PDF.SetGSUBScript('arab'); PDF.BeginDoc; PDF.CurrentPage.SetFont('NotoArab', [], 14); PDF.CurrentPage.RtLTextOut(100, 700, 0, UnicodeString(#$0628#$0633#$0645#$0020#$0627#$0644#$0644#$0647)); PDF.EndDoc;
Typical workflow (Latin standard ligatures + Devanagari reorder)
PDF.RegisterUnicodeTTF('NotoSans', 'NotoSans-Regular.ttf'); PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf'); PDF.ShapingFeatures := [sfStandardLigatures, // FB00-FB06 Latin liga sfContextualLigatures, // + clig sfIndicShaping]; // Devanagari Repha + I-matra reorder
Phase 8 roadmap closure Phase 8a (v2.119.59) opt-in framework + Arabic capability; Phase 8b (v2.119.65) Latin standard ligatures; Phase 8c.1 (v2.119.60) Allah; Phase 8c.2 (v2.119.63) GID-level GSUB
Обхват и ограничения Конвейерът по избор е умишлено добавъчен спрямо статичния шейпър за следпроцесна обработка - съществуващите ползватели не виждат промяна в поведението, освен ако не го включат изрично. Празният набор
Текуща карта на API за шейпинг Текущият конвейер вече не е само за замяна: Последните допълнения добавят sfLocalizedForms за locl, calt чрез ApplyGSUBContextualFeature, contextual и vertical GPOS kerning, native Arabic GSUB contextual glyph emission и пътищата за N'Ko, Adlam, Thai/Lao, Hebrew и Javanese. Вижте script shaping preprocess methods
See also: OpenType GSUB Substitution Engine, Arabic / Persian / Urdu Shaping Support, Syriac / Mongolian / Devanagari Shaping, THotPDF.AssignSyntheticCodepointForGID, CFF / OpenType Font Subsetting |