|
Dukungan Shaping Arabic / Persian / Urdu Pipeline shaping sisi produsen (v2.85.0 - v2.119.68)
|
OpenType GSUB Engine CFF / OpenType Subsetting |
|
HotPDF menjalankan pipeline shaping sisi produsen yang melipat run input Unicode Arabic, Persian, dan Urdu ke Arabic Presentation Forms saat emisi teks PDF, sehingga reader konsumen menerima glyph posisi / ligature yang siap dirender tanpa memerlukan shaper kelas Harfbuzz sendiri
Apa yang dilakukan pipeline Shaping posisional (v2.85.0): setiap huruf dasar Arabic memiliki hingga empat bentuk posisional - isolated (
Ligature wajib LAM-ALEF (v2.119.32): spesifikasi Arabic Unicode Shaping mewajibkan bahwa setiap LAM (U+0644) yang langsung diikuti ALEF (U+0627 plain, U+0622 dengan madda di atas, U+0623 dengan hamza di atas, U+0625 dengan hamza di bawah) dilipat menjadi satu glyph ligature (U+FEFB - U+FEFC bentuk isolated / final dengan varian hamza / madda yang sesuai). Ini adalah salah satu dari sangat sedikit ligature non-opsional dalam tipografi Arabic dan diperlukan demi ketepatan; merendernya sebagai glyph terpisah menghasilkan teks yang segera dikenali reader native sebagai salah bentuk. HotPDF melakukan pelipatan saat emisi sehingga pemanggil tidak perlu shaper kelas Harfbuzz di jalur kode mereka sendiri
9 huruf inti Persian / Urdu (v2.119.35): Persian dan Urdu memperluas Arabic dengan huruf yang tidak ada di blok Arabic Presentation Forms-B (U+FE70 - U+FEFC). Sembilan huruf yang paling sering dipakai - termasuk PEH (U+067E), TCHEH (U+0686), JEH (U+0698), KEH (U+06A9 / U+06AF), GAF (U+06AF), NOON GHUNNA (U+06BA), HEH DOACHASHMEE (U+06BE), YEH BARREE (U+06D2), dan HEH GOAL (U+06C1) - memiliki bentuk presentasi di Arabic Presentation Forms-A (U+FB50 - U+FDFF). HotPDF kini memetakan huruf-huruf ini ke glyph Forms-A yang sesuai selama shaping posisional, sehingga teks Persian dan Urdu dirender dengan bentuk init / medi / fina / isol yang benar di reader mana pun
Arabic Extended-A + Supplement (v2.119.52, v2.119.56): tabel joining-class kini mencakup karakter Arabic Extended-A yang tersisa (ALEF WASLA / NOON GHUNNA / varian HEH), Arabic Supplement U+0750-U+077F, dan rentang Arabic Extended-A yang lebih tinggi U+08A0-U+08FF. Karakter yang memiliki encoding statis Presentation Forms-A dipetakan melalui shaper 4-posisi yang sudah ada; karakter yang tidak memilikinya (sebagian besar Extended-A) hanya mendapat klasifikasi joining-class sehingga tetangga tetap di-shape dengan benar meskipun karakter itu sendiri diteruskan tanpa perubahan. v2.119.56 memperbaiki dua pemetaan Forms-A yang salah yang diperkenalkan v2.119.52 (U+06C2 / U+06C3)
Cakupan penuh Persian / Urdu Form-B (v2.119.57): tabel joining-class diperluas untuk mencakup rentang penuh U+0672-U+06D5 (sekitar 80 karakter yang meliputi varian REH / DAL / SEEN / SAD / TAH / AIN / FEH / QAF / KAF / GAF / LAM / NOON / HEH / WAW / YEH), dan 26 pemetaan Presentation Forms-A baru ditambahkan (15 bentuk 4-form kelas D + 11 bentuk 2-form kelas R). Secara khusus, HEH DOACHASHMEE standar Urdu 'h' (U+06BE → FBAA-FBAD) dan YEH BARREE akhir kata Urdu (U+06D2 → FBAE-FBAF) kini dipetakan dengan benar ke slot Forms-A yang sebelumnya dipakai sementara oleh perbaikan ALEF WASLA / NOON GHUNNA v2.119.52. Cakupan Forms-A statis kini mencakup lebih dari 40 karakter sumber
Ligatur pasca-pass YEH-HAMZA + vokal (v2.119.58): pasca-pass yang ditambahkan ke
Ligatur Allah (v2.119.60): urutan empat karakter ALEF + LAM + LAM + HEH dilipat menjadi U+FDF2 ARABIC LIGATURE ALLAH ISOLATED FORM. Diimplementasikan sebagai static post-pass pada level codepoint setelah v2.119.32 LAM-ALEF dan v2.119.58 YEH-HAMZA di rantai
Ligatur frasa Bismillah (v2.119.62): frasa Bismillah standar 22 codepoint "بسم الله الرحمن الرحيم" dilipat menjadi satu glyph U+FDFD ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM. Berjalan sebagai pre-pass pertama di
Public Query Helpers
How callers invoke it Shaping pipeline berjalan otomatis di dalam metode Unicode text emission - tidak perlu panggilan eksplisit "shape this". Kirim string Arabic / Persian / Urdu berbasis Unicode ke THPDFPage.UnicodeTextOut atau THPDFPage.RtLTextOut dan HotPDF memetakan setiap codepoint masukan ke bentuk presentation form-nya sebelum menulis operator text-showing PDF. Byte Unicode asli juga ditangkap ke
Font requirements Font yang didaftarkan lewat
Noto Sans Arabic (Latin + Arabic; Forms-A + Forms-B + Arabic Extended-A). Noto Naskh Arabic, Noto Naskh Arabic UI. Amiri (traditional Naskh, full Forms-A + Forms-B coverage). Scheherazade New (SIL, designed for languages of the Muslim world). Microsoft Arabic Typesetting / Tahoma / Times New Roman (Windows-bundled, full Forms-B; some have Forms-A coverage).
Saat font yang terdaftar tidak memiliki glyph untuk presentation form turunan, HotPDF kembali ke codepoint Unicode dasar dan mengeluarkannya tanpa perubahan; pembaca konsumen kemudian dapat mencoba shaping sendiri (Acrobat, Foxit) atau merender
Typical workflow
PDF.RegisterUnicodeTTF('NotoArab', 'NotoSansArabic-Regular.ttf'); PDF.BeginDoc; PDF.CurrentPage.SetFont('NotoArab', [], 14); PDF.CurrentPage.RtLTextOut(100, 700, 0, UnicodeString(#$0645#$0631#$062D#$0628#$0627)); // "marhaba" (hello) PDF.EndDoc;
Automatic Phase 8 pipeline integration (v2.119.59 - v2.119.68) v2.119.59 memperkenalkan properti opt-in
Saat
ToUnicode CMap ligature reverse mapping (v2.119.61, v2.119.62, v2.119.65) The Adobe-Identity-UCS ToUnicode CMap emitted by
PUA synthetic codepoint emit (v2.119.68)
Relationship to the OpenType GSUB engine Static post-pass shaper yang dijelaskan di atas (v2.85.0 + v2.119.32 / 58 / 60 / 62) secara default terpisah dari OpenType GSUB engine. Saat
Untuk glyph substitusi tanpa codepoint Unicode, pemanggil menggabungkan
Cakupan dan batasan Algoritme BiDi tetap berada di luar halaman ini: pemanggil masih perlu mengurutkan run LTR dan RTL campuran sendiri atau memakai library BiDi terpisah. Dukungan GPOS, Indic/Tibetan/Mongolian, Hebrew, N'Ko, Adlam, Thai/Lao, dan Javanese kini berada di halaman flag dan API shaping opt-in terpisah, jadi halaman ini hanya berfokus pada static Arabic shaping dan shaping berbasis GSUB
See also: OpenType GSUB Substitution Engine, Automatic Shaping Pipeline (Phase 8), Syriac / Mongolian / Devanagari Shaping, THotPDF.AssignSyntheticCodepointForGID, THPDFPage.RtLTextOut, THPDFPage.UnicodeTextOut, CFF / OpenType Font Subsetting |