Dispositivo unificado y extensible para procesamiento de texto en múltiples idiomas

Kenichi Handa, Mikiko Nishikimi, Satoru Tomura, Naoto Takahashi

Electrotechnical Laboratory
Umezono 1-1-4, Tsukuba, 305 JAPAN

Resumen

Los puntos más importantes para los sistemas de procesamiento de texto en múltiples idiomas son (1) dispositivo unificado para múltiples lenguas, y (2) ajustabilidad y extensibilidad de prestaciones suministradas por el sistema. En estas instrucciones le explicaremos cómo se solucionan estos puntos en el sistema denominado MULE (MULtilingual Enhancement to GNU Emacs). MULE es un procesador de texto en pantalla que puede ser empleado en diferentes sistemas (UNIX, DOS, Windows y OS/2 en muchas plataformas). El mismo suministra a los usuarios con un ambiente flexible de procesamiento de texto en múltiples idiomas que cubre no sólo la edición sencilla de textos sino también la lectura/escritura de correo Internet y noticias, búsqueda en las páginas Web, etc. Todas estas prestaciones están controladas por un dispositivo unificado y son completamente ajustables y extensibles por parte del usuario.

1. Introducción

Con el remarcable progreso de la tecnología de computadores, nosotros tenemos los conocimientos suficientes sobre computación como para manipular no sólo inglés sino también muchos otros idiomas. Muchos países ya han desarrollado formas de manipular sus idiomas nacionales en computadores. La mayoría de ellas están basadas en dispositivos locales que no causan problema en relación al ambiente de cada computador limitándose a su propio lugar. Pero, como Internet conecta todo el mundo más estrechamente, la necesidad de comunicaciones más eficientes ente diferentes lugares/naciones/idiomas, aumenta y ahora nos enfrentamos a la dificultad de manipular múltiples idiomas conjuntamente. Esto se debe a que cada sistema local ha sido desarrollado independientemente sin tener en cuenta otros sistemas locales.

Para solucionar el problema de la manipulación de múltiples idiomas, nosotros hemos adoptado MULE, un procesador de texto sencillo en múltiples idiomas basado en GNU Emacs. GNU Emacs es uno de los procesadores de texto más famosos y más ampliamente empleados en el mundo de UNIX. La función más característica de Emacs es que está equipado con el intérprete Emacs Lisp, y la mayoría de las funciones son implementadas en Emacs Lisp, lo cual significa que es posible mejorar GNU Emacs sólo modificando o agregando programas Emacs Lisp. Emacs puede ser empleado no sólo para el trabajo de edición de casi cualquier tipo de procesamiento de texto incluyendo lectura/escritura de correo Internet y noticias, búsqueda en páginas Web, referencia manual, búsqueda en el diccionario en línea, etc. Todo ésto es realizado por los programas Emacs Lisp y por ello son completamente programables.

MULE hereda todas estas funciones y puede utilizarlas en un ambiente de múltiples idiomas. Por ejemplo, los usuarios de MULE pueden intercambiar cartas y leer las páginas Web en cualquier idioma, siempre que esos idiomas estén apoyados por MULE.

En el diseño de MULE nosotros hemos conservado en mente los dos puntos siguientes:

El punto más difícil y más importante al mismo tiempo para el procesamiento de texto en múltiples idiomas es ofrecer un dispositivo unificado para manipulación de muchos idiomas sin perder la conveniencia lograda a través de la localización de cada idioma. Los trabajos de procesamiento de texto en diferentes idiomas puede diferir entre sí en muchos aspectos: cuál es el conjunto de caracteres empleados, cómo se presentará el texto en la pantalla, cómo se ingresará el texto por medio del teclado y qué sistema de codificación se empleará en los archivos. El procesamiento de múltiples idiomas requiere un dispositivo unificado que cubra estas diferencias.

