¿Cuál es la diferencia entre un personaje, un punto de código, un glifo y un grafema?

Tratar de entender las sutilezas del Unicode moderno me está haciendo doler la cabeza. En particular, la distinción entre puntos de código, caracteres, glifos y grafemas, conceptos que en el caso más simple , cuando se trata de texto en inglés usando caracteres ASCII, todos tienen una relación de uno a uno, me está causando problemas.

Al ver cómo se usan estos términos en documentos como el JavaScript de Matthias Bynens tiene un problema Unicode o la pieza de Wikipedia sobre la unificación de Han , he llegado a la conclusión de que estos conceptos no son lo mismo y que es peligroso combinarlos, pero estoy algo así como luchando por comprender lo que significa cada término.

El Consorcio Unicode ofrece un glosario para explicar estas cosas, pero está lleno de “definiciones” como esta:

Carácter abstracto . Una unidad de información utilizada para la organización, control o representación de datos textuales. …

Carácter . … (2) Sinónimo de personaje abstracto. (3) La unidad básica de encoding para la encoding de caracteres Unicode. …

Glifo . (1) Una forma abstracta que representa una o más imágenes de glifos. (2) Un sinónimo de imagen de glifo. Al mostrar datos de caracteres Unicode, se pueden seleccionar uno o más glifos para representar un personaje en particular.

Grapheme . (1) Una unidad de escritura mínimamente distintiva en el contexto de un sistema de escritura particular. …

La mayoría de estas definiciones poseen la calidad de sonido muy académico y formal, pero carecen de la calidad de significar cualquier cosa , o bien difieren el problema de la definición a otra entrada o sección del estándar del glosario.

Así que busco la sabiduría arcana de los más instruidos que yo. ¿En qué se diferencian exactamente cada uno de estos conceptos, y en qué circunstancias no tendrían una relación de uno a uno con el otro?

  • El carácter es un término sobrecargado que puede significar muchas cosas.

  • Un punto de código es la unidad de información atómica. El texto es una secuencia de puntos de código. Cada punto de código es un número al que le da significado el estándar Unicode.

  • Una unidad de código es la unidad de almacenamiento de una parte de un punto de código codificado. En UTF-8 esto significa 8 bits, en UTF-16 esto significa 16 bits. Una única unidad de código puede representar un punto de código completo, o parte de un punto de código. Por ejemplo, el glifo de muñeco de nieve ( ) es un punto de código único, pero 3 unidades de código UTF-8 y 1 unidad de código UTF-16.

  • Un grafema es una secuencia de uno o más puntos de código que se muestran como una sola unidad gráfica que un lector reconoce como un único elemento del sistema de escritura. Por ejemplo, tanto a como ä son grafemas, pero pueden consistir en múltiples puntos de código (por ejemplo, ä pueden ser dos puntos de código, uno para el carácter base a seguido de uno para la diaresis, pero también existe un código único alternativo, legado punto que representa este grafema). Algunos puntos de código nunca forman parte de ningún grafema (por ejemplo, el no-anotador de ancho cero o anulaciones direccionales).

  • Un glifo es una imagen, generalmente almacenada en una fuente (que es una colección de glifos), que se usa para representar grafemas o partes de los mismos. Las fonts pueden componer múltiples glifos en una sola representación, por ejemplo, si lo anterior ä es un único punto de código, una fuente puede elegir representarlo como dos glifos separados, espacialmente superpuestos. Para OTF, las tablas GSUB y GPOS de la fuente contienen información de sustitución y posicionamiento para que esto funcione. Una fuente también puede contener múltiples glifos alternativos para el mismo grafema.

Fuera del estándar Unicode, un personaje es una unidad individual de texto compuesta por uno o más grafemas . Lo que el estándar Unicode define como “personajes” es en realidad una mezcla de grafemas y caracteres. Unicode proporciona reglas para la interpretación de grafemas yuxtapuestos como caracteres individuales.

Un punto de código Unicode es un número único asignado a cada carácter Unicode (que es un personaje o un grafema).

Desafortunadamente, las reglas Unicode permiten que algunos grafemas yuxtapuestos se interpreten como otros grafemas que ya tienen sus propios puntos de código ( formularios precompuestos ). Esto significa que hay más de una forma en Unicode para representar un personaje. La normalización de Unicode soluciona este problema.

Un glifo es la representación visual de un personaje. Una fuente proporciona un conjunto de glifos para un determinado conjunto de caracteres (no caracteres Unicode). Para cada personaje, hay un número infinito de glifos posibles.

Una respuesta a Mark Amery

Primero, como dije, hay un número infinito de glifos posibles para cada personaje, así que no, un personaje no está “siempre representado por un solo glifo”. Unicode no se preocupa mucho por los glifos, y las cosas que define en sus tablas de códigos ciertamente no son glifos. El problema es que tampoco son todos personajes. Entonces, ¿qué son?

¿Cuál es la entidad más grande, el grafema o el personaje? ¿Cómo se llaman esos elementos gráficos en el texto que no son letras ni signos de puntuación? Un término que viene rápidamente a la mente es “grafema”. Es una palabra que conjura precisamente la idea de “una unidad gráfica en un texto”. Ofrezco esta definición: Un grafema es el componente distinto más pequeño en un texto escrito .

Se podría ir por el otro lado y decir que los grafemas están compuestos de personajes, pero que luego se llamarían “grafemas chinos”, y todos esos pedazos y piezas de los que se componen los grafemas chinos deberían llamarse “personajes”. Sin embargo, eso es todo al revés. Los grafemas son los pequeños trozos y piezas distintivos. Los personajes están más desarrollados. La frase “los glifos son compostables”, estaría mejor expresada en el contexto de Unicode ya que “los caracteres son compostables”.

Unicode define los caracteres pero también define los grafemas que se van a componer con otros grafemas o caracteres. Esas monstruosidades que compusiste son un buen ejemplo de esto. Si atrapan tal vez obtendrán sus propios puntos de código en una versión posterior de Unicode;)

Hay un elemento recurrente en todo esto. En los niveles superiores, los grafemas se convierten en caracteres que se convierten en grafemas, pero son los grafemas todo el camino hacia abajo.