Reviewed by Ken.
[WebKit-https.git] / WebCore / khtml / misc / htmltags.c
1 /* ANSI-C code produced by gperf version 3.0.1 */
2 /* Command-line: gperf -a -L ANSI-C -D -E -C -l -o -t -k '*' -NfindTag -Hhash_tag -Wwordlist_tag htmltags.gperf  */
3
4 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
5       && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
6       && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
7       && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
8       && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
9       && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
10       && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
11       && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
12       && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
13       && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
14       && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
15       && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
16       && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
17       && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
18       && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
19       && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
20       && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
21       && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
22       && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
23       && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
24       && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
25       && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
26       && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
27 /* The character set is not based on ISO-646.  */
28 #error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
29 #endif
30
31 #line 1 "htmltags.gperf"
32
33 /* This file is automatically generated from htmltags.in by maketags, do not edit */
34 /* Copyright 1999 Lars Knoll */
35 #include "htmltags.h"
36 #line 6 "htmltags.gperf"
37 struct tags {
38     const char *name;
39     int id;
40 };
41 /* maximum key range = 365, duplicates = 0 */
42
43 #ifdef __GNUC__
44 __inline
45 #else
46 #ifdef __cplusplus
47 inline
48 #endif
49 #endif
50 static unsigned int
51 hash_tag (register const char *str, register unsigned int len)
52 {
53   static const unsigned short asso_values[] =
54     {
55       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
56       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
57       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
58       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
59       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
60        60,  55,  50,  45,  40,   5, 366, 366, 366, 366,
61       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
62       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
63       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
64       366, 366, 366, 366, 366, 366, 366,  15,  10,  35,
65        10,   5,  10,  10,  50,  40, 115,  30,   5,  15,
66        30,  55,   5,  85,  20,   0,   0,  65,  55,  35,
67        95,  70, 366, 366, 366, 366, 366, 366, 366, 366,
68       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
69       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
70       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
71       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
72       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
73       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
74       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
75       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
76       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
77       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
78       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
79       366, 366, 366, 366, 366, 366, 366, 366, 366, 366,
80       366, 366, 366, 366, 366, 366, 366
81     };
82   register int hval = len;
83
84   switch (hval)
85     {
86       default:
87         hval += asso_values[(unsigned char)str[9]];
88       /*FALLTHROUGH*/
89       case 9:
90         hval += asso_values[(unsigned char)str[8]];
91       /*FALLTHROUGH*/
92       case 8:
93         hval += asso_values[(unsigned char)str[7]];
94       /*FALLTHROUGH*/
95       case 7:
96         hval += asso_values[(unsigned char)str[6]];
97       /*FALLTHROUGH*/
98       case 6:
99         hval += asso_values[(unsigned char)str[5]];
100       /*FALLTHROUGH*/
101       case 5:
102         hval += asso_values[(unsigned char)str[4]];
103       /*FALLTHROUGH*/
104       case 4:
105         hval += asso_values[(unsigned char)str[3]];
106       /*FALLTHROUGH*/
107       case 3:
108         hval += asso_values[(unsigned char)str[2]];
109       /*FALLTHROUGH*/
110       case 2:
111         hval += asso_values[(unsigned char)str[1]+1];
112       /*FALLTHROUGH*/
113       case 1:
114         hval += asso_values[(unsigned char)str[0]];
115         break;
116     }
117   return hval;
118 }
119
120 #ifdef __GNUC__
121 __inline
122 #endif
123 const struct tags *
124 findTag (register const char *str, register unsigned int len)
125 {
126   enum
127     {
128       TOTAL_KEYWORDS = 105,
129       MIN_WORD_LENGTH = 1,
130       MAX_WORD_LENGTH = 10,
131       MIN_HASH_VALUE = 1,
132       MAX_HASH_VALUE = 365
133     };
134
135   static const unsigned char lengthtable[] =
136     {
137        1,  2,  1,  2,  1,  2,  3,  1,  2,  2,  3,  4,  3,  4,
138        5,  2,  4,  5,  1,  2,  4,  3,  4,  5,  2,  3,  4,  2,
139        8,  4,  5,  6,  7,  3,  5,  1,  2,  3,  4,  5,  2,  3,
140        5,  6,  2,  3,  6,  2,  3,  4,  1,  7,  3,  4,  2,  3,
141        2,  3,  4,  2,  5,  6,  2,  8,  6,  2,  5,  6,  2,  4,
142        5,  8,  5,  3,  4,  3,  4,  8,  3,  5,  6,  6,  7,  8,
143        4,  6,  6,  8,  5,  5,  7,  3,  4,  6,  7,  8,  7,  9,
144        7,  7,  6,  6,  6,  8, 10
145     };
146   static const struct tags wordlist_tag[] =
147     {
148 #line 87 "htmltags.gperf"
149       {"s", ID_S},
150 #line 106 "htmltags.gperf"
151       {"tr", ID_TR},
152 #line 82 "htmltags.gperf"
153       {"p", ID_P},
154 #line 100 "htmltags.gperf"
155       {"td", ID_TD},
156 #line 17 "htmltags.gperf"
157       {"b", ID_B},
158 #line 24 "htmltags.gperf"
159       {"br", ID_BR},
160 #line 85 "htmltags.gperf"
161       {"pre", ID_PRE},
162 #line 11 "htmltags.gperf"
163       {"a", ID_A},
164 #line 33 "htmltags.gperf"
165       {"dd", ID_DD},
166 #line 38 "htmltags.gperf"
167       {"dl", ID_DL},
168 #line 34 "htmltags.gperf"
169       {"del", ID_DEL},
170 #line 18 "htmltags.gperf"
171       {"base", ID_BASE},
172 #line 69 "htmltags.gperf"
173       {"map", ID_MAP},
174 #line 88 "htmltags.gperf"
175       {"samp", ID_SAMP},
176 #line 98 "htmltags.gperf"
177       {"table", ID_TABLE},
178 #line 40 "htmltags.gperf"
179       {"em", ID_EM},
180 #line 16 "htmltags.gperf"
181       {"area", ID_AREA},
182 #line 64 "htmltags.gperf"
183       {"label", ID_LABEL},
184 #line 56 "htmltags.gperf"
185       {"i", ID_I},
186 #line 103 "htmltags.gperf"
187       {"th", ID_TH},
188 #line 72 "htmltags.gperf"
189       {"meta", ID_META},
190 #line 31 "htmltags.gperf"
191       {"col", ID_COL},
192 #line 43 "htmltags.gperf"
193       {"font", ID_FONT},
194 #line 45 "htmltags.gperf"
195       {"frame", ID_FRAME},
196 #line 54 "htmltags.gperf"
197       {"hr", ID_HR},
198 #line 35 "htmltags.gperf"
199       {"dfn", ID_DFN},
200 #line 44 "htmltags.gperf"
201       {"form", ID_FORM},
202 #line 52 "htmltags.gperf"
203       {"h6", ID_H6},
204 #line 46 "htmltags.gperf"
205       {"frameset", ID_FRAMESET},
206 #line 30 "htmltags.gperf"
207       {"code", ID_CODE},
208 #line 91 "htmltags.gperf"
209       {"small", ID_SMALL},
210 #line 90 "htmltags.gperf"
211       {"select", ID_SELECT},
212 #line 14 "htmltags.gperf"
213       {"address", ID_ADDRESS},
214 #line 97 "htmltags.gperf"
215       {"sup", ID_SUP},
216 #line 41 "htmltags.gperf"
217       {"embed", ID_EMBED},
218 #line 108 "htmltags.gperf"
219       {"u", ID_U},
220 #line 107 "htmltags.gperf"
221       {"tt", ID_TT},
222 #line 96 "htmltags.gperf"
223       {"sub", ID_SUB},
224 #line 73 "htmltags.gperf"
225       {"nobr", ID_NOBR},
226 #line 83 "htmltags.gperf"
227       {"param", ID_PARAM},
228 #line 79 "htmltags.gperf"
229       {"ol", ID_OL},
230 #line 20 "htmltags.gperf"
231       {"bdo", ID_BDO},
232 #line 104 "htmltags.gperf"
233       {"thead", ID_THEAD},
234 #line 66 "htmltags.gperf"
235       {"legend", ID_LEGEND},
236 #line 39 "htmltags.gperf"
237       {"dt", ID_DT},
238 #line 62 "htmltags.gperf"
239       {"kbd", ID_KBD},
240 #line 89 "htmltags.gperf"
241       {"script", ID_SCRIPT},
242 #line 109 "htmltags.gperf"
243       {"ul", ID_UL},
244 #line 58 "htmltags.gperf"
245       {"img", ID_IMG},
246 #line 12 "htmltags.gperf"
247       {"abbr", ID_ABBR},
248 #line 86 "htmltags.gperf"
249       {"q", ID_Q},
250 #line 74 "htmltags.gperf"
251       {"noembed", ID_NOEMBED},
252 #line 110 "htmltags.gperf"
253       {"var", ID_VAR},
254 #line 53 "htmltags.gperf"
255       {"head", ID_HEAD},
256 #line 51 "htmltags.gperf"
257       {"h5", ID_H5},
258 #line 111 "htmltags.gperf"
259       {"wbr", ID_WBR},
260 #line 50 "htmltags.gperf"
261       {"h4", ID_H4},
262 #line 60 "htmltags.gperf"
263       {"ins", ID_INS},
264 #line 23 "htmltags.gperf"
265       {"body", ID_BODY},
266 #line 49 "htmltags.gperf"
267       {"h3", ID_H3},
268 #line 114 "htmltags.gperf"
269       {"image", ID_IMG},
270 #line 28 "htmltags.gperf"
271       {"center", ID_CENTER},
272 #line 48 "htmltags.gperf"
273       {"h2", ID_H2},
274 #line 75 "htmltags.gperf"
275       {"noframes", ID_NOFRAMES},
276 #line 57 "htmltags.gperf"
277       {"iframe", ID_IFRAME},
278 #line 47 "htmltags.gperf"
279       {"h1", ID_H1},
280 #line 65 "htmltags.gperf"
281       {"layer", ID_LAYER},
282 #line 15 "htmltags.gperf"
283       {"applet", ID_APPLET},
284 #line 67 "htmltags.gperf"
285       {"li", ID_LI},
286 #line 71 "htmltags.gperf"
287       {"menu", ID_MENU},
288 #line 102 "htmltags.gperf"
289       {"tfoot", ID_TFOOT},
290 #line 19 "htmltags.gperf"
291       {"basefont", ID_BASEFONT},
292 #line 105 "htmltags.gperf"
293       {"title", ID_TITLE},
294 #line 112 "htmltags.gperf"
295       {"xmp", ID_XMP},
296 #line 92 "htmltags.gperf"
297       {"span", ID_SPAN},
298 #line 21 "htmltags.gperf"
299       {"big", ID_BIG},
300 #line 55 "htmltags.gperf"
301       {"html", ID_HTML},
302 #line 76 "htmltags.gperf"
303       {"noscript", ID_NOSCRIPT},
304 #line 36 "htmltags.gperf"
305       {"dir", ID_DIR},
306 #line 95 "htmltags.gperf"
307       {"style", ID_STYLE},
308 #line 26 "htmltags.gperf"
309       {"canvas", ID_CANVAS},
310 #line 25 "htmltags.gperf"
311       {"button", ID_BUTTON},
312 #line 77 "htmltags.gperf"
313       {"nolayer", ID_NOLAYER},
314 #line 42 "htmltags.gperf"
315       {"fieldset", ID_FIELDSET},
316 #line 29 "htmltags.gperf"
317       {"cite", ID_CITE},
318 #line 63 "htmltags.gperf"
319       {"keygen", ID_KEYGEN},
320 #line 93 "htmltags.gperf"
321       {"strike", ID_STRIKE},
322 #line 101 "htmltags.gperf"
323       {"textarea", ID_TEXTAREA},
324 #line 59 "htmltags.gperf"
325       {"input", ID_INPUT},
326 #line 99 "htmltags.gperf"
327       {"tbody", ID_TBODY},
328 #line 27 "htmltags.gperf"
329       {"caption", ID_CAPTION},
330 #line 37 "htmltags.gperf"
331       {"div", ID_DIV},
332 #line 68 "htmltags.gperf"
333       {"link", ID_LINK},
334 #line 94 "htmltags.gperf"
335       {"strong", ID_STRONG},
336 #line 115 "htmltags.gperf"
337       {"listing", ID_PRE},
338 #line 32 "htmltags.gperf"
339       {"colgroup", ID_COLGROUP},
340 #line 70 "htmltags.gperf"
341       {"marquee", ID_MARQUEE},
342 #line 84 "htmltags.gperf"
343       {"plaintext", ID_PLAINTEXT},
344 #line 13 "htmltags.gperf"
345       {"acronym", ID_ACRONYM},
346 #line 61 "htmltags.gperf"
347       {"isindex", ID_ISINDEX},
348 #line 113 "htmltags.gperf"
349       {"anchor", ID_A},
350 #line 78 "htmltags.gperf"
351       {"object", ID_OBJECT},
352 #line 81 "htmltags.gperf"
353       {"option", ID_OPTION},
354 #line 80 "htmltags.gperf"
355       {"optgroup", ID_OPTGROUP},
356 #line 22 "htmltags.gperf"
357       {"blockquote", ID_BLOCKQUOTE}
358     };
359
360   static const signed char lookup[] =
361     {
362        -1,   0,   1,  -1,  -1,  -1,   2,   3,  -1,  -1,
363        -1,   4,   5,   6,  -1,  -1,   7,   8,  -1,  -1,
364        -1,  -1,  -1,  -1,  -1,  -1,  -1,   9,  10,  11,
365        -1,  -1,  -1,  12,  13,  14,  -1,  15,  -1,  16,
366        17,  18,  19,  -1,  20,  -1,  -1,  -1,  21,  22,
367        23,  -1,  24,  25,  26,  -1,  -1,  27,  28,  29,
368        30,  31,  32,  33,  -1,  34,  35,  36,  37,  38,
369        39,  -1,  40,  41,  -1,  42,  43,  44,  45,  -1,
370        -1,  46,  47,  48,  49,  -1,  50,  51,  52,  53,
371        -1,  -1,  54,  55,  -1,  -1,  -1,  56,  57,  58,
372        -1,  -1,  59,  -1,  -1,  60,  61,  62,  63,  -1,
373        -1,  64,  65,  -1,  -1,  66,  -1,  -1,  -1,  -1,
374        -1,  67,  68,  -1,  69,  70,  -1,  -1,  71,  -1,
375        72,  -1,  -1,  73,  74,  -1,  -1,  -1,  75,  76,
376        -1,  -1,  -1,  77,  -1,  -1,  -1,  -1,  78,  -1,
377        79,  80,  -1,  -1,  -1,  -1,  81,  82,  83,  84,
378        -1,  85,  -1,  -1,  -1,  -1,  86,  -1,  87,  -1,
379        88,  -1,  -1,  -1,  -1,  89,  -1,  -1,  -1,  -1,
380        -1,  -1,  90,  91,  92,  -1,  93,  -1,  -1,  -1,
381        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
382        -1,  -1,  -1,  -1,  -1,  -1,  -1,  94,  95,  -1,
383        -1,  -1,  96,  -1,  97,  -1,  -1,  -1,  -1,  -1,
384        -1,  -1,  98,  -1,  -1,  -1,  -1,  99,  -1,  -1,
385        -1,  -1,  -1,  -1,  -1,  -1, 100,  -1,  -1,  -1,
386        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
387        -1, 101,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
388        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
389        -1, 102,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
390        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
391        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
392        -1,  -1,  -1, 103,  -1,  -1,  -1,  -1,  -1,  -1,
393        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
394        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
395        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
396        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
397        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
398        -1,  -1,  -1,  -1,  -1, 104
399     };
400
401   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
402     {
403       register int key = hash_tag (str, len);
404
405       if (key <= MAX_HASH_VALUE && key >= 0)
406         {
407           register int index = lookup[key];
408
409           if (index >= 0)
410             {
411               if (len == lengthtable[index])
412                 {
413                   register const char *s = wordlist_tag[index].name;
414
415                   if (*str == *s && !memcmp (str + 1, s + 1, len - 1))
416                     return &wordlist_tag[index];
417                 }
418             }
419         }
420     }
421   return 0;
422 }
423 #line 116 "htmltags.gperf"
424
425 #line 426 "htmltags.c"
426
427 using DOM::DOMString;
428
429 static const char * const openTagNames[] = {
430     0,
431     "A",
432     "ABBR",
433     "ACRONYM",
434     "ADDRESS",
435     "APPLET",
436     "AREA",
437     "B",
438     "BASE",
439     "BASEFONT",
440     "BDO",
441     "BIG",
442     "BLOCKQUOTE",
443     "BODY",
444     "BR",
445     "BUTTON",
446     "CANVAS",
447     "CAPTION",
448     "CENTER",
449     "CITE",
450     "CODE",
451     "COL",
452     "COLGROUP",
453     "DD",
454     "DEL",
455     "DFN",
456     "DIR",
457     "DIV",
458     "DL",
459     "DT",
460     "EM",
461     "EMBED",
462     "FIELDSET",
463     "FONT",
464     "FORM",
465     "FRAME",
466     "FRAMESET",
467     "H1",
468     "H2",
469     "H3",
470     "H4",
471     "H5",
472     "H6",
473     "HEAD",
474     "HR",
475     "HTML",
476     "I",
477     "IFRAME",
478     "IMG",
479     "INPUT",
480     "INS",
481     "ISINDEX",
482     "KBD",
483     "KEYGEN",
484     "LABEL",
485     "LAYER",
486     "LEGEND",
487     "LI",
488     "LINK",
489     "MAP",
490     "MARQUEE",
491     "MENU",
492     "META",
493     "NOBR",
494     "NOEMBED",
495     "NOFRAMES",
496     "NOSCRIPT",
497     "NOLAYER",
498     "OBJECT",
499     "OL",
500     "OPTGROUP",
501     "OPTION",
502     "P",
503     "PARAM",
504     "PLAINTEXT",
505     "PRE",
506     "Q",
507     "S",
508     "SAMP",
509     "SCRIPT",
510     "SELECT",
511     "SMALL",
512     "SPAN",
513     "STRIKE",
514     "STRONG",
515     "STYLE",
516     "SUB",
517     "SUP",
518     "TABLE",
519     "TBODY",
520     "TD",
521     "TEXTAREA",
522     "TFOOT",
523     "TH",
524     "THEAD",
525     "TITLE",
526     "TR",
527     "TT",
528     "U",
529     "UL",
530     "VAR",
531     "WBR",
532     "XMP",
533     "TEXT",
534     "COMMENT"
535 };
536
537 static const char * const closeTagNames[] = {
538     0,
539     "/A",
540     "/ABBR",
541     "/ACRONYM",
542     "/ADDRESS",
543     "/APPLET",
544     "/AREA",
545     "/B",
546     "/BASE",
547     "/BASEFONT",
548     "/BDO",
549     "/BIG",
550     "/BLOCKQUOTE",
551     "/BODY",
552     "/BR",
553     "/BUTTON",
554     "/CANVAS",
555     "/CAPTION",
556     "/CENTER",
557     "/CITE",
558     "/CODE",
559     "/COL",
560     "/COLGROUP",
561     "/DD",
562     "/DEL",
563     "/DFN",
564     "/DIR",
565     "/DIV",
566     "/DL",
567     "/DT",
568     "/EM",
569     "/EMBED",
570     "/FIELDSET",
571     "/FONT",
572     "/FORM",
573     "/FRAME",
574     "/FRAMESET",
575     "/H1",
576     "/H2",
577     "/H3",
578     "/H4",
579     "/H5",
580     "/H6",
581     "/HEAD",
582     "/HR",
583     "/HTML",
584     "/I",
585     "/IFRAME",
586     "/IMG",
587     "/INPUT",
588     "/INS",
589     "/ISINDEX",
590     "/KBD",
591     "/KEYGEN",
592     "/LABEL",
593     "/LAYER",
594     "/LEGEND",
595     "/LI",
596     "/LINK",
597     "/MAP",
598     "/MARQUEE",
599     "/MENU",
600     "/META",
601     "/NOBR",
602     "/NOEMBED",
603     "/NOFRAMES",
604     "/NOSCRIPT",
605     "/NOLAYER",
606     "/OBJECT",
607     "/OL",
608     "/OPTGROUP",
609     "/OPTION",
610     "/P",
611     "/PARAM",
612     "/PLAINTEXT",
613     "/PRE",
614     "/Q",
615     "/S",
616     "/SAMP",
617     "/SCRIPT",
618     "/SELECT",
619     "/SMALL",
620     "/SPAN",
621     "/STRIKE",
622     "/STRONG",
623     "/STYLE",
624     "/SUB",
625     "/SUP",
626     "/TABLE",
627     "/TBODY",
628     "/TD",
629     "/TEXTAREA",
630     "/TFOOT",
631     "/TH",
632     "/THEAD",
633     "/TITLE",
634     "/TR",
635     "/TT",
636     "/U",
637     "/UL",
638     "/VAR",
639     "/WBR",
640     "/XMP",
641 };
642
643 DOMString getTagName(unsigned short id)
644 {
645     if (id > ID_CLOSE_TAG) {
646         int index = id - ID_CLOSE_TAG;
647         if (index >= ID_TEXT)
648             return DOMString();
649         return closeTagNames[index];
650     }
651     if (id > ID_LAST_TAG)
652         return DOMString();
653     return openTagNames[id];
654 }