Otos puntos importantes son la ajustabilidad y extensibilidad, esto es, la facilidad para programar o aumentar las funciones. Es casi imposible diseñar y suministrar previamente todas las funciones necesarias para todos los idiomas apoyados. El número de idiomas apoyados puede cambiar en el futuro. En los países en vías de desarrollo, inclusive el ambiente estándar para los idiomas nacionales puede cambiar. Cualquier sistema sin flexibilidad para modificación o aumento de sus funciones pasará a la obsolesencia rápidamente, o será demasiado difícil agregar nuevos idiomas.

Por lo tanto, aunque encontremos que una nueva función es necesaria para algún idioma, no la agregaremos inmediatamente. Al principio, examinaremos si hay posibilidades de que otros idiomas necesiten de una función similar, qué parte de la función debe ser generalizada para todos los idiomas y qué parte de la función podrá ser modificada. Después de decidir sobre estos puntos, diseñamos la función más versátil.

El procesamiento de texto es una tarea compleja. Por lo menos contiene el ingreso de texto, almacenamiento, realmacenamiento, y presentación en pantalla. Cuando decimos que MULE apoya cierto idioma ello significa que MULE puede como mínimo hacer lo siguiente:

Aquí empleamos la palabra "estándar" no sólo para el "estándar oficial" sino también para el "estándar de hecho". Sobretodo, mientras procesamos un texto, tenemos que tratar los caracteres, palabras y líneas obedeciendo las reglas de ortografía estándar de cada idioma. Todas estas funciones están controladas por un dispositivo unificado para manipulación de conjuntos de caracteres, sistemas de codificación, métodos de ingreso y rutinas de presentación en pantalla.

Las siguientes secciones están organizadas de la siguiente manera:

Sección 2
Método empleado por MULE para procesamiento interno de caracteres
Sección 3
Método empleado por MULE para interactuar con el mundo externo en el que se emplean muchos sistemas de codificación diferentes
Sección 4
Método para ingreso de texto en múltiples idiomas a partir del teclado normal en inglés
Sección 5
Método empleado por MULE para manipular las reglas de ortografía de diferentes idiomas
Sección 6
Método empleado por MULE para presentar texto en múltiples idiomas en la pantalla del computador
Sección 7
Resumen del estado actual de MULE y trabajos futuros.

2. Representación interna de texto en múltiples idiomas

Un conjunto de caracteres es un grupo de caracteres empleados conjuntamente por idiomas regionales (ej.: texto en inglés, texto en japonés). Aunque un sólo conjunto de caracteres para todos los idiomas es el sueño más acariciado de un desarrollador de sistemas, no existe tal maravilla en el momento actual. ISO 10646 (o Unicode), no sirve en el momento, especialmente debido a los caracteres chinos y su manipulación inconsistente de la unificación CJK. Por este motivo hemos decidido emplear múltiples conjuntos de caracteres en MULE.

La mayoría de los conjuntos de caracteres en MULE tienen una correspondencia de uno a uno con los conjuntos de caracteres registrados en ISO (ej.: ISO 8859-1, JIS X0208). Aunque cada conjunto de caracteres ISO está identificado por su tamaño y tipo (cómo son contenidos muchos caracteres), y caracter final, (código de un byte para distinguir conjuntos de caracteres del mismo tamaño y tipo), MULE identifica cada conjunto de caracteres por medio de un número de identificación único llamado "charset-id" (identificación de conjunto de caracteres). Así, definir en MULE un conjunto de caracteres es asociar un "charset-id" único al conjunto ISO de caracteres e informar a MULE de los diferentes parámetros del conjunto de caracteres. Estos parámetros, que son empleados para trabajo de procesamiento de texto, contienen el ancho de presentación en pantalla, dirección y sentido de la escritura, etc. La Tabla 1 muestra ejemplos de conjuntos de caracteres.

