Podpora za oblikovanje arabščine / perzijščine / urduja

Producer-side shaping pipeline (v2.85.0 - v2.119.68)

 

OpenType GSUB Engine  CFF / OpenType Subsetting

HotPDF izvaja cevovod oblikovanja na strani proizvajalca, kjer Unicode-arabske, perzijske in urdske vrstice zloži v njihove oblike Arabic Presentation Forms med izpisom besedila PDF, tako da odjemalci prejmejo pripravljene položajne / ligaturne glife brez potrebe po lastnem oblikovalcu razreda Harfbuzz

 

Kaj počne cevovod

Pozicijsko oblikovanje (v2.85.0): vsaka arabska osnovna črka ima do štiri pozicijske oblike - izolirano (isol), začetno (init), sredinsko (medi) in končno (fina). HotPDF pregleda razred vezave vsakega arabskega znaka in razrede vezave njegovih neposrednih sosedov, nato vhodno kodno točko preslika v ustrezni glif v Arabic Presentation Forms-B (U+FE70 - U+FEFC) pred izpisom. Nevezavni znaki, povezovalniki, prozorni znaki (kombinirani znaki) in tatvil kashida so obravnavani po algoritmu Unicode Arabic Shaping

 

Obvezna ligatura LAM-ALEF (v2.119.32): specifikacija Unicode Arabic Shaping določa, da se vsak LAM (U+0644), ki mu takoj sledi ALEF (U+0627 navaden, U+0622 z mado zgoraj, U+0623 s hamzo zgoraj, U+0625 s hamzo spodaj), zloži v en sam ligaturni glif (U+FEFB - U+FEFC, izolirana / končna oblika z ustreznimi različicami hamze / made). To je ena redkih obveznih ligatur v arabski tipografiji in je nujna za pravilnost; prikazovanje kot ločenih glifov ustvari besedilo, ki ga materni bralci takoj prepoznajo kot nepravilno. HotPDF zložitev izvede med izpisom, zato klicatelju v lastni poti ni treba imeti oblikovalnika razreda Harfbuzz

 

Osrednjih 9 črk perzijščine / urduja (v2.119.35): Perzijščina in urdu razširjata arabščino s črkami, ki niso v bloku Arabic Presentation Forms-B (U+FE70 - U+FEFC). Devet najpogosteje uporabljenih takih črk - vključno s 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) in HEH GOAL (U+06C1) - ima predstavitvene oblike v Arabic Presentation Forms-A (U+FB50 - U+FDFF). HotPDF zdaj te črke preslika v ustrezne glife Forms-A med položajnim oblikovanjem, zato se besedilo perzijščine in urduja izriše s pravilnimi oblikami init / medi / fina / isol v katerem koli odjemalnem bralniku

 

Arabski Extended-A + Supplement (v2.119.52, v2.119.56): tabela razredov vezave zdaj pokriva preostale znake Arabic Extended-A (različice ALEF WASLA / NOON GHUNNA / HEH), Arabic Supplement U+0750-U+077F in višji razpon Arabic Extended-A U+08A0-U+08FF. Znaki s statično kodiranostjo Presentation Forms-A se preslikajo skozi obstoječi 4-položajni oblikovalnik; znaki brez nje (večina Extended-A) dobijo le razvrstitev po razredu vezave, da se sosedi pravilno oblikujejo tudi, kadar znak sam ostane nespremenjen. v2.119.56 je popravil dve napačni preslikavi Forms-A, uvedeni v v2.119.52 (U+06C2 / U+06C3)

 

Popolna pokritost Form-B za perzijščino / urdujščino (v2.119.57): tabela razredov vezave je bila razširjena na celoten razpon U+0672-U+06D5 (okoli 80 znakov, ki zajemajo različice REH / DAL / SEEN / SAD / TAH / AIN / FEH / QAF / KAF / GAF / LAM / NOON / HEH / WAW / YEH), dodanih pa je bilo tudi 26 novih preslikav Presentation Forms-A (15 oblik razreda D s 4 oblikami + 11 oblik razreda R z 2 oblikama). Posebej sta zdaj pravilno preslikana urdski standardni 'h' HEH DOACHASHMEE (U+06BE → FBAA-FBAD) in besedilni končni yeh YEH BARREE (U+06D2 → FBAE-FBAF), ki sta bila v začasnem popravku v2.119.52 za ALEF WASLA / NOON GHUNNA zlorabljena v mestih Forms-A. Statična pokritost Forms-A zdaj obsega več kot 40 izvornih znakov

 

