HTML Tokenizer
HTML Tokenizer
Tokenizer adalah tahap pertama dari parsing HTML: ia mengubah teks markup menjadi aliran token yang didefinisikan standar. Ia bersifat publik API, sehingga alat yang memperhatikan token daripada pohon — linter, pra-pemrosesan sanitizer, penyorot sintaks — dapat mengonsumsi aliran tersebut secara langsung.
Tokenisasi Markup
Tokenizer.tokenize() memproses input lengkap; Tokenizer.tokenize_fragment() menerapkan aturan tokenisasi fragmen. Keduanya menghasilkan kosakata token standar.
Kelas Token
Setiap token adalah objek bertipe: StartTagToken dan EndTagToken untuk tag (dengan atribut), CharacterToken untuk teks, CommentToken, DoctypeToken, dan EofToken menandai akhir input.
Status Tokenizer
TokenizerState memodelkan mesin status standar — status yang sama yang disebutkan dalam spesifikasi — dan Tokenizer.set_state() memungkinkan pemanggil fragmen dan sensitif konteks memulai dalam status yang tepat.
Referensi Karakter
Referensi karakter bernama dan numerik diselesaikan melalui resolve_named_char_ref(), resolve_numeric_char_ref(), dan find_named_char_ref_match() — tabel referensi bernama lengkap, bukan subset pintasan.
Tips dan Praktik Terbaik
- Gunakan
tokenize_fragment()dengan status awal yang benar saat melakukan tokenisasi konten yang akan muncul di dalam elemen tertentu - Anggap
EofTokensebagai sinyal akhir yang definitif alih-alih menghabiskan iterator dengan pengecualian - Untuk penyaring, periksa atribut
StartTagTokenpada level token sebelum pohon apa pun dibangun
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
| Konten script/style ditokenisasi sebagai markup | Status awal yang salah untuk konteks | Setel TokenizerState yang sesuai melalui set_state() |
| Entitas muncul tidak terpecahkan | Mengonsumsi teks mentah tanpa resolusi referensi | Gunakan fungsi resolver char-ref |
| Output fragmen berbeda dari parsing penuh | Aturan fragmen sengaja berbeda | Gunakan tokenize() untuk dokumen lengkap |
FAQ
Apakah saya dapat menggunakan tokenizer tanpa membangun pohon?
Ya — aliran token adalah output publik yang berdiri sendiri.
Apakah status tokenizer adalah yang standar?
TokenizerState mencerminkan mesin status spesifikasi dan dapat diatur melalui set_state().
Bagaimana referensi karakter bernama ditangani?
Melalui resolve_named_char_ref() dan find_named_char_ref_match() terhadap tabel referensi bernama lengkap.
API Reference Ringkasan
| Kelas/Metode | Deskripsi |
|---|---|
Tokenizer.tokenize | Tokenisasi input lengkap |
Tokenizer.tokenize_fragment | Tokenisasi dengan aturan fragmen |
Tokenizer.set_state | Atur keadaan tokenizer awal |
StartTagToken | Token tag pembuka dengan atribut |
TokenizerState | Standar menyatakan status mesin |
resolve_named_char_ref | Menyelesaikan referensi karakter bernama |