Tabla 1. Ejemplos de conjuntos de caracteres
Conjunto de caracteres ISO parámetros empleados en MULE
nombre tamaño - tipo "final-char" (caracter final) "charset-id" bytes ancho sentido
ASCII 94 'B' 0 1 1 left-to-right
ISO8859-1 (Latin1) 96 'A' 129 2 1 left-to-right
ISO8859-8 (Hebrew) 96 'H' 136 2 1 right-to-left
TIS620 96 'T' 133 2 1 left-to-right
GB2312 94 X 94 'A' 145 3 1 left-to-right
JISX0208 94 X 94 'B' 146 3 1 left-to-right
CNS11643-1 94 X 94 'G' 149 4 1 left-to-right
CNS11643-3 94 X 94 'I' 246 4 1 left-to-right
En la tabla bytes es la longitud de byte de la representación interna de MULE, el ancho es el número de columnas ocupadas en pantalla, el sentido es el sentido de presentación visual: izquierda a derecha o derecha a izquierda.

También es posible definir un conjunto de caracteres que no está registrado en ISO. En este caso, MULE emplea un caracter final reservado para uso privado por parte de ISO. Si el conjunto de caracteres originalmente no se adecúa al requisito técnico de ISO 2022, deberá ser reorganizado por medio de la división del mismo en conjuntos pequeños de caracteres, o cambiando los puntos del código de caracter y adecuarlo a los requisitos técnicos. El ejemplo típico en este caso es el conjunto de caracteres vietnamita, los detalles del cual están descritos en la próxima sección.

La forma más sencilla y común de mantener un texto en la memoria del computador es representar cada caracter por un conjunto de elementos de longitud fija (uno a cuatro bytes). Sin embargo, considerando los textos en múltiples idiomas el empleo de uno o dos bytes para cada caracter es aparentemente insuficiente para cubrir los caracteres de los alfabetos de todo el mundo. El empleo del elemento de cuarto bytes debería ser suficiente pero es un desperdicio de memoria para texto en inglés solamente. De aquí que, en lugar de emplear representación de longitud fija, hemos adoptado el sistema de múltiples bytes de longitud variable (de aquí en adelante abreviado sistema multi-byte), para representar caracteres en el acumulador de MULE tanto para un eficiente uso de memoria como para extensibilidad. (Esta idea se origina en la breve nota de Stallman).

Con el sistema multi-byte, cada caracter es representado por uno o dos bytes de códigos líderes para el "charset-id" y para el siguiente, o dos bytes para el código de caracter. La única excepción son los caracteres ASCII, que son representados tal cual, y el "charset-id" es 0. La Tabla 2 muestra una definición más formal de la representación interna de caracteres de MULE.

Tabla 2. Definición formal de la representación interna de caracteres
    CHARACTER := ASCII_CHAR | MULTIBYTE_CHAR
    MULTIBYTE_CHAR := PRIMARY_CHAR_1 | PRIMARY_CHAR_2
                      | SECONDARY_CHAR_1 | SECONDARY_CHAR_2
    PRIMARY_CHAR_1   := LEADING_CODE_PRI C1
    PRIMARY_CHAR_2   := LEADING_CODE_PRI C1 C2
    SECONDARY_CHAR_1 := LEADING_CODE_SEC LEADING_CODE_EXT C1
    SECONDARY_CHAR_2 := LEADING_CODE_SEC LEADING_CODE_EXT C1 C2
    ASCII_CHAR := 0 | 1 | ... | 127
    LEADING_CODE_PRI := 129 | 130 | ... | 153
    LEADING_CODE_SEC := 154 | 155 | 156 | 157
    C1, C2, LEADING_CODE_EXT := 160 | 161 | ... | 255
 

