Intial commit
[profile/ivi/w3m.git] / html.c
1 /* $Id: html.c,v 1.30 2007/04/19 12:00:38 inu Exp $ */
2 #include "html.h"
3
4 /* Define HTML Tag Infomation Table */
5
6 #define ATTR_CORE       ATTR_ID
7 #define MAXA_CORE       1
8 unsigned char ALST_A[] = {
9     ATTR_NAME, ATTR_HREF, ATTR_REL, ATTR_CHARSET, ATTR_TARGET, ATTR_HSEQ,
10     ATTR_REFERER,
11     ATTR_FRAMENAME, ATTR_TITLE, ATTR_ACCESSKEY, ATTR_CORE
12 };
13 #define MAXA_A          MAXA_CORE + 10
14 unsigned char ALST_P[] = { ATTR_ALIGN, ATTR_CORE };
15 #define MAXA_P          MAXA_CORE + 1
16 unsigned char ALST_UL[] = { ATTR_START, ATTR_TYPE, ATTR_CORE };
17 #define MAXA_UL         MAXA_CORE + 2
18 unsigned char ALST_LI[] = { ATTR_TYPE, ATTR_VALUE, ATTR_CORE };
19 #define MAXA_LI         MAXA_CORE + 2
20 unsigned char ALST_HR[] = { ATTR_WIDTH, ATTR_ALIGN, ATTR_CORE };
21 #define MAXA_HR         MAXA_CORE + 2
22 unsigned char ALST_LINK[] = { ATTR_HREF, ATTR_HSEQ, ATTR_REL, ATTR_REV,
23     ATTR_TITLE, ATTR_TYPE, ATTR_CORE
24 };
25 #define MAXA_LINK       MAXA_CORE + sizeof ALST_LINK/sizeof ALST_LINK[0] - 1
26 unsigned char ALST_DL[] = { ATTR_COMPACT, ATTR_CORE };
27 #define MAXA_DL         MAXA_CORE + 1
28 unsigned char ALST_PRE[] = { ATTR_FOR_TABLE, ATTR_CORE };
29 #define MAXA_PRE        MAXA_CORE + 1
30 unsigned char ALST_IMG[] =
31     { ATTR_SRC, ATTR_ALT, ATTR_WIDTH, ATTR_HEIGHT, ATTR_ALIGN, ATTR_USEMAP,
32     ATTR_ISMAP, ATTR_TITLE, ATTR_PRE_INT, ATTR_CORE
33 };
34 #define MAXA_IMG        MAXA_CORE + 9
35 unsigned char ALST_TABLE[] =
36     { ATTR_BORDER, ATTR_WIDTH, ATTR_HBORDER, ATTR_CELLSPACING,
37     ATTR_CELLPADDING, ATTR_VSPACE, ATTR_CORE
38 };
39 #define MAXA_TABLE      MAXA_CORE + 6
40 unsigned char ALST_META[] = { ATTR_HTTP_EQUIV, ATTR_CONTENT, ATTR_CORE };
41 #define MAXA_META       MAXA_CORE + 2
42 unsigned char ALST_FRAME[] = { ATTR_SRC, ATTR_NAME, ATTR_CORE };
43 #define MAXA_FRAME      MAXA_CORE + 2
44 unsigned char ALST_FRAMESET[] = { ATTR_COLS, ATTR_ROWS, ATTR_CORE };
45 #define MAXA_FRAMESET   MAXA_CORE + 2
46 unsigned char ALST_NOFRAMES[] = { ATTR_CORE };
47 #define MAXA_NOFRAMES   MAXA_CORE
48 unsigned char ALST_FORM[] =
49     { ATTR_METHOD, ATTR_ACTION, ATTR_CHARSET, ATTR_ACCEPT_CHARSET,
50     ATTR_ENCTYPE, ATTR_TARGET, ATTR_NAME, ATTR_CORE
51 };
52 #define MAXA_FORM       MAXA_CORE + 7
53 unsigned char ALST_INPUT[] =
54     { ATTR_TYPE, ATTR_VALUE, ATTR_NAME, ATTR_CHECKED, ATTR_ACCEPT, ATTR_SIZE,
55     ATTR_MAXLENGTH, ATTR_ALT, ATTR_READONLY, ATTR_SRC, ATTR_WIDTH, ATTR_HEIGHT,
56     ATTR_CORE
57 };
58 #define MAXA_INPUT      MAXA_CORE + 12
59 unsigned char ALST_TEXTAREA[] =
60     { ATTR_COLS, ATTR_ROWS, ATTR_NAME, ATTR_READONLY, ATTR_CORE };
61 #define MAXA_TEXTAREA   MAXA_CORE + 4
62 unsigned char ALST_SELECT[] = { ATTR_NAME, ATTR_MULTIPLE, ATTR_CORE };
63 #define MAXA_SELECT     MAXA_CORE + 2
64 unsigned char ALST_OPTION[] =
65     { ATTR_VALUE, ATTR_LABEL, ATTR_SELECTED, ATTR_CORE };
66 #define MAXA_OPTION     MAXA_CORE + 3
67 unsigned char ALST_ISINDEX[] = { ATTR_ACTION, ATTR_PROMPT, ATTR_CORE };
68 #define MAXA_ISINDEX    MAXA_CORE + 2
69 unsigned char ALST_MAP[] = { ATTR_NAME, ATTR_CORE };
70 #define MAXA_MAP        MAXA_CORE + 1
71 unsigned char ALST_AREA[] =
72     { ATTR_HREF, ATTR_TARGET, ATTR_ALT, ATTR_SHAPE, ATTR_COORDS, ATTR_CORE };
73 #define MAXA_AREA       MAXA_CORE + 5
74 unsigned char ALST_BASE[] = { ATTR_HREF, ATTR_TARGET, ATTR_CORE };
75 #define MAXA_BASE       MAXA_CORE + 2
76 unsigned char ALST_BODY[] = { ATTR_BACKGROUND, ATTR_CORE };
77 #define MAXA_BODY       MAXA_CORE + 1
78 unsigned char ALST_TR[] = { ATTR_ALIGN, ATTR_VALIGN, ATTR_CORE };
79 #define MAXA_TR         MAXA_CORE + 2
80 unsigned char ALST_TD[] =
81     { ATTR_COLSPAN, ATTR_ROWSPAN, ATTR_ALIGN, ATTR_VALIGN, ATTR_WIDTH,
82     ATTR_NOWRAP, ATTR_CORE
83 };
84 #define MAXA_TD         MAXA_CORE + 6
85 unsigned char ALST_BGSOUND[] = { ATTR_SRC, ATTR_CORE };
86 #define MAX_BGSOUND     MAXA_CORE + 1
87 unsigned char ALST_APPLET[] = { ATTR_ARCHIVE, ATTR_CORE };
88 #define MAX_APPLET      MAXA_CORE + 1
89 unsigned char ALST_EMBED[] = { ATTR_SRC, ATTR_CORE };
90 #define MAX_EMBED       MAXA_CORE + 1
91
92 unsigned char ALST_TEXTAREA_INT[] = { ATTR_TEXTAREANUMBER };
93 #define MAXA_TEXTAREA_INT 1
94 unsigned char ALST_SELECT_INT[] = { ATTR_SELECTNUMBER };
95 #define MAXA_SELECT_INT 1
96 unsigned char ALST_TABLE_ALT[] = { ATTR_TID };
97 #define MAXA_TABLE_ALT  1
98 unsigned char ALST_SYMBOL[] = { ATTR_TYPE };
99 #define MAXA_SYMBOL     1
100 unsigned char ALST_TITLE_ALT[] = { ATTR_TITLE };
101 #define MAXA_TITLE_ALT  1
102 unsigned char ALST_FORM_INT[] =
103     { ATTR_METHOD, ATTR_ACTION, ATTR_CHARSET, ATTR_ACCEPT_CHARSET,
104     ATTR_ENCTYPE, ATTR_TARGET, ATTR_NAME, ATTR_FID
105 };
106 #define MAXA_FORM_INT  8
107 unsigned char ALST_INPUT_ALT[] =
108     { ATTR_HSEQ, ATTR_FID, ATTR_NO_EFFECT, ATTR_TYPE, ATTR_NAME, ATTR_VALUE,
109     ATTR_CHECKED, ATTR_ACCEPT, ATTR_SIZE, ATTR_MAXLENGTH, ATTR_READONLY,
110     ATTR_TEXTAREANUMBER,
111     ATTR_SELECTNUMBER, ATTR_ROWS, ATTR_TOP_MARGIN, ATTR_BOTTOM_MARGIN
112 };
113 #define MAXA_INPUT_ALT  16
114 unsigned char ALST_IMG_ALT[] =
115     { ATTR_SRC, ATTR_WIDTH, ATTR_HEIGHT, ATTR_USEMAP, ATTR_ISMAP, ATTR_HSEQ,
116     ATTR_XOFFSET, ATTR_YOFFSET, ATTR_TOP_MARGIN, ATTR_BOTTOM_MARGIN,
117     ATTR_TITLE
118 };
119 #define MAXA_IMG_ALT  11
120 unsigned char ALST_NOP[] = { ATTR_CORE };
121 #define MAXA_NOP        MAXA_CORE
122
123 TagInfo TagMAP[MAX_HTMLTAG] = {
124     {NULL, NULL, 0, 0},         /*   0 HTML_UNKNOWN    */
125     {"a", ALST_A, MAXA_A, 0},   /*   1 HTML_A          */
126     {"/a", NULL, 0, TFLG_END},  /*   2 HTML_N_A        */
127     {"h", ALST_P, MAXA_P, 0},   /*   3 HTML_H          */
128     {"/h", NULL, 0, TFLG_END},  /*   4 HTML_N_H        */
129     {"p", ALST_P, MAXA_P, 0},   /*   5 HTML_P          */
130     {"br", NULL, 0, 0},         /*   6 HTML_BR         */
131     {"b", NULL, 0, 0},          /*   7 HTML_B          */
132     {"/b", NULL, 0, TFLG_END},  /*   8 HTML_N_B        */
133     {"ul", ALST_UL, MAXA_UL, 0},        /*   9 HTML_UL         */
134     {"/ul", NULL, 0, TFLG_END}, /*  10 HTML_N_UL       */
135     {"li", ALST_LI, MAXA_LI, 0},        /*  11 HTML_LI         */
136     {"ol", ALST_UL, MAXA_UL, 0},        /*  12 HTML_OL         */
137     {"/ol", NULL, 0, TFLG_END}, /*  13 HTML_N_OL       */
138     {"title", NULL, 0, 0},      /*  14 HTML_TITLE      */
139     {"/title", NULL, 0, TFLG_END},      /*  15 HTML_N_TITLE    */
140     {"hr", ALST_HR, MAXA_HR, 0},        /*  16 HTML_HR         */
141     {"dl", ALST_DL, MAXA_DL, 0},        /*  17 HTML_DL         */
142     {"/dl", NULL, 0, TFLG_END}, /*  18 HTML_N_DL       */
143     {"dt", ALST_NOP, MAXA_NOP, 0},      /*  19 HTML_DT         */
144     {"dd", ALST_NOP, MAXA_NOP, 0},      /*  20 HTML_DD         */
145     {"pre", ALST_PRE, MAXA_PRE, 0},     /*  21 HTML_PRE        */
146     {"/pre", NULL, 0, TFLG_END},        /*  22 HTML_N_PRE      */
147     {"blockquote", ALST_NOP, MAXA_NOP, 0},      /*  23 HTML_BLQ        */
148     {"/blockquote", NULL, 0, TFLG_END}, /*  24 HTML_N_BLQ      */
149     {"img", ALST_IMG, MAXA_IMG, 0},     /*  25 HTML_IMG        */
150     {"listing", NULL, 0, 0},    /*  26 HTML_LISTING    */
151     {"/listing", NULL, 0, TFLG_END},    /*  27 HTML_N_LISTING  */
152     {"xmp", NULL, 0, 0},        /*  28 HTML_XMP        */
153     {"/xmp", NULL, 0, TFLG_END},        /*  29 HTML_N_XMP      */
154     {"plaintext", NULL, 0, 0},  /*  30 HTML_PLAINTEXT  */
155     {"table", ALST_TABLE, MAXA_TABLE, 0},       /*  31 HTML_TABLE      */
156     {"/table", NULL, 0, TFLG_END},      /*  32 HTML_N_TABLE    */
157     {"meta", ALST_META, MAXA_META, 0},  /*  33 HTML_META       */
158     {"/p", NULL, 0, TFLG_END},  /*  34 HTML_N_P        */
159     {"frame", ALST_FRAME, MAXA_FRAME, 0},       /*  35 HTML_FRAME      */
160     {"frameset", ALST_FRAMESET, MAXA_FRAMESET, 0},      /*  36 HTML_FRAMESET   */
161     {"/frameset", NULL, 0, TFLG_END},   /*  37 HTML_N_FRAMESET */
162     {"center", NULL, 0, 0},     /*  38 HTML_CENTER     */
163     {"/center", NULL, 0, TFLG_END},     /*  39 HTML_N_CENTER   */
164     {"font", NULL, 0, 0},       /*  40 HTML_FONT       */
165     {"/font", NULL, 0, TFLG_END},       /*  41 HTML_N_FONT     */
166     {"form", ALST_FORM, MAXA_FORM, 0},  /*  42 HTML_FORM       */
167     {"/form", NULL, 0, TFLG_END},       /*  43 HTML_N_FORM     */
168     {"input", ALST_INPUT, MAXA_INPUT, 0},       /*  44 HTML_INPUT      */
169     {"textarea", ALST_TEXTAREA, MAXA_TEXTAREA, 0},      /*  45 HTML_TEXTAREA   */
170     {"/textarea", NULL, 0, TFLG_END},   /*  46 HTML_N_TEXTAREA */
171     {"select", ALST_SELECT, MAXA_SELECT, 0},    /*  47 HTML_SELECT     */
172     {"/select", NULL, 0, TFLG_END},     /*  48 HTML_N_SELECT   */
173     {"option", ALST_OPTION, MAXA_OPTION, 0},    /*  49 HTML_OPTION     */
174     {"nobr", NULL, 0, 0},       /*  50 HTML_NOBR       */
175     {"/nobr", NULL, 0, TFLG_END},       /*  51 HTML_N_NOBR     */
176     {"div", ALST_P, MAXA_P, 0}, /*  52 HTML_DIV        */
177     {"/div", NULL, 0, TFLG_END},        /*  53 HTML_N_DIV      */
178     {"isindex", ALST_ISINDEX, MAXA_ISINDEX, 0}, /*  54 HTML_ISINDEX    */
179     {"map", ALST_MAP, MAXA_MAP, 0},     /*  55 HTML_MAP        */
180     {"/map", NULL, 0, TFLG_END},        /*  56 HTML_N_MAP      */
181     {"area", ALST_AREA, MAXA_AREA, 0},  /*  57 HTML_AREA       */
182     {"script", NULL, 0, 0},     /*  58 HTML_SCRIPT     */
183     {"/script", NULL, 0, TFLG_END},     /*  59 HTML_N_SCRIPT   */
184     {"base", ALST_BASE, MAXA_BASE, 0},  /*  60 HTML_BASE       */
185     {"del", NULL, 0, 0},        /*  61 HTML_DEL        */
186     {"/del", NULL, 0, TFLG_END},        /*  62 HTML_N_DEL      */
187     {"ins", NULL, 0, 0},        /*  63 HTML_INS        */
188     {"/ins", NULL, 0, TFLG_END},        /*  64 HTML_N_INS      */
189     {"u", NULL, 0, 0},          /*  65 HTML_U          */
190     {"/u", NULL, 0, TFLG_END},  /*  66 HTML_N_U        */
191     {"style", NULL, 0, 0},      /*  67 HTML_STYLE      */
192     {"/style", NULL, 0, TFLG_END},      /*  68 HTML_N_STYLE    */
193     {"wbr", NULL, 0, 0},        /*  69 HTML_WBR        */
194     {"em", NULL, 0, 0},         /*  70 HTML_EM         */
195     {"/em", NULL, 0, TFLG_END}, /*  71 HTML_N_EM       */
196     {"body", ALST_BODY, MAXA_BODY, 0},  /*  72 HTML_BODY       */
197     {"/body", NULL, 0, TFLG_END},       /*  73 HTML_N_BODY     */
198     {"tr", ALST_TR, MAXA_TR, 0},        /*  74 HTML_TR         */
199     {"/tr", NULL, 0, TFLG_END}, /*  75 HTML_N_TR       */
200     {"td", ALST_TD, MAXA_TD, 0},        /*  76 HTML_TD         */
201     {"/td", NULL, 0, TFLG_END}, /*  77 HTML_N_TD       */
202     {"caption", ALST_NOP, MAXA_NOP, 0}, /*  78 HTML_CAPTION    */
203     {"/caption", NULL, 0, TFLG_END},    /*  79 HTML_N_CAPTION  */
204     {"th", ALST_TD, MAXA_TD, 0},        /*  80 HTML_TH         */
205     {"/th", NULL, 0, TFLG_END}, /*  81 HTML_N_TH       */
206     {"thead", NULL, 0, 0},      /*  82 HTML_THEAD      */
207     {"/thead", NULL, 0, TFLG_END},      /*  83 HTML_N_THEAD    */
208     {"tbody", NULL, 0, 0},      /*  84 HTML_TBODY      */
209     {"/tbody", NULL, 0, TFLG_END},      /*  85 HTML_N_TBODY    */
210     {"tfoot", NULL, 0, 0},      /*  86 HTML_TFOOT      */
211     {"/tfoot", NULL, 0, TFLG_END},      /*  87 HTML_N_TFOOT    */
212     {"colgroup", NULL, 0, 0},   /*  88 HTML_COLGROUP   */
213     {"/colgroup", NULL, 0, TFLG_END},   /*  89 HTML_N_COLGROUP */
214     {"col", NULL, 0, 0},        /*  90 HTML_COL        */
215     {"bgsound", ALST_BGSOUND, MAX_BGSOUND, 0},  /*  91 HTML_BGSOUND    */
216     {"applet", ALST_APPLET, MAX_APPLET, 0},     /*  92 HTML_APPLET     */
217     {"embed", ALST_EMBED, MAX_EMBED, 0},        /*  93 HTML_EMBED      */
218     {"/option", NULL, 0, TFLG_END},     /*  94 HTML_N_OPTION   */
219     {"head", NULL, 0, 0},       /*  95 HTML_HEAD       */
220     {"/head", NULL, 0, TFLG_END},       /*  96 HTML_N_HEAD     */
221     {"doctype", NULL, 0, 0},    /*  97 HTML_DOCTYPE    */
222     {"noframes", ALST_NOFRAMES, MAXA_NOFRAMES, 0},      /*  98 HTML_NOFRAMES   */
223     {"/noframes", NULL, 0, TFLG_END},   /*  99 HTML_N_NOFRAMES */
224
225     {"sup", NULL, 0, 0},        /* 100 HTML_SUP       */
226     {"/sup", NULL, 0, 0},       /* 101 HTML_N_SUP       */
227     {"sub", NULL, 0, 0},        /* 102 HTML_SUB       */
228     {"/sub", NULL, 0, 0},       /* 103 HTML_N_SUB       */
229     {"link", ALST_LINK, MAXA_LINK, 0},  /*  104 HTML_LINK      */
230     {"s", NULL, 0, 0},          /*  105 HTML_S        */
231     {"/s", NULL, 0, TFLG_END},  /*  106 HTML_N_S      */
232     {"q", NULL, 0, 0},          /*  107 HTML_Q */
233     {"/q", NULL, 0, TFLG_END},  /*  108 HTML_N_Q */
234     {"i", NULL, 0, 0},          /*  109 HTML_I */
235     {"/i", NULL, 0, TFLG_END},  /*  110 HTML_N_I */
236     {"strong", NULL, 0, 0},             /* 111 HTML_STRONG */
237     {"/strong", NULL, 0, TFLG_END},     /* 112 HTML_N_STRONG */
238     {NULL, NULL, 0, 0},         /* 113 Undefined       */
239     {NULL, NULL, 0, 0},         /* 114 Undefined       */
240     {NULL, NULL, 0, 0},         /* 115 Undefined       */
241     {NULL, NULL, 0, 0},         /* 116 Undefined       */
242     {NULL, NULL, 0, 0},         /* 117 Undefined       */
243     {NULL, NULL, 0, 0},         /* 118 Undefined       */
244     {NULL, NULL, 0, 0},         /* 119 Undefined       */
245
246     /* pseudo tag */
247     {"select_int", ALST_SELECT_INT, MAXA_SELECT_INT, TFLG_INT}, /* 120 HTML_SELECT_INT   */
248     {"/select_int", NULL, 0, TFLG_INT | TFLG_END},      /* 121 HTML_N_SELECT_INT */
249     {"option_int", ALST_OPTION, MAXA_OPTION, TFLG_INT}, /* 122 HTML_OPTION_INT   */
250     {"textarea_int", ALST_TEXTAREA_INT, MAXA_TEXTAREA_INT, TFLG_INT},   /* 123 HTML_TEXTAREA_INT   */
251     {"/textarea_int", NULL, 0, TFLG_INT | TFLG_END},    /* 124 HTML_N_TEXTAREA_INT */
252     {"table_alt", ALST_TABLE_ALT, MAXA_TABLE_ALT, TFLG_INT},    /* 125 HTML_TABLE_ALT   */
253     {"symbol", ALST_SYMBOL, MAXA_SYMBOL, TFLG_INT},     /* 126 HTML_SYMBOL */
254     {"/symbol", NULL, 0, TFLG_INT | TFLG_END},  /* 127 HTML_N_SYMBOL      */
255     {"pre_int", NULL, 0, TFLG_INT},     /* 128 HTML_PRE_INT     */
256     {"/pre_int", NULL, 0, TFLG_INT | TFLG_END}, /* 129 HTML_N_PRE_INT   */
257     {"title_alt", ALST_TITLE_ALT, MAXA_TITLE_ALT, TFLG_INT},    /* 130 HTML_TITLE_ALT   */
258     {"form_int", ALST_FORM_INT, MAXA_FORM_INT, TFLG_INT},       /* 131 HTML_FORM_INT    */
259     {"/form_int", NULL, 0, TFLG_INT | TFLG_END},        /* 132 HTML_N_FORM_INT  */
260     {"dl_compact", NULL, 0, TFLG_INT},  /* 133 HTML_DL_COMPACT  */
261     {"input_alt", ALST_INPUT_ALT, MAXA_INPUT_ALT, TFLG_INT},    /* 134 HTML_INPUT_ALT   */
262     {"/input_alt", NULL, 0, TFLG_INT | TFLG_END},       /* 135 HTML_N_INPUT_ALT */
263     {"img_alt", ALST_IMG_ALT, MAXA_IMG_ALT, TFLG_INT},  /* 136 HTML_IMG_ALT     */
264     {"/img_alt", NULL, 0, TFLG_INT | TFLG_END}, /* 137 HTML_N_IMG_ALT   */
265     {" ", ALST_NOP, MAXA_NOP, TFLG_INT},        /* 138 HTML_NOP         */
266     {"pre_plain", NULL, 0, TFLG_INT},   /* 139 HTML_PRE_PLAIN         */
267     {"/pre_plain", NULL, 0, TFLG_INT | TFLG_END},       /* 140 HTML_N_PRE_PLAIN         */
268     {"internal", NULL, 0, TFLG_INT},    /* 141 HTML_INTERNAL   */
269     {"/internal", NULL, 0, TFLG_INT | TFLG_END},        /* 142 HTML_N_INTERNAL   */
270     {"div_int", ALST_P, MAXA_P, TFLG_INT},      /*  143 HTML_DIV_INT    */
271     {"/div_int", NULL, 0, TFLG_INT | TFLG_END}, /*  144 HTML_N_DIV_INT  */
272 };
273
274 TagAttrInfo AttrMAP[MAX_TAGATTR] = {
275     {NULL, VTYPE_NONE, 0},      /*  0 ATTR_UNKNOWN        */
276     {"accept", VTYPE_NONE, 0},  /*  1 ATTR_ACCEPT         */
277     {"accept-charset", VTYPE_STR, 0},   /*  2 ATTR_ACCEPT_CHARSET */
278     {"action", VTYPE_ACTION, 0},        /*  3 ATTR_ACTION         */
279     {"align", VTYPE_ALIGN, 0},  /*  4 ATTR_ALIGN          */
280     {"alt", VTYPE_STR, 0},      /*  5 ATTR_ALT            */
281     {"archive", VTYPE_STR, 0},  /*  6 ATTR_ARCHIVE        */
282     {"background", VTYPE_STR, 0},       /*  7 ATTR_BACKGROUND     */
283     {"border", VTYPE_NUMBER, 0},        /*  8 ATTR_BORDER         */
284     {"cellpadding", VTYPE_NUMBER, 0},   /*  9 ATTR_CELLPADDING    */
285     {"cellspacing", VTYPE_NUMBER, 0},   /* 10 ATTR_CELLSPACING    */
286     {"charset", VTYPE_STR, 0},  /* 11 ATTR_CHARSET        */
287     {"checked", VTYPE_NONE, 0}, /* 12 ATTR_CHECKED        */
288     {"cols", VTYPE_MLENGTH, 0}, /* 13 ATTR_COLS           */
289     {"colspan", VTYPE_NUMBER, 0},       /* 14 ATTR_COLSPAN        */
290     {"content", VTYPE_STR, 0},  /* 15 ATTR_CONTENT        */
291     {"enctype", VTYPE_ENCTYPE, 0},      /* 16 ATTR_ENCTYPE        */
292     {"height", VTYPE_LENGTH, 0},        /* 17 ATTR_HEIGHT         */
293     {"href", VTYPE_STR, 0},     /* 18 ATTR_HREF           */
294     {"http-equiv", VTYPE_STR, 0},       /* 19 ATTR_HTTP_EQUIV     */
295     {"id", VTYPE_STR, 0},       /* 20 ATTR_ID             */
296     {"link", VTYPE_STR, 0},     /* 21 ATTR_LINK           */
297     {"maxlength", VTYPE_NUMBER, 0},     /* 22 ATTR_MAXLENGTH      */
298     {"method", VTYPE_METHOD, 0},        /* 23 ATTR_METHOD         */
299     {"multiple", VTYPE_NONE, 0},        /* 24 ATTR_MULTIPLE       */
300     {"name", VTYPE_STR, 0},     /* 25 ATTR_NAME           */
301     {"nowrap", VTYPE_NONE, 0},  /* 26 ATTR_NOWRAP         */
302     {"prompt", VTYPE_STR, 0},   /* 27 ATTR_PROMPT         */
303     {"rows", VTYPE_MLENGTH, 0}, /* 28 ATTR_ROWS           */
304     {"rowspan", VTYPE_NUMBER, 0},       /* 29 ATTR_ROWSPAN        */
305     {"size", VTYPE_NUMBER, 0},  /* 30 ATTR_SIZE           */
306     {"src", VTYPE_STR, 0},      /* 31 ATTR_SRC            */
307     {"target", VTYPE_STR, 0},   /* 32 ATTR_TARGET         */
308     {"type", VTYPE_TYPE, 0},    /* 33 ATTR_TYPE           */
309     {"usemap", VTYPE_STR, 0},   /* 34 ATTR_USEMAP         */
310     {"valign", VTYPE_VALIGN, 0},        /* 35 ATTR_VALIGN         */
311     {"value", VTYPE_STR, 0},    /* 36 ATTR_VALUE          */
312     {"vspace", VTYPE_NUMBER, 0},        /* 37 ATTR_VSPACE         */
313     {"width", VTYPE_LENGTH, 0}, /* 38 ATTR_WIDTH          */
314     {"compact", VTYPE_NONE, 0}, /* 39 ATTR_COMPACT        */
315     {"start", VTYPE_NUMBER, 0}, /* 40 ATTR_START          */
316     {"selected", VTYPE_NONE, 0},        /* 41 ATTR_SELECTED       */
317     {"label", VTYPE_STR, 0},    /* 42 ATTR_LABEL          */
318     {"readonly", VTYPE_NONE, 0},        /* 43 ATTR_READONLY       */
319     {"shape", VTYPE_STR, 0},    /* 44 ATTR_SHAPE          */
320     {"coords", VTYPE_STR, 0},   /* 45 ATTR_COORDS         */
321     {"ismap", VTYPE_NONE, 0},   /* 46 ATTR_ISMAP          */
322     {"rel", VTYPE_STR, 0},      /* 47 ATTR_REL            */
323     {"rev", VTYPE_STR, 0},      /* 48 ATTR_REV            */
324     {"title", VTYPE_STR, 0},    /* 49 ATTR_TITLE          */
325     {"accesskey", VTYPE_STR, 0},        /* 50 ATTR_ACCESSKEY          */
326     {NULL, VTYPE_NONE, 0},      /* 51 Undefined           */
327     {NULL, VTYPE_NONE, 0},      /* 52 Undefined           */
328     {NULL, VTYPE_NONE, 0},      /* 53 Undefined           */
329     {NULL, VTYPE_NONE, 0},      /* 54 Undefined           */
330     {NULL, VTYPE_NONE, 0},      /* 55 Undefined           */
331     {NULL, VTYPE_NONE, 0},      /* 56 Undefined           */
332     {NULL, VTYPE_NONE, 0},      /* 57 Undefined           */
333     {NULL, VTYPE_NONE, 0},      /* 58 Undefined           */
334     {NULL, VTYPE_NONE, 0},      /* 59 Undefined           */
335
336     /* Internal attribute */
337     {"xoffset", VTYPE_NUMBER, AFLG_INT},        /* 60 ATTR_XOFFSET        */
338     {"yoffset", VTYPE_NUMBER, AFLG_INT},        /* 61 ATTR_YOFFSET        */
339     {"top_margin", VTYPE_NUMBER, AFLG_INT},     /* 62 ATTR_TOP_MARGIN,    */
340     {"bottom_margin", VTYPE_NUMBER, AFLG_INT},  /* 63 ATTR_BOTTOM_MARGIN, */
341     {"tid", VTYPE_NUMBER, AFLG_INT},    /* 64 ATTR_TID            */
342     {"fid", VTYPE_NUMBER, AFLG_INT},    /* 65 ATTR_FID            */
343     {"for_table", VTYPE_NONE, AFLG_INT},        /* 66 ATTR_FOR_TABLE      */
344     {"framename", VTYPE_STR, AFLG_INT}, /* 67 ATTR_FRAMENAME      */
345     {"hborder", VTYPE_NONE, 0}, /* 68 ATTR_HBORDER        */
346     {"hseq", VTYPE_NUMBER, AFLG_INT},   /* 69 ATTR_HSEQ           */
347     {"no_effect", VTYPE_NONE, AFLG_INT},        /* 70 ATTR_NO_EFFECT      */
348     {"referer", VTYPE_STR, AFLG_INT},   /* 71 ATTR_REFERER        */
349     {"selectnumber", VTYPE_NUMBER, AFLG_INT},   /* 72 ATTR_SELECTNUMBER   */
350     {"textareanumber", VTYPE_NUMBER, AFLG_INT}, /* 73 ATTR_TEXTAREANUMBER */
351     {"pre_int", VTYPE_NONE, AFLG_INT},  /* 74 ATTR_PRE_INT      */
352 };