HTML トークナイザー
HTML トークナイザ
トークナイザは HTML パースの最初の段階です: markup テキストを standards-defined token のストリームに変換します。これは public API であり、ツリーよりも token を重視するツール—リンター、サニタイザの事前パス、シンタックスハイライト—はストリームを直接消費できます。
Markup のトークナイズ
Tokenizer.tokenize() は完全な入力を処理し、Tokenizer.tokenize_fragment() はフラグメント token 化ルールを適用します。両方とも標準 token 語彙を出力します。
Token クラス
各 token は型付けされたオブジェクトです: タグ(属性付き)の場合は 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
ツリーを構築せずに tokenizer を使用できますか?
はい — token stream は公開されたスタンドアロン出力です。
tokenizer の状態は標準のものですか?
TokenizerState は仕様の状態機械を鏡像し、set_state() を介して設定可能です。
named character references はどのように処理されますか?
完全な named-reference テーブルに対して、resolve_named_char_ref() と find_named_char_ref_match() を通じて処理します。
API Reference 概要
| クラス/メソッド | 説明 |
|---|---|
Tokenizer.tokenize | 完全な入力をトークナイズする |
Tokenizer.tokenize_fragment | フラグメントルールでトークナイズする |
Tokenizer.set_state | 初期 tokenizer 状態を設定する |
StartTagToken | 属性付きの開始タグ token |
TokenizerState | 標準ステートマシン states |
resolve_named_char_ref | 名前付き character-reference を解決する |