En la tabla, PRIMARY-CHAR y SECONDARY-CHAR difieren solamente en la memoria requerida por caracter y en el trabajo de procesamiento de texto no hay diferencia entre ellos. "Charset-id" está representado por un sólo LEADING-CODE-PRI (en este caso, "charset-id" proviene de 129 a 154), o una secuencia de LEADING-CODE-SEC y LEADING-CODE-EXT (en este caso, "charset-id" es más de 160). Un sólo byte de conjunto de caracteres puede contener 96 caracteres como máximo y está representado por dos o tres secuencias de bytes, un byte doble de conjunto de caracteres puede contener un máximo de 9,216 (96 x 96) caracteres y está representado por una secuencia de tres o cuatro bytes. Nosotros hemos seleccionado conjuntos de caracteres frecuentemente usados y los hemos definidos como PRIMARY (primarios). Todos los conjuntos de caracteres agregados por los usuarios son definidos como SECONDARY (secundarios). Por ejemplo, en las series de conjuntos de caracteres chinos (taiwaneses) CNS11643 los dos primeros planos son PRIMARY pero los planos restantes son SECONDARY (Ver Tabla 1). La Figura 1 muestre el uso de un área de código de un byte.

Figura 1. Uso del área de código de un byte
0x00--0x7f character code of ASCII_CHAR
0x80--0x99 LEADING_CODE_PRI
0x9a--0x9f LEADING_CODE_SEC
0xa0--0xff 1st and 2nd charactercodes of MULTIBYTE_CHAR or LEADING_CODE_EXT

3. Sistema de codificación

Un sistema de codificación o mecanismo de codificación, es la forma de codificar un texto. Nosotros empleamos muchos sistemas de codificación en los computadores. Diferentes países emplean diferentes sistemas de codificación. Por lo tanto MULE realiza la conversión de código automáticamente a partir de varias representaciones de formato de texto en forma de múltiples bytes internos. MULE interactúa con el mundo exterior leyendo/escribiendo archivos, comunicándose con otros procesos, comunicándose vía red, aceptando datos provenientes de un terminal o enviando datos hacia un terminal.

Para hacer que la conversión de códigos sea ajustable y extensible, nosotros hemos evitado equipar MULE con rutinas de conversión de códigos inalterables. En lugar de ello, hemos confeccionado un modelo genérico de sistema de codificación con varios parámetros a ser ingresados. Afortunadamente, la mayoría de los sistemas de codificación empleados en la actualidad en el mundo se adecúan al marco de ISO 2022. Por lo tanto, hemos categorizado el sistema de codificación en tipo ISO-2022 y no ISO-2022. Para el primer tipo creamos el intérprete genérico ISO 2022. Para el segundo tipo, diseñamos un lenguaje sencillo de programación el CCL (Lenguaje de Conversión de Código), y creamos un intérprete de CCL.

Cuando los usuarios especifican un sistema de codificación para procesamiento (ej.: lectura de un archivo, o envío de correspondencia), MULE llama automáticamente al intérprete ISO 2022 o al intérprete CCL de acuerdo al sistema de codificación especificado.

3.1 Sistema de codificación tipo ISO-2022

Aunque el ISO 2022 permite muchísimas variaciones para codificar el mismo texto, sólo unas pocas de ellas son realmente empleadas. Así, para especificar una codificación, el pequeño número de parámetros listado en la Tabla 3 es suficiente. Por ejemplo las variaciones de EUC (Código UNIX Extendido) de chino, japonés y coreano y toda la serie ISO-8859 (número 1 a 10), difiere sólo en las designaciones iniciales de los parámetros y en las designaciones reservadas. Los otros ejemplos son la serie de 7 bit ISO-2022 tales como ISO-2022-JP, ISO-2022-JP-2, ISO-2022-KR, e ISO-2022-CN. Todas emplean un ambiente de 7 bits. Las mismas difieren sólo en las designaciones reservadas y en el bloqueo de mayúsculas. Las dos primeras no emplean el bloqueo de mayúsculas, mientras que las restantes sí lo emplean.

