17
17
#include "tmbstr.h"
20
static AttrCheck CheckAction;
22
#define CH_PCDATA NULL
23
#define CH_CHARSET NULL
24
#define CH_TYPE CheckType
26
#define CH_CHARACTER NULL
28
#define CH_URL CheckUrl
29
#define CH_SCRIPT CheckScript
30
#define CH_ALIGN CheckAlign
31
#define CH_VALIGN CheckValign
32
#define CH_COLOR CheckColor
33
#define CH_CLEAR CheckClear
34
#define CH_BORDER CheckBool /* kludge */
35
#define CH_LANG CheckLang
36
#define CH_BOOL CheckBool
38
#define CH_NUMBER CheckNumber
39
#define CH_LENGTH CheckLength
40
#define CH_COORDS NULL
42
#define CH_TEXTDIR CheckTextDir
43
#define CH_IDREFS NULL
45
#define CH_IDDEF CheckId
46
#define CH_NAME CheckName
47
#define CH_TFRAME NULL
48
#define CH_FBORDER NULL
50
#define CH_FSUBMIT CheckFsubmit
51
#define CH_LINKTYPES NULL
52
#define CH_TRULES NULL
53
#define CH_SCOPE CheckScope
54
#define CH_SHAPE CheckShape
55
#define CH_SCROLL CheckScroll
56
#define CH_TARGET CheckTarget
57
#define CH_VTYPE CheckVType
58
#define CH_ACTION CheckAction
20
60
static const Attribute attribute_defs [] =
22
{ TidyAttr_UNKNOWN, "unknown!", VERS_PROPRIETARY, NULL },
23
{ TidyAttr_ABBR, "abbr", VERS_HTML40, PCDATA },
24
{ TidyAttr_ACCEPT, "accept", VERS_ALL, TYPE },
25
{ TidyAttr_ACCEPT_CHARSET, "accept-charset", VERS_HTML40, CHARSET },
26
{ TidyAttr_ACCESSKEY, "accesskey", VERS_HTML40, CHARACTER },
27
{ TidyAttr_ACTION, "action", VERS_ALL, URL },
28
{ TidyAttr_ADD_DATE, "add_date", VERS_NETSCAPE, PCDATA }, /* A */
29
{ TidyAttr_ALIGN, "align", VERS_ALL, ALIGN }, /* varies by element */
30
{ TidyAttr_ALINK, "alink", VERS_LOOSE, COLOR },
31
{ TidyAttr_ALT, "alt", VERS_ALL, PCDATA }, /* nowrap */
32
{ TidyAttr_ARCHIVE, "archive", VERS_HTML40, URLS }, /* space or comma separated list */
33
{ TidyAttr_AXIS, "axis", VERS_HTML40, PCDATA },
34
{ TidyAttr_BACKGROUND, "background", VERS_LOOSE, URL },
35
{ TidyAttr_BGCOLOR, "bgcolor", VERS_LOOSE, COLOR },
36
{ TidyAttr_BGPROPERTIES, "bgproperties", VERS_PROPRIETARY, PCDATA }, /* BODY "fixed" fixes background */
37
{ TidyAttr_BORDER, "border", VERS_ALL, BORDER }, /* like LENGTH + "border" */
38
{ TidyAttr_BORDERCOLOR, "bordercolor", VERS_MICROSOFT, COLOR }, /* used on TABLE */
39
{ TidyAttr_BOTTOMMARGIN, "bottommargin", VERS_MICROSOFT, NUMBER }, /* used on BODY */
40
{ TidyAttr_CELLPADDING, "cellpadding", VERS_FROM32, LENGTH }, /* % or pixel values */
41
{ TidyAttr_CELLSPACING, "cellspacing", VERS_FROM32, LENGTH },
42
{ TidyAttr_CHAR, "char", VERS_HTML40, CHARACTER },
43
{ TidyAttr_CHAROFF, "charoff", VERS_HTML40, LENGTH },
44
{ TidyAttr_CHARSET, "charset", VERS_HTML40, CHARSET },
45
{ TidyAttr_CHECKED, "checked", VERS_ALL, BOOL }, /* i.e. "checked" or absent */
46
{ TidyAttr_CITE, "cite", VERS_HTML40, URL },
47
{ TidyAttr_CLASS, "class", VERS_HTML40, PCDATA },
48
{ TidyAttr_CLASSID, "classid", VERS_HTML40, URL },
49
{ TidyAttr_CLEAR, "clear", VERS_LOOSE, CLEAR }, /* BR: left, right, all */
50
{ TidyAttr_CODE, "code", VERS_LOOSE, PCDATA }, /* APPLET */
51
{ TidyAttr_CODEBASE, "codebase", VERS_HTML40, URL }, /* OBJECT */
52
{ TidyAttr_CODETYPE, "codetype", VERS_HTML40, TYPE }, /* OBJECT */
53
{ TidyAttr_COLOR, "color", VERS_LOOSE, COLOR }, /* BASEFONT, FONT */
54
{ TidyAttr_COLS, "cols", VERS_IFRAME, COLS }, /* TABLE & FRAMESET */
55
{ TidyAttr_COLSPAN, "colspan", VERS_FROM32, NUMBER },
56
{ TidyAttr_COMPACT, "compact", VERS_ALL, BOOL }, /* lists */
57
{ TidyAttr_CONTENT, "content", VERS_ALL, PCDATA },
58
{ TidyAttr_COORDS, "coords", VERS_FROM32, COORDS }, /* AREA, A */
59
{ TidyAttr_DATA, "data", VERS_HTML40, URL }, /* OBJECT */
60
{ TidyAttr_DATAFLD, "datafld", VERS_MICROSOFT, PCDATA }, /* used on DIV, IMG */
61
{ TidyAttr_DATAFORMATAS, "dataformatas", VERS_MICROSOFT, PCDATA }, /* used on DIV, IMG */
62
{ TidyAttr_DATAPAGESIZE, "datapagesize", VERS_MICROSOFT, NUMBER }, /* used on DIV, IMG */
63
{ TidyAttr_DATASRC, "datasrc", VERS_MICROSOFT, URL }, /* used on TABLE */
64
{ TidyAttr_DATETIME, "datetime", VERS_HTML40, DATE }, /* INS, DEL */
65
{ TidyAttr_DECLARE, "declare", VERS_HTML40, BOOL }, /* OBJECT */
66
{ TidyAttr_DEFER, "defer", VERS_HTML40, BOOL }, /* SCRIPT */
67
{ TidyAttr_DIR, "dir", VERS_HTML40, TEXTDIR }, /* ltr or rtl */
68
{ TidyAttr_DISABLED, "disabled", VERS_HTML40, BOOL }, /* form fields */
69
{ TidyAttr_ENCODING, "encoding", VERS_XML, PCDATA }, /* <?xml?> */
70
{ TidyAttr_ENCTYPE, "enctype", VERS_ALL, TYPE }, /* FORM */
71
{ TidyAttr_FACE, "face", VERS_LOOSE, PCDATA }, /* BASEFONT, FONT */
72
{ TidyAttr_FOR, "for", VERS_HTML40, IDREF }, /* LABEL */
73
{ TidyAttr_FRAME, "frame", VERS_HTML40, TFRAME }, /* TABLE */
74
{ TidyAttr_FRAMEBORDER, "frameborder", VERS_FRAMESET, FBORDER }, /* 0 or 1 */
75
{ TidyAttr_FRAMESPACING, "framespacing", VERS_PROPRIETARY, NUMBER },
76
{ TidyAttr_GRIDX, "gridx", VERS_PROPRIETARY, NUMBER }, /* TABLE Adobe golive*/
77
{ TidyAttr_GRIDY, "gridy", VERS_PROPRIETARY, NUMBER }, /* TABLE Adobe golive */
78
{ TidyAttr_HEADERS, "headers", VERS_HTML40, IDREFS }, /* table cells */
79
{ TidyAttr_HEIGHT, "height", VERS_ALL, LENGTH }, /* pixels only for TH/TD */
80
{ TidyAttr_HREF, "href", VERS_ALL, URL }, /* A, AREA, LINK and BASE */
81
{ TidyAttr_HREFLANG, "hreflang", VERS_HTML40, LANG }, /* A, LINK */
82
{ TidyAttr_HSPACE, "hspace", VERS_ALL, NUMBER }, /* APPLET, IMG, OBJECT */
83
{ TidyAttr_HTTP_EQUIV, "http-equiv", VERS_ALL, PCDATA }, /* META */
84
{ TidyAttr_ID, "id", VERS_HTML40, IDDEF },
85
{ TidyAttr_ISMAP, "ismap", VERS_ALL, BOOL }, /* IMG */
86
{ TidyAttr_LABEL, "label", VERS_HTML40, PCDATA }, /* OPT, OPTGROUP */
87
{ TidyAttr_LANG, "lang", VERS_HTML40, LANG },
88
{ TidyAttr_LANGUAGE, "language", VERS_LOOSE, PCDATA }, /* SCRIPT */
89
{ TidyAttr_LAST_MODIFIED, "last_modified", VERS_NETSCAPE, PCDATA }, /* A */
90
{ TidyAttr_LAST_VISIT, "last_visit", VERS_NETSCAPE, PCDATA }, /* A */
91
{ TidyAttr_LEFTMARGIN, "leftmargin", VERS_MICROSOFT, NUMBER }, /* used on BODY */
92
{ TidyAttr_LINK, "link", VERS_LOOSE, COLOR }, /* BODY */
93
{ TidyAttr_LONGDESC, "longdesc", VERS_HTML40, URL }, /* IMG */
94
{ TidyAttr_LOWSRC, "lowsrc", VERS_PROPRIETARY, URL }, /* IMG */
95
{ TidyAttr_MARGINHEIGHT, "marginheight", VERS_IFRAME, NUMBER }, /* FRAME, IFRAME, BODY */
96
{ TidyAttr_MARGINWIDTH, "marginwidth", VERS_IFRAME, NUMBER }, /* ditto */
97
{ TidyAttr_MAXLENGTH, "maxlength", VERS_ALL, NUMBER }, /* INPUT */
98
{ TidyAttr_MEDIA, "media", VERS_HTML40, MEDIA }, /* STYLE, LINK */
99
{ TidyAttr_METHOD, "method", VERS_ALL, FSUBMIT }, /* FORM: get or post */
100
{ TidyAttr_MULTIPLE, "multiple", VERS_ALL, BOOL }, /* SELECT */
101
{ TidyAttr_NAME, "name", VERS_ALL, NAME },
102
{ TidyAttr_NOHREF, "nohref", VERS_FROM32, BOOL }, /* AREA */
103
{ TidyAttr_NORESIZE, "noresize", VERS_FRAMESET, BOOL }, /* FRAME */
104
{ TidyAttr_NOSHADE, "noshade", VERS_LOOSE, BOOL }, /* HR */
105
{ TidyAttr_NOWRAP, "nowrap", VERS_LOOSE, BOOL }, /* table cells */
106
{ TidyAttr_OBJECT, "object", VERS_HTML40_LOOSE, PCDATA }, /* APPLET */
107
{ TidyAttr_OnAFTERUPDATE, "onafterupdate", VERS_MICROSOFT, SCRIPT },
108
{ TidyAttr_OnBEFOREUNLOAD, "onbeforeunload", VERS_MICROSOFT, SCRIPT },
109
{ TidyAttr_OnBEFOREUPDATE, "onbeforeupdate", VERS_MICROSOFT, SCRIPT },
110
{ TidyAttr_OnBLUR, "onblur", VERS_EVENTS, SCRIPT }, /* event */
111
{ TidyAttr_OnCHANGE, "onchange", VERS_EVENTS, SCRIPT }, /* event */
112
{ TidyAttr_OnCLICK, "onclick", VERS_EVENTS, SCRIPT }, /* event */
113
{ TidyAttr_OnDATAAVAILABLE, "ondataavailable", VERS_MICROSOFT, SCRIPT }, /* object, applet */
114
{ TidyAttr_OnDATASETCHANGED, "ondatasetchanged", VERS_MICROSOFT, SCRIPT }, /* object, applet */
115
{ TidyAttr_OnDATASETCOMPLETE, "ondatasetcomplete", VERS_MICROSOFT, SCRIPT },
116
{ TidyAttr_OnDBLCLICK, "ondblclick", VERS_EVENTS, SCRIPT }, /* event */
117
{ TidyAttr_OnERRORUPDATE, "onerrorupdate", VERS_MICROSOFT, SCRIPT }, /* form fields */
118
{ TidyAttr_OnFOCUS, "onfocus", VERS_EVENTS, SCRIPT }, /* event */
119
{ TidyAttr_OnKEYDOWN, "onkeydown", VERS_EVENTS, SCRIPT }, /* event */
120
{ TidyAttr_OnKEYPRESS, "onkeypress", VERS_EVENTS, SCRIPT }, /* event */
121
{ TidyAttr_OnKEYUP, "onkeyup", VERS_EVENTS, SCRIPT }, /* event */
122
{ TidyAttr_OnLOAD, "onload", VERS_EVENTS, SCRIPT }, /* event */
123
{ TidyAttr_OnMOUSEDOWN, "onmousedown", VERS_EVENTS, SCRIPT }, /* event */
124
{ TidyAttr_OnMOUSEMOVE, "onmousemove", VERS_EVENTS, SCRIPT }, /* event */
125
{ TidyAttr_OnMOUSEOUT, "onmouseout", VERS_EVENTS, SCRIPT }, /* event */
126
{ TidyAttr_OnMOUSEOVER, "onmouseover", VERS_EVENTS, SCRIPT }, /* event */
127
{ TidyAttr_OnMOUSEUP, "onmouseup", VERS_EVENTS, SCRIPT }, /* event */
128
{ TidyAttr_OnRESET, "onreset", VERS_EVENTS, SCRIPT }, /* event */
129
{ TidyAttr_OnROWENTER, "onrowenter", VERS_MICROSOFT, SCRIPT }, /* form fields */
130
{ TidyAttr_OnROWEXIT, "onrowexit", VERS_MICROSOFT, SCRIPT }, /* form fields */
131
{ TidyAttr_OnSELECT, "onselect", VERS_EVENTS, SCRIPT }, /* event */
132
{ TidyAttr_OnSUBMIT, "onsubmit", VERS_EVENTS, SCRIPT }, /* event */
133
{ TidyAttr_OnUNLOAD, "onunload", VERS_EVENTS, SCRIPT }, /* event */
134
{ TidyAttr_PROFILE, "profile", VERS_HTML40, URL }, /* HEAD */
135
{ TidyAttr_PROMPT, "prompt", VERS_LOOSE, PCDATA }, /* ISINDEX */
136
{ TidyAttr_RBSPAN, "rbspan", VERS_XHTML11, NUMBER }, /* ruby markup */
137
{ TidyAttr_READONLY, "readonly", VERS_HTML40, BOOL }, /* form fields */
138
{ TidyAttr_REL, "rel", VERS_ALL, LINKTYPES },
139
{ TidyAttr_REV, "rev", VERS_ALL, LINKTYPES },
140
{ TidyAttr_RIGHTMARGIN, "rightmargin", VERS_MICROSOFT, NUMBER }, /* used on BODY */
141
{ TidyAttr_ROWS, "rows", VERS_ALL, NUMBER }, /* TEXTAREA */
142
{ TidyAttr_ROWSPAN, "rowspan", VERS_ALL, NUMBER }, /* table cells */
143
{ TidyAttr_RULES, "rules", VERS_HTML40, TRULES }, /* TABLE */
144
{ TidyAttr_SCHEME, "scheme", VERS_HTML40, PCDATA }, /* META */
145
{ TidyAttr_SCOPE, "scope", VERS_HTML40, SCOPE }, /* table cells */
146
{ TidyAttr_SCROLLING, "scrolling", VERS_IFRAME, SCROLL }, /* yes, no or auto */
147
{ TidyAttr_SELECTED, "selected", VERS_ALL, BOOL }, /* OPTION */
148
{ TidyAttr_SHAPE, "shape", VERS_FROM32, SHAPE }, /* AREA, A */
149
{ TidyAttr_SHOWGRID, "showgrid", VERS_PROPRIETARY, BOOL }, /* TABLE Adobe golive */
150
{ TidyAttr_SHOWGRIDX, "showgridx", VERS_PROPRIETARY, BOOL }, /* TABLE Adobe golive*/
151
{ TidyAttr_SHOWGRIDY, "showgridy", VERS_PROPRIETARY, BOOL }, /* TABLE Adobe golive*/
152
{ TidyAttr_SIZE, "size", VERS_LOOSE, NUMBER }, /* HR, FONT, BASEFONT, SELECT */
153
{ TidyAttr_SPAN, "span", VERS_HTML40, NUMBER }, /* COL, COLGROUP */
154
{ TidyAttr_SRC, "src", VERS_ALL, URL }, /* IMG, FRAME, IFRAME */
155
{ TidyAttr_STANDBY, "standby", VERS_HTML40, PCDATA }, /* OBJECT */
156
{ TidyAttr_START, "start", VERS_ALL, NUMBER }, /* OL */
157
{ TidyAttr_STYLE, "style", VERS_HTML40, PCDATA },
158
{ TidyAttr_SUMMARY, "summary", VERS_HTML40, PCDATA }, /* TABLE */
159
{ TidyAttr_TABINDEX, "tabindex", VERS_HTML40, NUMBER }, /* fields, OBJECT and A */
160
{ TidyAttr_TARGET, "target", VERS_HTML40, TARGET }, /* names a frame/window */
161
{ TidyAttr_TEXT, "text", VERS_LOOSE, COLOR }, /* BODY */
162
{ TidyAttr_TITLE, "title", VERS_HTML40, PCDATA }, /* text tool tip */
163
{ TidyAttr_TOPMARGIN, "topmargin", VERS_MICROSOFT, NUMBER }, /* used on BODY */
164
{ TidyAttr_TYPE, "type", VERS_FROM32, TYPE }, /* also used by SPACER */
165
{ TidyAttr_USEMAP, "usemap", VERS_ALL, URL }, /* things with images */
166
{ TidyAttr_VALIGN, "valign", VERS_FROM32, VALIGN },
167
{ TidyAttr_VALUE, "value", VERS_ALL, PCDATA },
168
{ TidyAttr_VALUETYPE, "valuetype", VERS_HTML40, VTYPE }, /* PARAM: data, ref, object */
169
{ TidyAttr_VERSION, "version", VERS_ALL|VERS_XML, PCDATA }, /* HTML <?xml?> */
170
{ TidyAttr_VLINK, "vlink", VERS_LOOSE, COLOR }, /* BODY */
171
{ TidyAttr_VSPACE, "vspace", VERS_LOOSE, NUMBER }, /* IMG, OBJECT, APPLET */
172
{ TidyAttr_WIDTH, "width", VERS_ALL, LENGTH }, /* pixels only for TD/TH */
173
{ TidyAttr_WRAP, "wrap", VERS_NETSCAPE, PCDATA }, /* textarea */
174
{ TidyAttr_XML_LANG, "xml:lang", VERS_XML, LANG }, /* XML language */
175
{ TidyAttr_XML_SPACE, "xml:space", VERS_XML, PCDATA }, /* XML white space */
62
{ TidyAttr_UNKNOWN, "unknown!", VERS_PROPRIETARY, NULL },
63
{ TidyAttr_ABBR, "abbr", VERS_HTML40, CH_PCDATA },
64
{ TidyAttr_ACCEPT, "accept", VERS_ALL, CH_XTYPE },
65
{ TidyAttr_ACCEPT_CHARSET, "accept-charset", VERS_HTML40, CH_CHARSET },
66
{ TidyAttr_ACCESSKEY, "accesskey", VERS_HTML40, CH_CHARACTER },
67
{ TidyAttr_ACTION, "action", VERS_ALL, CH_ACTION },
68
{ TidyAttr_ADD_DATE, "add_date", VERS_NETSCAPE, CH_PCDATA }, /* A */
69
{ TidyAttr_ALIGN, "align", VERS_ALL, CH_ALIGN }, /* varies by element */
70
{ TidyAttr_ALINK, "alink", VERS_LOOSE, CH_COLOR },
71
{ TidyAttr_ALT, "alt", VERS_ALL, CH_PCDATA }, /* nowrap */
72
{ TidyAttr_ARCHIVE, "archive", VERS_HTML40, CH_URLS }, /* space or comma separated list */
73
{ TidyAttr_AXIS, "axis", VERS_HTML40, CH_PCDATA },
74
{ TidyAttr_BACKGROUND, "background", VERS_LOOSE, CH_URL },
75
{ TidyAttr_BGCOLOR, "bgcolor", VERS_LOOSE, CH_COLOR },
76
{ TidyAttr_BGPROPERTIES, "bgproperties", VERS_PROPRIETARY, CH_PCDATA }, /* BODY "fixed" fixes background */
77
{ TidyAttr_BORDER, "border", VERS_ALL, CH_BORDER }, /* like LENGTH + "border" */
78
{ TidyAttr_BORDERCOLOR, "bordercolor", VERS_MICROSOFT, CH_COLOR }, /* used on TABLE */
79
{ TidyAttr_BOTTOMMARGIN, "bottommargin", VERS_MICROSOFT, CH_NUMBER }, /* used on BODY */
80
{ TidyAttr_CELLPADDING, "cellpadding", VERS_FROM32, CH_LENGTH }, /* % or pixel values */
81
{ TidyAttr_CELLSPACING, "cellspacing", VERS_FROM32, CH_LENGTH },
82
{ TidyAttr_CHAR, "char", VERS_HTML40, CH_CHARACTER },
83
{ TidyAttr_CHAROFF, "charoff", VERS_HTML40, CH_LENGTH },
84
{ TidyAttr_CHARSET, "charset", VERS_HTML40, CH_CHARSET },
85
{ TidyAttr_CHECKED, "checked", VERS_ALL, CH_BOOL }, /* i.e. "checked" or absent */
86
{ TidyAttr_CITE, "cite", VERS_HTML40, CH_URL },
87
{ TidyAttr_CLASS, "class", VERS_HTML40, CH_PCDATA },
88
{ TidyAttr_CLASSID, "classid", VERS_HTML40, CH_URL },
89
{ TidyAttr_CLEAR, "clear", VERS_LOOSE, CH_CLEAR }, /* BR: left, right, all */
90
{ TidyAttr_CODE, "code", VERS_LOOSE, CH_PCDATA }, /* APPLET */
91
{ TidyAttr_CODEBASE, "codebase", VERS_HTML40, CH_URL }, /* OBJECT */
92
{ TidyAttr_CODETYPE, "codetype", VERS_HTML40, CH_XTYPE }, /* OBJECT */
93
{ TidyAttr_COLOR, "color", VERS_LOOSE, CH_COLOR }, /* BASEFONT, FONT */
94
{ TidyAttr_COLS, "cols", VERS_IFRAME, CH_COLS }, /* TABLE & FRAMESET */
95
{ TidyAttr_COLSPAN, "colspan", VERS_FROM32, CH_NUMBER },
96
{ TidyAttr_COMPACT, "compact", VERS_ALL, CH_BOOL }, /* lists */
97
{ TidyAttr_CONTENT, "content", VERS_ALL, CH_PCDATA },
98
{ TidyAttr_COORDS, "coords", VERS_FROM32, CH_COORDS }, /* AREA, A */
99
{ TidyAttr_DATA, "data", VERS_HTML40, CH_URL }, /* OBJECT */
100
{ TidyAttr_DATAFLD, "datafld", VERS_MICROSOFT, CH_PCDATA }, /* used on DIV, IMG */
101
{ TidyAttr_DATAFORMATAS, "dataformatas", VERS_MICROSOFT, CH_PCDATA }, /* used on DIV, IMG */
102
{ TidyAttr_DATAPAGESIZE, "datapagesize", VERS_MICROSOFT, CH_NUMBER }, /* used on DIV, IMG */
103
{ TidyAttr_DATASRC, "datasrc", VERS_MICROSOFT, CH_URL }, /* used on TABLE */
104
{ TidyAttr_DATETIME, "datetime", VERS_HTML40, CH_DATE }, /* INS, DEL */
105
{ TidyAttr_DECLARE, "declare", VERS_HTML40, CH_BOOL }, /* OBJECT */
106
{ TidyAttr_DEFER, "defer", VERS_HTML40, CH_BOOL }, /* SCRIPT */
107
{ TidyAttr_DIR, "dir", VERS_HTML40, CH_TEXTDIR }, /* ltr or rtl */
108
{ TidyAttr_DISABLED, "disabled", VERS_HTML40, CH_BOOL }, /* form fields */
109
{ TidyAttr_ENCODING, "encoding", VERS_XML, CH_PCDATA }, /* <?xml?> */
110
{ TidyAttr_ENCTYPE, "enctype", VERS_ALL, CH_XTYPE }, /* FORM */
111
{ TidyAttr_FACE, "face", VERS_LOOSE, CH_PCDATA }, /* BASEFONT, FONT */
112
{ TidyAttr_FOR, "for", VERS_HTML40, CH_IDREF }, /* LABEL */
113
{ TidyAttr_FRAME, "frame", VERS_HTML40, CH_TFRAME }, /* TABLE */
114
{ TidyAttr_FRAMEBORDER, "frameborder", VERS_FRAMESET, CH_FBORDER }, /* 0 or 1 */
115
{ TidyAttr_FRAMESPACING, "framespacing", VERS_PROPRIETARY, CH_NUMBER },
116
{ TidyAttr_GRIDX, "gridx", VERS_PROPRIETARY, CH_NUMBER }, /* TABLE Adobe golive*/
117
{ TidyAttr_GRIDY, "gridy", VERS_PROPRIETARY, CH_NUMBER }, /* TABLE Adobe golive */
118
{ TidyAttr_HEADERS, "headers", VERS_HTML40, CH_IDREFS }, /* table cells */
119
{ TidyAttr_HEIGHT, "height", VERS_ALL, CH_LENGTH }, /* pixels only for TH/TD */
120
{ TidyAttr_HREF, "href", VERS_ALL, CH_URL }, /* A, AREA, LINK and BASE */
121
{ TidyAttr_HREFLANG, "hreflang", VERS_HTML40, CH_LANG }, /* A, LINK */
122
{ TidyAttr_HSPACE, "hspace", VERS_ALL, CH_NUMBER }, /* APPLET, IMG, OBJECT */
123
{ TidyAttr_HTTP_EQUIV, "http-equiv", VERS_ALL, CH_PCDATA }, /* META */
124
{ TidyAttr_ID, "id", VERS_HTML40, CH_IDDEF },
125
{ TidyAttr_ISMAP, "ismap", VERS_ALL, CH_BOOL }, /* IMG */
126
{ TidyAttr_LABEL, "label", VERS_HTML40, CH_PCDATA }, /* OPT, OPTGROUP */
127
{ TidyAttr_LANG, "lang", VERS_HTML40, CH_LANG },
128
{ TidyAttr_LANGUAGE, "language", VERS_LOOSE, CH_PCDATA }, /* SCRIPT */
129
{ TidyAttr_LAST_MODIFIED, "last_modified", VERS_NETSCAPE, CH_PCDATA }, /* A */
130
{ TidyAttr_LAST_VISIT, "last_visit", VERS_NETSCAPE, CH_PCDATA }, /* A */
131
{ TidyAttr_LEFTMARGIN, "leftmargin", VERS_MICROSOFT, CH_NUMBER }, /* used on BODY */
132
{ TidyAttr_LINK, "link", VERS_LOOSE, CH_COLOR }, /* BODY */
133
{ TidyAttr_LONGDESC, "longdesc", VERS_HTML40, CH_URL }, /* IMG */
134
{ TidyAttr_LOWSRC, "lowsrc", VERS_PROPRIETARY, CH_URL }, /* IMG */
135
{ TidyAttr_MARGINHEIGHT, "marginheight", VERS_IFRAME, CH_NUMBER }, /* FRAME, IFRAME, BODY */
136
{ TidyAttr_MARGINWIDTH, "marginwidth", VERS_IFRAME, CH_NUMBER }, /* ditto */
137
{ TidyAttr_MAXLENGTH, "maxlength", VERS_ALL, CH_NUMBER }, /* INPUT */
138
{ TidyAttr_MEDIA, "media", VERS_HTML40, CH_MEDIA }, /* STYLE, LINK */
139
{ TidyAttr_METHOD, "method", VERS_ALL, CH_FSUBMIT }, /* FORM: get or post */
140
{ TidyAttr_MULTIPLE, "multiple", VERS_ALL, CH_BOOL }, /* SELECT */
141
{ TidyAttr_NAME, "name", VERS_ALL, CH_NAME },
142
{ TidyAttr_NOHREF, "nohref", VERS_FROM32, CH_BOOL }, /* AREA */
143
{ TidyAttr_NORESIZE, "noresize", VERS_FRAMESET, CH_BOOL }, /* FRAME */
144
{ TidyAttr_NOSHADE, "noshade", VERS_LOOSE, CH_BOOL }, /* HR */
145
{ TidyAttr_NOWRAP, "nowrap", VERS_LOOSE, CH_BOOL }, /* table cells */
146
{ TidyAttr_OBJECT, "object", VERS_HTML40_LOOSE, CH_PCDATA }, /* APPLET */
147
{ TidyAttr_OnAFTERUPDATE, "onafterupdate", VERS_MICROSOFT, CH_SCRIPT },
148
{ TidyAttr_OnBEFOREUNLOAD, "onbeforeunload", VERS_MICROSOFT, CH_SCRIPT },
149
{ TidyAttr_OnBEFOREUPDATE, "onbeforeupdate", VERS_MICROSOFT, CH_SCRIPT },
150
{ TidyAttr_OnBLUR, "onblur", VERS_EVENTS, CH_SCRIPT }, /* event */
151
{ TidyAttr_OnCHANGE, "onchange", VERS_EVENTS, CH_SCRIPT }, /* event */
152
{ TidyAttr_OnCLICK, "onclick", VERS_EVENTS, CH_SCRIPT }, /* event */
153
{ TidyAttr_OnDATAAVAILABLE, "ondataavailable", VERS_MICROSOFT, CH_SCRIPT }, /* object, applet */
154
{ TidyAttr_OnDATASETCHANGED, "ondatasetchanged", VERS_MICROSOFT, CH_SCRIPT }, /* object, applet */
155
{ TidyAttr_OnDATASETCOMPLETE, "ondatasetcomplete", VERS_MICROSOFT, CH_SCRIPT },
156
{ TidyAttr_OnDBLCLICK, "ondblclick", VERS_EVENTS, CH_SCRIPT }, /* event */
157
{ TidyAttr_OnERRORUPDATE, "onerrorupdate", VERS_MICROSOFT, CH_SCRIPT }, /* form fields */
158
{ TidyAttr_OnFOCUS, "onfocus", VERS_EVENTS, CH_SCRIPT }, /* event */
159
{ TidyAttr_OnKEYDOWN, "onkeydown", VERS_EVENTS, CH_SCRIPT }, /* event */
160
{ TidyAttr_OnKEYPRESS, "onkeypress", VERS_EVENTS, CH_SCRIPT }, /* event */
161
{ TidyAttr_OnKEYUP, "onkeyup", VERS_EVENTS, CH_SCRIPT }, /* event */
162
{ TidyAttr_OnLOAD, "onload", VERS_EVENTS, CH_SCRIPT }, /* event */
163
{ TidyAttr_OnMOUSEDOWN, "onmousedown", VERS_EVENTS, CH_SCRIPT }, /* event */
164
{ TidyAttr_OnMOUSEMOVE, "onmousemove", VERS_EVENTS, CH_SCRIPT }, /* event */
165
{ TidyAttr_OnMOUSEOUT, "onmouseout", VERS_EVENTS, CH_SCRIPT }, /* event */
166
{ TidyAttr_OnMOUSEOVER, "onmouseover", VERS_EVENTS, CH_SCRIPT }, /* event */
167
{ TidyAttr_OnMOUSEUP, "onmouseup", VERS_EVENTS, CH_SCRIPT }, /* event */
168
{ TidyAttr_OnRESET, "onreset", VERS_EVENTS, CH_SCRIPT }, /* event */
169
{ TidyAttr_OnROWENTER, "onrowenter", VERS_MICROSOFT, CH_SCRIPT }, /* form fields */
170
{ TidyAttr_OnROWEXIT, "onrowexit", VERS_MICROSOFT, CH_SCRIPT }, /* form fields */
171
{ TidyAttr_OnSELECT, "onselect", VERS_EVENTS, CH_SCRIPT }, /* event */
172
{ TidyAttr_OnSUBMIT, "onsubmit", VERS_EVENTS, CH_SCRIPT }, /* event */
173
{ TidyAttr_OnUNLOAD, "onunload", VERS_EVENTS, CH_SCRIPT }, /* event */
174
{ TidyAttr_PROFILE, "profile", VERS_HTML40, CH_URL }, /* HEAD */
175
{ TidyAttr_PROMPT, "prompt", VERS_LOOSE, CH_PCDATA }, /* ISINDEX */
176
{ TidyAttr_RBSPAN, "rbspan", VERS_XHTML11, CH_NUMBER }, /* ruby markup */
177
{ TidyAttr_READONLY, "readonly", VERS_HTML40, CH_BOOL }, /* form fields */
178
{ TidyAttr_REL, "rel", VERS_ALL, CH_LINKTYPES },
179
{ TidyAttr_REV, "rev", VERS_ALL, CH_LINKTYPES },
180
{ TidyAttr_RIGHTMARGIN, "rightmargin", VERS_MICROSOFT, CH_NUMBER }, /* used on BODY */
181
{ TidyAttr_ROWS, "rows", VERS_ALL, CH_NUMBER }, /* TEXTAREA */
182
{ TidyAttr_ROWSPAN, "rowspan", VERS_ALL, CH_NUMBER }, /* table cells */
183
{ TidyAttr_RULES, "rules", VERS_HTML40, CH_TRULES }, /* TABLE */
184
{ TidyAttr_SCHEME, "scheme", VERS_HTML40, CH_PCDATA }, /* META */
185
{ TidyAttr_SCOPE, "scope", VERS_HTML40, CH_SCOPE }, /* table cells */
186
{ TidyAttr_SCROLLING, "scrolling", VERS_IFRAME, CH_SCROLL }, /* yes, no or auto */
187
{ TidyAttr_SELECTED, "selected", VERS_ALL, CH_BOOL }, /* OPTION */
188
{ TidyAttr_SHAPE, "shape", VERS_FROM32, CH_SHAPE }, /* AREA, A */
189
{ TidyAttr_SHOWGRID, "showgrid", VERS_PROPRIETARY, CH_BOOL }, /* TABLE Adobe golive */
190
{ TidyAttr_SHOWGRIDX, "showgridx", VERS_PROPRIETARY, CH_BOOL }, /* TABLE Adobe golive*/
191
{ TidyAttr_SHOWGRIDY, "showgridy", VERS_PROPRIETARY, CH_BOOL }, /* TABLE Adobe golive*/
192
{ TidyAttr_SIZE, "size", VERS_LOOSE, CH_NUMBER }, /* HR, FONT, BASEFONT, SELECT */
193
{ TidyAttr_SPAN, "span", VERS_HTML40, CH_NUMBER }, /* COL, COLGROUP */
194
{ TidyAttr_SRC, "src", VERS_ALL, CH_URL }, /* IMG, FRAME, IFRAME */
195
{ TidyAttr_STANDBY, "standby", VERS_HTML40, CH_PCDATA }, /* OBJECT */
196
{ TidyAttr_START, "start", VERS_ALL, CH_NUMBER }, /* OL */
197
{ TidyAttr_STYLE, "style", VERS_HTML40, CH_PCDATA },
198
{ TidyAttr_SUMMARY, "summary", VERS_HTML40, CH_PCDATA }, /* TABLE */
199
{ TidyAttr_TABINDEX, "tabindex", VERS_HTML40, CH_NUMBER }, /* fields, OBJECT and A */
200
{ TidyAttr_TARGET, "target", VERS_HTML40, CH_TARGET }, /* names a frame/window */
201
{ TidyAttr_TEXT, "text", VERS_LOOSE, CH_COLOR }, /* BODY */
202
{ TidyAttr_TITLE, "title", VERS_HTML40, CH_PCDATA }, /* text tool tip */
203
{ TidyAttr_TOPMARGIN, "topmargin", VERS_MICROSOFT, CH_NUMBER }, /* used on BODY */
204
{ TidyAttr_TYPE, "type", VERS_FROM32, CH_TYPE }, /* also used by SPACER */
205
{ TidyAttr_USEMAP, "usemap", VERS_ALL, CH_URL }, /* things with images */
206
{ TidyAttr_VALIGN, "valign", VERS_FROM32, CH_VALIGN },
207
{ TidyAttr_VALUE, "value", VERS_ALL, CH_PCDATA },
208
{ TidyAttr_VALUETYPE, "valuetype", VERS_HTML40, CH_VTYPE }, /* PARAM: data, ref, object */
209
{ TidyAttr_VERSION, "version", VERS_ALL|VERS_XML, CH_PCDATA }, /* HTML <?xml?> */
210
{ TidyAttr_VLINK, "vlink", VERS_LOOSE, CH_COLOR }, /* BODY */
211
{ TidyAttr_VSPACE, "vspace", VERS_LOOSE, CH_NUMBER }, /* IMG, OBJECT, APPLET */
212
{ TidyAttr_WIDTH, "width", VERS_ALL, CH_LENGTH }, /* pixels only for TD/TH */
213
{ TidyAttr_WRAP, "wrap", VERS_NETSCAPE, CH_PCDATA }, /* textarea */
214
{ TidyAttr_XML_LANG, "xml:lang", VERS_XML, CH_LANG }, /* XML language */
215
{ TidyAttr_XML_SPACE, "xml:space", VERS_XML, CH_PCDATA }, /* XML white space */
177
217
/* todo: VERS_ALL is wrong! */
178
{ TidyAttr_XMLNS, "xmlns", VERS_ALL, PCDATA }, /* name space */
179
{ TidyAttr_EVENT, "event", VERS_HTML40, PCDATA }, /* reserved for <script> */
180
{ TidyAttr_METHODS, "methods", VERS_HTML20, PCDATA }, /* for <a>, never implemented */
181
{ TidyAttr_N, "n", VERS_HTML20, PCDATA }, /* for <nextid> */
182
{ TidyAttr_SDAFORM, "sdaform", VERS_HTML20, PCDATA }, /* SDATA attribute in HTML 2.0 */
183
{ TidyAttr_SDAPREF, "sdapref", VERS_HTML20, PCDATA }, /* SDATA attribute in HTML 2.0 */
184
{ TidyAttr_SDASUFF, "sdasuff", VERS_HTML20, PCDATA }, /* SDATA attribute in HTML 2.0 */
185
{ TidyAttr_URN, "urn", VERS_HTML20, PCDATA }, /* for <a>, never implemented */
218
{ TidyAttr_XMLNS, "xmlns", VERS_ALL, CH_PCDATA }, /* name space */
219
{ TidyAttr_EVENT, "event", VERS_HTML40, CH_PCDATA }, /* reserved for <script> */
220
{ TidyAttr_METHODS, "methods", VERS_HTML20, CH_PCDATA }, /* for <a>, never implemented */
221
{ TidyAttr_N, "n", VERS_HTML20, CH_PCDATA }, /* for <nextid> */
222
{ TidyAttr_SDAFORM, "sdaform", VERS_HTML20, CH_PCDATA }, /* SDATA attribute in HTML 2.0 */
223
{ TidyAttr_SDAPREF, "sdapref", VERS_HTML20, CH_PCDATA }, /* SDATA attribute in HTML 2.0 */
224
{ TidyAttr_SDASUFF, "sdasuff", VERS_HTML20, CH_PCDATA }, /* SDATA attribute in HTML 2.0 */
225
{ TidyAttr_URN, "urn", VERS_HTML20, CH_PCDATA }, /* for <a>, never implemented */
187
227
/* this must be the final entry */
188
{ N_TIDY_ATTRIBS, NULL, VERS_UNKNOWN, NULL }
228
{ N_TIDY_ATTRIBS, NULL, VERS_UNKNOWN, NULL }
191
231
static uint AttributeVersions(Node* node, AttVal* attval)