Automatic Shaping Pipeline (Phase 8)

Opt-in GSUB pipeline na strani proizvođača (v2.119.59 - v2.120.10)

 

Arabic Shaping  Multi-Script Shaping  GSUB Engine

Automatski shaping pipeline podiže OpenType GSUB engine iz površine za upite samo o mogućnostima u značajku na strani proizvođača koja se automatski primjenjuje dok se tekst emitira u PDF content streamove. Pozivatelji uključuju određene GSUB značajke kroz tipizirani skup (ShapingFeatures: THPDFShapingFeatures), a HotPDF se brine za pokretanje pravih zamjena, označavanje zamjenskih glifova u ugrađeni subset fonta i emitiranje ToUnicode CMap unosa za obrnuto preslikavanje potrebnih za pristupačnost

 

Opt-in framework (v2.119.59 / Phase 8a)

Nova enum i novo svojstvo kontroliraju koje se automatske zamjene izvode tijekom emitiranja teksta

 

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

 

Zadano je [] (prazan skup), što čuva byte-identičan izlaz za pozivatelje koji ovise o statičkom post-pass shaperu iz v2.119.32-58. Postavljanje jedne ili više zastavica prebacuje engine u automatski način rada za odgovarajuće značajke

 

sfArabicGSUB - izvorno arapsko GSUB oblikovanje (v2.185.0)

Kada je postavljen sfArabicGSUB, HotPDF mapira logički arapski niz na osnovne GID-ove glifova, primjenjuje pozicijske pretrage fonta init, medi, fina i isol na točkama spajanja odabranima za svako slovo, a zatim primjenjuje rlig, calt i rclt nad oblikovanim nizom. Zamjenski glifovi koji nemaju Unicode codepoint emitiraju se kroz putanju sintetičkih codepointova s ToUnicode obrnuta preslikavanja, tako da se fontovi čiji kontekstualni arapski glifovi žive izvan cmapa i dalje mogu ugraditi i ispravno kopirati

 

Uključivanje sfArabicGSUB implicitno zaobilazi statički arapski shaper s četiri pozicije iz v2.85.0 - pozivatelji kojima treba da statički shaper i dalje obrađuje codepointove izvan onoga što fontov GSUB deklarira trebaju ostaviti sfArabicGSUB isključen

 

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

Kada je postavljen sfStandardLigatures, latinske standardne ligature automatski se spajaju pomoću fontovske značajke 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 fontovsku značajku clig. Oba prolaza koriste isti reverse-cmap mehanizam kao sfArabicGSUB i emitiraju 7 novih ToUnicode CMap unosa za obrnuto preslikavanje (FB00-FB06) tako da copy / paste na strani potrošača razrješava ligaturu natrag na izvorna slova

 

sfContextualAlternates - GSUB 'rclt' (v2.119.66)

Kada je postavljen sfContextualAlternates, primjenjuje se fontova rclt značajka (Required Contextual Alternates). ApplyArabicGSUBContextualRefinement koristi ulaznu točku ApplyContextualSubst iz v2.119.47 i obrađuje varijabilno dulji N-to-M izlaz (zamjena se potvrđuje samo kada je svaki zamjenski GID dohvatljiv kroz reverse cmap). Raspon reverse cmap proširen je na FB00-FDFF + FE70-FEFF kako bi pokrio Latin + Arabic + Hebrew Presentation Forms

 

Tipični korisnici rclt su arapski init / medi / fina / isol kada font vodi pozicijsko oblikovanje kroz GSUB umjesto kroz Unicode Presentation Forms codepointove; određena pravila za razdvajanje latinskih nizova; Indic shaping pres / blws / psts / half / pstf / cjct značajke kada ih dizajner fonta registrira kao rclt

 

sfIndicShaping - faza 8e (v2.119.67)

