|
Arabic / Persian / Urdu Shaping Support Producer-side shaping pipeline (v2.85.0 - v2.119.68)
|
OpenType GSUB Engine CFF / OpenType Subsetting |
|
HotPDF pokreće pipeline za oblikovanje sa strane proizvođača koji sklapа Unicode-input nizove arapskog, persijskog i urdu u njihove Arabic Presentation Forms prilikom emitovanja PDF teksta, tako da potrošački čitači dobiju spremne / ligature glifove sa tačnim položajem bez sopstvenog Harfbuzz-class shaper-a
What the pipeline does Poziciono oblikovanje (v2.85.0): svako osnovno arapsko slovo ima do četiri poziciona oblika - isolated (isol), initial (init), medial (medi), final (fina). HotPDF ispituje klasu povezivanja svakog arapskog znaka i klase povezivanja njegovih neposrednih suseda, zatim mapira ulazni kodpoent na odgovarajući Arabic Presentation Forms-B (U+FE70 - U+FEFC) glif pre emitovanja. Nepovezujuća slova, spojnice, transparentni znakovi (kombinacione oznake) i Tatweel kashida obrađuju se prema Unicode Arabic Shaping algoritmu
Obavezna LAM-ALEF ligatura (v2.119.32): arapska Unicode Shaping specifikacija zahteva da se svaki LAM (U+0644) odmah praćen ALEF-om (U+0627 plain, U+0622 sa madda iznad, U+0623 sa hamza iznad, U+0625 sa hamza ispod) spoji u jedan ligaturni glif (U+FEFB - U+FEFC izolovani / završni oblici sa odgovarajućim hamza / madda varijantama). Ovo je jedna od vrlo malobrojnih neobaveznih ligatura u arapskoj tipografiji i potrebna je za ispravnost; prikazivanje kao odvojenih glifova proizvodi tekst koji izvorni čitači odmah prepoznaju kao neispravan. HotPDF obavlja spajanje tokom emitovanja tako da pozivaocima nije potreban Harfbuzz-klasni oblikovač u sopstvenoj putanji koda
Persijski / urdu jezgro od 9 slova (v2.119.35): persijski i urdu proširuju arapski slovima koja nisu u bloku Arabic Presentation Forms-B (U+FE70 - U+FEFC). Devet najčešće korišćenih takvih slova - uključujući 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) - imaju prezentacione oblike u Arabic Presentation Forms-A (U+FB50 - U+FDFF). HotPDF sada ta slova mapira na odgovarajući Forms-A glif tokom pozicionog oblikovanja, pa se persijski i urdu tekst prikazuje sa ispravnim init / medi / fina / isol oblicima u bilo kom čitaču
Arabic Extended-A + Supplement (v2.119.52, v2.119.56): tabela klasa povezivanja sada pokriva preostale Arabic Extended-A znakove (ALEF WASLA / NOON GHUNNA / varijante HEH), Arabic Supplement U+0750-U+077F i viši opseg Arabic Extended-A U+08A0-U+08FF. Znakovi sa statičkim Presentation Forms-A kodiranjem mapiraju se kroz postojeći 4-pozicioni oblikovač; znakovi bez tog kodiranja (većina Extended-A) dobijaju samo klasifikaciju klase povezivanja tako da susedi budu pravilno oblikovani čak i kada sam znak prođe neizmenjen. v2.119.56 ispravlja dve pogrešne Forms-A mape uvedene u v2.119.52 (U+06C2 / U+06C3)
Persian / Urdu potpuna pokrivenost Form-B (v2.119.57): tabela klasa povezivanja proširena je da obuhvati ceo opseg U+0672-U+06D5 (oko 80 znakova koji pokrivaju varijante REH / DAL / SEEN / SAD / TAH / AIN / FEH / QAF / KAF / GAF / LAM / NOON / HEH / WAW / YEH), a dodato je 26 novih mape za Presentation Forms-A (15 D-klasa sa 4 oblika + 11 R-klasa sa 2 oblika). Posebno, urdu standardno 'h' HEH DOACHASHMEE (U+06BE → FBAA-FBAD) i urdu reč-završno yeh YEH BARREE (U+06D2 → FBAE-FBAF) sada se pravilno mapiraju na Forms-A slotove koje je pogrešno koristio privremeni popravak v2.119.52 za ALEF WASLA / NOON GHUNNA. Statička Forms-A pokrivenost sada obuhvata više od 40 izvorskih znakova
YEH-HAMZA + samoglasnička ligatura post-pass (v2.119.58): post-pass dodat u _ApplyArabicShaping posle pozicionog oblikovanja pokriva 8 ligaturnih parova u Forms-A bloku U+FBEA-U+FBFB - YEH-HAMZA + ALEF / AE / WAW / U / OE / YU / E / ALEF MAKSURA. Svaki par emituje izolovani oblik (FBEA / FBEC / FBEE / FBF0 / FBF2 / FBF4 / FBF6 / FBF9) plus završni oblik baza+1. Početni / srednji slotovi FBF8 / FBFB prepuštaju se GSUB mehanizmu preko sfArabicGSUB opcije. Zasnovano na istoj šemi kao v2.119.32 LAM-ALEF
Allah ligatura (v2.119.60): četvoroznakovni niz ALEF + LAM + LAM + HEH spaja se u U+FDF2 ARABIC LIGATURE ALLAH ISOLATED FORM. Implementirano je kao statički post-pass na nivou kodpoenta posle v2.119.32 LAM-ALEF i v2.119.58 YEH-HAMZA u lancu _ApplyArabicShaping
Bismillah frazna ligatura (v2.119.62): standardna fraza Bismillah od 22 kodpoenta "بسم الله الرحمن الرحيم" spaja se u jedan glif U+FDFD ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM. Pokreće se kao prvi pre-pass u _ApplyArabicShaping (pre LAM-ALEF), tako da složeni Bismillah glif stiže do ostatka linije kao jedan kodpoent i downstream zamene ga ne dotiču
Public Query Helpers GetArabicJoiningClass vraća Unicode klasu povezivanja koju koristi statički arapski oblikovač. GetArabicPosition razrešava jedan znak u nizu u izolovani, početni, srednji ili završni položaj tako da pozivaoci mogu da pregledaju ili preslikaju iste odluke oblikovanja pre emitovanja teksta
How callers invoke it Pipelajn oblikovanja radi automatski unutar metoda za emitovanje Unicode teksta - nije potreban eksplicitan poziv "shape this". Prosledite Unicode-ulazne Arabic / Persian / Urdu nizove u THPDFPage.UnicodeTextOut ili THPDFPage.RtLTextOut i HotPDF mapira svaki ulazni kodpoen u njegov oblik prezentacije pre nego što upiše PDF tekstualni operator za prikaz. Originalni Unicode bajtovi se takođe hvataju u
Font requirements Font registrovan preko RegisterUnicodeTTF mora da sadrži glifove i za blok Arabic Presentation Forms-B (U+FE70 - U+FEFC) i, za persijski / urdu, za odgovarajući opseg Arabic Presentation Forms-A (U+FB50 - U+FDFF). Preporučeni fontovi koji dolaze sa kompletnim skupom:
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).
Kada registrovanom fontu nedostaje glif za izvedeni oblik prezentacije, HotPDF se vraća na osnovni Unicode codepoint i emituje ga nepromenjenog; čitači potom mogu pokušati sopstveno oblikovanje (Acrobat, Foxit) ili prikazati
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 introduced the opt-in
Kada je
ToUnicode CMap ligature reverse mapping (v2.119.61, v2.119.62, v2.119.65) Adobe-Identity-UCS ToUnicode CMap koji emituje
PUA synthetic codepoint emit (v2.119.68) AssignSyntheticCodepointForGID(GID; out CP): Boolean + GetSyntheticCodepointForGID(GID): Word omogućavaju da proizvođački kod emituje GSUB zamenske GID-ove koji nemaju prirodan Unicode kodpoent dostupan kroz fontov cmap. Dodeljivač izdaje kodpoente u Private Use Area (U+E000 - U+F8FF, 6400 slotova) i preslikava dodelu u FUnicodeCpToGid (tako da /CIDToGIDMap vraća sintetički CP nazad na ciljnu GID vrednost kod čitača), FAcroFormUnicodeAdvances (tako da v2.65 prelamanje reda pronađe ispravnu em-fraction) i u tabelu povratnog traženja po GID-u (tako da su ponovljeni zahtevi za dodelu idempotentni). Koristite ovo za oblike devanagari klastera, stilističke alternative i CJK ideografske varijacije koje GSUB uvodi, ali cmap ne doseže
Relationship to the OpenType GSUB engine Statički post-pass oblikovač opisan iznad (v2.85.0 + v2.119.32 / 58 / 60 / 62) po podrazumevanju je nezavisan od OpenType GSUB engine-a. Kada je
Za zamenske glifove bez Unicode codepointa, pozivaoci kombinuju
Scope and limitations BiDi algoritam ostaje van ove stranice: pozivaoci i dalje moraju sami da poređaju mešane LTR i RTL nizove ili da koriste zasebnu BiDi biblioteku. GPOS, Indic/Tibetan/Mongolian, Hebrew, N'Ko, Adlam, Thai/Lao i Javanese podrška sada živi na zasebnim opt-in stranicama sa zastavicama i API-jima oblikovanja, pa se ova stranica fokusira samo na statičko i GSUB-zasnovano Arabic oblikovanje
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 |