Articulo de referencia

Texto bidireccional

Un texto bidireccional contiene dos direcciones de texto : de derecha a izquierda (RTL) y de izquierda a derecha (LTR). Generalmente implica texto con diferentes tipos de alfabe...

Un texto bidireccional contiene dos direcciones de texto : de derecha a izquierda (RTL) y de izquierda a derecha (LTR). Generalmente implica texto con diferentes tipos de alfabeto , pero también puede referirse a la bustrofedon , que consiste en cambiar la dirección del texto en cada fila.

Un ejemplo es el nombre hebreo Sarah, escrito de derecha a izquierda: שרה , con sin (ש) a la derecha, resh (ר) en el medio y heh (ה) a la izquierda. Muchos programas informáticos no lograban mostrarlo correctamente, ya que estaban diseñados para mostrar texto en una sola dirección.

Algunos sistemas de escritura denominados de derecha a izquierda, como el persa y el árabe, se escriben mayoritariamente de derecha a izquierda, aunque no exclusivamente: las expresiones matemáticas, las fechas numéricas y los números con unidades se insertan de izquierda a derecha. Esto también ocurre si se inserta texto de un idioma que se escribe de izquierda a derecha, como el inglés; o viceversa, si se inserta texto árabe en un sistema de escritura que se escribe de izquierda a derecha, como el inglés.

Compatibilidad con scripts bidireccionales

La compatibilidad con escritura bidireccional es la capacidad de un sistema informático para mostrar correctamente texto en ambos sentidos. El término se suele abreviar como " BiDi " o " bidi ".

Las primeras instalaciones informáticas se diseñaron para admitir un único sistema de escritura , generalmente de izquierda a derecha, basado únicamente en el alfabeto latino . La incorporación de nuevos conjuntos de caracteres y codificaciones permitió admitir otros sistemas de escritura de izquierda a derecha, pero no facilitaba la compatibilidad con sistemas de escritura de derecha a izquierda como el árabe o el hebreo , y la combinación de ambos resultaba poco práctica. Los sistemas de escritura de derecha a izquierda se introdujeron mediante codificaciones como ISO/IEC 8859-6 e ISO/IEC 8859-8 , que almacenaban las letras (normalmente) en orden de escritura y lectura. Es posible invertir el orden de visualización de izquierda a derecha a derecha, pero esto implica sacrificar la capacidad de mostrar correctamente los sistemas de escritura de izquierda a derecha. Con la compatibilidad con escritura bidireccional, es posible combinar caracteres de diferentes sistemas de escritura en la misma página, independientemente de la dirección de escritura.

En particular, el estándar Unicode proporciona las bases para una compatibilidad completa con la escritura bidireccional (BiDi), con reglas detalladas sobre cómo se deben codificar y mostrar las combinaciones de escrituras de izquierda a derecha y de derecha a izquierda.

Compatibilidad con Unicode bidireccional

El estándar Unicode exige que los caracteres se ordenen «lógicamente», es decir, en la secuencia en la que se pretende que se interpreten, en contraposición a «visualmente», la secuencia en la que aparecen. Esta distinción es relevante para la compatibilidad con la codificación bidireccional (bidi), ya que en cualquier transición bidi, la presentación visual deja de ser la «lógica». Por lo tanto, para ofrecer compatibilidad con bidi, Unicode prescribe un algoritmo para convertir la secuencia lógica de caracteres en la presentación visual correcta. Con este fin, el estándar de codificación Unicode divide todos sus caracteres en cuatro tipos: «fuerte», «débil», «neutral» y «formato explícito». [ 1 ]

Personajes fuertes

Los caracteres fuertes son aquellos que tienen una dirección definida. Ejemplos de este tipo de caracteres incluyen la mayoría de los caracteres alfabéticos, los caracteres silábicos, los ideogramas Han, los dígitos no europeos o no árabes y los caracteres de puntuación específicos de esos sistemas de escritura.

Personajes débiles

Los caracteres débiles son aquellos con una dirección imprecisa. Ejemplos de este tipo de caracteres incluyen dígitos europeos, dígitos árabes-índicos orientales, símbolos aritméticos y símbolos monetarios.

Personajes neutrales

