HTML Tokenizador
Tokenizador HTML
El tokenizador es la primera etapa del análisis de HTML: convierte el texto de marcado en una secuencia de tokens definidos por los estándares. Es API pública, por lo que las herramientas que se ocupan de tokens en lugar de árboles — linters, pre-pasadas de saneamiento, resaltadores de sintaxis — pueden consumir la secuencia directamente.
Tokenizando marcado
Tokenizer.tokenize() procesa la entrada completa; Tokenizer.tokenize_fragment() aplica reglas de tokenización de fragmentos. Ambos emiten el vocabulario estándar de tokens.
Clases de token
Cada token es un objeto tipado: StartTagToken y EndTagToken para etiquetas (con atributos), CharacterToken para texto, CommentToken, DoctypeToken y EofToken que marcan el fin de la entrada.
Estados del tokenizador
TokenizerState modela la máquina de estados del estándar — los mismos estados que nombra la especificación — y Tokenizer.set_state() permite que fragmentos y llamadores sensibles al contexto comiencen en el estado correcto.
Referencias de caracteres
Las referencias de caracteres con nombre y numéricas se resuelven mediante resolve_named_char_ref(), resolve_numeric_char_ref() y find_named_char_ref_match() — la tabla completa de referencias con nombre, no un subconjunto abreviado.
Consejos y buenas prácticas
- Utilice
tokenize_fragment()con el estado inicial correcto al tokenizar contenido que aparecería dentro de un elemento específico - Trate
EofTokencomo la señal final definitiva en lugar de agotar el iterador mediante una excepción - Para los sanitizadores, inspeccione los atributos de
StartTagTokena nivel de token antes de que se construya cualquier árbol
Problemas comunes
| Problema | Causa | Solución |
|---|---|---|
| El contenido de script/style se tokeniza como marcado | Estado inicial incorrecto para el contexto | Establezca el TokenizerState apropiado mediante set_state() |
| Las entidades aparecen sin resolver | Consumiendo texto sin procesar sin resolución de referencias | Use las funciones de resolución char-ref |
| La salida del fragmento difiere del análisis completo | Las reglas del fragmento difieren intencionalmente | Utiliza tokenize() para documentos completos |
FAQ
¿Puedo usar el tokenizador sin construir un árbol?
Sí — el flujo de tokens es una salida pública e independiente.
¿Los estados del tokenizador son los estándar?
TokenizerState refleja la máquina de estados de la especificación y se puede configurar mediante set_state().
¿Cómo se gestionan las referencias de carácter con nombre?
A través de resolve_named_char_ref() y find_named_char_ref_match() contra la tabla completa de referencias con nombre.
API Reference Resumen
| Clase/Método | Descripción |
|---|---|
Tokenizer.tokenize | Tokenizar la entrada completa |
Tokenizer.tokenize_fragment | Tokenizar con reglas de fragmento |
Tokenizer.set_state | Establecer el estado inicial del tokenizador |
StartTagToken | Token de etiqueta de inicio con atributos |
TokenizerState | Estados de la máquina de estados de los estándares |
resolve_named_char_ref | Resolver una referencia de carácter nombrada |