26 febrero 2014

De No-Unicode a Unicode (Parte 4 de 10)

Representación de caracteres

 

Dependiendo del tipo de letra/fuente y del sistema operativo en uso, un mismo carácter puede no ser siempre representado del mismo modo y lo mismo ocurrirá al trabajar con textos que requieren pares suplentes. En términos generales, los mejores resultados se obtendrá mediante la normalización del texto usando para ello la función nfc(), ya que (generalmente) los diferencias se producen con el uso de caracteres compuestos.

Introducción de caracteres


Para la introducción/edición de textos y siempre que sea posible se recomienda utilizar  normalización nfc(). Si tenemos caracteres compuestos entre los datos, se requerirán varias pulsaciones de teclas de desplazamiento izquierda/derecha para saltar uno de éstos caracteres y es posible que cuando copie texto sobre el portapapeles, éste no contenga después exactamente lo que parecía haberse copiado.

Omnis, lleva a cabo automáticamente la normalización NFC de los caracteres pegados desde el portapapeles, pero tenga en cuenta que esto no se producirá cuando el hecho suceda desde el cliente web.

Conversión de caracteres


Las funciones siguientes le permitirán convertir un carácter específico de entre un conjunto de caracteres (cadena) a su valor Unicode y lo mismo en sentido inverso.

  • unicode(cadena,posición[,valor-hex])
    devuelve el valor Unicode del carácter indicado en posición. La primera posición de cadena es 1. Si el valor bolean “valor-hex” es cierto (por defecto es falso) se obtendrá su representación en formato hexadecimal, en el formato:  'U+h'.
  • unichr(num1[,num2]…)
    devuelve una cadena formada por la concatenación de los códigos de caracteres Unicode suministrados. Cada código es un número o una cadena en la forma 'U+h', donde h está formado por los de 1-6 caracteres que representan un valor hexadecimal.

Estas funciones están disponibles tanto desde el lado del cliente remoto, como localmente. (si se intentasen utilizar con una versión no-Unicode de Omnis, se producirá un error, cualquier biblioteca desarrollada con una versión Unicode es incompatible con no-Unicode)

Identificador de configuración regional (LCID)


La función locale() devuelve el identificador de configuración regional (LCID) del sistema/máquina en uso. El LCID especifica el formato de los separadores de decimales, miles, listas, tipos de moneda, unidades de medida, fecha y orden de clasificación. La configuración regional se especifica a nivel de sistema operativo y se encuentra en la forma "idioma_país", donde idioma es el nombre ISO639, y el país el ISO3166. Por ejemplo, la configuración regional para el Reino Unido es: “en_GB”.

Comprobación versión Unicode


La función isunicode() devolverá verdadero, siempre y cuando la función sea ejecutada desde una versión Unicode de Omnis Studio. isunicode() también funciona desde el cliente web, e indica si es o no compatible Unicode.

19 febrero 2014

De No-Unicode a Unicode (Parte 3 de 10)

Comparando textos

Omnis utiliza dos tipos de comparación entre cadenas de caracteres:
  • Comparación entre cadenas con valores UTF-8, conocida como: comparación de caracteres.
  • Comparación de acuerdo a las reglas de entorno locales, indicadas en el fichero de datos de localización (localisation data file), en éste caso y antes de llevarse a cabo la comparación, los datos entrantes son normalizados. Esto se denomina como comparación nacional (National). El uso de “National” por parte del usuario, permitirá garantizar el correcto uso de los caracteres correspondientes a su localidad. Tenga en cuenta que el uso de “National” podrá hacer caso omiso de otras reglas de codificación superiores.
Deberá usarse la función natcmp() para realizar comparaciones de tipo “National”. Tenga en cuenta que dicha función no está disponible del lado del cliente Web.

Omnis también realiza comparación de textos por muchas motivos diferentes y en ocasiones muy diversas, pero a continuación mencionaremos las más importantes.
  • Al ordenar listas
  • Al realizar búsquedas en listas
  • Al manejar índices de archivos de datos (df1)
  • En expresiones, como por ejemplo en una sentencia “if”
En todos los casos Omnis soporta el uso de variables de carácter (UTF-8) y nacional (National).

Al ordenar listas

Cuando se usa el tipo carácter, Omnis utiliza la comparación de caracteres (UTF-8) y cuando se usa el tipo nacional, Omnis utiliza la comparación nacional (National).

Al realizar búsquedas en listas

Cuando se usa el tipo de carácter, Omnis utiliza la comparación de caracteres. En el caso de listas que contienen una columna de caracteres de tipo nacional se usará “National”. Tipos especiales de búsqueda, como por ejemplo, búsquedas mediante un cálculo, se trataran como de tipo carácter, sin embargo, podrá hacer uso de la función natcmp() como parte del cálculo, con el fin de forzar el uso de la comparación “National”.

Al manejar índices de archivos de datos (df1)

Si son declarados como de tipo “National”, se usara éste.

En expresiones

Para garantizar el correcto comportamiento de las expresiones donde se evalúen caracteres, debe previamente normalizar su valor mediante el uso de la función nfc(), nfd() (vistas en la parte II) o bien la función natcmp(), según le interese.

12 febrero 2014

De No-Unicode a Unicode (Parte 2 de 10)

La normalización de caracteres

Originalmente, Unicode se componía un conjunto de caracteres de 16 bits, y fue ampliado posteriormente hasta incluir el U+10FFFF y probablemente no será la última vez que se produzca una extensión.

