HTML Tokenizer
HTML Tokenizer
De tokenizer is de eerste fase van HTML parsing: hij zet markup-tekst om in een stroom van door standaarden gedefinieerde tokens. Het is een openbare API, zodat tools die zich richten op tokens in plaats van bomen — linters, sanitizer pre-passes, syntax highlighters — de stroom rechtstreeks kunnen verwerken.
Markup tokeniseren
Tokenizer.tokenize() verwerkt volledige invoer; Tokenizer.tokenize_fragment() past fragment-tokenisatie-regels toe. Beide geven de standaard token-woordenschat uit.
Tokenklassen
Elke token is een getypeerd object: StartTagToken en EndTagToken voor tags (met attributen), CharacterToken voor tekst, CommentToken, DoctypeToken en EofToken die het einde van de invoer aanduiden.
Tokenizer-staten
TokenizerState modelleert de standaard statusmachine — dezelfde toestanden die de specificatie benoemt — en Tokenizer.set_state() laat fragment- en contextgevoelige aanroepers in de juiste toestand starten.
Karakterreferenties
Naam- en numerieke karakterreferenties worden opgelost via resolve_named_char_ref(), resolve_numeric_char_ref() en find_named_char_ref_match() — de volledige tabel met benoemde referenties, niet een verkorte subset.
Tips en best practices
- Gebruik
tokenize_fragment()met de juiste begintoestand bij het tokeniseren van inhoud die binnen een specifiek element zou verschijnen. - Behandel
EofTokenals het definitieve eindsignaal in plaats van de iterator uit te putten via een uitzondering. - Voor sanitizers, inspecteer
StartTagToken-attributen op tokenniveau voordat er een boom wordt opgebouwd.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| Script/style-inhoud tokeniseert als opmaak | Verkeerde initiële staat voor context | Stel de juiste TokenizerState in via set_state() |
| Entiteiten blijven onopgelost | Ruwe tekst consumeren zonder referentie-oplossing | Gebruik de char-ref resolverfuncties |
| Fragmentoutput verschilt van volledige parsing | Fragmentregels verschillen opzettelijk | Gebruik tokenize() voor volledige documenten |
FAQ
Kan ik de tokenizer gebruiken zonder een boom te bouwen?
Ja — de token stream is een publieke, zelfstandige output.
Zijn de tokenizer-statussen de standaard?
TokenizerState weerspiegelt de statusmachine van de specificatie en kan worden ingesteld via set_state().
Hoe worden benoemde tekenreferenties afgehandeld?
Via resolve_named_char_ref() en find_named_char_ref_match() tegen de volledige tabel met benoemde referenties.
API Reference Samenvatting
| Klasse/Methode | Beschrijving |
|---|---|
Tokenizer.tokenize | Tokeniseer volledige invoer |
Tokenizer.tokenize_fragment | Tokeniseren met fragmentregels |
Tokenizer.set_state | Stel de initiële tokenizertoestand in |
StartTagToken | Start-tag token met attributen |
TokenizerState | Standaarden statusmachine-toestanden |
resolve_named_char_ref | Los een benoemde karakterreferentie op |