|
Suport pentru modelarea internațională a scripturilor Suprafețe de capabilități multi-script (v2.119.53 - v2.119.55)
|
Modelare arabă Pipelina automată de modelare Motor GSUB |
|
HotPDF expune suprafețe de capabilitate pentru analiza clasei de alipire / analiza pozițională / categoria silabică Indic pentru trei scripturi complexe din afara arabicii: Syriac (U+0700-U+074F), Mongolian (U+1800-U+18AF) și Devanagari (U+0900-U+097F). Fiecare capabilitate le permite apelanților să conducă scriptul prin motorul existent OpenType GSUB pentru o formare corectă, păstrând în același timp partea grea (detectarea limitelor de cluster, rezolvarea BiDi, poziționarea GPOS) în afara domeniului HotPDF
Capabilitate de formare Syriac (v2.119.53) Două metode noi expun comportamentul de joining al Syriac:
function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass; function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Syriac urmează același cadru în patru clase Right-Joining / Dual-Joining / Transparent / Non-Joining ca arabica;
Spre deosebire de arabică, blocul Syriac nu are Forme de prezentare pre-încodificate în Unicode - nu există un echivalent Syriac al blocurilor U+FB50-FDFF / U+FE70-FEFC Arabic Presentation Forms. Consumatorii trebuie deci să conducă formarea Syriac prin căutări GSUB definite de font (de obicei
Capabilitate de formare Mongolian (v2.119.54) Două metode paralele pentru Mongolian:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Acoperirea include Mongolian de bază (U+1820-U+1842), Todo (U+1843-U+1877), Sibe (U+1880-U+18A8), extinderile Manchu și Ali Gali. Variation Selectors FVS1 / FVS2 / FVS3 (U+180B-U+180D), soft hyphen-ul NIRUGU (U+180A) și semnele vocalice Ali Gali sunt toate clasificate ca Transparent (clasa T), astfel încât participă la joining fără a rupe parcurgerea
La fel ca Syriac, Mongolian nu are Forme de prezentare pre-încodificate în Unicode. Layoutul vertical tradițional al Mongolian, regulile complexe de variație a formei literelor și selectarea formei controlată de FVS ar trebui toate conduse de căutări GSUB definite de font (de obicei
Capabilitate de formare Indic Devanagari (v2.119.55) Devanagari este fundamental diferit de arabică / Syriac / Mongolian - este un script Indic abugida în care unitatea cu sens este un cluster silabic (akshara), nu o literă singulară, iar ordinea randată a glifelor din interiorul clusterului este adesea diferită de ordinea logică Unicode. Două metode expun stratul de capabilitate Indic al Devanagari:
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
Integrare automată (v2.119.67): când
Flux de lucru tipic (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;
Flux de lucru tipic (Devanagari cu reordonare automată)
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"
Ajutoare pentru subsetul Unicode și extragere
Domeniu și limitări Integrare curentă pe partea de producător Formarea pentru Syriac, Mongolian, Tibetan și Indic are acum pagini explicite de referință API. Syriac poate fi activat prin Domeniul curent acoperă și N'Ko și Adlam ca scripturi cursive RTL, ordinea pentru SARA AM și semnele de ton din Thai/Lao, ordinea niqqud în Hebrew și semnele pre-base din Javanese. Aceste căi sunt documentate în Metode de preprocesare pentru modelarea scripturilor
Vezi și: Suport pentru modelarea arabă / persană / urdu, Pipelina automată de modelare (Faza 8), Motorul de substituție OpenType GSUB, THotPDF.AssignSyntheticCodepointForGID |