|
Automaattinen muotoiluputki nostaa OpenType GSUB -moottorin pelkästä kyselyrajapinnasta tuottajapuolen ominaisuudeksi, jota sovelletaan automaattisesti, kun tekstiä tulostetaan PDF-sisältövirtoihin. Kutsujat ottavat käyttöön tietyt GSUB-ominaisuudet tyypitetyn joukon (ShapingFeatures: THPDFShapingFeatures) avulla, ja HotPDF huolehtii oikeiden korvausten suorittamisesta, korvaavien glyphien merkitsemisestä upotettuun fonttialijoukkoon sekä saavutettavuuden edellyttämien ToUnicode CMap -käänteiskartoitusmerkintöjen luomisesta
Valinnainen kehys (v2.119.59 / vaihe 8a)
A new enum and property control which automatic substitutions run during text emission:
type
THPDFShapingFeature = (
sfArabicGSUB, // natiivi arabian init / medi / fina / isol + rlig / calt / rclt
sfStandardLigatures, // latinalainen 'liga' (ff / fi / fl / ffi / ffl / sft / st)
sfContextualLigatures,// Latin 'clig' (contextual ligatures)
sfContextualAlternates,// 'rclt' (Required Contextual Alternates)
sfIndicShaping); // Devanagarin Repha + pre-base I-matra -uudelleenjärjestely
THPDFShapingFeatures = set of THPDFShapingFeature;
property ShapingFeatures: THPDFShapingFeatures read ... write ...;
Oletusarvona on [] (tyhjä joukko), mikä säilyttää tavutasolla identtisen tulosteen kutsujille, jotka riippuvat versioiden v2.119.32-58 staattisesta jälkiajon muotoilijasta. Yhden tai useamman lipun asettaminen nostaa moottorin automaattiseen tilaan vastaavien ominaisuuksien osalta
sfArabicGSUB - natiivi arabiankielinen GSUB-muotoilu (v2.185.0)
Kun sfArabicGSUB on asetettu, HotPDF kartoittaa loogisen arabian tekstijakson perusglyyfi-ID:iksi, soveltaa rekisteröidyn fontin asentoihin liittyviä init-, medi-, fina- ja isol-hakuja kullekin kirjaimelle valittuihin liittymiskohtiin ja soveltaa sitten hakuja rlig, calt ja rclt muotoillun jakson yli. Korvaavat glyyfit, joilla ei ole Unicode-koodipistettä, lähetetään synteettisen koodipisteen polun kautta käyttäen ToUnicode-käänteiskartoituksia, jotta fontit, joiden kontekstuaaliset arabian glyyfit sijaitsevat cmap-kartan ulkopuolella, voidaan edelleen upottaa ja kopioida oikein
Asetus sfArabicGSUB ohittaa implisiittisesti version v2.85.0 staattisen 4-asentoisen muotoilijan arabialle - kutsujien, joiden on annettava staattisen muotoilijan käsitellä edelleen koodipisteitä sen ulkopuolelta, mitä fontin GSUB ilmoittaa, tulisi jättää asetus sfArabicGSUB pois käytöstä
sfStandardLigatures / sfContextualLigatures - Phase 8b (v2.119.65)
Kun sfStandardLigatures on asetettu, latinalaiset standardiligatuurit taitetaan automaattisesti käyttäen fontin liga-ominaisuutta. ApplyLatinLigatureRefinement kohdistuu Alphabetic Presentation Forms -lohkoon (U+FB00-FB4F) - tyypillisesti FB00 ff, FB01 fi, FB02 fl, FB03 ffi, FB04 ffl, FB05 pitkä-s + t, FB06 st. sfContextualLigatures lisää toisen vaiheen fontin clig-ominaisuudelle. Molemmat vaiheet käyttävät samaa käänteistä cmap-mekanismia kuin sfArabicGSUB ja lähettävät 7 uutta ToUnicode CMap -käänteiskartoitusmerkintää (FB00-FB06), jotta kuluttajalukijan kopiointi ja liittäminen palauttaa ligatuurin takaisin alkuperäisiksi kirjaimiksi
sfContextualAlternates - GSUB 'rclt' (v2.119.66)
Kun sfContextualAlternates on asetettu, sovelletaan fontin rclt (Required Contextual Alternates) -ominaisuutta. Funktio ApplyArabicGSUBContextualRefinement käyttää version v2.119.47 ApplyContextualSubst-aloituspistettä ja käsittelee vaihtelevanpituista N-to-M-tulostetta (korvaus suoritetaan vain silloin, kun jokainen korvaava GID on saavutettavissa käänteisen cmap-kartan kautta). Käänteisen cmap-kartan aluetta laajennetaan arvoihin FB00-FDFF + FE70-FEFF kattamaan latinalaiset + arabialaiset + heprealaiset esitysmuodot
Tyypillisiä ominaisuuden rclt käyttäjiä: arabian kielen init / medi / fina / isol -muodot silloin, kun fontti ohjaa asemamuotoilua GSUB-taulukon kautta Unicode Presentation Forms -koodipisteiden sijaan; tietyt latinalaisten sarjojen selvennyssäännöt; intialaisen muotoilun pres / blws / psts / half / pstf / cjct -ominaisuudet silloin, kun fontin suunnittelija on rekisteröinyt ne nimellä rclt
sfIndicShaping - Phase 8e (v2.119.67)
Kun sfIndicShaping on asetettu, version v2.119.55 Devanagari-kyvykkyys ApplyDevanagariReorder ylennetään manuaalisesta metodista automaattiseksi esivaiheeksi, jota sovelletaan kolmen BuildUnicode*FieldContent-apuohjelman sisällä. Devanagari-jaksoissa Repha (Ra + Halant tavuklusterin alussa) siirtyy post-base-asentoon, ja pre-base I-matra (U+093F) siirtyy ennen klusterin kantakonsonanttia, jotta kuluttajalukijan GSUB-moottori ottaa tavun vastaan oikeassa hahmontamisjärjestyksessä. Muut intialaiset uudelleenjärjestelyt (above-base- / below-base-matra, ligatuurin muodostus) jäävät fontin GSUB-taulukkoon
Etenemäkyselytuki (v2.119.64 / vaihe 8c.5)
Kumppani-API tuo esille välimuistiin tallennetun /W em-murtoluvun, jotta kutsujat voivat laskea rivityksen oikein tulostaessaan GSUB-korvattuja glyfejä:
function GetCodepointAdvance(CP: Cardinal): Single;
Palauttaa hmtx-pohjaisen etenemäleveyden em-yksikön murto-osana cmap-ratkaistulle glyyfille kohdassa CP. Sama julkaisu korjasi myös funktion CodeUnitAdvance luokittelemaan arabian esitysmuodot (U+FB50-FDFF + U+FE70-FEFF) luokkaan NARROW luokan WIDE sijasta (heuristinen varavaihtoehto oli väärä ennen versiota v2.65)
Tyypillinen työnkulku (arabian täysi automaattinen muotoilu)
PDF.RegisterUnicodeTTF('NotoArab', 'NotoSansArabic-Regular.ttf');
PDF.ShapingFeatures :=
[sfArabicGSUB, // natiivit arabian GSUB-kontekstuaaliset glyfit
sfCursiveAttachment]; // GPOS-kursiivin sisäänmeno-/ulospääsyankkurit
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;
Tyypillinen työnkulku (latinalaiset standardiligatuurit + Devanagari-järjestely)
PDF.RegisterUnicodeTTF('NotoSans', 'NotoSans-Regular.ttf');
PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf');
PDF.ShapingFeatures :=
[sfStandardLigatures, // FB00-FB06 Latin liga
sfContextualLigatures, // + clig
sfIndicShaping]; // Devanagarin Repha + I-matra -uudelleenjärjestely
Phase 8 roadmap closure
Vaihe 8a (v2.119.59) valinnainen kehys + arabian kyvykkyys; Vaihe 8b (v2.119.65) latinalaiset standardiligatuurit; Vaihe 8c.1 (v2.119.60) Allah; Vaihe 8c.2 (v2.119.63) GID-tason GSUB rlig; Vaihe 8c.3 (v2.119.61) ToUnicode-käänteiskartoitus; Vaihe 8c.4 (v2.119.62) Bismillah; Vaihe 8c.5 (v2.119.64) etenemäkysely + heuristinen korjaus; Vaihe 8c.6 (v2.119.68) synteettisen PUA-koodipisteen lähetys; Vaihe 8d sisällytettiin 8c-alavaiheisiin; Vaihe 8e (v2.119.67) Devanagari-automaattijärjestely. Versiossa v2.119.68 vaiheen 8 kyvykkyysmatriisi on suljettu; lisähienosäätöjä (muut intialaiset kirjoitusjärjestelmät, OpenType GPOS -sijoittelu, BiDi-ratkaisu) seurataan erillisinä tiekartan kohteina
Laajuus ja rajoitukset
Valinnainen käsittelyputki on tarkoituksellisesti lisäys staattisen jälkikäsittelymuotoilijan päälle - olemassa olevat kutsujat eivät huomaa mitään muutosta toiminnassa, elleivät he ota sitä käyttöön. Oletusarvoinen tyhjä joukko [] on turvallinen valinta tavuvakaaseen regressioon. Fontit, joissa ei ole pyydettyjä GSUB-ominaisuustaulukoita, tuottavat turvallisen tyhjätoimintotuloksen (kutsujat eivät näe mitään sovellettua korvausta eikä poikkeuksia nosteta)
Nykyinen muotoilun API-kartta
Nykyinen käsittelyputki ei ole enää pelkästään korvaamiseen perustuva: sfKerning soveltaa GPOS-parivälistystä, sfMarkPositioning soveltaa Mark-to-Base- ja Mark-to-Mark-siirtymiä, sfMarkToLigature soveltaa Mark-to-Ligature-sijoittelua, sfCursiveAttachment soveltaa kaunokirjoituksen aloitus-/poistumisankkurien kohdistusta, sfTibetanShaping soveltaa tiibetin GSUB-muotoilua, sfMongolianShaping soveltaa mongolin asentoesityksiä ja sfIndicGSUB soveltaa intialaista GSUB-ominaisuusketjua tavujärjestelyn jälkeen. Katso ShapingFeatures, GPOS methods ja Indic shaping methods
Viimeaikaiset lisäykset tuovat ominaisuuden sfLocalizedForms toiminnolle locl, calt-toiminnon ApplyGSUBContextualFeature-kutsun kautta, kontekstuaalisen ja pystysuuntaisen GPOS-välistyksen, natiivin arabiankielisen GSUB-kontekstuaalisen glyyfilähetyksen sekä N'Ko-, Adlam-, Thai/Lao-, heprean- ja jaavanpolut. Katso script shaping preprocess methods
Katso myös: OpenType GSUB Substitution Engine, Arabic / Persian / Urdu Shaping Support, Syriac / Mongolian / Devanagari Shaping, THotPDF.AssignSyntheticCodepointForGID, CFF / OpenType Font Subsetting
|