Syriac / Mongolian / Devanagari Shaping Support

Multi-script capability surfaces (v2.119.53 - v2.119.55)

Arabian muotoilu Automaattinen muotoiluputki GSUB-moottori

HotPDF tarjoaa liittymisluokan / sijaintianalyysin / Indic-tavuluokkakonfiguraation pintoja kolmelle monimutkaiselle kirjoitusjärjestelmälle arabian lisäksi: syyria (U+0700-U+074F), mongoli (U+1800-U+18AF) ja devanagari (U+0900-U+097F). Kukin ominaisuus antaa kutsujien ajaa kirjoitusjärjestelmää olemassa olevan OpenType GSUB -moottorin kautta oikeaa muotoilua varten, säilyttäen samalla raskaan työn (ryhmärajan tunnistus, BiDi-selvitys, GPOS-sijoittelu) HotPDF's laajuuden ulkopuolella

Syriac shaping capability (v2.119.53)

Kaksi uutta metodia tuovat esiin syyrian liittymiskäyttäytymisen:

function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass;

function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;

Syyria noudattaa samaa neljän luokan kehystä (Right-Joining / Dual-Joining / Transparent / Non-Joining) kuin arabia; GetSyriacJoiningClass luokittelee jokaisen koodipisteen lohkossa U+0700-U+074F Unicoden liittymisominaisuuden mukaan. GetSyriacPosition käy läpi syyriankielisen tekstijakson ja selvittää kunkin merkin erillisen / aloittavan / keskellä olevan / lopettavan asennon sen välittömien naapureiden liittymisluokkien perusteella

Toisin kuin arabialla, syyrian lohkolla ei ole esitysmuotoja valmiiksi koodattuna Unicodeen - syyrialla ei ole vastetta arabian Presentation Forms -lohkoille U+FB50-FDFF / U+FE70-FEFC. Kuluttajien on siksi ohjattava syyrian muotoilua fontissa määritettyjen GSUB-hakujen (yleensä init / medi / fina / isol + rlig) kautta koodipisteiden uudelleenkirjoituksen sijaan. Yllä oleva kyvykkyyskerros antaa kutsujille sijaintitunnisteet, joita he tarvitsevat kysyäkseen oikeaa GSUB-ominaisuutta kullekin glyyfille

Mongolian shaping capability (v2.119.54)

Kaksi rinnakkaista metodia mongolille:

function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass;

function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;

Kattavuus sisältää mongolian perusmerkit (U+1820-U+1842), Todon (U+1843-U+1877), Siben (U+1880-U+18A8), mantšun ja Ali Gali -laajennukset. Variaatiovalitsimet FVS1 / FVS2 / FVS3 (U+180B-U+180D), pehmeä tavuviiva NIRUGU (U+180A) ja Ali Galin vokaalimerkit on kaikki luokiteltu läpinäkyviksi (T-luokka), joten ne osallistuvat liitokseen katkaisematta merkkisarjan läpikäyntiä

Kuten syyrialla, mongolilla ei ole Unicodeen valmiiksi koodattuja esitysmuotoja (Presentation Forms). Mongolian perinteisen pystysuuntaisen asettelun, monimutkaisten kirjainmuotojen variaatiosääntöjen ja FVS-ohjatun muodonvalinnan odotetaan kaikkien olevan fontin määrittelemien GSUB-hakujen (tyypillisesti init / medi / fina / isol + ccmp / rlig / locl) ohjaamia; kykykerros antaa kutsujille sijaintitunnisteet, joita tarvitaan kyseisten ominaisuuksien kyselyyn

Devanagari Indic shaping capability (v2.119.55)

Devanagari on perustavanlaatuisesti erilainen kuin arabia / syyria / mongoli – se on intialainen abugida-kirjoitusjärjestelmä, jossa merkityksellinen yksikkö on tavuryhmä (akshara), ei yksittäinen kirjain, ja glyfien piirtyvä järjestys ryhmän sisällä on usein erilainen kuin looginen Unicode-järjestys. Kaksi metodia tuo esille devanagarin intialaisen kykykerroksen:

function GetDevanagariCategory(CP: Cardinal): TIndicCategory;

procedure ApplyDevanagariReorder(var Run: array of Cardinal);

GetDevanagariCategory luokittelee jokaisen koodipisteen alueella U+0900-U+097F yhteen 13 intialaisesta tavuluokasta (Base / Consonant / Vowel / Independent Vowel / Vowel Mark / Pre-base Matra / Above-base Matra / Below-base Matra / Halant Virama / Repha / Anusvara / Visarga / Other), jotta kutsujat voivat havaita tavurajat ja tunnistaa, mitkä kohdat kussakin ryhmässä vaativat uudelleenjärjestelyä

