Syriac / Mongolian / Devanagari Shaping Support

Grænseflader for funktioner til flere skrifter (v2.119.53 - v2.119.55)

 

Arabic Shaping  Auto Shaping Pipeline  GSUB Engine

HotPDF eksponerer forbindelsesklasse-, positionsanalyse- og indisk stavelseskategori-funktionsflader til tre komplekse skrifter ud over arabisk: syrisk (U+0700-U+074F), mongolsk (U+1800-U+18AF) og devanagari (U+0900-U+097F). Hver funktionsevne lader kaldere styre skrifttypen via den eksisterende OpenType GSUB engine med korrekt formning, mens det tunge arbejde med klyngegrænser, BiDi-løsning og GPOS-positionering holdes uden for HotPDF's omfang

 

Syrisk formningsfunktion (v2.119.53)

To nye metoder blotlægger syrisk forbindelsesadfærd:

 

function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass;

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

 

Syrisk følger samme Right-Joining / Dual-Joining / Transparent / Non-Joining fire-klasses ramme som arabisk;GetSyriacJoiningClassklassificerer hvert kodepunkt i U+0700-U+074F blokken i henhold to Unicode-forbindelsesegenskabenGetSyriacPositiongennemgår en syrisk kørsel og løser hvert tegn til dets isolerede / initiale / mediale / finale position baseret på forbindelsesklasserne for dets umiddelbare naboer

 

I modsætning til arabisk har den syriske blokingen Presentation Forms præ-kodet i Unicode- der er intet syrisk modstykke til U+FB50-FDFF / U+FE70-FEFC arabiske Presentation Forms blokke. Forbrugere skal derfor styre syrisk formning via skrifttypedefinerede GSUB-opslag (typiskinit / medi / fina / isol + rlig) snarere end omskrivning af kodepunkter. Kapacitetslaget ovenfor giver kaldere de positionsetiketter, de skal bruge for at forespørge den rigtige GSUB-funktion for hver glyph

 

Mongolsk formningsfunktion (v2.119.54)

Two parallelle metoder for mongolsk:

 

function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass;

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

 

Dækning inkluderer grundlæggende mongolsk (U+1820-U+1842), Todo (U+1843-U+1877), Sibe (U+1880-U+18A8), Manchu og Ali Gali-udvidelser. Variationsvælgere FVS1 / FVS2 / FVS3 (U+180B-U+180D), den bløde bindestreg NIRUGU (U+180A) og Ali Gali-vokalmarkeringer klassificeres alle som gennemsigtige (T-klasse), så de deltager i forbindelsen uden at afbryde gennemgangen

 

Ligesom syrisk har mongolsk ingen Presentation Forms præ-kodet i Unicode. Mongolsks traditionelle lodrette layout, komplekse regler for bogstavforms-variation og FVS-drevet formvalg forventes alle at blive styret af skrifttypedefinerede GSUB-opslag (typiskinit / medi / fina / isol + ccmp / rlig / locl); kapacitetslaget giver kaldere de positionsetiketter, der kræves for at forespørge om disse funktioner

 

Devanagari indisk formningsfunktion (v2.119.55)

Devanagari er grundlæggende anderledes end arabisk / syrisk / mongolsk - det er en indisk abugida-skrift, hvor den betydningsfulde enhed er en stavelsesklynge (akshara), ikke et enkelt bogstav, og den gengivne rækkefølge af glyffer inde i en klynge er ofte anderledes end den logiske Unicode-rækkefølge. To metoder blotlægger Devanagaris indiske kapacitetslag:

 

function GetDevanagariCategory(CP: Cardinal): TIndicCategory;

procedure ApplyDevanagariReorder(var Run: array of Cardinal);

 

GetDevanagariCategoryklassificerer hvert kodepunkt i U+0900-U+097F i en af 13 indiske stavelseskategorier (Base / Consonant / Vowel / Independent Vowel / Vowel Mark / Pre-base Matra / Above-base Matra / Below-base Matra / Halant Virama / Repha / Anusvara / Visarga / Other), så kaldere kan detektere stavelsesgrænser og identificere, hvilke positioner inde i hver klynge der kræver omorganisering

 

ApplyDevanagariReorderer en pre-pass, der gennemgår input-kørslen og anvender de to vigtigste Devanagari-omorganiseringsregler: (1) Repha (Ra + Halant i begyndelsen af en stavelsesklynge) flyttes til positionen efter klyngens basiskonsonant, så den gengives som en hævet krog; (2) Pre-base I-matra (U+093F DEVANAGARI VOWEL SIGN I) flyttes før klyngens basiskonsonant, så den gengives som en krog på venstre side. Andre indiske omorganiseringer (above-base matra, below-base matra, konjunkt dannelse) overlades til skrifttypens GSUB-motor, da de kræver skrifttypespecifikke opslagstabeller

 

Automatisk integration (v2.119.67): nårsfIndicShaping in PDF.ShapingFeatures, ApplyDevanagariReorderanvendes automatisk som en pre-pass inde i de treBuildUnicode*FieldContenthjælpere. Forbrugerlæserens GSUB-motor opfanger derefter stavelsen i den korrekte rækkefølge og anvender sine egne kontekstuelle formningsregler. SeAutomatic Shaping Pipeline.

 

Typisk arbejdsgang (syrisk)

 

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

PDF.SetGSUBScript('syrc');// se GSUB motor dokumentation

fori := 0toLength(Run) - 1do

begin

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

  // forespørg GSUB efter den positionsrelevante erstatnings-glyph

  // emit + MarkUnicodeGlyphUsed

end;

 

Typisk arbejdsgang (Devanagari med automatisk omorganisering)

 

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

PDF.ShapingFeatures := [sfIndicShaping];// auto Repha + I-matra omorganisering

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

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

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

 

Hjælpere til Unicode-undersæt og -ekstraktion

RegisterToUnicodeReverseMappingregistrerer kildekodepunkter for formet eller syntetisk glyph-outputClearToUnicodeReverseMappingsnulstiller tabellen,ToUnicodeReverseMappingCountrapporterer dens størrelse,GetUnicodeGlyphForCodepointreturnerer det registrererede skrifttype glyph-id for et Unicode-kodepunkt, ogEnableShapingFeatureForSubsetmarkerer erstatningsglyffer fra en GSUB-funktion til inkludering i det indlejrede undersæt

 

Omfang og begrænsninger

Nuværende integration på producentsiden

Syrisk, mongolsk, tibetansk og indisk formning har nu eksplicitte API-referencesider. Syrisk kan aktiveres viaAutoShapeSyriac, mongolsk viasfMongolianShaping, tibetansk viasfTibetanShaping, indisk omorganisering viasfIndicShaping, og fuld indisk GSUB-formning viasfIndicGSUB. De detaljerede indgangspunkter er dokumenteret iTibetan/Mongolian/Syriac shaping methods and Indic shaping methods

Det aktuelle omfang dækker også N'Ko og Adlam som RTL-kursivskrifter, Thai/Lao SARA AM og tone-markering omorganisering, hebraisk niqqud omorganisering samt javanesiske præ-base tegn. Disse stier er dokumenteret iscript shaping preprocess metoder

 

 

Se også: Arabic / Persian / Urdu Shaping Support, Automatic Shaping Pipeline (Phase 8), OpenType GSUB Substitution Engine, THotPDF.AssignSyntheticCodepointForGID