|
Soporte de modelado árabe / persa / urdu Canalización de modelado del lado productor (v2.85.0 - v2.119.68)
|
OpenType GSUB Engine CFF / OpenType Subsetting |
|
HotPDF ejecuta una canalización de modelado del lado productor que convierte secuencias árabes, persas y urdu de entrada Unicode en sus Arabic Presentation Forms durante la emisión de texto PDF, de modo que los lectores reciben glifos posicionales y de ligadura listos para renderizar sin necesitar un modelador propio de clase Harfbuzz
Qué hace la canalización Modelado posicional (v2.85.0): cada letra base árabe tiene hasta cuatro formas posicionales - aislada (
Ligadura obligatoria LAM-ALEF (v2.119.32): la especificación Arabic Unicode Shaping exige que cualquier LAM (U+0644) seguida inmediatamente por un ALEF (U+0627 normal, U+0622 con madda arriba, U+0623 con hamza arriba, U+0625 con hamza abajo) se pliegue en un solo glifo de ligadura (U+FEFB - U+FEFC formas aislada / final con variantes apropiadas de hamza / madda). Esta es una de las muy pocas ligaduras no opcionales en la tipografía árabe y es necesaria para la corrección; renderizarlas como glifos separados produce texto que los lectores nativos reconocen de inmediato como mal formado. HotPDF realiza el pliegue durante la emisión para que los llamadores no necesiten un modelador de clase Harfbuzz en su propia ruta de código
Nueve letras núcleo de persa / urdu (v2.119.35): el persa y el urdu amplían el árabe con letras que no están en el bloque Arabic Presentation Forms-B (U+FE70 - U+FEFC). Las 9 letras más usadas de ese grupo - entre ellas PEH (U+067E), TCHEH (U+0686), JEH (U+0698), KEH (U+06A9 / U+06AF), GAF (U+06AF), NOON GHUNNA (U+06BA), HEH DOACHASHMEE (U+06BE), YEH BARREE (U+06D2) y HEH GOAL (U+06C1) - tienen formas de presentación en Arabic Presentation Forms-A (U+FB50 - U+FDFF). HotPDF ahora asigna estas letras al glifo Forms-A adecuado durante el modelado posicional, de modo que el texto persa y urdu se renderiza con las formas init / medi / fina / isol correctas en cualquier lector consumidor
Arabic Extended-A + Supplement (v2.119.52, v2.119.56): la tabla de clases de unión ahora cubre los caracteres restantes de Arabic Extended-A (ALEF WASLA / NOON GHUNNA / variantes HEH), Arabic Supplement U+0750-U+077F y el rango superior Arabic Extended-A U+08A0-U+08FF. Los caracteres con una codificación estática de Presentation Forms-A se asignan mediante el modelador de 4 posiciones existente; los que no la tienen (la mayoría de Extended-A) solo reciben clasificación por clase de unión para que los vecinos se modelen correctamente incluso cuando el propio carácter se pasa sin cambios. v2.119.56 corrigió dos asignaciones Forms-A erróneas introducidas por v2.119.52 (U+06C2 / U+06C3)
Cobertura completa de Persian / Urdu Form-B (v2.119.57): la tabla de clases de unión se amplió para abarcar todo el rango U+0672-U+06D5 (unas 80 caracteres que cubren variantes de REH / DAL / SEEN / SAD / TAH / AIN / FEH / QAF / KAF / GAF / LAM / NOON / HEH / WAW / YEH), y se agregaron 26 nuevos mapeos de Presentation Forms-A (15 formas de 4 formularios de clase D + 11 formas de 2 formularios de clase R). En particular, el HEH DOACHASHMEE estándar 'h' del urdu (U+06BE → FBAA-FBAD) y el yeh final de palabra YEH BARREE del urdu (U+06D2 → FBAE-FBAF) ahora se asignan correctamente a las posiciones Forms-A que el arreglo temporal de ALEF WASLA / NOON GHUNNA de v2.119.52 había usado mal. La cobertura estática de Forms-A ahora abarca más de 40 caracteres de origen
Pospaso de ligadura YEH-HAMZA + vocal (v2.119.58): un pospaso agregado a
Ligadura Allah (v2.119.60): la secuencia de cuatro caracteres ALEF + LAM + LAM + HEH se pliega en U+FDF2 ARABIC LIGATURE ALLAH ISOLATED FORM. Implementado como un pospaso estático a nivel de código de punto después de LAM-ALEF v2.119.32 y YEH-HAMZA v2.119.58 en la cadena
Ligadura de la frase Bismillah (v2.119.62): la frase Bismillah estándar de 22 códigos de punto "بسم الله الرحمن الرحيم" se pliega en un solo glifo U+FDFD ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM. Se ejecuta como la primera prepasada en
Ayudantes públicos de consulta
Cómo lo invocan los llamadores La canalización de modelado se ejecuta automáticamente dentro de los métodos de emisión de texto Unicode - no hace falta una llamada explícita de "dar forma a esto". Pase cadenas árabe / persa / urdu de entrada Unicode a THPDFPage.UnicodeTextOut o THPDFPage.RtLTextOut y HotPDF asigna cada código de punto de entrada a su forma de presentación antes de escribir el operador PDF de presentación de texto. Los bytes Unicode originales también se capturan en
Requisitos de fuente La fuente registrada mediante
Noto Sans Arabic (latín + árabe; Forms-A + Forms-B + Arabic Extended-A) Noto Naskh Arabic, Noto Naskh Arabic UI Amiri (traditional Naskh, full Forms-A + Forms-B coverage) Scheherazade New (SIL, designed for languages of the Muslim world) Microsoft Arabic Typesetting / Tahoma / Times New Roman (Windows-bundled, full Forms-B; some have Forms-A coverage)
Cuando la fuente registrada no tiene un glifo para una forma de presentación derivada, HotPDF retrocede al código de punto Unicode base y lo emite sin cambios; los lectores consumidores pueden entonces intentar su propio modelado (Acrobat, Foxit) o renderizar
Flujo de trabajo típico
PDF.RegisterUnicodeTTF('NotoArab', 'NotoSansArabic-Regular.ttf'); PDF.BeginDoc; PDF.CurrentPage.SetFont('NotoArab', [], 14); PDF.CurrentPage.RtLTextOut(100, 700, 0, UnicodeString(#$0645#$0631#$062D#$0628#$0627)); // "marhaba" (hello) PDF.EndDoc;
Integrazione automatica della pipeline fase 8 (v2.119.59 - v2.119.68) v2.119.59 introdujo la propiedad optativa
Cuando
Mappatura inversa delle legature nella CMap ToUnicode (v2.119.61, v2.119.62, v2.119.65) La CMap ToUnicode Adobe-Identity-UCS emitida por
Emisión de codepoints sintéticos PUA (v2.119.68)
Relación con el motor OpenType GSUB El modelador estático de pospaso descrito arriba (v2.85.0 + v2.119.32 / 58 / 60 / 62) es independiente del motor OpenType GSUB de forma predeterminada. Cuando la canalización automática de la Fase 8 se habilita mediante
Para glifos sustitutos sin código de punto Unicode, los llamadores combinan
Alcance y limitaciones El algoritmo BiDi queda fuera de esta página: quien llama a la API debe ordenar las secuencias LTR y RTL mezcladas o usar una biblioteca BiDi separada. GPOS, Indic/Tibetan/Mongolian, Hebrew, N'Ko, Adlam, Thai/Lao y Javanese ahora viven en páginas propias de banderas y API de modelado opcionales, por lo que esta página se centra solo en el modelado Arabic estático y basado en GSUB
Ver también: Motor de sustitución OpenType GSUB, Canalización automática de modelado (fase 8), Modelado siríaco / mongol / devanagari, THotPDF.AssignSyntheticCodepointForGID, THPDFPage.RtLTextOut, THPDFPage.UnicodeTextOut, Subconjunto de fuentes CFF / OpenType |