|
Soporte de modelado siríaco / mongol / devanagari Multi-script capability surfaces (v2.119.53 - v2.119.55)
|
Arabic Shaping Auto Shaping Pipeline GSUB Engine |
|
HotPDF expone superficies de capacidad de clase de unión / análisis posicional / categoría silábica índica para tres escrituras complejas además del árabe: siríaco (U+0700-U+074F), mongol (U+1800-U+18AF) y devanagari (U+0900-U+097F). Cada capacidad permite que los llamadores pasen la escritura por el motor OpenType GSUB existente para obtener shaping correcto, manteniendo fuera del alcance de HotPDF el trabajo pesado (detección de límites de clúster, resolución BiDi, posicionamiento GPOS)
Capacidad de shaping siríaco (v2.119.53) Dos métodos exponen el comportamiento de unión del siríaco:
function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass; function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;
El siríaco sigue el mismo marco de cuatro clases Right-Joining / Dual-Joining / Transparent / Non-Joining que el árabe;
A diferencia del árabe, el bloque siríaco no tiene Presentation Forms pre-codificadas en Unicode: no existe un equivalente siríaco de los bloques Arabic Presentation Forms U+FB50-FDFF / U+FE70-FEFC. Por tanto, los consumidores deben realizar el shaping siríaco mediante búsquedas GSUB definidas por la fuente (normalmente
Capacidad de shaping mongol (v2.119.54) Dos métodos paralelos para el mongol:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
La cobertura incluye mongol básico (U+1820-U+1842), Todo (U+1843-U+1877), Sibe (U+1880-U+18A8), manchú y extensiones Ali Gali. Los Variation Selectors FVS1 / FVS2 / FVS3 (U+180B-U+180D), el guion blando NIRUGU (U+180A) y las marcas vocálicas Ali Gali se clasifican como Transparent (clase T), por lo que participan en la unión sin interrumpir el recorrido
Al igual que el siríaco, el mongol no tiene Presentation Forms pre-codificadas en Unicode. La disposición vertical tradicional del mongol, sus reglas complejas de variación de formas de letras y la selección de formas basada en FVS deben resolverse mediante búsquedas GSUB definidas por la fuente (normalmente
Capacidad de shaping índico devanagari (v2.119.55) Devanagari es fundamentalmente distinto de árabe / siríaco / mongol: es una escritura abugida índica en la que la unidad significativa es un clúster silábico (akshara), no una sola letra, y el orden renderizado de los glifos dentro de un clúster suele diferir del orden lógico Unicode. Dos métodos exponen la capa de capacidad índica de Devanagari:
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
Integración automática (v2.119.67): cuando
Flujo de trabajo típico (Syriac)
PDF.RegisterUnicodeTTF('Estrangelo', 'SyrCOMEdessa.otf'); PDF.SetGSUBScript('syrc'); // see GSUB engine doc for i := 0 to Length(Run) - 1 do begin Pos := PDF.GetSyriacPosition(Run, i); // init / medi / fina / isol // consultar GSUB para el glifo sustituto adecuado a la posición // emitir + MarkUnicodeGlyphUsed end;
Flujo de trabajo típico (Devanagari with automatic reorder)
PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf'); PDF.ShapingFeatures := [sfIndicShaping]; // auto Repha + I-matra reorder PDF.CurrentPage.SetFont('NotoDeva', [], 14); PDF.CurrentPage.UnicodeTextOut(50, 700, 0, UnicodeString(#$0939#$093F#$0928#$094D#$0926#$0940)); // "Hindi"
Unicode Subset and Extraction Helpers
Ámbito y limitaciones Integración actual del productor La conformación Syriac, Mongolian, Tibetan e Indic tiene ahora páginas de referencia API explícitas. Syriac puede activarse mediante El alcance actual cubre también N'Ko y Adlam como escrituras cursivas RTL, Thai/Lao para SARA AM y marcas tonales, Hebrew para ordenación de niqqud y Javanese para signos previos a la base. Estas rutas están documentadas en script shaping preprocess methods
Véase también: Soporte de modelado árabe / persa / urdu, Canalización automática de modelado (fase 8), Motor de sustitución OpenType GSUB, THotPDF.AssignSyntheticCodepointForGID |