Este artículo necesita citas adicionales para su verificación . ( julio de 2015 ) |
Un texto bidireccional contiene dos direccionalidades de texto , de derecha a izquierda (RTL) y de izquierda a derecha (LTR). Generalmente implica texto que contiene diferentes tipos de alfabetos , pero también puede hacer referencia al bustrofedón , que es cambiar la dirección del texto en cada fila.
Un ejemplo es el nombre hebreo de derecha a izquierda, Sarah: שרה, escrito sin (ש) a la derecha, resh (ר) en el medio y heh (ה) a la izquierda. Muchos programas informáticos no lograban mostrar esto correctamente, porque estaban diseñados para mostrar texto en una sola dirección.
Algunas de las denominadas escrituras de derecha a izquierda, como la persa y la árabe, son en su mayoría, aunque no exclusivamente, de derecha a izquierda: las expresiones matemáticas, las fechas numéricas y los números con unidades se insertan de izquierda a derecha. Esto también sucede si se inserta en ellas texto de un idioma que se escribe de izquierda a derecha, como el inglés; o viceversa, si se inserta el árabe en una escritura que se escribe de izquierda a derecha, como el inglés.
La compatibilidad con escritura bidireccional es la capacidad de un sistema informático de mostrar correctamente texto bidireccional. El término suele abreviarse como " BiDi " o " bidi ".
Las primeras instalaciones de computadoras fueron diseñadas para admitir un solo sistema de escritura , generalmente para escrituras de izquierda a derecha basadas solo en el alfabeto latino . La adición de nuevos conjuntos de caracteres y codificaciones de caracteres permitió admitir una serie de otras escrituras de izquierda a derecha, pero no admitió fácilmente escrituras de derecha a izquierda como el árabe o el hebreo , y mezclar los dos no era práctico. Las escrituras 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 simplemente invertir el orden de visualización de izquierda a derecha a un orden de visualización de derecha a izquierda, pero al hacer esto se sacrifica la capacidad de mostrar correctamente las escrituras de izquierda a derecha. Con el soporte de escritura bidireccional, es posible mezclar caracteres de diferentes escrituras en la misma página, independientemente de la dirección de escritura.
En particular, el estándar Unicode proporciona las bases para un soporte completo de BiDi, con reglas detalladas sobre cómo deben codificarse y mostrarse las mezclas de escrituras de izquierda a derecha y de derecha a izquierda.
El estándar Unicode exige que los caracteres se ordenen de forma "lógica", es decir, en la secuencia en la que se pretende que se interpreten, en lugar de "visualmente", en la secuencia en la que aparecen. Esta distinción es relevante para la compatibilidad bidireccional porque en cualquier transición bidireccional, la presentación visual deja de ser la "lógica". Por lo tanto, para ofrecer compatibilidad bidireccional, Unicode prescribe un algoritmo para 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". [1]
Los caracteres fuertes son aquellos que tienen una dirección definida. Algunos ejemplos de este tipo de caracteres son 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 que son específicos de esas escrituras.
Los caracteres débiles son aquellos que tienen una dirección vaga. Algunos ejemplos de este tipo de caracteres son los dígitos europeos, los dígitos árabes e índicos orientales, los símbolos aritméticos y los símbolos monetarios.
Los caracteres neutros tienen una dirección indeterminable sin contexto. Algunos ejemplos son los separadores de párrafos, las tabulaciones y la mayoría de los demás caracteres de espacio en blanco. Los símbolos de puntuación que son comunes a muchos alfabetos, como los dos puntos, la coma, el punto y el espacio sin interrupción, también entran en esta categoría.
Los caracteres de formato explícito, también denominados "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 continúan hasta que aparece un separador de párrafo o un carácter "pop".
Si un carácter "débil" va seguido de otro carácter "débil", el algoritmo buscará el primer carácter "fuerte" vecino. A veces esto provoca errores de visualización no intencionados. Estos errores se corrigen o se evitan con caracteres "pseudofuertes". Estos 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 debe insertar en una ubicación para que un carácter débil incluido herede su dirección de escritura.
Por ejemplo, para mostrar correctamente el SIGNO DE MARCA REGISTRADA U+2122 ™ para una marca registrada en inglés (LTR) en un pasaje en árabe (RTL), se inserta una marca LRM después del símbolo de marca registrada 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™ طوال اليوم. ").
Los caracteres de formato direccional "incrustados" 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" indica que un fragmento de texto se debe tratar como direccionalmente distinto. El texto dentro del alcance de los caracteres de formato incrustados 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.
Los caracteres de formato direccional "aislados" 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 están fomentando 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 suelen tener un efecto demasiado fuerte en su entorno y, por lo tanto, son innecesariamente difíciles de usar. A diferencia de los caracteres de formato direccional de "incrustación" heredados, los caracteres de "aislado" no tienen ningún efecto en el orden del texto fuera de su ámbito. Los aislamientos se pueden anidar y se pueden colocar dentro de incrustaciones y anulaciones.
Los caracteres de formato direccional de "anulación" permiten casos especiales, como por ejemplo para números de piezas (por ejemplo, para forzar que un número de pieza compuesto por una mezcla de letras inglesas, dígitos y hebreas se escriba de derecha a izquierda), y se recomienda evitarlos siempre que sea posible. Al igual que sucede con los demás caracteres de formato direccional, los "anuladores" se pueden anidar uno dentro de otro, y en incrustaciones y aislamientos.
El uso de Unicode U+202D (LTR Override) cambiará la dirección de izquierda a derecha a derecha a izquierda. De manera similar, el uso de U+202E (RTL Override) cambiará la dirección de derecha a izquierda a izquierda a derecha. Consulte el algoritmo bidireccional Unicode.
Los caracteres de formato direccional "pop" finalizan el alcance de la "incrustación", "anulación" o "aislamiento" más reciente.
En el algoritmo, cada secuencia de caracteres fuertes concatenados se denomina "secuencia". Un carácter "débil" que se encuentre entre dos caracteres "fuertes" con la misma orientación heredará su orientación. Un carácter "débil" que se encuentre 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).
Tipo [2] | Descripción | Fortaleza | Direccionalidad | Ámbito general | Carácter Bidi_Control [3] |
---|---|---|---|---|---|
yo | De izquierda a derecha | Fuerte | De izquierda a derecha | La mayoría de los caracteres alfabéticos y silábicos, caracteres chinos, dígitos no europeos o no árabes, caracteres LRM,... | U+200E MARCA DE IZQUIERDA A DERECHA (LRM) |
R | De derecha a izquierda | Fuerte | De derecha a izquierda | Adlam, Garay, hebreo, mandaico, mende kikakui, n'ko, samaritano, escrituras antiguas como kharoshthi y nabateo, carácter RLM, ... | U+200F MARCA DE DERECHA A IZQUIERDA (RLM) |
Alabama | Letra árabe | Fuerte | De derecha a izquierda | Alfabetos árabe, hanifi, rohingya, sogdiano, siríaco y thaana, y la mayoría de los signos de puntuación específicos de esas escrituras, carácter ALM, ... | U+061C MARCA DE LETRA ÁRABE (ALM) |
ES | Número europeo | Débil | Cifras europeas, cifras árabes-índicas orientales, números epactos coptos, ... | ||
ES | Separador europeo | Débil | signo más , signo menos , ... | ||
Y | Terminador de número europeo | Débil | signo de grado , símbolos monetarios, ... | ||
UN | Número árabe | Débil | Dígitos árabe-índicos, separadores decimales y de miles árabes, dígitos Rumi, dígitos Hanifi Rohingya, ... | ||
CS | Separador de números comunes | Débil | dos puntos , coma , punto , espacio sin interrupción , ... | ||
NSM | Marca sin espaciado | Débil | Caracteres en categorías generales Marca, sin espacio y Marca, que encierra (Mn, Me) | ||
BN | Neutralidad de límites | Débil | Ignorables predeterminados, no caracteres, caracteres de control distintos de los dados explícitamente a otros tipos | ||
B | Separador de párrafos | Neutral | Separador de párrafos , funciones de nueva línea apropiadas, determinación de párrafos mediante protocolo de nivel superior | ||
S | Separador de segmentos | Neutral | Cortina a la italiana | ||
WS | Espacio en blanco | Neutral | espacio , espacio de figura , separador de línea , avance de página , bloque de puntuación general espacios (conjunto más pequeño que la lista de espacios en blanco de Unicode ) | ||
EN | Otros neutrales | Neutral | Todos los demás caracteres, incluido el carácter de reemplazo de objeto. | ||
LRE | Incrustación de izquierda a derecha | Explícito | De izquierda a derecha | Sólo carácter LRE | INCRUSTACIÓN DE IZQUIERDA A DERECHA (LRE) U+202A |
LRO | Anulación de izquierda a derecha | Explícito | De izquierda a derecha | Sólo carácter LRO | U+202D ANULACIÓN DE IZQUIERDA A DERECHA (LRO) |
RLE | Incrustación de derecha a izquierda | Explícito | De derecha a izquierda | Sólo carácter RLE | U+202B INCORPORACIÓN DE DERECHA A IZQUIERDA (RLE) |
ORL | Anulación de derecha a izquierda | Explícito | De derecha a izquierda | Carácter RLO únicamente | U+202E ANULACIÓN DE DERECHA A IZQUIERDA (RLO) |
Formato direccional pop | Explícito | Sólo caracteres PDF | FORMATO DIRECCIONAL POP U+202C (PDF) | ||
LRI | Aislamiento de izquierda a derecha | Explícito | De izquierda a derecha | Sólo caracteres LRI | U+2066 AISLAMIENTO DE IZQUIERDA A DERECHA (LRI) |
RLI | Aislamiento de derecha a izquierda | Explícito | De derecha a izquierda | Sólo caracteres RLI | U+2067 AISLAMIENTO DE DERECHA A IZQUIERDA (RLI) |
FSI | Primer aislado fuerte | Explícito | Sólo carácter FSI | U+2068 PRIMER AISLAMIENTO FUERTE (FSI) | |
PDI | Aislamiento direccional pop | Explícito | Sólo caracteres PDI | Aislamiento direccional de pop (PDI) U+2069 | |
Notas
|
En la vulnerabilidad de Trojan Source se utilizan caracteres bidireccionales Unicode . [2]
Visual Studio Code destaca los caracteres de control BiDi desde la versión 1.62 lanzada en octubre de 2021. [3]
Visual Studio destaca los caracteres de control BiDi desde la versión 17.0.3 lanzada el 14 de diciembre de 2021. [4]
Los jeroglíficos egipcios se escribían de forma bidireccional, donde los signos que tenían una "cabeza" o "cola" diferenciadas estaban orientados hacia el comienzo de la línea.
Los caracteres chinos se pueden escribir en cualquier dirección, así como en sentido vertical (de arriba hacia abajo y luego de derecha a izquierda), especialmente en carteles (como placas), pero la orientación de los caracteres individuales no cambia. Esto se puede ver a menudo en los autobuses turísticos de China, donde el nombre de la empresa suele ir de la parte delantera del vehículo a 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. (Vea las imágenes del autobús turístico y del vehículo postal a continuación).
Del mismo modo, otras escrituras CJK formadas 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 horizontalmente de izquierda a derecha, de arriba a abajo y verticalmente de arriba a abajo de derecha a izquierda son las dos formas más comunes.
El bustrofedón es un estilo de escritura que se encuentra en las inscripciones griegas antiguas , en el antiguo sabaico (una antigua lengua del sur de Arabia) 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.
El tipo lunar es una adaptación en relieve del alfabeto latino inventado como 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. 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 .