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í.
Extensiones de una clase de Cadena nativa del lenguaje o interfaz
interface StringExtend { int findOffset16(in int offset32) raises(StringIndexOutOfBoundsException); int findOffset32(in int offset16) raises(StringIndexOutOfBoundsException); };
findOffset16
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.
offset32
of type
int
|
UTF-16 offset |
|
Si |
findOffset32
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.
offset16
of type
int
|
UTF-32 offset |
|
si offset16 está fuera de los límites. |