Dodaten prehod za ligature YEH-HAMZA + samoglasnik (v2.119.58): dodatni prehod, dodan v _ApplyArabicShaping po položajnem oblikovanju, pokriva osem parov ligatur v bloku Forms-A U+FBEA-U+FBFB - YEH-HAMZA + ALEF / AE / WAW / U / OE / YU / E / ALEF MAKSURA. Vsak par izpiše izolirano obliko (FBEA / FBEC / FBEE / FBF0 / FBF2 / FBF4 / FBF6 / FBF9) ter končno obliko base+1. Začetni in srednji reži FBF8 / FBFB ostaneta pogonu GSUB prek izbirne možnosti sfArabicGSUB. Zgrajeno na istem ogrodju kot v2.119.32 LAM-ALEF

 

Ligatura Allah (v2.119.60): zaporedje štirih znakov ALEF + LAM + LAM + HEH se zlije v U+FDF2 ARABIC LIGATURE ALLAH ISOLATED FORM. Izvedeno kot statični dodatni prehod na ravni kodne točke po v2.119.32 LAM-ALEF in v2.119.58 YEH-HAMZA v verigi _ApplyArabicShaping

 

Ligatura fraze Bismillah (v2.119.62): standardna fraza Bismillah z 22 kodnimi točkami "بسم الله الرحمن الرحيم" se zlije v en sam glif U+FDFD ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM. Teče kot prvi predhodni prehod v _ApplyArabicShaping (pred LAM-ALEF), zato zloženi glif Bismillah doseže preostali del cevovoda kot ena kodna točka in ga nadaljnje zamenjave ne popravljajo

 

Public Query Helpers

GetArabicJoiningClass vrne razred vezave Unicode, ki ga uporablja statični arabski oblikovalnik. GetArabicPosition razreši en znak v nizu v izoliran, začetni, sredinski ali končni položaj, tako da lahko klicatelji pregledajo ali posnemajo iste odločitve oblikovanja, preden izpišejo besedilo

 

How callers invoke it

Cevovod oblikovanja se samodejno izvaja znotraj metod za izpis Unicode besedila - poseben klic "oblikuj to" ni potreben. Nize arabščine / perzijščine / urduja z vhodom Unicode posredujte v THPDFPage.UnicodeTextOut ali THPDFPage.RtLTextOut in HotPDF vsako vhodno kodno točko pred pisanjem operatorja za prikaz besedila PDF preslika v njeno predstavitveno obliko. Izvorni bajti Unicode se zapišejo tudi v FUnicodeUsedCps za ustvarjanje ToUnicode CMap, zato kopiranje / lepljenje na strani bralnika in bralniki zaslona še vedno vidijo izvorni obseg Unicode

 

Font requirements

Pisava, registrirana prek RegisterUnicodeTTF, mora vsebovati glife za blok Arabic Presentation Forms-B (U+FE70 - U+FEFC) in za perzijščino / urdu ustrezni obseg Arabic Presentation Forms-A (U+FB50 - U+FDFF). Priporočene pisave, ki vključujejo celoten nabor:

 

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).

 

Ko registrirani pisavi manjka glif za izpeljano predstavitveno obliko, HotPDF pade nazaj na osnovno kodno točko Unicode in jo izpiše nespremenjeno; odjemalni bralniki lahko nato poskušajo lastno oblikovanje (Acrobat, Foxit) ali izrišejo .notdef

 

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 ShapingFeatures: THPDFShapingFeatures property and the THPDFShapingFeature enum, which elevates the shaping pipeline beyond static post-pass folding into automatic GSUB-driven font-specific substitution. Set PDF.ShapingFeatures := [sfArabicGSUB] to apply the registered font's native Arabic init, medi, fina, isol, rlig, calt, and rclt lookups and emit the resulting contextual glyph IDs; add sfCursiveAttachment to apply GPOS cursive entry/exit anchors to that shaped run; add sfStandardLigatures for Latin Standard Ligatures (FB00-FB06 ff / fi / fl / ffi / ffl / ſt / st via v2.119.65 ApplyLatinLigatureRefinement); add sfIndicShaping to enable the Devanagari pre-pass reorder (v2.119.67). Default [] preserves byte-identical output for callers who depend on the static pipeline.

 

