HTML Tokenizador

HTML Tokenizador

O tokenizador é a primeira etapa da análise HTML: ele converte texto markup em um fluxo de tokens definidos por padrões. É API público, de modo que ferramentas que se importam com tokens ao invés de árvores — linters, pré-passagens de sanitização, realçadores de sintaxe — podem consumir o fluxo diretamente.


Tokenizando Markup

Tokenizer.tokenize() processa a entrada completa; Tokenizer.tokenize_fragment() aplica regras de tokenização de fragmentos. Ambos emitem o vocabulário padrão de tokens.

Classes de Token

Cada token é um objeto tipado: StartTagToken e EndTagToken para tags (com atributos), CharacterToken para texto, CommentToken, DoctypeToken e EofToken marcando o fim da entrada.

Estados do Tokenizador

TokenizerState modela a máquina de estados dos padrões — os mesmos estados que a especificação nomeia — e Tokenizer.set_state() permite que fragmentos e chamadores sensíveis ao contexto comecem no estado correto.

Referências de Caracteres

Referências de caracteres nomeadas e numéricas são resolvidas através de resolve_named_char_ref(), resolve_numeric_char_ref() e find_named_char_ref_match() — a tabela completa de referências nomeadas, não um subconjunto abreviado.


Dicas e Melhores Práticas

  • Use tokenize_fragment() com o estado inicial correto ao tokenizar conteúdo que apareceria dentro de um elemento específico.
  • Trate EofToken como o sinal definitivo de término, em vez de esgotar o iterador por exceção.
  • Para sanitizadores, inspecione os atributos StartTagToken ao nível do token antes que qualquer árvore seja construída.

Problemas Comuns

ProblemaCausaCorreção
O conteúdo de script/estilo é tokenizado como markupEstado inicial incorreto para o contextoDefina o TokenizerState apropriado via set_state()
Entidades aparecem não resolvidasConsumindo texto bruto sem resolução de referênciaUse as funções de resolvedor de char-ref
A saída do fragmento difere da análise completaAs regras de fragmento diferem intencionalmenteUse tokenize() para documentos completos

FAQ

Posso usar o tokenizador sem construir uma árvore?

Sim — o fluxo de tokens é uma saída pública e independente.

Os estados do tokenizador são os padrões?

TokenizerState reflete a máquina de estados da especificação e pode ser configurado via set_state().

Como são tratadas as referências de caracteres nomeados?

Por meio de resolve_named_char_ref() e find_named_char_ref_match() contra a tabela completa de referências nomeadas.


API Reference Resumo

Classe/MétodoDescrição
Tokenizer.tokenizeTokenizar entrada completa
Tokenizer.tokenize_fragmentTokenizar com regras de fragmento
Tokenizer.set_stateDefina o estado inicial do tokenizador
StartTagTokenToken de tag de início com atributos
TokenizerStateEstados da máquina de estado dos padrões
resolve_named_char_refResolver uma referência de caractere nomeada

Ver também

 Português