Texto bidireccional

Ajustar Compartir Imprimir Citar

Un texto bidireccional contiene dos direcciones de texto, de derecha a izquierda (RTL) y de izquierda a derecha (LTR). Por lo general, se trata de texto que contiene diferentes tipos de alfabetos, pero también puede referirse a boustrophedon, que cambia la dirección del texto en cada fila.

Muchos programas informáticos no muestran correctamente el texto bidireccional. Por ejemplo, esta página está escrita principalmente en inglés LTR, y aquí está el nombre hebreo RTL Sarah: שרה, deletreado sin (ש) a la derecha, resh (ר) en el medio, y heh (ה) a la izquierda.

Algunas de las denominadas escrituras de derecha a izquierda, como la escritura persa (y la árabe), son en su mayoría, pero no exclusivamente, de derecha a izquierda; las expresiones matemáticas, las fechas numéricas y los números que contienen unidades se incrustan de izquierda a derecha. Eso también sucede si, p. El inglés está incrustado en ellos, o viceversa, si el árabe, el persa o el hebreo están incrustados en una escritura de izquierda a derecha.

Compatibilidad con secuencias de comandos bidireccionales

El soporte de secuencias de comandos bidireccionales es la capacidad de un sistema informático para mostrar correctamente texto bidireccional. El término a menudo se abrevia como "BiDi" o "bidi".

Las primeras instalaciones informáticas se diseñaron únicamente para admitir un único sistema de escritura, por lo general para escrituras de izquierda a derecha basadas únicamente en el alfabeto latino. La adición de nuevos conjuntos de caracteres y codificaciones de caracteres permitió admitir una serie de otras secuencias de comandos de izquierda a derecha, pero no admitió fácilmente las secuencias de comandos de derecha a izquierda como el árabe o el hebreo, y mezclar los dos no era práctico. Los scripts de derecha a izquierda se introdujeron a través de codificaciones como ISO/IEC 8859-6 e ISO/IEC 8859-8, almacenando las letras (generalmente) en orden de escritura y lectura. Es posible cambiar simplemente el orden de visualización de izquierda a derecha a un orden de visualización de derecha a izquierda, pero esto sacrifica la capacidad de mostrar correctamente los scripts de izquierda a derecha. Con la compatibilidad con scripts bidireccionales, es posible mezclar caracteres de diferentes scripts 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 BiDi, con reglas detalladas sobre cómo deben codificarse y mostrarse las combinaciones de secuencias de comandos de izquierda a derecha y de derecha a izquierda.

Compatibilidad bidireccional Unicode

El estándar Unicode exige que los caracteres se ordenen 'lógicamente', es decir, en la secuencia en la que deben interpretarse, a diferencia de 'visualmente', la secuencia en la que aparecen. Esta distinción es relevante para el soporte bidi porque en cualquier transición bidi, la presentación visual deja de ser la presentación 'lógica' una. Por lo tanto, para ofrecer soporte bidi, Unicode prescribe un algoritmo sobre cómo convertir la secuencia lógica de caracteres en la presentación visual correcta. Para este propósito, el estándar de codificación Unicode divide todos sus caracteres en uno de cuatro tipos: 'fuerte', 'débil', 'neutral' y ' formato explícito'.

Personajes fuertes

Los personajes fuertes son aquellos que tienen una dirección definida. Ejemplos de este tipo de carácter incluyen la mayoría de los caracteres alfabéticos, caracteres silábicos, ideografías Han, dígitos no europeos o no árabes y caracteres de puntuación que son específicos solo de esas escrituras.

Personajes débiles

Los personajes débiles son aquellos con una dirección vaga. Los ejemplos de este tipo de carácter incluyen dígitos europeos, dígitos árabes-índicos orientales, símbolos aritméticos y símbolos de moneda.

Caracteres neutrales

Los caracteres neutros tienen una dirección indeterminable sin contexto. Los ejemplos incluyen separadores de párrafo, tabuladores y la mayoría de los demás caracteres de espacio en blanco. Los símbolos de puntuación que son comunes a muchas escrituras, como los dos puntos, la coma, el punto y el espacio sin interrupción, también se incluyen 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 dirigen al algoritmo para que modifique su comportamiento predeterminado. Estos caracteres se subdividen en "marcas", "incrustaciones", "aislamientos" y "anulaciones". Sus efectos continúan hasta que aparece un separador de párrafo o un "pop" personaje.

