(* HTML5 tokenizer states *)
type t =
| Data
| Rcdata
| Rawtext
| Script_data
| Plaintext
| Tag_open
| End_tag_open
| Tag_name
| Rcdata_less_than_sign
| Rcdata_end_tag_open
| Rcdata_end_tag_name
| Rawtext_less_than_sign
| Rawtext_end_tag_open
| Rawtext_end_tag_name
| Script_data_less_than_sign
| Script_data_end_tag_open
| Script_data_end_tag_name
| Script_data_escape_start
| Script_data_escape_start_dash
| Script_data_escaped
| Script_data_escaped_dash
| Script_data_escaped_dash_dash
| Script_data_escaped_less_than_sign
| Script_data_escaped_end_tag_open
| Script_data_escaped_end_tag_name
| Script_data_double_escape_start
| Script_data_double_escaped
| Script_data_double_escaped_dash
| Script_data_double_escaped_dash_dash
| Script_data_double_escaped_less_than_sign
| Script_data_double_escape_end
| Before_attribute_name
| Attribute_name
| After_attribute_name
| Before_attribute_value
| Attribute_value_double_quoted
| Attribute_value_single_quoted
| Attribute_value_unquoted
| After_attribute_value_quoted
| Self_closing_start_tag
| Bogus_comment
| Markup_declaration_open
| Comment_start
| Comment_start_dash
| Comment
| Comment_less_than_sign
| Comment_less_than_sign_bang
| Comment_less_than_sign_bang_dash
| Comment_less_than_sign_bang_dash_dash
| Comment_end_dash
| Comment_end
| Comment_end_bang
| Doctype
| Before_doctype_name
| Doctype_name
| After_doctype_name
| After_doctype_public_keyword
| Before_doctype_public_identifier
| Doctype_public_identifier_double_quoted
| Doctype_public_identifier_single_quoted
| After_doctype_public_identifier
| Between_doctype_public_and_system_identifiers
| After_doctype_system_keyword
| Before_doctype_system_identifier
| Doctype_system_identifier_double_quoted
| Doctype_system_identifier_single_quoted
| After_doctype_system_identifier
| Bogus_doctype
| Cdata_section
| Cdata_section_bracket
| Cdata_section_end
| Character_reference
| Named_character_reference
| Ambiguous_ampersand
| Numeric_character_reference
| Hexadecimal_character_reference_start
| Decimal_character_reference_start
| Hexadecimal_character_reference
| Decimal_character_reference
| Numeric_character_reference_end
let pp fmt t =
let s = match t with
| Data -> "Data"
| Rcdata -> "Rcdata"
| Rawtext -> "Rawtext"
| Script_data -> "Script_data"
| Plaintext -> "Plaintext"
| Tag_open -> "Tag_open"
| End_tag_open -> "End_tag_open"
| Tag_name -> "Tag_name"
| Rcdata_less_than_sign -> "Rcdata_less_than_sign"
| Rcdata_end_tag_open -> "Rcdata_end_tag_open"
| Rcdata_end_tag_name -> "Rcdata_end_tag_name"
| Rawtext_less_than_sign -> "Rawtext_less_than_sign"
| Rawtext_end_tag_open -> "Rawtext_end_tag_open"
| Rawtext_end_tag_name -> "Rawtext_end_tag_name"
| Script_data_less_than_sign -> "Script_data_less_than_sign"
| Script_data_end_tag_open -> "Script_data_end_tag_open"
| Script_data_end_tag_name -> "Script_data_end_tag_name"
| Script_data_escape_start -> "Script_data_escape_start"
| Script_data_escape_start_dash -> "Script_data_escape_start_dash"
| Script_data_escaped -> "Script_data_escaped"
| Script_data_escaped_dash -> "Script_data_escaped_dash"
| Script_data_escaped_dash_dash -> "Script_data_escaped_dash_dash"
| Script_data_escaped_less_than_sign -> "Script_data_escaped_less_than_sign"
| Script_data_escaped_end_tag_open -> "Script_data_escaped_end_tag_open"
| Script_data_escaped_end_tag_name -> "Script_data_escaped_end_tag_name"
| Script_data_double_escape_start -> "Script_data_double_escape_start"
| Script_data_double_escaped -> "Script_data_double_escaped"
| Script_data_double_escaped_dash -> "Script_data_double_escaped_dash"
| Script_data_double_escaped_dash_dash -> "Script_data_double_escaped_dash_dash"
| Script_data_double_escaped_less_than_sign -> "Script_data_double_escaped_less_than_sign"
| Script_data_double_escape_end -> "Script_data_double_escape_end"
| Before_attribute_name -> "Before_attribute_name"
| Attribute_name -> "Attribute_name"
| After_attribute_name -> "After_attribute_name"
| Before_attribute_value -> "Before_attribute_value"
| Attribute_value_double_quoted -> "Attribute_value_double_quoted"
| Attribute_value_single_quoted -> "Attribute_value_single_quoted"
| Attribute_value_unquoted -> "Attribute_value_unquoted"
| After_attribute_value_quoted -> "After_attribute_value_quoted"
| Self_closing_start_tag -> "Self_closing_start_tag"
| Bogus_comment -> "Bogus_comment"
| Markup_declaration_open -> "Markup_declaration_open"
| Comment_start -> "Comment_start"
| Comment_start_dash -> "Comment_start_dash"
| Comment -> "Comment"
| Comment_less_than_sign -> "Comment_less_than_sign"
| Comment_less_than_sign_bang -> "Comment_less_than_sign_bang"
| Comment_less_than_sign_bang_dash -> "Comment_less_than_sign_bang_dash"
| Comment_less_than_sign_bang_dash_dash -> "Comment_less_than_sign_bang_dash_dash"
| Comment_end_dash -> "Comment_end_dash"
| Comment_end -> "Comment_end"
| Comment_end_bang -> "Comment_end_bang"
| Doctype -> "Doctype"
| Before_doctype_name -> "Before_doctype_name"
| Doctype_name -> "Doctype_name"
| After_doctype_name -> "After_doctype_name"
| After_doctype_public_keyword -> "After_doctype_public_keyword"
| Before_doctype_public_identifier -> "Before_doctype_public_identifier"
| Doctype_public_identifier_double_quoted -> "Doctype_public_identifier_double_quoted"
| Doctype_public_identifier_single_quoted -> "Doctype_public_identifier_single_quoted"
| After_doctype_public_identifier -> "After_doctype_public_identifier"
| Between_doctype_public_and_system_identifiers -> "Between_doctype_public_and_system_identifiers"
| After_doctype_system_keyword -> "After_doctype_system_keyword"
| Before_doctype_system_identifier -> "Before_doctype_system_identifier"
| Doctype_system_identifier_double_quoted -> "Doctype_system_identifier_double_quoted"
| Doctype_system_identifier_single_quoted -> "Doctype_system_identifier_single_quoted"
| After_doctype_system_identifier -> "After_doctype_system_identifier"
| Bogus_doctype -> "Bogus_doctype"
| Cdata_section -> "Cdata_section"
| Cdata_section_bracket -> "Cdata_section_bracket"
| Cdata_section_end -> "Cdata_section_end"
| Character_reference -> "Character_reference"
| Named_character_reference -> "Named_character_reference"
| Ambiguous_ampersand -> "Ambiguous_ampersand"
| Numeric_character_reference -> "Numeric_character_reference"
| Hexadecimal_character_reference_start -> "Hexadecimal_character_reference_start"
| Decimal_character_reference_start -> "Decimal_character_reference_start"
| Hexadecimal_character_reference -> "Hexadecimal_character_reference"
| Decimal_character_reference -> "Decimal_character_reference"
| Numeric_character_reference_end -> "Numeric_character_reference_end"
in
Format.pp_print_string fmt s