1 /* $LynxId: src1_HTMLDTD.h,v 1.45 2011/10/07 00:54:36 Kihara.Hideto Exp $ */
2 #ifndef src_HTMLDTD_H1
3 #define src_HTMLDTD_H1 1
4 
5 #ifndef once_HTMLDTD
6 #define once_HTMLDTD 1
7 
8 #define T_A             0x00008,0x0B007,0x0FF17,0x37787,0x77BA7,0x8604F,0x00014
9 #define T_ABBR          0x00002,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00003,0x00000
10 #define T_ACRONYM       0x00002,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00003,0x00000
11 #define T_ADDRESS       0x00200,0x0F14F,0x8FFFF,0x36680,0xB6FAF,0x80317,0x00000
12 #define T_APPLET        0x02000,0x0B0CF,0x8FFFF,0x37F9F,0xB7FBF,0x8300F,0x00000
13 #define T_AREA          0x08000,0x00000,0x00000,0x08000,0x3FFFF,0x00F1F,0x00001
14 #define T_AU            0x00002,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00003,0x00000
15 #define T_AUTHOR        0x00002,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00003,0x00000
16 #define T_B             0x00001,0x8B04F,0xAFFFF,0xA778F,0xF7FBF,0x00001,0x00014
17 #define T_BANNER        0x00200,0x0FB8F,0x0FFFF,0x30000,0x30000,0x8031F,0x00000
18 #define T_BASE          0x40000,0x00000,0x00000,0x50000,0x50000,0x8000F,0x00001
19 #define T_BASEFONT      0x01000,0x00000,0x00000,0x377AF,0x37FAF,0x8F000,0x00001
20 #define T_BDO           0x00100,0x0B04F,0x8FFFF,0x36680,0xB6FAF,0x0033F,0x00000
21 #define T_BGSOUND       0x01000,0x00000,0x00000,0x777AF,0x77FAF,0x8730F,0x00001
22 #define T_BIG           0x00001,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00014
23 #define T_BLINK         0x00001,0x8B04F,0x8FFFF,0xA778F,0xF7FAF,0x00001,0x00014
24 #define T_BLOCKQUOTE    0x00200,0xAFBCF,0xAFFFF,0xB6680,0xB6FAF,0x8031F,0x00000
25 #define T_BODY          0x20000,0x2FB8F,0x2FFFF,0x30000,0x30000,0xDFF7F,0x00003
26 #define T_BODYTEXT      0x20000,0x0FB8F,0xAFFFF,0x30200,0xB7FAF,0x8F17F,0x00003
27 #define T_BQ            0x00200,0xAFBCF,0xAFFFF,0xB6680,0xB6FAF,0x8031F,0x00000
28 #define T_BR            0x01000,0x00000,0x00000,0x377BF,0x77FBF,0x8101F,0x00001
29 #define T_BUTTON        0x02000,0x0BB07,0x0FF37,0x0378F,0x37FBF,0x8115F,0x00000
30 #define T_CAPTION       0x00100,0x0B04F,0x8FFFF,0x06A00,0xB6FA7,0x8035F,0x00000
31 #define T_CENTER        0x00200,0x8FBCF,0x8FFFF,0xB6680,0xB6FA7,0x8071F,0x00000
32 #define T_CITE          0x00002,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00002,0x00010
33 #define T_CODE          0x00002,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00002,0x00000
34 #define T_COL           0x04000,0x00000,0x00000,0x00820,0x36FA7,0x88F5F,0x00001
35 #define T_COLGROUP      0x00020,0x04000,0x04000,0x00800,0x36FA7,0x8875F,0x00001
36 #define T_COMMENT       0x00004,0x00000,0x00000,0xA77AF,0x7FFFF,0x00003,0x00000
37 #define T_CREDIT        0x00100,0x0B04F,0x8FFFF,0x06A00,0xB7FBF,0x8030F,0x00000
38 #define T_DD            0x00400,0x0FBCF,0x8FFFF,0x00800,0xB6FFF,0x8071F,0x00001
39 #define T_DEL           0x00002,0x8BBCF,0x8FFFF,0xA7F8F,0xF7FBF,0x00003,0x00000
40 #define T_DFN           0x00002,0x8B0CF,0x8FFFF,0x8778F,0xF7FBF,0x00003,0x00000
41 #define T_DIR           0x00800,0x0B400,0x0F75F,0x37680,0x36FB7,0x84F7F,0x00000
42 #define T_DIV           0x00200,0x8FBCF,0x8FFFF,0xB66A0,0xB7FFF,0x8031F,0x00004
43 #define T_DL            0x00800,0x0C480,0x8FFFF,0x36680,0xB7FB7,0x0075F,0x00000
44 #define T_DLC           0x00800,0x0C480,0x8FFFF,0x36680,0xB7FB7,0x0075F,0x00000
45 #define T_DT            0x00400,0x0B04F,0x0B1FF,0x00800,0x17FFF,0x8071F,0x00001
46 #define T_EM            0x00002,0x8B04F,0x8FFFF,0xA778F,0xF7FAF,0x00003,0x00010
47 #define T_EMBED         0x02000,0x8F107,0x8FFF7,0xB6FBF,0xB7FBF,0x1FF7F,0x00001
48 #define T_FIELDSET      0x00200,0x8FB4F,0x8FF7F,0x86787,0xB7FF7,0x8805F,0x00000
49 #define T_FIG           0x00200,0x0FB00,0x8FFFF,0x36680,0xB6FBF,0x8834F,0x00000
50 #define T_FN            0x00200,0x8FBCF,0x8FFFF,0xB6680,0xB7EBF,0x8114F,0x00000
51 #define T_FONT          0x00001,0x8B04F,0x8FFFF,0xB778F,0xF7FBF,0x00001,0x00014
52 #define T_FORM          0x00080,0x0FF6F,0x0FF7F,0x36E07,0x32F07,0x88DFF,0x00000
53 #define T_FRAME         0x10000,0x00000,0x00000,0x10000,0x10000,0x9FFFF,0x00001
54 #define T_FRAMESET      0x10000,0x90000,0x90000,0x90000,0x93000,0x9FFFF,0x00000
55 #define T_H1            0x00100,0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
56 #define T_H2            0x00100,0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
57 #define T_H3            0x00100,0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
58 #define T_H4            0x00100,0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
59 #define T_H5            0x00100,0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
60 #define T_H6            0x00100,0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
61 #define T_HEAD          0x40000,0x4F000,0x47000,0x10000,0x10000,0x9FF7F,0x00007
62 #define T_HR            0x04000,0x00000,0x00000,0x3FE80,0x3FFBF,0x87F37,0x00001
63 #define T_HTML          0x10000,0x7FB8F,0x7FFFF,0x00000,0x00000,0x1FFFF,0x00003
64 #define T_HY            0x01000,0x00000,0x00000,0x3779F,0x77FBF,0x8101F,0x00001
65 #define T_I             0x00001,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00014
66 #define T_IFRAME        0x02000,0x8FBCF,0x8FFFF,0xB679F,0xB6FBF,0xD315F,0x00000
67 #define T_IMG           0x01000,0x00000,0x00000,0x3779F,0x37FBF,0x80000,0x00001
68 #define T_INPUT         0x00040,0x00000,0x00000,0x03F87,0x37F87,0x8904F,0x00001
69 #define T_INS           0x00002,0x8BBCF,0x8FFFF,0xA7F8F,0xF7FBF,0x00003,0x00000
70 #define T_ISINDEX       0x08000,0x00000,0x00000,0x7778F,0x7FFAF,0x80007,0x00001
71 #define T_KBD           0x00002,0x00000,0x00000,0x2778F,0x77FBF,0x00003,0x00000
72 #define T_KEYGEN        0x00040,0x00000,0x00000,0x07FB7,0x37FB7,0x80070,0x00001
73 #define T_LABEL         0x00002,0x0304F,0x0FFFF,0x0679F,0x36FBF,0x00007,0x00000
74 #define T_LEGEND        0x00002,0x0B04F,0x8FF7F,0x00200,0xB7FA7,0x00003,0x00000
75 #define T_LH            0x00400,0x0BB7F,0x8FFFF,0x00800,0x97FFF,0x8071F,0x00001
76 #define T_LI            0x00400,0x0BBFF,0x8FFFF,0x00800,0x97FFF,0x8071F,0x00001
77 #define T_LINK          0x08000,0x00000,0x00000,0x50000,0x50000,0x0FF7F,0x00001
78 #define T_LISTING       0x00800,0x00000,0x00000,0x36600,0x36F00,0x80F1F,0x00000
79 #define T_MAP           0x08000,0x08000,0x08000,0x37FCF,0x37FBF,0x0051F,0x00000
80 #define T_MARQUEE       0x04000,0x0000F,0x8F01F,0x37787,0xB7FA7,0x8301C,0x00000
81 #define T_MATH          0x00004,0x0B05F,0x8FFFF,0x2778F,0xF7FBF,0x0001F,0x00000
82 #define T_MENU          0x00800,0x0B400,0x0F75F,0x17680,0x36FB7,0x88F7F,0x00000
83 #define T_META          0x08000,0x00000,0x00000,0x50000,0x50000,0x0FF7F,0x00001
84 #define T_NEXTID        0x01000,0x00000,0x00000,0x50000,0x1FFF7,0x00001,0x00001
85 #define T_NOFRAMES      0x20000,0x2FB8F,0x0FFFF,0x17000,0x17000,0x0CF5F,0x00000
86 #define T_NOTE          0x00200,0x0BBAF,0x8FFFF,0x376B0,0xB7FFF,0x8031F,0x00000
87 #define T_OBJECT        0x02000,0x8FBCF,0x8FFFF,0xB679F,0xB6FBF,0x83D5F,0x00020
88 #define T_OL            0x00800,0x0C400,0x8FFFF,0x37680,0xB7FB7,0x88F7F,0x00000
89 #define T_OPTION        0x08000,0x00000,0x00000,0x00040,0x37FFF,0x8031F,0x00001
90 #define T_OVERLAY       0x04000,0x00000,0x00000,0x00200,0x37FBF,0x83F7F,0x00001
91 #define T_P             0x00100,0x0B04F,0x8FFFF,0x36680,0xB6FA7,0x80117,0x00001
92 #define T_PARAM         0x01000,0x00000,0x00000,0x33500,0x37FFF,0x81560,0x00001
93 #define T_PLAINTEXT     0x10000,0xFFFFF,0xFFFFF,0x90000,0x90000,0x3FFFF,0x00001
94 #define T_PRE           0x00200,0x0F04F,0x0F05E,0x36680,0x36FF0,0x8071E,0x00000
95 #define T_Q             0x00002,0x8B04F,0x8FFFF,0xA778F,0xF7FAF,0x00003,0x00000
96 #define T_S             0x00001,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00000
97 #define T_SAMP          0x00002,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00002,0x00010
98 #define T_SCRIPT        0x02000,0x00000,0x00000,0x77F9F,0x77FFF,0x87D5F,0x00000
99 #define T_SELECT        0x00040,0x08000,0x08000,0x03FAF,0x33FBF,0x80D5F,0x00008
100 #define T_SHY           0x01000,0x00000,0x00000,0x3779F,0x77FBF,0x8101F,0x00001
101 #define T_SMALL         0x00001,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00014
102 #define T_SPAN          0x00002,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x80003,0x00000
103 #define T_SPOT          0x00008,0x00000,0x00000,0x3FFF7,0x3FFF7,0x00008,0x00001
104 #define T_STRIKE        0x00001,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00000
105 #define T_STRONG        0x00002,0x8B04F,0x8FFFF,0xA778F,0xF7FAF,0x00003,0x00010
106 #define T_STYLE         0x40000,0x00000,0x00000,0x7638F,0x76FAF,0x8001F,0x00000
107 #define T_SUB           0x00004,0x8B05F,0x8FFFF,0x8779F,0xF7FBF,0x00007,0x00000
108 #define T_SUP           0x00004,0x8B05F,0x8FFFF,0x8779F,0xF7FBF,0x00007,0x00000
109 #define T_TAB           0x01000,0x00000,0x00000,0x3778F,0x57FAF,0x00001,0x00001
110 #define T_TABLE         0x00800,0x0F1E0,0x8FFFF,0x36680,0xB6FA7,0x8C57F,0x00000
111 #define T_TBODY         0x00020,0x00020,0x8FFFF,0x00880,0xB7FB7,0x8C75F,0x00003
112 #define T_TD            0x00400,0x0FBCF,0x8FFFF,0x00020,0xB7FB7,0x8C75F,0x00001
113 #define T_TEXTAREA      0x00040,0x00000,0x00000,0x07F8F,0x33FBF,0x80D5F,0x00040
114 #define T_TEXTFLOW      0x20000,0x8FBFF,0x9FFFF,0x977B0,0xB7FB7,0x9B00F,0x00003
115 #define T_TFOOT         0x00020,0x00020,0x8FFFF,0x00800,0xB7FB7,0x8CF5F,0x00001
116 #define T_TH            0x00400,0x0FBCF,0x0FFFF,0x00020,0xB7FB7,0x8CF5F,0x00001
117 #define T_THEAD         0x00020,0x00020,0x8FFFF,0x00800,0xB7FB7,0x8CF5F,0x00001
118 #define T_TITLE         0x40000,0x00000,0x00000,0x50000,0x50000,0x0031F,0x0000C
119 #define T_TR            0x00020,0x00400,0x8FFFF,0x00820,0xB7FB7,0x8C75F,0x00001
120 #define T_TT            0x00001,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00010
121 #define T_U             0x00001,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00014
122 #define T_UL            0x00800,0x0C480,0x8FFFF,0x36680,0xB7FFF,0x8075F,0x00000
123 #define T_VAR           0x00002,0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00000
124 #define T_WBR           0x00001,0x00000,0x00000,0x3778F,0x77FBF,0x8101F,0x00001
125 #define T_XMP           0x00800,0x00000,0x00000,0x367E0,0x36FFF,0x0875F,0x00001
126 #define T_OBJECT_PCDATA 0x02000,0x8FBCF,0x8FFFF,0xB679F,0xB6FBF,0x83D5F,0x00008
127 #define T__UNREC_	0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000
128 #ifdef USE_PRETTYSRC
129 # define N HTMLA_NORMAL
130 # define i HTMLA_ANAME
131 # define h HTMLA_HREF
132 # define c HTMLA_CLASS
133 # define x HTMLA_AUXCLASS
134 # define T(t) , t
135 #else
136 # define T(t)			/*nothing */
137 #endif
138 /* *INDENT-OFF* */
139 
140 #define ATTR_TYPE(name) #name, name##_attr_list
141 
142 /* generic attributes, used in different tags */
143 static const attr core_attr_list[] = {
144 	{ "CLASS"         T(c) },
145 	{ "ID"            T(i) },
146 	{ "STYLE"         T(N) },
147 	{ "TITLE"         T(N) },
148 	{ 0               T(N) }	/* Terminate list */
149 };
150 
151 static const AttrType core_attr_type[] = {
152 	{ ATTR_TYPE(core) },
153 	{ 0, 0 },
154 };
155 
156 static const attr i18n_attr_list[] = {
157 	{ "DIR"           T(N) },
158 	{ "LANG"          T(N) },
159 	{ 0               T(N) }	/* Terminate list */
160 };
161 
162 static const AttrType i18n_attr_type[] = {
163 	{ ATTR_TYPE(i18n) },
164 	{ 0, 0 },
165 };
166 
167 static const attr events_attr_list[] = {
168 	{ "ONCLICK"       T(N) },
169 	{ "ONDBLCLICK"    T(N) },
170 	{ "ONKEYDOWN"     T(N) },
171 	{ "ONKEYPRESS"    T(N) },
172 	{ "ONKEYUP"       T(N) },
173 	{ "ONMOUSEDOWN"   T(N) },
174 	{ "ONMOUSEMOVE"   T(N) },
175 	{ "ONMOUSEOUT"    T(N) },
176 	{ "ONMOUSEOVER"   T(N) },
177 	{ "ONMOUSEUP"     T(N) },
178 	{ 0               T(N) }	/* Terminate list */
179 };
180 
181 static const AttrType events_attr_type[] = {
182 	{ ATTR_TYPE(events) },
183 	{ 0, 0 },
184 };
185 
186 static const attr align_attr_list[] = {
187 	{ "ALIGN"         T(N) },
188 	{ 0               T(N) }	/* Terminate list */
189 };
190 
191 static const AttrType align_attr_type[] = {
192 	{ ATTR_TYPE(align) },
193 	{ 0, 0 },
194 };
195 
196 static const attr cellalign_attr_list[] = {
197 	{ "ALIGN"         T(N) },
198 	{ "CHAR"          T(N) },
199 	{ "CHAROFF"       T(N) },
200 	{ "VALIGN"        T(N) },
201 	{ 0               T(N) }	/* Terminate list */
202 };
203 
204 static const AttrType cellalign_attr_type[] = {
205 	{ ATTR_TYPE(cellalign) },
206 	{ 0, 0 },
207 };
208 
209 static const attr bgcolor_attr_list[] = {
210 	{ "BGCOLOR"       T(N) },
211 	{ 0               T(N) }	/* Terminate list */
212 };
213 
214 static const AttrType bgcolor_attr_type[] = {
215 	{ ATTR_TYPE(bgcolor) },
216 	{ 0, 0 },
217 };
218 
219 
220 /* tables defining attributes per-tag in terms of generic attributes (editable) */
221 static const attr A_attr_list[] = {
222 	{ "ACCESSKEY"     T(N) },
223 	{ "CHARSET"       T(N) },
224 	{ "CLEAR"         T(N) },
225 	{ "COORDS"        T(N) },
226 	{ "HREF"          T(h) },
227 	{ "HREFLANG"      T(N) },
228 	{ "ISMAP"         T(N) },
229 	{ "MD"            T(N) },
230 	{ "NAME"          T(i) },
231 	{ "NOTAB"         T(N) },
232 	{ "ONBLUR"        T(N) },
233 	{ "ONFOCUS"       T(N) },
234 	{ "REL"           T(N) },
235 	{ "REV"           T(N) },
236 	{ "SHAPE"         T(N) },
237 	{ "TABINDEX"      T(N) },
238 	{ "TARGET"        T(N) },
239 	{ "TYPE"          T(N) },
240 	{ "URN"           T(N) },
241 	{ 0               T(N) }	/* Terminate list */
242 };
243 
244 static const AttrType A_attr_type[] = {
245 	{ ATTR_TYPE(core) },
246 	{ ATTR_TYPE(events) },
247 	{ ATTR_TYPE(i18n) },
248 	{ ATTR_TYPE(A) },
249 	{ 0, 0 },
250 };
251 
252 static const attr ADDRESS_attr_list[] = {
253 	{ "CLEAR"         T(N) },
254 	{ "NOWRAP"        T(N) },
255 	{ 0               T(N) }	/* Terminate list */
256 };
257 
258 static const AttrType ADDRESS_attr_type[] = {
259 	{ ATTR_TYPE(core) },
260 	{ ATTR_TYPE(i18n) },
261 	{ ATTR_TYPE(ADDRESS) },
262 	{ 0, 0 },
263 };
264 
265 static const attr APPLET_attr_list[] = {
266 	{ "ALT"           T(N) },
267 	{ "CLEAR"         T(N) },
268 	{ "CODE"          T(N) },
269 	{ "CODEBASE"      T(h) },
270 	{ "DOWNLOAD"      T(N) },
271 	{ "HEIGHT"        T(N) },
272 	{ "HSPACE"        T(N) },
273 	{ "NAME"          T(i) },
274 	{ "VSPACE"        T(N) },
275 	{ "WIDTH"         T(N) },
276 	{ 0               T(N) }	/* Terminate list */
277 };
278 
279 static const AttrType APPLET_attr_type[] = {
280 	{ ATTR_TYPE(align) },
281 	{ ATTR_TYPE(core) },
282 	{ ATTR_TYPE(i18n) },
283 	{ ATTR_TYPE(APPLET) },
284 	{ 0, 0 },
285 };
286 
287 static const attr AREA_attr_list[] = {
288 	{ "ACCESSKEY"     T(N) },
289 	{ "ALT"           T(N) },
290 	{ "CLEAR"         T(N) },
291 	{ "COORDS"        T(N) },
292 	{ "HREF"          T(h) },
293 	{ "NOHREF"        T(N) },
294 	{ "NOTAB"         T(N) },
295 	{ "ONBLUR"        T(N) },
296 	{ "ONFOCUS"       T(N) },
297 	{ "SHAPE"         T(N) },
298 	{ "TABINDEX"      T(N) },
299 	{ "TARGET"        T(N) },
300 	{ 0               T(N) }	/* Terminate list */
301 };
302 
303 static const AttrType AREA_attr_type[] = {
304 	{ ATTR_TYPE(core) },
305 	{ ATTR_TYPE(events) },
306 	{ ATTR_TYPE(i18n) },
307 	{ ATTR_TYPE(AREA) },
308 	{ 0, 0 },
309 };
310 
311 static const attr BASE_attr_list[] = {
312 	{ "HREF"          T(h) },
313 	{ "TARGET"        T(N) },
314 	{ 0               T(N) }	/* Terminate list */
315 };
316 
317 static const AttrType BASE_attr_type[] = {
318 	{ ATTR_TYPE(core) },
319 	{ ATTR_TYPE(BASE) },
320 	{ 0, 0 },
321 };
322 
323 static const attr BGSOUND_attr_list[] = {
324 	{ "CLEAR"         T(N) },
325 	{ "LOOP"          T(N) },
326 	{ "SRC"           T(h) },
327 	{ 0               T(N) }	/* Terminate list */
328 };
329 
330 static const AttrType BGSOUND_attr_type[] = {
331 	{ ATTR_TYPE(core) },
332 	{ ATTR_TYPE(i18n) },
333 	{ ATTR_TYPE(BGSOUND) },
334 	{ 0, 0 },
335 };
336 
337 static const attr BODY_attr_list[] = {
338 	{ "ALINK"         T(N) },
339 	{ "BACKGROUND"    T(h) },
340 	{ "CLEAR"         T(N) },
341 	{ "LINK"          T(N) },
342 	{ "ONLOAD"        T(N) },
343 	{ "ONUNLOAD"      T(N) },
344 	{ "TEXT"          T(N) },
345 	{ "VLINK"         T(N) },
346 	{ 0               T(N) }	/* Terminate list */
347 };
348 
349 static const AttrType BODY_attr_type[] = {
350 	{ ATTR_TYPE(bgcolor) },
351 	{ ATTR_TYPE(core) },
352 	{ ATTR_TYPE(i18n) },
353 	{ ATTR_TYPE(BODY) },
354 	{ 0, 0 },
355 };
356 
357 static const attr BODYTEXT_attr_list[] = {
358 	{ "CLEAR"         T(N) },
359 	{ "DATA"          T(N) },
360 	{ "NAME"          T(N) },
361 	{ "OBJECT"        T(N) },
362 	{ "REF"           T(N) },
363 	{ "TYPE"          T(N) },
364 	{ "VALUE"         T(N) },
365 	{ "VALUETYPE"     T(N) },
366 	{ 0               T(N) }	/* Terminate list */
367 };
368 
369 static const AttrType BODYTEXT_attr_type[] = {
370 	{ ATTR_TYPE(core) },
371 	{ ATTR_TYPE(i18n) },
372 	{ ATTR_TYPE(BODYTEXT) },
373 	{ 0, 0 },
374 };
375 
376 static const attr BQ_attr_list[] = {
377 	{ "CITE"          T(h) },
378 	{ "CLEAR"         T(N) },
379 	{ "NOWRAP"        T(N) },
380 	{ 0               T(N) }	/* Terminate list */
381 };
382 
383 static const AttrType BQ_attr_type[] = {
384 	{ ATTR_TYPE(core) },
385 	{ ATTR_TYPE(i18n) },
386 	{ ATTR_TYPE(BQ) },
387 	{ 0, 0 },
388 };
389 
390 static const attr BUTTON_attr_list[] = {
391 	{ "ACCESSKEY"     T(N) },
392 	{ "CLEAR"         T(N) },
393 	{ "DISABLED"      T(N) },
394 	{ "NAME"          T(N) },
395 	{ "ONBLUR"        T(N) },
396 	{ "ONFOCUS"       T(N) },
397 	{ "READONLY"      T(N) },
398 	{ "TABINDEX"      T(N) },
399 	{ "TYPE"          T(N) },
400 	{ "VALUE"         T(N) },
401 	{ 0               T(N) }	/* Terminate list */
402 };
403 
404 static const AttrType BUTTON_attr_type[] = {
405 	{ ATTR_TYPE(core) },
406 	{ ATTR_TYPE(events) },
407 	{ ATTR_TYPE(i18n) },
408 	{ ATTR_TYPE(BUTTON) },
409 	{ 0, 0 },
410 };
411 
412 static const attr CAPTION_attr_list[] = {
413 	{ "ACCESSKEY"     T(N) },
414 	{ "CLEAR"         T(N) },
415 	{ 0               T(N) }	/* Terminate list */
416 };
417 
418 static const AttrType CAPTION_attr_type[] = {
419 	{ ATTR_TYPE(align) },
420 	{ ATTR_TYPE(core) },
421 	{ ATTR_TYPE(events) },
422 	{ ATTR_TYPE(i18n) },
423 	{ ATTR_TYPE(CAPTION) },
424 	{ 0, 0 },
425 };
426 
427 static const attr COL_attr_list[] = {
428 	{ "CLEAR"         T(N) },
429 	{ "SPAN"          T(N) },
430 	{ "WIDTH"         T(N) },
431 	{ 0               T(N) }	/* Terminate list */
432 };
433 
434 static const AttrType COL_attr_type[] = {
435 	{ ATTR_TYPE(cellalign) },
436 	{ ATTR_TYPE(core) },
437 	{ ATTR_TYPE(events) },
438 	{ ATTR_TYPE(i18n) },
439 	{ ATTR_TYPE(COL) },
440 	{ 0, 0 },
441 };
442 
443 static const attr DEL_attr_list[] = {
444 	{ "CITE"          T(N) },
445 	{ "DATETIME"      T(N) },
446 	{ 0               T(N) }	/* Terminate list */
447 };
448 
449 static const AttrType DEL_attr_type[] = {
450 	{ ATTR_TYPE(core) },
451 	{ ATTR_TYPE(events) },
452 	{ ATTR_TYPE(i18n) },
453 	{ ATTR_TYPE(DEL) },
454 	{ 0, 0 },
455 };
456 
457 static const attr DIV_attr_list[] = {
458 	{ "CLEAR"         T(N) },
459 	{ 0               T(N) }	/* Terminate list */
460 };
461 
462 static const AttrType DIV_attr_type[] = {
463 	{ ATTR_TYPE(align) },
464 	{ ATTR_TYPE(core) },
465 	{ ATTR_TYPE(i18n) },
466 	{ ATTR_TYPE(DIV) },
467 	{ 0, 0 },
468 };
469 
470 static const attr DL_attr_list[] = {
471 	{ "CLEAR"         T(N) },
472 	{ "COMPACT"       T(N) },
473 	{ 0               T(N) }	/* Terminate list */
474 };
475 
476 static const AttrType DL_attr_type[] = {
477 	{ ATTR_TYPE(core) },
478 	{ ATTR_TYPE(i18n) },
479 	{ ATTR_TYPE(DL) },
480 	{ 0, 0 },
481 };
482 
483 static const attr EMBED_attr_list[] = {
484 	{ "ALT"           T(N) },
485 	{ "BORDER"        T(N) },
486 	{ "CLEAR"         T(N) },
487 	{ "HEIGHT"        T(N) },
488 	{ "IMAGEMAP"      T(N) },
489 	{ "ISMAP"         T(N) },
490 	{ "MD"            T(N) },
491 	{ "NAME"          T(i) },
492 	{ "NOFLOW"        T(N) },
493 	{ "PARAMS"        T(N) },
494 	{ "SRC"           T(h) },
495 	{ "UNITS"         T(N) },
496 	{ "USEMAP"        T(N) },
497 	{ "WIDTH"         T(N) },
498 	{ 0               T(N) }	/* Terminate list */
499 };
500 
501 static const AttrType EMBED_attr_type[] = {
502 	{ ATTR_TYPE(align) },
503 	{ ATTR_TYPE(core) },
504 	{ ATTR_TYPE(i18n) },
505 	{ ATTR_TYPE(EMBED) },
506 	{ 0, 0 },
507 };
508 
509 static const attr FIG_attr_list[] = {
510 	{ "BORDER"        T(N) },
511 	{ "CLEAR"         T(N) },
512 	{ "HEIGHT"        T(N) },
513 	{ "IMAGEMAP"      T(N) },
514 	{ "ISOBJECT"      T(N) },
515 	{ "MD"            T(N) },
516 	{ "NOFLOW"        T(N) },
517 	{ "SRC"           T(h) },
518 	{ "UNITS"         T(N) },
519 	{ "WIDTH"         T(N) },
520 	{ 0               T(N) }	/* Terminate list */
521 };
522 
523 static const AttrType FIG_attr_type[] = {
524 	{ ATTR_TYPE(align) },
525 	{ ATTR_TYPE(core) },
526 	{ ATTR_TYPE(i18n) },
527 	{ ATTR_TYPE(FIG) },
528 	{ 0, 0 },
529 };
530 
531 static const attr FONT_attr_list[] = {
532 	{ "CLEAR"         T(N) },
533 	{ "COLOR"         T(N) },
534 	{ "END"           T(N) },
535 	{ "FACE"          T(N) },
536 	{ "SIZE"          T(N) },
537 	{ 0               T(N) }	/* Terminate list */
538 };
539 
540 static const AttrType FONT_attr_type[] = {
541 	{ ATTR_TYPE(core) },
542 	{ ATTR_TYPE(i18n) },
543 	{ ATTR_TYPE(FONT) },
544 	{ 0, 0 },
545 };
546 
547 static const attr FORM_attr_list[] = {
548 	{ "ACCEPT"        T(N) },
549 	{ "ACCEPT-CHARSET" T(N) },
550 	{ "ACTION"        T(h) },
551 	{ "CLEAR"         T(N) },
552 	{ "ENCTYPE"       T(N) },
553 	{ "METHOD"        T(N) },
554 	{ "ONRESET"       T(N) },
555 	{ "ONSUBMIT"      T(N) },
556 	{ "SCRIPT"        T(N) },
557 	{ "SUBJECT"       T(N) },
558 	{ "TARGET"        T(N) },
559 	{ 0               T(N) }	/* Terminate list */
560 };
561 
562 static const AttrType FORM_attr_type[] = {
563 	{ ATTR_TYPE(core) },
564 	{ ATTR_TYPE(i18n) },
565 	{ ATTR_TYPE(FORM) },
566 	{ 0, 0 },
567 };
568 
569 static const attr FRAME_attr_list[] = {
570 	{ "FRAMEBORDER"   T(N) },
571 	{ "LONGDESC"      T(h) },
572 	{ "MARGINHEIGHT"  T(N) },
573 	{ "MARGINWIDTH"   T(N) },
574 	{ "NAME"          T(N) },
575 	{ "NORESIZE"      T(N) },
576 	{ "SCROLLING"     T(N) },
577 	{ "SRC"           T(h) },
578 	{ 0               T(N) }	/* Terminate list */
579 };
580 
581 static const AttrType FRAME_attr_type[] = {
582 	{ ATTR_TYPE(core) },
583 	{ ATTR_TYPE(FRAME) },
584 	{ 0, 0 },
585 };
586 
587 static const attr FRAMESET_attr_list[] = {
588 	{ "COLS"          T(N) },
589 	{ "ONLOAD"        T(N) },
590 	{ "ONUNLOAD"      T(N) },
591 	{ "ROWS"          T(N) },
592 	{ 0               T(N) }	/* Terminate list */
593 };
594 
595 static const AttrType FRAMESET_attr_type[] = {
596 	{ ATTR_TYPE(FRAMESET) },
597 	{ 0, 0 },
598 };
599 
600 static const attr GEN_attr_list[] = {
601 	{ "CLEAR"         T(N) },
602 	{ 0               T(N) }	/* Terminate list */
603 };
604 
605 static const AttrType GEN_attr_type[] = {
606 	{ ATTR_TYPE(core) },
607 	{ ATTR_TYPE(events) },
608 	{ ATTR_TYPE(i18n) },
609 	{ ATTR_TYPE(GEN) },
610 	{ 0, 0 },
611 };
612 
613 static const attr H_attr_list[] = {
614 	{ "CLEAR"         T(N) },
615 	{ "DINGBAT"       T(N) },
616 	{ "MD"            T(N) },
617 	{ "NOWRAP"        T(N) },
618 	{ "SEQNUM"        T(N) },
619 	{ "SKIP"          T(N) },
620 	{ "SRC"           T(h) },
621 	{ 0               T(N) }	/* Terminate list */
622 };
623 
624 static const AttrType H_attr_type[] = {
625 	{ ATTR_TYPE(align) },
626 	{ ATTR_TYPE(core) },
627 	{ ATTR_TYPE(events) },
628 	{ ATTR_TYPE(i18n) },
629 	{ ATTR_TYPE(H) },
630 	{ 0, 0 },
631 };
632 
633 static const attr HR_attr_list[] = {
634 	{ "CLEAR"         T(N) },
635 	{ "MD"            T(N) },
636 	{ "NOSHADE"       T(N) },
637 	{ "SIZE"          T(N) },
638 	{ "SRC"           T(h) },
639 	{ "WIDTH"         T(N) },
640 	{ 0               T(N) }	/* Terminate list */
641 };
642 
643 static const AttrType HR_attr_type[] = {
644 	{ ATTR_TYPE(align) },
645 	{ ATTR_TYPE(core) },
646 	{ ATTR_TYPE(i18n) },
647 	{ ATTR_TYPE(HR) },
648 	{ 0, 0 },
649 };
650 
651 static const attr IFRAME_attr_list[] = {
652 	{ "FRAMEBORDER"   T(N) },
653 	{ "HEIGHT"        T(N) },
654 	{ "LONGDESC"      T(h) },
655 	{ "MARGINHEIGHT"  T(N) },
656 	{ "MARGINWIDTH"   T(N) },
657 	{ "NAME"          T(N) },
658 	{ "SCROLLING"     T(N) },
659 	{ "SRC"           T(h) },
660 	{ "WIDTH"         T(N) },
661 	{ 0               T(N) }	/* Terminate list */
662 };
663 
664 static const AttrType IFRAME_attr_type[] = {
665 	{ ATTR_TYPE(align) },
666 	{ ATTR_TYPE(core) },
667 	{ ATTR_TYPE(IFRAME) },
668 	{ 0, 0 },
669 };
670 
671 static const attr IMG_attr_list[] = {
672 	{ "ALT"           T(N) },
673 	{ "BORDER"        T(N) },
674 	{ "CLEAR"         T(N) },
675 	{ "HEIGHT"        T(N) },
676 	{ "HSPACE"        T(N) },
677 	{ "ISMAP"         T(N) },
678 	{ "ISOBJECT"      T(N) },
679 	{ "LONGDESC"      T(h) },
680 	{ "MD"            T(N) },
681 	{ "NAME"          T(N) },
682 	{ "SRC"           T(h) },
683 	{ "UNITS"         T(N) },
684 	{ "USEMAP"        T(h) },
685 	{ "VSPACE"        T(N) },
686 	{ "WIDTH"         T(N) },
687 	{ 0               T(N) }	/* Terminate list */
688 };
689 
690 static const AttrType IMG_attr_type[] = {
691 	{ ATTR_TYPE(align) },
692 	{ ATTR_TYPE(core) },
693 	{ ATTR_TYPE(events) },
694 	{ ATTR_TYPE(i18n) },
695 	{ ATTR_TYPE(IMG) },
696 	{ 0, 0 },
697 };
698 
699 static const attr INPUT_attr_list[] = {
700 	{ "ACCEPT"        T(N) },
701 	{ "ACCEPT-CHARSET" T(N) },
702 	{ "ACCESSKEY"     T(N) },
703 	{ "ALT"           T(N) },
704 	{ "CHECKED"       T(N) },
705 	{ "CLEAR"         T(N) },
706 	{ "DISABLED"      T(N) },
707 	{ "ERROR"         T(N) },
708 	{ "HEIGHT"        T(N) },
709 	{ "ISMAP"         T(N) },
710 	{ "MAX"           T(N) },
711 	{ "MAXLENGTH"     T(N) },
712 	{ "MD"            T(N) },
713 	{ "MIN"           T(N) },
714 	{ "NAME"          T(N) },
715 	{ "NOTAB"         T(N) },
716 	{ "ONBLUR"        T(N) },
717 	{ "ONCHANGE"      T(N) },
718 	{ "ONFOCUS"       T(N) },
719 	{ "ONSELECT"      T(N) },
720 	{ "READONLY"      T(N) },
721 	{ "SIZE"          T(N) },
722 	{ "SRC"           T(h) },
723 	{ "TABINDEX"      T(N) },
724 	{ "TYPE"          T(N) },
725 	{ "USEMAP"        T(N) },
726 	{ "VALUE"         T(N) },
727 	{ "WIDTH"         T(N) },
728 	{ 0               T(N) }	/* Terminate list */
729 };
730 
731 static const AttrType INPUT_attr_type[] = {
732 	{ ATTR_TYPE(align) },
733 	{ ATTR_TYPE(core) },
734 	{ ATTR_TYPE(events) },
735 	{ ATTR_TYPE(i18n) },
736 	{ ATTR_TYPE(INPUT) },
737 	{ 0, 0 },
738 };
739 
740 static const attr ISINDEX_attr_list[] = {
741 	{ "ACTION"        T(h) },
742 	{ "HREF"          T(h) },
743 	{ "PROMPT"        T(N) },
744 	{ 0               T(N) }	/* Terminate list */
745 };
746 
747 static const AttrType ISINDEX_attr_type[] = {
748 	{ ATTR_TYPE(core) },
749 	{ ATTR_TYPE(i18n) },
750 	{ ATTR_TYPE(ISINDEX) },
751 	{ 0, 0 },
752 };
753 
754 static const attr KEYGEN_attr_list[] = {
755 	{ "CHALLENGE"     T(N) },
756 	{ "NAME"          T(N) },
757 	{ 0               T(N) }	/* Terminate list */
758 };
759 
760 static const AttrType KEYGEN_attr_type[] = {
761 	{ ATTR_TYPE(core) },
762 	{ ATTR_TYPE(i18n) },
763 	{ ATTR_TYPE(KEYGEN) },
764 	{ 0, 0 },
765 };
766 
767 static const attr LABEL_attr_list[] = {
768 	{ "ACCESSKEY"     T(N) },
769 	{ "CLEAR"         T(N) },
770 	{ "FOR"           T(N) },
771 	{ "ONBLUR"        T(N) },
772 	{ "ONFOCUS"       T(N) },
773 	{ 0               T(N) }	/* Terminate list */
774 };
775 
776 static const AttrType LABEL_attr_type[] = {
777 	{ ATTR_TYPE(core) },
778 	{ ATTR_TYPE(events) },
779 	{ ATTR_TYPE(i18n) },
780 	{ ATTR_TYPE(LABEL) },
781 	{ 0, 0 },
782 };
783 
784 static const attr LI_attr_list[] = {
785 	{ "CLEAR"         T(N) },
786 	{ "DINGBAT"       T(N) },
787 	{ "MD"            T(N) },
788 	{ "SKIP"          T(N) },
789 	{ "SRC"           T(h) },
790 	{ "TYPE"          T(N) },
791 	{ "VALUE"         T(N) },
792 	{ 0               T(N) }	/* Terminate list */
793 };
794 
795 static const AttrType LI_attr_type[] = {
796 	{ ATTR_TYPE(core) },
797 	{ ATTR_TYPE(events) },
798 	{ ATTR_TYPE(i18n) },
799 	{ ATTR_TYPE(LI) },
800 	{ 0, 0 },
801 };
802 
803 static const attr LINK_attr_list[] = {
804 	{ "CHARSET"       T(N) },
805 	{ "HREF"          T(h) },
806 	{ "HREFLANG"      T(N) },
807 	{ "MEDIA"         T(N) },
808 	{ "REL"           T(N) },
809 	{ "REV"           T(N) },
810 	{ "TARGET"        T(N) },
811 	{ "TYPE"          T(N) },
812 	{ 0               T(N) }	/* Terminate list */
813 };
814 
815 static const AttrType LINK_attr_type[] = {
816 	{ ATTR_TYPE(core) },
817 	{ ATTR_TYPE(events) },
818 	{ ATTR_TYPE(i18n) },
819 	{ ATTR_TYPE(LINK) },
820 	{ 0, 0 },
821 };
822 
823 static const attr MAP_attr_list[] = {
824 	{ "CLEAR"         T(N) },
825 	{ "NAME"          T(i) },
826 	{ 0               T(N) }	/* Terminate list */
827 };
828 
829 static const AttrType MAP_attr_type[] = {
830 	{ ATTR_TYPE(core) },
831 	{ ATTR_TYPE(i18n) },
832 	{ ATTR_TYPE(MAP) },
833 	{ 0, 0 },
834 };
835 
836 static const attr MATH_attr_list[] = {
837 	{ "BOX"           T(N) },
838 	{ "CLEAR"         T(N) },
839 	{ 0               T(N) }	/* Terminate list */
840 };
841 
842 static const AttrType MATH_attr_type[] = {
843 	{ ATTR_TYPE(core) },
844 	{ ATTR_TYPE(i18n) },
845 	{ ATTR_TYPE(MATH) },
846 	{ 0, 0 },
847 };
848 
849 static const attr META_attr_list[] = {
850 	{ "CHARSET"       T(N) },
851 	{ "CONTENT"       T(N) },
852 	{ "HTTP-EQUIV"    T(N) },
853 	{ "NAME"          T(N) },
854 	{ "SCHEME"        T(N) },
855 	{ 0               T(N) }	/* Terminate list */
856 };
857 
858 static const AttrType META_attr_type[] = {
859 	{ ATTR_TYPE(META) },
860 	{ 0, 0 },
861 };
862 
863 static const attr NEXTID_attr_list[] = {
864 	{ "N"             T(N) },
865 	{ 0               T(N) }	/* Terminate list */
866 };
867 
868 static const AttrType NEXTID_attr_type[] = {
869 	{ ATTR_TYPE(NEXTID) },
870 	{ 0, 0 },
871 };
872 
873 static const attr NOTE_attr_list[] = {
874 	{ "CLEAR"         T(N) },
875 	{ "MD"            T(N) },
876 	{ "ROLE"          T(x) },
877 	{ "SRC"           T(h) },
878 	{ 0               T(N) }	/* Terminate list */
879 };
880 
881 static const AttrType NOTE_attr_type[] = {
882 	{ ATTR_TYPE(core) },
883 	{ ATTR_TYPE(i18n) },
884 	{ ATTR_TYPE(NOTE) },
885 	{ 0, 0 },
886 };
887 
888 static const attr OBJECT_attr_list[] = {
889 	{ "ARCHIVE"       T(N) },
890 	{ "BORDER"        T(N) },
891 	{ "CLASSID"       T(h) },
892 	{ "CODEBASE"      T(h) },
893 	{ "CODETYPE"      T(N) },
894 	{ "DATA"          T(h) },
895 	{ "DECLARE"       T(N) },
896 	{ "HEIGHT"        T(N) },
897 	{ "HSPACE"        T(N) },
898 	{ "ISMAP"         T(N) },
899 	{ "NAME"          T(N) },
900 	{ "NOTAB"         T(N) },
901 	{ "SHAPES"        T(N) },
902 	{ "STANDBY"       T(N) },
903 	{ "TABINDEX"      T(N) },
904 	{ "TYPE"          T(N) },
905 	{ "USEMAP"        T(h) },
906 	{ "VSPACE"        T(N) },
907 	{ "WIDTH"         T(N) },
908 	{ 0               T(N) }	/* Terminate list */
909 };
910 
911 static const AttrType OBJECT_attr_type[] = {
912 	{ ATTR_TYPE(align) },
913 	{ ATTR_TYPE(core) },
914 	{ ATTR_TYPE(events) },
915 	{ ATTR_TYPE(i18n) },
916 	{ ATTR_TYPE(OBJECT) },
917 	{ 0, 0 },
918 };
919 
920 static const attr OL_attr_list[] = {
921 	{ "CLEAR"         T(N) },
922 	{ "COMPACT"       T(N) },
923 	{ "CONTINUE"      T(N) },
924 	{ "SEQNUM"        T(N) },
925 	{ "START"         T(N) },
926 	{ "TYPE"          T(N) },
927 	{ 0               T(N) }	/* Terminate list */
928 };
929 
930 static const AttrType OL_attr_type[] = {
931 	{ ATTR_TYPE(core) },
932 	{ ATTR_TYPE(i18n) },
933 	{ ATTR_TYPE(OL) },
934 	{ 0, 0 },
935 };
936 
937 static const attr OPTION_attr_list[] = {
938 	{ "CLEAR"         T(N) },
939 	{ "DISABLED"      T(N) },
940 	{ "ERROR"         T(N) },
941 	{ "LABEL"         T(N) },
942 	{ "SELECTED"      T(N) },
943 	{ "SHAPE"         T(N) },
944 	{ "VALUE"         T(N) },
945 	{ 0               T(N) }	/* Terminate list */
946 };
947 
948 static const AttrType OPTION_attr_type[] = {
949 	{ ATTR_TYPE(core) },
950 	{ ATTR_TYPE(events) },
951 	{ ATTR_TYPE(i18n) },
952 	{ ATTR_TYPE(OPTION) },
953 	{ 0, 0 },
954 };
955 
956 static const attr OVERLAY_attr_list[] = {
957 	{ "HEIGHT"        T(N) },
958 	{ "IMAGEMAP"      T(N) },
959 	{ "MD"            T(N) },
960 	{ "SRC"           T(h) },
961 	{ "UNITS"         T(N) },
962 	{ "WIDTH"         T(N) },
963 	{ "X"             T(N) },
964 	{ "Y"             T(N) },
965 	{ 0               T(N) }	/* Terminate list */
966 };
967 
968 static const AttrType OVERLAY_attr_type[] = {
969 	{ ATTR_TYPE(core) },
970 	{ ATTR_TYPE(OVERLAY) },
971 	{ 0, 0 },
972 };
973 
974 static const attr P_attr_list[] = {
975 	{ "CLEAR"         T(N) },
976 	{ "NOWRAP"        T(N) },
977 	{ 0               T(N) }	/* Terminate list */
978 };
979 
980 static const AttrType P_attr_type[] = {
981 	{ ATTR_TYPE(align) },
982 	{ ATTR_TYPE(core) },
983 	{ ATTR_TYPE(i18n) },
984 	{ ATTR_TYPE(P) },
985 	{ 0, 0 },
986 };
987 
988 static const attr PARAM_attr_list[] = {
989 	{ "ACCEPT"        T(N) },
990 	{ "ACCEPT-CHARSET" T(N) },
991 	{ "ACCEPT-ENCODING" T(N) },
992 	{ "CLEAR"         T(N) },
993 	{ "DATA"          T(N) },
994 	{ "NAME"          T(N) },
995 	{ "OBJECT"        T(N) },
996 	{ "REF"           T(N) },
997 	{ "TYPE"          T(N) },
998 	{ "VALUE"         T(N) },
999 	{ "VALUEREF"      T(N) },
1000 	{ "VALUETYPE"     T(N) },
1001 	{ 0               T(N) }	/* Terminate list */
1002 };
1003 
1004 static const AttrType PARAM_attr_type[] = {
1005 	{ ATTR_TYPE(core) },
1006 	{ ATTR_TYPE(i18n) },
1007 	{ ATTR_TYPE(PARAM) },
1008 	{ 0, 0 },
1009 };
1010 
1011 static const attr Q_attr_list[] = {
1012 	{ "CITE"          T(h) },
1013 	{ "CLEAR"         T(N) },
1014 	{ 0               T(N) }	/* Terminate list */
1015 };
1016 
1017 static const AttrType Q_attr_type[] = {
1018 	{ ATTR_TYPE(core) },
1019 	{ ATTR_TYPE(i18n) },
1020 	{ ATTR_TYPE(Q) },
1021 	{ 0, 0 },
1022 };
1023 
1024 static const attr SCRIPT_attr_list[] = {
1025 	{ "CHARSET"       T(N) },
1026 	{ "CLEAR"         T(N) },
1027 	{ "DEFER"         T(N) },
1028 	{ "EVENT"         T(N) },
1029 	{ "FOR"           T(N) },
1030 	{ "LANGUAGE"      T(N) },
1031 	{ "NAME"          T(N) },
1032 	{ "SCRIPTENGINE"  T(N) },
1033 	{ "SRC"           T(h) },
1034 	{ "TYPE"          T(N) },
1035 	{ 0               T(N) }	/* Terminate list */
1036 };
1037 
1038 static const AttrType SCRIPT_attr_type[] = {
1039 	{ ATTR_TYPE(core) },
1040 	{ ATTR_TYPE(i18n) },
1041 	{ ATTR_TYPE(SCRIPT) },
1042 	{ 0, 0 },
1043 };
1044 
1045 static const attr SELECT_attr_list[] = {
1046 	{ "CLEAR"         T(N) },
1047 	{ "DISABLED"      T(N) },
1048 	{ "ERROR"         T(N) },
1049 	{ "HEIGHT"        T(N) },
1050 	{ "MD"            T(N) },
1051 	{ "MULTIPLE"      T(N) },
1052 	{ "NAME"          T(N) },
1053 	{ "NOTAB"         T(N) },
1054 	{ "ONBLUR"        T(N) },
1055 	{ "ONCHANGE"      T(N) },
1056 	{ "ONFOCUS"       T(N) },
1057 	{ "SIZE"          T(N) },
1058 	{ "TABINDEX"      T(N) },
1059 	{ "UNITS"         T(N) },
1060 	{ "WIDTH"         T(N) },
1061 	{ 0               T(N) }	/* Terminate list */
1062 };
1063 
1064 static const AttrType SELECT_attr_type[] = {
1065 	{ ATTR_TYPE(align) },
1066 	{ ATTR_TYPE(core) },
1067 	{ ATTR_TYPE(i18n) },
1068 	{ ATTR_TYPE(SELECT) },
1069 	{ 0, 0 },
1070 };
1071 
1072 static const attr STYLE_attr_list[] = {
1073 	{ "MEDIA"         T(N) },
1074 	{ "NOTATION"      T(N) },
1075 	{ "TYPE"          T(N) },
1076 	{ 0               T(N) }	/* Terminate list */
1077 };
1078 
1079 static const AttrType STYLE_attr_type[] = {
1080 	{ ATTR_TYPE(core) },
1081 	{ ATTR_TYPE(i18n) },
1082 	{ ATTR_TYPE(STYLE) },
1083 	{ 0, 0 },
1084 };
1085 
1086 static const attr TAB_attr_list[] = {
1087 	{ "CLEAR"         T(N) },
1088 	{ "DP"            T(N) },
1089 	{ "INDENT"        T(N) },
1090 	{ "TO"            T(N) },
1091 	{ 0               T(N) }	/* Terminate list */
1092 };
1093 
1094 static const AttrType TAB_attr_type[] = {
1095 	{ ATTR_TYPE(align) },
1096 	{ ATTR_TYPE(core) },
1097 	{ ATTR_TYPE(i18n) },
1098 	{ ATTR_TYPE(TAB) },
1099 	{ 0, 0 },
1100 };
1101 
1102 static const attr TABLE_attr_list[] = {
1103 	{ "BACKGROUND"    T(h) },
1104 	{ "BORDER"        T(N) },
1105 	{ "CELLPADDING"   T(N) },
1106 	{ "CELLSPACING"   T(N) },
1107 	{ "CLEAR"         T(N) },
1108 	{ "COLS"          T(N) },
1109 	{ "COLSPEC"       T(N) },
1110 	{ "DP"            T(N) },
1111 	{ "FRAME"         T(N) },
1112 	{ "NOFLOW"        T(N) },
1113 	{ "NOWRAP"        T(N) },
1114 	{ "RULES"         T(N) },
1115 	{ "SUMMARY"       T(N) },
1116 	{ "UNITS"         T(N) },
1117 	{ "WIDTH"         T(N) },
1118 	{ 0               T(N) }	/* Terminate list */
1119 };
1120 
1121 static const AttrType TABLE_attr_type[] = {
1122 	{ ATTR_TYPE(align) },
1123 	{ ATTR_TYPE(core) },
1124 	{ ATTR_TYPE(events) },
1125 	{ ATTR_TYPE(i18n) },
1126 	{ ATTR_TYPE(TABLE) },
1127 	{ 0, 0 },
1128 };
1129 
1130 static const attr TD_attr_list[] = {
1131 	{ "ABBR"          T(N) },
1132 	{ "AXES"          T(N) },
1133 	{ "AXIS"          T(N) },
1134 	{ "BACKGROUND"    T(h) },
1135 	{ "CLEAR"         T(N) },
1136 	{ "COLSPAN"       T(N) },
1137 	{ "DP"            T(N) },
1138 	{ "HEADERS"       T(N) },
1139 	{ "HEIGHT"        T(N) },
1140 	{ "NOWRAP"        T(N) },
1141 	{ "ROWSPAN"       T(N) },
1142 	{ "SCOPE"         T(N) },
1143 	{ "WIDTH"         T(N) },
1144 	{ 0               T(N) }	/* Terminate list */
1145 };
1146 
1147 static const AttrType TD_attr_type[] = {
1148 	{ ATTR_TYPE(cellalign) },
1149 	{ ATTR_TYPE(core) },
1150 	{ ATTR_TYPE(i18n) },
1151 	{ ATTR_TYPE(TD) },
1152 	{ 0, 0 },
1153 };
1154 
1155 static const attr TEXTAREA_attr_list[] = {
1156 	{ "ACCEPT-CHARSET" T(N) },
1157 	{ "ACCESSKEY"     T(N) },
1158 	{ "CLEAR"         T(N) },
1159 	{ "COLS"          T(N) },
1160 	{ "DISABLED"      T(N) },
1161 	{ "ERROR"         T(N) },
1162 	{ "NAME"          T(N) },
1163 	{ "NOTAB"         T(N) },
1164 	{ "ONBLUR"        T(N) },
1165 	{ "ONCHANGE"      T(N) },
1166 	{ "ONFOCUS"       T(N) },
1167 	{ "ONSELECT"      T(N) },
1168 	{ "READONLY"      T(N) },
1169 	{ "ROWS"          T(N) },
1170 	{ "TABINDEX"      T(N) },
1171 	{ 0               T(N) }	/* Terminate list */
1172 };
1173 
1174 static const AttrType TEXTAREA_attr_type[] = {
1175 	{ ATTR_TYPE(align) },
1176 	{ ATTR_TYPE(core) },
1177 	{ ATTR_TYPE(events) },
1178 	{ ATTR_TYPE(i18n) },
1179 	{ ATTR_TYPE(TEXTAREA) },
1180 	{ 0, 0 },
1181 };
1182 
1183 static const attr TR_attr_list[] = {
1184 	{ "CLEAR"         T(N) },
1185 	{ "DP"            T(N) },
1186 	{ "NOWRAP"        T(N) },
1187 	{ 0               T(N) }	/* Terminate list */
1188 };
1189 
1190 static const AttrType TR_attr_type[] = {
1191 	{ ATTR_TYPE(cellalign) },
1192 	{ ATTR_TYPE(core) },
1193 	{ ATTR_TYPE(events) },
1194 	{ ATTR_TYPE(i18n) },
1195 	{ ATTR_TYPE(TR) },
1196 	{ 0, 0 },
1197 };
1198 
1199 static const attr UL_attr_list[] = {
1200 	{ "CLEAR"         T(N) },
1201 	{ "COMPACT"       T(N) },
1202 	{ "DINGBAT"       T(N) },
1203 	{ "MD"            T(N) },
1204 	{ "PLAIN"         T(N) },
1205 	{ "SRC"           T(h) },
1206 	{ "TYPE"          T(N) },
1207 	{ "WRAP"          T(N) },
1208 	{ 0               T(N) }	/* Terminate list */
1209 };
1210 
1211 static const AttrType UL_attr_type[] = {
1212 	{ ATTR_TYPE(core) },
1213 	{ ATTR_TYPE(i18n) },
1214 	{ ATTR_TYPE(UL) },
1215 	{ 0, 0 },
1216 };
1217 
1218 
1219 /* attribute lists for the runtime (generated by dtd_util) */
1220 static const attr A_attr[] = {          /* A attributes */
1221 	{ "ACCESSKEY"     T(N) },
1222 	{ "CHARSET"       T(N) },
1223 	{ "CLASS"         T(c) },
1224 	{ "CLEAR"         T(N) },
1225 	{ "COORDS"        T(N) },
1226 	{ "DIR"           T(N) },
1227 	{ "HREF"          T(h) },
1228 	{ "HREFLANG"      T(N) },
1229 	{ "ID"            T(i) },
1230 	{ "ISMAP"         T(N) },
1231 	{ "LANG"          T(N) },
1232 	{ "MD"            T(N) },
1233 	{ "NAME"          T(i) },
1234 	{ "NOTAB"         T(N) },
1235 	{ "ONBLUR"        T(N) },
1236 	{ "ONFOCUS"       T(N) },
1237 	{ "REL"           T(N) },
1238 	{ "REV"           T(N) },
1239 	{ "SHAPE"         T(N) },
1240 	{ "STYLE"         T(N) },
1241 	{ "TABINDEX"      T(N) },
1242 	{ "TARGET"        T(N) },
1243 	{ "TITLE"         T(N) },
1244 	{ "TYPE"          T(N) },
1245 	{ "URN"           T(N) },
1246 	{ 0               T(N) }	/* Terminate list */
1247 };
1248 
1249 static const attr ADDRESS_attr[] = {    /* ADDRESS attributes */
1250 	{ "CLASS"         T(c) },
1251 	{ "CLEAR"         T(N) },
1252 	{ "DIR"           T(N) },
1253 	{ "ID"            T(i) },
1254 	{ "LANG"          T(N) },
1255 	{ "NOWRAP"        T(N) },
1256 	{ "STYLE"         T(N) },
1257 	{ "TITLE"         T(N) },
1258 	{ 0               T(N) }	/* Terminate list */
1259 };
1260 
1261 static const attr APPLET_attr[] = {     /* APPLET attributes */
1262 	{ "ALIGN"         T(N) },
1263 	{ "ALT"           T(N) },
1264 	{ "CLASS"         T(c) },
1265 	{ "CLEAR"         T(N) },
1266 	{ "CODE"          T(N) },
1267 	{ "CODEBASE"      T(h) },
1268 	{ "DIR"           T(N) },
1269 	{ "DOWNLOAD"      T(N) },
1270 	{ "HEIGHT"        T(N) },
1271 	{ "HSPACE"        T(N) },
1272 	{ "ID"            T(i) },
1273 	{ "LANG"          T(N) },
1274 	{ "NAME"          T(i) },
1275 	{ "STYLE"         T(N) },
1276 	{ "TITLE"         T(N) },
1277 	{ "VSPACE"        T(N) },
1278 	{ "WIDTH"         T(N) },
1279 	{ 0               T(N) }	/* Terminate list */
1280 };
1281 
1282 static const attr AREA_attr[] = {       /* AREA attributes */
1283 	{ "ACCESSKEY"     T(N) },
1284 	{ "ALT"           T(N) },
1285 	{ "CLASS"         T(c) },
1286 	{ "CLEAR"         T(N) },
1287 	{ "COORDS"        T(N) },
1288 	{ "DIR"           T(N) },
1289 	{ "HREF"          T(h) },
1290 	{ "ID"            T(i) },
1291 	{ "LANG"          T(N) },
1292 	{ "NOHREF"        T(N) },
1293 	{ "NOTAB"         T(N) },
1294 	{ "ONBLUR"        T(N) },
1295 	{ "ONFOCUS"       T(N) },
1296 	{ "SHAPE"         T(N) },
1297 	{ "STYLE"         T(N) },
1298 	{ "TABINDEX"      T(N) },
1299 	{ "TARGET"        T(N) },
1300 	{ "TITLE"         T(N) },
1301 	{ 0               T(N) }	/* Terminate list */
1302 };
1303 
1304 static const attr BASE_attr[] = {       /* BASE attributes */
1305 	{ "CLASS"         T(c) },
1306 	{ "HREF"          T(h) },
1307 	{ "ID"            T(i) },
1308 	{ "STYLE"         T(N) },
1309 	{ "TARGET"        T(N) },
1310 	{ "TITLE"         T(N) },
1311 	{ 0               T(N) }	/* Terminate list */
1312 };
1313 
1314 static const attr BGSOUND_attr[] = {    /* BGSOUND attributes */
1315 	{ "CLASS"         T(c) },
1316 	{ "CLEAR"         T(N) },
1317 	{ "DIR"           T(N) },
1318 	{ "ID"            T(i) },
1319 	{ "LANG"          T(N) },
1320 	{ "LOOP"          T(N) },
1321 	{ "SRC"           T(h) },
1322 	{ "STYLE"         T(N) },
1323 	{ "TITLE"         T(N) },
1324 	{ 0               T(N) }	/* Terminate list */
1325 };
1326 
1327 static const attr BODY_attr[] = {       /* BODY attributes */
1328 	{ "ALINK"         T(N) },
1329 	{ "BACKGROUND"    T(h) },
1330 	{ "BGCOLOR"       T(N) },
1331 	{ "CLASS"         T(c) },
1332 	{ "CLEAR"         T(N) },
1333 	{ "DIR"           T(N) },
1334 	{ "ID"            T(i) },
1335 	{ "LANG"          T(N) },
1336 	{ "LINK"          T(N) },
1337 	{ "ONLOAD"        T(N) },
1338 	{ "ONUNLOAD"      T(N) },
1339 	{ "STYLE"         T(N) },
1340 	{ "TEXT"          T(N) },
1341 	{ "TITLE"         T(N) },
1342 	{ "VLINK"         T(N) },
1343 	{ 0               T(N) }	/* Terminate list */
1344 };
1345 
1346 static const attr BODYTEXT_attr[] = {   /* BODYTEXT attributes */
1347 	{ "CLASS"         T(c) },
1348 	{ "CLEAR"         T(N) },
1349 	{ "DATA"          T(N) },
1350 	{ "DIR"           T(N) },
1351 	{ "ID"            T(i) },
1352 	{ "LANG"          T(N) },
1353 	{ "NAME"          T(N) },
1354 	{ "OBJECT"        T(N) },
1355 	{ "REF"           T(N) },
1356 	{ "STYLE"         T(N) },
1357 	{ "TITLE"         T(N) },
1358 	{ "TYPE"          T(N) },
1359 	{ "VALUE"         T(N) },
1360 	{ "VALUETYPE"     T(N) },
1361 	{ 0               T(N) }	/* Terminate list */
1362 };
1363 
1364 static const attr BQ_attr[] = {         /* BLOCKQUOTE attributes */
1365 	{ "CITE"          T(h) },
1366 	{ "CLASS"         T(c) },
1367 	{ "CLEAR"         T(N) },
1368 	{ "DIR"           T(N) },
1369 	{ "ID"            T(i) },
1370 	{ "LANG"          T(N) },
1371 	{ "NOWRAP"        T(N) },
1372 	{ "STYLE"         T(N) },
1373 	{ "TITLE"         T(N) },
1374 	{ 0               T(N) }	/* Terminate list */
1375 };
1376 
1377 static const attr BUTTON_attr[] = {     /* BUTTON attributes */
1378 	{ "ACCESSKEY"     T(N) },
1379 	{ "CLASS"         T(c) },
1380 	{ "CLEAR"         T(N) },
1381 	{ "DIR"           T(N) },
1382 	{ "DISABLED"      T(N) },
1383 	{ "ID"            T(i) },
1384 	{ "LANG"          T(N) },
1385 	{ "NAME"          T(N) },
1386 	{ "ONBLUR"        T(N) },
1387 	{ "ONFOCUS"       T(N) },
1388 	{ "READONLY"      T(N) },
1389 	{ "STYLE"         T(N) },
1390 	{ "TABINDEX"      T(N) },
1391 	{ "TITLE"         T(N) },
1392 	{ "TYPE"          T(N) },
1393 	{ "VALUE"         T(N) },
1394 	{ 0               T(N) }	/* Terminate list */
1395 };
1396 
1397 static const attr CAPTION_attr[] = {    /* CAPTION attributes */
1398 	{ "ACCESSKEY"     T(N) },
1399 	{ "ALIGN"         T(N) },
1400 	{ "CLASS"         T(c) },
1401 	{ "CLEAR"         T(N) },
1402 	{ "DIR"           T(N) },
1403 	{ "ID"            T(i) },
1404 	{ "LANG"          T(N) },
1405 	{ "STYLE"         T(N) },
1406 	{ "TITLE"         T(N) },
1407 	{ 0               T(N) }	/* Terminate list */
1408 };
1409 
1410 static const attr COL_attr[] = {        /* COL attributes */
1411 	{ "ALIGN"         T(N) },
1412 	{ "CHAR"          T(N) },
1413 	{ "CHAROFF"       T(N) },
1414 	{ "CLASS"         T(c) },
1415 	{ "CLEAR"         T(N) },
1416 	{ "DIR"           T(N) },
1417 	{ "ID"            T(i) },
1418 	{ "LANG"          T(N) },
1419 	{ "SPAN"          T(N) },
1420 	{ "STYLE"         T(N) },
1421 	{ "TITLE"         T(N) },
1422 	{ "VALIGN"        T(N) },
1423 	{ "WIDTH"         T(N) },
1424 	{ 0               T(N) }	/* Terminate list */
1425 };
1426 
1427 static const attr DEL_attr[] = {        /* DEL attributes */
1428 	{ "CITE"          T(N) },
1429 	{ "CLASS"         T(c) },
1430 	{ "DATETIME"      T(N) },
1431 	{ "DIR"           T(N) },
1432 	{ "ID"            T(i) },
1433 	{ "LANG"          T(N) },
1434 	{ "STYLE"         T(N) },
1435 	{ "TITLE"         T(N) },
1436 	{ 0               T(N) }	/* Terminate list */
1437 };
1438 
1439 static const attr DIV_attr[] = {        /* CENTER attributes */
1440 	{ "ALIGN"         T(N) },
1441 	{ "CLASS"         T(c) },
1442 	{ "CLEAR"         T(N) },
1443 	{ "DIR"           T(N) },
1444 	{ "ID"            T(i) },
1445 	{ "LANG"          T(N) },
1446 	{ "STYLE"         T(N) },
1447 	{ "TITLE"         T(N) },
1448 	{ 0               T(N) }	/* Terminate list */
1449 };
1450 
1451 static const attr DL_attr[] = {         /* DL attributes */
1452 	{ "CLASS"         T(c) },
1453 	{ "CLEAR"         T(N) },
1454 	{ "COMPACT"       T(N) },
1455 	{ "DIR"           T(N) },
1456 	{ "ID"            T(i) },
1457 	{ "LANG"          T(N) },
1458 	{ "STYLE"         T(N) },
1459 	{ "TITLE"         T(N) },
1460 	{ 0               T(N) }	/* Terminate list */
1461 };
1462 
1463 static const attr EMBED_attr[] = {      /* EMBED attributes */
1464 	{ "ALIGN"         T(N) },
1465 	{ "ALT"           T(N) },
1466 	{ "BORDER"        T(N) },
1467 	{ "CLASS"         T(c) },
1468 	{ "CLEAR"         T(N) },
1469 	{ "DIR"           T(N) },
1470 	{ "HEIGHT"        T(N) },
1471 	{ "ID"            T(i) },
1472 	{ "IMAGEMAP"      T(N) },
1473 	{ "ISMAP"         T(N) },
1474 	{ "LANG"          T(N) },
1475 	{ "MD"            T(N) },
1476 	{ "NAME"          T(i) },
1477 	{ "NOFLOW"        T(N) },
1478 	{ "PARAMS"        T(N) },
1479 	{ "SRC"           T(h) },
1480 	{ "STYLE"         T(N) },
1481 	{ "TITLE"         T(N) },
1482 	{ "UNITS"         T(N) },
1483 	{ "USEMAP"        T(N) },
1484 	{ "WIDTH"         T(N) },
1485 	{ 0               T(N) }	/* Terminate list */
1486 };
1487 
1488 static const attr FIG_attr[] = {        /* FIG attributes */
1489 	{ "ALIGN"         T(N) },
1490 	{ "BORDER"        T(N) },
1491 	{ "CLASS"         T(c) },
1492 	{ "CLEAR"         T(N) },
1493 	{ "DIR"           T(N) },
1494 	{ "HEIGHT"        T(N) },
1495 	{ "ID"            T(i) },
1496 	{ "IMAGEMAP"      T(N) },
1497 	{ "ISOBJECT"      T(N) },
1498 	{ "LANG"          T(N) },
1499 	{ "MD"            T(N) },
1500 	{ "NOFLOW"        T(N) },
1501 	{ "SRC"           T(h) },
1502 	{ "STYLE"         T(N) },
1503 	{ "TITLE"         T(N) },
1504 	{ "UNITS"         T(N) },
1505 	{ "WIDTH"         T(N) },
1506 	{ 0               T(N) }	/* Terminate list */
1507 };
1508 
1509 static const attr FONT_attr[] = {       /* BASEFONT attributes */
1510 	{ "CLASS"         T(c) },
1511 	{ "CLEAR"         T(N) },
1512 	{ "COLOR"         T(N) },
1513 	{ "DIR"           T(N) },
1514 	{ "END"           T(N) },
1515 	{ "FACE"          T(N) },
1516 	{ "ID"            T(i) },
1517 	{ "LANG"          T(N) },
1518 	{ "SIZE"          T(N) },
1519 	{ "STYLE"         T(N) },
1520 	{ "TITLE"         T(N) },
1521 	{ 0               T(N) }	/* Terminate list */
1522 };
1523 
1524 static const attr FORM_attr[] = {       /* FORM attributes */
1525 	{ "ACCEPT"        T(N) },
1526 	{ "ACCEPT-CHARSET" T(N) },
1527 	{ "ACTION"        T(h) },
1528 	{ "CLASS"         T(c) },
1529 	{ "CLEAR"         T(N) },
1530 	{ "DIR"           T(N) },
1531 	{ "ENCTYPE"       T(N) },
1532 	{ "ID"            T(i) },
1533 	{ "LANG"          T(N) },
1534 	{ "METHOD"        T(N) },
1535 	{ "ONRESET"       T(N) },
1536 	{ "ONSUBMIT"      T(N) },
1537 	{ "SCRIPT"        T(N) },
1538 	{ "STYLE"         T(N) },
1539 	{ "SUBJECT"       T(N) },
1540 	{ "TARGET"        T(N) },
1541 	{ "TITLE"         T(N) },
1542 	{ 0               T(N) }	/* Terminate list */
1543 };
1544 
1545 static const attr FRAME_attr[] = {      /* FRAME attributes */
1546 	{ "CLASS"         T(c) },
1547 	{ "FRAMEBORDER"   T(N) },
1548 	{ "ID"            T(i) },
1549 	{ "LONGDESC"      T(h) },
1550 	{ "MARGINHEIGHT"  T(N) },
1551 	{ "MARGINWIDTH"   T(N) },
1552 	{ "NAME"          T(N) },
1553 	{ "NORESIZE"      T(N) },
1554 	{ "SCROLLING"     T(N) },
1555 	{ "SRC"           T(h) },
1556 	{ "STYLE"         T(N) },
1557 	{ "TITLE"         T(N) },
1558 	{ 0               T(N) }	/* Terminate list */
1559 };
1560 
1561 static const attr FRAMESET_attr[] = {   /* FRAMESET attributes */
1562 	{ "COLS"          T(N) },
1563 	{ "ONLOAD"        T(N) },
1564 	{ "ONUNLOAD"      T(N) },
1565 	{ "ROWS"          T(N) },
1566 	{ 0               T(N) }	/* Terminate list */
1567 };
1568 
1569 static const attr GEN_attr[] = {        /* ABBR attributes */
1570 	{ "CLASS"         T(c) },
1571 	{ "CLEAR"         T(N) },
1572 	{ "DIR"           T(N) },
1573 	{ "ID"            T(i) },
1574 	{ "LANG"          T(N) },
1575 	{ "STYLE"         T(N) },
1576 	{ "TITLE"         T(N) },
1577 	{ 0               T(N) }	/* Terminate list */
1578 };
1579 
1580 static const attr H_attr[] = {          /* H1 attributes */
1581 	{ "ALIGN"         T(N) },
1582 	{ "CLASS"         T(c) },
1583 	{ "CLEAR"         T(N) },
1584 	{ "DINGBAT"       T(N) },
1585 	{ "DIR"           T(N) },
1586 	{ "ID"            T(i) },
1587 	{ "LANG"          T(N) },
1588 	{ "MD"            T(N) },
1589 	{ "NOWRAP"        T(N) },
1590 	{ "SEQNUM"        T(N) },
1591 	{ "SKIP"          T(N) },
1592 	{ "SRC"           T(h) },
1593 	{ "STYLE"         T(N) },
1594 	{ "TITLE"         T(N) },
1595 	{ 0               T(N) }	/* Terminate list */
1596 };
1597 
1598 static const attr HR_attr[] = {         /* HR attributes */
1599 	{ "ALIGN"         T(N) },
1600 	{ "CLASS"         T(c) },
1601 	{ "CLEAR"         T(N) },
1602 	{ "DIR"           T(N) },
1603 	{ "ID"            T(i) },
1604 	{ "LANG"          T(N) },
1605 	{ "MD"            T(N) },
1606 	{ "NOSHADE"       T(N) },
1607 	{ "SIZE"          T(N) },
1608 	{ "SRC"           T(h) },
1609 	{ "STYLE"         T(N) },
1610 	{ "TITLE"         T(N) },
1611 	{ "WIDTH"         T(N) },
1612 	{ 0               T(N) }	/* Terminate list */
1613 };
1614 
1615 static const attr IFRAME_attr[] = {     /* IFRAME attributes */
1616 	{ "ALIGN"         T(N) },
1617 	{ "CLASS"         T(c) },
1618 	{ "FRAMEBORDER"   T(N) },
1619 	{ "HEIGHT"        T(N) },
1620 	{ "ID"            T(i) },
1621 	{ "LONGDESC"      T(h) },
1622 	{ "MARGINHEIGHT"  T(N) },
1623 	{ "MARGINWIDTH"   T(N) },
1624 	{ "NAME"          T(N) },
1625 	{ "SCROLLING"     T(N) },
1626 	{ "SRC"           T(h) },
1627 	{ "STYLE"         T(N) },
1628 	{ "TITLE"         T(N) },
1629 	{ "WIDTH"         T(N) },
1630 	{ 0               T(N) }	/* Terminate list */
1631 };
1632 
1633 static const attr IMG_attr[] = {        /* IMG attributes */
1634 	{ "ALIGN"         T(N) },
1635 	{ "ALT"           T(N) },
1636 	{ "BORDER"        T(N) },
1637 	{ "CLASS"         T(c) },
1638 	{ "CLEAR"         T(N) },
1639 	{ "DIR"           T(N) },
1640 	{ "HEIGHT"        T(N) },
1641 	{ "HSPACE"        T(N) },
1642 	{ "ID"            T(i) },
1643 	{ "ISMAP"         T(N) },
1644 	{ "ISOBJECT"      T(N) },
1645 	{ "LANG"          T(N) },
1646 	{ "LONGDESC"      T(h) },
1647 	{ "MD"            T(N) },
1648 	{ "NAME"          T(N) },
1649 	{ "SRC"           T(h) },
1650 	{ "STYLE"         T(N) },
1651 	{ "TITLE"         T(N) },
1652 	{ "UNITS"         T(N) },
1653 	{ "USEMAP"        T(h) },
1654 	{ "VSPACE"        T(N) },
1655 	{ "WIDTH"         T(N) },
1656 	{ 0               T(N) }	/* Terminate list */
1657 };
1658 
1659 static const attr INPUT_attr[] = {      /* INPUT attributes */
1660 	{ "ACCEPT"        T(N) },
1661 	{ "ACCEPT-CHARSET" T(N) },
1662 	{ "ACCESSKEY"     T(N) },
1663 	{ "ALIGN"         T(N) },
1664 	{ "ALT"           T(N) },
1665 	{ "CHECKED"       T(N) },
1666 	{ "CLASS"         T(c) },
1667 	{ "CLEAR"         T(N) },
1668 	{ "DIR"           T(N) },
1669 	{ "DISABLED"      T(N) },
1670 	{ "ERROR"         T(N) },
1671 	{ "HEIGHT"        T(N) },
1672 	{ "ID"            T(i) },
1673 	{ "ISMAP"         T(N) },
1674 	{ "LANG"          T(N) },
1675 	{ "MAX"           T(N) },
1676 	{ "MAXLENGTH"     T(N) },
1677 	{ "MD"            T(N) },
1678 	{ "MIN"           T(N) },
1679 	{ "NAME"          T(N) },
1680 	{ "NOTAB"         T(N) },
1681 	{ "ONBLUR"        T(N) },
1682 	{ "ONCHANGE"      T(N) },
1683 	{ "ONFOCUS"       T(N) },
1684 	{ "ONSELECT"      T(N) },
1685 	{ "READONLY"      T(N) },
1686 	{ "SIZE"          T(N) },
1687 	{ "SRC"           T(h) },
1688 	{ "STYLE"         T(N) },
1689 	{ "TABINDEX"      T(N) },
1690 	{ "TITLE"         T(N) },
1691 	{ "TYPE"          T(N) },
1692 	{ "USEMAP"        T(N) },
1693 	{ "VALUE"         T(N) },
1694 	{ "WIDTH"         T(N) },
1695 	{ 0               T(N) }	/* Terminate list */
1696 };
1697 
1698 static const attr ISINDEX_attr[] = {    /* ISINDEX attributes */
1699 	{ "ACTION"        T(h) },
1700 	{ "CLASS"         T(c) },
1701 	{ "DIR"           T(N) },
1702 	{ "HREF"          T(h) },
1703 	{ "ID"            T(i) },
1704 	{ "LANG"          T(N) },
1705 	{ "PROMPT"        T(N) },
1706 	{ "STYLE"         T(N) },
1707 	{ "TITLE"         T(N) },
1708 	{ 0               T(N) }	/* Terminate list */
1709 };
1710 
1711 static const attr KEYGEN_attr[] = {     /* KEYGEN attributes */
1712 	{ "CHALLENGE"     T(N) },
1713 	{ "CLASS"         T(c) },
1714 	{ "DIR"           T(N) },
1715 	{ "ID"            T(i) },
1716 	{ "LANG"          T(N) },
1717 	{ "NAME"          T(N) },
1718 	{ "STYLE"         T(N) },
1719 	{ "TITLE"         T(N) },
1720 	{ 0               T(N) }	/* Terminate list */
1721 };
1722 
1723 static const attr LABEL_attr[] = {      /* LABEL attributes */
1724 	{ "ACCESSKEY"     T(N) },
1725 	{ "CLASS"         T(c) },
1726 	{ "CLEAR"         T(N) },
1727 	{ "DIR"           T(N) },
1728 	{ "FOR"           T(N) },
1729 	{ "ID"            T(i) },
1730 	{ "LANG"          T(N) },
1731 	{ "ONBLUR"        T(N) },
1732 	{ "ONFOCUS"       T(N) },
1733 	{ "STYLE"         T(N) },
1734 	{ "TITLE"         T(N) },
1735 	{ 0               T(N) }	/* Terminate list */
1736 };
1737 
1738 static const attr LI_attr[] = {         /* LI attributes */
1739 	{ "CLASS"         T(c) },
1740 	{ "CLEAR"         T(N) },
1741 	{ "DINGBAT"       T(N) },
1742 	{ "DIR"           T(N) },
1743 	{ "ID"            T(i) },
1744 	{ "LANG"          T(N) },
1745 	{ "MD"            T(N) },
1746 	{ "SKIP"          T(N) },
1747 	{ "SRC"           T(h) },
1748 	{ "STYLE"         T(N) },
1749 	{ "TITLE"         T(N) },
1750 	{ "TYPE"          T(N) },
1751 	{ "VALUE"         T(N) },
1752 	{ 0               T(N) }	/* Terminate list */
1753 };
1754 
1755 static const attr LINK_attr[] = {       /* LINK attributes */
1756 	{ "CHARSET"       T(N) },
1757 	{ "CLASS"         T(c) },
1758 	{ "DIR"           T(N) },
1759 	{ "HREF"          T(h) },
1760 	{ "HREFLANG"      T(N) },
1761 	{ "ID"            T(i) },
1762 	{ "LANG"          T(N) },
1763 	{ "MEDIA"         T(N) },
1764 	{ "REL"           T(N) },
1765 	{ "REV"           T(N) },
1766 	{ "STYLE"         T(N) },
1767 	{ "TARGET"        T(N) },
1768 	{ "TITLE"         T(N) },
1769 	{ "TYPE"          T(N) },
1770 	{ 0               T(N) }	/* Terminate list */
1771 };
1772 
1773 static const attr MAP_attr[] = {        /* MAP attributes */
1774 	{ "CLASS"         T(c) },
1775 	{ "CLEAR"         T(N) },
1776 	{ "DIR"           T(N) },
1777 	{ "ID"            T(i) },
1778 	{ "LANG"          T(N) },
1779 	{ "NAME"          T(i) },
1780 	{ "STYLE"         T(N) },
1781 	{ "TITLE"         T(N) },
1782 	{ 0               T(N) }	/* Terminate list */
1783 };
1784 
1785 static const attr MATH_attr[] = {       /* MATH attributes */
1786 	{ "BOX"           T(N) },
1787 	{ "CLASS"         T(c) },
1788 	{ "CLEAR"         T(N) },
1789 	{ "DIR"           T(N) },
1790 	{ "ID"            T(i) },
1791 	{ "LANG"          T(N) },
1792 	{ "STYLE"         T(N) },
1793 	{ "TITLE"         T(N) },
1794 	{ 0               T(N) }	/* Terminate list */
1795 };
1796 
1797 static const attr META_attr[] = {       /* META attributes */
1798 	{ "CHARSET"       T(N) },
1799 	{ "CONTENT"       T(N) },
1800 	{ "HTTP-EQUIV"    T(N) },
1801 	{ "NAME"          T(N) },
1802 	{ "SCHEME"        T(N) },
1803 	{ 0               T(N) }	/* Terminate list */
1804 };
1805 
1806 static const attr NEXTID_attr[] = {     /* NEXTID attributes */
1807 	{ "N"             T(N) },
1808 	{ 0               T(N) }	/* Terminate list */
1809 };
1810 
1811 static const attr NOTE_attr[] = {       /* NOTE attributes */
1812 	{ "CLASS"         T(c) },
1813 	{ "CLEAR"         T(N) },
1814 	{ "DIR"           T(N) },
1815 	{ "ID"            T(i) },
1816 	{ "LANG"          T(N) },
1817 	{ "MD"            T(N) },
1818 	{ "ROLE"          T(x) },
1819 	{ "SRC"           T(h) },
1820 	{ "STYLE"         T(N) },
1821 	{ "TITLE"         T(N) },
1822 	{ 0               T(N) }	/* Terminate list */
1823 };
1824 
1825 static const attr OBJECT_attr[] = {     /* OBJECT attributes */
1826 	{ "ALIGN"         T(N) },
1827 	{ "ARCHIVE"       T(N) },
1828 	{ "BORDER"        T(N) },
1829 	{ "CLASS"         T(c) },
1830 	{ "CLASSID"       T(h) },
1831 	{ "CODEBASE"      T(h) },
1832 	{ "CODETYPE"      T(N) },
1833 	{ "DATA"          T(h) },
1834 	{ "DECLARE"       T(N) },
1835 	{ "DIR"           T(N) },
1836 	{ "HEIGHT"        T(N) },
1837 	{ "HSPACE"        T(N) },
1838 	{ "ID"            T(i) },
1839 	{ "ISMAP"         T(N) },
1840 	{ "LANG"          T(N) },
1841 	{ "NAME"          T(N) },
1842 	{ "NOTAB"         T(N) },
1843 	{ "SHAPES"        T(N) },
1844 	{ "STANDBY"       T(N) },
1845 	{ "STYLE"         T(N) },
1846 	{ "TABINDEX"      T(N) },
1847 	{ "TITLE"         T(N) },
1848 	{ "TYPE"          T(N) },
1849 	{ "USEMAP"        T(h) },
1850 	{ "VSPACE"        T(N) },
1851 	{ "WIDTH"         T(N) },
1852 	{ 0               T(N) }	/* Terminate list */
1853 };
1854 
1855 static const attr OL_attr[] = {         /* OL attributes */
1856 	{ "CLASS"         T(c) },
1857 	{ "CLEAR"         T(N) },
1858 	{ "COMPACT"       T(N) },
1859 	{ "CONTINUE"      T(N) },
1860 	{ "DIR"           T(N) },
1861 	{ "ID"            T(i) },
1862 	{ "LANG"          T(N) },
1863 	{ "SEQNUM"        T(N) },
1864 	{ "START"         T(N) },
1865 	{ "STYLE"         T(N) },
1866 	{ "TITLE"         T(N) },
1867 	{ "TYPE"          T(N) },
1868 	{ 0               T(N) }	/* Terminate list */
1869 };
1870 
1871 static const attr OPTION_attr[] = {     /* OPTION attributes */
1872 	{ "CLASS"         T(c) },
1873 	{ "CLEAR"         T(N) },
1874 	{ "DIR"           T(N) },
1875 	{ "DISABLED"      T(N) },
1876 	{ "ERROR"         T(N) },
1877 	{ "ID"            T(i) },
1878 	{ "LABEL"         T(N) },
1879 	{ "LANG"          T(N) },
1880 	{ "SELECTED"      T(N) },
1881 	{ "SHAPE"         T(N) },
1882 	{ "STYLE"         T(N) },
1883 	{ "TITLE"         T(N) },
1884 	{ "VALUE"         T(N) },
1885 	{ 0               T(N) }	/* Terminate list */
1886 };
1887 
1888 static const attr OVERLAY_attr[] = {    /* OVERLAY attributes */
1889 	{ "CLASS"         T(c) },
1890 	{ "HEIGHT"        T(N) },
1891 	{ "ID"            T(i) },
1892 	{ "IMAGEMAP"      T(N) },
1893 	{ "MD"            T(N) },
1894 	{ "SRC"           T(h) },
1895 	{ "STYLE"         T(N) },
1896 	{ "TITLE"         T(N) },
1897 	{ "UNITS"         T(N) },
1898 	{ "WIDTH"         T(N) },
1899 	{ "X"             T(N) },
1900 	{ "Y"             T(N) },
1901 	{ 0               T(N) }	/* Terminate list */
1902 };
1903 
1904 static const attr P_attr[] = {          /* P attributes */
1905 	{ "ALIGN"         T(N) },
1906 	{ "CLASS"         T(c) },
1907 	{ "CLEAR"         T(N) },
1908 	{ "DIR"           T(N) },
1909 	{ "ID"            T(i) },
1910 	{ "LANG"          T(N) },
1911 	{ "NOWRAP"        T(N) },
1912 	{ "STYLE"         T(N) },
1913 	{ "TITLE"         T(N) },
1914 	{ 0               T(N) }	/* Terminate list */
1915 };
1916 
1917 static const attr PARAM_attr[] = {      /* PARAM attributes */
1918 	{ "ACCEPT"        T(N) },
1919 	{ "ACCEPT-CHARSET" T(N) },
1920 	{ "ACCEPT-ENCODING" T(N) },
1921 	{ "CLASS"         T(c) },
1922 	{ "CLEAR"         T(N) },
1923 	{ "DATA"          T(N) },
1924 	{ "DIR"           T(N) },
1925 	{ "ID"            T(i) },
1926 	{ "LANG"          T(N) },
1927 	{ "NAME"          T(N) },
1928 	{ "OBJECT"        T(N) },
1929 	{ "REF"           T(N) },
1930 	{ "STYLE"         T(N) },
1931 	{ "TITLE"         T(N) },
1932 	{ "TYPE"          T(N) },
1933 	{ "VALUE"         T(N) },
1934 	{ "VALUEREF"      T(N) },
1935 	{ "VALUETYPE"     T(N) },
1936 	{ 0               T(N) }	/* Terminate list */
1937 };
1938 
1939 static const attr Q_attr[] = {          /* Q attributes */
1940 	{ "CITE"          T(h) },
1941 	{ "CLASS"         T(c) },
1942 	{ "CLEAR"         T(N) },
1943 	{ "DIR"           T(N) },
1944 	{ "ID"            T(i) },
1945 	{ "LANG"          T(N) },
1946 	{ "STYLE"         T(N) },
1947 	{ "TITLE"         T(N) },
1948 	{ 0               T(N) }	/* Terminate list */
1949 };
1950 
1951 static const attr SCRIPT_attr[] = {     /* SCRIPT attributes */
1952 	{ "CHARSET"       T(N) },
1953 	{ "CLASS"         T(c) },
1954 	{ "CLEAR"         T(N) },
1955 	{ "DEFER"         T(N) },
1956 	{ "DIR"           T(N) },
1957 	{ "EVENT"         T(N) },
1958 	{ "FOR"           T(N) },
1959 	{ "ID"            T(i) },
1960 	{ "LANG"          T(N) },
1961 	{ "LANGUAGE"      T(N) },
1962 	{ "NAME"          T(N) },
1963 	{ "SCRIPTENGINE"  T(N) },
1964 	{ "SRC"           T(h) },
1965 	{ "STYLE"         T(N) },
1966 	{ "TITLE"         T(N) },
1967 	{ "TYPE"          T(N) },
1968 	{ 0               T(N) }	/* Terminate list */
1969 };
1970 
1971 static const attr SELECT_attr[] = {     /* SELECT attributes */
1972 	{ "ALIGN"         T(N) },
1973 	{ "CLASS"         T(c) },
1974 	{ "CLEAR"         T(N) },
1975 	{ "DIR"           T(N) },
1976 	{ "DISABLED"      T(N) },
1977 	{ "ERROR"         T(N) },
1978 	{ "HEIGHT"        T(N) },
1979 	{ "ID"            T(i) },
1980 	{ "LANG"          T(N) },
1981 	{ "MD"            T(N) },
1982 	{ "MULTIPLE"      T(N) },
1983 	{ "NAME"          T(N) },
1984 	{ "NOTAB"         T(N) },
1985 	{ "ONBLUR"        T(N) },
1986 	{ "ONCHANGE"      T(N) },
1987 	{ "ONFOCUS"       T(N) },
1988 	{ "SIZE"          T(N) },
1989 	{ "STYLE"         T(N) },
1990 	{ "TABINDEX"      T(N) },
1991 	{ "TITLE"         T(N) },
1992 	{ "UNITS"         T(N) },
1993 	{ "WIDTH"         T(N) },
1994 	{ 0               T(N) }	/* Terminate list */
1995 };
1996 
1997 static const attr STYLE_attr[] = {      /* STYLE attributes */
1998 	{ "CLASS"         T(c) },
1999 	{ "DIR"           T(N) },
2000 	{ "ID"            T(i) },
2001 	{ "LANG"          T(N) },
2002 	{ "MEDIA"         T(N) },
2003 	{ "NOTATION"      T(N) },
2004 	{ "STYLE"         T(N) },
2005 	{ "TITLE"         T(N) },
2006 	{ "TYPE"          T(N) },
2007 	{ 0               T(N) }	/* Terminate list */
2008 };
2009 
2010 static const attr TAB_attr[] = {        /* TAB attributes */
2011 	{ "ALIGN"         T(N) },
2012 	{ "CLASS"         T(c) },
2013 	{ "CLEAR"         T(N) },
2014 	{ "DIR"           T(N) },
2015 	{ "DP"            T(N) },
2016 	{ "ID"            T(i) },
2017 	{ "INDENT"        T(N) },
2018 	{ "LANG"          T(N) },
2019 	{ "STYLE"         T(N) },
2020 	{ "TITLE"         T(N) },
2021 	{ "TO"            T(N) },
2022 	{ 0               T(N) }	/* Terminate list */
2023 };
2024 
2025 static const attr TABLE_attr[] = {      /* TABLE attributes */
2026 	{ "ALIGN"         T(N) },
2027 	{ "BACKGROUND"    T(h) },
2028 	{ "BORDER"        T(N) },
2029 	{ "CELLPADDING"   T(N) },
2030 	{ "CELLSPACING"   T(N) },
2031 	{ "CLASS"         T(c) },
2032 	{ "CLEAR"         T(N) },
2033 	{ "COLS"          T(N) },
2034 	{ "COLSPEC"       T(N) },
2035 	{ "DIR"           T(N) },
2036 	{ "DP"            T(N) },
2037 	{ "FRAME"         T(N) },
2038 	{ "ID"            T(i) },
2039 	{ "LANG"          T(N) },
2040 	{ "NOFLOW"        T(N) },
2041 	{ "NOWRAP"        T(N) },
2042 	{ "RULES"         T(N) },
2043 	{ "STYLE"         T(N) },
2044 	{ "SUMMARY"       T(N) },
2045 	{ "TITLE"         T(N) },
2046 	{ "UNITS"         T(N) },
2047 	{ "WIDTH"         T(N) },
2048 	{ 0               T(N) }	/* Terminate list */
2049 };
2050 
2051 static const attr TD_attr[] = {         /* TD attributes */
2052 	{ "ABBR"          T(N) },
2053 	{ "ALIGN"         T(N) },
2054 	{ "AXES"          T(N) },
2055 	{ "AXIS"          T(N) },
2056 	{ "BACKGROUND"    T(h) },
2057 	{ "CHAR"          T(N) },
2058 	{ "CHAROFF"       T(N) },
2059 	{ "CLASS"         T(c) },
2060 	{ "CLEAR"         T(N) },
2061 	{ "COLSPAN"       T(N) },
2062 	{ "DIR"           T(N) },
2063 	{ "DP"            T(N) },
2064 	{ "HEADERS"       T(N) },
2065 	{ "HEIGHT"        T(N) },
2066 	{ "ID"            T(i) },
2067 	{ "LANG"          T(N) },
2068 	{ "NOWRAP"        T(N) },
2069 	{ "ROWSPAN"       T(N) },
2070 	{ "SCOPE"         T(N) },
2071 	{ "STYLE"         T(N) },
2072 	{ "TITLE"         T(N) },
2073 	{ "VALIGN"        T(N) },
2074 	{ "WIDTH"         T(N) },
2075 	{ 0               T(N) }	/* Terminate list */
2076 };
2077 
2078 static const attr TEXTAREA_attr[] = {   /* TEXTAREA attributes */
2079 	{ "ACCEPT-CHARSET" T(N) },
2080 	{ "ACCESSKEY"     T(N) },
2081 	{ "ALIGN"         T(N) },
2082 	{ "CLASS"         T(c) },
2083 	{ "CLEAR"         T(N) },
2084 	{ "COLS"          T(N) },
2085 	{ "DIR"           T(N) },
2086 	{ "DISABLED"      T(N) },
2087 	{ "ERROR"         T(N) },
2088 	{ "ID"            T(i) },
2089 	{ "LANG"          T(N) },
2090 	{ "NAME"          T(N) },
2091 	{ "NOTAB"         T(N) },
2092 	{ "ONBLUR"        T(N) },
2093 	{ "ONCHANGE"      T(N) },
2094 	{ "ONFOCUS"       T(N) },
2095 	{ "ONSELECT"      T(N) },
2096 	{ "READONLY"      T(N) },
2097 	{ "ROWS"          T(N) },
2098 	{ "STYLE"         T(N) },
2099 	{ "TABINDEX"      T(N) },
2100 	{ "TITLE"         T(N) },
2101 	{ 0               T(N) }	/* Terminate list */
2102 };
2103 
2104 static const attr TR_attr[] = {         /* TBODY attributes */
2105 	{ "ALIGN"         T(N) },
2106 	{ "CHAR"          T(N) },
2107 	{ "CHAROFF"       T(N) },
2108 	{ "CLASS"         T(c) },
2109 	{ "CLEAR"         T(N) },
2110 	{ "DIR"           T(N) },
2111 	{ "DP"            T(N) },
2112 	{ "ID"            T(i) },
2113 	{ "LANG"          T(N) },
2114 	{ "NOWRAP"        T(N) },
2115 	{ "STYLE"         T(N) },
2116 	{ "TITLE"         T(N) },
2117 	{ "VALIGN"        T(N) },
2118 	{ 0               T(N) }	/* Terminate list */
2119 };
2120 
2121 static const attr UL_attr[] = {         /* DIR attributes */
2122 	{ "CLASS"         T(c) },
2123 	{ "CLEAR"         T(N) },
2124 	{ "COMPACT"       T(N) },
2125 	{ "DINGBAT"       T(N) },
2126 	{ "DIR"           T(N) },
2127 	{ "ID"            T(i) },
2128 	{ "LANG"          T(N) },
2129 	{ "MD"            T(N) },
2130 	{ "PLAIN"         T(N) },
2131 	{ "SRC"           T(h) },
2132 	{ "STYLE"         T(N) },
2133 	{ "TITLE"         T(N) },
2134 	{ "TYPE"          T(N) },
2135 	{ "WRAP"          T(N) },
2136 	{ 0               T(N) }	/* Terminate list */
2137 };
2138 
2139 /* *INDENT-ON* */
2140 
2141 /* justification-flags */
2142 #undef N
2143 #undef i
2144 #undef h
2145 #undef c
2146 #undef x
2147 
2148 #undef T
2149 
2150 /* tag-names */
2151 #undef A
2152 #undef ABBR
2153 #undef ACRONYM
2154 #undef ADDRESS
2155 #undef APPLET
2156 #undef AREA
2157 #undef AU
2158 #undef AUTHOR
2159 #undef B
2160 #undef BANNER
2161 #undef BASE
2162 #undef BASEFONT
2163 #undef BDO
2164 #undef BGSOUND
2165 #undef BIG
2166 #undef BLINK
2167 #undef BLOCKQUOTE
2168 #undef BODY
2169 #undef BODYTEXT
2170 #undef BQ
2171 #undef BR
2172 #undef BUTTON
2173 #undef CAPTION
2174 #undef CENTER
2175 #undef CITE
2176 #undef CODE
2177 #undef COL
2178 #undef COLGROUP
2179 #undef COMMENT
2180 #undef CREDIT
2181 #undef DD
2182 #undef DEL
2183 #undef DFN
2184 #undef DIR
2185 #undef DIV
2186 #undef DL
2187 #undef DLC
2188 #undef DT
2189 #undef EM
2190 #undef EMBED
2191 #undef FIELDSET
2192 #undef FIG
2193 #undef FN
2194 #undef FONT
2195 #undef FORM
2196 #undef FRAME
2197 #undef FRAMESET
2198 #undef H1
2199 #undef H2
2200 #undef H3
2201 #undef H4
2202 #undef H5
2203 #undef H6
2204 #undef HEAD
2205 #undef HR
2206 #undef HTML
2207 #undef HY
2208 #undef I
2209 #undef IFRAME
2210 #undef IMG
2211 #undef INPUT
2212 #undef INS
2213 #undef ISINDEX
2214 #undef KBD
2215 #undef KEYGEN
2216 #undef LABEL
2217 #undef LEGEND
2218 #undef LH
2219 #undef LI
2220 #undef LINK
2221 #undef LISTING
2222 #undef MAP
2223 #undef MARQUEE
2224 #undef MATH
2225 #undef MENU
2226 #undef META
2227 #undef NEXTID
2228 #undef NOFRAMES
2229 #undef NOTE
2230 #undef OBJECT
2231 #undef OL
2232 #undef OPTION
2233 #undef OVERLAY
2234 #undef P
2235 #undef PARAM
2236 #undef PLAINTEXT
2237 #undef PRE
2238 #undef Q
2239 #undef S
2240 #undef SAMP
2241 #undef SCRIPT
2242 #undef SELECT
2243 #undef SHY
2244 #undef SMALL
2245 #undef SPAN
2246 #undef SPOT
2247 #undef STRIKE
2248 #undef STRONG
2249 #undef STYLE
2250 #undef SUB
2251 #undef SUP
2252 #undef TAB
2253 #undef TABLE
2254 #undef TBODY
2255 #undef TD
2256 #undef TEXTAREA
2257 #undef TEXTFLOW
2258 #undef TFOOT
2259 #undef TH
2260 #undef THEAD
2261 #undef TITLE
2262 #undef TR
2263 #undef TT
2264 #undef U
2265 #undef UL
2266 #undef VAR
2267 #undef WBR
2268 #undef XMP
2269 #undef OBJECT_PCDATA
2270 
2271 /* these definitions are used in the tags-tables */
2272 #undef P
2273 #undef P_
2274 #ifdef USE_COLOR_STYLE
2275 #define P_(x) #x, (sizeof #x) -1
2276 #define NULL_HTTag_ NULL, 0
2277 #else
2278 #define P_(x) #x
2279 #define NULL_HTTag_ NULL
2280 #endif
2281 
2282 #ifdef USE_JUSTIFY_ELTS
2283 #define P(x) P_(x), 1
2284 #define P0(x) P_(x), 0
2285 #define NULL_HTTag NULL_HTTag_,0
2286 #else
2287 #define P(x) P_(x)
2288 #define P0(x) P_(x)
2289 #define NULL_HTTag NULL_HTTag_
2290 #endif
2291 
2292 #define ATTR_DATA(name) name##_attr, HTML_##name##_ATTRIBUTES, name##_attr_type
2293 
2294 #endif /* once_HTMLDTD */
2295 /* *INDENT-OFF* */
2296 static const HTTag tags_table1[HTML_ALL_ELEMENTS] = {
2297  { P(A),           ATTR_DATA(A),           SGML_MIXED,   T_A},
2298  { P(ABBR),        ATTR_DATA(GEN),         SGML_MIXED,   T_ABBR},
2299  { P(ACRONYM),     ATTR_DATA(GEN),         SGML_MIXED,   T_ACRONYM},
2300  { P(ADDRESS),     ATTR_DATA(ADDRESS),     SGML_MIXED,   T_ADDRESS},
2301  { P(APPLET),      ATTR_DATA(APPLET),      SGML_MIXED,   T_APPLET},
2302  { P(AREA),        ATTR_DATA(AREA),        SGML_EMPTY,   T_AREA},
2303  { P(AU),          ATTR_DATA(GEN),         SGML_MIXED,   T_AU},
2304  { P(AUTHOR),      ATTR_DATA(GEN),         SGML_MIXED,   T_AUTHOR},
2305  { P(B),           ATTR_DATA(GEN),         SGML_MIXED,   T_B},
2306  { P0(BANNER),     ATTR_DATA(GEN),         SGML_MIXED,   T_BANNER},
2307  { P(BASE),        ATTR_DATA(BASE),        SGML_EMPTY,   T_BASE},
2308  { P(BASEFONT),    ATTR_DATA(FONT),        SGML_EMPTY,   T_BASEFONT},
2309  { P(BDO),         ATTR_DATA(GEN),         SGML_MIXED,   T_BDO},
2310  { P(BGSOUND),     ATTR_DATA(BGSOUND),     SGML_EMPTY,   T_BGSOUND},
2311  { P(BIG),         ATTR_DATA(GEN),         SGML_MIXED,   T_BIG},
2312  { P(BLINK),       ATTR_DATA(GEN),         SGML_MIXED,   T_BLINK},
2313  { P(BLOCKQUOTE),  ATTR_DATA(BQ),          SGML_MIXED,   T_BLOCKQUOTE},
2314  { P(BODY),        ATTR_DATA(BODY),        SGML_MIXED,   T_BODY},
2315  { P(BODYTEXT),    ATTR_DATA(BODYTEXT),    SGML_MIXED,   T_BODYTEXT},
2316  { P(BQ),          ATTR_DATA(BQ),          SGML_MIXED,   T_BQ},
2317  { P(BR),          ATTR_DATA(GEN),         SGML_EMPTY,   T_BR},
2318  { P(BUTTON),      ATTR_DATA(BUTTON),      SGML_MIXED,   T_BUTTON},
2319  { P(CAPTION),     ATTR_DATA(CAPTION),     SGML_MIXED,   T_CAPTION},
2320  { P(CENTER),      ATTR_DATA(DIV),         SGML_MIXED,   T_CENTER},
2321  { P(CITE),        ATTR_DATA(GEN),         SGML_MIXED,   T_CITE},
2322  { P(CODE),        ATTR_DATA(GEN),         SGML_MIXED,   T_CODE},
2323  { P(COL),         ATTR_DATA(COL),         SGML_EMPTY,   T_COL},
2324  { P(COLGROUP),    ATTR_DATA(COL),         SGML_ELEMENT, T_COLGROUP},
2325  { P(COMMENT),     ATTR_DATA(GEN),         SGML_PCDATA,  T_COMMENT},
2326  { P(CREDIT),      ATTR_DATA(GEN),         SGML_MIXED,   T_CREDIT},
2327  { P(DD),          ATTR_DATA(GEN),         SGML_MIXED,   T_DD},
2328  { P(DEL),         ATTR_DATA(DEL),         SGML_MIXED,   T_DEL},
2329  { P(DFN),         ATTR_DATA(GEN),         SGML_MIXED,   T_DFN},
2330  { P(DIR),         ATTR_DATA(UL),          SGML_MIXED,   T_DIR},
2331  { P(DIV),         ATTR_DATA(DIV),         SGML_MIXED,   T_DIV},
2332  { P(DL),          ATTR_DATA(DL),          SGML_MIXED,   T_DL},
2333  { P(DLC),         ATTR_DATA(DL),          SGML_MIXED,   T_DLC},
2334  { P(DT),          ATTR_DATA(GEN),         SGML_MIXED,   T_DT},
2335  { P(EM),          ATTR_DATA(GEN),         SGML_MIXED,   T_EM},
2336  { P(EMBED),       ATTR_DATA(EMBED),       SGML_EMPTY,   T_EMBED},
2337  { P(FIELDSET),    ATTR_DATA(GEN),         SGML_MIXED,   T_FIELDSET},
2338  { P(FIG),         ATTR_DATA(FIG),         SGML_MIXED,   T_FIG},
2339  { P(FN),          ATTR_DATA(GEN),         SGML_MIXED,   T_FN},
2340  { P(FONT),        ATTR_DATA(FONT),        SGML_MIXED,   T_FONT},
2341  { P(FORM),        ATTR_DATA(FORM),        SGML_MIXED,   T_FORM},
2342  { P(FRAME),       ATTR_DATA(FRAME),       SGML_EMPTY,   T_FRAME},
2343  { P(FRAMESET),    ATTR_DATA(FRAMESET),    SGML_ELEMENT, T_FRAMESET},
2344  { P0(H1),         ATTR_DATA(H),           SGML_MIXED,   T_H1},
2345  { P0(H2),         ATTR_DATA(H),           SGML_MIXED,   T_H2},
2346  { P0(H3),         ATTR_DATA(H),           SGML_MIXED,   T_H3},
2347  { P0(H4),         ATTR_DATA(H),           SGML_MIXED,   T_H4},
2348  { P0(H5),         ATTR_DATA(H),           SGML_MIXED,   T_H5},
2349  { P0(H6),         ATTR_DATA(H),           SGML_MIXED,   T_H6},
2350  { P(HEAD),        ATTR_DATA(GEN),         SGML_ELEMENT, T_HEAD},
2351  { P(HR),          ATTR_DATA(HR),          SGML_EMPTY,   T_HR},
2352  { P(HTML),        ATTR_DATA(GEN),         SGML_MIXED,   T_HTML},
2353  { P(HY),          ATTR_DATA(GEN),         SGML_EMPTY,   T_HY},
2354  { P(I),           ATTR_DATA(GEN),         SGML_MIXED,   T_I},
2355  { P(IFRAME),      ATTR_DATA(IFRAME),      SGML_MIXED,   T_IFRAME},
2356  { P(IMG),         ATTR_DATA(IMG),         SGML_EMPTY,   T_IMG},
2357  { P(INPUT),       ATTR_DATA(INPUT),       SGML_EMPTY,   T_INPUT},
2358  { P(INS),         ATTR_DATA(DEL),         SGML_MIXED,   T_INS},
2359  { P(ISINDEX),     ATTR_DATA(ISINDEX),     SGML_EMPTY,   T_ISINDEX},
2360  { P(KBD),         ATTR_DATA(GEN),         SGML_MIXED,   T_KBD},
2361  { P(KEYGEN),      ATTR_DATA(KEYGEN),      SGML_EMPTY,   T_KEYGEN},
2362  { P(LABEL),       ATTR_DATA(LABEL),       SGML_MIXED,   T_LABEL},
2363  { P(LEGEND),      ATTR_DATA(CAPTION),     SGML_MIXED,   T_LEGEND},
2364  { P(LH),          ATTR_DATA(GEN),         SGML_MIXED,   T_LH},
2365  { P(LI),          ATTR_DATA(LI),          SGML_MIXED,   T_LI},
2366  { P(LINK),        ATTR_DATA(LINK),        SGML_EMPTY,   T_LINK},
2367  { P(LISTING),     ATTR_DATA(GEN),         SGML_LITTERAL,T_LISTING},
2368  { P(MAP),         ATTR_DATA(MAP),         SGML_ELEMENT, T_MAP},
2369  { P(MARQUEE),     ATTR_DATA(GEN),         SGML_MIXED,   T_MARQUEE},
2370  { P(MATH),        ATTR_DATA(MATH),        SGML_PCDATA,  T_MATH},
2371  { P(MENU),        ATTR_DATA(UL),          SGML_MIXED,   T_MENU},
2372  { P(META),        ATTR_DATA(META),        SGML_EMPTY,   T_META},
2373  { P(NEXTID),      ATTR_DATA(NEXTID),      SGML_EMPTY,   T_NEXTID},
2374  { P(NOFRAMES),    ATTR_DATA(GEN),         SGML_MIXED,   T_NOFRAMES},
2375  { P(NOTE),        ATTR_DATA(NOTE),        SGML_MIXED,   T_NOTE},
2376  { P(OBJECT),      ATTR_DATA(OBJECT),      SGML_LITTERAL,T_OBJECT},
2377  { P(OL),          ATTR_DATA(OL),          SGML_MIXED,   T_OL},
2378  { P(OPTION),      ATTR_DATA(OPTION),      SGML_PCDATA,  T_OPTION},
2379  { P(OVERLAY),     ATTR_DATA(OVERLAY),     SGML_PCDATA,  T_OVERLAY},
2380  { P(P),           ATTR_DATA(P),           SGML_MIXED,   T_P},
2381  { P(PARAM),       ATTR_DATA(PARAM),       SGML_EMPTY,   T_PARAM},
2382  { P(PLAINTEXT),   ATTR_DATA(GEN),         SGML_LITTERAL,T_PLAINTEXT},
2383  { P0(PRE),        ATTR_DATA(GEN),         SGML_MIXED,   T_PRE},
2384  { P(Q),           ATTR_DATA(Q),           SGML_MIXED,   T_Q},
2385  { P(S),           ATTR_DATA(GEN),         SGML_MIXED,   T_S},
2386  { P(SAMP),        ATTR_DATA(GEN),         SGML_MIXED,   T_SAMP},
2387  { P(SCRIPT),      ATTR_DATA(SCRIPT),      SGML_SCRIPT,  T_SCRIPT},
2388  { P(SELECT),      ATTR_DATA(SELECT),      SGML_ELEMENT, T_SELECT},
2389  { P(SHY),         ATTR_DATA(GEN),         SGML_EMPTY,   T_SHY},
2390  { P(SMALL),       ATTR_DATA(GEN),         SGML_MIXED,   T_SMALL},
2391  { P(SPAN),        ATTR_DATA(GEN),         SGML_MIXED,   T_SPAN},
2392  { P(SPOT),        ATTR_DATA(GEN),         SGML_EMPTY,   T_SPOT},
2393  { P(STRIKE),      ATTR_DATA(GEN),         SGML_MIXED,   T_STRIKE},
2394  { P(STRONG),      ATTR_DATA(GEN),         SGML_MIXED,   T_STRONG},
2395  { P(STYLE),       ATTR_DATA(STYLE),       SGML_CDATA,   T_STYLE},
2396  { P(SUB),         ATTR_DATA(GEN),         SGML_MIXED,   T_SUB},
2397  { P(SUP),         ATTR_DATA(GEN),         SGML_MIXED,   T_SUP},
2398  { P(TAB),         ATTR_DATA(TAB),         SGML_EMPTY,   T_TAB},
2399  { P(TABLE),       ATTR_DATA(TABLE),       SGML_ELEMENT, T_TABLE},
2400  { P(TBODY),       ATTR_DATA(TR),          SGML_ELEMENT, T_TBODY},
2401  { P(TD),          ATTR_DATA(TD),          SGML_MIXED,   T_TD},
2402  { P(TEXTAREA),    ATTR_DATA(TEXTAREA),    SGML_PCDATA,  T_TEXTAREA},
2403  { P(TEXTFLOW),    ATTR_DATA(BODYTEXT),    SGML_MIXED,   T_TEXTFLOW},
2404  { P(TFOOT),       ATTR_DATA(TR),          SGML_ELEMENT, T_TFOOT},
2405  { P(TH),          ATTR_DATA(TD),          SGML_MIXED,   T_TH},
2406  { P(THEAD),       ATTR_DATA(TR),          SGML_ELEMENT, T_THEAD},
2407  { P(TITLE),       ATTR_DATA(GEN),         SGML_PCDATA,  T_TITLE},
2408  { P(TR),          ATTR_DATA(TR),          SGML_MIXED,   T_TR},
2409  { P(TT),          ATTR_DATA(GEN),         SGML_MIXED,   T_TT},
2410  { P(U),           ATTR_DATA(GEN),         SGML_MIXED,   T_U},
2411  { P(UL),          ATTR_DATA(UL),          SGML_MIXED,   T_UL},
2412  { P(VAR),         ATTR_DATA(GEN),         SGML_MIXED,   T_VAR},
2413  { P(WBR),         ATTR_DATA(GEN),         SGML_EMPTY,   T_WBR},
2414  { P0(XMP),        ATTR_DATA(GEN),         SGML_LITTERAL,T_XMP},
2415 /* additional (alternative variants), not counted in HTML_ELEMENTS: */
2416 /* This one will be used as a temporary substitute within the parser when
2417    it has been signalled to parse OBJECT content as MIXED. - kw */
2418  { P(OBJECT),      ATTR_DATA(OBJECT),      SGML_MIXED,   T_OBJECT_PCDATA},
2419 };
2420 /* *INDENT-ON* */
2421 
2422 #endif /* src_HTMLDTD_H1 */
2423