6.6. "stringprep" — Préparation des chaines de caractères internet
******************************************************************

**Code source :** Lib/stringprep.py

======================================================================

Nommer les différentes choses d'internet (comme les hôtes) amène
souvent au besoin de comparer ces identifiants, ce qui nécessite un
critère d'« égalité ». La manière dont cette comparaison est effectuée
dépend du domaine d'application, c'est-à-dire si elle doit être
sensible à la casse ou non. Il peut être aussi nécessaire de
restreindre les identifiants possibles, pour permettre uniquement les
identifiants composés de caractères « imprimables ».

La **RFC 3454** définit une procédure pour "préparer" des chaines de
caractères Unicode dans les protocoles internet. Avant de passer des
chaines de caractères sur le câble, elles sont traitées avec la
procédure de préparation, après laquelle ils obtiennent une certaines
forme normalisée. Les RFC définissent un lot de tables, qui peuvent
être combinées en profils. Chaque profil doit définir quelles tables
il utilise et quelles autres parties optionnelles de la procédure
*stringprep* font partie du profil. Un exemple de profil *stringprep*
est *nameprep*, qui est utilisé pour les noms de domaine
internationalisés.

Le module "stringprep" expose uniquement les tables de la **RFC
3454**. Comme ces tables seraient très grandes à représenter en tant
que dictionnaires ou listes, le module utilise, en interne, la base de
données des caractères Unicode. Le code source du module, lui-même, a
été généré en utilisant l'utilitaire "mkstringprep.py".

En conséquence, ces tables sont exposées en tant que fonctions et non
en structures de données. Il y a deux types de tables dans la RFC :
les ensemble et les mises en correspondance. Pour un ensemble,
"stringprep" fournit la "fonction caractéristique", c'est-à-dire une
fonction qui renvoie vrai si le paramètre fait partie de l'ensemble.
Pour les mises en correspondance, il fournit la fonction de mise en
correspondance : ayant obtenu la clé, il renvoie la valeur associée.
Ci-dessous se trouve une liste de toutes les fonctions disponibles
dans le module.

stringprep.in_table_a1(code)

   Détermine si le code est en table A.1 (points de code non-assigné
   dans Unicode 3.2).

stringprep.in_table_b1(code)

   Détermine si le code est en table B.1 (habituellement mis en
   correspondance avec rien).

stringprep.map_table_b2(code)

   Renvoie la valeur correspondante à *code* selon la table B.2 (mise
   en correspondance pour la gestion de la casse utilisée avec
   *NFKC*).

stringprep.map_table_b3(code)

   Renvoie la valeur correspondante à *code* dans la table B.3 (mise
   en correspondance pour la gestion de la casse utilisée sans
   normalisation).

stringprep.in_table_c11(code)

   Détermine si le code est dans la table C.1.1 (caractères
   d'espacement ASCII).

stringprep.in_table_c12(code)

   Détermine si le code est dans la table C.1.2 (caractères
   d'espacement non ASCII).

stringprep.in_table_c11_c12(code)

   Détermine si le code est dans la table C.1 (caractères
   d'espacement, union de C.1.1 et C.1.2).

stringprep.in_table_c21(code)

   Détermine si le code est dans la table C.2.1 (caractères de
   contrôle ASCII).

stringprep.in_table_c22(code)

   Détermine si le code est en table C.2.2 (caractères de contrôle non
   ASCII).

stringprep.in_table_c21_c22(code)

   Détermine si le code est dans la table C.2 (caractères de contrôle,
   union de C.2.1 et C.2.2).

stringprep.in_table_c3(code)

   Détermine si le code est en table C.3 (usage privé).

stringprep.in_table_c4(code)

   Détermine si le code est dans la table C.4 (points de code non-
   caractère).

stringprep.in_table_c5(code)

   Détermine si le code est en table C.5 (codes substituts).

stringprep.in_table_c6(code)

   Détermine si le code est dans la table C.6 (Inapproprié pour texte
   brut).

stringprep.in_table_c7(code)

   Détermine si le code est dans la table C.7 (inapproprié pour les
   représentations *canonics1*).

stringprep.in_table_c8(code)

   Détermine si le code est dans la table C.8 (change de propriétés
   d'affichage ou sont obsolètes).

stringprep.in_table_c9(code)

   Détermine si le code est dans la table C.9 (caractères de
   marquage).

stringprep.in_table_d1(code)

   Détermine si le code est en table D.1 (caractères avec propriété
   bidirectionnelle "R" ou "AL").

stringprep.in_table_d2(code)

   Détermine si le code est dans la table D.2 (caractères avec
   propriété bidirectionnelle "L").