Tabla 3 Parámetros del sistema de codificación tipo ISO-2022
parámetro valor significado
designaciones iniciales lista de "charset-id" Designación inicial del conjunto de caracteres para cada registro gráfico.
designaciones reservadas lista de "charset-id" Designación exclusiva de codificación de conjunto de caracteres para cada registro gráfico.
ambiente de 7 bit correcto / falso Empleo sólo de los 7 bit inferiores o empleo de codificación completa de 8 bit.
bloqueo de mayúsculas correcto / falso Empleo de la función de bloqueo de mayúsculas o no.
mayúsculas correcto / falso Empleo de la función de mayúsculas o no.
Indicación de sentido correcto / falso Empleo de una secuencia de escape de ISO-6429 para indicar el sentido de la escritura en la codificación.

La Tabla 4 muestra cuán fácilmente podemos definir un sistema de codificación tipo ISO-2022 en MULE. Después de definir el sistema de codificación, el mismo puede ser especificado para cualquier situación dónde sea necesaria la conversión de códigos. Por ejemplo, después de la definición de la Tabla 4, los usuarios puede leer/escribir archivos GB y llamar al terminal GB caracteres chinos e intercambiar correspondencia en GB.

Tabla 4 Definición de EUC chino llamado sistema de codificación GB en MULE
    *euc-china*           ;; Nombre del sistema de codificación
    2                     ;; Tipo "2" significa tipo ISO-2022
    ?C                    ;; Caracter mnemónico del sistema de codificación
    t                     ;; Tipo detección automática fin de línea 
                          ;; (CR, CRLF, LF)
    (list lc-ascii lc-cn  ;; G0 es para ASCII, G1 es para chino GB2312
          nil nil         ;; G2 y G3 no son usados nunca.
 

3.2 Sistema de codificación tipo no ISO-2022

Los ejemplos del sistema de codificación no ISO-2022 son Ruso KOI-8 y vietnamita VISCII. Aunque KOI-8 cumple con los requisitos estándar de ISO-2022, los puntos de código de los caracteres son diferentes de los de ISO 8859-5 (alfabeto latino/ cirílico), que es el conjunto de caracteres por falta de los caracteres cirílicos en MULE.

VISCII emplea códigos completos de 8 bits para los 134 caracteres vietnamitas específicos que no cumplen con los requisitos técnicos de ISO-2022. Por ello, en MULE, el conjunto de caracteres vietnamitas está dividido en dos, letras minúsculas y letras mayúsculas, y cada uno de ellos es asignado a "charset-id".

Como el intérprete genérico "charset-id" no puede ser empleado para descodificar y codificar estos conjuntos de caracteres, nosotros equipamos MULE con programas CCL que efectúan la conversión. CCL es un lenguaje sencillo pero potente para programación adecuado para escribir algoritmos de conversión de códigos, lo cual significa que teóricamente MULE puede manipular cualquier sistema de codificación por medio de el programa CCL apropiado. La Tabla 5 muestra la fuente de programa CCL para codificar KOI-8.

Tabla 5 Programa CCL para codificar el sistema de codificación KOI-8
(define-ccl-program ccl-write-koi8
 '(1
   ((read r0)
    (loop (if (r0 != 140) (write-read-repeat r0)
            ((read r0) (r0 -= 160)
             (write-read-repeat r0
     [ 32 179  32  32  32  32  32  32  32  32  32  32  32  32  32  32
      225 226 247 231 228 229 246 250 233 234 235 236 237 238 239 240
      242 243 244 245 230 232 227 254 251 253 255 249 248 252 224 241
      193 194 215 199 196 197 214 218 201 202 203 204 205 206 207 208
      210 211 212 213 198 200 195 222 219 221 223 217 216 220 192 209
       32 163  32  32  32  32  32  32  32  32  32  32  32  32  32  32])
             )))))
  "CCL program to write KOI8.")
 

4. Método de ingreso

