Ordenando el texto de forma visual vs. lógica

Intended audience: los codificadores de XHTML/HTML (utilizando editores o lenguaje de script), desarrolladores de script (PHP, JSP, etc.), gerentes de proyectos web y cualquier otra persona que necesite entender mejor la diferencia entre el almacenamiento visual y lógico de texto bidireccional.

Question

¿Cuál es la diferencia entre el orden visual y lógico del texto, y cual debería utilizar?

El texto bidireccional es común en la escritura de derecha a izquierda como en el árabe, hebreo, siríaco y Thaana. Muchas lenguas diferentes están escritas con estos scripts, incluyendo el árabe, hebreo, pashto, persa, sindhi, siríaco, Dhivehi, urdu, yiddish, etc.

Cuando se muestra el texto bidireccional, cualquier texto incrustado desde un script de izquierda a derecha y todos los números progresan visualmente de izquierda a derecha dentro del flujo visual usual de derecha a izquierda de los scripts mencionados. (Por supuesto, el texto en ingles de esta página también contiene texto bidireccional donde incluye ejemplos en árabe y hebreo.)

Quick answer

Siempre se debería crear HTML (y cualquier otro tipo de marcador) utilizando el orden lógico, y nunca el visual.

El orden visual del texto era una forma común de representar el hebreo en HTML en agentes de usuario antiguos que no podían utilizar el algoritmo unidireccional Unicode. Este persiste muy poco hoy en día. Los caracteres que componen el texto se almacenaron en el código fuente en el mismo orden en el que se verían en la pantalla mirándolos de izquierda a derecha.

(El orden visual es menos común para el árabe. Dado que las letras árabes están todas unidas, esta fue una motivación más fuerte de parte de los ejecutores árabes para utilizar el enfoque del orden lógico. El texto en árabe ordenado visualmente puede utilizar puntos de código separados para cada glifo formado.)

Con el orden lógico, el texto se almacena en la memoria en el orden en el que se escribiría normalmente (y se pronunciaría normalmente). El algoritmo bidireccional Unicode es entonces aplicado por el navegador, en el tiempo de la visualización, para crear la presentación correcta.

Details

El orden visual y sus deficiencias

La siguiente imagen muestra la frase bidireccional, פעילות הבינאום, W3C en azul en la parte superior, como aparecería normalmente en un párrafo de derecha a izquierda. Las flechas numeradas indican la dirección de lectura. Usted leería las secuencias en el orden de los números mostrados abajo de las flechas.

La segunda y tercera línea (texto en verde) muestran el orden en que se almacenan los caracteres en la memoria (de izquierda a derecha en la visualización) para el texto codificado lógico y visual, respectivamente. El orden lógico también refleja el orden en el que, como autor de contenido, debería escribir el texto. También se puede decir lo mismo sobre la línea visual, es decir que usted escribe el texto al revés (a menos que tenga una herramienta de edición que reorganice automáticamente las entradas lógicas al orden de almacenamiento visual para usted).

La siguiente imagen muestra un ejemplo de código fuente ordenado visualmente en HTML.

Para hacer que el orden visual funcione, además de escribir el texto en reverso, también deberá tomar acciones como deshabilitar cualquier ajuste de línea, alinear el texto directamente hacia la derecha en párrafos y celdas de tablas, agregar saltos de línea explícitos, y, cuando esté traduciendo de un idioma que utiliza una secuencia de izquierda a derecha, invertir manualmente el orden de las columnas de las tablas. También tendrá que añadir y mantener diferentes spans de enlaces o enfatizar los marcados para cualquier texto marcado que se salte hacia otra línea..

(Realmente esta es una implementación bastante limpia. Por ejemplo, también podrá encontrar cosas como párrafos alineados a la derecha con etiquetas <nobr>..</nobr> alrededor de cada línea. Si su ventana es demasiado estrecha, el principio de cada línea desaparecerá del lado derecho de su navegador.)

Hay una asunto clave en referencia al mantenimiento. Por ejemplo, además de la dificultad de escribir hebreo al revés, si usted desea añadir algunas palabras en medio de un párrafo de texto ordenado visualmente, tendría que mover el texto hacia y desde cada línea que le sigue en el párrafo para restablecer los saltos de línea. También tendría que reorganizar cualquier marcador dentro de una línea que se extienda por más de una línea (ya sea antes o después del cambio) manualmente.

Esto resulta en un código muy frágil y difícil de mantener.

Además, todas las etiquetas adicionales necesarias para manejar el texto inflarían su código y afectarían no sólo el tiempo de creación, sino también el ancho de banda.

El orden visual también puede causar problemas en un nivel superior. Por ejemplo, cuando se traduce a otro idioma, se requiere que el orden de las columnas de las tablas se in viertan de forma manual. También se tendría que reordenar el flujo de los saltos de líneas manualmente si se cambia la geometría de la página. Usualmente, la ventana de diálogo de búsqueda de los navegadores captura el texto en un orden lógico, lo que hace que la clave de búsqueda no coincida con el texto almacenado en orden visual, a menos que haya una lógica especial en el navegador para lidiar con este problema, etc.

Utilizar texto lógicamente ordenado, por otro lado, hace que crear párrafos largos que fluyan, que se envuelven automáticamente a la anchura del elemento a nivel de bloque sea casi trivial. También hace que lidiar con la accesibilidad sea mucho más fácil, utilizando cosas como los lectores de pantalla. Simplemente escribe el texto en el orden en el que sería dicho, y el Algoritmo Bidireccional Unicode hace todo el trabajo pesado por usted.

Trabajando con sistemas heredados

En los sistemas modernos donde el almacenamiento de base de datos incluye datos heredados (creados en algún momento con el uso de pantallas verdes) representados en orden visual (como ordenadores centrales u ordenadores iSeries) es necesario apoyar el flujo bidireccional de datos entre la base de datos (orden visual) y los sistemas de escritorio web (orden lógico).

Hay varios factores implicados en este proceso, además del orden de los caracteres. Este nivel de detalle va más allá del alcance de la pregunta enmarcada en este artículo, pero puede encontrar información adicional de ayuda en un útil correo electrónico escrito por Tomer Mahlin, del Laboratorio de Desarrollo Bidi de IBM.

El orden visual y la codificación de caracteres

Siempre recomendamos que utilice UTF-8 para la codificación de caracteres de su página, la cual apoya el orden lógico de los caracteres, pero en el caso de que, y sólo en este caso, usted eligiera utilizar una codificación ISO 8859 en su lugar, necesitará tener cierto cuidado al declarar la codificación. Uno declara la codificación de su contenido en la cabecera HTTP o en un elemento meta dentro del documento (o ambos).

Existen convenciones especiales con respecto a las declaraciones de codificación utilizadas para el texto en hebreo que se relacionan a la cuestión entre el orden visual vs el lógico. Declarar que el contenido es ISO-8859-8 indicaría que el texto esta codificado visualmente. Para el contenido lógicamente ordenado que utiliza las codificaciones ISO usted deberá etiquetar el texto codificado ISO como ISO-8859-8-i.