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