Automatikus formázási pipeline (Phase 8)

Opcionális (opt-in) előállító-oldali GSUB pipeline (v2.119.59 - v2.120.10)

 

Arab formázás Többírású formázás GSUB motor

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