Automatic Shaping Pipeline (Phase 8)

Izbirni proizvajalski cevovod GSUB (v2.119.59 - v2.120.10)

 

Arabic Shaping  Multi-Script Shaping  GSUB Engine

Samodejni cevovod oblikovanja povzdigne pogon OpenType GSUB iz površine za poizvedbe o zmožnostih v proizvajalno funkcijo, ki se samodejno uporabi, ko se besedilo izpisuje v tokove vsebine PDF. Klicatelji vklopijo posamezne funkcije GSUB prek tipiziranega nabora (ShapingFeatures: THPDFShapingFeatures), HotPDF pa poskrbi za izvajanje pravih zamenjav, označevanje nadomestnih glifov v vdelanem podnaboru pisave in izpis obratnih preslikav ToUnicode CMap, potrebnih za dostopnost

 

Izbirni okvir (v2.119.59 / faza 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 ...;

 

Privzeta vrednost je [] (prazen nabor), kar ohrani bajtno enak izhod za klicatelje, ki so odvisni od statičnega oblikovalnika po obdelavi iz v2.119.32-58. Nastavitev ene ali več zastavic prestavi pogon v samodejni način za ustrezne funkcije

 

sfArabicGSUB - native Arabic GSUB shaping (v2.185.0)

Ko je nastavljena sfArabicGSUB, HotPDF logični arabski tok preslika v osnovne identifikatorje glifov, na položajih povezovanja, izbranih za vsako črko, uporabi položajna iskanja init, medi, fina in isol registrirane pisave, nato pa nad oblikovanim tokom uporabi še rlig, calt in rclt. Nadomestni glifi brez kodne točke Unicode se izpišejo prek poti sintetičnih kodnih točk z obratnimi preslikavami ToUnicode, zato je mogoče tudi pisave, katerih kontekstualni arabski glifi so zunaj cmap, še vedno vgraditi in pravilno kopirati

 

Nastavitev sfArabicGSUB implicitno obide statični 4-položajni oblikovalnik za arabščino iz v2.85.0 - klicatelji, ki želijo, da statični oblikovalnik še naprej obravnava kodne točke zunaj tistega, kar deklarira GSUB pisave, naj sfArabicGSUB pustijo izklopljen

 

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

Ko je nastavljena sfStandardLigatures, se latinske standardne ligature samodejno zložijo s funkcijo liga pisave. ApplyLatinLigatureRefinement cilja blok Alphabetic Presentation Forms (U+FB00-FB4F) - običajno FB00 ff, FB01 fi, FB02 fl, FB03 ffi, FB04 ffl, FB05 long-s + t, FB06 st. sfContextualLigatures doda drugi prehod za funkcijo clig pisave. Oba prehoda uporabljata isti mehanizem povratne preslikave cmap kot sfArabicGSUB in ustvarita 7 novih vnosov za obratno preslikavo ToUnicode CMap (FB00-FB06), tako da kopiranje / lepljenje na strani bralnika ligaturo razreši nazaj v izvorne črke

 

sfContextualAlternates - GSUB 'rclt' (v2.119.66)

Ko je nastavljena sfContextualAlternates, se uporabi funkcija rclt (Required Contextual Alternates) pisave. ApplyArabicGSUBContextualRefinement uporablja vstopno točko ApplyContextualSubst iz v2.119.47 in obravnava izhod spremenljive dolžine N-na-M (zamenjava se zapiše šele, ko je vsak nadomestni GID dosegljiv prek povratne cmap). Obseg povratne cmap je razširjen na FB00-FDFF + FE70-FEFF, da pokrije latinske, arabske in hebrejske predstavitvene oblike

 

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)

Ko je nastavljena sfIndicShaping, se zmožnost Devanagari ApplyDevanagariReorder iz v2.119.55 iz ročne metode spremeni v samodejni predhodni prehod, uporabljen znotraj treh pomočnikov BuildUnicode*FieldContent. Toki Devanagari premaknejo Repha (Ra + Halant na začetku gruče) v položaj za osnovnim znakom, predosnovno I-matro (U+093F) pa pred osnovni soglasnik gruče, tako da pogon GSUB na strani bralnika zgrabi zlog v pravilnem vrstnem redu upodabljanja. Drugi preureditveni postopki Indic (matra nad osnovo / pod osnovo, tvorba zvezkov) ostanejo v GSUB pisave

 

Podpora za poizvedbo napredka (v2.119.64 / faza 8c.5)

Spremljevalni API izpostavi predpomnjeni em-delež /W, tako da lahko klicatelji pravilno izračunajo prelamljanje besed pri izpisu glifov, zamenjanih prek GSUB

 

function GetCodepointAdvance(CP: Cardinal): Single;

 

Vrne naprej pridobljeno širino iz hmtx kot delež em za glif, razrešen prek cmap pri CP. Ista izdaja je tudi popravila CodeUnitAdvance, da oblike Arabic Presentation Forms (U+FB50-FDFF + U+FE70-FEFF) razvršča kot NARROW namesto WIDE (hevristični povratni način je bil napačen pred 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

 

Zaključek načrta Phase 8

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.

 

Obseg in omejitve

Izbirni cevovod je namerno le dodatek k statičnemu oblikovalniku naknadne obdelave - obstoječi klicatelji ne dobijo spremembe vedenja, razen če ga izrecno vključijo. Privzeti nabor [] je varna izbira za bajtno stabilen regresijski preizkus. Pisave brez zahtevanih tabel funkcij GSUB vrnejo varen izhod brez učinka (klicatelji ne vidijo uporabljene nobene zamenjave in ni sproženih izjem)

 

Trenutni zemljevid API za oblikovanje

Trenutni cevovod ni več omejen na zamenjave: sfKerning uporabi parno zgoščevanje GPOS, sfMarkPositioning uporabi odmike Mark-to-Base in Mark-to-Mark, sfMarkToLigature uporabi namestitev Mark-to-Ligature, sfCursiveAttachment uporabi poravnavo vstopnih in izstopnih sidrišč kurzive, sfTibetanShaping uporabi tibetansko oblikovanje GSUB, sfMongolianShaping uporabi mongolske položajne oblike, sfIndicGSUB pa uporabi verigo funkcij Indic GSUB po preureditvi zloga. Glejte ShapingFeatures, metode GPOS in metode oblikovanja Indic

Nedavne dopolnitve dodajo sfLocalizedForms za locl, calt prek ApplyGSUBContextualFeature, kontekstualno in navpično zgoščevanje GPOS, izpis kontekstualnih glifov arabščine prek GSUB ter poti za N'Ko, Adlam, Thai/Lao, Hebrew in Javanese. Glejte predobdelovalne metode oblikovanja skriptov

 

Glej tudi: Pogon zamenjav OpenType GSUB, Podpora za oblikovanje arabščine / perzijščine / urduja, Oblikovanje sirskega, mongolskega in devanagarskega pisma, THotPDF.AssignSyntheticCodepointForGID, Delitev pisav CFF / OpenType