Automatic Shaping Pipeline (Phase 8)

Opt-in producer-side GSUB pipeline (v2.119.59 - v2.120.10)

 

Arabic Shaping  Multi-Script Shaping  GSUB Engine

Automatski pipeline oblikovanja podiže OpenType GSUB engine iz capability-only query surface u feature na strani proizvođača koji se automatski primenjuje dok se tekst emituje u PDF tokove sadržaja. Pozivaoci uključuju određene GSUB funkcije kroz tipizirani skup (ShapingFeatures: THPDFShapingFeatures), a HotPDF se stara o pokretanju odgovarajućih zamena, označavanju zamenskih glifova u ugrađeni font subset i emitovanju ToUnicode CMap unosa za obrnuto mapiranje potrebnih za pristupačnost

 

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 ...;

 

Podrazumevano je [] (prazan skup), što čuva byte-identičan izlaz za pozivaoce koji zavise od statičkog post-pass oblikovača v2.119.32-58. Postavljanje jedne ili više zastavica podiže mehanizam u automatski režim za odgovarajuće funkcije

 

sfArabicGSUB - native Arabic GSUB shaping (v2.185.0)

Kada je sfArabicGSUB postavljen, HotPDF mapira logički Arabic niz na osnovne GID-ove glifova, primenjuje pozicione init, medi, fina i isol pretrage registrovanog fonta na pozicijama spajanja izabranim za svako slovo, a zatim primenjuje rlig, calt i rclt nad oblikovanim nizom. Zamenski glifovi koji nemaju Unicode codepoint emituju se kroz putanju sintetičkog codepointa sa ToUnicode reverse mapiranjem, tako da fontovi čiji kontekstualni Arabic glifovi žive van cmap-a i dalje mogu da se ugrade i pravilno kopiraju

 

Postavljanje sfArabicGSUB implicitno zaobilazi statički 4-pozicioni oblikovač za arapski iz v2.85.0 - pozivaoci kojima je potreban statički oblikovač da nastavi da obrađuje kodpoente izvan onoga što fontov GSUB objavljuje treba da ostave sfArabicGSUB isključen

 

sfStandardLigatures / sfContextualLigatures - Phase 8b (v2.119.65)

Kada je sfStandardLigatures postavljen, Latin Standard Ligatures se automatski prelamaju pomoću fontove osobine liga. ApplyLatinLigatureRefinement cilja blok Alphabetic Presentation Forms (U+FB00-FB4F) - obično FB00 ff, FB01 fi, FB02 fl, FB03 ffi, FB04 ffl, FB05 long-s + t, FB06 st. sfContextualLigatures dodaje drugi prolaz za fontovu osobinu clig. Oba prolaza koriste isti reverse-cmap mehanizam kao sfArabicGSUB i emituju 7 novih ToUnicode CMap unosa za obrnuto mapiranje (FB00-FB06) tako da kopiranje / lepljenje na strani čitača razrešava ligaturu nazad na izvorna slova

 

sfContextualAlternates - GSUB 'rclt' (v2.119.66)

Kada je sfContextualAlternates postavljen, primenjuje se fontova osobina rclt (Required Contextual Alternates). ApplyArabicGSUBContextualRefinement koristi v2.119.47 ulaznu tačku ApplyContextualSubst i obrađuje izlaz promenljive dužine N-to-M (zamena se potvrđuje samo kada je svaki zamenski GID dostupan kroz reverse cmap). Opseg reverse cmap-a proširen je na FB00-FDFF + FE70-FEFF da pokrije Latin + Arabic + Hebrew Presentation Forms

 

Canonical users of rclt: Arabic init / medi / fina / isol when the font drives positional shaping through GSUB instead of through Unicode Presentation Forms codepoints; certain Latin sequence disambiguation rules; Indic shaping pres / blws / psts / half / pstf / cjct features when registered as rclt by the font designer.

 

sfIndicShaping - Phase 8e (v2.119.67)

Kada je sfIndicShaping postavljen, v2.119.55 Devanagari mogućnost ApplyDevanagariReorder se podiže iz ručne metode u automatski pre-prolaz primenjen unutar tri pomoćnika BuildUnicode*FieldContent. Devanagari nizovi dobijaju Repha (Ra + Halant na početku klastera) pomeren na poziciju posle baze, a pre-base I-matra (U+093F) pomera se ispred osnovnog suglasnika klastera, tako da GSUB engine čitača preuzima slog u ispravnom redosledu prikaza. Ostala Indic preuređivanja (matra iznad baze / ispod baze, formiranje konjunkata) ostaju u fontovom GSUB-u

 

Advance-query support (v2.119.64 / Phase 8c.5)

Prateći API izlaže keširanu vrednost /W em-frakcije kako bi pozivaoci mogli ispravno da izračunaju prelom reda prilikom emitovanja GSUB-zamenjenih glifova

 

function GetCodepointAdvance(CP: Cardinal): Single;

 

Vraća širinu pomaka izvedenu iz hmtx kao deo em jedinice za cmap-rešeni glif na CP. Izdanje je takođe ispravilo CodeUnitAdvance da Arabic Presentation Forms (U+FB50-FDFF + U+FE70-FEFF) klasifikuje kao NARROW umesto WIDE (heuristički fallback je bio pogrešan pre 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 rlig; Phase 8c.3 (v2.119.61) ToUnicode reverse mapping; Phase 8c.4 (v2.119.62) Bismillah; Phase 8c.5 (v2.119.64) advance query + heuristic fix; Phase 8c.6 (v2.119.68) PUA synthetic codepoint emit; Phase 8d was rolled into 8c sub-phases; Phase 8e (v2.119.67) Devanagari auto-reorder. With v2.119.68 the Phase 8 capability matrix is closed; further refinements (additional Indic scripts, OpenType GPOS positioning, BiDi resolution) are tracked under separate roadmap items.

 

Scope and limitations

Opt-in pipeline je namerno aditivan u odnosu na statički post-pass oblikovač - postojeći pozivaoci ne vide promenu ponašanja osim ako se ne uključe. Podrazumevani skup [] je bezbedan izbor za byte-stable regresiju. Fontovi bez traženih GSUB tabela funkcija proizvode bezbedan no-op izlaz (pozivaoci ne vide primenjenu zamenu i nema izuzetaka)

 

Trenutna mapa API-ja za oblikovanje

Trenutni pipeline više nije samo zamena: sfKerning primenjuje GPOS pair kerning, sfMarkPositioning primenjuje Mark-to-Base i Mark-to-Mark pomeraje, sfMarkToLigature primenjuje Mark-to-Ligature postavljanje, sfCursiveAttachment primenjuje poravnanje ulaznih/izlaznih anchor-ova kurzive, sfTibetanShaping primenjuje Tibetan GSUB oblikovanje, sfMongolianShaping primenjuje Mongolian pozicione oblike, a sfIndicGSUB primenjuje Indic GSUB lanac funkcija posle rearanžiranja slogova. Pogledajte ShapingFeatures, GPOS methods i Indic shaping methods

Nedavna proširenja dodaju sfLocalizedForms za locl, calt kroz ApplyGSUBContextualFeature, kontekstualni i vertikalni GPOS kerning, nativno emitovanje arapskih GSUB kontekstualnih glifova i putanje za N'Ko, Adlam, Thai/Lao, Hebrew i Javanese. Videti metode za preprocesiranje oblikovanja pisama

 

See also: OpenType GSUB Substitution Engine, Arabic / Persian / Urdu Shaping Support, Syriac / Mongolian / Devanagari Shaping, THotPDF.AssignSyntheticCodepointForGID, CFF / OpenType Font Subsetting