HTML Tokenizator

HTML Tokenizator

Tokenizator jest pierwszym etapem parsowania HTML: konwertuje tekst znaczników na strumień tokenów zdefiniowanych w standardach. Jest publicznie API, więc narzędzia, które interesują się tokenami zamiast drzew — lintery, wstępne fazy sanitizera, podświetlacze składni — mogą bezpośrednio konsumować ten strumień.


Tokenizacja znaczników

Tokenizer.tokenize() przetwarza pełne wejście; Tokenizer.tokenize_fragment() stosuje reguły tokenizacji fragmentów. Oba emitują standardowy słownik tokenów.

Klasy tokenów

Każdy token jest obiektem typowanym: StartTagToken i EndTagToken dla znaczników (z atrybutami), CharacterToken dla tekstu, CommentToken, DoctypeToken oraz EofToken oznaczające koniec wejścia.

Stany tokenizatora

TokenizerState modeluje maszynę stanów standardów — te same stany, które wymienia specyfikacja — a Tokenizer.set_state() pozwala fragmentom i wywołującym wrażliwym na kontekst rozpocząć w odpowiednim stanie.

Odwołania znakowe

Nazwane i numeryczne odwołania znakowe są rozwiązywane przez resolve_named_char_ref(), resolve_numeric_char_ref() i find_named_char_ref_match() — pełną tabelę nazwanych odwołań, a nie podzbiór skrócony.


Wskazówki i najlepsze praktyki

  • Użyj tokenize_fragment() z poprawnym stanem początkowym podczas tokenizacji treści, która pojawiłaby się wewnątrz konkretnego elementu
  • Traktuj EofToken jako ostateczny sygnał zakończenia, zamiast wyczerpywać iterator przez wyjątek
  • Dla sanitizatorów, sprawdź atrybuty StartTagToken na poziomie tokenu przed zbudowaniem jakiegokolwiek drzewa

Typowe problemy

ProblemPrzyczynaNaprawa
Zawartość skryptu/stylu jest tokenizowana jako znacznikNieprawidłowy początkowy stan kontekstuUstaw odpowiedni TokenizerState za pomocą set_state()
Encje wydają się nierozwiązaneKonsumowanie surowego tekstu bez rozwiązywania referencjiUżyj funkcji rozwiązywania referencji znakowych
Wynik fragmentu różni się od pełnego parsowaniaReguły fragmentu celowo się różniąUżyj tokenize() dla pełnych dokumentów

FAQ

Czy mogę używać tokenizera bez budowania drzewa?

Tak — strumień tokenów jest publicznym, samodzielnym wyjściem.

Czy stany tokenizera są standardowe?

TokenizerState odzwierciedla maszynę stanów specyfikacji i jest ustawialny za pomocą set_state().

Jak obsługiwane są nazwane odniesienia znakowe?

Poprzez resolve_named_char_ref() i find_named_char_ref_match() względem pełnej tabeli nazwanych odniesień.


API Reference Podsumowanie

Klasa/MetodaOpis
Tokenizer.tokenizeTokenizuj pełne wejście
Tokenizer.tokenize_fragmentTokenizuj z regułami fragmentu
Tokenizer.set_stateUstaw początkowy stan tokenizera
StartTagTokenToken znacznika początkowego z atrybutami
TokenizerStateStany maszyny stanowej standardów
resolve_named_char_refRozwiąż nazwane odwołanie znakowe

Zobacz także

 Polski