|
Automatic Shaping Pipeline (Phase 8) Opt-in producer-side GSUB pipeline (v2.119.59 - v2.120.10)
|
Arabic Shaping Multi-Script Shaping GSUB Engine |
|
Automatinė formavimo grandinė OpenType GSUB variklį iš galimybių tikrinimo pavertžia gamintojo pusės funkcija, kuri automatiškai taikoma tekstui keliaujant į PDF turinio srautus. Kūrėjai konkrečias GSUB funkcijas įjungia per tipizuotą rinkinį (ShapingFeatures: THPDFShapingFeatures), o HotPDF pasirūpina tinkamais pakeitimais, pakaitinius glifus pažymi į įdėtą šrifto pogrupį ir išveda ToUnicode CMap atvirkštinio susiejimo įrašus, reikalingus prieinamumui
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 ...;
Numatytoji reikšmė yra [] (tuščias rinkinys), kuri išlaiko baitas į baitą identišką išvestį kviestinėms pusėms, kurios remiasi v2.119.32-58 statiniu post-paso formuotoju. Nustačius vieną ar daugiau vėliavų, variklis atitinkamoms funkcijoms pereina į automatinį režimą
sfArabicGSUB - native Arabic GSUB shaping (v2.185.0) Kai nustatytas sfArabicGSUB, HotPDF logišką Arabic atkarpą susieja su baziniais glifų ID, kiekvienai raidei pasirinktose jungimo vietose taiko registruoto šrifto positional init, medi, fina ir isol paieškas, o tada pritaiko rlig, calt ir rclt visam suformuotam srautui. Pakaitiniai glifai be Unicode kodinio taško išvedami per sintetinių kodinių taškų kelią su ToUnicode atvirkštiniais susiejimais, todėl šriftai, kurių kontekstiniai Arabic glifai gyvena už cmap ribų, vis tiek gali būti įterpti ir teisingai kopijuojami
Nustačius sfArabicGSUB, v2.85.0 statinis 4 pozicijų arabų formuotuvas apeinamas implicitiškai - kviestinės pusės, kurioms reikia, kad statinis formuotuvas toliau tvarkytų už šrifto GSUB deklaruojamų ribų esančius kodo taškus, turėtų palikti sfArabicGSUB išjungtą
sfStandardLigatures / sfContextualLigatures - Phase 8b (v2.119.65) Kai nustatytas sfStandardLigatures, lotyniškos Standard Ligatures automatiškai sujungiamos naudojant šrifto liga funkciją. ApplyLatinLigatureRefinement taiko Alphabetic Presentation Forms bloką (U+FB00-FB4F) - paprastai FB00 ff, FB01 fi, FB02 fl, FB03 ffi, FB04 ffl, FB05 long-s + t, FB06 st. sfContextualLigatures prideda antrą praėjimą šrifto clig funkcijai. Abu praėjimai naudoja tą patį reverse-cmap mechanizmą kaip sfArabicGSUB ir išveda 7 naujus ToUnicode CMap atvirkštinio susiejimo įrašus (FB00-FB06), kad vartotojo skaitytuvo kopijavimas / įklijavimas susietų ligatūrą atgal su šaltinio raidėmis
sfContextualAlternates - GSUB 'rclt' (v2.119.66) Kai nustatytas sfContextualAlternates, taikoma šrifto rclt (Required Contextual Alternates) funkcija. ApplyArabicGSUBContextualRefinement naudoja v2.119.47 ApplyContextualSubst įėjimo tašką ir apdoroja kintamo ilgio N-to-M išvestį (pakeitimas įtvirtinamas tik tada, kai kiekvienas pakaitinis GID yra pasiekiamas per reverse cmap). Reverse cmap diapazonas išplečiamas iki FB00-FDFF + FE70-FEFF, kad apimtų lotyniškas, Arabic ir Hebrew Presentation Forms
Canonical users of
sfIndicShaping - Phase 8e (v2.119.67) Kai nustatytas sfIndicShaping, v2.119.55 Devanagari galimybė ApplyDevanagariReorder iš rankinio metodo tampa automatiniu išankstiniu praėjimu, taikomu trijų BuildUnicode*FieldContent pagalbinių funkcijų viduje. Devanagari atkarpose Repha (Ra + Halant klasterio pradžioje) perkeliamas į post-base poziciją, o priešpriešinis I-matra (U+093F) pastumiamas prieš klasterio bazinį priebalsį, kad vartotojo skaitytuvo GSUB variklis skiemenį paimtų teisinga atvaizdavimo tvarka. Kiti Indic pertvarkymai (above-base / below-base matra, conjunct formavimas) lieka šrifto GSUB viduje
Advance-query support (v2.119.64 / Phase 8c.5) Priedo API pateikia talpinamą
function GetCodepointAdvance(CP: Cardinal): Single;
Grąžina iš hmtx gautą poslinkio plotį kaip em dalį cmap išspręstam glifui ties
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
Scope and limitations Pasirenkama grandinė sąmoningai yra priedas prie statinio post-pass formuotojo - esamiems kūrėjams elgesys nesikeičia, kol jie jos neįjungia. Numatytoji [] rinkinio būsena yra saugus pasirinkimas baitų stabilumo regresijoms. Šriftai be prašomų GSUB funkcijų lentelių išveda saugų neveikiantį rezultatą (kūrėjas nemato taikomo pakeitimo, nekyla jokių išimčių)
Dabartinis formavimo API žemėlapis Dabartinė grandinė jau neapsiriboja tik pakeitimais: sfKerning taiko GPOS porinį kerningą, sfMarkPositioning taiko Mark-to-Base ir Mark-to-Mark poslinkius, sfMarkToLigature taiko Mark-to-Ligature išdėstymą, sfCursiveAttachment taiko kursyvinės įvedimo / išvedimo inkarų lygiavimą, sfTibetanShaping taiko Tibetan GSUB formavimą, sfMongolianShaping taiko Mongolian pozicines formas, o sfIndicGSUB po skiemenų pertvarkymo taiko Indic GSUB funkcijų grandinę. Žr. ShapingFeatures, GPOS metodus ir Indic formavimo metodus Naujesni papildymai prideda
See also: OpenType GSUB Substitution Engine, Arabic / Persian / Urdu Shaping Support, Syriac / Mongolian / Devanagari Shaping, THotPDF.AssignSyntheticCodepointForGID, CFF / OpenType Font Subsetting |