Kada je postavljen sfIndicShaping, v2.119.55 Devanagari mogućnost ApplyDevanagariReorder iz ručne metode postaje automatski pre-pass koji se primjenjuje unutar triju pomoćnih funkcija BuildUnicode*FieldContent. Devanagari nizovi dobivaju Repha (Ra + Halant na početku klastera) premješten u post-base položaj, a pre-base I-matra (U+093F) premještena ispred osnovnog suglasnika klastera, tako da GSUB engine čitača potrošača preuzima slog u ispravnom redoslijedu renderiranja. Ostala Indic premještanja (matra iznad baze / ispod baze, tvorba konjunkta) ostaju u GSUB-u fonta

 

Podrška za upit napredovanja (v2.119.64 / faza 8c.5)

Prateći API izlaže predmemoriranu em-frakciju iz /W tako da pozivatelji mogu ispravno izračunati prijelom riječi pri emitiranju GSUB-zamijenjenih glifova

 

function GetCodepointAdvance(CP: Cardinal): Single;

 

Vraća širinu napredovanja izvedenu iz hmtx-a kao dio em-a za glif razriješen kroz cmap na CP. Izdanje je također popravilo CodeUnitAdvance tako da arapske Presentation Forms (U+FB50-FDFF + U+FE70-FEFF) klasificira kao NARROW umjesto WIDE (heuristički fallback prije v2.65 nije bio točan)

 

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

 

Zatvaranje plana za fazu 8

Faza 8a (v2.119.59) opt-in okvir + arapska mogućnost; faza 8b (v2.119.65) latinske standardne ligature; faza 8c.1 (v2.119.60) Allah; faza 8c.2 (v2.119.63) GSUB rlig na razini GID-a; faza 8c.3 (v2.119.61) ToUnicode obrnuto preslikavanje; faza 8c.4 (v2.119.62) Bismillah; faza 8c.5 (v2.119.64) upit napredovanja + ispravak heuristike; faza 8c.6 (v2.119.68) emitiranje sintetičkih codepointova PUA; faza 8d je uklopljena u podfaze 8c; faza 8e (v2.119.67) automatsko premještanje Devanagarija. S v2.119.68 matrica mogućnosti faze 8 je zatvorena; daljnja poboljšanja (dodatni Indic skriptovi, OpenType GPOS pozicioniranje, BiDi razrješenje) prate se kao zasebne stavke plana

 

Opseg i ograničenja

Opt-in pipeline je namjerno aditivan u odnosu na statički post-pass shaper - postojeći pozivatelji ne vide promjenu ponašanja osim ako ga ne uključe. Zadani skup [] siguran je izbor za byte-stabilnu regresiju. Fontovi bez traženih GSUB tablica proizvode siguran no-op izlaz (pozivatelji vide da nije primijenjena zamjena, bez iznimaka)

 

Trenutačna mapa API-ja za oblikovanje

Trenutačni pipeline više nije samo zamjenski: sfKerning primjenjuje GPOS pair kerning, sfMarkPositioning primjenjuje Mark-to-Base i Mark-to-Mark pomake, sfMarkToLigature primjenjuje Mark-to-Ligature pozicioniranje, sfCursiveAttachment primjenjuje poravnanje cursive entry/exit sidra, sfTibetanShaping primjenjuje Tibetan GSUB oblikovanje, sfMongolianShaping primjenjuje Mongolian pozicijske oblike, a sfIndicGSUB primjenjuje lanac Indic GSUB značajki nakon premještanja slogova. Pogledajte ShapingFeatures, GPOS methods i Indic shaping methods

Nedavni dodaci uključuju sfLocalizedForms za locl, calt kroz ApplyGSUBContextualFeature, kontekstualni i vertikalni GPOS kerning, izvorno arapsko GSUB emitiranje kontekstualnih glifova te putanje za N'Ko, Adlam, Thai/Lao, hebrejski i Javanese. Pogledajte metode predobrade skript oblikovanja

 

Vidi također: OpenType GSUB Substitution Engine, Oblikovanje arapskog / perzijskog / urdskog, Oblikovanje sirijskog / mongolskog / devanagarskog, THotPDF.AssignSyntheticCodepointForGID, CFF / OpenType podskup fontova