diff --git a/contrib/hbtip/tests/dbtohtml.prg b/contrib/hbtip/tests/dbtohtml.prg
deleted file mode 100644
index 4dc8dfaa0e..0000000000
--- a/contrib/hbtip/tests/dbtohtml.prg
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Demonstrating operator overloading for creating an HTML document */
-
-#require "hbtip"
-#require "hbtest"
-
-PROCEDURE Main()
-
- LOCAL oDoc, oNode, oTable, oRow, oCell
- LOCAL i, j
-
- IF ! hbtest_Table()
- ? "Error: Test database couldn't be created"
- RETURN
- ENDIF
-
- oDoc := THtmlDocument():New()
-
- /* Operator "+" creates a new node */
- oNode := oDoc:head + "meta"
- oNode:name := "Generator"
- oNode:content := "THtmlDocument"
-
- /* Operator ":" returns first "h1" from body (creates if not existent) */
- oNode := oDoc:body:h1
- oNode:text := "My address book"
-
- /* Operator "+" creates a new
node */
- oNode := oDoc:body + "p"
-
- /* Operator "+" creates a new node with attribute */
- oNode := oNode + 'font size="5"'
- oNode:text := "This is a "
-
- /* Operator "+" creates a new node */
- oNode := oNode + "b"
-
- /* Operator "+" creates a new node with attribute */
- oNode := oNode + 'font color="blue"'
- oNode:text := "sample "
-
- /* Operator "-" closes 2nd , result is node */
- oNode := oNode - "font"
-
- /* Operator "-" closes node, result is 1st node */
- oNode := oNode - "b"
-
- oNode:text := "database!"
-
- /* Operator "-" closes 1st node, result is node */
- oNode := oNode - "font"
-
- oNode := oNode + "hr"
- HB_SYMBOL_UNUSED( oNode )
-
- /* Operator ":" returns first "table" from body (creates if not existent) */
- oTable := oDoc:body:table
- oTable:attr := 'border="0" width="100%" cellspacing="0" cellpadding="0"'
-
- oRow := oTable + 'tr bgcolor="lightcyan"'
- FOR i := 1 TO FCount()
- oCell := oRow + "th"
- oCell:text := FieldName( i )
- oCell := oCell - "th"
- HB_SYMBOL_UNUSED( oCell )
- NEXT
-
- oRow := oRow - "tr"
- HB_SYMBOL_UNUSED( oRow )
-
- FOR i := 1 TO 10
- oRow := oTable + "tr"
- oRow:bgColor := iif( RecNo() % 2 == 0, "lightgrey", "white" )
-
- FOR j := 1 TO FCount()
- oCell := oRow + "td"
- oCell:text := FieldGet( j )
- oCell := oCell - "td"
- HB_SYMBOL_UNUSED( oCell )
- NEXT
-
- oRow := oRow - "tr"
- HB_SYMBOL_UNUSED( oRow )
-
- dbSkip()
- NEXT
-
- oNode := oDoc:body + "hr"
- HB_SYMBOL_UNUSED( oNode )
- oNode := oDoc:body + "p"
-
- oNode:text := "10 records from database " + Alias()
-
- dbCloseArea()
-
- IF oDoc:writeFile( "address.html" )
- ? "File created:", "address.html"
- ELSE
- ? "Error:", FError()
- ENDIF
-
- WAIT
- ? tip_HtmlToStr( oDoc:body:getText() )
-
- hb_run( "address.html" )
-
- hb_vfErase( "address.html" )
-
- RETURN
diff --git a/contrib/hbtip/tests/dbtohtml/dbtohtml.prg b/contrib/hbtip/tests/dbtohtml/dbtohtml.prg
new file mode 100644
index 0000000000..94be5761d9
--- /dev/null
+++ b/contrib/hbtip/tests/dbtohtml/dbtohtml.prg
@@ -0,0 +1,351 @@
+/*
+ Demonstrating operator overloading for creating an HTML document
+ Document checking completed. No errors or warnings to show.
+ https://validator.w3.org/nu/#file
+*/
+
+#include "dbstruct.ch"
+
+#require "hbtip"
+#require "hbtest"
+
+PROCEDURE Main()
+
+ LOCAL aDBStruct AS ARRAY
+
+ LOCAL cAlias AS CHARACTER
+ LOCAL ctip_HtmlToStr AS CHARACTER
+
+ LOCAL nField AS NUMERIC
+ LOCAL nFields AS NUMERIC
+ LOCAL nOption AS NUMERIC
+ LOCAL nProgress AS NUMERIC
+
+ LOCAL oRow AS OBJECT
+ LOCAL oDoc AS OBJECT
+ LOCAL oLang AS OBJECT
+ LOCAL oNode AS OBJECT
+ LOCAL oCell AS OBJECT
+ LOCAL oLink AS OBJECT
+ LOCAL oMeta AS OBJECT
+ LOCAL oTable AS OBJECT
+ LOCAL oTitle AS OBJECT
+ LOCAL oScript AS OBJECT
+ LOCAL oComment AS OBJECT
+
+ LOCAL uValue
+
+ IF !hbtest_Table()
+ ? "Error: Test database couldn't be created"
+ RETURN
+ ENDIF
+
+ cAlias:=Alias()
+
+ oDoc:=THtmlDocument():New()
+
+ with object oDoc
+
+ oLang:=oDoc:root:html
+ oLang:attr:={"lang"=>"en"}
+
+ /* Operator "+" creates a new node */
+ oComment:=:head+"!--"
+ with object oComment
+ oComment:text:="Required meta tags"
+ end with
+ :head:AddNode(THtmlNode():New(:head,"--"))
+
+ /* Operator "+" creates a new node */
+ oMeta:=:head+"meta"
+ with object oMeta
+ :attr:={"charset"=>"UTF-8"}
+ end with
+
+ /* Operator "+" creates a new node */
+ oMeta:=:head+"meta"
+ with object oMeta
+ :attr:={;
+ "name"=>"viewport",;
+ "content"=>"width=device-width, initial-scale=1, shrink-to-fit=no";
+ }
+ end with
+
+ /* Operator "+" creates a new node */
+ oMeta:=:head+"meta"
+ with object oMeta
+ :name:="Generator"
+ :content:="Harbour/THtmlDocument"
+ end with
+
+ /* Operator "+" creates a new node */
+ oComment:=:head+"!--"
+ with object oComment
+ oComment:text:="Bootstrap CSS"
+ end with
+ :head:AddNode(THtmlNode():New(:head,"--"))
+
+ /* Operator "+" creates a new node */
+ oLink:=:head+"link"
+ with object oLink
+ :attr:={;
+ "rel"=>"stylesheet",;
+ "href"=>"https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css",;
+ "integrity"=>"sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm",;
+ "crossorigin"=>"anonymous";
+ }
+ end with
+
+ /* Operator "+" creates a new node */
+ oComment:=:head+"!--"
+ with object oComment
+ oComment:text:="Optional JavaScript :: jQuery first, then Popper.js, then Bootstrap JS"
+ end with
+ :head:AddNode(THtmlNode():New(:head,"--"))
+
+ /* Operator "+" creates a new node */
+ oScript:=:head+"script"
+ with object oScript
+ :attr:={;
+ "src"=>"https://code.jquery.com/jquery-3.2.1.slim.min.js",;
+ "integrity"=>"sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN",;
+ "crossorigin"=>"anonymous";
+ }
+ end with
+
+ /* Operator "+" creates a new node */
+ oScript:=:head+"script"
+ with object oScript
+ :attr:={;
+ "src"=>"https://cdn.jsdelivr.net/npm/popper.js@1.12.9/dist/umd/popper.min.js",;
+ "integrity"=>"sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q",;
+ "crossorigin"=>"anonymous";
+ }
+ end with
+
+ /* Operator "+" creates a new node */
+ oScript:=:head+"script"
+ with object oScript
+ :attr:={;
+ "src"=>"https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/js/bootstrap.min.js",;
+ "integrity"=>"sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl",;
+ "crossorigin"=>"anonymous";
+ }
+ end with
+
+ /* Operator "+" creates a new node */
+ oComment:=:head+"!--"
+ with object oComment
+ oComment:text:="https://materializecss.com :: Compiled and minified CSS"
+ end with
+ :head:AddNode(THtmlNode():New(:head,"--"))
+
+ /* Operator "+" creates a new node */
+ oLink:=:head+"link"
+ with object oLink
+ :attr:={;
+ "rel"=>"stylesheet",;
+ "href"=>"https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css",;
+ "crossorigin"=>"anonymous";
+ }
+ end with
+
+ /* Operator "+" creates a new node */
+ oComment:=:head+"!--"
+ with object oComment
+ oComment:text:="Compiled and minified JavaScript"
+ end with
+ :head:AddNode(THtmlNode():New(:head,"--"))
+
+ /* Operator "+" creates a new node */
+ oScript:=:head+"script"
+ with object oScript
+ :attr:={;
+ "src"=>"https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js",;
+ "crossorigin"=>"anonymous";
+ }
+ end with
+
+ /* Operator "+" creates a new node */
+ oComment:=:head+"!--"
+ with object oComment
+ oComment:text:="https://materializecss.com/icons.html"
+ end with
+ :head:AddNode(THtmlNode():New(:head,"--"))
+
+ /* Operator "+" creates a new node */
+ oLink:=:head+"link"
+ with object oLink
+ :attr:={;
+ "rel"=>"stylesheet",;
+ "href"=>"https://fonts.googleapis.com/icon?family=Material+Icons";
+ }
+ end with
+
+ oTitle:=:head:title
+ oTitle:text="Harbour/dbtohtml.prg"
+
+ end with
+
+ with object oDoc:body:main
+
+ /* Operator ":" returns first "h1" from body (creates if not existent) */
+ oNode:=:h1
+ with object oNode
+ :text:="My address book"
+ end with
+
+ /* Operator "+" creates a new
node */
+ oNode:=oDoc:body:main+"p"
+ oNode:attr:={"style"=>"font-size: 30px"}
+ oNode:text:="Harbour THtmlDocument "
+
+ /* Operator "+" creates a new node */
+ oNode+="b"
+ oNode:attr:={"style"=>"color:blue"}
+ oNode:text:="sample "
+ /* Operator "-=" closes node*/
+ oNode-="b"
+
+ oNode:text:="database!"
+
+ /* closes
node*/
+ oNode:=oDoc:body:main:AddNode(THtmlNode():New(oDoc:body:main,"/p"))
+ HB_SYMBOL_UNUSED( oNode )
+
+ oNode+="hr"
+ HB_SYMBOL_UNUSED(oNode)
+
+ /* Operator ":" returns first "table" from body (creates if not existent) */
+ oTable:=:table
+ with object oTable
+
+ :attr:='class="table table-striped table-hover"'
+
+ aDBStruct:=(cAlias)->(dbStruct())
+ nFields:=Len(aDBStruct)
+ nProgress:=0
+
+ oRow:=oTable +'tr'
+
+ oCell:=oRow:AddNode(THtmlNode():New(oRow,"th"))
+ oCell:scope:="row"
+ oCell:text:="#"
+ oCell:=oCell-"th"
+ HB_SYMBOL_UNUSED(oCell)
+
+ FOR nField:=1 TO nFields
+ Progress(@nProgress,Row(),Col()+3)
+ oCell:=oRow+"th"
+ oCell:scope:="col"
+ oCell:text:=aDBStruct[nField][DBS_NAME]
+ oCell-="th"
+ HB_SYMBOL_UNUSED(oCell)
+ NEXT nField
+
+ oRow-="tr"
+ HB_SYMBOL_UNUSED(oRow)
+
+ (cAlias)->(dbGoTop())
+ WHILE ((cAlias)->(!Eof()))
+
+ Progress(@nProgress,Row(),Col()+3)
+
+ oRow:=oTable+"tr"
+
+ oCell:=oRow:AddNode(THtmlNode():New(oRow,"th"))
+ oCell:scope:="row"
+ oCell:text:=(cAlias)->(RecNo())
+ oCell:=oCell-"th"
+ HB_SYMBOL_UNUSED(oCell)
+
+ FOR nField:=1 TO nFields
+ Progress(@nProgress,Row(),Col()+3)
+ oCell:=oRow+"td"
+ uValue:=(cAlias)->(FieldGet(nField))
+ if (aDbStruct[nField][DBS_TYPE]=="C")
+ uValue:=allTrim(uValue)
+ endif
+ oCell:text:=uValue
+ oCell-="td"
+ HB_SYMBOL_UNUSED(oCell)
+ NEXT nField
+
+ oRow-="tr"
+ HB_SYMBOL_UNUSED(oRow)
+
+ (cAlias)->(dbSkip())
+
+ END WHILE
+
+ oNode:=oDoc:body:main+"hr"
+ HB_SYMBOL_UNUSED( oNode )
+ oNode:=oDoc:body:main+"p"
+ oNode:text:=hb_NToS((cAlias)->(RecCount()))+" records from database "+cAlias
+ oNode:=oDoc:body:main:AddNode(THtmlNode():New(oDoc:body:main,"/p"))
+ HB_SYMBOL_UNUSED( oNode )
+
+ end with
+
+ end with
+
+ (cAlias)->(dbCloseArea())
+
+ IF oDoc:writeFile( "address.html" , -9 , 4 )
+ ? "File created:", "address.html"
+ ELSE
+ ? "Error:", FError()
+ ENDIF
+
+ ctip_HtmlToStr:=tip_HtmlToStr( oDoc:body:main:getText() )
+
+ IF hb_Memowrit("address.HtmlToStr.txt",ctip_HtmlToStr)
+ ? "File created:", "address.HtmlToStr.txt"
+ ENDIF
+
+ hb_run( "address.html" )
+
+ while .T.
+ nOption := Alert( "Do you want to delete the address.html and address.HtmlToStr.txt files?", { "YES" , "NO" } )
+ switch nOption
+ case 0
+ case 2
+ exit
+ case 1
+ hb_vfErase( "address.html" )
+ hb_vfErase( "address.HtmlToStr.txt" )
+ exit
+ end switch
+ if (nOption>=1)
+ exit
+ endif
+ end while
+
+ RETURN
+
+PROCEDURE Progress( nProgress, nDrow, nDcol )
+
+ LOCAL nRow := Row(), nCol := Col()
+
+ @ nDrow, nDcol SAY "[ ]"
+
+ DO CASE
+ CASE nProgress == 0
+ @ nDrow, nDcol + 1 SAY "-"
+ CASE nProgress == 1
+ @ nDrow, nDcol + 1 SAY "\"
+ CASE nProgress == 2
+ @ nDrow, nDcol + 1 SAY "|"
+ CASE nProgress == 3
+ @ nDrow, nDcol + 1 SAY "/"
+ ENDCASE
+
+ nProgress++
+
+ IF nProgress == 4
+ nProgress := 0
+ ENDIF
+
+ @ nRow, nCol
+
+ RETURN
diff --git a/contrib/hbtip/tests/dbtohtml/hbmk.hbm b/contrib/hbtip/tests/dbtohtml/hbmk.hbm
new file mode 100644
index 0000000000..9d78f95031
--- /dev/null
+++ b/contrib/hbtip/tests/dbtohtml/hbmk.hbm
@@ -0,0 +1,4 @@
+hbtip.hbc
+hbtest.hbc
+
+-w3 -es2
diff --git a/contrib/hbtip/thtml.ch b/contrib/hbtip/thtml.ch
index fac65d8d68..82e923d398 100644
--- a/contrib/hbtip/thtml.ch
+++ b/contrib/hbtip/thtml.ch
@@ -2,6 +2,7 @@
* Directives for HTML Classes
*
* Copyright 2007 Hannes Ziegler
+ * Copyright 2022 Marinaldo de Jesus
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -48,7 +49,8 @@
#define _HB_THTML
/* Content model shortcut encoding taken from Tidy library
- https://github.com/htacg/tidy-html5 */
+ https://github.com/htacg/tidy-html5/blob/next/src/lexer.h
+*/
#define CM_UNKNOWN 0
#define CM_EMPTY 0x000001 /* Elements with no content. Map to HTML specification. */
@@ -61,229 +63,524 @@
#define CM_TABLE 0x000080 /* Elements that can appear inside TABLE. */
#define CM_ROWGRP 0x000100 /* Used for "thead", "tfoot" or "tbody". */
#define CM_ROW 0x000200 /* Used for "td", "th" */
-#define CM_FIELD 0x000400 /* Elements whose content must be protected against white space movement.
- Includes some elements that can found in forms. */
-#define CM_OBJECT 0x000800 /* Used to avoid propagating inline emphasis inside some elements
- such as OBJECT or APPLET. */
+#define CM_FIELD 0x000400 /* Elements whose content must be protected against white space movement. Includes some elements that can found in forms. */
+#define CM_OBJECT 0x000800 /* Used to avoid propagating inline emphasis inside some elements such as OBJECT or APPLET. */
#define CM_PARAM 0x001000 /* Elements that allows "PARAM". */
#define CM_FRAMES 0x002000 /* "FRAME", "FRAMESET", "NOFRAMES". Used in ParseFrameSet. */
#define CM_HEADING 0x004000 /* Heading elements (h1, h2, ...). */
#define CM_OPT 0x008000 /* Elements with an optional end tag. */
#define CM_IMG 0x010000 /* Elements that use "align" attribute for vertical position. */
#define CM_MIXED 0x020000 /* Elements with inline and block model. Used to avoid calling InlineDup. */
-#define CM_NO_INDENT 0x040000 /* Elements whose content needs to be indented only if containing one
- CM_BLOCK element. */
+#define CM_NO_INDENT 0x040000 /* Elements whose content needs to be indented only if containing one CM_BLOCK element. */
#define CM_OBSOLETE 0x080000 /* Elements that are obsolete (such as "dir", "menu"). */
-#define CM_NEW 0x100000 /* User defined elements. Used to determine how attributes without value
- should be printed. */
+#define CM_NEW 0x100000 /* User defined elements. Used to determine how attributes without value should be printed. */
#define CM_OMITST 0x200000 /* Elements that cannot be omitted. */
+#define CM_VOID 0X400000 /* Elements that are void per https://www.w3.org/TR/2011/WD-html-markup-20110113/syntax.html#syntax-elements. */
-/* Constants for HTML attributes adopted from Tidy library */
+/*
+ Constants for HTML attributes adopted from Tidy library
+ https://github.com/htacg/tidy-html5/blob/next/include/tidyenum.h
+*/
-#define HTML_ATTR_ABBR 1
-#define HTML_ATTR_ACCEPT 2
-#define HTML_ATTR_ACCEPT_CHARSET 3
-#define HTML_ATTR_ACCESSKEY 4
-#define HTML_ATTR_ACTION 5
-#define HTML_ATTR_ADD_DATE 6
-#define HTML_ATTR_ALIGN 7
-#define HTML_ATTR_ALINK 8
-#define HTML_ATTR_ALT 9
-#define HTML_ATTR_ARCHIVE 10
-#define HTML_ATTR_AXIS 11
-#define HTML_ATTR_BACKGROUND 12
-#define HTML_ATTR_BGCOLOR 13
-#define HTML_ATTR_BGPROPERTIES 14
-#define HTML_ATTR_BORDER 15
-#define HTML_ATTR_BORDERCOLOR 16
-#define HTML_ATTR_BOTTOMMARGIN 17
-#define HTML_ATTR_CELLPADDING 18
-#define HTML_ATTR_CELLSPACING 19
-#define HTML_ATTR_CHAR 20
-#define HTML_ATTR_CHAROFF 21
-#define HTML_ATTR_CHARSET 22
-#define HTML_ATTR_CHECKED 23
-#define HTML_ATTR_CITE 24
-#define HTML_ATTR_CLASS 25
-#define HTML_ATTR_CLASSID 26
-#define HTML_ATTR_CLEAR 27
-#define HTML_ATTR_CODE 28
-#define HTML_ATTR_CODEBASE 29
-#define HTML_ATTR_CODETYPE 30
-#define HTML_ATTR_COLOR 31
-#define HTML_ATTR_COLS 32
-#define HTML_ATTR_COLSPAN 33
-#define HTML_ATTR_COMPACT 34
-#define HTML_ATTR_CONTENT 35
-#define HTML_ATTR_COORDS 36
-#define HTML_ATTR_DATA 37
-#define HTML_ATTR_DATAFLD 38
-#define HTML_ATTR_DATAFORMATAS 39
-#define HTML_ATTR_DATAPAGESIZE 40
-#define HTML_ATTR_DATASRC 41
-#define HTML_ATTR_DATETIME 42
-#define HTML_ATTR_DECLARE 43
-#define HTML_ATTR_DEFER 44
-#define HTML_ATTR_DIR 45
-#define HTML_ATTR_DISABLED 46
-#define HTML_ATTR_ENCODING 47
-#define HTML_ATTR_ENCTYPE 48
-#define HTML_ATTR_EVENT 49
-#define HTML_ATTR_FACE 50
-#define HTML_ATTR_FOR 51
-#define HTML_ATTR_FRAME 52
-#define HTML_ATTR_FRAMEBORDER 53
-#define HTML_ATTR_FRAMESPACING 54
-#define HTML_ATTR_GRIDX 55
-#define HTML_ATTR_GRIDY 56
-#define HTML_ATTR_HEADERS 57
-#define HTML_ATTR_HEIGHT 58
-#define HTML_ATTR_HREF 59
-#define HTML_ATTR_HREFLANG 60
-#define HTML_ATTR_HSPACE 61
-#define HTML_ATTR_HTTP_EQUIV 62
-#define HTML_ATTR_ID 63
-#define HTML_ATTR_ISMAP 64
-#define HTML_ATTR_LABEL 65
-#define HTML_ATTR_LANG 66
-#define HTML_ATTR_LANGUAGE 67
-#define HTML_ATTR_LAST_MODIFIED 68
-#define HTML_ATTR_LAST_VISIT 69
-#define HTML_ATTR_LEFTMARGIN 70
-#define HTML_ATTR_LINK 71
-#define HTML_ATTR_LONGDESC 72
-#define HTML_ATTR_LOWSRC 73
-#define HTML_ATTR_MARGINHEIGHT 74
-#define HTML_ATTR_MARGINWIDTH 75
-#define HTML_ATTR_MAXLENGTH 76
-#define HTML_ATTR_MEDIA 77
-#define HTML_ATTR_METHOD 78
-#define HTML_ATTR_METHODS 79
-#define HTML_ATTR_MULTIPLE 80
-#define HTML_ATTR_N 81
-#define HTML_ATTR_NAME 82
-#define HTML_ATTR_NOHREF 83
-#define HTML_ATTR_NORESIZE 84
-#define HTML_ATTR_NOSHADE 85
-#define HTML_ATTR_NOWRAP 86
-#define HTML_ATTR_OBJECT 87
-#define HTML_ATTR_ONAFTERUPDATE 88
-#define HTML_ATTR_ONBEFOREUNLOAD 89
-#define HTML_ATTR_ONBEFOREUPDATE 90
-#define HTML_ATTR_ONBLUR 91
-#define HTML_ATTR_ONCHANGE 92
-#define HTML_ATTR_ONCLICK 93
-#define HTML_ATTR_ONDATAAVAILABLE 94
-#define HTML_ATTR_ONDATASETCHANGED 95
-#define HTML_ATTR_ONDATASETCOMPLETE 96
-#define HTML_ATTR_ONDBLCLICK 97
-#define HTML_ATTR_ONERRORUPDATE 98
-#define HTML_ATTR_ONFOCUS 99
-#define HTML_ATTR_ONKEYDOWN 100
-#define HTML_ATTR_ONKEYPRESS 101
-#define HTML_ATTR_ONKEYUP 102
-#define HTML_ATTR_ONLOAD 103
-#define HTML_ATTR_ONMOUSEDOWN 104
-#define HTML_ATTR_ONMOUSEMOVE 105
-#define HTML_ATTR_ONMOUSEOUT 106
-#define HTML_ATTR_ONMOUSEOVER 107
-#define HTML_ATTR_ONMOUSEUP 108
-#define HTML_ATTR_ONRESET 109
-#define HTML_ATTR_ONROWENTER 110
-#define HTML_ATTR_ONROWEXIT 111
-#define HTML_ATTR_ONSELECT 112
-#define HTML_ATTR_ONSUBMIT 113
-#define HTML_ATTR_ONUNLOAD 114
-#define HTML_ATTR_PROFILE 115
-#define HTML_ATTR_PROMPT 116
-#define HTML_ATTR_RBSPAN 117
-#define HTML_ATTR_READONLY 118
-#define HTML_ATTR_REL 119
-#define HTML_ATTR_REV 120
-#define HTML_ATTR_RIGHTMARGIN 121
-#define HTML_ATTR_ROWS 122
-#define HTML_ATTR_ROWSPAN 123
-#define HTML_ATTR_RULES 124
-#define HTML_ATTR_SCHEME 125
-#define HTML_ATTR_SCOPE 126
-#define HTML_ATTR_SCROLLING 127
-#define HTML_ATTR_SDAFORM 128
-#define HTML_ATTR_SDAPREF 129
-#define HTML_ATTR_SDASUFF 130
-#define HTML_ATTR_SELECTED 131
-#define HTML_ATTR_SHAPE 132
-#define HTML_ATTR_SHOWGRID 133
-#define HTML_ATTR_SHOWGRIDX 134
-#define HTML_ATTR_SHOWGRIDY 135
-#define HTML_ATTR_SIZE 136
-#define HTML_ATTR_SPAN 137
-#define HTML_ATTR_SRC 138
-#define HTML_ATTR_STANDBY 139
-#define HTML_ATTR_START 140
-#define HTML_ATTR_STYLE 141
-#define HTML_ATTR_SUMMARY 142
-#define HTML_ATTR_TABINDEX 143
-#define HTML_ATTR_TARGET 144
-#define HTML_ATTR_TEXT 145
-#define HTML_ATTR_TITLE 146
-#define HTML_ATTR_TOPMARGIN 147
-#define HTML_ATTR_TYPE 148
-#define HTML_ATTR_UNKNOWN 149
-#define HTML_ATTR_URN 150
-#define HTML_ATTR_USEMAP 151
-#define HTML_ATTR_VALIGN 152
-#define HTML_ATTR_VALUE 153
-#define HTML_ATTR_VALUETYPE 154
-#define HTML_ATTR_VERSION 155
-#define HTML_ATTR_VLINK 156
-#define HTML_ATTR_VSPACE 157
-#define HTML_ATTR_WIDTH 158
-#define HTML_ATTR_WRAP 159
-#define HTML_ATTR_XMLNS 160
-#define HTML_ATTR_XML_LANG 161
-#define HTML_ATTR_XML_SPACE 162
+#define HTML_ATTR_ABBR 1
+#define HTML_ATTR_ACCEPT 2
+#define HTML_ATTR_ACCEPT_CHARSET 3
+#define HTML_ATTR_ACCESSKEY 4
+#define HTML_ATTR_ACTION 5
+#define HTML_ATTR_ADD_DATE 6
+#define HTML_ATTR_ALIGN 7
+#define HTML_ATTR_ALINK 8
+#define HTML_ATTR_ALT 9
+#define HTML_ATTR_ARCHIVE 10
+#define HTML_ATTR_AXIS 11
+#define HTML_ATTR_BACKGROUND 12
+#define HTML_ATTR_BGCOLOR 13
+#define HTML_ATTR_BGPROPERTIES 14
+#define HTML_ATTR_BORDER 15
+#define HTML_ATTR_BORDERCOLOR 16
+#define HTML_ATTR_BOTTOMMARGIN 17
+#define HTML_ATTR_CELLPADDING 18
+#define HTML_ATTR_CELLSPACING 19
+#define HTML_ATTR_CHAR 20
+#define HTML_ATTR_CHAROFF 21
+#define HTML_ATTR_CHARSET 22
+#define HTML_ATTR_CHECKED 23
+#define HTML_ATTR_CITE 24
+#define HTML_ATTR_CLASS 25
+#define HTML_ATTR_CLASSID 26
+#define HTML_ATTR_CLEAR 27
+#define HTML_ATTR_CODE 28
+#define HTML_ATTR_CODEBASE 29
+#define HTML_ATTR_CODETYPE 30
+#define HTML_ATTR_COLOR 31
+#define HTML_ATTR_COLS 32
+#define HTML_ATTR_COLSPAN 33
+#define HTML_ATTR_COMPACT 34
+#define HTML_ATTR_CONTENT 35
+#define HTML_ATTR_COORDS 36
+#define HTML_ATTR_DATA 37
+#define HTML_ATTR_DATAFLD 38
+#define HTML_ATTR_DATAFORMATAS 39
+#define HTML_ATTR_DATAPAGESIZE 40
+#define HTML_ATTR_DATASRC 41
+#define HTML_ATTR_DATETIME 42
+#define HTML_ATTR_DECLARE 43
+#define HTML_ATTR_DEFER 44
+#define HTML_ATTR_DIR 45
+#define HTML_ATTR_DISABLED 46
+#define HTML_ATTR_ENCODING 47
+#define HTML_ATTR_ENCTYPE 48
+#define HTML_ATTR_EVENT 49
+#define HTML_ATTR_FACE 50
+#define HTML_ATTR_FOR 51
+#define HTML_ATTR_FRAME 52
+#define HTML_ATTR_FRAMEBORDER 53
+#define HTML_ATTR_FRAMESPACING 54
+#define HTML_ATTR_GRIDX 55
+#define HTML_ATTR_GRIDY 56
+#define HTML_ATTR_HEADERS 57
+#define HTML_ATTR_HEIGHT 58
+#define HTML_ATTR_HREF 59
+#define HTML_ATTR_HREFLANG 60
+#define HTML_ATTR_HSPACE 61
+#define HTML_ATTR_HTTP_EQUIV 62
+#define HTML_ATTR_ID 63
+#define HTML_ATTR_ISMAP 64
+#define HTML_ATTR_LABEL 65
+#define HTML_ATTR_LANG 66
+#define HTML_ATTR_LANGUAGE 67
+#define HTML_ATTR_LAST_MODIFIED 68
+#define HTML_ATTR_LAST_VISIT 69
+#define HTML_ATTR_LEFTMARGIN 70
+#define HTML_ATTR_LINK 71
+#define HTML_ATTR_LONGDESC 72
+#define HTML_ATTR_LOWSRC 73
+#define HTML_ATTR_MARGINHEIGHT 74
+#define HTML_ATTR_MARGINWIDTH 75
+#define HTML_ATTR_MAXLENGTH 76
+#define HTML_ATTR_MEDIA 77
+#define HTML_ATTR_METHOD 78
+#define HTML_ATTR_METHODS 79
+#define HTML_ATTR_MULTIPLE 80
+#define HTML_ATTR_N 81
+#define HTML_ATTR_NAME 82
+#define HTML_ATTR_NOHREF 83
+#define HTML_ATTR_NORESIZE 84
+#define HTML_ATTR_NOSHADE 85
+#define HTML_ATTR_NOWRAP 86
+#define HTML_ATTR_OBJECT 87
+#define HTML_ATTR_ONAFTERUPDATE 88
+#define HTML_ATTR_ONBEFOREUNLOAD 89
+#define HTML_ATTR_ONBEFOREUPDATE 90
+#define HTML_ATTR_ONBLUR 91
+#define HTML_ATTR_ONCHANGE 92
+#define HTML_ATTR_ONCLICK 93
+#define HTML_ATTR_ONDATAAVAILABLE 94
+#define HTML_ATTR_ONDATASETCHANGED 95
+#define HTML_ATTR_ONDATASETCOMPLETE 96
+#define HTML_ATTR_ONDBLCLICK 97
+#define HTML_ATTR_ONERRORUPDATE 98
+#define HTML_ATTR_ONFOCUS 99
+#define HTML_ATTR_ONKEYDOWN 100
+#define HTML_ATTR_ONKEYPRESS 101
+#define HTML_ATTR_ONKEYUP 102
+#define HTML_ATTR_ONLOAD 103
+#define HTML_ATTR_ONMOUSEDOWN 104
+#define HTML_ATTR_ONMOUSEMOVE 105
+#define HTML_ATTR_ONMOUSEOUT 106
+#define HTML_ATTR_ONMOUSEOVER 107
+#define HTML_ATTR_ONMOUSEUP 108
+#define HTML_ATTR_ONRESET 109
+#define HTML_ATTR_ONROWENTER 110
+#define HTML_ATTR_ONROWEXIT 111
+#define HTML_ATTR_ONSELECT 112
+#define HTML_ATTR_ONSUBMIT 113
+#define HTML_ATTR_ONUNLOAD 114
+#define HTML_ATTR_PROFILE 115
+#define HTML_ATTR_PROMPT 116
+#define HTML_ATTR_RBSPAN 117
+#define HTML_ATTR_READONLY 118
+#define HTML_ATTR_REL 119
+#define HTML_ATTR_REV 120
+#define HTML_ATTR_RIGHTMARGIN 121
+#define HTML_ATTR_ROWS 122
+#define HTML_ATTR_ROWSPAN 123
+#define HTML_ATTR_RULES 124
+#define HTML_ATTR_SCHEME 125
+#define HTML_ATTR_SCOPE 126
+#define HTML_ATTR_SCROLLING 127
+#define HTML_ATTR_SDAFORM 128
+#define HTML_ATTR_SDAPREF 129
+#define HTML_ATTR_SDASUFF 130
+#define HTML_ATTR_SELECTED 131
+#define HTML_ATTR_SHAPE 132
+#define HTML_ATTR_SHOWGRID 133
+#define HTML_ATTR_SHOWGRIDX 134
+#define HTML_ATTR_SHOWGRIDY 135
+#define HTML_ATTR_SIZE 136
+#define HTML_ATTR_SPAN 137
+#define HTML_ATTR_SRC 138
+#define HTML_ATTR_STANDBY 139
+#define HTML_ATTR_START 140
+#define HTML_ATTR_STYLE 141
+#define HTML_ATTR_SUMMARY 142
+#define HTML_ATTR_TABINDEX 143
+#define HTML_ATTR_TARGET 144
+#define HTML_ATTR_TEXT 145
+#define HTML_ATTR_TITLE 146
+#define HTML_ATTR_TOPMARGIN 147
+#define HTML_ATTR_TYPE 148
+#define HTML_ATTR_UNKNOWN 149
+#define HTML_ATTR_URN 150
+#define HTML_ATTR_USEMAP 151
+#define HTML_ATTR_VALIGN 152
+#define HTML_ATTR_VALUE 153
+#define HTML_ATTR_VALUETYPE 154
+#define HTML_ATTR_VERSION 155
+#define HTML_ATTR_VLINK 156
+#define HTML_ATTR_VSPACE 157
+#define HTML_ATTR_WIDTH 158
+#define HTML_ATTR_WRAP 159
+#define HTML_ATTR_XMLNS 160
+#define HTML_ATTR_XML_LANG 161
+#define HTML_ATTR_XML_SPACE 162
+#define HTML_ATTR_ALLOWFULLSCREEN 163
+#define HTML_ATTR_DOWNLOAD 164
+#define HTML_ATTR_IS 165
+#define HTML_ATTR_ITEMID 166
+#define HTML_ATTR_ITEMPROP 167
+#define HTML_ATTR_ITEMREF 168
+#define HTML_ATTR_ITEMSCOPE 169
+#define HTML_ATTR_ITEMTYPE 170
+#define HTML_ATTR_ROLE 171
+#define HTML_ATTR_SRCSET 172
+#define HTML_ATTR_TRANSLATE 173
+#define HTML_ATTR_ASYNC 174
+#define HTML_ATTR_AUTOCOMPLETE 175
+#define HTML_ATTR_AUTOFOCUS 176
+#define HTML_ATTR_AUTOPLAY 177
+#define HTML_ATTR_CHALLENGE 178
+#define HTML_ATTR_CONTENTEDITABLE 179
+#define HTML_ATTR_CONTEXTMENU 180
+#define HTML_ATTR_CONTROLS 181
+#define HTML_ATTR_CROSSORIGIN 182
+#define HTML_ATTR_DEFAULT 183
+#define HTML_ATTR_DIRNAME 184
+#define HTML_ATTR_DRAGGABLE 185
+#define HTML_ATTR_DROPZONE 186
+#define HTML_ATTR_FORM 187
+#define HTML_ATTR_FORMACTION 188
+#define HTML_ATTR_FORMENCTYPE 189
+#define HTML_ATTR_FORMMETHOD 190
+#define HTML_ATTR_FORMNOVALIDATE 191
+#define HTML_ATTR_FORMTARGET 192
+#define HTML_ATTR_HIDDEN 193
+#define HTML_ATTR_HIGH 194
+#define HTML_ATTR_ICON 195
+#define HTML_ATTR_KEYTYPE 196
+#define HTML_ATTR_KIND 197
+#define HTML_ATTR_LIST 198
+#define HTML_ATTR_LOOP 199
+#define HTML_ATTR_LOW 200
+#define HTML_ATTR_MANIFEST 201
+#define HTML_ATTR_MAX 202
+#define HTML_ATTR_MEDIAGROUP 203
+#define HTML_ATTR_MIN 204
+#define HTML_ATTR_MUTED 205
+#define HTML_ATTR_NOVALIDATE 206
+#define HTML_ATTR_OPEN 207
+#define HTML_ATTR_OPTIMUM 208
+#define HTML_ATTR_ONABORT 209
+#define HTML_ATTR_ONAFTERPRINT 210
+#define HTML_ATTR_ONBEFOREPRINT 211
+#define HTML_ATTR_ONCANPLAY 212
+#define HTML_ATTR_ONCANPLAYTHROUGH 213
+#define HTML_ATTR_ONCONTEXTMENU 214
+#define HTML_ATTR_ONCUECHANGE 215
+#define HTML_ATTR_ONDRAG 216
+#define HTML_ATTR_ONDRAGEND 217
+#define HTML_ATTR_ONDRAGENTER 218
+#define HTML_ATTR_ONDRAGLEAVE 219
+#define HTML_ATTR_ONDRAGOVER 220
+#define HTML_ATTR_ONDRAGSTART 221
+#define HTML_ATTR_ONDROP 222
+#define HTML_ATTR_ONDURATIONCHANGE 223
+#define HTML_ATTR_ONEMPTIED 224
+#define HTML_ATTR_ONENDED 225
+#define HTML_ATTR_ONERROR 226
+#define HTML_ATTR_ONHASHCHANGE 227
+#define HTML_ATTR_ONINPUT 228
+#define HTML_ATTR_ONINVALID 229
+#define HTML_ATTR_ONLOADEDDATA 230
+#define HTML_ATTR_ONLOADEDMETADATA 231
+#define HTML_ATTR_ONLOADSTART 232
+#define HTML_ATTR_ONMESSAGE 233
+#define HTML_ATTR_ONMOUSEWHEEL 234
+#define HTML_ATTR_ONOFFLINE 235
+#define HTML_ATTR_ONONLINE 236
+#define HTML_ATTR_ONPAGEHIDE 237
+#define HTML_ATTR_ONPAGESHOW 238
+#define HTML_ATTR_ONPAUSE 239
+#define HTML_ATTR_ONPLAY 240
+#define HTML_ATTR_ONPLAYING 241
+#define HTML_ATTR_ONPOPSTATE 242
+#define HTML_ATTR_ONPROGRESS 243
+#define HTML_ATTR_ONRATECHANGE 244
+#define HTML_ATTR_ONREADYSTATECHANGE 245
+#define HTML_ATTR_ONREDO 246
+#define HTML_ATTR_ONRESIZE 247
+#define HTML_ATTR_ONSCROLL 248
+#define HTML_ATTR_ONSEEKED 249
+#define HTML_ATTR_ONSEEKING 250
+#define HTML_ATTR_ONSHOW 251
+#define HTML_ATTR_ONSTALLED 252
+#define HTML_ATTR_ONSTORAGE 253
+#define HTML_ATTR_ONSUSPEND 254
+#define HTML_ATTR_ONTIMEUPDATE 255
+#define HTML_ATTR_ONUNDO 256
+#define HTML_ATTR_ONVOLUMECHANGE 257
+#define HTML_ATTR_ONWAITING 258
+#define HTML_ATTR_PATTERN 259
+#define HTML_ATTR_PLACEHOLDER 260
+#define HTML_ATTR_PLAYSINLINE 261
+#define HTML_ATTR_POSTER 262
+#define HTML_ATTR_PRELOAD 263
+#define HTML_ATTR_PUBDATE 264
+#define HTML_ATTR_RADIOGROUP 265
+#define HTML_ATTR_REQUIRED 266
+#define HTML_ATTR_REVERSED 267
+#define HTML_ATTR_SANDBOX 268
+#define HTML_ATTR_SCOPED 269
+#define HTML_ATTR_SEAMLESS 270
+#define HTML_ATTR_SIZES 271
+#define HTML_ATTR_SPELLCHECK 272
+#define HTML_ATTR_SRCDOC 273
+#define HTML_ATTR_SRCLANG 274
+#define HTML_ATTR_STEP 275
+#define HTML_ATTR_AUTOCAPITALIZE 276
-#define HTML_ATTR_COUNT 162
+/* SVG attributes (SVG 1.1) */
+#define HTML_ATTR_SVG_BASEPROFILE 277
+#define HTML_ATTR_SVG_BY 278
+#define HTML_ATTR_SVG_COLORINTERPOLATION 279
+#define HTML_ATTR_SVG_COLORRENDERING 280
+#define HTML_ATTR_SVG_CONTENTSCRIPTTYPE 281
+#define HTML_ATTR_SVG_CONTENTSTYLETYPE 282
+#define HTML_ATTR_SVG_CX 283
+#define HTML_ATTR_SVG_CY 284
+#define HTML_ATTR_SVG_ENTERKEYHINT 285
+#define HTML_ATTR_SVG_EXPORTPARTS 286
+#define HTML_ATTR_SVG_FILL 287
+#define HTML_ATTR_SVG_FILL_RULE 288
+#define HTML_ATTR_SVG_FILL_OPACITY 289
+#define HTML_ATTR_SVG_FILTER 290
+#define HTML_ATTR_SVG_FLOOD_COLOR 291
+#define HTML_ATTR_SVG_FLOOD_OPACITY 292
+#define HTML_ATTR_SVG_FONT_SIZE 293
+#define HTML_ATTR_SVG_FONT_SIZE_ADJUST 294
+#define HTML_ATTR_SVG_FONT_STYLE 295
+#define HTML_ATTR_SVG_FROM 296
+#define HTML_ATTR_SVG_FR 297
+#define HTML_ATTR_SVG_HEIGHT 298
+#define HTML_ATTR_SVG_KEYPOINTS 299
+#define HTML_ATTR_SVG_KEYTIMES 300
+#define HTML_ATTR_SVG_LENGTHADJUST 301
+#define HTML_ATTR_SVG_LETTER_SPACING 302
+#define HTML_ATTR_SVG_LIGHTING_COLOR 303
+#define HTML_ATTR_SVG_MARKERHEIGHT 304
+#define HTML_ATTR_SVG_MARKERWIDTH 305
+#define HTML_ATTR_SVG_MASK 306
+#define HTML_ATTR_SVG_MEDIA 307
+#define HTML_ATTR_SVG_NUMOCTAVES 308
+#define HTML_ATTR_SVG_NONCE 309
+#define HTML_ATTR_SVG_OPACITY 310
+#define HTML_ATTR_SVG_OPERATOR 311
+#define HTML_ATTR_SVG_ORIENT 312
+#define HTML_ATTR_SVG_PART 313
+#define HTML_ATTR_SVG_PATH 314
+#define HTML_ATTR_SVG_PATHLENGTH 315
+#define HTML_ATTR_SVG_PATTERNCONTENTUNITS 316
+#define HTML_ATTR_SVG_PATTERNTRANSFORM 317
+#define HTML_ATTR_SVG_PATTERNUNITS 318
+#define HTML_ATTR_SVG_POINTER_EVENTS 319
+#define HTML_ATTR_SVG_POINTS 320
+#define HTML_ATTR_SVG_POINTSATX 321
+#define HTML_ATTR_SVG_POINTSATY 322
+#define HTML_ATTR_SVG_POINTSATZ 323
+#define HTML_ATTR_SVG_PRESERVEASPECTRATIO 324
+#define HTML_ATTR_SVG_R 325
+#define HTML_ATTR_SVG_RADIUS 326
+#define HTML_ATTR_SVG_REPEATCOUNT 327
+#define HTML_ATTR_SVG_REPEATDUR 328
+#define HTML_ATTR_SVG_RESTART 329
+#define HTML_ATTR_SVG_ROTATE 330
+#define HTML_ATTR_SVG_RX 331
+#define HTML_ATTR_SVG_RY 332
+#define HTML_ATTR_SVG_SCALE 333
+#define HTML_ATTR_SVG_SEED 334
+#define HTML_ATTR_SVG_SHAPE_RENDERING 335
+#define HTML_ATTR_SVG_STARTOFFSET 336
+#define HTML_ATTR_SVG_STDDEVIATION 337
+#define HTML_ATTR_SVG_STITCHTILES 338
+#define HTML_ATTR_SVG_STOP_COLOR 339
+#define HTML_ATTR_SVG_STOP_OPACITY 340
+#define HTML_ATTR_SVG_STROKE 341
+#define HTML_ATTR_SVG_STROKE_DASHARRAY 342
+#define HTML_ATTR_SVG_STROKE_DASHOFFSET 343
+#define HTML_ATTR_SVG_STROKE_LINECAP 344
+#define HTML_ATTR_SVG_STROKE_OPACITY 345
+#define HTML_ATTR_SVG_STROKE_WIDTH 346
+#define HTML_ATTR_SVG_STROKE_LINEJOIN 347
+#define HTML_ATTR_SVG_STROKE_MITERLIMIT 348
+#define HTML_ATTR_SVG_STYLE 349
+#define HTML_ATTR_SVG_SURFACESCALE 350
+#define HTML_ATTR_SVG_SYSTEMLANGUAGE 351
+#define HTML_ATTR_SVG_TABINDEX 352
+#define HTML_ATTR_SVG_TABLEVALUES 353
+#define HTML_ATTR_SVG_TEXT_ANCHOR 354
+#define HTML_ATTR_SVG_TEXT_DECORATION 355
+#define HTML_ATTR_SVG_TEXT_RENDERING 356
+#define HTML_ATTR_SVG_TEXTLENGTH 357
+#define HTML_ATTR_SVG_TO 358
+#define HTML_ATTR_SVG_TRANSFORM 359
+#define HTML_ATTR_SVG_TYPE 360
+#define HTML_ATTR_SVG_VECTOR_EFFECT 361
+#define HTML_ATTR_SVG_VIEWBOX 362
+#define HTML_ATTR_SVG_VISIBILITY 363
+#define HTML_ATTR_SVG_WIDTH 364
+#define HTML_ATTR_SVG_WORD_SPACING 365
+#define HTML_ATTR_SVG_X 366
+#define HTML_ATTR_SVG_X1 367
+#define HTML_ATTR_SVG_X2 368
+#define HTML_ATTR_SVG_XCHANNELSELECTOR 369
+#define HTML_ATTR_SVG_XML_LANG 370
+#define HTML_ATTR_SVG_XML_BASE 371
+#define HTML_ATTR_SVG_Y 372
+#define HTML_ATTR_SVG_Y1 373
+#define HTML_ATTR_SVG_Y2 374
+#define HTML_ATTR_SVG_YCHANNELSELECTOR 375
+#define HTML_ATTR_SVG_Z 376
+#define HTML_ATTR_SVG_ZOOMANDPAN 377
-#define HTML_ATTR_TYPE_UNKNOWN 0
-#define HTML_ATTR_TYPE_ACTION 1
-#define HTML_ATTR_TYPE_ALIGN 2
-#define HTML_ATTR_TYPE_BOOL 3
-#define HTML_ATTR_TYPE_BORDER 4
-#define HTML_ATTR_TYPE_CHARACTER 5
-#define HTML_ATTR_TYPE_CHARSET 6
-#define HTML_ATTR_TYPE_CLEAR 7
-#define HTML_ATTR_TYPE_COLOR 8
-#define HTML_ATTR_TYPE_COLS 9
-#define HTML_ATTR_TYPE_COORDS 10
-#define HTML_ATTR_TYPE_DATE 11
-#define HTML_ATTR_TYPE_FBORDER 12
-#define HTML_ATTR_TYPE_FSUBMIT 13
-#define HTML_ATTR_TYPE_IDDEF 14
-#define HTML_ATTR_TYPE_IDREF 15
-#define HTML_ATTR_TYPE_IDREFS 16
-#define HTML_ATTR_TYPE_LANG 17
-#define HTML_ATTR_TYPE_LENGTH 18
-#define HTML_ATTR_TYPE_LINKTYPES 19
-#define HTML_ATTR_TYPE_MEDIA 20
-#define HTML_ATTR_TYPE_NAME 21
-#define HTML_ATTR_TYPE_NUMBER 22
-#define HTML_ATTR_TYPE_PCDATA 23
-#define HTML_ATTR_TYPE_SCOPE 24
-#define HTML_ATTR_TYPE_SCRIPT 25
-#define HTML_ATTR_TYPE_SCROLL 26
-#define HTML_ATTR_TYPE_SHAPE 27
-#define HTML_ATTR_TYPE_TARGET 28
-#define HTML_ATTR_TYPE_TEXTDIR 29
-#define HTML_ATTR_TYPE_TFRAME 30
-#define HTML_ATTR_TYPE_TRULES 31
-#define HTML_ATTR_TYPE_TYPE 32
-#define HTML_ATTR_TYPE_URL 33
-#define HTML_ATTR_TYPE_URLS 34
-#define HTML_ATTR_TYPE_VALIGN 35
-#define HTML_ATTR_TYPE_VTYPE 36
-#define HTML_ATTR_TYPE_XTYPE 37
+/* MathML