Windows y Mac OS X aún representan cadenas de caracteres Unicode utilizando matrices de números enteros abreviados (16-bit), lo cual no representa un problema ya que el estándar UTF-16 permite que los códigos U+10000 y mayores puedan ser representados mediante pares de valores de 16 bits, lo cual puede dejar un par libre (sin uso), conocido como par suplente.

Internamente Omnis usa UTF-32 para representar los códigos, es decir, cada código ocupa 32 bits, por lo que el valor de cada uno de ellos puede estar entre 0 y U+10FFFF inclusive. Esto permite un procesamiento sencillo de las cadenas de caracteres, ya que cada código ocupa el mismo espacio de memoria.

Unicode permite un alto número de variantes entre los caracteres a representar. Por ejemplo, considere las posibles variantes de la letra E, con acento circunflejo, con un punto por debajo o su representación en vietnamita, este carácter de hecho consta de cinco posibles representaciones en formato Unicode:

U+0045          corresponde a la letra mayúscula latina E
U+0302          con acento circunflejo
U+0323          con un punto debajo
U+00CA         mayúscula con acento circunflejo
U+1EB8         mayúscula con punto debajo
U+1EC6         mayúscula con acento circunflejo y el punto por debajo

Un carácter representado por más de un código es conocido como carácter compuesto (composite), mientras que uno representado por un único código, es conocido como carácter pre-compuesto (pre-composed).

En lo que respecta a su "forma final", a cada una de éstas representaciones generalmente le corresponde una única grafía, lo cual conlleva algunas consecuencias interesantes en lo que respecta a su uso con Omnis y que iremos exponiendo en las sucesivas entregas de éste tutorial. Con el término "forma final" hacemos referencia al carácter que finalmente se desea obtener, en el ejemplo anterior, el carácter "forma final" sería: .

Con el término normalización hacemos referencia a la conversión de una cadena de caracteres a un formato estándar Unicode. Una vez normalizada, una cadena de caracteres Unicode tiene una única representación posible, permitiendo de ese modo su comparación con otras cadenas de caracteres. El estándar Unicode recomienda el uso de uno de los dos siguiente métodos de normalización:
  • Descomposición regulada, denominada NFD: Los caracteres pre-composed son sustituidos por caracteres composite equivalentes.
  • Descomposición regulada (NFD), seguida de pre-composed, denominada NFC: Después de llevarse a cabo el NFD, todos los caracteres composite resultantes son sustituidos por sus equivalentes pre-composed, si los hubiere.
Para realizar la normalización de cadenas de caracteres Omnis proporciona las siguientes dos funciones:
  • nfd(cadena): Ejecuta un NFD y devuelve la cadena normalizada. 
  • nfc(cadena): Ejecuta un NFC y devuelve la cadena normalizada.
Estas funciones no están disponibles para su uso en métodos del cliente web, es decir ejecutándose del lado del cliente.

05 febrero 2014

De No-Unicode a Unicode (Parte 1 de 10)

De No-Unicode a Unicode


Con la publicación de Omnis Studio 4.3.x se anunciaron las modalidades Unicode y No-Unicode, de ese modo se dejaba a decisión del desarrollador cual de ellas usar.

La razón era muy clara, es necesario que Omnis de soporte a las diferentes grafías y tipologías de caracteres que encontramos en los diferentes idiomas y no solamente en el inglés, además se hacía necesario ampliar la gama soportada existente, una vez que Omnis se decantaba por un mayor apoyo al desarrollo de aplicaciones móviles e Internet.

En ésta serie de 15 partes, trataremos todos los detalles implicados en el salto de un desarrollador de aplicaciones Omnis de No-Unicode a Unicode. No hay porqué abordar éste tema con recelo, pues los cambios necesarios son pocos y las ventajas muchas, de hecho lo necesitamos si queremos abrir nuestras aplicaciones a nuevos mercados.

¿Qué es Unicode?


Según el Consorcio Unicode (www.unicode.org), que mantiene el estándar Unicode:

“Unicode proporciona un número identificador único para cada carácter, con independencia de la plataforma, la aplicación, o el idioma".

Puede obtener más información en: http://www.unicode.org/standard/WhatIsUnicode.html

Por lo tanto, podemos afirmar que es de obligado cumplimiento que sus aplicaciones, proporcionen soporte para el formato de datos Unicode, de lo contrario perderá terreno frente a sus competidores, mientras que de otro modo podrá conseguir nuevos clientes de entre los nuevos mercados emergentes.

El Consorcio Unicode proporciona información y recursos en relación con Unicode, tales como su definición estandarizada, mantenimiento de sus tablas de códigos y un extenso repositorio de productos Unicode.

De hecho las versiones actuales de Omnis Studio se suministran sólo en versión Unicode, conservando (eso si) todas las funciones de conversión necesarias para el paso de No-Unicode a Unicode, además de la visualización de cadenas de texto y datos de caracteres con soporte para varios idiomas y entornos de ejecución.

El uso de la codificación Unicode afecta principalmente al tratamiento de datos dinámicos, como (por ejemplo) en listas, o en la consulta y recuperación de datos desde un servidor de base de datos.

Signa atentos a las diferentes entregas de está serie de tutoriales, les recomiendo que se suscriban al canal del blog para no perderse ninguna de ellas.

Reciban un cordial saludo.