¿Cómo cambio el orden o la posición de los caracteres en las fuentes Unicode cuando un idioma lo exige?

Al diseñar una fuente para otro idioma en Unicode, ¿cómo cambia la posición de los caracteres para que se muestren como deben aparecer?

Editar: dado que los caracteres no parecen aparecer para algunos de ustedes, incluyo una imagen con el texto y haré referencia a qué línea de la imagen me refiero cuando use los caracteres (Formato: [carácter]/[ número de línea en la imagen])

Imagen de los personajes de Gurmukhi

Por ejemplo, en Gurmukhi, el carácter ਿ/1 (vocal) debe aparecer antes del carácter (consonante) al que está adjunto. Por ejemplo, cuando se adjunta a ਸ/2, aparece como ਸਿ/3. Aunque aparece antes, el carácter ਿ/1 en realidad está después del carácter ਸ/2 (en términos de cómo se almacena). Puede ver esto copiando los caracteres juntos en otro cuadro de texto y presionando la tecla de retroceso.

Es notable que incluso cambia el carácter al que está adjunto para crear espacio cuando es necesario. Vea este ejemplo: ਨਾਮ/4 y ਨਾਮਿ/5. Puede aquí que desplaza el carácter ਮ/6 a la derecha para crear espacio para el carácter ਿ/1 (nuevamente, puede verlo mejor si copia y presiona la tecla de retroceso).

He visto otras posiciones de personajes manejadas con anclas, pero esas no parecen aplicarse aquí exactamente. Incluso para otros personajes en Gurmukhi, las anclas se usan para cambiar la posición del personaje. Por ejemplo, la forma en que se supone que ੁ/7 debe colocarse debajo de una consonante, así: ਸੁ/8. La forma en que las fuentes Unicode manejan esto es con anclas, pero cuando se trata de ਿ/1, ese no es el caso. Al abrir una fuente Unicode en algo como FontForge, puede ver que no hay anclas en el carácter ਿ/1 (U+0A3F en caso de que quiera verlo). Además, he visto que los idiomas de derecha a izquierda como el árabe tampoco tienen anclas, por lo que probablemente también se manejen de una manera diferente.

Pero, ¿cómo se manejan exactamente estos casos?

Sus caracteres de ejemplo no se muestran con la fuente predeterminada en esta página. Por lo que puedo decir, no tengo ninguna fuente en mi computadora que contenga los glifos que usas como ejemplo. Sin embargo, se muestran cuando los veo en el móvil.
Sugeriría reemplazar sus ejemplos con imágenes de los glifos.
Gracias por hacérmelo saber. Traté de agregar imágenes, pero dice que necesito al menos 10 puntos de reputación para publicar más de 2 enlaces. Supongo que puedo tratar de ponerlos a todos en una sola imagen, tal vez.
He actualizado la pregunta con una imagen y referencias a esa imagen.
No todas las características del script se pueden expresar en una fuente OpenType. No puedo encontrar mi comentario reciente sobre una pregunta similar, pero la esencia es que para algunos scripts complejos esto necesita asistencia de software.
Están sucediendo algunas cosas diferentes en diferentes situaciones, pero muchas de las combinaciones de caracteres son simplemente ligaduras (están en árabe y bengalí al menos, así que asumo lo mismo aquí)
Lo encontré: Nota de Microsoft sobre Gurajati . Cita de TLDR: "Las fuentes OpenType no deben tener sustituciones que intenten realizar el reordenamiento".

Respuestas (1)

Combinación de personajes y posicionamiento

Las fuentes OpenType tienen una tabla de posicionamiento de glifos (GPOS) que se utiliza para proporcionar un control preciso sobre la ubicación de los glifos para el diseño de texto sofisticado y la representación en diferentes scripts. La tabla GPOS puede colocar glifos de varias formas.

De la especificación OpenType de Microsoft :

La tabla GPOS admite ocho tipos de acciones para colocar y adjuntar glifos:

  • Un archivo adjunto en cursiva describe escrituras en cursiva y otros glifos que están conectados con puntos de archivo adjunto cuando se procesan.

  • Un archivo adjunto MarkToBase coloca las marcas de combinación con respecto a los glifos base, como cuando se colocan vocales, marcas diacríticas o marcas de tono en árabe, hebreo y vietnamita.

  • Un archivo adjunto MarkToLigature coloca las marcas combinadas con respecto a los glifos de ligadura. Debido a que las ligaduras pueden tener varios puntos para unir marcas, el desarrollador de la fuente debe asociar cada marca con uno de los componentes del glifo de ligadura.

  • Un archivo adjunto MarkToMark coloca una marca en relación con otra, como cuando se colocan las marcas de tono con respecto a las marcas diacríticas de las vocales en vietnamita.

  • El posicionamiento contextual describe cómo colocar uno o más glifos en contexto, dentro de una secuencia identificable de glifos específicos, clases de glifos o conjuntos variados de glifos. Se pueden realizar una o más operaciones de posicionamiento en secuencias de contexto de "entrada". La figura 4e ilustra un contexto para los ajustes de posicionamiento.

  • Encadenamiento El posicionamiento contextual describe cómo colocar uno o más glifos en un contexto encadenado, dentro de una secuencia identificable de glifos específicos, clases de glifos o conjuntos variados de glifos. Se pueden realizar una o más operaciones de posicionamiento en secuencias de contexto de "entrada".

La tabla GPOS en combinación con la combinación de caracteres se puede usar para crear signos diacríticos y otras combinaciones de diseño.

Hay especificaciones de OpenType para la compatibilidad con scripts que requieren reposicionamiento y diseños complejos; estas características deben ser automáticas e implementadas por el motor de diseño de OpenType.

Un ejemplo de cómo el motor de diseño OpenType puede combinar cadenas Gurmukhi complejas:

Motor de modelado OpenType que combina caracteres

Sin embargo, en realidad, estos no se implementan universalmente, los productos de Adobe (todos excepto Photoshop, creo), por ejemplo, tienen muchos problemas para escribir scripts complejos y de derecha a izquierda sin usar versiones específicas del software de "Oriente Medio".

Referencias y lectura:


Caracteres precompuestos y ligaduras

En realidad, las estructuras más complejas requeridas por algunas secuencias de comandos son difíciles o imposibles de lograr con las características de diseño y posicionamiento de OpenType, por lo que las combinaciones de caracteres suelen ser caracteres precompuestos o ligaduras .

Por ejemplo, Unicode tiene una gran cantidad de ligaduras árabes, algunas para palabras y frases completas, como Allah (U+FDF2) :

ligadura de Alá

Y bismillah ar-rahman ar-rahim :

ingrese la descripción de la imagen aquí

Por lo que puedo decir, el bloque Gurmukhi Unicode no contiene ligaduras ni caracteres precompuestos, pero es perfectamente posible que una fuente contenga ligaduras para ciertas combinaciones (sé que muchas fuentes árabes y bengalíes las tienen, que son las solo guiones que no sean latinos con los que tengo alguna experiencia).

Cero experiencia en este asunto, pero buscando encontré la fuente Raavi que "... es una fuente OpenType para la escritura índica: Gurmukhi". microsoft.com/typography/fonts/family.aspx?FID=254