|
Syriac / Mongolian / Devanagari Shaping Support Multi-script capability surfaces (v2.119.53 - v2.119.55)
|
Arabic Shaping Auto Shaping Pipeline GSUB Engine |
|
HotPDF, Arabic dışında üç karmaşık script için joining-class / positional-analysis / Indic syllabic-category capability yüzeyleri sunar: Syriac (U+0700-U+074F), Mongolian (U+1800-U+18AF) ve Devanagari (U+0900-U+097F). Her capability, callerın doğru shaping için scripti mevcut OpenType GSUB engine üzerinden yürütmesine izin verirken ağır işleri (cluster boundary detection, BiDi resolution, GPOS positioning) HotPDF kapsamının dışında tutar.
Syriac shaping capability (v2.119.53) İki yeni method Syriac joining behavior değerini açığa çıkarır:
function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass; function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Syriac, Arabic ile aynı Right-Joining / Dual-Joining / Transparent / Non-Joining dört sınıflı frameworkü izler;
Arabic aksine, Syriac bloğunda Unicode içine önceden kodlanmış Presentation Forms yoktur - U+FB50-FDFF / U+FE70-FEFC Arabic Presentation Forms bloklarının Syriac eşdeğeri yoktur. Bu nedenle consumerlar Syriac shaping işlemini codepoint rewriting yerine font-defined GSUB lookup değerleriyle (genellikle
Mongolian shaping capability (v2.119.54) Mongolian için iki paralel method:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Kapsam basic Mongolian (U+1820-U+1842), Todo (U+1843-U+1877), Sibe (U+1880-U+18A8), Manchu ve Ali Gali extensionlarını içerir. Variation Selectors FVS1 / FVS2 / FVS3 (U+180B-U+180D), soft hyphen NIRUGU (U+180A) ve Ali Gali vowel marklarının tümü Transparent (T-class) olarak sınıflandırılır; böylece joining işlemine katılırlar ve yürüyüşü bozmazlar.
Syriac gibi Mongolian da Unicode içinde önceden kodlanmış Presentation Forms taşımaz. Mongolian geleneksel dikey layoutu, karmaşık letter-shape variation kuralları ve FVS-driven shape selection değerlerinin tamamının font-defined GSUB lookup değerleriyle (genellikle
Devanagari Indic shaping capability (v2.119.55) Devanagari, Arabic / Syriac / Mongolian’dan temelde farklıdır - anlamlı birimin tek harf değil syllable cluster (akshara) olduğu bir Indic abugida scriptidir ve cluster içindeki glyphlerin rendered order değeri çoğu zaman logical Unicode order değerinden farklıdır. İki method Devanagari'nin Indic capability layerını açığa çıkarır:
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
Otomatik entegrasyon (v2.119.67):
Tipik 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;
Tipik workflow (automatic reorder ile Devanagari)
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 ve extraction helperları
Kapsam ve sınırlamalar Geçerli üretici tarafı tümleştirme Syriac, Mongolian, Tibetan ve Indic şekillendirme artık açık API başvuru sayfalarına sahiptir. Syriac Geçerli kapsam ayrıca RTL bitişik yazılar olarak N'Ko ve Adlam, SARA AM ve ton işaretleri için Thai/Lao, niqqud sıralaması için Hebrew ve taban öncesi işaretler için Javanese içerir. Bu yollar script shaping preprocess methods içinde belgelenmiştir
Ayrıca bkz.: Arabic / Persian / Urdu Shaping Support, Automatic Shaping Pipeline (Phase 8), OpenType GSUB Substitution Engine, THotPDF.AssignSyntheticCodepointForGID |