|
Arabic / Persian / Urdu Shaping Support Producer-side shaping pipeline (v2.85.0 - v2.119.68)
|
OpenType GSUB Engine CFF / OpenType Subsetting |
|
HotPDF rulează un pipeline de shaping pe partea producătorului care pliază segmentele de intrare Unicode pentru arabă, persană și urdu în Arabic Presentation Forms în timpul emiterii textului PDF, astfel încât readerele consumatoare primesc glyph-uri poziționale / de ligatură gata de randat fără a necesita propriul shaper de clasă Harfbuzz.
Ce face pipeline-ul Shaping pozițional (v2.85.0): fiecare literă arabă de bază are până la patru forme poziționale - izolată (
Ligatura obligatorie LAM-ALEF (v2.119.32): specificația Arabic Unicode Shaping impune ca orice LAM (U+0644) urmat imediat de un ALEF (U+0627 simplu, U+0622 cu madda deasupra, U+0623 cu hamza deasupra, U+0625 cu hamza dedesubt) să se unească într-un singur glif ligatură (U+FEFB - U+FEFC forme izolată / finală cu variantele corespunzătoare de hamza / madda). Aceasta este una dintre foarte puținele ligaturi neopționale din tipografia arabă și este necesară pentru corectitudine; redarea lor ca glife separate produce text pe care cititoarele native îl recunosc imediat ca fiind greșit. HotPDF face îmbinarea în timpul emiterii, astfel încât apelanții nu au nevoie de un shaper de clasă Harfbuzz în propriul flux de lucru
9 litere de bază pentru persană / urdu (v2.119.35): persana și urdu extind araba cu litere care nu se află în blocul Arabic Presentation Forms-B (U+FE70 - U+FEFC). Cele 9 litere cele mai folosite - inclusiv 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) și HEH GOAL (U+06C1) - au forme de prezentare în Arabic Presentation Forms-A (U+FB50 - U+FDFF). HotPDF le mapează acum la gliful Forms-A potrivit în timpul shapingului pozițional, astfel încât textul persan și urdu se redă cu formele corecte init / medi / fina / isol în orice cititor PDF
Arabic Extended-A + Supplement (v2.119.52, v2.119.56): tabelul claselor de alipire acoperă acum caracterele Arabic Extended-A rămase (variante ALEF WASLA / NOON GHUNNA / HEH), Arabic Supplement U+0750-U+077F și intervalul mai înalt Arabic Extended-A U+08A0-U+08FF. Caracterele cu o codare statică Presentation Forms-A sunt mapate prin shaperul existent cu 4 poziții; caracterele fără această codare (majoritatea din Extended-A) primesc doar clasificare după clasa de alipire, astfel încât vecinii se formează corect chiar când caracterul în sine trece mai departe neschimbat. v2.119.56 a corectat două mapări Forms-A greșite introduse de v2.119.52 (U+06C2 / U+06C3)
Acoperire completă Persian / Urdu Form-B (v2.119.57): tabelul claselor de alipire a fost extins pentru a acoperi întregul interval U+0672-U+06D5 (aproximativ 80 de caractere care acoperă variantele REH / DAL / SEEN / SAD / TAH / AIN / FEH / QAF / KAF / GAF / LAM / NOON / HEH / WAW / YEH), iar 26 de mapări noi Presentation Forms-A au fost adăugate (15 din clasa D cu 4 forme + 11 din clasa R cu 2 forme). În special, HEH DOACHASHMEE standard din urdu (U+06BE → FBAA-FBAD) și yeh-ul final de cuvânt din urdu YEH BARREE (U+06D2 → FBAE-FBAF) sunt acum mapate corect la sloturile Forms-A folosite greșit de corecția temporară ALEF WASLA / NOON GHUNNA din v2.119.52. Acoperirea statică Forms-A ajunge acum la peste 40 de caractere sursă
Post-pass YEH-HAMZA + ligatură vocalică (v2.119.58): un post-pass adăugat în
Ligatura Allah (v2.119.60): secvența de patru caractere ALEF + LAM + LAM + HEH se îmbină în U+FDF2 ARABIC LIGATURE ALLAH ISOLATED FORM. Implementată ca un post-pass static la nivel de codepoint după v2.119.32 LAM-ALEF și v2.119.58 YEH-HAMZA în lanțul
Ligatura frazei Bismillah (v2.119.62): fraza standard Bismillah cu 22 de codepointuri "بسم الله الرحمن الرحيم" se îmbină într-un singur glif U+FDFD ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM. Rulează ca primul pre-pass din
Helper-e publice de interogare
Cum îl apelează consumatorii Pipeline-ul de shaping rulează automat în metodele de emitere a textului Unicode - nu este nevoie de un apel explicit de tipul "shape this". Transmiteți șiruri Unicode în arabă / persană / urdu către THPDFPage.UnicodeTextOut sau THPDFPage.RtLTextOut, iar HotPDF mapează fiecare codepoint de intrare la forma sa de prezentare înainte de a scrie operatorul PDF de afișare a textului. Octeții Unicode originali sunt de asemenea capturați în
Cerințe pentru font Fontul înregistrat prin
Noto Sans Arabic (latină + arabă; Forms-A + Forms-B + Arabic Extended-A) Noto Naskh Arabic, Noto Naskh Arabic UI Amiri (Naskh tradițional, acoperire completă Forms-A + Forms-B) Scheherazade New (SIL, proiectat pentru limbile lumii musulmane) Microsoft Arabic Typesetting / Tahoma / Times New Roman (incluse în Windows, Forms-B complete; unele au acoperire Forms-A)
Atunci când fontului înregistrat îi lipsește un glif pentru o formă de prezentare derivată, HotPDF revine la codepointul Unicode de bază și îl emite neschimbat; cititoarele pot apoi încerca propriul shaping (Acrobat, Foxit) sau pot reda
Flux tipic
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;
Integrarea automată a pipeline-ului Phase 8 (v2.119.59 - v2.119.68) v2.119.59 a introdus proprietatea opt-in
Când
Mapare inversă ToUnicode CMap pentru ligaturi (v2.119.61, v2.119.62, v2.119.65) CMap-ul Adobe-Identity-UCS ToUnicode emis de
Emiterea de codepointuri sintetice PUA (v2.119.68)
Relația cu motorul OpenType GSUB Shaperul static de post-pass descris mai sus (v2.85.0 + v2.119.32 / 58 / 60 / 62) este independent, în mod implicit, de motorul OpenType GSUB. Când
Pentru glifele de substituție fără codepoint Unicode, apelanții combină
Domeniu și limitări Algoritmul BiDi rămâne în afara acestei pagini: apelanții trebuie tot să ordoneze singuri secvențele mixte LTR și RTL sau să folosească o bibliotecă BiDi separată. Suportul pentru GPOS, Indic/Tibetan/Mongolian, Hebrew, N'Ko, Adlam, Thai/Lao și Javanese se află acum pe pagini separate de tip opt-in pentru steaguri de shaping și API-uri, așa că această pagină se concentrează doar pe shapingul arab static și bazat pe 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 |