|
THotPDF.AssignSyntheticCodepointForGID / GetSyntheticCodepointForGID THotPDF PUA-Allokator für synthetische Codepoints (v2.119.68)
|
GSUB-Engine Automatische Formungspipeline Arabische Formung |
|
Allokiert und fragt synthetische Codepoints im Private Use Area (U+E000 - U+F8FF) für OpenType GSUB-Ersatz-GIDs ab, die keinen natürlichen Unicode-Codepoint besitzen, der über die cmap der Schriftart erreichbar ist; schließt die erzeugerseitige Emissionslücke auf GID-Ebene, die durch die GSUB-Abfrage- und Verfeinerungs-APIs in v2.119.43-66 hinterlassen wurde
Delphi-Syntax: function AssignSyntheticCodepointForGID(GID: Word; out SyntheticCP: Word): Boolean; function GetSyntheticCodepointForGID(GID: Word): Word;
Warum die API existiert Die erzeugerseitige automatische Formungspipeline in v2.119.32-67 (Arabisch / Lateinisch / Devanagari) erfordert, dass vom GSUB-Engine zurückgegebene Ersatz-GIDs über einen Unicode-Codepoint erreichbar sind — die bestehende hexadezimal codierte Textpipeline gibt Codepoints und keine GIDs aus, und der Reader auf Clientseite löst den Codepoint über die eingebettete
Schriftartspezifische Ersatzzeichen, die auf schriftartinternen GIDs landen — die meisten Devanagari-Clusterformen, stilistische Alternativen, die der Schriftdesigner nur als nummerierte GIDs bereitstellt, CJK-ideografische Variationssequenzen (IVS), diskretionäre Ligaturen ohne entsprechende Präsentationsform —, haben jedoch überhaupt keinen Codepoint in der cmap der Schriftart; vor Version v2.119.68 waren diese GIDs über die erzeugerseitige Hex-Pipeline unerreichbar; v2.119.68 schließt diese Lücke, indem Aufrufer einen synthetischen Codepoint im Private Use Area für jede beliebige GID allokieren können
Semantik von AssignSyntheticCodepointForGID Allokiert den nächsten verfügbaren PUA-Codepoint (beginnend bei U+E000) für die angegebene GID und spiegelt die Zuweisung in jedem Cache wider, von dem die bestehende erzeugerseitige Hex-Pipeline und die Auflösungskette des Client-Readers abhängen:
1. 2. 3.
Gibt bei Erfolg
Semantik von GetSyntheticCodepointForGID Rein funktionale Abfrage jeder bestehenden Zuweisung; gibt den für die
Lebenszyklus des Allokatorzustands
Typischer Arbeitsablauf (Devanagari-Clusterform)
PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf'); PDF.ShapingFeatures := [sfIndicShaping]; PDF.SetGSUBScript('deva');
// Ermitteln einer schriftartinternen Cluster-GID über die GSUB-Engine ClusterGID := PDF.GetSingleSubstituteGlyph(BaseGID, 'nukt'); if ClusterGID <> BaseGID then begin // Prüfen, ob die cmap den Ersatz erreicht — bei Indisch-Clustern // in der Regel nein, da Cluster-GIDs schriftartintern sind // Allokieren eines synthetischen Codepoints, den die erzeugerseitige // Hex-Pipeline ausgeben kann if PDF.AssignSyntheticCodepointForGID(ClusterGID, SyntheticCP) then begin // SyntheticCP liegt nun im Bereich U+E000-F8FF range; Ausgabe // über UnicodeTextOut wie ein normaler Codepoint PDF.CurrentPage.UnicodeTextOut(X, Y, 0, UnicodeChar(SyntheticCP)); PDF.MarkUnicodeGlyphUsed(ClusterGID); end; end;
Beispiel für Idempotenz
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 (keine Zuweisung)
Verhalten des Client-Readers Der Client-Reader sieht den PUA-Codepoint im Textanzeige-Operator, löst ihn über die im Dokument eingebettete
Kopier- und Einfügeverhalten: PUA-Codepoints werden beim Kopieren und Einfügen als sie selbst übertragen, wenn die ToUnicode-CMap sie als Identitätszuordnungen deklariert; Aufrufer, die stattdessen die ursprünglichen Unicode-Zeichen (die Eingabesequenz, die den Ersatz erzeugt hat) übertragen möchten, können eine umgekehrte Zuordnung mit
Abschluss der Phase 8 Roadmap v2.119.68 / Phase 8c.6 schließt die Phase 8 GSUB-Engine-Roadmap ab: Jede LookupType 1-8 Abfrage-API (Phase 1-6), die Script- / LangSys-Auswahl-API (Phase 7), der Einstiegspunkt für das TTF-Subsetting-Closure (Phase 9), das statische Ligatur-Folding im Post-Pass (v2.119.32 / 58 / 60 / 62), die optionale automatische Pipeline (v2.119.59), die automatische Ausgabe von arabischem
Siehe auch: OpenType GSUB-Ersetzungs-Engine, Automatische Formungspipeline (Phase 8), Unterstützung für Arabisch / Persisch / Urdu, Syrisch / Mongolisch / Devanagari-Formung, THotPDF.BeginTaggedContent |