Articulo de referencia

Algoritmo bidireccional Unicode

El algoritmo bidireccional Unicode ( UBA ), definido formalmente en el Anexo 9 del estándar Unicode ( UAX 9 ), es una especificación desarrollada por el Consorcio Unicode que de...

El algoritmo bidireccional Unicode ( UBA ), definido formalmente en el Anexo 9 del estándar Unicode ( UAX 9 ), es una especificación desarrollada por el Consorcio Unicode que determina cómo se muestra el texto que contiene caracteres de escritura de izquierda a derecha y de derecha a izquierda. Es una parte normativa del estándar Unicode y su cumplimiento es obligatorio siempre que se muestren caracteres de escritura de derecha a izquierda, como el árabe o el hebreo .

Fondo

La mayoría de los sistemas de escritura muestran el texto de izquierda a derecha, pero varios alfabetos —como el árabe , el hebreo , el thaana y el siríaco— se escriben de derecha a izquierda. Cuando el texto aparece en ambas direcciones en un mismo documento, se denomina texto bidireccional (o bidi ). Sin una especificación clara, surgen ambigüedades al determinar el orden correcto de visualización de los caracteres.

El estándar Unicode prescribe un orden lógico para almacenar caracteres en la memoria, independientemente de su orientación visual. El UBA traduce este orden lógico a un orden de visualización correcto.

Caracteres de formato direccional

La UBA define varias categorías de caracteres de control especiales que se utilizan para influir en la dirección del texto:

Marcas direccionales implícitas

Caracteres ligeros de ancho cero que actúan como anclas direccionales sin afectar la visualización:

Incrustaciones direccionales explícitas

Indica que un fragmento de texto debe tratarse como incrustado en una dirección determinada:

Anulaciones direccionales explícitas

Obligar a que los personajes sean tratados como fuertemente direccionales, anulando sus tipos implícitos:

Aislamientos direccionales explícitos

Introducidos en Unicode 6.3 , los aislados impiden que el texto encerrado afecte al orden del texto circundante:

Personajes que terminan

El algoritmo

La UBA procesa el texto en cuatro fases principales:

1. Separación de párrafos

El texto se divide en párrafos en los caracteres separadores de párrafo (tipo B). Cada párrafo se procesa de forma independiente.

2. Inicialización

A cada carácter se le asigna un tipo de carácter bidireccional (por ejemplo, L, R, AL, EN, AN) de la base de datos de caracteres Unicode . También se inicializa una lista de niveles de incrustación .

3. Resolución de niveles de incrustación

Una serie de reglas determina el nivel de incrustación de cada carácter:

  • P1–P3 : Determinar el nivel de incrustación del párrafo (0 para LTR, 1 para RTL).
  • X1–X10 : Asignar niveles de incrustación explícitos basados ​​en caracteres de formato direccional.
  • W1–W7 : Resolver tipos débiles (por ejemplo, números europeos, separadores).
  • N0–N2 : Resuelve los tipos de formato neutros y aislados, incluidos los pares de corchetes .
  • I1–I2 : Resolver los niveles de incrustación implícitos.

La profundidad máxima de incrustación es de 125 niveles , un valor que se garantiza que no cambiará en futuras versiones del estándar. [ 1 ]

4. Reordenar

Las reglas L1–L4 reordenan los caracteres de cada línea para su visualización:

  • L1 : Restablece los espacios en blanco y separadores finales al nivel de incrustación del párrafo.
  • L2 : Invierte secuencias contiguas de caracteres en los niveles de incrustación más altos, descendiendo progresivamente hasta el nivel impar más bajo.
  • L3 : Reordena las marcas combinando en relación con sus caracteres base.
  • L4 : Aplica el reflejo de glifos a los caracteres con la Bidi_Mirroredpropiedad cuando su dirección de resolución es de derecha a izquierda (por ejemplo, "(" se convierte en ")").

Tipos de caracteres bidireccionales

Los personajes se clasifican en las siguientes categorías:

Conformidad

Una implementación conforme debe:

  • Mostrar todos los caracteres visibles en el orden descrito por la UBA (UAX9-C1).
  • Aplique únicamente las anulaciones de protocolo de nivel superior definidas en la Sección 4.3 de la especificación (UAX9-C2).

Protocolos de nivel superior

El UBA permite seis anulaciones de protocolo de nivel superior (HL1–HL6), que incluyen:

  • HL1 : Anular el nivel de incrustación del párrafo.
  • HL3 : Emula caracteres de formato direccional explícito mediante marcado (por ejemplo, atributo HTML ).dir
  • HL4 : Aplicar el UBA de forma independiente a segmentos de texto estructurado (por ejemplo, XML , código fuente ).
  • HL6 : Aplicar reflejo de glifos adicional más allá de la propiedad estándar Bidi_Mirrored.

Equivalentes de HTML y CSS

En las páginas web , los caracteres de formato direccional Unicode pueden ser reemplazados por marcado HTML5 y CSS3 :

Consideraciones de seguridad

El uso indebido de caracteres de formato bidireccional plantea importantes riesgos de seguridad , ya que pueden utilizarse para que código o texto malicioso parezca inofensivo. Esto se documenta en el Informe Técnico Unicode n.º 36 (UTR36). Las anulaciones direccionales (LRO, RLO) son especialmente peligrosas y deben evitarse siempre que sea posible.

Historia

  • Unicode 1.0 (1991): Se introdujo la compatibilidad bidireccional básica.
  • Unicode 6.3 (2013): Revisión importante que introduce caracteres direccionales aislados (LRI, RLI, FSI, PDI) y la resolución de pares de corchetes (regla N0). Estas adiciones se realizaron para abordar el efecto excesivamente fuerte de los caracteres direccionales incrustados en el texto circundante.
  • Unicode 17.0 (2025): Versión actual (Revisión 51).

Véase también

Referencias

  1. "Anexo estándar Unicode n.º 9: Algoritmo bidireccional Unicode" . Consorcio Unicode . Consultado el 13 de agosto de 2025 .
  • UAX #9: Algoritmo bidireccional Unicode (última versión)
  • UAX #9 Revisión 51 (Unicode 17.0.0)