HTML Токенізатор

HTML Токенізатор

Токенізатор є першим етапом парсингу HTML: він перетворює розмітковий текст у потік токенів, визначених стандартом. Він є публічним API, тому інструменти, які працюють з токенами, а не з деревами — лінтери, попередні проходи санітайзера, підсвічувачі синтаксису — можуть споживати потік безпосередньо.


Токенізація розмітки

Tokenizer.tokenize() обробляє повний вхід; Tokenizer.tokenize_fragment() застосовує правила токенізації фрагментів. Обидва генерують стандартний словник токенів.

Класи токенів

Кожен токен — це типізований об’єкт: StartTagToken і EndTagToken для тегів (з атрибутами), CharacterToken для тексту, CommentToken, DoctypeToken і EofToken позначають кінець вводу.

Стани токенізатора

TokenizerState моделює станову машину стандартів — ті самі стани, які названі в специфікації — і Tokenizer.set_state() дозволяє фрагментним та контекстно-чутливим викликачам почати у правильному стані.

Символьні посилання

Іменовані та числові символьні посилання розв’язуються через resolve_named_char_ref(), resolve_numeric_char_ref() та find_named_char_ref_match() — повну таблицю іменованих посилань, а не скорочений піднабір.


Поради та найкращі практики

  • Використовуйте tokenize_fragment() з правильним початковим станом під час токенізації вмісту, який може з’явитися всередині конкретного елемента
  • Ставте EofToken як остаточний сигнал завершення, а не вичерпуйте ітератор за допомогою виключення
  • Для санітайзерів перевіряйте атрибути StartTagToken на рівні токену перед побудовою будь-якого дерева

Типові проблеми

ПроблемаПричинаВиправлення
Вміст скрипту/стилю токенізується як розміткаНеправильний початковий стан для контекстуВстановіть відповідний TokenizerState за допомогою set_state()
Сутності залишаються нерозв’язанимиСпоживання необробленого тексту без розв’язання посиланьВикористовуйте функції розв’язання char-ref
Вивід фрагмента відрізняється від повного розборуПравила фрагмента навмисно відрізняютьсяВикористовуйте tokenize() для повних документів

FAQ

Чи можу я використовувати токенізатор без побудови дерева?

Так — потік токенів є публічним, автономним виводом.

Чи є стани токенізатора стандартними?

TokenizerState відображає машину станів специфікації і може бути встановлений через set_state().

Як обробляються іменовані посилання на символи?

Через resolve_named_char_ref() і find_named_char_ref_match() з використанням повної таблиці іменованих посилань.


API Reference Підсумок

Клас/МетодОпис
Tokenizer.tokenizeТокенізуйте повний ввід
Tokenizer.tokenize_fragmentТокенізуйте за правилами фрагмента
Tokenizer.set_stateВстановити початковий стан токенізатора
StartTagTokenТокен початкового тегу з атрибутами
TokenizerStateСтани машини станів стандартів
resolve_named_char_refРозв’язати іменоване посилання на символ

Дивіться також

 Українська