07 April 2004

Apéndice E: Accediendo a puntos de código limitados

Mark Davis, IBM
Lauren Wood, SoftQuad Software Inc.

Tabla de Contenidos

E.1 Introducción

Este apéndice es informativo, no normativo, y es parte de la especificación de DOM Nivel 3.

Los caracteres son representados en Unicode por números llamados code points (puntos de código) (también llamados scalar values (valores escalares)). Esos números pueden ir desde 0 hasta 1,114,111 = 10FFFF16 (aunque algunos de estos valores son ilegales). Cada punto de código (code point) pude ser codificado directamente con una unidad de código 32-bit. Esta codificación es llamada UCS-4 (o UTF-32). La especificación DOM, sin embargo, usa UTF-16, donde la mayoría de los caracteres (que tienen valores menores de FFFF16) son representados por una simple unidad de código 16-bit, mientras que los caracteres mayores de FFFF16 utilizan un par de unidades de código llamado surrogate pair (par sustituto). Para más información, vea [Unicode] o el sitio Web de Unicode.

La indexasión por puntos de código (code points) a diferencia de las unidades de código (code unit) no es común en programas, algunas especificaciones como [XPath 1.0] (y por lo tanto XSLT y [XPointer]) utilizan índices de puntos de código. Para trabajar con tales formatos se recomienda que el lenguaje de programación proporcione métodos de procesos de cadena para transformar los índices de puntos de código (code points) a índices de unidades de código (code unit) y retorne. Algunos lenguajes no proporcionan estas funciones de forma nativa; por esto se recomienda que el tipo navivo de Cadena sea vinculada a DOMString siendo aplicada para realizar esta transformación. A continuación veremos un ejemplo de como una API podría realizarlo.

Nota: Ya que estos métodos son suministrados como un ejemplo ilustrativo del tipo de funcionalidad que se requiere, los nombres de los métods, excepciones, e interfaz pueden diferir de los dados aquí.

E.2 Métodos

Interfaz StringExtend

Extensiones de una clase de Cadena nativa del lenguaje o interfaz


Definición IDL
interface StringExtend {
  int                findOffset16(in int offset32)
                                        raises(StringIndexOutOfBoundsException);
  int                findOffset32(in int offset16)
                                        raises(StringIndexOutOfBoundsException);
};

Métodos
findOffset16
Devuelve el offset UTF-16 que corresponde a un offset UTF-32. Usado para acceso aleatorio.

Nota: Siempre se puede ir-volver de un offset UTF-32 a un offset UTF-16 y regresar. Puede ir-volver de un offset UTF-16 a un offset UTF-32 y regresar si y solo si el offset16 no está en medio de un par sustitutivo (surrogate pair). los sustitutivos incomparables cuentan como un valor UTF-16 simple.

Parámetros
offset32 of type int
UTF-32 offset.
Valor Devuelto

int

UTF-16 offset

Excepciones

StringIndexOutOfBoundsException

Si offset32 está fuera de los límites;.

findOffset32
Devuelve el offset UTF-32 correspondiente a un offset UTF-16. Usado para acceso aleatorio. Para encontrar el tamaño UTF-32 de una cadena, utiliza:
len32 = findOffset32(source, source.length());

Nota: Si el offset UTF-16 está en medio de un par sustituto, entonces el offset UTF-32 del final del par es devuelto; es decir, el índice del caracter despues del final del par. Siempre se puede ir-volver de un offset UTF-32 a un offset UTF-16 y regresar. Puede ir-volver de un offset UTF-16 a un offset UTF-32 y regresar si y solo si el offset16 no está en medio de un par sustitutivo (surrogate pair). Los sustitutivos incomparables cuentan como un valor UTF-16 simple.

Par´metros
offset16 of type int
UTF-16 offset
Valor Devuelto

int

UTF-32 offset

Excepciones

StringIndexOutOfBoundsException

si offset16 está fuera de los límites.