background image

U

NICODE

3.1

ANNOTÉ

161

Chapitre 6

Formes de normalisation

6.1

Introduction

Le standard Unicode dĂ©finit deux formes d’équivalences entre caractĂšres : l’équivalence
canonique et l’équivalence de compatibilitĂ©. L’équivalence canonique Ă©tablit une relation
d’égalitĂ© fondamentale entre caractĂšres ou suites de caractĂšres. La Figure 6-1b dĂ©crit cette
Ă©quivalence :

Figure 6-1. Ă‰quivalence canonique

‱

Équivalence fondamentale

‱

IndiffĂ©renciable aux yeux de
l’utilisateur, si rendu correctement

‱

Comprend :

♩

hangûl

♩

suite de diacritiques

♩

singleton

1

Figure 6-1b. Exemples d’équivalence

Afin de garantir une compatibilitĂ© aller-retour entre les normes prĂ©existantes et Unicode,
plusieurs codes d’Unicode reprĂ©sentent des entitĂ©s qui ne sont que des variantes d’un mĂȘme
caractĂšre gĂ©nĂ©rique. Les reprĂ©sentations visuelles qui illustrent ce caractĂšre gĂ©nĂ©rique forment
d’ordinaire un sous-ensemble de toutes ses reprĂ©sentations visuelles possibles. Unicode dĂ©finit
pour ces caractĂšres des dĂ©compositions de compatibilitĂ©. L’apparence de ces caractĂšres Ă©tant
quelque peu diffĂ©rente ; les remplacer par un seul caractĂšre entraĂźnerait une perte potentielle
d’information de formatage, Ă  moins d’ajouter du balisage complĂ©mentaire. La Figure 6-2 fournit
quelques exemples d’équivalences de compatibilitĂ©.

1

CaractĂšres prĂ©composĂ©s dont la dĂ©composition consiste en un seul caractĂšre et non une suite de caractĂšres comme

c’est le plus souvent le cas.

ž

&

©

 

background image

6.1 I

NTRODUCTION

F

ORMES DE

N

ORMALISATION

162

U

NICODE

3.1

ANNOTÉ

Les chapitres 2 et 3 exposent de maniĂšre plus dĂ©taillĂ©e ces deux types d’équivalence. En outre,
la section 5.7, Normalisation, dĂ©crit Ă©galement plusieurs formes de normalisation. Unicode
dĂ©finit ces formes de normalisation afin de pouvoir produire Ă  partir de toute chaĂźne une seule
forme normalisĂ©e. La section 3.6, DĂ©composition, dĂ©finit de maniĂšre prĂ©cise deux de ces
formes. Elle dĂ©finit notamment la dĂ©composition canonique qui peut ĂȘtre utilisĂ©e dans l’échange
normalisĂ© de textes. Cette forme permet d’effectuer une comparaison binaire tout en conservant
une Ă©quivalence canonique avec le texte non normalisĂ© d’origine.

Figure 6-2. Ă‰quivalences de compatibilitĂ©

‱

DiffĂ©rences de formatage

♩

Variante de fonte (

)

♩

DiffĂ©rence de sĂ©cabilitĂ© ( - )

♩

Forme cursive (

   

)

♩

