|
Syriac / Mongolian / Devanagari Shaping Support Multi-script capability surfaces (v2.119.53 - v2.119.55)
|
Arabic Shaping Auto Shaping Pipeline GSUB Engine |
|
HotPDF izlaže površine mogućnosti za klasu povezivanja / positional analizu / Indic slogovne kategorije za tri složena pisma van arapskog: sirijski (U+0700-U+074F), mongolski (U+1800-U+18AF) i devanagari (U+0900-U+097F). Svaka mogućnost omogućava pozivaocima da upravljaju pismom kroz postojeći OpenType GSUB mehanizam za ispravno oblikovanje, uz to da teži deo posla (detekcija granica klastera, BiDi razrešavanje, GPOS pozicioniranje) ostaje van opsega HotPDF-a
Syriac shaping capability (v2.119.53) Two new methods expose Syriac's joining behavior:
function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass; function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Sirijski prati isti okvir od četiri klase Right-Joining / Dual-Joining / Transparent / Non-Joining kao arapski; GetSyriacJoiningClass klasifikuje svaki kodpoent u bloku U+0700-U+074F prema Unicode osobini povezivanja. GetSyriacPosition prolazi kroz sirijski niz i razrešava svaki znak u njegov izolovani / početni / srednji / završni položaj na osnovu klasa povezivanja njegovih neposrednih suseda
Za razliku od arapskog, sirijski blok nema Presentation Forms unapred kodirane u Unicode - ne postoji sirijski ekvivalent arapskih Presentation Forms blokova U+FB50-FDFF / U+FE70-FEFC. Potrošači zato moraju da upravljaju sirijskim oblikovanjem kroz GSUB pretrage definisane fontom (obično init / medi / fina / isol + rlig) umesto prepisivanja kodpoenata. Gornji sloj mogućnosti daje pozivaocima oznake položaja koje su im potrebne da za svaki glif upitaju odgovarajuću GSUB funkciju
Mongolian shaping capability (v2.119.54) Two parallel methods for Mongolian:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Pokrivenost uključuje osnovni mongolski (U+1820-U+1842), Todo (U+1843-U+1877), Sibe (U+1880-U+18A8), Manchu i Ali Gali proširenja. Variation Selectors FVS1 / FVS2 / FVS3 (U+180B-U+180D), meki crtica NIRUGU (U+180A) i Ali Gali samoglasnički znakovi svi su klasifikovani kao Transparent (T-klasa) tako da učestvuju u povezivanju bez prekidanja prolaska
Kao i sirijski, mongolski nema Presentation Forms unapred kodirane u Unicode. Tradicionalni vertikalni raspored mongolskog, složena pravila varijacije oblika slova i izbor oblika vođen FVS-om očekuju se da budu upravljani GSUB pretragama definisanim fontom (obično init / medi / fina / isol + ccmp / rlig / locl); sloj mogućnosti daje pozivaocima oznake položaja potrebne za upit tih funkcija
Devanagari Indic shaping capability (v2.119.55) Devanagari se suštinski razlikuje od arapskog / sirijskog / mongolskog - to je Indic abugida pismo u kome je smisleni element slogovni klaster (akšara), a ne jedno slovo, i prikazani redosled glifova unutar klastera često je drugačiji od logičkog Unicode redosleda. Dve metode izlažu Devanagari Indic sloj mogućnosti
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
GetDevanagariCategory klasifikuje svaki kodpoent u U+0900-U+097F u jednu od 13 Indic slogovnih kategorija (Base / Consonant / Vowel / Independent Vowel / Vowel Mark / Pre-base Matra / Above-base Matra / Below-base Matra / Halant Virama / Repha / Anusvara / Visarga / Other) tako da pozivaoci mogu da otkriju granice slogova i identifikuju koje pozicije unutar svakog klastera zahtevaju preuređivanje
ApplyDevanagariReorder je pre-pass koji prolazi kroz ulazni niz i primenjuje dva glavna Devanagari pravila preuređivanja: (1) Repha (Ra + Halant na početku slogovnog klastera) pomera se na poziciju iza osnovnog suglasnika klastera kako bi se prikazala kao nadrečeni kuk; (2) Pre-base I-matra (U+093F DEVANAGARI VOWEL SIGN I) pomera se ispred osnovnog suglasnika klastera kako bi se prikazala kao levi kuk. Ostala Indic preuređivanja (above-base matra, below-base matra, formiranje konjunkata) prepuštaju se GSUB mehanizmu fonta jer zahtevaju tabelu pretrage specifičnu za font
Automatska integracija (v2.119.67): kada je sfIndicShaping u PDF.ShapingFeatures, ApplyDevanagariReorder se automatski primenjuje kao pre-pass unutar tri BuildUnicode*FieldContent pomoćnika. GSUB mehanizam čitača tada preuzima slog u ispravnom redosledu i primenjuje sopstvena kontekstualna pravila oblikovanja. Videti Automatic Shaping Pipeline
Typical workflow (Syriac)
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;
Typical workflow (Devanagari with automatic reorder)
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"
Unicode Subset and Extraction Helpers RegisterToUnicodeReverseMapping beleži izvorne kodpoente za oblikovani ili sintetički izlaz glifova. ClearToUnicodeReverseMappings poništava tabelu, ToUnicodeReverseMappingCount prijavljuje njenu veličinu, GetUnicodeGlyphForCodepoint vraća registrovani ID glifa fonta za Unicode kodpoent, a EnableShapingFeatureForSubset označava zamenjene glifove iz GSUB funkcije za uključivanje u ugrađeni podskup
Scope and limitations Trenutna integracija na strani proizvođača Sirijski, mongolski, tibetanski i Indic tokovi oblikovanja sada imaju posebne API referentne stranice. Sirijski može da se uključi preko AutoShapeSyriac, mongolski preko sfMongolianShaping, tibetanski preko sfTibetanShaping, Indic preuređivanje preko sfIndicShaping i potpuno Indic GSUB oblikovanje preko sfIndicGSUB. Detaljne ulazne tačke su dokumentovane u metodama za tibetansko/mongolsko/sirijsko oblikovanje i metodama za Indic oblikovanje Trenutni obuhvat takođe pokriva N'Ko i Adlam kao RTL kurzivne skripte, Thai/Lao SARA AM i redosled tonskih oznaka, hebrejski niqqud redosled i javanske pre-bazne znakove. Ovi putevi su dokumentovani u metodama predobrade oblikovanja skripti
See also: Arabic / Persian / Urdu Shaping Support, Automatic Shaping Pipeline (Phase 8), OpenType GSUB Substitution Engine, THotPDF.AssignSyntheticCodepointForGID |