|
THotPDF.AssignSyntheticCodepointForGID / GetSyntheticCodepointForGID THotPDF PUA synthetic codepoint allocator (v2.119.68)
|
GSUB Engine Auto Shaping Pipeline Arabic Shaping |
|
Wijst synthetische codepoints toe in de Private Use Area (U+E000 - U+F8FF) en haalt ze op voor OpenType GSUB-vervangings-GID's die geen natuurlijk Unicode-codepoint hebben dat via de cmap van het lettertype bereikbaar is. Sluit de emissiekloof aan producerzijde op GID-niveau die overbleef na de v2.119.43-66 GSUB-query- en refine-API's
Delphi-syntaxis: function AssignSyntheticCodepointForGID(GID: Word; out SyntheticCP: Word): Boolean; function GetSyntheticCodepointForGID(GID: Word): Word;
Waarom de API bestaat De automatische vormingspijplijn aan producerzijde v2.119.32-67 (Arabisch / Latijn / Devanagari) vereist dat vervangings-GID's die door de GSUB-engine worden teruggegeven, bereikbaar zijn via een Unicode-codepoint - de bestaande hex-gecodeerde tekstpijplijn geeft codepoints uit, geen GID's, en de lezer lost het codepoint via de ingebedde
Maar letterspecifieke substituten die op interne GID's van het lettertype landen - de meeste Devanagari-clustervormen, stilistische alternatieven die de ontwerper alleen als genummerde GID's levert, CJK-ideografische variantiesequenties (IVS), discretionaire ligaturen zonder bijbehorende Presentation Form - hebben helemaal geen codepoint in de cmap van het lettertype. Voor v2.119.68 waren deze GID's onbereikbaar via de hex-pijplijn aan producerzijde; v2.119.68 sluit dat gat door aanroepers voor elke GID een synthetisch codepoint in de Private Use Area te laten toewijzen
Semantiek van AssignSyntheticCodepointForGID Wijst het eerstvolgende beschikbare PUA-codepoint toe, beginnend bij U+E000, voor de opgegeven GID en spiegelt die toewijzing naar elke cache waarop de bestaande producer-side hex-pijplijn en de resolutieketen van de reader vertrouwen:
1. 2. 3.
Geeft
Semantiek van GetSyntheticCodepointForGID Zuivere query van een bestaande toewijzing. Geeft het synthetische codepoint terug dat voor
Levenscyclus van de allocatorstatus
Typische workflow (Devanagari cluster shape)
PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf'); PDF.ShapingFeatures := [sfIndicShaping]; PDF.SetGSUBScript('deva');
// Get a font-internal cluster GID through the GSUB engine ClusterGID := PDF.GetSingleSubstituteGlyph(BaseGID, 'nukt'); if ClusterGID <> BaseGID then begin // Check if cmap reaches the substitute - usually no for Indic // clusters, since cluster GIDs are font-internal // Allocate a synthetic codepoint that the producer-side // hex pipeline can emit if PDF.AssignSyntheticCodepointForGID(ClusterGID, SyntheticCP) then begin // SyntheticCP is now in the U+E000-F8FF range; emit it // through UnicodeTextOut just like a normal codepoint PDF.CurrentPage.UnicodeTextOut(X, Y, 0, UnicodeChar(SyntheticCP)); PDF.MarkUnicodeGlyphUsed(ClusterGID); end; end;
Voorbeeld van idempotentie
PDF.AssignSyntheticCodepointForGID(150, CP1); // CP1 = $E000 PDF.AssignSyntheticCodepointForGID(151, CP2); // CP2 = $E001 PDF.AssignSyntheticCodepointForGID(150, CP3); // CP3 = $E000 (idempotent) CP4 := PDF.GetSyntheticCodepointForGID(150); // CP4 = $E000 CP5 := PDF.GetSyntheticCodepointForGID(999); // CP5 = 0 (no assignment)
Gedrag van de consumer-reader De consumer-reader ziet het PUA-codepoint in de tekstweergave-operator en lost het via de in het document ingebedde
Kopiëer- en plakgedrag: PUA-codepoints doorlopen kopiëren en plakken als zichzelf wanneer de ToUnicode CMap ze als identiteitsmappings declareert. Aanroepers die willen dat de bron-Unicodekarakters (de invoerreeks die de substitutie produceerde) in plaats daarvan mee teruggaan, kunnen een omgekeerde mapping registreren met
Afsluiting van de Phase 8-roadmap v2.119.68 / Phase 8c.6 sluit de roadmap van de Phase 8-GSUB-engine af: elke LookupType 1-8-query-API (Phase 1-6), de Script / LangSys-selectie-API (Phase 7), het afsluitpunt voor de TTF-subsetter (Phase 9), de statische post-pass ligature folding (v2.119.32 / 58 / 60 / 62), de opt-in automatische pijplijn (v2.119.59), automatische emissie van Arabische
Zie ook: OpenType GSUB-vervangingsengine, Automatische vormingspijplijn (fase 8), Ondersteuning voor Arabische / Perzische / Urdu-vorming, Syrische / Mongoolse / Devanagari-vorming, THotPDF.BeginTaggedContent |