CerclĂ© (

♩

Chasse, force, rotation (

˟

 

)

♩

Exposant, indice (

9

9

)

♩

DisposĂ© en carrĂ© (

)

♩

Fraction ( ÂŸ )

♩

Autres (

)

La section 3.6 dĂ©finit Ă©galement la dĂ©composition de compatibilitĂ©. Celle-ci permet d’effectuer
une comparaison binaire tout en conservant cette-fois-ci une Ă©quivalence de compatibilitĂ© avec
le texte non normalisĂ© d’origine. Cette derniĂšre forme peut s’avĂ©rer utile en maintes occasions
puisqu’elle permet d’éliminer des diffĂ©rences qui ne sont pas toujours pertinentes. Les
caractĂšres katakana Ă  pleine chasse et Ă  demi-chasse ont les mĂȘmes dĂ©compositions de
compatibilitĂ© et sont donc compatibles ; ils ne sont toutefois pas canoniquement Ă©quivalents.

Ces deux formes normalisent vers des caractĂšres dĂ©composĂ©s. Bien que la section 3.6,
DĂ©composition, 
mentionne

Ă©galement l’existence d’une normalisation vers des caractĂšres

composites

2

, elle n’en prĂ©cise pas la forme. La nature des formes prĂ©composĂ©es dans le

standard Unicode permet d’envisager plusieurs normalisations Ă  base de caractĂšres
composites. Ce chapitre donne une dĂ©finition unique de la normalisation et identifie chacune
des formes normalisĂ©es.

Le Tableau 6-1 dĂ©signe les quatre formes de normalisation. Tout comme pour la dĂ©composition,
il existe deux formes normalisĂ©es vers les caractĂšres prĂ©composĂ©s : C et KC. Le rĂ©sultat de
l’une est l’équivalent canonique du texte non normalisĂ© d’origine, le rĂ©sultat de l’autre est
Ă©quivalent de compatibilitĂ©. Le K de KD et KC reprĂ©sente le mot compatibilitĂ© (suggĂ©rĂ© par
l’allemand kompatibel) alors que le C signifie canonique. Les deux types de normalisation
peuvent s’avĂ©rer utiles. Le D lui se rĂ©fĂšre Ă  la dĂ©composition.

2

Également connus sous le nom de caractĂšres prĂ©composĂ©s ou dĂ©composables.

k

g

f

i

background image

F

ORMES DE

N

ORMALISATION

6.1 I

NTRODUCTION

U

NICODE

3.1

ANNOTÉ

163

Tableau 6-1. Quatre formes de normalisation

Nom

Description

DĂ©finition

Forme de

normalisation D

(FND)

DĂ©composition canonique

Sections 3.6, DĂ©composition, 3.10, Mise en
ordre canonique, 
et 3.11, Comportement des
jamos jointifs.

Forme de

normalisation C

(FNC)

DĂ©composition canonique
suivie d’une composition
canonique

Section 6.5, DĂ©finition.

Forme de

normalisation KD

(FNKD)

DĂ©composition de
compatibilité

Sections 3.6, DĂ©composition, 3.10, Mise en
ordre canonique, 
et 3.11, Comportement des
jamos jointifs.

Forme de

normalisation KC

(FNKC)

DĂ©composition de
comptabilitĂ© suivie d’une
composition canonique

Section 6.5, DĂ©finition.

Figure 6-3. Application des quatre formes de normalisation

ro

le

ro

le,

A

rhus, 35A

,

ne, 2

5

, fine

LĂ©gende

À Ă©viter

_

Compatibilité

_

Précomposé

ĂŽ

Combinatoire

ro

le

rĂŽle,

A

rhus, 35Å,

ne, 2

5

, fine

rĂŽle

rĂŽle,

Århus, 35Å,

ne, 2

5

, fine

ro

le

ro

le,

A

rhus, 35A

,

fine, 25, fine

rĂŽle

rĂŽle,

Århus, 35Å,

fine, 25, fine

D

C

KD

KC

background image

6.1 I

NTRODUCTION

F

ORMES DE

N

ORMALISATION

164

U

NICODE

3.1

ANNOTÉ

La Figure 6-3 ci-dessus illustre l’effet de l’application de diffĂ©rentes formes de normalisation sur
un texte non normalisĂ©. Le tableau illustre les transformations qui affectent diffĂ©rents types de
caractĂšre.

Quelle que soit la forme de normalisation, on remplace les caractĂšres singletons (ceux qui
possĂšdent une transformation canonique vers un seul caractĂšre). Les formes D et C conservent
les caractĂšres de compatibilitĂ© (ceux qui possĂšdent une transformation de compatibilitĂ©), alors
que les formes KD et KC les remplacent par le rĂ©sultat de cette transformation. Ces
remplacements peuvent parfois entraĂźner la perte d’information importante, en l’absence de
balisage complĂ©mentaire.

Les formes D et KD transforment les caractĂšres prĂ©composĂ©s en leurs dĂ©compositions
canoniques, alors que les formes C et KC transforment les caractĂšres combinatoires en
caractĂšres prĂ©composĂ©s. Remarquons qu’en l’absence d’un caractĂšre prĂ©composĂ© pour e-rond
(dans ro

le

de la Figure 6-3), les formes C et KC le laissent sous sa forme dĂ©composĂ©e.

Toutes ces dĂ©finitions dĂ©coulent des rĂšgles d’équivalence et de composition exposĂ©es au
chapitre 3, ConformitĂ©, et des listes de dĂ©compositions de la Base de donnĂ©es de caractĂšres
Unicode.

Remarque :

 

les parties de texte qui ne comprennent que des caractĂšres ASCII

(U+0000 Ă  U+007F) ne sont pas affectĂ©es par ces diffĂ©rentes formes de normalisation.
Ceci est particuliĂšrement important pour les langages informatiques (voir 6.12,
Identificateurs dans les langages informatiques).

La forme de normalisation C utilise dans la mesure du possible des caractĂšres canoniques
prĂ©composĂ©s et prĂ©serve la distinction entre caractĂšres Ă©quivalents en terme de compatibilitĂ©.
D’ordinaire, les chaĂźnes de caractĂšres accentuĂ©s prĂ©composĂ©s Unicode sont dĂ©jĂ  sous la forme
de normalisation C. Les mises en Ć“uvre qui se bornent Ă  utiliser un rĂ©pertoire qui ne reprend
aucun signe combinatoire (comme celles qui disent implanter le niveau 1 dĂ©fini par l’ISO/CEI
10646-1) utilisent aussi, habituellement, la forme de normalisation C. Les mises en Ć“uvre de
versions ultĂ©rieures de l’ISO 10646 doivent considĂ©rer les problĂšmes potentiels liĂ©s aux
diffĂ©rences de versions (voir 6.3, Versions et stabilitĂ©).

Le modĂšle de caractĂšres du W3C

3

utilise la forme de normalisation C en XML et dans les

normes connexes Ă  celui-ci (ce document n’est pas encore final, mais ce choix de forme de
normalisation devrait rester).

La forme de normalisation KC Ă©limine Ă©galement les diffĂ©rences entre les caractĂšres
compatibles[PA14] que l’on distingue souvent Ă  mauvais escient. C’est pourquoi les caractĂšres
katakana de demi-chasse et de pleine chasse sont normalisĂ©s vers une mĂȘme valeur ; il en va
de mĂȘme pour les chiffres romains et leurs lettres correspondantes

4

. La section 6.7, Exemples

et tableaux, fournit de nombreux autres exemples complets.

On veillera Ă  ne pas appliquer les formes de normalisations KC et KD sans discernement Ă 
n’importe quel texte. Ces formes rendent impossible la conversion aller-retour entre Unicode et
de nombreux jeux de caractĂšres prĂ©existants, car elles Ă©liminent bon nombre de diffĂ©rences de
formatage. Ă€ moins qu’elles ne supplĂ©ent Ă  cette suppression par du balisage de formatage
complĂ©mentaire, elles risquent donc d’éliminer des distinctions cruciales Ă  la comprĂ©hension du
texte.

3

<http://www.w3.org/TR/WD-charmod>

4

Par exemple, I en chiffre romain

≈

la lettre i majuscule, V en chiffre romain

≈

la lettre v majuscule

background image

F

ORMES DE

N

ORMALISATION

6.2 N

OTATION

U

NICODE

3.1

ANNOTÉ

165

La meilleure façon d’apprĂ©hender ces formes de normalisation est sans doute de les considĂ©rer
comme analogue Ă  un passage en majuscules ou en minuscules : utile parfois pour indiquer le
sens, mais parfois une modification de texte inappropriĂ©e. On peut les utiliser avec plus de
libertĂ© pour des applications aux jeux de caractĂšres restreints, comme Ă  la section 6.12,
Identificateurs dans les langages informatiques.

En rĂ©sumĂ©, voici l’effet des formes de normalisation sur les caractĂšres prĂ©composĂ©s de
compatibilitĂ© prĂ©sents dans le texte-source :

‱

les formes D et C conservent les prĂ©composĂ©s de compatibilitĂ© ;

‱

ni KD ni KC ne conservent les prĂ©composĂ©s de compatibilitĂ© ;

‱

aucune de ces formes n’introduit de prĂ©composĂ©s de compatibilitĂ© absents du texte-

source.

Remarque : la forme de normalisation KC ne tente pas de transformer les suites de
caractĂšres vers des composĂ©s de compatibilitĂ©. Ainsi, une composition de compatibilitĂ©
de Â« suffit Â» ne produit pas "su\uFB03t" bien que â€˜\uFB03’ soit un caractĂšre Ă©quivalent
de compatibilitĂ© des trois caractĂšres Â« ffi Â».

La concatĂ©nation des chaĂźnes n’est fermĂ©e dans aucunes des formes de normalisation.
ConsidĂ©rons les exemples suivants :

Tableau 6-2. La concatĂ©nation n’est pas fermĂ©e

Forme ChaĂźne1

ChaĂźne2

Concaténation

Normalisation correcte

C

"a"

"^"

"a"+"^"

"Ăą"

D

"a"+"^"

"." (point souscrit)

"a"+"^" + "."

"a" + "." +"^"

À moins de limiter le rĂ©pertoire, il est impossible de concevoir une forme de normalisation dans
laquelle la concatĂ©nation simple soit fermĂ©e. Au besoin, on peut cependant Ă©crire une fonction
spĂ©cialisĂ©e qui produit une concatĂ©nation normalisĂ©e. Par contre, la sĂ©lection de sous-chaĂźnes
est fermĂ©e dans l’ensemble des chaĂźnes normalisĂ©es, quelle que soit la forme de normalisation
utilisée.

6.2

Notation

Toutes les dĂ©finitions de ce chapitre reposent sur les rĂšgles d’équivalence et de dĂ©composition
Ă©noncĂ©es au chapitre 3, ConformitĂ©, et sur les dĂ©compositions et les classes combinatoires
dĂ©finies dans la Base de donnĂ©es de caractĂšres Unicode. Les dĂ©compositions doivent respecter
ces rĂšgles. On doit, notamment, appliquer rĂ©cursivement les dĂ©compositions dĂ©finies dans la
Base de donnĂ©es de caractĂšres Unicode ; la chaĂźne-rĂ©sultat doit ensuite ĂȘtre mise en ordre
canonique selon les classes combinatoires des caractĂšres qui la composent. Pour plus de
concision, on utilise la notation suivante.

‱

On abrĂšge les noms ISO 10646 de la maniĂšre suivante:

E-grave

=

U+00C8

LETTRE MAJUSCULE LATINE E ACCENT GRAVE

ka

=

U+30AB

SYLLABE KATAKANA KA

ka_dc

=

U+FF76

SYLLABE KATAKANA KA DEMI-CHASSE

ten

=

U+3099

DIACRITIQUE KATAKANA-HIRAGANA SON VOISÉ

ten_dc

=

U+FF9E

MARQUE KATAKANA DE SON VOISÉ DEMI-CHASSE

background image

6.3 V

ERSIONS ET STABILITÉ

F

ORMES DE

N

ORMALISATION

166

U

NICODE

3.1

ANNOTÉ

‱

On peut dĂ©signer la classe combinatoire d’un caractĂšre X de la maniĂšre suivante :

classeCombinatoire(X).

‱

On peut reprĂ©senter une suite de caractĂšres en sĂ©parant les diffĂ©rents noms de

caractĂšre Ă  l’aide de Â« + Â» ou en utilisant la notation des chaĂźnes.

‱

"...\uxxxx..." reprĂ©sente le caractĂšre Unicode U+xxxx au sein d’une chaĂźne de

caractĂšres.

‱

Un caractĂšre unique Ă©quivalent Ă  la suite de caractĂšres B + C peut s’écrire B-C.

‱

On abrĂšge les diffĂ©rentes formes de normalisation d’une chaĂźne C de la maniĂšre

suivante : FND(C), FNKD(C), FNC(C) et FNKD(C). FNX(C) reprĂ©sente n’importe quelle
forme de normalisation.

‱

On reprĂ©sente les divers types de jamos jointifs (initiaux, mĂ©diaux, finaux) Ă  l’aide de

lettres souscrites comme dans k

i

, a

m

et k

f

.

‱

Il est permis d’utiliser des accents avec chasse (sans cercle en pointillĂ©) pour

reprĂ©senter des accents sans chasse : Â« c, Â» pour dĂ©signer suivi d’une cĂ©dille sans
chasse
.

6.3

Versions et stabilité

Il est crucial que les formes de normalisation demeurent stables au fil du temps. Ceci signifie
que, si l’on normalise une chaĂźne (qui ne contient pas de caractĂšres non attribuĂ©s) sous une
version d’Unicode, cette chaĂźne doit rester normalisĂ©e dans les versions ultĂ©rieures d’Unicode.
C’est ce qu’on appelle l’exigence de rĂ©trocompatibilitĂ©. Afin de la respecter, on dĂ©signe une
version fixe pour le processus de composition. On la nomme la version de composition.

La version de composition correspond Ă  la version 3.1.0 de la Base de donnĂ©es de caractĂšres
Unicode
. Afin de mieux comprendre l’importance de la version de composition, supposons que
la version 4.0 d’Unicode ajoute le prĂ©composĂ© Q-caron. Pour les mises en Ć“uvre qui utilisent la
version 4.0, les chaĂźnes sous les formes de normalisation C et KC continueront Ă  contenir la
suite Q + caron et non le nouveau caractĂšre Q-caron, puisque la composition canonique pour Q-
caron n’avait pas Ă©tĂ© dĂ©finie pour la version de composition. Pour plus d’informations, voir la
section 6.6, Tableau des compositions exclues.

Remarque : il est possible que de nouvelles compositions soient ajoutĂ©es dans des
versions ultĂ©rieures d’Unicode, pour autant que l’exigence de rĂ©trocompatibiliĂ© soit
satisfaite. Ceci signifie que, pour toute nouvelle composition XY

→

Zou Y

doivent ĂȘtre un nouveau caractĂšre, ainsi que Z. Toutefois, Unicode dĂ©courage
fortement la dĂ©finition de nouvelles compositions, mĂȘme quand elles respectent les
restrictions Ă©noncĂ©es ci-dessus.

Il ne faut pas seulement Ă©tablir la version de composition pour les prochaines versions
d’Unicode, il est Ă©galement nĂ©cessaire de limiter le genre de modifications qui pourront ĂȘtre
apportĂ©es aux propriĂ©tĂ©s de caractĂšre. C’est pourquoi, le consortium Unicode a Ă©tabli une
politique claire qui garantit la stabilitĂ© des formes de normalisation. Pour de plus amples
renseignements, veuillez vous rĂ©fĂ©rer aux Lignes de conduite Unicode

5

.

Remarque : la version 3.1 constitue une exception Ă  cette ligne de conduite. Voir la
Section 6.15Corrigendum relatif Ă  la normalisation 3.1.

5

<http://www.unicode.org/unicode/standard/policies.html>

background image

F

ORMES DE

N

ORMALISATION

6.4 C

ONFORMITÉ

U

NICODE

3.1

ANNOTÉ

167

6.4

Conformité

C1. Tout processus qui produit du texte Unicode qui se veut dans une forme normalisĂ©e doit le
faire conformĂ©ment aux prescriptions de ce document.

C2. Tout processus qui dĂ©sire Ă©tablir si un texte Unicode se prĂ©sente sous une forme
normalisĂ©e doit le faire conformĂ©ment aux prescriptions de ce document.

C3. Tout processus qui dĂ©sire transformer du texte en une forme normalisĂ©e doit satisfaire au
test de conformitĂ© de normalisation

6

.

Remarque :

 

la dĂ©finition des formes de normalisation est dĂ©crite du point de

vue d’un processus qui produit une dĂ©composition ou une composition Ă 
partir d’une chaĂźne Unicode arbitraire. Il s’agit d’une description logique â€“
certaines mises en Ć“uvre peuvent adopter des mĂ©canismes plus efficaces
pour autant qu’elles produisent le mĂȘme rĂ©sultat. De mĂȘme, il n’est pas
nĂ©cessaire pour Ă©tablir l’utilisation d’une forme de normalisation particuliĂšre
d’employer le processus de normalisation, il suffit que le processus utilisĂ©
produise un rĂ©sultat Ă©quivalent Ă  une normalisation suivie d’un test d’identitĂ©
binaire.

6.5

DĂ©finition

Cette section dĂ©finit les formes de normalisation C et KC. Elle utilise les quatre dĂ©finitions
suivantes (D1, D2, D3 et D4) ainsi que deux rĂšgles (R1 et R2).

Toutes les suites de caractĂšres combinatoires commencent par un caractĂšre de classe
combinatoire zĂ©ro. Afin de simplifier, on dĂ©finit le terme suivant pour ces caractĂšres :

D1. On dit d’un caractĂšre T qu’il est une tĂȘte si sa classe combinatoire dans la Base de donnĂ©es
de caractĂšres 
est zĂ©ro.

Compte tenu de la dĂ©finition de l’équivalence canonique, l’ordre des caractĂšres combinatoires
de mĂȘme classe combinatoire importe. Ainsi, a-macron-brĂšve n’est-il pas Ă©quivalent Ă  a-brĂšve-
macron. 
On ne peut donc composer des caractĂšres s’il en rĂ©sultait une modification de l’ordre
canonique des caractĂšres combinatoires.

D2. Pour toute suite de caractĂšres qui commence par une tĂȘte T, on dit qu’un caractĂšre K est
isolĂ© de T si et seulement s’il existe un caractĂšre B entre T et K tel que B est Ă©galement une tĂȘte
ou B appartient Ă  la mĂȘme classe combinatoire que K.

Remarque : Quand B isole K, intervertir B et K produit une suite de caractĂšres
qui n’est pas canoniquement Ă©quivalente Ă  la suite originelle. Voir la section 3.9,
Mise en ordre canonique.

Remarque : Si une suite de caractĂšres combinatoires se prĂ©sente en ordre
canonique, il suffit d’inspecter le caractĂšre qui prĂ©cĂšde immĂ©diatement un
caractĂšre K pour Ă©tablir si K est isolĂ© ou non.

6

À partir d’Unicode 3.0.1, le fichier Ă  utiliser pour le test de conformitĂ© de normalisation se trouve sur le disque optique

qui

accompagne

cet

ouvrage ;

une

version

tenue

Ă 

jour

est

disponible

Ă 

l’adresse

suivante

<http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt>.

Ce

fichier

comprend

une

série

de

champs.

L’application des formes de normalisation aux diffĂ©rents champs devra produire un rĂ©sultat correspondant Ă  celui

dĂ©clarĂ© dans l’en-tĂȘte de ce fichier.

background image

6.5 D

ÉFINITION

F

ORMES DE

N

ORMALISATION

168

U

NICODE

3.1

ANNOTÉ

La formation d’une composition sous la forme normalisĂ©e C ou KC implique :

1.

la dĂ©composition de la chaĂźne en question conformĂ©ment aux transformations
canoniques (ou de compatibilitĂ©) indiquĂ©es dans la Base de donnĂ©es de caractĂšres
qui correspond Ă  la derniĂšre version d’Unicode supportĂ©e par la mise en Ć“uvre,
puis

2.

la composition de la chaĂźne rĂ©sultante conformĂ©ment aux transformations
canoniques de la version de composition

7

et cela par compositions successives de

chaque caractĂšre non isolĂ© avec la tĂȘte qui le prĂ©cĂšde.

La figure 6-4 ci-dessous illustre le processus. Les cubes gris reprĂ©sentent les tĂȘtes, les cubes
blancs les autres caractĂšres. La premiĂšre Ă©tape consiste Ă  dĂ©composer complĂštement la chaĂźne
(les flĂšches vers le bas) et Ă  la rĂ©ordonner. Lors de la seconde Ă©tape, reprĂ©sentĂ©e par les arcs
flĂ©chĂ©s du bas de la figure, on compare chaque caractĂšre au caractĂšre prĂ©cĂ©dent (autre qu’une
tĂȘte) et on le combine Ă  la tĂȘte prĂ©cĂ©dente si toutes les conditions sont remplies. Voir les
sections 6.7, Exemples et tableaux et 6.10, Exemples de mise en Ć“uvre.

Figure 6-4. Processus de composition

Il faut Ă©galement prĂ©ciser quand il est permis de composer une tĂȘte et un caractĂšre non isolĂ©.
Pour ce faire, on introduit les deux dĂ©finitions suivantes :

D3. On dit d’un caractĂšre qu’il est un caractĂšre prĂ©composĂ© principal s’il fait l’objet d’une
dĂ©composition canonique dans la Base de donnĂ©es de caractĂšres Unicode (ou s’il s’agit d’une
syllabe hangĂ»l canoniquement dĂ©composable) mais n’apparaĂźt pas dans le Tableau des
compositions exclues. Voir section 6.6, Tableau des compositions exclues
.

Remarque : La dĂ©composition d’une syllabe hangĂ»l est considĂ©rĂ©e comme une
dĂ©composition canonique.

D4. On dit d’un caractĂšre X qu’il est recomposable avec un caractĂšre Y si, et seulement si, il
existe un caractĂšre prĂ©composĂ© principal Z canoniquement Ă©quivalent Ă  la suite <X, Y>.

À partir de ces dĂ©finitions, les rĂšgles suivantes dĂ©finissent les formes de normalisation C et KC.

7

C’est-Ă -dire la version de composition de la Base de donnĂ©es de caractĂšres Unicode.

T

ÂŹ

T

T

T

T

ÂŹ

T

T

T

ÂŹ

T

ÂŹ

T

T

T

T

ÂŹ

T

ÂŹ

T

ÂŹ

T

T

background image

F

ORMES DE

N

ORMALISATION

6.6 T

ABLEAU DES COMPOSITIONS EXCLUES

U

NICODE

3.1

ANNOTÉ

169

R1. F

ORME DE NORMALISATION

C

On obtient la forme de normalisation C d’une chaĂźne de caractĂšres C par l’application du
processus suivant ou de tout autre processus produisant le mĂȘme rĂ©sultat :

1.

Produire la dĂ©composition canonique de la chaĂźne d’origine C conformĂ©ment aux
dĂ©compositions rĂ©pertoriĂ©es dans la derniĂšre version supportĂ©e de la Base de donnĂ©es
de caractĂšres Unicode.

2.

Pour chaque caractĂšre K de cette dĂ©composition, en commençant par le premier, si rien
n’isole K de la derniĂšre tĂȘte D et si K est recomposable avec D, remplacer D par le
prĂ©composĂ© D-K et supprimer K.

Le rĂ©sultat de ce processus forme une nouvelle chaĂźne C’ normalisĂ©e sous la forme normalisĂ©e
C.

R2. F

ORME DE NORMALISATION

KC

On obtient la forme de normalisation KC d’une chaĂźne de caractĂšres C par l’application du
processus suivant ou de tout autre processus produisant le mĂȘme rĂ©sultat :

1.

Produire la dĂ©composition de compatibilitĂ© de la chaĂźne d’origine C conformĂ©ment aux
dĂ©compositions rĂ©pertoriĂ©es dans la derniĂšre version supportĂ©e de la Base de donnĂ©es
de caractĂšres Unicode.

2.

Pour chaque caractĂšre K de cette dĂ©composition, en commençant par le premier, si rien
n’isole K de la derniĂšre tĂȘte D et si K est recomposable avec D, remplacer D par le
prĂ©composĂ© D-K et supprimer K.

Le rĂ©sultat de ce processus forme une nouvelle chaĂźne normalisĂ©e C’ sous la forme KC.

6.6

Tableau des compositions exclues

Il existe quatre classes de caractĂšres exclues de la composition.

1.

Propres Ă  une Ă©criture : caractĂšres prĂ©composĂ©s qui ne constituent pas gĂ©nĂ©ralement
les formes privilĂ©giĂ©es d’une Ă©criture particuliĂšre.

‱

On ne peut dĂ©terminer ces caractĂšres Ă  partir de l’information de la Base de
donnĂ©es de caractĂšres Unicode
.

2.

PostĂ©rieurs Ă  la version de composition : caractĂšres prĂ©composĂ©s rajoutĂ©s Ă  la
version 3.0 d’Unicode. Cet ensemble sera mis Ă  jour aprĂšs chaque nouvelle version
d’Unicode. Voir la section 6.3, Versions et stabilitĂ©.

‱

On ne peut dĂ©terminer ces caractĂšres Ă  partir de l’information fournie dans la
Base de donnĂ©es de caractĂšres Unicode.

3.

Singletons : caractĂšres prĂ©composĂ©s dont la dĂ©composition consiste en un seul
caractĂšre (voir la description ci-dessous).

‱

On calcule ces caractĂšres Ă  partir de l’information fournie dans la Base de
donnĂ©es de caractĂšres Unicode.

4.

DĂ©compositions sans tĂȘte : caractĂšres prĂ©composĂ©s dont les dĂ©compositions ne
commencent pas par une tĂȘte.

‱

On calcule ces caractĂšres Ă  partir de l’information fournie dans la Base de
donnĂ©es de caractĂšres Unicode.

La Base de donnĂ©es de caractĂšres Unicode peut fournir pour deux caractĂšres distincts une
mĂȘme dĂ©composition canonique. Voir l’exemple ci-dessous.

background image

6.7 E

XEMPLES ET TABLEAUX

F

ORMES DE

N

ORMALISATION

170

U

NICODE

3.1

ANNOTÉ

Sources

MĂȘme dĂ©composition

U+212B

SYMBOLE ANGSTRÖM

U+00C5

LETTRE MAJUSCULE LATINE A

ROND EN CHEF

U+0041

LETTRE MAJUSCULE LATINE A

+
U+030A

DIACRITIQUE ROND EN CHEF

La Base de donnĂ©es de caractĂšres Unicode dĂ©composera d’abord un des caractĂšres en l’autre
avant de dĂ©composer ce caractĂšre Ă  son tour. En d’autres termes, un des caractĂšres (ici
U+212B

SYMBOLE ANGSTRÖM

)

a une dĂ©composition singleton. Unicode comprend des

caractĂšres Ă  dĂ©composition singleton essentiellement pour des raisons de compatibilitĂ© avec
des normes et standards prĂ©existants. Ces dĂ©compositions singleton ne font pas partie des
compositions principales.

On trouvera un tableau des compositions exclues lisibles mĂ©caniquement Ă  l’adresse suivante
<http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt.

Remarquer

que

cette

version corrige l’omission du YOD HIRIK. Voir la Section 6.15Corrigendum relatif Ă  la
normalisation 3.1 pour plus de dĂ©tails.

Les quatre diffĂ©rentes classes de caractĂšres sont incluses dans ce fichier, bien que les
singletons et les dĂ©compositions sans tĂȘte sont mis en commentaires.

6.7

Exemples et tableaux

Cette section Ă©numĂšre quelques exemples de chaque forme de normalisation.

Exemples communs

Les exemples suivants reprĂ©sentent des cas oĂč les formes D et KD sont identiques et les
formes C et KC sont identiques

Original

Formes D, KD

Formes C, KC

Remarques

a

D-point_en_chef

D + point_en_chef

D-point_en_chef

b

D + point_en_chef

D + point_en_chef

D-point_en_chef

Les Ă©quivalents canoniques
prĂ©composĂ©es et dĂ©com-
posĂ©es produisent le mĂȘme
résultat.

c

D-point_souscrit
+ point_en_chef

D + point_souscrit
+ point_en_chef

D-point_souscrit
+ point_en_chef

d

D-point_en_chef
+ point_souscrit

D + point_souscrit
+ point_en_chef

D-point_souscrit
+ point_en_chef

e

D + point_en_chef
+ point_souscrit

D + point_souscrit
+ point_en_chef

D-point_souscrit
+ point_en_chef

f

D + point_en_chef
+ cornu
+ point_souscrit

D + cornu
+ point_souscrit
+ point_en_chef

D-point_souscrit
+ cornu
+ point_en_chef

Au moment oĂč l’on atteint le
point_en_chef, on ne peut
plus l’adjoindre au caractĂšre
de base.

Il se peut que des signes
combinatoires supplĂ©men-
taires se glissent dans la
suite (voir f) pour autant que
le rĂ©sultat de la combinaison
soit canoniquement
Ă©quivalente.

E-macron-grave

E + macron + grave

E-macron-grave

E-macron + grave

E + macron + grave

E-macron-grave

Adjonction de plusieurs
caractĂšres combinatoires au
caractĂšre de base.

background image

F

ORMES DE

N

ORMALISATION

6.7 E

XEMPLES ET TABLEAUX

U

NICODE

3.1

ANNOTÉ

171

i

E-grave + macron

E + grave + macron

E-grave + macron

Le macron ne se combine
pas, puisque E-grave-
macron n’existe pas et E-
macron-grave n’est pas
canoniquement Ă©quivalent.

j

signe_angstrom

A + rond

A-rond

k

A-rond

A + rond

A-rond

On utilise la forme Ă… (A-
rond) pour les deux
caractĂšres, car il s’agit du
prĂ©composĂ© recommandĂ©.

Exemples des formes de normalisation D et C

Ces exemples de formes D et C illustrent leurs diffĂ©rences respectives avec les formes KD et
KC.

Original

Forme D

Forme C

Remarques

l

"Äffin"

"A\u0308ffin"

"Äffin"

"Ä\uFB03n"

"A\u0308\uFB03n"

"Ä\uFB03n"

La ligature_ffi (U+FB03)
n’est pas dĂ©composĂ©e, car
si elle possĂšde une
dĂ©composition de compa-
tibilitĂ©, elle n’en a pas de
canonique. (Voir ci-
dessous Exemples des
formes de normalisation
KD et KC.
)

n

"Henri IV"

"Henri IV"

"Henri IV"

o

"Henri \u2163"

"Henri \u2163"

"Henri \u2163"

De mĂȘme, le CHIFFRE
ROMAIN IV (U+2163) n’est
pas dĂ©composĂ©.

p

ga

ka + ten

ga

q

ka + ten

ka + ten

ga

r

ka_dc + ten_dc

ka_dc + ten_dc

ka_dc + ten_dc

s

ka + ten_dc

ka + ten_dc

ka + ten_dc

t

ka_dc + ten

ka_dc + ten

ka_dc + ten

Les diffĂ©rents Ă©quivalents
de compatibilitĂ© d’un
mĂȘme caractĂšre japonais
ne produisent pas la mĂȘme
chaĂźne normalisĂ©e sous la
forme C.

u

kaks

k

i

+ a

m

+ ks

f

kaks

Les normalisations
conservent les syllabes
hangûl.

Exemples des formes de normalisation KD et KC

Ces exemples de formes KD et KC illustrent leurs diffĂ©rences respectives avec les formes D et
C.

Original

Forme KD

Forme KC

Remarques

l'

"Äffin"

"A\u0308ffin"

"Äffin"

m' "Ä\uFB03n"

"A\u0308\ffin"

"Äffin"

La ligature_ffi (U+FB03)
est dĂ©composĂ©e pour la
forme de normalisation KC
(alors qu’elle ne l’est pas
dans la forme de
normalisation C).

background image

6.8 O

BJECTIFS DE CONCEPTION

F

ORMES DE

N

ORMALISATION

172

U

NICODE

3.1

ANNOTÉ

n' "Henri IV"

"Henri IV"

"Henri IV"

o' "Henri \u2163"

"Henri IV"

"Henri IV"

Ici Ă©galement, les chaĂźnes
normalisĂ©es sont iden-
tiques pour la forme de
normalisation KC.

p' ga

ka + ten

ga

q' ka + ten

ka + ten

ga

r'

ka_dc + ten_dc

ka + ten

ga

s'

ka + ten_dc

ka + ten

ga

t'

ka_dc + ten

ka + ten

ga

Les diffĂ©rents Ă©quivalents
de compatibilitĂ© d’un
mĂȘme caractĂšre japonais
produisent la mĂȘme chaĂźne
normalisĂ©e sous la forme
KC.

u' kaks

k

i

+ a

m

+ ks

f

kaks

Les normalisations conser-
vent les syllabes hangĂ»l.

* Dans les premiĂšres versions d’Unicode, les caractĂšres jamos composĂ©s comme ks

f

avaient

une dĂ©composition de compatibilitĂ© de type k

f

+ s

f

. La version 2.1.9 d’Unicode a Ă©liminĂ© ces

correspondances afin de prĂ©server les syllabes hangĂ»l.

6.8

Objectifs de conception

On trouvera ci-dessous les objectifs qui sous-tendent la conception des formes de
normalisation.

Objectif 1 : Unicité

L’unicitĂ© est le premier, et de loin le plus important, objectif de conception des formes de
normalisation. Ceci signifie que deux chaĂźnes Ă©quivalentes doivent avoir prĂ©cisĂ©ment la mĂȘme
forme normalisĂ©e. De façon explicite :

1.

Si deux chaĂźnes et sont canoniquement Ă©quivalentes, alors

‱

C(x) = C(y)

‱

D(x) = D(y)

2. Si deux chaĂźnes et sont des Ă©quivalents de compatibilitĂ©, alors

‱

KC(x) = KC(y)

‱

KD(x) = KD(y)

Objectif 2 : Stabilité

Le deuxiĂšme objectif de conception est la prĂ©servation des caractĂšres qui n’interviennent pas
dans le processus de composition ou de dĂ©composition.

1.

Si X contient un caractĂšre ayant une dĂ©composition de compatibilitĂ©, alors D(X) et C(X)
contiennent toujours ce caractĂšre.

2.

Dans la mesure du possible, si X ne comprend pas de caractĂšre combinatoire alors
C(X) = X.

3.

Les signes combinatoires non pertinents ne doivent pas influer sur le rĂ©sultat des
compositions. Voir l’exemple Ă  la section 6.7Exemples et tableaux, oĂč le caractĂšre
cornu n’a pas d’incidence sur le rĂ©sultat des compositions.

Remarque : Les seuls caractĂšres pour lesquels l’objectif 2.2 ne se vĂ©rifie pas sont ceux
Ă©numĂ©rĂ©s dans la section 6.6Tableau des compositions exclues.

background image

F

ORMES DE

N

ORMALISATION

6.9 N

OTES DE MISE EN Ć’UVRE

U

NICODE

3.1

ANNOTÉ

173

Objectif 3 : Efficacité

Le troisiĂšme objectif de conception est de permettre des mises en Ć“uvre efficaces.

1.

Il est possible de produire les formes de normalisation Ă  l’aide de code efficace. Plus
particuliĂšrement, on doit ĂȘtre en mesure de produire trĂšs rapidement la forme de
normalisation C Ă  partir des chaĂźnes qui sont dĂ©jĂ  en forme de normalisation C ou D.

2.

Les formes de compositions ne doivent pas nĂ©cessairement produire les rĂ©sultats les
plus concis car cela peut entraĂźner des calculs excessifs.

6.9

Notes de mise en Ɠuvre

On peut optimiser de diverses façons les programmes qui produisent la forme de
normalisation C. PlutĂŽt que de commencer par la dĂ©composition du texte au complet, on peut,
par exemple, vĂ©rifier rapidement chaque caractĂšre. Si celui-ci est dĂ©jĂ  dans la forme
prĂ©composĂ©e adĂ©quate alors on passe au caractĂšre suivant sans autre procĂšs. On n’invoque du
code plus complexe que dans le cas oĂč le caractĂšre courant est combinatoire ou s’il appartient
au Tableau des compositions exclues (voir la section 6.6). Dans ce cas, il faudra vĂ©rifier les
caractĂšres prĂ©cĂ©dents jusqu’à la derniĂšre tĂȘte. Voir la section 6.13DĂ©tection des formes de
normalisation 
pour un complĂ©ment d’information.

Lors de la composition, la majoritĂ© du temps de calcul se passe Ă  extraire les donnĂ©es
appropriĂ©es. La consultation des donnĂ©es pour la forme de normalisation C peut ĂȘtre mise en
Ɠuvre de maniĂšre trĂšs efficace car elle n’implique que des paires de caractĂšres et non des
chaĂźnes arbitraires. On utilise d’abord un tableau Ă  plusieurs niveaux (Ă©galement appelĂ© un trie,
voir le chapitre 5) pour faire correspondre au caractĂšre un petit entier appartenant Ă  un
intervalle continu de 0 Ă  n. Le code pour ce faire ressemble Ă  :

i = donnĂ©es[indexe[c >> GLISSEMENTBLOC] + (c & MASQUEBLOC)];

Ensuite, Ă  l’aide d’une matrice, on fait correspond Ă  une paire de ces petits entiers la valeur
rĂ©sultat. Cet algorithme est bien plus efficace que ceux qui utilisent des mĂ©thodes universelles
comme les tables de hachage.

Les compositions et dĂ©compositions hangĂ»l sont algorithmiques, on peut donc rĂ©duire
radicalement les besoins en mĂ©moire si l’on code les opĂ©rations correspondantes Ă  l’aide
d’instructions plutĂŽt que de grandes matrices Voir la section 6.14HangĂ»l, pour plus
d’informations.

Remarque : il est important de s’assurer que la mise en Ć“uvre produit bien des
rĂ©sultats conformes. Ă€ cette fin, elle doit rĂ©ussir les tests de conformitĂ© de normalisation
prĂ©vus : <http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt>.

background image

6.10 E

XEMPLES DE MISE EN Ć’UVRE

F

ORMES DE

N

ORMALISATION

174

U

NICODE

3.1

ANNOTÉ

6.10 Exemples de mise en Ɠuvre

Le consortium Unicode fournit des programmes-modĂšles pour chacune des quatre formes de
normalisation. Pour plus de clartĂ©, ces modĂšles ne sont pas optimisĂ©s. Dans les cas des formes
C et KC, ils transforment une chaĂźne en deux passes : une dĂ©composition suivie de
recompositions successives de chacun des caractĂšres non isolĂ©s avec la derniĂšre tĂȘte.

Pour certaines mises en Ć“uvre, il se peut que les caractĂšres en entrĂ©e ou en sortie soient
fournis par petits paquets. Il est alors nĂ©cessaire de stocker dans un tampon le texte jusqu’à la
derniĂšre tĂȘte. On peut vider le tampon dĂšs qu’on dĂ©sire insĂ©rer une seconde tĂȘte.

Les modĂšles sont Ă©crits en Java, toutefois â€“ afin d‘ĂȘtre plus accessibles â€“ ils n’emploient pas de
techniques orientĂ©es objet. Le code de ces modĂšles et une dĂ©monstration interactive sont
disponibles

8

. Le W3C fournit sur son site du code Perl Ă©quivalent

9

.

6.11 Codages prĂ©existants

Bien que les formes de normalisation soient destinĂ©es Ă  qualifier du texte Unicode, elles
peuvent Ă©galement ĂȘtre utilisĂ©es pour les codages de caractĂšres non-Unicode, en d’autres mots
les codages prĂ©existants. Pour ce faire, on effectue une correspondance aller-retour entre le jeu
de caractĂšres prĂ©existant et Unicode en utilisant les dĂ©finitions D5 et D6.

D5. Un transcodage inversible T pour un jeu de caractĂšres prĂ©existant P est une relation
bijective entre les caractĂšres codĂ©s de P et les caractĂšres d’Unicode telle que la relation inverse
T

-1

, appliquĂ©e Ă  toute chaĂźne C de P, vĂ©rifie l’équation T

-1

(T(C)) = C.

Remarque 1 : On admet habituellement un seul transcodage pour un jeu de
caractĂšres prĂ©existant donnĂ©. Il se peut cependant que plusieurs transcodages
existent, c’est le cas du Shift-JIS auquel on peut associer deux transformations,
l’une pour conserver la signification Â« / Â» de 2F

16,

l’autre pour conserver la

signification Â« Â„ Â».

Remarque 2 : La position des caractĂšres dans la chaĂźne codĂ©e Ă  l’aide du jeu
prĂ©existant peut ĂȘtre trĂšs diffĂ©rente de celle des caractĂšres Ă©quivalents en
Unicode. Ainsi, si la chaĂźne prĂ©existante utilise un codage visuel de l’hĂ©breu, le
premier caractĂšre peut devenir le dernier caractĂšre de la chaĂźne Unicode.

Il est prĂ©fĂ©rable que les routines de transcodage destinĂ©es aux jeux de caractĂšres prĂ©existants
produisent, dans la mesure du possible, des chaĂźnes normalisĂ©es sous la forme C. Pour plus
d’informations, veuillez vous rĂ©fĂ©rer au rapport technique Unicode n° 22, Character Mapping
Tables
.

D6. Soit une chaĂźne C codĂ©e en P et un transcodage inversible T pour P, on dĂ©finit la forme de
normalisation X de C sous T 
comme Ă©tant le rĂ©sultat des opĂ©rations suivantes : transformation
vers Unicode, normalisation vers la forme X et transformation inverse vers le codage de
caractĂšres d’origine, c’est Ă  dire T

.-1

(FNX(T(C))). Quand on n’admet qu’un seul transcodage

inversible pour un jeu de caractĂšres donnĂ©, on peut alors simplement parler de la forme de
normalisation X de C.

On classe les jeux de caractĂšres prĂ©existants en trois catĂ©gories selon leur comportement lors
de la normalisation avec les transcodeurs acceptĂ©s.

8

<http://www.unicode.org/unicode/reports/tr15/Normalizer.html>.

9

<http://www.w3.org/International/charlint>

background image

F

ORMES DE

N

ORMALISATION

6.12 I

DENTIFICATEURS DANS LES LANGAGES INFORMATIQUES

U

NICODE

3.1

ANNOTÉ

175

‱

PrĂ©normalisĂ© : toute chaĂźne dans le jeu de caractĂšres est dĂ©jĂ  en forme normalisĂ©e X.

o

Exemple : ISO 8859-1 est prĂ©normalisĂ©e en forme normalisĂ©e C.

‱

Normalisable : bien que le jeu de caractĂšres ne soit pas prĂ©normalisĂ©, toute chaĂźne du
jeu peut ĂȘtre normalisĂ©e sous la forme X.

o

Exemple : l’ISO 2022 (avec une dose d’ISO 5426 et d’ISO 8859-1) est
normalisable.

‱

Non normalisable : Certaines chaĂźnes formĂ©es Ă  partir du jeu de caractĂšres ne peuvent
ĂȘtre normalisĂ©es sous la forme X.

o

Exemple : l’ISO 5426 n’est pas normalisable sous la forme C par les
transcodeurs ordinaires car elle contient des signes combinatoires sans en
contenir des formes prĂ©composĂ©es.

6.12 Identificateurs dans les langages informatiques

Cette section aborde les problĂšmes liĂ©s Ă  la normalisation des identificateurs dans les langages
de programmation ou de script informatiques. Le standard Unicode recommande une syntaxe
pour les identificateurs de langage informatique qui permet l’utilisation de caractĂšres non-ASCII
au sein de ces identificateurs. Il s’agit d’un prolongement naturel de la syntaxe des
identificateurs utilisĂ©e pour le C et plusieurs autres langages informatiques.

<identificateur> ::= <dĂ©but_identificateur> (<dĂ©but_identificateur> |

<suite_identificateur> )*

<dĂ©but_identificateur> ::= [{Lu}{Ll}{Lt}{Lm}{Lo}{Nl}]

<suite_identificateur> ::= [{Mn}{Mc}{Nd}{Pc}{Cf}]

En d’autres mots, le premier caractĂšre d’un identificateur peut ĂȘtre une lettre majuscule,
minuscule, en casse de titre, une lettre modificative, une autre lettre ou une lettre numĂ©rale. Les
caractĂšres

subséquents

d’un

identificateur

peuvent

appartenir

Ă 

une

des

catégories

susmentionnĂ©es ou encore aux signes combinatoires avec ou sans chasse, aux chiffres
décimaux
, Ă  la ponctuation connective et aux codes de formatage (par exemple les marques
gauche-Ă -droite
). En rĂšgle gĂ©nĂ©rale, on Ă©liminera les codes de formatage avant toute
comparaison ou stockage.

On peut utiliser les formes de normalisation dĂ©crites dans ce chapitre pour Ă©viter que des
identificateurs apparemment identiques ne soient pas traitĂ©s de maniĂšre Ă©quivalente. De tels
problĂšmes peuvent surgir lors de la compilation ou de l’édition des liens, plus particuliĂšrement
lorsqu’on utilise diffĂ©rents langages de programmation. Afin de prĂ©venir de tels dĂ©sagrĂ©ments,
les compilateurs devraient normaliser les identificateurs avant de les stocker ou de les
comparer. Le plus souvent, si un langage de programmation distingue la casse de ses
identificateurs, on utilisera alors la forme de normalisation C (FNC). Dans le cas contraire, on
adoptera la forme de normalisation KC (FNKC) gĂ©nĂ©ralement plus adaptĂ©e.

Si un langage de programmation utilise la FNKC pour uniformiser (« plier Â») les diffĂ©rences entre
caractĂšres, il faut alors modifier lĂ©gĂšrement la syntaxe des identificateurs fournie ci-dessus afin
de traiter correctement les particularismes d’un petit nombre de caractĂšres. Ces caractĂšres se
classent en trois catĂ©gories :

background image

6.12 I

DENTIFICATEURS DANS LES LANGAGES INFORMATIQUES

F

ORMES DE

N

ORMALISATION

176

U

NICODE

3.1

ANNOTÉ

1.

Point mĂ©dian. La plupart des textes catalans prĂ©existants sont codĂ©s en Latin-1, il faut
donc admettre U+00B7

POINT MÉDIAN

dans la <suite_identificateur>. (Si le langage de

programmation utilise un point comme opĂ©rateur, il faut alors distinguer son utilisation et
plutĂŽt utiliser U+2219

OPÉRATEUR PUCE

ou U+22C5

OPÉRATEUR POINT

. Il faut

toutefois traiter U+00B7

POINT MÉDIAN

avec beaucoup de prĂ©cautions puisque de

nombreux processus pourraient le considĂ©rer comme une marque de ponctuation plutĂŽt
qu’un modificateur de digramme

10

).

2.

CaractĂšres combinatoĂŻdes. Certains caractĂšres, bien qu’ils ne soient pas Ă  strictement
parler des caractĂšres combinatoires, se comportent comme s’ils en Ă©taient. En principe,
ces caractĂšres ne devraient pas faire partie de <dĂ©but_identificateur>, mais bien de la
<suite_identificateur> en compagnie des autres caractĂšres combinatoires. Dans la
plupart des cas, la mauvaise affectation de ces caractĂšres ne pose pas problĂšme.
Cependant, quand ces caractĂšres possĂšdent des dĂ©compositions de compatibilitĂ©, il se
peut alors que la normalisation KC de ne soit plus fermĂ©e dans l’ensemble des
identificateurs. Il faut plus particuliĂšrement s’assurer que les quatre caractĂšres suivants
fassent partie de <suite_identificateur> et non de <dĂ©but_identificateur> :

o

0E33

 

 

LETTRE THAÏE SARA AM

11

o

0EB3

 

 

VOYELLE DIACRITIQUE LAOTIENNE AM

o

FF9E

 

 

MARQUE KATAKANA DE SON VOISÉ DEMI-CHASSE

o

FF9F

 

 

MARQUE KATAKANA DE SON SEMI-VOISÉ DEMI-CHASSE

3.

CaractĂšres Ă  dĂ©composition irrĂ©guliĂšre. U+037A

CARACTÈRE GREC IOTA SOUSCRIT

et certaines formes de prĂ©sentation arabes ont des dĂ©compositions de compatibilitĂ©
irréguliÚre

12

.

Il

faut

exclure

ces

caractĂšres

de

<début_identificateur>

et

<suite_identificateur>. On prĂ©conise d’ailleurs d’exclure des identificateurs toutes les
formes de prĂ©sentation arabes mĂȘme s’il suffit d’en exclure quelques-unes pour
s’assurer que la normalisation des identificateurs sera fermĂ©e.

Avec ces amendements apportĂ©s Ă  la syntaxe des identificateurs, toutes les formes de
normalisation sont fermĂ©es pour tous les identificateurs.

Ceci signifie donc que, pour toute

chaĂźne C,

estIdentificateur(C) implique

estIdentificateur(FND(C))

estIdentificateur(FNC(C))

estIdentificateur(FNKD(C))

estIdentificateur(FNKC(C))

Les modifications de casse sont Ă©galement fermĂ©es pour tous (Ă  une exception prĂšs) les
identificateurs, de telle sorte que pour toute chaĂźne C,

estIdentificateur(C) implique

estIdentificateur(enMajuscules(C))

10

Le point mĂ©dian (« punt volat Â» en catalan) apparaĂźt dans le digramme du l gĂ©minĂ© (

l

·

l

) et le distingue du digramme

du l mouillĂ© (

ll

).

11

La classe de U+0E33 = {Lo}, classe valable pour un <dĂ©but_identificateur>, alors que le premier caractĂšre de sa

dĂ©composition de compatibilitĂ© (U+0E4D

LETTRE THAÏE NIKHAHIT) a pour classe {Mn} qui ne peut pas faire partie

de <dĂ©but identificateur>.

12

U+037A est une lettre modificative {Lm} dont la dĂ©composition de compatibilitĂ© est une espace {Zs} suivie d’un iota

souscrit sans chasse {Mn}. L’espace ne fait partie des caractĂšres admis dans les identificateurs.

background image

F

ORMES DE

N

ORMALISATION

6.13 D

ÉTECTION DES FORMES DE NORMALISATION

U

NICODE

3.1

ANNOTÉ

177

estIdentificateur(enMinuscules(C))

estIdentificateur(enCassePliée(C))

L’exception mentionnĂ©e est le caractĂšre U+0345

ƈ

DIACRITIQUE GREC IOTA SOUSCRIT.

Dans les

cas extrĂȘmement rares oĂč l’U+0345

ƈ

DIACRITIQUE GREC IOTA SOUSCRIT

est le premier caractĂšre

de C, U+0345 ne fait pas partie de <dĂ©but_identitificateur>, mais sa forme majuscule

13

et Ă 

casse Â« pliĂ©e Â» si. En pratique, cela ne pose cependant pas de problĂšme Ă©tant donnĂ© la
maniĂšre dont on utilise la normalisation avec les identificateurs.

Remarque : Les langages de programmation aux identificateurs insensibles Ă  la
casse doivent utiliser les transformations de casse dĂ©finies dans le rapport
technique Unicode n° 21, Case Mappings, afin de produire une forme normalisĂ©e
insensible Ă  la casse.

Il faut analyser le programme source Ă  la recherche d’identificateurs avant d’uniformiser (de
« plier Â») les diffĂ©rences par l’application des transformations de casse ou de la forme
normalisĂ©e KC. Bien sĂ»r, il ne faut effectuer ce pliage ni sur des chaĂźnes littĂ©rales ni sur des
commentaires prĂ©sents dans le texte du programme.

Remarque : Unicode 3.1 prĂ©voit des propriĂ©tĂ©s dĂ©rivĂ©es que les mises en Ć“uvre
peuvent utiliser pour analyser des identificateurs, normalisĂ©s ou non. Il s’agit des
propriétés

ID

_

Start

,

ID

_

Continue

,

XID

_

Start

,

XID

_

Continue

. Unicode 3.1

facilite Ă©galement la prise en charge du Â« pliage Â» de casse dans le cadre de la
normalisation : on peut utiliser la propriĂ©tĂ© FNC lors du pliage de casse de telle sorte
que le rĂ©sultat du pliage de casse d’une chaĂźne FNKC est Ă©galement une chaĂźne
normalisĂ©e. DerivedProperties.html

14

prĂ©cise l’emplacement de ces propriĂ©tĂ©s et les

fichiers qui les contiennent.

6.13 DĂ©tection des formes de normalisation

Le tableau de donnĂ©es du fichier NormalizationQuickCheck

15

peut servir Ă  dĂ©terminer

rapidement si une chaĂźne se trouve sous une forme normalisĂ©e particuliĂšre. Ces donnĂ©es ne
sont qu’informatives car on peut les reproduire Ă  partir de la Base de donnĂ©es de caractĂšres
Unicode
. Pour chaque forme de normalisation, le tableau attribue Ă  chaque numĂ©ro de
caractĂšre une variable ternaire. Cette variable peut avoir les valeurs suivantes :

‱

NON indique que ce point de code ne peut se prĂ©senter pour cette forme de
normalisation.

‱

OUI indique que ce point de code peut se prĂ©senter, pour peu qu’il soit en ordre
canonique, mais sans aucune autre contrainte.

‱

PEUTÊTRE indique que ce point de code peut se prĂ©senter, pour peu qu’il soit en ordre
canonique et que quelques contraintes supplĂ©mentaires soient respectĂ©es. En d’autres
mots, le texte n’est peut-ĂȘtre pas sous cette forme normalisĂ©e, si le point de code en
question est prĂ©cĂ©dĂ© par certains autres caractĂšres.

13

La lettre iota majuscule.

14

<

http://www.unicode.org/Public/UNIDATA/DerivedProperties.html >, les fichiers les plus importants sont :

<http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProperties.txt> et

<http://www.unicode.org/Public/UNIDATA/DerivedCoreProperties.txt>.

15

<http://www.unicode.org/unicode/reports/tr15/NormalizationQuickCheck.html>

background image

6.13 D

ÉTECTION DES FORMES DE NORMALISATION

F

ORMES DE

N

ORMALISATION

178

U

NICODE

3.1

ANNOTÉ

Les programmes qui utilisent ces propriĂ©tĂ©s peuvent rapidement inspecter la chaĂźne en question
lors d’une premiĂšre passe pour vĂ©rifier la forme de normalisation. Le rĂ©sultat de cette inspection
peut ĂȘtre NON, OUI ou PEUTÊTRE. Pour OUI et NON, la question est tranchĂ©e. Dans le cas de
PEUTÊTRE, il faut effectuer un examen plus approfondi. En rĂšgle gĂ©nĂ©rale, on normalise alors
toute la chaĂźne sous la forme considĂ©rĂ©e et on la compare ensuite Ă  l’original.

Cette vĂ©rification est nettement plus rapide que l’application directe de l’algorithme de
normalisation, puisqu’elle n’alloue aucune mĂ©moire et n’effectue aucune copie. Pour la grande
majoritĂ© des chaĂźnes, la rĂ©ponse sera OUI ou NON. Un faible pourcentage nĂ©cessite donc un
supplĂ©ment de travail. Le code ci-dessous est en Java, bien que â€“ pour des raisons de lisibilitĂ© â€“
il n’emploie pas de techniques orientĂ©es objet.

public int vĂ©rifRapide (String source) {

short derniĂšreClasseCanonique = 0;
int rĂ©sultat = OUI;
for (int i = 0; i < source.length(); ++i) {

char car = source.charAt(i);
short classeCanonique = obtenirClasseCanonique (car);
if (derniĂšreClasseCanonique > classeCanonique && classeCanonique != 0){

return NON;

}
int vĂ©rif = estPermis(car);
if (vĂ©rif == NON) return NON;
if (vĂ©rif == PEUTÊTRE) rĂ©sultat = PEUTÊTRE;

}
return rĂ©sultat;

}

public static final int NON = 0, OUI = 1, PEUTÊTRE = -1;

L’appel

estPermis()

devrait accĂ©der aux donnĂ©es

16

qui correspondent Ă  la forme de

normalisation en question. Pour plus d’informations, veuillez vous rĂ©fĂ©rer au fichier
DerivedProperties.html faisant partie de la Base de donnĂ©es de caractĂšres Unicode pour
Unicode 3.1. En guise d’exemple, voici un extrait de ces donnĂ©es pour FNC :

...
0338

; NFC_MAYBE # Mn DIACRITIQUE BARRE OBLIQUE LONGUE COUVRANTE

...
F900..FA0D ; NFC_NO

# Lo [270]
# IDÉOGRAMME DE COMPATIBILITÉ CJC-F900
# IDÉOGRAMME DE COMPATIBILITÉ CJC -FA0D

...

Ces lignes affectent la valeur NFC_MAYBE (PEUTÊTRE) au numĂ©ro de caractĂšre U+0338 et la
valeur NFC_NO (NON) aux numĂ©ros de caractĂšre appartenant Ă  l’intervalle U+F900 .. U+FA0D.
Remarquon qu’on ne trouve aucune valeur PEUTÊTRE pour les FND et FNKD : la fonction

vérifRapide

doit donc toujours produire un rĂ©sultat dĂ©cisif pour ces formes de normalisation.

La valeur implicite pour tous les caractĂšres absents des fichiers est OUI.

Les donnĂ©es nĂ©cessaires Ă  la mise en Ć“uvre de

estPermis()

peuvent ĂȘtre accĂ©dĂ©es Ă  l’aide

d’une table de hachage ou d’un Â« trie Â» (un tableau multiĂ©tape, voir la Section 6.9Notes de
mise en Ć“uvre
). Cette derniĂšre mĂ©thode est la plus rapide.

16

<http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProperties.txt>

background image

F

ORMES DE

N

ORMALISATION

6.14 H

ANGÛL

U

NICODE

3.1

ANNOTÉ

179

6.14 HangĂ»l

Les

compositions

et

décompositions

hangûl

Ă©tant

algorithmiques,

on

peut

réduire

substantiellement les besoins de mĂ©moire en effectuant les opĂ©rations correspondantes grĂące Ă 
du code supplĂ©mentaire plutĂŽt qu’en stockant les donnĂ©es dans des tableaux On trouvera ci-
dessous un programme qui illustre la composition et la dĂ©composition canoniques hangĂ»l
conformĂ©ment Ă  la section 3.11, Comportement des jamos jointifs. Bien que cet exemple soit
codĂ© en Java, on peut utiliser la mĂȘme structure dans d’autres langages de programmation.

Constantes communes

static final int

BaseS = 0xAC00, BaseI = 0x1100, BaseV = 0x1161, BaseF = 0x11A7,
CompteI = 19, CompteV = 21, CompteF = 28,
CompteN = CompteV * CompteF,

// 588

CompteS = CompteI * CompteN;

// 11172

Décomposition hangûl

public static String dĂ©composerHangĂ»l(char s) {

int IndexS = s - BaseS;
if (IndexS < 0 || IndexS >= CompteS) {

return String.valueOf(s);

}
StringBuffer rĂ©sultat = new StringBuffer();
int I = BaseI + IndexS / CompteN;
int V = BaseV + (IndexS % CompteN) / CompteF;
int F = BaseF + IndexS % CompteF;
résultat.append((char)I);
résultat.append((char)V);
if (F != BaseF) rĂ©sultat.append((char)F);
return rĂ©sultat.toString();

}

Composition hangûl

Remarquez une caractĂ©ristique importante de la composition hangĂ»l : lorsque la chaĂźne
d’origine n’est pas sous la forme normalisĂ©e D, il est insuffisant de dĂ©tecter uniquement les
suites de caractĂšres de type <I, V> ou <I, V, F>. Il faut Ă©galement dĂ©celer les suites de type <IV,
F>. Afin de garantir l’unicitĂ©, il faut Ă©galement composer ces suites. L’étape 2 ci-dessous illustre
cet aspect de la composition.

public static String composerHangĂ»l(String source) {

int lon = source.length();
if (lon == 0) return "";
StringBuffer rĂ©sultat = new StringBuffer();
char dernier = source.charAt(0);

// copier premier car

résultat.append(dernier);

for (int i = 1; i < lon; ++i) {

char car = source.charAt(i);

// 1. VĂ©rifier si les deux caractĂšres courants sont I et V

int IndexI = dernier - BaseI;
if (0 <= IndexI && IndexI < CompteI) {

int IndexV = car - BaseV;
if (0 <= IndexV && IndexV < CompteV) {

// former une syllabe de type IV
dernier = (char)(BaseS + (IndexI * CompteV + IndexV) *

CompteF);

background image

6.14 H

ANGÛL

F

ORMES DE

N

ORMALISATION

180

U

NICODE

3.1

ANNOTÉ

rĂ©sultat.setCharAt(rĂ©sultat.length()-1, dernier);

// rĂ©initialiser dernier

continue; // ignorer car

}

}

// 2. VĂ©rifier si les deux caractĂšres courants sont IV et F

int IndexS = dernier - BaseS;

if (0 <= IndexS && IndexS < CompteS && (IndexS % CompteF) == 0) {

int IndexF = car - BaseF;
if (0 <= IndexF && IndexF <= CompteF) {

// former une syllabe de type IVF

dernier += IndexF;
rĂ©sultat.setCharAt(rĂ©sultat.length()-1, dernier);

// rĂ©initialiser dernier

continue; // ignorer car

}

}

// Si aucun des deux cas, simplement ajouter le caractĂšre
dernier = car;
résultat.append(car);

}
return rĂ©sultat.toString();

}

On peut, pour diffĂ©rentes raisons, effectuer des transformations supplĂ©mentaires sur les suites
de jamos. Ainsi, on peut insĂ©rer des bourres tch’îsong et djoungsong pour rendre ces suites de
jamos hangĂ»l rĂ©guliĂšres selon la dĂ©finition

17

du chapitre 3. Pour les suites saisies au clavier, il

se peut qu’il faille effectuer d’autres compositions. On peut par exemple combiner la suite de
consonnes finales k

f

+ s

f

en ks

f

. De surcroĂźt, certaines mĂ©thodes d’entrĂ©e hangĂ»l ne forcent pas

l’utilisateur Ă  distinguer les formes initiales et finales des consonnes et les modifient selon le
contexte. Ainsi, dans la suite saisie au clavier m

i

+ Ă©

m

+ n

i

+ s

i

+ a

m

, la mĂ©thode d’entrĂ©e

interprĂšte la consonne n

i

comme n

f

, car il n’existe pas de syllabe nsa. On aura donc comme

rĂ©sultat deux syllabes : mĂ©n et sa. Il faut cependant souligner qu’aucune de ces transformations
supplĂ©mentaires ne fait partie des formes de normalisation Unicode.

Noms des caractÚres hangûl

On utilise Ă©galement la dĂ©composition hangĂ»l pour dĂ©terminer le nom des caractĂšres qui
reprĂ©sentent les syllabes hangĂ»l. Bien que le code ci-dessus ne fasse pas Ă  proprement parler
partie de la normalisation, il vaut la peine de l’inclure car il s’apparente Ă©normĂ©ment au code de
la dĂ©composition.

public static String obtenirNomHangĂ»l (char s) {

int IndexS = s - BaseS;
if (0 > IndexS || IndexS >= CompteS) {

throw new IllegalArgumentException("Pas une syllabe hangĂ»l :" + s);

}
StringBuffer rĂ©sultat = new StringBuffer();
int IndexI = IndexS / CompteN;
int IndexV = (IndexS % CompteN) / CompteF;

17

Le texte anglais de la norme Unicode 2.0 nomme ces suites rĂ©guliĂšres de jamos des Â« suites normalisĂ©es Â».

Toutefois celles-ci n’ont rien Ă  voir avec la composition ou la dĂ©composition canonique.

background image

F

ORMES DE

N

ORMALISATION

6.15 C

ORRIGENDUM RELATIF Ă€ LA NORMALISATION

3.1

U

NICODE

3.1

ANNOTÉ

181

int IndexF = IndexS % CompteF;
return "SYLLABE HANGÛL "

+ TABLEAU_JAMOS_I[IndexI]

+ TABLEAU_JAMOS_V[IndexV] + TABLEAU_JAMOS_F[IndexF];

}

static private String[] TABLEAU_JAMOS_I = {

"K", "KK", "N", "T", "TT", "L", "M", "P", "PP",

"S", "SS", "", "TCH", "TCHTCH", "TCH'", "K'", "T'", "P'", "H"

};

static private String[] TABLEAU_JAMOS_V = {

"A", "È", "YA", "YÈ", "O", "É", "YO", "YÉ", "Ô",

"WA", "WÈ", "EU", "YÔ", "OU", "WO", "WÉ", "WI",

"YOU", "Û", "ÛI", "I"

};

static private String[] TABLEAU_JAMOS_F = {

"", "K", "KK", "KS", "N", "NTCH", "NH", "T", "L", "LK", "LM",

"LP", "LS", "LT'", "LP'", "LH", "M", "P", "PS",

"S", "SS", "NG", "TCH", "TCH'", "K'", "T'", "P'", "H"

};

6.15 Corrigendum relatif Ă  la normalisation 3.1

Lors de la production des tableaux de normalisation pour Unicode 3.0, U+FB1D

LETTRE

HÉBRAÏQUE YOD HIRIK

a par erreur Ă©tĂ© omis du fichier des compositions exclues. Pendant la

pĂ©riode de rĂ©vision publique, cette erreur fut signalĂ©e sans ĂȘtre prise en considĂ©ration. Unicode
3.1 inclut dĂ©sormais ce caractĂšre parmi les compositions exclues.

Cette modification n’affecte pas la rĂ©trocompatibilitĂ© des formes de normalisation KC
et C des chaĂźnes qui comprennent ce caractĂšre. Il est conseillĂ© Ă  toutes les mises en
Ɠuvre de passer Ă  la version 3.1 des tableaux de donnĂ©es Unicode.

Lignes de conduites. Le comitĂ© technique Unicode a autorisĂ© qu’on apporte une modification
modifie aux Compositions exclues afin de remĂ©dier Ă  cette omission. Le comitĂ© directeur du
consortium Unicode a Ă©galement approuvĂ© ce changement. Les raisons de cette dĂ©cision
exceptionnelle sont les suivantes :

‱

Cette omission avait Ă©tĂ© signalĂ©e pendant la pĂ©riode de rĂ©vision publique pour
Unicode 3.0.

‱

Selon nos organes de liaison (particuliĂšrement l’IETF et le W3C), aucun texte normatif
ne se rĂ©fĂ©rait Ă  la Normalisation Unicode 3.0 ; bien que de prochaines normes devraient
sous peu faire rĂ©fĂ©rence Ă  Unicode 3.1.

‱

YOD HIRIK appartient Ă  une classe de caractĂšres (les formes de prĂ©sentation
hĂ©braĂŻques situĂ©es dans l’intervalle U+FB1D .. U+FB4E) qui ont fait l’objet d’un
traitement identique par le comitĂ© technique d’Unicode pendant toutes les discussions et
examens relatifs Ă  la Normalisation. Tous les autres caractĂšres de cette classe se sont
vus inclus sans exception parmi les Compositions exclues.

‱

YOD HIRIK est un caractĂšre extrĂȘmement rare. La proportion de donnĂ©es qui incluent
actuellement ce caractĂšre est infime par rapport Ă  tous les textes informatisĂ©s. MĂȘme si
la mise Ă  niveau des mises en Ć“uvre pouvait prendre quelque temps, ce changement
n’entraĂźne dans la pratique aucun problĂšme significatif de rĂ©trocompatibilitĂ©.

À l’avenir, il ne sera plus admis aucun autre changement aux normalisations qui pourrait affecter
la rĂ©trocompatibilitĂ©, car aucun autre caractĂšre ne remplira ces conditions.