Lisez-moi S.V.P. 

13 novembre 2000

Annexe B : L'accès aux limites de point de code

Mark Davis, IBM
Lauren Wood, SoftQuad Software Inc.

Table des matières

B.1: Introduction

Cette annexe constitue une partie informative, non normative, de la spécification DOM niveau 2.

Les caractères sont représentés dans Unicode par des nombres appelés points de code (appelés aussi valeurs scalaires). Ces nombres peuvent aller de 0 jusqu'à 1 114 111 = 10FFFF16 (quoique certaines de ces valeurs soient illégales). Chaque point de code peut être directement codé en une seule unité de stockage de 32 bits. Ce codage est désigné par UCS-4 (ou UTF-32). Toutefois, la spécification du DOM utilise le codage UTF-16, dans lequel les caractères les plus fréquents (qui ont des valeurs inférieures à FFFF16) sont représentés par une seule unité de stockage 16 bist tandis que les caractères au-dessus de FFFF16 utilisent une paire d'unités de stockage spéciale appellé paire de substitution. Pour plus d'informations, voir [Unicode] ou encore le site Web de Unicode.

Alors qu'une indexation par points de code, opposée à une indexation par unités de stockage, n'est pas courante dans les programmes, certaines spécifications telle que XPath (et par voie de conséquence XSLT et XPointer) utilisent des index de point de code. Pour l'interfaçage avec ces formats, on recommande que le langage de programmation offre des méthodes de traitement de chaîne pour la conversion des index de point de code en index d'unité de stockage, et inversement. Certains langages ne fournissent pas ces fonctions en natif ; on recommande pour eux que le type String natif, associé au type DOMString, soit étendu afin de permettre cette conversion. On donne un exemple d'une telle interface de programmation d'application (API) plus loin.

Remarque : Comme ces méthodes sont fournies en exemple afin d'illustrer le type de fonctionnalité qui est souhaité, les noms des méthodes, des exceptions et de l'interface peuvent différer de ceux trouvés ici.

B.2 : Les méthodes

L'interface StringExtend

Les extensions de la classe String native ou de l'interface native d'un langage


Définition IDL
interface StringExtend {
  int                findOffset16(in int offset32)
                                        raises(StringIndexOutOfBoundsException);
  int                findOffset32(in int offset16)
                                        raises(StringIndexOutOfBoundsException);
};

Méthodes
findOffset16
Retourne la position de décalage UTF-16 correspondant à une position de décalage UTF-32. Utilisé pour un accès aléatoire.

Remarque : On peut toujours effectuer des allers-retours depuis une position de décalage UTF-32 vers une position de décalage UTF-16. On peut effectuer des allers-retours depuis une position de décalage UTF-32 vers une position de décalage UTF-16 si, et seulement si, la valeur offset16 ne tombe pas au milieu d'une paire de substitution. Les substitutions sans correspondance comptent comme une seule valeur UTF-16.

Paramètres
offset32 de type int
Un décallage UTF-32.
Valeur retournée

int

Un décalage UTF-16

Exceptions

StringIndexOutOfBoundsException

Si le paramètre offset32 est hors-limite.

findOffset32
Retourne la position de décalage UTF-32 correspondant à une position de décalage UTF-16. Utilisé en accès aléatoire. Pour trouver la longueur UTF-32 d'une chaîne, faire :
len32 = findOffset32(source, source.length());

Remarque : Si la position de décalage UTF-16 tombe au milieu d'une paire de substitution, alors la position de décalage UTF-32 de la fin de la paire est retournée, c'est-à-dire, l'index du caractère après la fin de la paire. On peut toujours effectuer des allers-retours depuis une position de décalage UTF-32 vers une position de décalage UTF-16. On peut effectuer des allers-retours depuis une position de décalage UTF-16 vers une position de décalage UTF-32 si, et seulement si, la valeur de offset16 ne tombe pas au milieu d'une paire de substitution. Les substitutions sans correspondance comptent comme une seule valeur UTF-16.

Paramètres
offset16 de type int
Un décalage UTF-16
Valeur retournée

int

Un décalage UTF-32

Exceptions

StringIndexOutOfBoundsException

Si offset16 est hors-limite.