|
Syriac / Mongolian / Devanagari Shaping – podpora Rozhraní schopností pro více písem (v2.119.53 - v2.119.55)
|
Arabic Shaping Auto Shaping Pipeline GSUB Engine |
|
HotPDF zpřístupňuje rozhraní schopností pro spojovací třídy, poziční analýzu a indické slabičné kategorie pro tři složitá písma mimo arabštinu: Syriac (U+0700-U+074F), Mongolian (U+1800-U+18AF) a Devanagari (U+0900-U+097F). Každá schopnost umožňuje volajícím řídit písmo přes existující engine OpenType GSUB pro správné tvarování, zatímco těžká práce (detekce hranic clusterů, řešení BiDi, polohování GPOS) zůstává mimo rozsah HotPDF
Schopnost tvarování Syriac (v2.119.53) Dvě nové metody zpřístupňují spojovací chování Syriac:
function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass; function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Syriac používá stejný čtyřtřídní framework Right-Joining / Dual-Joining / Transparent / Non-Joining jako arabština;
Na rozdíl od arabštiny nemá blok Syriac žádné Presentation Forms předkódované v Unicode - neexistuje syrský ekvivalent bloků Arabic Presentation Forms U+FB50-FDFF / U+FE70-FEFC. Konzumenti proto musí tvarování Syriac řídit přes GSUB lookupy definované fontem (typicky
Schopnost tvarování Mongolian (v2.119.54) Dvě paralelní metody pro Mongolian:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Pokrytí zahrnuje základní Mongolian (U+1820-U+1842), Todo (U+1843-U+1877), Sibe (U+1880-U+18A8), Manchu a rozšíření Ali Gali. Variation Selectors FVS1 / FVS2 / FVS3 (U+180B-U+180D), měkký spojovník NIRUGU (U+180A) a samohláskové značky Ali Gali jsou klasifikované jako Transparent (třída T), takže se účastní spojování bez přerušení průchodu
Stejně jako Syriac nemá Mongolian žádné Presentation Forms předkódované v Unicode. Tradiční svislé rozložení mongolštiny, složitá pravidla variant tvaru písmen a výběr tvarů řízený FVS se očekávají přes GSUB lookupy definované fontem (typicky
Indická schopnost tvarování Devanagari (v2.119.55) Devanagari se zásadně liší od Arabic / Syriac / Mongolian - je to indické abugida písmo, kde významovou jednotkou je slabičný cluster (akshara), ne jednotlivé písmeno, a vykreslené pořadí glyphů uvnitř clusteru se často liší od logického pořadí Unicode. Dvě metody zpřístupňují indickou vrstvu schopností Devanagari:
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
Automatická integrace (v2.119.67): když platí
Typický pracovní postup (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;
Typický pracovní postup (Devanagari s automatickým reorderem)
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"
Pomocné funkce subsetu a extrakce Unicode
Rozsah a omezení Aktuální integrace na straně producenta Syriac, Mongolian, Tibetan a Indic shaping nyní mají explicitní referenční stránky API. Syriac lze zapnout přes Aktuální rozsah pokrývá také N'Ko a Adlam jako kurzivní písma RTL, řazení SARA AM a tónových značek Thai/Lao, řazení Hebrew niqqud a pre-base značky Javanese. Tyto cesty jsou dokumentovány v metodách předzpracování tvarování písem
Viz také: Podpora Arabic / Persian / Urdu Shaping, Automatická pipeline tvarování (Phase 8), Substituční engine OpenType GSUB, THotPDF.AssignSyntheticCodepointForGID |