|
THotPDF.AssignSyntheticCodepointForGID / GetSyntheticCodepointForGID THotPDF alocator de codepointuri sintetice PUA (v2.119.68)
|
GSUB Engine Auto Shaping Pipeline Arabic Shaping |
|
Alocă și interoghează codepointuri sintetice din Private Use Area (U+E000 - U+F8FF) pentru GID-urile de substituție OpenType GSUB care nu au un codepoint Unicode natural accesibil prin cmap-ul fontului. Închide golul de emitere la nivel de GID de pe partea producătorului, rămas de la API-urile de interogare și rafinare GSUB v2.119.43-66
Sintaxă Delphi: function AssignSyntheticCodepointForGID(GID: Word; out SyntheticCP: Word): Boolean; function GetSyntheticCodepointForGID(GID: Word): Word;
De ce există API-ul Pipeline-ul automat de formare de pe partea producătorului din v2.119.32-67 (arabic / latin / devanagari) cere ca GID-urile de substituție returnate de motorul GSUB să poată fi atinse printr-un codepoint Unicode - pipeline-ul existent de text codificat hex emite codepointuri, nu GID-uri, iar cititorul consumator rezolvă codepointul înapoi la un GID prin
Dar substituțiile specifice fontului care ajung la GID-uri interne ale fontului - majoritatea formelor de cluster Devanagari, alternativele stilistice pe care designerul le livrează doar ca GID-uri numerotate, secvențele de variație ideografică CJK (IVS), ligaturile discreționare fără Presentation Form corespunzător - nu au niciun codepoint în cmap-ul fontului. Înainte de v2.119.68, aceste GID-uri nu puteau fi atinse prin pipeline-ul hex de pe partea producătorului; v2.119.68 închide acest gol permițând apelanților să aloce un codepoint sintetic în Private Use Area pentru orice GID
Semantica AssignSyntheticCodepointForGID Alocă următorul codepoint PUA disponibil (începând cu U+E000) pentru GID-ul furnizat și oglindește atribuirea în fiecare cache de care depinde lanțul existent de rezolvare al pipeline-ului hex de pe partea producătorului + al cititorului consumator:
1. 2. 3.
Returnează
Semantica GetSyntheticCodepointForGID Interogare pur funcțională a oricărei atribuiri existente. Returnează codepointul sintetic alocat pentru
Ciclul de viață al stării alocatorului
Flux tipic (formă de cluster Devanagari)
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;
Exemplu de idempotentă
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)
Comportamentul cititorului consumator Cititorul consumator vede codepointul PUA în operatorul de afișare a textului și îl rezolvă prin
Comportamentul copy / paste: codepointurile PUA se întorc ca ele însele prin copy / paste când ToUnicode CMap le declară mapări identitate. Apelanții care doresc ca în schimb să se întoarcă la caracterele Unicode sursă (secvența de intrare care a produs substitutul) pot înregistra o mapare inversă cu
Închiderea roadmap-ului Phase 8 v2.119.68 / Phase 8c.6 închide roadmap-ul motorului GSUB din Phase 8: fiecare API de interogare LookupType 1-8 (Phase 1-6), API-ul de selecție Script / LangSys (Phase 7), punctul de intrare pentru închiderea subsetter-ului TTF (Phase 9), plierea statică a ligaturilor în post-pass (v2.119.32 / 58 / 60 / 62), pipeline-ul automat opțional (v2.119.59), emisia automată Arabic
Vezi și: Motorul de substituție OpenType GSUB, Fluxul automat de formare (Phase 8), Suport pentru formarea Arabic / Persian / Urdu, Formare Syriac / Mongolian / Devanagari, THotPDF.BeginTaggedContent |