Los caracteres neutros tienen una dirección indeterminable sin contexto. Algunos ejemplos son los separadores de párrafo, las tabulaciones y la mayoría de los demás caracteres de espacio en blanco. Los símbolos de puntuación comunes a muchos alfabetos, como los dos puntos, la coma, el punto y el espacio de no separación, también entran en esta categoría.

Formato explícito

Los caracteres de formato explícito, también conocidos como "caracteres de formato direccional", son secuencias Unicode especiales que indican al algoritmo que modifique su comportamiento predeterminado. Estos caracteres se subdividen en "marcas", "incrustaciones", "aislamientos" y "anulaciones". Sus efectos persisten hasta que aparece un separador de párrafo o un carácter de "salto".

Marcas

Si un carácter "débil" va seguido de otro carácter "débil", el algoritmo examinará el primer carácter "fuerte" adyacente. En ocasiones, esto provoca errores de visualización involuntarios. Estos errores se corrigen o previenen con caracteres "pseudofuertes". Dichos caracteres de control Unicode se denominan marcas . La marca ( U+200E MARCA DE IZQUIERDA A DERECHA (LRM) o U+200F MARCA DE DERECHA A IZQUIERDA (RLM) ) se inserta en una posición para que un carácter débil incluido herede su dirección de escritura.

Por ejemplo, para mostrar correctamente el símbolo de marca registrada U+2122 para una marca en inglés (LTR) en un texto en árabe (RTL), se inserta una marca LRM después del símbolo de marca registrada si este no va seguido de texto LTR (por ejemplo, " قرأ Wikipedia™ ‎ طوال اليوم. "). Si no se añade la marca LRM, el carácter débil ™ estará rodeado por un carácter fuerte LTR y un carácter fuerte RTL. Por lo tanto, en un contexto RTL, se considerará RTL y se mostrará en un orden incorrecto (por ejemplo, " قرأ Wikipedia™ طوال اليوم. ").

Incrustaciones

Los caracteres de formato direccional de "incrustación" son el método clásico de formato explícito de Unicode y, a partir de Unicode 6.3, se desaconsejan en favor de los "aislamientos". Una "incrustación" indica que un fragmento de texto debe tratarse como direccionalmente distinto. El texto dentro del alcance de los caracteres de formato de incrustación no es independiente del texto circundante. Además, los caracteres dentro de una incrustación pueden afectar el orden de los caracteres externos. Unicode 6.3 reconoció que las incrustaciones direccionales suelen tener un efecto demasiado fuerte en su entorno y, por lo tanto, son innecesariamente difíciles de usar.

Aislamientos

Los caracteres de formato direccional "aislamiento" indican que un fragmento de texto debe tratarse como direccionalmente aislado de su entorno. A partir de Unicode 6.3, estos son los caracteres de formato que se recomiendan en los nuevos documentos, una vez que se confirma su compatibilidad con las plataformas de destino. Estos caracteres se introdujeron tras constatarse que las incrustaciones direccionales suelen tener un efecto excesivo en su entorno, lo que dificulta innecesariamente su uso. A diferencia de los caracteres de formato direccional "incrustación" tradicionales, los caracteres "aislamiento" no afectan al orden del texto fuera de su ámbito. Los caracteres "aislamiento" pueden anidarse y colocarse dentro de incrustaciones y anulaciones.

Anulaciones

Los caracteres de formato direccional de "anulación" permiten casos especiales, como en el caso de los números de pieza (por ejemplo, para forzar que un número de pieza compuesto por letras inglesas, dígitos y hebreas se escriba de derecha a izquierda), y se recomienda evitarlos siempre que sea posible. Al igual que con los demás caracteres de formato direccional, las "anulaciones" pueden anidarse unas dentro de otras, así como en incrustaciones y aislados.

Utilizar Unicode para anular

El uso de U+202D LEFT-TO-RIGHT OVERRIDE cambiará la dirección del texto de izquierda a derecha a derecha a izquierda. De manera similar, el uso de U+202E RIGHT-TO-LEFT OVERRIDE cambiará la dirección del texto de derecha a izquierda a izquierda a derecha según el algoritmo bidireccional de Unicode .

Papá

