|
Syriac / Mongolian / Devanagari Shaping Support Multi-script capability surfaces (v2.119.53 - v2.119.55)
|
Arabic Shaping Auto Shaping Pipeline GSUB Engine |
|
HotPDF exponerar capability-ytor för joining-class / positional-analysis / Indic syllabic-category för tre komplexa skriftsystem utöver Arabic: Syriac (U+0700-U+074F), Mongolian (U+1800-U+18AF) och Devanagari (U+0900-U+097F). Varje capability låter anropare driva skriftsystemet genom den befintliga OpenType GSUB-motorn för korrekt shaping, samtidigt som de tunga delarna (klustergränsdetektering, BiDi-upplösning, GPOS-positionering) hålls utanför HotPDF:s scope.
Shaping-capability för Syriac (v2.119.53) Två nya metoder exponerar Syriacs joining-beteende:
function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass; function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Syriac följer samma fyrklassramverk Right-Joining / Dual-Joining / Transparent / Non-Joining som Arabic;
Till skillnad från Arabic har Syriac-blocket inga Presentation Forms förkodade i Unicode - det finns ingen Syriac-motsvarighet till blocken U+FB50-FDFF / U+FE70-FEFC Arabic Presentation Forms. Konsumenter måste därför driva Syriac-shaping genom fontdefinierade GSUB-lookups (typiskt
Shaping-capability för Mongolian (v2.119.54) Två parallella metoder för Mongolian:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Täckningen omfattar grundläggande Mongolian (U+1820-U+1842), Todo (U+1843-U+1877), Sibe (U+1880-U+18A8), Manchu och Ali Gali-utökningar. Variation Selectors FVS1 / FVS2 / FVS3 (U+180B-U+180D), soft hyphen NIRUGU (U+180A) och Ali Gali-vokalmärken klassificeras alla som Transparent (T-class) så att de deltar i joining utan att bryta genomgången.
Liksom Syriac har Mongolian inga Presentation Forms förkodade i Unicode. Mongolians traditionella vertikala layout, komplexa regler för bokstavsformsvariation och FVS-driven formval förväntas alla drivas av fontdefinierade GSUB-lookups (typiskt
Indic shaping-capability för Devanagari (v2.119.55) Devanagari skiljer sig i grunden från Arabic / Syriac / Mongolian - det är ett Indic abugida-skriftsystem där den meningsbärande enheten är ett stavelsekluster (akshara), inte en enskild bokstav, och den renderade ordningen på glyphs inuti ett kluster skiljer sig ofta från den logiska Unicode-ordningen. Två metoder exponerar Devanagaris Indic capability-lager:
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
Automatisk integrering (v2.119.67): när
Typiskt arbetsflöde (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;
Typiskt arbetsflöde (Devanagari med automatisk omordning)
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- och extraktionshjälpare
Scope och begränsningar Aktuell integration på producentsidan Syriac-, Mongolian-, Tibetan- och Indic-formning har nu uttryckliga API-referenssidor. Syriac kan aktiveras via Aktuellt omfång täcker också N'Ko och Adlam som RTL-kursivskrifter, Thai/Lao för SARA AM och tonmärken, Hebrew för niqqud-ordning och Javanese för pre-base-tecken. Dessa vägar dokumenteras i script shaping preprocess methods
Se även: Arabic / Persian / Urdu Shaping Support, Automatic Shaping Pipeline (Phase 8), OpenType GSUB Substitution Engine, THotPDF.AssignSyntheticCodepointForGID |