Nosotros hemos investigado los métodos de ingreso existentes para caracteres de múltiples idiomas y los hemos clasificado en los siguientes tipos.

(1) Mapa de teclas
Es el método de ingreso más sencillo que emplea crea un mapa de teclas de los teclados en inglés para otros caracteres, uno por uno. Los ejemplos típicos son griego y ruso.

(2) Combinación de teclas
Este método de ingreso genera un caracter compuesto combinando secuencias de teclas. Los ejemplos típicos son los idiomas europeos y el vietnamita en el cual un caracter con una marca diacrítica y una marca de tono son generados a partir de una tecla alfabética y algunas teclas de símbolos. Por ejemplo en el método de ingreso del vietnamita una secuencia de teclas a^ genera el caracter vietnamita {a}. Existen también varios métodos de ingreso de chino de este tipo, pero los mismos requieren mucho entrenamiento debido al enorme número de caracteres chinos.

(3) Mezcla de (1) y (2)
Es un método de ingreso en el cual al principio se confecciona un mapa de teclas y luego se genera un caracter compuesto combinando las teclas del mapa. Los ejemplos típicos son el tailandés y el coreano. Por ejemplo en el método de ingreso de tailandés, a todas las teclas superiores se les asignan consonantes, vocales o marcas de tono tailandesas y una secuencia de teclas de una consonante y la siguiente vocal o la marca de tono genera un caracter compuesto que coloca la vocal y/o la marca de tono arriba o abajo de la consonante.

(4) (3) y un programa externo de conversión.
Este tipo de método es empleado para ingresar caracteres chinos. Como hay más de diez mil caracteres chinos, es muy difícil recordar todas las combinaciones de teclas. Sin embargo, el ingreso de caracteres fonéticos es bastante fácil. Por eso creamos un método de ingreso conveniente para el usuario que le permite ingresar caracteres fonéticos en (1) o (3), dejando luego la tarea restante de generación de caracteres chinos al computador.

Por ejemplo, en el método de ingreso del japonés se ingresa por el teclado una secuencia de Hiragana (alfabeto fonético japonés) y luego la secuencia es convertida por algún programa de conversión en una mezcla apropiada de Kanji (caracter chino) y Hiragana. Existen varios programas de conversión tales como Wnn, Canna, SJ3, (estos son para japonés solamente), y cWnn para chino, que pueden ser empleados en MULE. Estos emplean generalmente un enorme diccionario y conocimientos de gramática de cada idioma para generar la secuencia adecuada de caracteres.

En MULE, los métodos de ingreso de los primeros tres tipos son realizados por un sistema de traducción de ingreso por teclado llamado Quail. A Quail se le asignó un conjunto de reglas de traducción (denominadas "Quail package") de cada vez, y traduce de acuerdo a las mismas el ingreso por teclado del usuario. Cada regla de traducción consiste de una secuencia de teclas y del texto correspondiente traducido. Una regla puede tener múltiples candidatos de texto traducido, en cuyo caso se les indica a los usuarios que seleccione uno interactivamente.

Es muy sencillo programar un paquete Quail de acuerdo a las necesidades del usuario. Los mismos pueden agregar nuevas reglas de traducción o modificar las existentes. Gracias a los módulos del paquete Quail, el agregar nuevas reglas para un nuevo idioma es también fácil. Ello puede ser realizado confeccionando un nuevo paquete con un nombre apropiado y definiendo cualquier número de reglas de traducción en el paquete. La Tabla 6 muestra el método para confeccionar un paquete Quail que simula el bloqueo de mayúsculas (ej.: todas las letras en minúscula son traducidas en letras mayúsculas).

Tabla 6 Ejemplo de paquete Quail con "Caps-Lock" (bloqueo de mayúsculas)
    ;; Primero defina un nuevo paquete Quail.
     (quail-define-package "caps-lock"
                           "Caps-Lock" nil "Simulate Caps-Lock")
    ;; Luego, defina las reglas de traducción del paquete.
     (quail-defrule "a" "A")
       ...
 

