HTML Tokenizér
HTML Tokenizér
Tokenizér je první fází parsování HTML: převádí značkovací text na proud tokenů definovaných standardy. Je veřejný API, takže nástroje, které se zajímají o tokeny spíše než o stromy — lintery, předběžné průchody sanitizérem, zvýrazňovače syntaxe — mohou konzumovat proud přímo.
Tokenizace značkování
Tokenizer.tokenize() zpracovává celý vstup; Tokenizer.tokenize_fragment() uplatňuje pravidla tokenizace fragmentů. Oba vydávají standardní slovník tokenů.
Třídy tokenů
Každý token je typovaný objekt: StartTagToken a EndTagToken pro značky (s atributy), CharacterToken pro text, CommentToken, DoctypeToken a EofToken označují konec vstupu.
Stavy tokenizéru
TokenizerState modeluje stavový automat standardů — stejné stavy, které specifikace pojmenovává — a Tokenizer.set_state() umožňuje fragmentům a kontextově citlivým volajícím začít ve správném stavu.
Znakové reference
Pojmenované a číselné znakové reference se vyhodnocují pomocí resolve_named_char_ref(), resolve_numeric_char_ref() a find_named_char_ref_match() — kompletní tabulky pojmenovaných referencí, nikoli zkrácené podmnožiny.
Tipy a osvědčené postupy
- Použijte
tokenize_fragment()se správným počátečním stavem při tokenizaci obsahu, který by se objevil uvnitř konkrétního elementu - Považujte
EofTokenza definitivní signál konce místo vyčerpání iterátoru výjimkou - Pro sanitizéry zkontrolujte atributy
StartTagTokenna úrovni tokenu před vytvořením jakéhokoli stromu
Běžné problémy
| Problém | Příčina | Oprava |
|---|---|---|
| Obsah skriptu/stylu se tokenizuje jako markup | Špatný počáteční stav pro kontext | Nastavte vhodný TokenizerState pomocí set_state() |
| Entity zůstávají nevyřešené | Spotřebování surového textu bez rozlišení odkazů | Použijte funkce char-ref resolver |
| Fragmentový výstup se liší od kompletního parsování | Pravidla fragmentu jsou úmyslně odlišná | Použijte tokenize() pro celé dokumenty |
FAQ
Mohu použít tokenizér bez budování stromu?
Ano — tok tokenů je veřejný, samostatný výstup.
Jsou stavy tokenizéru standardní?
TokenizerState odráží stavový automat specifikace a lze nastavit přes set_state().
Jak jsou pojmenované znakové reference zpracovány?
Pomocí resolve_named_char_ref() a find_named_char_ref_match() proti úplné tabulce pojmenovaných referencí.
API Reference Shrnutí
| Třída/Metoda | Popis: |
|---|---|
Tokenizer.tokenize | Tokenizovat kompletní vstup |
Tokenizer.tokenize_fragment | Tokenizovat s pravidly fragmentu |
Tokenizer.set_state | Nastavte počáteční stav tokenizéru |
StartTagToken | Token počáteční značky s atributy |
TokenizerState | Stavy stavového automatu standardů |
resolve_named_char_ref | Vyřešit pojmenovaný znakový odkaz |