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