Los métodos de ingreso para el último tipo son realizadas como un sistema denominado Tamago. Al principio el mismo traduce los ingresos por teclado en algunos códigos fonéticos (Hiragana en japonés y PinYin en chino), y los envía a un programa de conversión externo a través de la red. Es posible emplear el sistema Quail en la primera etapa. Sin embargo Tamago fue desarrollado independientemente de Quail y posee su propio sistema para generar estos códigos fonéticos por el momento. Como las conversiones no pueden ser completamente automatizadas, el usuario debe seleccionar interactivamente otras conversiones. Por el momento, Tamago puede ser empleado como servidor de conversión Wnn y cWnn.

5. Procesamiento de texto

El procesamiento de texto es mucho más que el ingreso de caracteres. Para facilitar el procesamiento de texto, MULE suministra varias herramientas. Como ejemplos de las mismas hay categorías de caracteres y un poderoso compilador de expresiones normales que permite la búsqueda rápida de estas expresiones.

Mientras se procesa texto es conveniente agrupar algunos de los caracteres y emplear el grupo en comandos de edición. Por ejemplo, un usuario puede desear buscar algún caracter cirílico, pero no desea especificar todos los caracteres cirílicos y combinarlos con operadores OR. Para este fin, el GNU Emacs original, asigna un código de sintaxis de caracter a cada caracter. Sin embargo, la sintaxis de caracter presenta algunas limitaciones. Cada carácter debe tener una sintaxis como máximo y los usuarios no pueden definir una nueva sintaxis.

MULE ofrece un método adicional para agrupar caracteres denominado categorización de caracteres. Los usuarios pueden definir una nueva categoría de caracter y asignar a un caracter tantas categorías como desee. El trabajo de edición incluye a menudo procesamiento palabra por palabra, pero diferentes idiomas pueden tener diferentes definiciones de palabra. Con MULE, los usuarios pueden definir una palabra en base a estas categorías de caracteres, que realiza los comandos de edición programables.

Tabla 7 Categorías de caracteres por falta
'b' Caracteres arábigos
'c' Caracteres chinos de 2 bytes
'g' Caracteres griegos
'h' Caracteres coreanos de 2 bytes
'j' Caracteres japoneses Katakana de 1 byte
'k' Caracteres romanos para japonés de 1 byte
'r' Caracteres latinos
'l' Caracteres hebraicos
'w' Caracteres cirílicos
Caracteres chinos

6. Indicación en pantalla

Para indicar en pantalla texto en múltiples idiomas es necesario considerar dos casos: Empleo de MULE en algún terminal (o emulador terminal tal como "xterm", "kterm", "cxterm", etc.), y empleo de MULE en un sistema de ventanas.

En el primer caso, MULE envía el texto correctamente codificado a los terminales y deja la tarea de la presentación en pantalla del texto en múltiples idiomas a los terminales. La conversión de códigos es efectuada de acuerdo a un sistema de codificación especificado para salida terminal. Por ejemplo, si el usuario emplea MULE en un "exterm", no hay forma de indicar en pantalla ningún otro texto que no sea inglés y chino.

Cuando MULE está en un sistema de ventana, efectúa la presentación en pantalla del texto en múltiples idiomas. En MULE, cada conjunto de caracteres es asignado al tipo (font) correspondiente. La confección de mapas de todos los conjuntos de caracteres en los tipos correspondientes son llamados conjuntos "fontset" y es la base de la indicación en pantalla de cada caracter. MULE puede emplear diferentes "fontset" en diferentes contextos. Por ejemplo, mientras se lee una correspondencia, aparece indicada el área del tema en negrita, en cuyo caso el "fontset" del conjunto de tipos en negrita son empleados sólo para el área indicadora del tema.