Marcas

Si un "débil" carácter es seguido por otro "débil" carácter, el algoritmo buscará en el primer carácter "fuerte" personaje. A veces, esto conduce a errores de visualización involuntarios. Estos errores se corrigen o previenen con "pseudo-strong" caracteres. Dichos caracteres de control Unicode se denominan marcas. La marca (U+200E MARCA DE IZQUIERDA A DERECHA (LRM) o U+200F DERECHA -TO-LEFT MARK (RLM)) debe insertarse en una ubicación para hacer que un carácter débil encerrado herede su dirección de escritura.

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

Incrustaciones

La "incrustación" los caracteres de formato direccional son el método Unicode clásico de formato explícito y, a partir de Unicode 6.3, se desaconsejan en favor de los "aislados". Una "incrustación" Señala que una parte del texto debe ser tratada como direccionalmente distinta. El texto dentro del alcance de los caracteres de formato incrustados no es independiente del texto que lo rodea. 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 generalmente tienen un efecto demasiado fuerte en su entorno y, por lo tanto, son innecesariamente difíciles de usar.

Aislamientos

El "aislar" los caracteres de formato direccional indican que un fragmento de texto debe tratarse como aislado direccionalmente 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 sabe que las plataformas de destino los admiten. Estos caracteres de formato se introdujeron después de que se hizo evidente que las incrustaciones direccionales generalmente tienen un efecto demasiado fuerte en su entorno y, por lo tanto, son innecesariamente difíciles de usar. A diferencia del legado 'incrustación' caracteres de formato direccional, 'aislar' los caracteres no tienen efecto en el orden del texto fuera de su alcance. Los aislamientos se pueden anidar y se pueden colocar dentro de incrustaciones y anulaciones.

Anulaciones

La "anulación" Los caracteres de formato direccional permiten casos especiales, como los números de pieza (p. ej., para forzar que un número de pieza compuesto por una combinación de letras en inglés, dígitos y letras hebreas se escriba de derecha a izquierda), y se recomienda evitarlos siempre que sea posible. Como ocurre con los otros caracteres de formato direccional, "anula" pueden anidarse unos dentro de otros, y en empotramientos y aislamientos.

Estallidos

El "pop" los caracteres de formato direccional finalizan el alcance de la "incrustación", "anulación" o "aislamiento" más reciente.

Corridas

