type TokenizerState* = enum
  DATA, CHARACTER_REFERENCE, TAG_OPEN, RCDATA, RCDATA_LESS_THAN_SIGN,
  RAWTEXT, RAWTEXT_LESS_THAN_SIGN, SCRIPT_DATA, SCRIPT_DATA_LESS_THAN_SIGN,
  PLAINTEXT, MARKUP_DECLARATION_OPEN, END_TAG_OPEN, BOGUS_COMMENT, TAG_NAME,
  BEFORE_ATTRIBUTE_NAME, RCDATA_END_TAG_OPEN, RCDATA_END_TAG_NAME,
  RAWTEXT_END_TAG_OPEN, RAWTEXT_END_TAG_NAME, SELF_CLOSING_START_TAG,
  SCRIPT_DATA_END_TAG_OPEN, SCRIPT_DATA_ESCAPE_START,
  SCRIPT_DATA_END_TAG_NAME, SCRIPT_DATA_ESCAPE_START_DASH,
  SCRIPT_DATA_ESCAPED_DASH_DASH, SCRIPT_DATA_ESCAPED,
  SCRIPT_DATA_ESCAPED_DASH, SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN,
  SCRIPT_DATA_ESCAPED_END_TAG_OPEN, SCRIPT_DATA_DOUBLE_ESCAPE_START,
  SCRIPT_DATA_ESCAPED_END_TAG_NAME, SCRIPT_DATA_DOUBLE_ESCAPED,
  SCRIPT_DATA_DOUBLE_ESCAPED_DASH, SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,
  SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH, SCRIPT_DATA_DOUBLE_ESCAPE_END,
  AFTER_ATTRIBUTE_NAME, ATTRIBUTE_NAME, BEFORE_ATTRIBUTE_VALUE,
  ATTRIBUTE_VALUE_QUOTED, ATTRIBUTE_VALUE_UNQUOTED,
  AFTER_ATTRIBUTE_VALUE_QUOTED, COMMENT_START,
  CDATA_SECTION, COMMENT_START_DASH, COMMENT, COMMENT_END,
  COMMENT_LESS_THAN_SIGN, COMMENT_END_DASH, COMMENT_LESS_THAN_SIGN_BANG,
  COMMENT_LESS_THAN_SIGN_BANG_DASH, COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH,
  COMMENT_END_BANG, DOCTYPE, BEFORE_DOCTYPE_NAME,
  DOCTYPE_NAME, AFTER_DOCTYPE_NAME, AFTER_DOCTYPE_PUBLIC_KEYWORD,
  AFTER_DOCTYPE_SYSTEM_KEYWORD, BOGUS_DOCTYPE, BEFORE_DOCTYPE_PUBLIC_IDENTIFIER,
  DOCTYPE_PUBLIC_IDENTIFIER_QUOTED, AFTER_DOCTYPE_PUBLIC_IDENTIFIER,
  BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS,
  DOCTYPE_SYSTEM_IDENTIFIER_QUOTED, BEFORE_DOCTYPE_SYSTEM_IDENTIFIER,
  AFTER_DOCTYPE_SYSTEM_IDENTIFIER, CDATA_SECTION_BRACKET,
  CDATA_SECTION_END, NAMED_CHARACTER_REFERENCE, NUMERIC_CHARACTER_REFERENCE,
  AMBIGUOUS_AMPERSAND_STATE, HEXADECIMAL_CHARACTER_REFERENCE_START,
  HEXADECIMAL_CHARACTER_REFERENCE, DECIMAL_CHARACTER_REFERENCE
