|
Støtte for syrisk / mongolsk / devanagari-forming Funksjonsflater for flere skriftsystemer (v2.119.53 - v2.119.55)
|
Arabisk forming Automatisk formings-pipeline GSUB-motoren |
|
HotPDF eksponerer funksjonsflater for koblingsklasse, posisjonsanalyse og indik-syllabisk kategori for tre komplekse skriftsystemer utover arabisk: syrisk (U+0700-U+074F), mongolsk (U+1800-U+18AF) og devanagari (U+0900-U+097F). Hver funksjon lar kallere styre skriptet gjennom den eksisterende OpenType GSUB-motoren for korrekt forming, mens tungløftet (klyngegrense-deteksjon, BiDi-løsning, GPOS-posisjonering) holdes utenfor HotPDFs ansvarsområde
Syrisk formingsfunksjon (v2.119.53) To nye metoder eksponerer syrisk koblingsadferd:
function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass; function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Syrisk følger samme firedelte rammeverk for Right-Joining / Dual-Joining / Transparent / Non-Joining som arabisk;
I motsetning til arabisk har den syriske blokken ingen forhåndskodede presentasjonsformer i Unicode - det finnes ingen syrisk ekvivalent til de arabiske blokkene U+FB50-FDFF / U+FE70-FEFC. Konsumenter må derfor styre syrisk forming gjennom fontdefinerte GSUB-oppslag (typisk
Mongolsk formingsfunksjon (v2.119.54) To parallelle metoder for mongolsk:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Dekningen omfatter grunnleggende mongolsk (U+1820-U+1842), Todo (U+1843-U+1877), Sibe (U+1880-U+18A8), mandju og Ali Gali-utvidelser. Variasjonsvelgerne FVS1 / FVS2 / FVS3 (U+180B-U+180D), det myke bindestreket NIRUGU (U+180A) og Ali Gali-vokaltegn klassifiseres alle som Transparent (T-klasse) slik at de deltar i koblingen uten å bryte gjennomgangen
Som syrisk har mongolsk ingen forhåndskodede presentasjonsformer i Unicode. Mongolsk tradisjonell vertikal layout, komplekse regler for variasjon i bokstavformer og FVS-styrt valg av form forventes alle å styres av fontdefinerte GSUB-oppslag (typisk
Indic-formingsfunksjon for devanagari (v2.119.55) Devanagari er grunnleggende annerledes enn arabisk / syrisk / mongolsk - det er et indik abugida-skriftsystem der den meningsbærende enheten er en stavelsesklase (akshara), ikke en enkelt bokstav, og den gjengitte rekkefølgen av glyfer inne i en klasse er ofte annerledes enn den logiske Unicode-rekkefølgen. To metoder eksponerer Devangari sitt indik-funksjonslag:
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
Automatisk integrasjon (v2.119.67): når
Typisk arbeidsflyt (syrisk)
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;
Typisk arbeidsflyt (devanagari med automatisk omlegging)
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"
Hjelpere for Unicode-underinndeling og uthenting
Omfang og begrensninger Gjeldende produsentsideintegrasjon Syrisk, mongolsk, tibetansk og indik-forming har nå egne API-referansesider. Syrisk kan aktiveres gjennom Gjeldende omfang dekker også N'Ko og Adlam som RTL-kursive skriftsystemer, rekkefølgen for Thai/Lao SARA AM og tonemerker, rekkefølgen for hebraisk niqqud og Javanesisk pre-base-tegn. Disse banene er dokumentert i preprosesseringsmetodene for skriptforming
Se også: Støtte for arabisk / persisk / urdu-forming, Automatisk formings-pipeline (fase 8), OpenType GSUB-erstatningsmotor, THotPDF.AssignSyntheticCodepointForGID |