En el algoritmo, cada secuencia de caracteres fuertes concatenados se denomina "ejecutar". Un "débil" carácter que se encuentra entre dos "fuertes" los caracteres con la misma orientación heredarán su orientación. Un "débil" carácter que se encuentra entre dos "fuertes" los caracteres con una dirección de escritura diferente heredarán 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 ()Bidi_Class Propiedad de caracteres Unicode)
TipoDescripciónFuerzaOrientaciónAlcance generalBidi_Control character
LIzquierda a derechaFuerteL-to-RLa mayoría de caracteres alfabéticos y silábicos, caracteres chinos, dígitos no europeos o no árabes, carácter LRM,...U+200E LEFT-TO-RIGHT MARK (LRM)
RDerecho a izquierdaFuerteR-to-LAdlam, Hebreo, Mandaic, Mende Kikakui, N'Ko, Samaritan, antiguos scripts como Kharoshthi y Nabataean, RLM carácter,...MARCO DE DERECHO A PROYECTO (RLM)
ALCarta árabeFuerteR-to-LAlfabetos árabe, hanifi Rohingya, sogdiano, siriaco y Thaana, y la mayoría de las puntuaciones específicas para esos scripts,...U+061C ARABIC LETTER MARK (ALM)
ENNúmero europeoWeakdígitos europeos, dígitos del este árabe-indico, números de...
ESEuropean SeparatorWeakmás señal, menos señal,...
ETEuropean Number TerminatorWeakSigno de grado, símbolos de moneda,...
ANTESNúmero árabeWeakdígitos árabe-indicos, decimales árabes y miles de separadores, dígitos rumi, dígitos...
CSSeparador de Número ComúnWeakcolon, coma, parada completa, espacio sin ruptura,...
NSMMarca no ritmoWeakCarácteres en General Categorías Marcar, no ritmo, y Marcos, encerrado (Mn, Me)
BNBoundary NeutralWeakignorantes predeterminados, no caracteres, caracteres de control distintos a aquellos explícitamente dados otros tipos
BPárrafo SeparadorNeutralseparador del párrafo, Funciones de Newline apropiadas, determinación del párrafo del protocolo de alto nivel
SSeparador de segmentosNeutralTabs
WSWhitespaceNeutralespacio, espacio, separador de línea, alimento, General Punctuation bloque espacios (smaller set than the Unicode whitespace list)
ONOtros neutrosNeutralTodos los demás personajes, incluyendo objeto de sustitución de caracteres
LREEmbedding de izquierda a derechaExplicitL-to-RLRE carácter sóloU+202A LEFT-TO-RIGHT EMBEDDING (LRE)
LROAnulación izquierda a derechaExplicitL-to-RLRO carácter sóloU+202D LEFT-TO-RIGHT OVERRIDE (LRO)
RLEEmbedding derecho a izquierdaExplicitR-to-LSólo carácter RLEU+202B EMBEDDING (RLE)
RLOAnulación de derecha a izquierdaExplicitR-to-LSólo carácter RLOU+202E Right-to-LEFT OVERRIDE (RLO)
PDFFormato Pop DirectionalExplicitcaracteres PDF solamenteU+202C POP DIRECTIONAL FORMATTING (PDF)
LRIIsolado de izquierda a derechaExplicitL-to-RLRI carácter sóloU+2066 LEFT-TO-RIGHT ISOLATE (LRI)
RLIIsolado derecho a izquierdaExplicitR-to-LSólo carácter RLIU+2067 Right-to-LEFT ISOLATE (RLI)
FSIPrimero fuerte aislamientoExplicitcaracteres FSI solamenteU+2068 FIRST STRONG ISOLATE (FSI)
PDIPop Directional IsolateExplicitPersonaje PDI únicamenteU+2069 POP DIRECTIONAL ISOLATE (PDI)
Notas
1.^ Algoritmo bidireccional Unicode (UAX#9), A partir de la versión Unicode 12.0
2.^ Posibles tipos de caracteres bidireccionales para la propiedad de carácter: Bidi_ Clase o tipo '
3.^ Bidi_Características de control: Doce caracteres de formato Bidi_Control se definen. Son invisibles, y no tienen ningún efecto aparte de la direccionalidad. Nueve de ellos tienen un tipo BiDi único y desregulado que es utilizado por el algoritmo. Su tipo también es su acrónimo (por ejemplo, el personaje 'LRE' tiene el tipo BiDi 'LRE').

Seguridad

Los caracteres bidireccionales Unicode se utilizan en la vulnerabilidad de origen troyano.

Visual Studio Code destaca los caracteres de control BiDi desde la versión 1.62 lanzada en octubre de 2021.

Visual Studio destaca los caracteres de control BiDi desde la versión 17.0.3 lanzada el 14 de diciembre de 2021.

Scripts que usan texto bidireccional

Jeroglíficos egipcios

Los jeroglíficos egipcios se escribían bidireccionalmente, donde los signos que tenían una "cabeza" o "cola" se enfrentó al comienzo de la línea.

Caracteres chinos y otras escrituras CJK

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

Del mismo modo, otras escrituras CJK compuestas por los mismos caracteres cuadrados, como el sistema de escritura japonés y el sistema de escritura coreano, también se pueden escribir en cualquier dirección, aunque de izquierda a derecha, de arriba a abajo y de derecha -a-izquierda son los más comunes.

Bostrofedón

Boustrophedon es un estilo de escritura que se encuentra en antiguas inscripciones griegas y en 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

El tipo de luna es una adaptación en relieve del alfabeto latino inventado como un alfabeto táctil para ciegos. Inicialmente, el texto cambiaba de dirección (pero no la orientación de los caracteres) al final de las líneas. Líneas especiales en relieve conectaban el final de una línea y el comienzo de la siguiente. Alrededor de 1990, cambió a una orientación de izquierda a derecha.