En ventana X, Los códigos de caracteres internos de MULE usualmente concuerdan con los puntos de código correspondientes al tipo. Por ejemplo, el conjunto de caracteres japoneses JISX0208 puede ser correctamente indicado en pantalla por el tipo en el cual los puntos de código de caracter cumplen con JISX0208. Pero, aunque la adecuación no se cumpla para cierta combinación de conjuntos de caracteres y un tipo, nosotros podemos convertir puntos de código interno en un tipo por medio del programa CCL descrito en la sección anterior. Por ejemplo el conjunto de caracteres de MULE para el alfabeto cirílico está basado en ISO 8859-5, por medio del cual el usuario puede tener sólo el tipo KOI-8. Aun en tal caso, todo lo que hay que hacer es cambiar el mapa de "fontset" para que el tipo KOI-8 sea empleado para el conjunto de caracteres cirílicos, y asociar un programa CCL apropiado al conjunto de caracteres cirílicos (ver Tabla 8).

Cuando el usuario agrega apoyo para un nuevo idioma, puede simplemente agregar mapa entre el nuevo conjunto de caracteres para el idioma y un tipo apropiado a los "fontsets" existentes.

Tabla 8 Ejemplo de empleo del tipo KOI8 para caracteres cirílicos
  ;; Cambie el mapa de tipo en DEFAULT-FONTSET.
  (set-fontset-font default-fontset lc-crl "HERE_COMES_KOI8_FONT_NAME")
  (define-ccl-program ccl-x-koi8
    '(0
      ((r1 -= 160)
       (r1 = r1
     [ 32 179  32  32  32  32  32  32  32  32  32  32  32  32  32  32
      225 226 247 231 228 229 246 250 233 234 235 236 237 238 239 240
      242 243 244 245 230 232 227 254 251 253 255 249 248 252 224 241
      193 194 215 199 196 197 214 218 201 202 203 204 205 206 207 208
      210 211 212 213 198 200 195 222 219 221 223 217 216 220 192 209
       32 163  32  32  32  32  32  32  32  32  32  32  32  32  32  32])))
    "CCL program to convert chars of lc-crl (ISO8859-5) to KOI8 font.")
  ;; Enlace el programa CCL al conjunto de caracteres cirílicos LC-CRL.
  (x-set-ccl lc-crl ccl-x-koi8)
  

7. Conclusión

Nosotros hemos descrito el procesador de texto para múltiples idiomas MULE resaltando su ajustabilidad y extensibilidad. MULE está equipado con el intérprete Emacs Lisp que hace que el sistema sea abierto. Sencillos programas Emacs Lisp puede realizar toda la programación de adecuación al uso.

MULE fue lanzado en 1993. Desde ese momento, las personas en todo el mundo han contribuído en gran medida para apoyar sus propios idiomas. Ahora puede manipular la mayoría de los idiomas europeos (incluyendo ruso y griego), e idiomas de Asia Oriental (chino, japonés, coreano) además de tailandés, vietnamita, hebreo, arábigo, turco, y otros. Nosotros estamos trabajando duro para apoyar los idiomas de India (Devanagali).

Además del apoyo a nuevos idiomas, también existen muchas aplicaciones contribuídas que funcionan en MULE, tales como las herramientas para buscar palabras en el diccionario en línea, el codificador MIME y el descodificador. La existencia de estas herramientas prueba que MULE puede ser un banco de trabajo/ambiente para múltiples idiomas, no un mero editor.

Nosotros estamos integrando en este momento MULE en GNU Emacs original en cooperación con Free Software Foundation, la organización que distribuye GNU Emacs. El lanzamiento futuro de GNU Emacs contendrá las funciones para múltiples idiomas de MULE.

Apéndice: Distribución de MULE

MULE es distribuído gratis bajo los términos de GNU GENERAL PUBLIC LICENSE. MULE Versión 2.3 está disponible a través de ftp anónimos en los siguientes sitios y en otros muchos.