|
Syriac / Mongolian / Devanagari Shaping Support Multi-script capability surfaces (v2.119.53 - v2.119.55)
|
Arabic Shaping Auto Shaping Pipeline GSUB Engine |
|
HotPDF izpostavlja vmesnike zmožnosti za joining-class / positional-analysis / Indic syllabic-category za tri kompleksne pisave poleg arabščine: sirijsko (U+0700-U+074F), mongolsko (U+1800-U+18AF) in devanagari (U+0900-U+097F). Vsaka zmožnost klicatelju omogoča, da pisavo vodi skozi obstoječi motor OpenType GSUB za pravilno oblikovanje, medtem ko zahtevno delo (zaznavanje mej skupkov, razreševanje BiDi, pozicioniranje GPOS) ostaja zunaj obsega HotPDF
Zmožnost oblikovanja sirščine (v2.119.53) Dve novi metodi izpostavljata vezavno vedenje sirščine:
function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass; function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Sirščina sledi enakemu štirirazrednemu okviru Right-Joining / Dual-Joining / Transparent / Non-Joining kot arabščina; GetSyriacJoiningClass razvrsti vsako kodno točko v bloku U+0700-U+074F glede na lastnost vezave Unicode. GetSyriacPosition prehodi sirijski niz in vsak znak razreši v izoliran / začetni / sredinski / končni položaj glede na razrede vezave njegovih neposrednih sosedov
Za razliko od arabščine blok sirščine nima Presentation Forms, predkodiranih v Unicode - ne obstaja sirijski ekvivalent arabskih blokov U+FB50-FDFF / U+FE70-FEFC. Potrošniki morajo zato oblikovanje sirščine izvajati prek fontovih GSUB iskanj (običajno init / medi / fina / isol + rlig) in ne s prepisovanjem kodnih točk. Zgornja plast zmožnosti klicatelju poda oznake položajev, ki jih potrebuje za poizvedbo po pravem GSUB zmožnosti za vsak glif
Zmožnost oblikovanja mongolščine (v2.119.54) Dve vzporedni metodi za mongolščino:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Pokritost vključuje osnovno mongolščino (U+1820-U+1842), Todo (U+1843-U+1877), Sibe (U+1880-U+18A8), Mandžurščino in razširitve Ali Gali. Izbirniki različic FVS1 / FVS2 / FVS3 (U+180B-U+180D), mehki vezaj NIRUGU (U+180A) in samoglasniški znaki Ali Gali so vsi razvrščeni kot Transparent (razred T), zato sodelujejo pri vezavi brez prekinitve prehoda
Tako kot sirščina tudi mongolščina nima Presentation Forms, predkodiranih v Unicode. Tradicionalna navpična postavitev mongolščine, zapletena pravila variacij oblik črk in izbira oblike na osnovi FVS naj bi se vsi izvajali prek fontovih GSUB iskanj (običajno init / medi / fina / isol + ccmp / rlig / locl); plast zmožnosti klicatelju poda oznake položajev, potrebne za poizvedbo po teh zmožnostih
Zmožnost oblikovanja Devanagari Indic (v2.119.55) Devanagari je v osnovi drugačen od arabščine / sirščine / mongolščine - gre za indijsko pisavo abugida, kjer je smiselna enota zlogovni skupek (akšara), ne posamezna črka, in je izrisani vrstni red glifov znotraj skupka pogosto drugačen od logičnega vrstnega reda Unicode. Dve metodi izpostavljata indijsko plast zmožnosti Devanagari:
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
GetDevanagariCategory razvrsti vsako kodno točko v U+0900-U+097F v eno od 13 indijskih zlogovnih kategorij (Base / Consonant / Vowel / Independent Vowel / Vowel Mark / Pre-base Matra / Above-base Matra / Below-base Matra / Halant Virama / Repha / Anusvara / Visarga / Other), tako da klicatelji lahko zaznajo meje zlogov in prepoznajo, kateri položaji v vsakem skupu potrebujejo preurejanje
ApplyDevanagariReorder je predhodni prehod, ki prehodi vhodni niz in uporabi dve glavni pravili preurejanja Devanagari: (1) Repha (Ra + Halant na začetku zlogovnega skupka) se premakne za osnovni soglasnik skupka, da se izriše kot superskriptni kavelj; (2) Pre-base I-matra (U+093F DEVANAGARI VOWEL SIGN I) se premakne pred osnovni soglasnik skupka, da se izriše kot levi kavelj. Druga indijska preurejanja (above-base matra, below-base matra, tvorba veznikov) prepusti fontovemu motorju GSUB, ker zahtevajo fontu specifične tabelice iskanja
Samodejna integracija (v2.119.67): kadar je sfIndicShaping v PDF.ShapingFeatures, se ApplyDevanagariReorder samodejno uporabi kot predhodni prehod znotraj treh pomočnikov BuildUnicode*FieldContent. Bralnikov motor GSUB nato prevzame zlog v pravilnem vrstnem redu in uporabi lastna kontekstualna pravila oblikovanja. Glejte Automatic Shaping Pipeline
Tipičen potek dela (sirščina)
PDF.RegisterUnicodeTTF('Estrangelo', 'SyrCOMEdessa.otf'); PDF.SetGSUBScript('syrc'); // see GSUB engine doc for i := 0 to Length(Run) - 1 do begin Pos := PDF.GetSyriacPosition(Run, i); // init / medi / fina / isol // query GSUB for the position-appropriate substitute glyph // emit + MarkUnicodeGlyphUsed end;
Tipičen potek dela (Devanagari s samodejnim preurejanjem)
PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf'); PDF.ShapingFeatures := [sfIndicShaping]; // auto Repha + I-matra reorder PDF.CurrentPage.SetFont('NotoDeva', [], 14); PDF.CurrentPage.UnicodeTextOut(50, 700, 0, UnicodeString(#$0939#$093F#$0928#$094D#$0926#$0940)); // "Hindi"
Pomočniki za podnabor in ekstrakcijo Unicode RegisterToUnicodeReverseMapping zapiše izvorne kodne točke za izpis oblikovanih ali sintetičnih glifov. ClearToUnicodeReverseMappings ponastavi tabelo, ToUnicodeReverseMappingCount poroča o njeni velikosti, GetUnicodeGlyphForCodepoint vrne registriran ID glifa pisave za kodno točko Unicode, EnableShapingFeatureForSubset pa nadomestne glife iz zmožnosti GSUB označi za vključitev v vdelani podnabor
Obseg in omejitve Trenutna integracija na strani proizvajalca Sirijsko, mongolsko, tibetansko in indijsko oblikovanje imajo zdaj izrecne strani z referenco API. Sirščino je mogoče vklopiti prek AutoShapeSyriac, mongolščino prek sfMongolianShaping, tibetanščino prek sfTibetanShaping, indijsko preurejanje prek sfIndicShaping, polno indijsko oblikovanje GSUB pa prek sfIndicGSUB. Podrobne vstopne točke so dokumentirane v metodah oblikovanja Tibetan/Mongolian/Syriac in metodah oblikovanja Indic Trenutni obseg zajema tudi N'Ko in Adlam kot kurzivne pisave RTL, razporeditev SARA AM in tonov za tajščino/laoščino, razporeditev niqqud za hebrejščino ter predbazne znake za javanščino. Ti poti so dokumentirani v metodah predobdelave oblikovanja pisave
Glejte tudi: Podpora za oblikovanje arabščine / perzijščine / urdujščine, Automatic Shaping Pipeline (Phase 8), OpenType GSUB Substitution Engine, THotPDF.AssignSyntheticCodepointForGID |