ApplyDevanagariReorder on esiajo (pre-pass), joka käy läpi syötesarjan ja soveltaa kahta pääasiallista devanagari-uudelleenjärjestelysääntöä: (1) Repha (Ra + Halant tavuryhmän alussa) siirretään tavun peruskonsonantin jälkeiseen asemaan, jotta se piirtyy yläindeksikoukkuna; (2) kantaa edeltävä I-matra (U+093F DEVANAGARI VOWEL SIGN I) siirretään tavun peruskonsonantin edelle, jotta se piirtyy vasemmanpuoleisena koukkuna. Muut intialaiset uudelleenjärjestelyt (kannan yläpuolinen matra, kannan alapuolinen matra, konjunktin muodostus) jätetään fontin GSUB-moottorin tehtäväksi, koska ne vaativat fonttikohtaisia hakutaulukoita

Automaattinen integrointi (v2.119.67): kun sfIndicShaping in PDF.ShapingFeatures, ApplyDevanagariReorder suoritetaan automaattisesti esiajona (pre-pass) kolmen BuildUnicode*FieldContent-apuohjelman sisällä. Kuluttajan lukulaitteen GSUB-moottori poimii tavun oikeassa järjestyksessä ja soveltaa omia kontekstuaalisia muotoilusääntöjään. Katso Automatic Shaping Pipeline

Typical workflow (Syriac)

PDF.RegisterUnicodeTTF('Estrangelo', 'SyrCOMEdessa.otf');

PDF.SetGSUBScript('syrc'); // katso GSUB-moottorin dokumentaatio

for i := 0 to Length(Run) - 1 do

begin

Pos := PDF.GetSyriacPosition(Run, i); // init / medi / fina / isol

// kysy GSUB:lta sijaintiin sopivaa korvaavaa glyfiä

// emit + MarkUnicodeGlyphUsed

end;

Tyypillinen työnkulku (Devanagari automaattisella uudelleenjärjestelyllä)

PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf');

PDF.ShapingFeatures := [sfIndicShaping]; // automaattinen Repha + I-matra -uudelleenjärjestely

PDF.CurrentPage.SetFont('NotoDeva', [], 14);

PDF.CurrentPage.UnicodeTextOut(50, 700, 0,

UnicodeString(#$0939#$093F#$0928#$094D#$0926#$0940)); // "Hindi"

Unicode-osajoukko- ja erottamisapuohjelmat

RegisterToUnicodeReverseMapping tallentaa lähdekoodipisteet muotoillulle tai synteettiselle glyfitulostukselle. ClearToUnicodeReverseMappings nollaa taulukon, ToUnicodeReverseMappingCount ilmoittaa sen koon, GetUnicodeGlyphForCodepoint palauttaa rekisteröidyn fonttiglyfin tunnuksen Unicode-koodipisteelle ja EnableShapingFeatureForSubset merkitsee GSUB-ominaisuudesta peräisin olevat korvaavat glyfit sisällytettäväksi upotettuun alijoukkoon

Laajuus ja rajoitukset

Nykyinen tuottajapuolen integraatio

Syyrian, mongolin, tiibetin ja intialaisten kirjoitusjärjestelmien muotoilulla on nyt omat API-viitesivunsa. Syyria voidaan ottaa käyttöön asetuksella AutoShapeSyriac, mongoli asetuksella sfMongolianShaping, tiibet asetuksella sfTibetanShaping, intialaisten järjestely asetuksella sfIndicShaping ja intialaisten täysi GSUB-muotoilu asetuksella sfIndicGSUB. Yksityiskohtaiset aloituspisteet on dokumentoitu sivuilla Tibetan/Mongolian/Syriac shaping methods ja Indic shaping methods

Nykyinen laajuus kattaa myös N'Ko- ja Adlam-kirjoitukset RTL-kaunokirjoituksina, Thai/Lao SARA AM -merkin ja toonimerkkien järjestelyn, heprean niqqud-merkkien järjestelyn sekä jaavan esikantamerkit. Nämä polut on dokumentoitu sivulla script shaping preprocess methods

Katso myös: Arabic / Persian / Urdu Shaping Support, Automatic Shaping Pipeline (Phase 8), OpenType GSUB Substitution Engine, THotPDF.AssignSyntheticCodepointForGID