|
Az automatikus formázási pipeline a képesség-alapú lekérdező felületről előállító-oldali funkcióvá emeli az OpenType GSUB motort, amely automatikusan alkalmazásra kerül, amikor a szöveg kiírásra kerül a PDF tartalomfolyamokba. A hívók egy típusos halmazon (ShapingFeatures: THPDFShapingFeatures) keresztül engedélyezhetnek konkrét GSUB funkciókat, és a HotPDF gondoskodik a megfelelő helyettesítések futtatásáról, a helyettesítő glifák megjelöléséről a beágyazott betűtípus-részhalmazban, valamint az akadálymentesítéshez szükséges ToUnicode CMap fordított leképezési bejegyzések kibocsátásáról
Opcionális (opt-in) keretrendszer (v2.119.59 / Phase 8a)
Egy új enum és tulajdonság szabályozza, hogy mely automatikus helyettesítések fussanak a szövegkibocsátás során:
type
THPDFShapingFeature = (
sfArabicGSUB, // natív arab init / medi / fina / isol + rlig / calt / rclt
sfStandardLigatures, // latin 'liga' (ff / fi / fl / ffi / ffl / sft / st)
sfContextualLigatures,// latin 'clig' (kontextuális ligatúrák)
sfContextualAlternates,// 'rclt' (szükséges kontextuális alternatívák)
sfIndicShaping); // devanagari Repha + alap-előtti I-matra újrarendezés
THPDFShapingFeatures = set of THPDFShapingFeature;
property ShapingFeatures: THPDFShapingFeatures read ... write ...;
Az alapértelmezett érték a [] (üres halmaz), amely bájt-azonos kimenetet biztosít a v2.119.32-58-as statikus utólagos menetformázótól függő hívók számára. Egy vagy több flag beállítása automatikus módba helyezi a motort a megfelelő funkciókhoz
sfArabicGSUB - natív arab GSUB formázás (v2.185.0)
Ha a sfArabicGSUB be van állítva, a HotPDF leképezi a logikai arab futamot az alap glifa-azonosítókra, alkalmazza a regisztrált betűtípus pozicionális init, medi, fina és isol kereséseit az egyes betűkhöz választott kapcsolódási pozíciókban, majd alkalmazza a rlig, calt és rclt kereséseket a formázott futamon. A Unicode kódponttal nem rendelkező helyettesítő glifák a szintetikus kódpont útvonalon keresztül kerülnek kibocsátásra ToUnicode fordított leképezésekkel, így a kontextuális arab glifákkal rendelkező, a cmap-en kívüli betűtípusok is beágyazhatók és helyesen másolhatók maradnak
A sfArabicGSUB beállítása burkoltan megkerüli az arab nyelv v2.85.0-s statikus 4 pozíciós formázóját – azok a hívók, akiknek szükségük van a statikus formázóra a betűtípus GSUB által nem deklarált kódpontok kezelésére, hagyják kikapcsolva a sfArabicGSUB-ot
sfStandardLigatures / sfContextualLigatures - Phase 8b (v2.119.65)
Ha a sfStandardLigatures be van állítva, a latin standard ligatúrák automatikusan összevonásra kerülnek a betűtípus liga funkciójának használatával. Az ApplyLatinLigatureRefinement az Alphabetic Presentation Forms (betűrendes bemutatási formák) blokkot (U+FB00-FB4F) célozza meg – jellemzően: FB00 ff, FB01 fi, FB02 fl, FB03 ffi, FB04 ffl, FB05 hosszú-s + t, FB06 st. A sfContextualLigatures egy második menetet ad hozzá a betűtípus clig funkciójához. Mindkét menet ugyanazt a fordított cmap mechanizmust használja, mint a sfArabicGSUB, és 7 új ToUnicode CMap fordított leképezési bejegyzést (FB00-FB06) bocsát ki, így a felhasználói olvasó másolása / beillesztése feloldja a ligatúrákat a forrásbetűkké
sfContextualAlternates - GSUB 'rclt' (v2.119.66)
Ha a sfContextualAlternates be van állítva, a betűtípus rclt (Required Contextual Alternates – szükséges kontextuális alternatívák) funkciója kerül alkalmazásra. Az ApplyArabicGSUBContextualRefinement a v2.119.47 ApplyContextualSubst belépési pontot használja, és változó hosszúságú N-to-M kimenetet kezel (a helyettesítés csak akkor kerül végrehajtásra, ha minden helyettesítő GID elérhető a fordított cmap-en keresztül). A fordított cmap tartománya kiterjed a FB00-FDFF + FE70-FEFF tartományra a latin + arab + héber bemutatási formák lefedéséhez
A rclt kanonikus felhasználói: az arab init / medi / fina / isol formák, amikor a betűtípus a pozicionális formázást a GSUB-on keresztül vezérli a Unicode Presentation Forms kódpontok helyett; bizonyos latin szekvencia egyértelműsítési szabályok; az Indic formázás pres / blws / psts / half / pstf / cjct funkciói, ha azokat a betűtípus tervezője rclt-ként regisztrálta
sfIndicShaping - Phase 8e (v2.119.67)
Ha a sfIndicShaping be van állítva, a v2.119.55-ös devanagari ApplyDevanagariReorder képesség manuális metódusból automatikus előzetes menetté lép elő, amely a három BuildUnicode*FieldContent segédmetóduson belül kerül alkalmazásra. A devanagari futamok Repha (Ra + Halant a klaszter elején) karaktere az alap utáni pozícióba kerül, az alap előtti I-matra (U+093F) pedig a klaszter alapmássalhangzója elé helyeződik át, így a felhasználói olvasó GSUB motorja a megfelelő renderelési sorrendben olvassa be a szótagot. A többi indiai újrarendezés (alap feletti / alap alatti matra, konjunkt képzés) a betűtípus GSUB-jában marad
Szélesség-lekérdezés támogatása (v2.119.64 / Phase 8c.5)
Egy kísérő API elérhetővé teszi a gyorsítótárazott /W em-töredéket, így a hívók helyesen számíthatják ki a sortörést a GSUB-helyettesített glifák kibocsátásakor:
function GetCodepointAdvance(CP: Cardinal): Single;
Visszaadja a hmtx-ből származtatott szélességet em-töredékként a cmap-feloldott glifához a CP helyen. Ugyanez a kiadás javította a CodeUnitAdvance metódust is, hogy az arab bemutatási formákat (U+FB50-FDFF + U+FE70-FEFF) NARROW-ként (keskeny) osztályozza WIDE (széles) helyett (a heurisztikus tartalék megoldás rossz volt a v2.65 előtt)
Tipikus munkafolyamat (teljes arab automatikus formázás)
PDF.RegisterUnicodeTTF('NotoArab', 'NotoSansArabic-Regular.ttf');
PDF.ShapingFeatures :=
[sfArabicGSUB, // native Arabic GSUB contextual glyphs
sfCursiveAttachment]; // GPOS cursive entry / exit anchors
PDF.SetGSUBScript('arab');
PDF.BeginDoc;
PDF.CurrentPage.SetFont('NotoArab', [], 14);
PDF.CurrentPage.RtLTextOut(100, 700, 0,
UnicodeString(#$0628#$0633#$0645#$0020#$0627#$0644#$0644#$0647));
PDF.EndDoc;
Tipikus munkafolyamat (latin standard ligatúrák + devanagari újrarendezés)
PDF.RegisterUnicodeTTF('NotoSans', 'NotoSans-Regular.ttf');
PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf');
[sfStandardLigatures, // FB00-FB06 Latin liga
sfContextualLigatures, // + clig
sfIndicShaping]; // Devanagari Repha + I-matra reorder
Phase 8 roadmap lezárása
Phase 8a (v2.119.59) opt-in keretrendszer + arab képesség; Phase 8b (v2.119.65) latin standard ligatúrák; Phase 8c.1 (v2.119.60) Allah; Phase 8c.2 (v2.119.63) GID-szintű GSUB rlig; Phase 8c.3 (v2.119.61) ToUnicode fordított leképezés; Phase 8c.4 (v2.119.62) Bismillah; Phase 8c.5 (v2.119.64) szélesség-lekérdezés + heurisztikus javítás; Phase 8c.6 (v2.119.68) PUA szintetikus kódpont kibocsátás; a Phase 8d be lett olvasztva a 8c al-fázisaiba; Phase 8e (v2.119.67) devanagari automatikus újrarendezés. A v2.119.68 verzióval a Phase 8 képességi mátrix lezárult; a további finomítások (további indiai írások, OpenType GPOS pozicionálás, BiDi feloldás) külön roadmap elemek alatt kerülnek nyomon követésre
Hatókör és korlátozások
Az opcionális (opt-in) pipeline szándékosan additív a statikus utólagos formázóhoz képest – a meglévő hívók nem látnak viselkedésbeli változást, hacsak nem választják azt. Az alapértelmezett [] halmaz a biztonságos választás a bájt-stabil regresszióhoz. A kért GSUB funkciótáblákkal nem rendelkező betűtípusok biztonságos üres műveletet (no-op) eredményeznek (a hívók nem látnak alkalmazott helyettesítést, nem keletkeznek kivételek)
Jelenlegi formázási API térkép
A jelenlegi pipeline már nem csak helyettesítésre korlátozódik: a sfKerning GPOS pár-alapú alávágást (kerning) alkalmaz, a sfMarkPositioning Mark-to-Base és Mark-to-Mark eltolásokat alkalmaz, a sfMarkToLigature Mark-to-Ligature elhelyezést alkalmaz, a sfCursiveAttachment kurzív belépési/kilépési horgony-igazítást alkalmaz, a sfTibetanShaping tibeti GSUB formázást alkalmaz, a sfMongolianShaping mongol pozicionális formákat alkalmaz, és a sfIndicGSUB az indiai GSUB funkcióláncot alkalmazza a szótag-újrarendezés után. Lásd: ShapingFeatures, GPOS módszerek és Indic formázási módszerek
A legutóbbi kiegészítések hozzáadják a sfLocalizedForms-ot a locl-hoz, a calt-ot az ApplyGSUBContextualFeature-ön keresztül, a kontextuális és vertikális GPOS kerninget, a natív arab GSUB kontextuális glifa-kibocsátást, valamint a N'Ko, Adlam, thai/laoszi, héber és jávai útvonalakat. Lásd: írásrendszer formázási előfeldolgozási módszerek
Lásd még: OpenType GSUB Substitution Engine, Arabic / Persian / Urdu Shaping Support, Syriac / Mongolian / Devanagari Shaping, THotPDF.AssignSyntheticCodepointForGID, CFF / OpenType Font Subsetting
See also: OpenType GSUB Substitution Engine, Arabic / Persian / Urdu Shaping Support, Syriac / Mongolian / Devanagari Shaping, THotPDF.AssignSyntheticCodepointForGID, CFF / OpenType Font Subsetting
|