El carácter de formato direccional "pop", codificado en U+202C POP DIRECTIONAL FORMATTING , finaliza el alcance del "embedding", "override" o "isolate" más reciente.

Corre

En el algoritmo, cada secuencia de caracteres fuertes concatenados se denomina "secuencia". Un carácter "débil" situado entre dos caracteres "fuertes" con la misma orientación heredará dicha orientación. Un carácter "débil" situado entre dos caracteres "fuertes" con una dirección de escritura diferente heredará la dirección de escritura del contexto principal (en un documento LTR, el carácter se convertirá en LTR; en un documento RTL, se convertirá en RTL).

Tabla de posibles tipos de caracteres BiDi

Tipo de carácter bidireccional ( propiedad de carácter Unicode Bidi_Class ) [1]

Seguridad

En la vulnerabilidad Trojan Source se utilizan caracteres bidireccionales Unicode . [ 2 ]

Visual Studio Code resalta los caracteres de control BiDi desde la versión 1.62, publicada en octubre de 2021. [ 3 ]

Visual Studio resalta los caracteres de control BiDi desde la versión 17.0.3 publicada el 14 de diciembre de 2021. [ 4 ]

Scripts que utilizan texto bidireccional

jeroglíficos egipcios

Los jeroglíficos egipcios se escribían en dos direcciones, de modo que los signos que tenían una "cabeza" o una "cola" diferenciadas apuntaban hacia el principio de la línea.

Caracteres chinos y otros sistemas de escritura CJK

Los caracteres chinos se pueden escribir en cualquier dirección, así como verticalmente (de arriba abajo y luego de derecha a izquierda), especialmente en letreros (como placas), pero la orientación de cada carácter no cambia. Esto se observa con frecuencia en los autobuses turísticos de China, donde el nombre de la compañía suele ir desde la parte delantera del vehículo hasta la trasera; es decir, de derecha a izquierda en el lado derecho del autobús y de izquierda a derecha en el lado izquierdo. Los textos en inglés en el lado derecho del vehículo también suelen escribirse en orden inverso. (Véanse las imágenes del autobús turístico y del vehículo postal a continuación).

Del mismo modo, otros sistemas de escritura CJK compuestos por los mismos caracteres cuadrados, como el sistema de escritura japonés y el sistema de escritura coreano , también pueden escribirse en cualquier dirección, aunque las dos formas más comunes son horizontalmente de izquierda a derecha y de arriba abajo, y verticalmente de arriba abajo y de derecha a izquierda.

Boustrophedon

El bustrofedón es un estilo de escritura que se encuentra en las inscripciones griegas antiguas , en el antiguo sabaico (una lengua del antiguo Arabia meridional ) y en las runas húngaras . Este método de escritura alterna la dirección y, por lo general, invierte los caracteres individuales en cada línea sucesiva.

Tipo de luna

La tipografía Moon es una adaptación en relieve del alfabeto latino, inventada como un alfabeto táctil para personas ciegas. Inicialmente, el texto cambiaba de dirección (pero no de orientación de los caracteres) al final de las líneas. Unas líneas especiales en relieve conectaban el final de una línea con el comienzo de la siguiente. [ 5 ] Alrededor de 1990, cambió a una orientación de izquierda a derecha .

Véase también

Referencias

  1. "UAX #9: Algoritmo bidireccional de Unicode" . Unicode.org. 9 de mayo de 2018. Consultado el 26 de junio de 2018 .
  2. "Ataques de código fuente troyano" . trojansource.codes . Consultado el 17 de enero de 2022 .
  3. "Visual Studio Code octubre de 2021" . code.visualstudio.com . Consultado el 11 de noviembre de 2021 .
  4. "Notas de la versión 17.0 de Visual Studio 2022" . docs.microsoft.com . Consultado el 17 de enero de 2022 .
  5. Tipos de luna para ciegos , Colección de Biblias Ramseyer , Biblioteca Kathryn A. Martin , Universidad de Minnesota Duluth .
  • Anexo n.º 9 de las normas Unicode: El algoritmo bidireccional
  • Directrices del W3C sobre técnicas de autoría para texto bidireccional : incluye ejemplos y buenas explicaciones.
  • ICU International Components for Unicode contiene una implementación del algoritmo bidireccional, junto con otros servicios de internacionalización.