|
Dukungan Shaping Syriac / Mongolian / Devanagari Permukaan kapabilitas multi-aksara (v2.119.53 - v2.119.55)
|
Arabic Shaping Auto Shaping Pipeline GSUB Engine |
|
HotPDF mengekspos permukaan kapabilitas joining-class / positional-analysis / kategori suku kata Indic untuk tiga aksara kompleks di luar Arabic: Syriac (U+0700-U+074F), Mongolian (U+1800-U+18AF), dan Devanagari (U+0900-U+097F). Setiap kapabilitas memungkinkan pemanggil menggerakkan aksara melalui OpenType GSUB engine yang sudah ada untuk shaping yang benar, sambil menjaga pekerjaan berat (deteksi batas cluster, resolusi BiDi, positioning GPOS) di luar cakupan HotPDF
Kapabilitas shaping Syriac (v2.119.53) Dua metode baru mengekspos perilaku joining Syriac:
function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass; function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Syriac mengikuti kerangka empat kelas yang sama seperti Arabic: Right-Joining / Dual-Joining / Transparent / Non-Joining;
Tidak seperti Arabic, blok Syriac tidak memiliki Presentation Forms yang sudah dienkode di Unicode - tidak ada padanan Syriac untuk blok Arabic Presentation Forms U+FB50-FDFF / U+FE70-FEFC. Karena itu, pemanggil harus menggerakkan shaping Syriac melalui lookup GSUB yang didefinisikan font (biasanya
Kapabilitas shaping Mongolian (v2.119.54) Dua metode paralel untuk Mongolian:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Cakupan mencakup Mongolian dasar (U+1820-U+1842), Todo (U+1843-U+1877), Sibe (U+1880-U+18A8), Manchu, dan ekstensi Ali Gali. Variation Selector FVS1 / FVS2 / FVS3 (U+180B-U+180D), soft hyphen NIRUGU (U+180A), dan tanda vokal Ali Gali semuanya diklasifikasikan sebagai Transparent (kelas T) sehingga ikut dalam joining tanpa memutus penelusuran
Seperti Syriac, Mongolian tidak memiliki Presentation Forms yang sudah dienkode di Unicode. Tata letak vertikal tradisional Mongolian, aturan variasi bentuk huruf yang kompleks, dan pemilihan bentuk yang digerakkan FVS semuanya diharapkan ditangani oleh lookup GSUB yang didefinisikan font (biasanya
Kapabilitas shaping Indic Devanagari (v2.119.55) Devanagari pada dasarnya berbeda dari Arabic / Syriac / Mongolian - ini adalah skrip Indic abugida di mana unit bermakna adalah cluster suku kata (akshara), bukan satu huruf, dan urutan glyph yang dirender di dalam cluster sering berbeda dari urutan logis Unicode. Dua metode mengekspos lapisan kapabilitas Indic Devanagari:
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
Integrasi otomatis (v2.119.67): ketika
Alur kerja umum (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;
Alur kerja umum (Devanagari dengan reorder otomatis)
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"
Helper Subset dan Ekstraksi Unicode
Cakupan dan batasan Integrasi sisi produsen saat ini Shaping Syriac, Mongolian, Tibetan, dan Indic kini memiliki halaman referensi API yang eksplisit. Syriac dapat diaktifkan melalui Cakupan saat ini juga mencakup N'Ko dan Adlam sebagai skrip cursive RTL, pengurutan SARA AM dan tanda nada Thai/Lao, pengurutan niqqud Hebrew, dan tanda pre-base Javanese. Jalur-jalur ini didokumentasikan di metode preprocess shaping skrip
Lihat juga: Dukungan Shaping Arabic / Persian / Urdu, Pipeline Shaping Otomatis (Phase 8), Engine Substitusi OpenType GSUB, THotPDF.AssignSyntheticCodepointForGID |