|
THotPDF.AssignSyntheticCodepointForGID / GetSyntheticCodepointForGID THotPDF asignador de codepoints sintéticos PUA (v2.119.68)
|
GSUB Engine Auto Shaping Pipeline Arabic Shaping |
|
Asigna y consulta codepoints sintéticos del Private Use Area (U+E000 - U+F8FF) para GIDs sustitutos de OpenType GSUB que no tienen un codepoint Unicode natural alcanzable mediante el cmap de la fuente. Cierra la brecha de emisión a nivel de GID del lado del productor que dejaron las API de consulta y refinamiento GSUB v2.119.43-66
Sintaxis Delphi: function AssignSyntheticCodepointForGID(GID: Word; out SyntheticCP: Word): Boolean; function GetSyntheticCodepointForGID(GID: Word): Word;
Por qué existe la API La canalización automática del lado productor v2.119.32-67 (árabe / latín / devanagari) requiere que los GID sustitutos devueltos por el motor GSUB puedan alcanzarse mediante un codepoint Unicode: la canalización de texto codificada en hexadecimal existente emite codepoints, no GID, y el lector consumidor resuelve el codepoint de vuelta a un GID mediante
Pero los sustitutos específicos de la fuente que terminan en GID internos de la fuente - la mayoría de las formas de clúster devanagari, las alternas estilísticas que el diseñador de la fuente distribuye solo como GID numerados, las secuencias de variación ideográfica CJK (IVS), las ligaduras discrecionales sin Presentation Form correspondiente - no tienen ningún codepoint en el cmap de la fuente. Antes de v2.119.68 estos GID eran inalcanzables mediante la canalización hexadecimal del lado productor; v2.119.68 cierra esa brecha al permitir que quien llama asigne un codepoint sintético en el Private Use Area para cualquier GID
Semántica de AssignSyntheticCodepointForGID Asigna el siguiente codepoint PUA disponible (comenzando en U+E000) para el GID proporcionado y replica la asignación en todas las cachés de las que depende la cadena de resolución de la canalización hexadecimal del lado productor + lector consumidor
1. 2. 3.
Devuelve
Semántica de GetSyntheticCodepointForGID Consulta puramente funcional de cualquier asignación existente. Devuelve el codepoint sintético asignado para
Ciclo de vida del estado del asignador
Flujo de trabajo típico (forma de clúster 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;
Ejemplo de idempotencia
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)
Comportamiento del lector consumidor El lector consumidor ve el codepoint PUA en el operador de presentación de texto y lo resuelve mediante el
Comportamiento de copiar y pegar: los codepoints PUA hacen ida y vuelta como ellos mismos en copiar y pegar cuando la CMap ToUnicode los declara como asignaciones de identidad. Los llamadores que en cambio quieran que hagan ida y vuelta los caracteres Unicode de origen (la secuencia de entrada que produjo el sustituto) pueden registrar un mapeo inverso con
Cierre de la hoja de ruta de la fase 8 v2.119.68 / Phase 8c.6 cierra el recorrido del motor GSUB de la Fase 8: cada API de consulta LookupType 1-8 (Fases 1-6), la API de selección Script / LangSys (Fase 7), el punto de entrada de cierre del subconjunto TTF (Fase 9), el plegado estático de ligaduras en pospaso (v2.119.32 / 58 / 60 / 62), la canalización automática opcional (v2.119.59), la emisión automática de
Ver también: Motor de sustitución OpenType GSUB, Canalización automática de modelado (fase 8), Soporte de modelado árabe / persa / urdu, Modelado siríaco / mongol / devanagari, THotPDF.BeginTaggedContent |