Ko je sfArabicGSUB nastavljen, je statični oblikovalnik Unicode Presentation Forms obiden v korist izvornih pravil GSUB pisave. HotPDF prek sintetičnih kodnih točk izpisuje izvorne kontekstne identifikatorje glifov, kadar ti glifi niso dosegljivi prek cmap pisave, ohranja vdelani podnabor zaprt in za kopiranje ter lepljenje zapisuje obratne preslikave ToUnicode. Klicatelji, ki želijo, da statični oblikovalnik še naprej deluje za pokritost kodnih točk zunaj tega, kar določa GSUB pisave, naj sfArabicGSUB pustijo izklopljen in se zanesejo na statično verigo naknadne obdelave

 

ToUnicode CMap ligature reverse mapping (v2.119.61, v2.119.62, v2.119.65)

CMap ToUnicode Adobe-Identity-UCS, ki ga izpiše RegisterUnicodeTTF, vključuje vnose bfchar za obratno preslikavo za vsako kodno točko ligature, ki jo lahko ustvari veriga naknadne obdelave. v2.119.61 je dodal 27 vnosov (8 družin LAM-ALEF + 18 družin YEH-HAMZA + 1 Allah); v2.119.62 je dodal Bismillah (U+FDFD); v2.119.65 je dodal 7 vnosov latinskih standardnih ligatur (FB00-FB06). Kopiranje / lepljenje v odjemalskem bralniku razreši katerokoli ligaturno glifo nazaj v izvorno zaporedje kodnih točk, zato je izpisani PDF še vedno prijazen do dostopnosti

 

PUA synthetic codepoint emit (v2.119.68)

AssignSyntheticCodepointForGID(GID; out CP): Boolean + GetSyntheticCodepointForGID(GID): Word omogočata, da proizvajna koda izpiše nadomestne GID-je GSUB, ki prek fontove tabele cmap nimajo naravne Unicode kodne točke. Dodeljevalnik izdaja kodne točke v območju Private Use Area (U+E000 - U+F8FF, 6400 mest) in dodelitev zrcali v FUnicodeCpToGid (da /CIDToGIDMap sintetično CP vrne nazaj na ciljni GID pri potrošniškem bralniku), FAcroFormUnicodeAdvances (da v2.65 prelamljanje vrstic najde pravilno em-razmerje) in v povratno iskalno tabelo po GID (da so ponovne zahteve za dodelitev idempotentne). Uporabite to za oblike skupkov devanagari, slogovne alternative in zaporedja ideografskih različic CJK, ki jih GSUB uvede, cmap pa ne doseže

 

Razmerje do pogona OpenType GSUB

Opisani statični oblikovalnik naknadne obdelave (v2.85.0 + v2.119.32 / 58 / 60 / 62) je privzeto neodvisen od pogona OpenType GSUB. Ko je sfArabicGSUB omogočen prek ShapingFeatures, se pogon GSUB vključi v izhodno pot: HotPDF uporabi cmap za sestavo osnovnega polja GID, na ta tok glifov uporabi izvorna arabska položajna in kontekstna iskanja GSUB, dodeli sintetične kodne točke nadomestnim identifikatorjem glifov brez predstavitvene oblike Unicode in pokliče MarkUnicodeGlyphUsed, da nadomestne glife ohrani znotraj vdelanega podnabora pisave

 

Za nadomestne glife brez kodne točke Unicode klicatelji združijo ShapingFeatures z dodeljevalnikom sintetičnih kodnih točk PUA iz v2.119.68, tako da je nadomestni GID še vedno dosegljiv skozi standardni heksadecimalni cevovod. Statična veriga po obdelavi ostane privzeta rezervna možnost za kodne točke, ki jih deklaracije GSUB pisave ne pokrivajo

 

Obseg in omejitve

Algoritem BiDi ostaja zunaj te strani: klicatelji morajo mešane LTR in RTL tokove še vedno razporediti sami ali uporabiti ločeno knjižnico BiDi. Podpora GPOS, Indic/Tibetan/Mongolian, Hebrew, N'Ko, Adlam, Thai/Lao in Javanese je zdaj na ločenih straneh z izbirnimi zastavicami in API-ji oblikovanja, zato se ta stran osredotoča samo na statično in z GSUB osnovano arabsko oblikovanje

 

Glej tudi: Pogon zamenjav OpenType GSUB, Samodejni cevovod oblikovanja (faza 8), Oblikovanje sirskega, mongolskega in devanagarskega pisma, THotPDF.AssignSyntheticCodepointForGID, THPDFPage.RtLTextOut, THPDFPage.UnicodeTextOut, Delitev pisav CFF / OpenType