# XHTML Basic

#======= ELEMENTS =======
$emptyTags = '';
$pairTags = 'A|ABBR|ACRONYM|ADDRESS|BASE|BLOCKQUOTE|BODY|BR|CAPTION|CITE|CODE'.
            '|DD|DFN|DIV|DL|DT|EM|FORM|H1|H2|H3|H4|H5|H6|HEAD|HTML|IMG|INPUT'.
            '|KBD|LABEL|LI|LINK|META|OBJECT|OL|OPTION|P|PARAM|PRE|Q|SAMP'.
            '|SELECT|SPAN|STRONG|TABLE|TD|TEXTAREA|TH|TITLE|TR|UL|VAR';
$deprecatedTags = '';
$omitStartTags = '';
$omitEndTags = '';
#$maybeEmpty = 'A|ABBR|ACRONYM|ADDRESS|BASE|BR|CAPTION|CITE|CODE|DD|DFN|DIV|DT'.
#              '|EM|H1|H2|H3|H4|H5|H6|IMG|INPUT|KBD|LABEL|LI|LINK|META|OBJECT'.
#              '|OPTION|P|PARAM|PRE|Q|SAMP|SPAN|STRONG|TD|TEXTAREA|TH|TITLE'.
#              '|VAR';
$maybeEmpty = 'PRE|TEXTAREA|TD|TH';
%requiredTags = (
  'HEAD'  => 'TITLE',
  'HTML'  => 'HEAD|BODY',
  'TABLE' => 'TR',
);
%onceonlyTags = (
  'HEAD'  => 'TITLE|BASE',
  'HTML'  => 'HEAD|BODY',
  'TABLE' => 'CAPTION',
);
$sequencialTags = 'HTML|TABLE';
%tagsElements = (
  'A'          => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|Q|ACRONYM|ABBR|CITE'.
                  '|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'ABBR'       => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'ACRONYM'    => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'ADDRESS'    => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'BLOCKQUOTE' => 'FORM|TABLE|ADDRESS|BLOCKQUOTE|PRE|DIV|P|DL|OL|UL|H6|H5|H4'.
                  '|H3|H2|H1',
  'BODY'       => 'FORM|TABLE|ADDRESS|BLOCKQUOTE|PRE|DIV|P|DL|OL|UL|H6|H5|H4'.
                  '|H3|H2|H1',
  'CAPTION'    => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'CITE'       => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'CODE'       => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'DD'         => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|FORM|TABLE'.
                  '|ADDRESS|BLOCKQUOTE|PRE|DIV|P|DL|OL|UL|H6|H5|H4|H3|H2|H1'.
                  '|#PCDATA',
  'DFN'        => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'DIV'        => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|FORM|TABLE'.
                  '|ADDRESS|BLOCKQUOTE|PRE|DIV|P|DL|OL|UL|H6|H5|H4|H3|H2|H1'.
                  '|#PCDATA',
  'DL'         => 'DD|DT',
  'DT'         => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'EM'         => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'FORM'       => 'TABLE|ADDRESS|BLOCKQUOTE|PRE|DIV|P|DL|OL|UL|H6|H5|H4|H3|H2'.
                  '|H1',
  'H1'         => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'H2'         => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'H3'         => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'H4'         => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'H5'         => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'H6'         => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'HEAD'       => 'TITLE|BASE|META|LINK|OBJECT',
  'HTML'       => 'HEAD|BODY',
  'KBD'        => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'LABEL'      => 'OBJECT|IMG|Q|ACRONYM|ABBR|CITE|VAR|KBD|SAMP|CODE|DFN'.
                  '|STRONG|EM|SPAN|BR|TEXTAREA|SELECT|INPUT|#PCDATA',
  'LI'         => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|FORM|TABLE'.
                  '|ADDRESS|BLOCKQUOTE|PRE|DIV|P|DL|OL|UL|H6|H5|H4|H3|H2|H1'.
                  '|#PCDATA',
  'OBJECT'     => 'PARAM|LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM'.
                  '|ABBR|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|FORM'.
                  '|TABLE|ADDRESS|BLOCKQUOTE|PRE|DIV|P|DL|OL|UL|H6|H5|H4|H3'.
                  '|H2|H1|#PCDATA',
  'OL'         => 'LI',
  'OPTION'     => '#PCDATA',
  'P'          => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'PRE'        => 'A|Q|ACRONYM|ABBR|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN'.
                  '|BR|#PCDATA',
  'Q'          => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'SAMP'       => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'SELECT'     => 'OPTION',
  'SPAN'       => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'STRONG'     => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
  'TABLE'      => 'CAPTION|TR',
  'TD'         => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|FORM|ADDRESS'.
                  '|BLOCKQUOTE|PRE|DIV|P|DL|OL|UL|H6|H5|H4|H3|H2|H1|#PCDATA',
  'TEXTAREA'   => '#PCDATA',
  'TH'         => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|FORM|ADDRESS'.
                  '|BLOCKQUOTE|PRE|DIV|P|DL|OL|UL|H6|H5|H4|H3|H2|H1|#PCDATA',
  'TITLE'      => '#PCDATA',
  'TR'         => 'TD|TH',
  'UL'         => 'LI',
  'VAR'        => 'LABEL|TEXTAREA|SELECT|INPUT|OBJECT|IMG|A|Q|ACRONYM|ABBR'.
                  '|CITE|VAR|KBD|SAMP|CODE|DFN|STRONG|EM|SPAN|BR|#PCDATA',
);
%excludedElems = (
  'A'      => 'A',
  'PRE'    => 'IMG',
  'FORM'   => 'FORM',
  'LABEL'  => 'LABEL',
);
%includedElems = (
  'HEAD' => 'META|LINK|OBJECT',
);
#======= ATTRIBUTES =======
%tagsAttributes = (
  'A' => {
    'ACCESSKEY' => '%Character.datatype',
    'CHARSET'   => '%Charset.datatype',
    'CLASS'     => 'NMTOKENS',
    'HREF'      => '%URI.datatype',
    'HREFLANG'  => '%LanguageCode.datatype',
    'ID'        => 'ID',
    'REL'       => '%LinkTypes.datatype',
    'REV'       => '%LinkTypes.datatype',
    'TABINDEX'  => '%Number.datatype',
    'TITLE'     => '%Text.datatype',
    'TYPE'      => '%ContentType.datatype',
    'XML:LANG'  => '%LanguageCode.datatype',
    'XMLNS'     => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'ABBR' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'ACRONYM' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'ADDRESS' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'BASE' => {
    'HREF'  => '%URI.datatype',
    'XMLNS' => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'BLOCKQUOTE' => {
    'CITE'     => '%URI.datatype',
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'BODY' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'BR' => {
    'CLASS' => 'NMTOKENS',
    'ID'    => 'ID',
    'TITLE' => '%Text.datatype',
    'XMLNS' => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'CAPTION' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'CITE' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'CODE' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'DD' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'DFN' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'DIV' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'DL' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'DT' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'EM' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'FORM' => {
    'ACTION'   => '%URI.datatype',
    'CLASS'    => 'NMTOKENS',
    'ENCTYPE'  => '%ContentType.datatype',
    'ID'       => 'ID',
    'METHOD'   => 'get|post',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'H1' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'H2' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'H3' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'H4' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'H5' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'H6' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'HEAD' => {
    'PROFILE'  => '%URIs.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'HTML' => {
    'VERSION'  => '%FPI.datatype=-//W3C//DTD XHTML Basic 1.0//EN',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'IMG' => {
    'ALT'      => '%Text.datatype',
    'CLASS'    => 'NMTOKENS',
    'HEIGHT'   => '%Length.datatype',
    'ID'       => 'ID',
    'LONGDESC' => '%URI.datatype',
    'SRC'      => '%URI.datatype',
    'TITLE'    => '%Text.datatype',
    'WIDTH'    => '%Length.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'INPUT' => {
    'ACCESSKEY' => '%Character.datatype',
    'CHECKED'   => 'checked',
    'CLASS'     => 'NMTOKENS',
    'ID'        => 'ID',
    'MAXLENGTH' => '%Number.datatype',
    'NAME'      => 'CDATA',
    'SIZE'      => 'CDATA',
    'SRC'       => '%URI.datatype',
    'TITLE'     => '%Text.datatype',
    'TYPE'      => 'text|password|checkbox|radio|submit|reset|hidden',
    'VALUE'     => 'CDATA',
    'XML:LANG'  => '%LanguageCode.datatype',
    'XMLNS'     => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'KBD' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'LABEL' => {
    'ACCESSKEY' => '%Character.datatype',
    'CLASS'     => 'NMTOKENS',
    'FOR'       => 'IDREF',
    'ID'        => 'ID',
    'TITLE'     => '%Text.datatype',
    'XML:LANG'  => '%LanguageCode.datatype',
    'XMLNS'     => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'LI' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'LINK' => {
    'CHARSET'  => '%Charset.datatype',
    'CLASS'    => 'NMTOKENS',
    'HREF'     => '%URI.datatype',
    'HREFLANG' => '%LanguageCode.datatype',
    'ID'       => 'ID',
    'MEDIA'    => '%MediaDesc.datatype',
    'REL'      => '%LinkTypes.datatype',
    'REV'      => '%LinkTypes.datatype',
    'TITLE'    => '%Text.datatype',
    'TYPE'     => '%ContentType.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'META' => {
    'CONTENT'    => 'CDATA',
    'HTTP-EQUIV' => 'NMTOKEN',
    'NAME'       => 'NMTOKEN',
    'SCHEME'     => 'CDATA',
    'XML:LANG'   => '%LanguageCode.datatype',
    'XMLNS'      => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'OBJECT' => {
    'ARCHIVE'  => '%URIs.datatype',
    'CLASS'    => 'NMTOKENS',
    'CLASSID'  => '%URI.datatype',
    'CODEBASE' => '%URI.datatype',
    'CODETYPE' => '%ContentType.datatype',
    'DATA'     => '%URI.datatype',
    'DECLARE'  => 'declare',
    'HEIGHT'   => '%Length.datatype',
    'ID'       => 'ID',
    'NAME'     => 'CDATA',
    'STANDBY'  => '%Text.datatype',
    'TABINDEX' => '%Number.datatype',
    'TITLE'    => '%Text.datatype',
    'TYPE'     => '%ContentType.datatype',
    'WIDTH'    => '%Length.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'OL' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'OPTION' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'SELECTED' => 'selected',
    'TITLE'    => '%Text.datatype',
    'VALUE'    => 'CDATA',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'P' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'PARAM' => {
    'ID'        => 'ID',
    'NAME'      => 'CDATA',
    'TYPE'      => '%ContentType.datatype',
    'VALUE'     => 'CDATA',
    'VALUETYPE' => 'data|ref|object',
    'XMLNS'     => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'PRE' => {
    'CLASS'     => 'NMTOKENS',
    'ID'        => 'ID',
    'TITLE'     => '%Text.datatype',
    'XML:LANG'  => '%LanguageCode.datatype',
    'XML:SPACE' => 'preserve=preserve',
    'XMLNS'     => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'Q' => {
    'CITE'     => '%URI.datatype',
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'SAMP' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'SELECT' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'MULTIPLE' => 'multiple',
    'NAME'     => 'CDATA',
    'SIZE'     => '%Number.datatype',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'SPAN' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'STRONG' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'TABLE' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'SUMMARY'  => '%Text.datatype',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'TD' => {
    'ABBR'     => '%Text.datatype',
    'ALIGN'    => 'left|center|right',
    'AXIS'     => 'CDATA',
    'CLASS'    => 'NMTOKENS',
    'COLSPAN'  => '%Number.datatype',
    'HEADERS'  => 'IDREFS',
    'ID'       => 'ID',
    'ROWSPAN'  => '%Number.datatype',
    'SCOPE'    => 'row|col',
    'TITLE'    => '%Text.datatype',
    'VALIGN'   => 'top|middle|bottom',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'TEXTAREA' => {
    'ACCESSKEY' => '%Character.datatype',
    'CLASS'     => 'NMTOKENS',
    'COLS'      => '%Number.datatype',
    'ID'        => 'ID',
    'NAME'      => 'CDATA',
    'ROWS'      => '%Number.datatype',
    'TITLE'     => '%Text.datatype',
    'XML:LANG'  => '%LanguageCode.datatype',
    'XMLNS'     => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'TH' => {
    'ABBR'     => '%Text.datatype',
    'ALIGN'    => 'left|center|right',
    'AXIS'     => 'CDATA',
    'CLASS'    => 'NMTOKENS',
    'COLSPAN'  => '%Number.datatype',
    'HEADERS'  => 'IDREFS',
    'ID'       => 'ID',
    'ROWSPAN'  => '%Number.datatype',
    'SCOPE'    => 'row|col',
    'TITLE'    => '%Text.datatype',
    'VALIGN'   => 'top|middle|bottom',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'TITLE' => {
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'TR' => {
    'ALIGN'    => 'left|center|right',
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'VALIGN'   => 'top|middle|bottom',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'UL' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
  'VAR' => {
    'CLASS'    => 'NMTOKENS',
    'ID'       => 'ID',
    'TITLE'    => '%Text.datatype',
    'XML:LANG' => '%LanguageCode.datatype',
    'XMLNS'    => '%URI.datatype=http://www.w3.org/1999/xhtml',
  },
);
%requiredAttrs = (
  'BASE'     => 'HREF',
  'FORM'     => 'ACTION',
  'IMG'      => 'SRC&ALT',
  'META'     => 'CONTENT',
  'PARAM'    => 'NAME',
  'TEXTAREA' => 'ROWS&COLS',
  'HTML'     => 'XMLNS',
);
#======= ENTITIES =======
%refEntities = (
  'AElig'          => '&#198;',
  'Aacute'         => '&#193;',
  'Acirc'          => '&#194;',
  'Agrave'         => '&#192;',
  'Alpha'          => '&#913;',
  'Aring'          => '&#197;',
  'Atilde'         => '&#195;',
  'Auml'           => '&#196;',
  'Beta'           => '&#914;',
  'Ccedil'         => '&#199;',
  'Chi'            => '&#935;',
  'Dagger'         => '&#8225;',
  'Delta'          => '&#916;',
  'ETH'            => '&#208;',
  'Eacute'         => '&#201;',
  'Ecirc'          => '&#202;',
  'Egrave'         => '&#200;',
  'Epsilon'        => '&#917;',
  'Eta'            => '&#919;',
  'Euml'           => '&#203;',
  'Gamma'          => '&#915;',
  'Iacute'         => '&#205;',
  'Icirc'          => '&#206;',
  'Igrave'         => '&#204;',
  'Iota'           => '&#921;',
  'Iuml'           => '&#207;',
  'Kappa'          => '&#922;',
  'Lambda'         => '&#923;',
  'Mu'             => '&#924;',
  'Ntilde'         => '&#209;',
  'Nu'             => '&#925;',
  'OElig'          => '&#338;',
  'Oacute'         => '&#211;',
  'Ocirc'          => '&#212;',
  'Ograve'         => '&#210;',
  'Omega'          => '&#937;',
  'Omicron'        => '&#927;',
  'Oslash'         => '&#216;',
  'Otilde'         => '&#213;',
  'Ouml'           => '&#214;',
  'Phi'            => '&#934;',
  'Pi'             => '&#928;',
  'Prime'          => '&#8243;',
  'Psi'            => '&#936;',
  'Rho'            => '&#929;',
  'Scaron'         => '&#352;',
  'Sigma'          => '&#931;',
  'THORN'          => '&#222;',
  'Tau'            => '&#932;',
  'Theta'          => '&#920;',
  'Uacute'         => '&#218;',
  'Ucirc'          => '&#219;',
  'Ugrave'         => '&#217;',
  'Upsilon'        => '&#933;',
  'Uuml'           => '&#220;',
  'Xi'             => '&#926;',
  'Yacute'         => '&#221;',
  'Yuml'           => '&#376;',
  'Zeta'           => '&#918;',
  'aacute'         => '&#225;',
  'acirc'          => '&#226;',
  'acute'          => '&#180;',
  'aelig'          => '&#230;',
  'agrave'         => '&#224;',
  'alefsym'        => '&#8501;',
  'alpha'          => '&#945;',
  'amp'            => '&#38;',
  'and'            => '&#8743;',
  'ang'            => '&#8736;',
  'aring'          => '&#229;',
  'asymp'          => '&#8776;',
  'atilde'         => '&#227;',
  'auml'           => '&#228;',
  'bdquo'          => '&#8222;',
  'beta'           => '&#946;',
  'brvbar'         => '&#166;',
  'bull'           => '&#8226;',
  'cap'            => '&#8745;',
  'ccedil'         => '&#231;',
  'cedil'          => '&#184;',
  'cent'           => '&#162;',
  'chi'            => '&#967;',
  'circ'           => '&#710;',
  'clubs'          => '&#9827;',
  'cong'           => '&#8773;',
  'copy'           => '&#169;',
  'crarr'          => '&#8629;',
  'cup'            => '&#8746;',
  'curren'         => '&#164;',
  'dArr'           => '&#8659;',
  'dagger'         => '&#8224;',
  'darr'           => '&#8595;',
  'deg'            => '&#176;',
  'delta'          => '&#948;',
  'diams'          => '&#9830;',
  'divide'         => '&#247;',
  'eacute'         => '&#233;',
  'ecirc'          => '&#234;',
  'egrave'         => '&#232;',
  'empty'          => '&#8709;',
  'emsp'           => '&#8195;',
  'ensp'           => '&#8194;',
  'epsilon'        => '&#949;',
  'equiv'          => '&#8801;',
  'eta'            => '&#951;',
  'eth'            => '&#240;',
  'euml'           => '&#235;',
  'euro'           => '&#8364;',
  'exist'          => '&#8707;',
  'fnof'           => '&#402;',
  'forall'         => '&#8704;',
  'frac12'         => '&#189;',
  'frac14'         => '&#188;',
  'frac34'         => '&#190;',
  'frasl'          => '&#8260;',
  'gamma'          => '&#947;',
  'ge'             => '&#8805;',
  'gt'             => '&#62;',
  'hArr'           => '&#8660;',
  'harr'           => '&#8596;',
  'hearts'         => '&#9829;',
  'hellip'         => '&#8230;',
  'iacute'         => '&#237;',
  'icirc'          => '&#238;',
  'iexcl'          => '&#161;',
  'igrave'         => '&#236;',
  'image'          => '&#8465;',
  'infin'          => '&#8734;',
  'int'            => '&#8747;',
  'iota'           => '&#953;',
  'iquest'         => '&#191;',
  'isin'           => '&#8712;',
  'iuml'           => '&#239;',
  'kappa'          => '&#954;',
  'lArr'           => '&#8656;',
  'lambda'         => '&#955;',
  'lang'           => '&#9001;',
  'laquo'          => '&#171;',
  'larr'           => '&#8592;',
  'lceil'          => '&#8968;',
  'ldquo'          => '&#8220;',
  'le'             => '&#8804;',
  'lfloor'         => '&#8970;',
  'lowast'         => '&#8727;',
  'loz'            => '&#9674;',
  'lrm'            => '&#8206;',
  'lsaquo'         => '&#8249;',
  'lsquo'          => '&#8216;',
  'lt'             => '&#60;',
  'macr'           => '&#175;',
  'mdash'          => '&#8212;',
  'micro'          => '&#181;',
  'middot'         => '&#183;',
  'minus'          => '&#8722;',
  'mu'             => '&#956;',
  'nabla'          => '&#8711;',
  'nbsp'           => '&#160;',
  'ndash'          => '&#8211;',
  'ne'             => '&#8800;',
  'ni'             => '&#8715;',
  'not'            => '&#172;',
  'notin'          => '&#8713;',
  'nsub'           => '&#8836;',
  'ntilde'         => '&#241;',
  'nu'             => '&#957;',
  'oacute'         => '&#243;',
  'ocirc'          => '&#244;',
  'oelig'          => '&#339;',
  'ograve'         => '&#242;',
  'oline'          => '&#8254;',
  'omega'          => '&#969;',
  'omicron'        => '&#959;',
  'oplus'          => '&#8853;',
  'or'             => '&#8744;',
  'ordf'           => '&#170;',
  'ordm'           => '&#186;',
  'oslash'         => '&#248;',
  'otilde'         => '&#245;',
  'otimes'         => '&#8855;',
  'ouml'           => '&#246;',
  'para'           => '&#182;',
  'part'           => '&#8706;',
  'permil'         => '&#8240;',
  'perp'           => '&#8869;',
  'phi'            => '&#966;',
  'pi'             => '&#960;',
  'piv'            => '&#982;',
  'plusmn'         => '&#177;',
  'pound'          => '&#163;',
  'prime'          => '&#8242;',
  'prod'           => '&#8719;',
  'prop'           => '&#8733;',
  'psi'            => '&#968;',
  'quot'           => '&#34;',
  'rArr'           => '&#8658;',
  'radic'          => '&#8730;',
  'rang'           => '&#9002;',
  'raquo'          => '&#187;',
  'rarr'           => '&#8594;',
  'rceil'          => '&#8969;',
  'rdquo'          => '&#8221;',
  'real'           => '&#8476;',
  'reg'            => '&#174;',
  'rfloor'         => '&#8971;',
  'rho'            => '&#961;',
  'rlm'            => '&#8207;',
  'rsaquo'         => '&#8250;',
  'rsquo'          => '&#8217;',
  'sbquo'          => '&#8218;',
  'scaron'         => '&#353;',
  'sdot'           => '&#8901;',
  'sect'           => '&#167;',
  'shy'            => '&#173;',
  'sigma'          => '&#963;',
  'sigmaf'         => '&#962;',
  'sim'            => '&#8764;',
  'spades'         => '&#9824;',
  'sub'            => '&#8834;',
  'sube'           => '&#8838;',
  'sum'            => '&#8721;',
  'sup'            => '&#8835;',
  'sup1'           => '&#185;',
  'sup2'           => '&#178;',
  'sup3'           => '&#179;',
  'supe'           => '&#8839;',
  'szlig'          => '&#223;',
  'tau'            => '&#964;',
  'there4'         => '&#8756;',
  'theta'          => '&#952;',
  'thetasym'       => '&#977;',
  'thinsp'         => '&#8201;',
  'thorn'          => '&#254;',
  'tilde'          => '&#732;',
  'times'          => '&#215;',
  'trade'          => '&#8482;',
  'uArr'           => '&#8657;',
  'uacute'         => '&#250;',
  'uarr'           => '&#8593;',
  'ucirc'          => '&#251;',
  'ugrave'         => '&#249;',
  'uml'            => '&#168;',
  'upsih'          => '&#978;',
  'upsilon'        => '&#965;',
  'uuml'           => '&#252;',
  'weierp'         => '&#8472;',
  'xhtml-arch.dtd' => 'xhtml11-arch.dtd',
  'xi'             => '&#958;',
  'yacute'         => '&#253;',
  'yen'            => '&#165;',
  'yuml'           => '&#255;',
  'zeta'           => '&#950;',
  'zwj'            => '&#8205;',
  'zwnj'           => '&#8204;',
);
%refParams = (
  'Character.datatype'    => '[\x20-\x7E]',
  'Charset.datatype'      => 'CDATA+',
  'ContentType.datatype'  => 'CDATA+',
  'FPI.datatype'          => 'CDATA+',
  'LanguageCode.datatype' => '(?:(?i)[A-Z]{1,8}(?:-[A-Z]{1,8})*)?',
  'Length.datatype'       => '\d+%?',
  'LinkTypes.datatype'    => 'NMTOKENS',
  'MediaDesc.datatype'    => 'CDATA+',
  'Number.datatype'       => '\d+',
  'Text.datatype'         => 'CDATA',
  'URI.datatype'          => '&URL',
  'URIs.datatype'         => '&URLs',
);

1;
