HTML Tokenizer
HTML Analyseur
Le tokenizer est la première étape de l’analyse HTML: il convertit le texte balisé en un flux de jetons définis par les normes. Il est public API, de sorte que les outils qui s’intéressent aux jetons plutôt qu’aux arbres — les linters, les pré-passes de désinfection, les surligneurs de syntaxe — peuvent consommer le flux directement.
Tokenisation du balisage
Tokenizer.tokenize() traite l’entrée complète; Tokenizer.tokenize_fragment() applique les règles de tokenisation de fragments. Les deux émettent le vocabulaire standard des jetons.
Classes de jetons
Chaque jeton est un objet typé: StartTagToken et EndTagToken pour les balises (avec attributs), CharacterToken pour le texte, CommentToken, DoctypeToken et EofToken marquant la fin de l’entrée.
États du tokenizer
TokenizerState modélise la machine d’états des normes — les mêmes états que ceux nommés par la spécification — et Tokenizer.set_state() permet aux appelants fragmentés et sensibles au contexte de démarrer dans le bon état.
Références de caractères
Les références de caractères nommées et numériques sont résolues via resolve_named_char_ref(), resolve_numeric_char_ref() et find_named_char_ref_match() — la table complète des références nommées, pas un sous-ensemble raccourci.
Conseils et bonnes pratiques
- Utilisez
tokenize_fragment()avec l’état initial correct lors de la tokenisation de contenu qui apparaîtrait à l’intérieur d’un élément spécifique. - Considérez
EofTokencomme le signal de fin définitif plutôt que d’épuiser l’itérateur par exception. - Pour les désinfectants, inspectez les attributs
StartTagTokenau niveau du token avant que tout arbre ne soit construit.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
| Le contenu script/style est tokenisé comme balisage | État initial incorrect pour le contexte | Définissez le TokenizerState approprié via set_state() |
| Les entités apparaissent non résolues | Consommation de texte brut sans résolution de référence | Utilisez les fonctions de résolution char-ref |
| La sortie du fragment diffère de l’analyse complète | Les règles du fragment diffèrent intentionnellement | Utilisez tokenize() pour les documents complets |
FAQ
Puis-je utiliser le tokenizer sans construire d’arbre?
Oui — le flux de jetons est une sortie publique et autonome.
Les états du tokenizer sont-ils les standards?
TokenizerState reflète la machine d’états de la spécification et est réglable via set_state().
Comment les références de caractères nommées sont-elles gérées?
Via resolve_named_char_ref() et find_named_char_ref_match() contre la table complète des références nommées.
API Reference Résumé
| Classe/Méthode | Description |
|---|---|
Tokenizer.tokenize | Tokenisez l’entrée complète |
Tokenizer.tokenize_fragment | Tokeniser avec les règles de fragments |
Tokenizer.set_state | Définir l’état initial du tokenizer |
StartTagToken | Jeton de balise d’ouverture avec attributs |
TokenizerState | États de la machine à états des normes |
resolve_named_char_ref | Résoudre une référence de caractère nommée |