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 EofToken za definitivní signál konce místo vyčerpání iterátoru výjimkou
  • Pro sanitizéry zkontrolujte atributy StartTagToken na úrovni tokenu před vytvořením jakéhokoli stromu

Běžné problémy

ProblémPříčinaOprava
Obsah skriptu/stylu se tokenizuje jako markupŠpatný počáteční stav pro kontextNastavte 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/MetodaPopis:
Tokenizer.tokenizeTokenizovat kompletní vstup
Tokenizer.tokenize_fragmentTokenizovat s pravidly fragmentu
Tokenizer.set_stateNastavte počáteční stav tokenizéru
StartTagTokenToken počáteční značky s atributy
TokenizerStateStavy stavového automatu standardů
resolve_named_char_refVyřešit pojmenovaný znakový odkaz

Viz také:

 Čeština