|
Syriac / Mongolian / Devanagari Shaping Support Multi-script capability surfaces (v2.119.53 - v2.119.55)
|
Arabic Shaping Auto Shaping Pipeline GSUB Engine |
|
HotPDF pateikia jungimo klasės, pozicinės analizės ir Indic skiemenų kategorijų galimybes trims sudėtingiems raštams be arabų: Syriac (U+0700-U+074F), Mongolian (U+1800-U+18AF) ir Devanagari (U+0900-U+097F). Kiekviena galimybė leidžia kviestinėms pusėms nukreipti raštą per esamą OpenType GSUB variklį teisingam formavimui, o sunkesnius darbus (klasterių ribų nustatymą, BiDi sprendimą, GPOS pozicionavimą) paliekant už HotPDF ribų
Syriac shaping capability (v2.119.53) Du nauji metodai atskleidžia Syriac jungimo elgseną:
function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass; function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Syriac seka tą pačią Right-Joining / Dual-Joining / Transparent / Non-Joining keturių klasių sistemą kaip arabų raštas;
Skirtingai nuo arabų rašto, Syriac bloke nėra į Unicode iš anksto užkoduotų Presentation Forms - nėra Syriac atitikmens arabų U+FB50-FDFF / U+FE70-FEFC Presentation Forms blokams. Todėl kviestinės pusės Syriac formavimą turi valdyti per šrifto GSUB lookup'us (dažniausiai
Mongolian shaping capability (v2.119.54) Du lygiagretūs metodai Mongolian raštui:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Aprėptis apima pagrindinį Mongolian (U+1820-U+1842), Todo (U+1843-U+1877), Sibe (U+1880-U+18A8), Manchu ir Ali Gali plėtinius. Variation Selectors FVS1 / FVS2 / FVS3 (U+180B-U+180D), minkštasis brūkšnys NIRUGU (U+180A) ir Ali Gali balsių ženklai visi priskiriami Transparent (T-class), todėl dalyvauja jungime nepertraukdami sekos
Kaip ir Syriac, Mongolian neturi į Unicode iš anksto užkoduotų Presentation Forms. Tradicinis vertikalus Mongolian išdėstymas, sudėtingos raidžių formų variacijos taisyklės ir FVS pagrįstas formos pasirinkimas turi būti valdomi šrifto GSUB lookup'ais (dažniausiai
Devanagari Indic shaping capability (v2.119.55) Devanagari iš esmės skiriasi nuo arabų, Syriac ir Mongolian - tai Indic abugida raštas, kuriame prasmingas vienetas yra skiemenų klasteris (akshara), o ne viena raidė, ir glifų išvedimo tvarka klasterio viduje dažnai skiriasi nuo loginės Unicode tvarkos. Du metodai atskleidžia Devanagari Indic galimybių sluoksnį:
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
ApplyDevanagariReorder yra priešpaskutinis etapas, kuris pereina įvesties seką ir taiko dvi pagrindines Devanagari pertvarkymo taisykles: (1) Repha (Ra + Halant skiemens klasterio pradžioje) perkeliamas į poziciją po klasterio pagrindinio priebalsio, kad būtų atvaizduotas kaip viršutinis kabliukas; (2) prieš pagrindinį I-matra (U+093F DEVANAGARI VOWEL SIGN I) perkeliamas prieš klasterio pagrindinį priebalsį, kad būtų atvaizduotas kaip kairės pusės kabliukas. Kiti indiški pertvarkymai (virš bazės esanti matra, po baze esanti matra, junginių sudarymas) paliekami šrifto GSUB varikliui, nes jiems reikia konkretaus šrifto lookup lentelių
Automatic integration (v2.119.67): kai
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
Scope and limitations Dabartinė gamintojo pusės integracija Syriac, Mongolian, Tibetan ir Indic formavimas dabar turi atskirus API informacinius puslapius. Syriac galima įjungti per Dabartinė apimtis taip pat apima N'Ko ir Adlam kaip RTL kursyvinius rašmenis, Thai/Lao SARA AM ir tono ženklų tvarką, Hebrew niqqud tvarką ir Javanese priešbazinius ženklus. Šie keliai aprašyti skriptų formavimo išankstinio apdorojimo metoduose
See also: Arabic / Persian / Urdu Shaping Support, Automatic Shaping Pipeline (Phase 8), OpenType GSUB Substitution Engine, THotPDF.AssignSyntheticCodepointForGID |