1#ifndef __ATTRS_H__
2#define __ATTRS_H__
3
4/* attrs.h -- recognize HTML attributes
5
6  (c) 1998-2006 (W3C) MIT, ERCIM, Keio University
7  See tidy.h for the copyright notice.
8
9  CVS Info :
10
11    $Author: iccir $
12    $Date: 2007/01/30 23:46:51 $
13    $Revision: 1.3 $
14
15*/
16
17#include "forward.h"
18
19/* declaration for methods that check attribute values */
20typedef void (AttrCheck)(TidyDocImpl* doc, Node *node, AttVal *attval);
21
22struct _Attribute
23{
24    TidyAttrId  id;
25    tmbstr      name;
26    unsigned    versions;
27    AttrCheck*  attrchk;
28
29    struct _Attribute* next;
30};
31
32
33/*
34 Anchor/Node linked list
35*/
36
37struct _Anchor
38{
39    struct _Anchor *next;
40    Node *node;
41    char *name;
42};
43
44typedef struct _Anchor Anchor;
45
46#if !defined(ATTRIBUTE_HASH_LOOKUP)
47#define ATTRIBUTE_HASH_LOOKUP 1
48#endif
49
50#if ATTRIBUTE_HASH_LOOKUP
51enum
52{
53    ATTRIBUTE_HASH_SIZE=178u
54};
55
56struct _AttrHash
57{
58    Attribute const*  attr;
59    struct _AttrHash* next;
60};
61
62typedef struct _AttrHash AttrHash;
63#endif
64
65struct _TidyAttribImpl
66{
67    /* anchor/node lookup */
68    Anchor*    anchor_list;
69
70    /* Declared literal attributes */
71    Attribute* declared_attr_list;
72
73#if ATTRIBUTE_HASH_LOOKUP
74    AttrHash*  hashtab[ATTRIBUTE_HASH_SIZE];
75#endif
76};
77
78typedef struct _TidyAttribImpl TidyAttribImpl;
79
80#define XHTML_NAMESPACE "http://www.w3.org/1999/xhtml"
81
82AttrCheck TY_(CheckUrl);
83
84/* public method for finding attribute definition by name */
85const Attribute* TY_(CheckAttribute)( TidyDocImpl* doc, Node *node, AttVal *attval );
86
87const Attribute* TY_(FindAttribute)( TidyDocImpl* doc, AttVal *attval );
88
89AttVal* TY_(GetAttrByName)( Node *node, ctmbstr name );
90
91AttVal* TY_(AddAttribute)( TidyDocImpl* doc,
92                           Node *node, ctmbstr name, ctmbstr value );
93
94AttVal* TY_(RepairAttrValue)(TidyDocImpl* doc, Node* node, ctmbstr name, ctmbstr value);
95
96Bool TY_(IsUrl)( TidyDocImpl* doc, ctmbstr attrname );
97
98/* Bool IsBool( TidyDocImpl* doc, ctmbstr attrname ); */
99
100Bool TY_(IsScript)( TidyDocImpl* doc, ctmbstr attrname );
101
102/* may id or name serve as anchor? */
103Bool TY_(IsAnchorElement)( TidyDocImpl* doc, Node* node );
104
105/*
106  In CSS1, selectors can contain only the characters A-Z, 0-9, and
107  Unicode characters 161-255, plus dash (-); they cannot start with
108  a dash or a digit; they can also contain escaped characters and any
109  Unicode character as a numeric code (see next item).
110
111  The backslash followed by at most four hexadecimal digits (0..9A..F)
112  stands for the Unicode character with that number.
113
114  Any character except a hexadecimal digit can be escaped to remove its
115  special meaning, by putting a backslash in front.
116
117  #508936 - CSS class naming for -clean option
118*/
119Bool TY_(IsCSS1Selector)( ctmbstr buf );
120
121Bool TY_(IsValidHTMLID)(ctmbstr id);
122Bool TY_(IsValidXMLID)(ctmbstr id);
123
124/* removes anchor for specific node */
125void TY_(RemoveAnchorByNode)( TidyDocImpl* doc, Node *node );
126
127/* free all anchors */
128void TY_(FreeAnchors)( TidyDocImpl* doc );
129
130
131/* public methods for inititializing/freeing attribute dictionary */
132void TY_(InitAttrs)( TidyDocImpl* doc );
133void TY_(FreeAttrTable)( TidyDocImpl* doc );
134
135void TY_(AppendToClassAttr)( AttVal *classattr, ctmbstr classname );
136/*
137 the same attribute name can't be used
138 more than once in each element
139*/
140void TY_(RepairDuplicateAttributes)( TidyDocImpl* doc, Node* node );
141
142Bool TY_(IsBoolAttribute)( AttVal* attval );
143Bool TY_(attrIsEvent)( AttVal* attval );
144
145AttVal* TY_(AttrGetById)( Node* node, TidyAttrId id );
146
147uint TY_(NodeAttributeVersions)( Node* node, TidyAttrId id );
148
149/* 0 == TidyAttr_UNKNOWN  */
150#define AttrId(av) ((av) && (av)->dict ? (av)->dict->id : TidyAttr_UNKNOWN)
151#define AttrIsId(av, atid) ((av) && (av)->dict && ((av)->dict->id == atid))
152
153#define AttrHasValue(attr)      ((attr) && (attr)->value)
154#define AttrValueIs(attr, val)  (AttrHasValue(attr) && \
155                                 TY_(tmbstrcasecmp)((attr)->value, val) == 0)
156#define AttrContains(attr, val) (AttrHasValue(attr) && \
157                                 TY_(tmbsubstr)((attr)->value, val) != NULL)
158#define AttrVersions(attr)      ((attr) && (attr)->dict ? (attr)->dict->versions : VERS_PROPRIETARY)
159
160#define AttrsHaveSameId(a, b) (a && b && a->dict && b->dict && a->dict->id && \
161                               b->dict->id && a->dict->id == b->dict->id)
162
163#define attrIsABBR(av)              AttrIsId( av, TidyAttr_ABBR  )
164#define attrIsACCEPT(av)            AttrIsId( av, TidyAttr_ACCEPT  )
165#define attrIsACCEPT_CHARSET(av)    AttrIsId( av, TidyAttr_ACCEPT_CHARSET  )
166#define attrIsACCESSKEY(av)         AttrIsId( av, TidyAttr_ACCESSKEY  )
167#define attrIsACTION(av)            AttrIsId( av, TidyAttr_ACTION  )
168#define attrIsADD_DATE(av)          AttrIsId( av, TidyAttr_ADD_DATE  )
169#define attrIsALIGN(av)             AttrIsId( av, TidyAttr_ALIGN  )
170#define attrIsALINK(av)             AttrIsId( av, TidyAttr_ALINK  )
171#define attrIsALT(av)               AttrIsId( av, TidyAttr_ALT  )
172#define attrIsARCHIVE(av)           AttrIsId( av, TidyAttr_ARCHIVE  )
173#define attrIsAXIS(av)              AttrIsId( av, TidyAttr_AXIS  )
174#define attrIsBACKGROUND(av)        AttrIsId( av, TidyAttr_BACKGROUND  )
175#define attrIsBGCOLOR(av)           AttrIsId( av, TidyAttr_BGCOLOR  )
176#define attrIsBGPROPERTIES(av)      AttrIsId( av, TidyAttr_BGPROPERTIES  )
177#define attrIsBORDER(av)            AttrIsId( av, TidyAttr_BORDER  )
178#define attrIsBORDERCOLOR(av)       AttrIsId( av, TidyAttr_BORDERCOLOR  )
179#define attrIsBOTTOMMARGIN(av)      AttrIsId( av, TidyAttr_BOTTOMMARGIN  )
180#define attrIsCELLPADDING(av)       AttrIsId( av, TidyAttr_CELLPADDING  )
181#define attrIsCELLSPACING(av)       AttrIsId( av, TidyAttr_CELLSPACING  )
182#define attrIsCHAR(av)              AttrIsId( av, TidyAttr_CHAR  )
183#define attrIsCHAROFF(av)           AttrIsId( av, TidyAttr_CHAROFF  )
184#define attrIsCHARSET(av)           AttrIsId( av, TidyAttr_CHARSET  )
185#define attrIsCHECKED(av)           AttrIsId( av, TidyAttr_CHECKED  )
186#define attrIsCITE(av)              AttrIsId( av, TidyAttr_CITE  )
187#define attrIsCLASS(av)             AttrIsId( av, TidyAttr_CLASS  )
188#define attrIsCLASSID(av)           AttrIsId( av, TidyAttr_CLASSID  )
189#define attrIsCLEAR(av)             AttrIsId( av, TidyAttr_CLEAR  )
190#define attrIsCODE(av)              AttrIsId( av, TidyAttr_CODE  )
191#define attrIsCODEBASE(av)          AttrIsId( av, TidyAttr_CODEBASE  )
192#define attrIsCODETYPE(av)          AttrIsId( av, TidyAttr_CODETYPE  )
193#define attrIsCOLOR(av)             AttrIsId( av, TidyAttr_COLOR  )
194#define attrIsCOLS(av)              AttrIsId( av, TidyAttr_COLS  )
195#define attrIsCOLSPAN(av)           AttrIsId( av, TidyAttr_COLSPAN  )
196#define attrIsCOMPACT(av)           AttrIsId( av, TidyAttr_COMPACT  )
197#define attrIsCONTENT(av)           AttrIsId( av, TidyAttr_CONTENT  )
198#define attrIsCOORDS(av)            AttrIsId( av, TidyAttr_COORDS  )
199#define attrIsDATA(av)              AttrIsId( av, TidyAttr_DATA  )
200#define attrIsDATAFLD(av)           AttrIsId( av, TidyAttr_DATAFLD  )
201#define attrIsDATAFORMATAS(av)      AttrIsId( av, TidyAttr_DATAFORMATAS  )
202#define attrIsDATAPAGESIZE(av)      AttrIsId( av, TidyAttr_DATAPAGESIZE  )
203#define attrIsDATASRC(av)           AttrIsId( av, TidyAttr_DATASRC  )
204#define attrIsDATETIME(av)          AttrIsId( av, TidyAttr_DATETIME  )
205#define attrIsDECLARE(av)           AttrIsId( av, TidyAttr_DECLARE  )
206#define attrIsDEFER(av)             AttrIsId( av, TidyAttr_DEFER  )
207#define attrIsDIR(av)               AttrIsId( av, TidyAttr_DIR  )
208#define attrIsDISABLED(av)          AttrIsId( av, TidyAttr_DISABLED  )
209#define attrIsENCODING(av)          AttrIsId( av, TidyAttr_ENCODING  )
210#define attrIsENCTYPE(av)           AttrIsId( av, TidyAttr_ENCTYPE  )
211#define attrIsFACE(av)              AttrIsId( av, TidyAttr_FACE  )
212#define attrIsFOR(av)               AttrIsId( av, TidyAttr_FOR  )
213#define attrIsFRAME(av)             AttrIsId( av, TidyAttr_FRAME  )
214#define attrIsFRAMEBORDER(av)       AttrIsId( av, TidyAttr_FRAMEBORDER  )
215#define attrIsFRAMESPACING(av)      AttrIsId( av, TidyAttr_FRAMESPACING  )
216#define attrIsGRIDX(av)             AttrIsId( av, TidyAttr_GRIDX  )
217#define attrIsGRIDY(av)             AttrIsId( av, TidyAttr_GRIDY  )
218#define attrIsHEADERS(av)           AttrIsId( av, TidyAttr_HEADERS  )
219#define attrIsHEIGHT(av)            AttrIsId( av, TidyAttr_HEIGHT  )
220#define attrIsHREF(av)              AttrIsId( av, TidyAttr_HREF  )
221#define attrIsHREFLANG(av)          AttrIsId( av, TidyAttr_HREFLANG  )
222#define attrIsHSPACE(av)            AttrIsId( av, TidyAttr_HSPACE  )
223#define attrIsHTTP_EQUIV(av)        AttrIsId( av, TidyAttr_HTTP_EQUIV  )
224#define attrIsID(av)                AttrIsId( av, TidyAttr_ID  )
225#define attrIsISMAP(av)             AttrIsId( av, TidyAttr_ISMAP  )
226#define attrIsLABEL(av)             AttrIsId( av, TidyAttr_LABEL  )
227#define attrIsLANG(av)              AttrIsId( av, TidyAttr_LANG  )
228#define attrIsLANGUAGE(av)          AttrIsId( av, TidyAttr_LANGUAGE  )
229#define attrIsLAST_MODIFIED(av)     AttrIsId( av, TidyAttr_LAST_MODIFIED  )
230#define attrIsLAST_VISIT(av)        AttrIsId( av, TidyAttr_LAST_VISIT  )
231#define attrIsLEFTMARGIN(av)        AttrIsId( av, TidyAttr_LEFTMARGIN  )
232#define attrIsLINK(av)              AttrIsId( av, TidyAttr_LINK  )
233#define attrIsLONGDESC(av)          AttrIsId( av, TidyAttr_LONGDESC  )
234#define attrIsLOWSRC(av)            AttrIsId( av, TidyAttr_LOWSRC  )
235#define attrIsMARGINHEIGHT(av)      AttrIsId( av, TidyAttr_MARGINHEIGHT  )
236#define attrIsMARGINWIDTH(av)       AttrIsId( av, TidyAttr_MARGINWIDTH  )
237#define attrIsMAXLENGTH(av)         AttrIsId( av, TidyAttr_MAXLENGTH  )
238#define attrIsMEDIA(av)             AttrIsId( av, TidyAttr_MEDIA  )
239#define attrIsMETHOD(av)            AttrIsId( av, TidyAttr_METHOD  )
240#define attrIsMULTIPLE(av)          AttrIsId( av, TidyAttr_MULTIPLE  )
241#define attrIsNAME(av)              AttrIsId( av, TidyAttr_NAME  )
242#define attrIsNOHREF(av)            AttrIsId( av, TidyAttr_NOHREF  )
243#define attrIsNORESIZE(av)          AttrIsId( av, TidyAttr_NORESIZE  )
244#define attrIsNOSHADE(av)           AttrIsId( av, TidyAttr_NOSHADE  )
245#define attrIsNOWRAP(av)            AttrIsId( av, TidyAttr_NOWRAP  )
246#define attrIsOBJECT(av)            AttrIsId( av, TidyAttr_OBJECT  )
247#define attrIsOnAFTERUPDATE(av)     AttrIsId( av, TidyAttr_OnAFTERUPDATE  )
248#define attrIsOnBEFOREUNLOAD(av)    AttrIsId( av, TidyAttr_OnBEFOREUNLOAD  )
249#define attrIsOnBEFOREUPDATE(av)    AttrIsId( av, TidyAttr_OnBEFOREUPDATE  )
250#define attrIsOnBLUR(av)            AttrIsId( av, TidyAttr_OnBLUR  )
251#define attrIsOnCHANGE(av)          AttrIsId( av, TidyAttr_OnCHANGE  )
252#define attrIsOnCLICK(av)           AttrIsId( av, TidyAttr_OnCLICK  )
253#define attrIsOnDATAAVAILABLE(av)   AttrIsId( av, TidyAttr_OnDATAAVAILABLE  )
254#define attrIsOnDATASETCHANGED(av)  AttrIsId( av, TidyAttr_OnDATASETCHANGED  )
255#define attrIsOnDATASETCOMPLETE(av) AttrIsId( av, TidyAttr_OnDATASETCOMPLETE  )
256#define attrIsOnDBLCLICK(av)        AttrIsId( av, TidyAttr_OnDBLCLICK  )
257#define attrIsOnERRORUPDATE(av)     AttrIsId( av, TidyAttr_OnERRORUPDATE  )
258#define attrIsOnFOCUS(av)           AttrIsId( av, TidyAttr_OnFOCUS  )
259#define attrIsOnKEYDOWN(av)         AttrIsId( av, TidyAttr_OnKEYDOWN  )
260#define attrIsOnKEYPRESS(av)        AttrIsId( av, TidyAttr_OnKEYPRESS  )
261#define attrIsOnKEYUP(av)           AttrIsId( av, TidyAttr_OnKEYUP  )
262#define attrIsOnLOAD(av)            AttrIsId( av, TidyAttr_OnLOAD  )
263#define attrIsOnMOUSEDOWN(av)       AttrIsId( av, TidyAttr_OnMOUSEDOWN  )
264#define attrIsOnMOUSEMOVE(av)       AttrIsId( av, TidyAttr_OnMOUSEMOVE  )
265#define attrIsOnMOUSEOUT(av)        AttrIsId( av, TidyAttr_OnMOUSEOUT  )
266#define attrIsOnMOUSEOVER(av)       AttrIsId( av, TidyAttr_OnMOUSEOVER  )
267#define attrIsOnMOUSEUP(av)         AttrIsId( av, TidyAttr_OnMOUSEUP  )
268#define attrIsOnRESET(av)           AttrIsId( av, TidyAttr_OnRESET  )
269#define attrIsOnROWENTER(av)        AttrIsId( av, TidyAttr_OnROWENTER  )
270#define attrIsOnROWEXIT(av)         AttrIsId( av, TidyAttr_OnROWEXIT  )
271#define attrIsOnSELECT(av)          AttrIsId( av, TidyAttr_OnSELECT  )
272#define attrIsOnSUBMIT(av)          AttrIsId( av, TidyAttr_OnSUBMIT  )
273#define attrIsOnUNLOAD(av)          AttrIsId( av, TidyAttr_OnUNLOAD  )
274#define attrIsPROFILE(av)           AttrIsId( av, TidyAttr_PROFILE  )
275#define attrIsPROMPT(av)            AttrIsId( av, TidyAttr_PROMPT  )
276#define attrIsRBSPAN(av)            AttrIsId( av, TidyAttr_RBSPAN  )
277#define attrIsREADONLY(av)          AttrIsId( av, TidyAttr_READONLY  )
278#define attrIsREL(av)               AttrIsId( av, TidyAttr_REL  )
279#define attrIsREV(av)               AttrIsId( av, TidyAttr_REV  )
280#define attrIsRIGHTMARGIN(av)       AttrIsId( av, TidyAttr_RIGHTMARGIN  )
281#define attrIsROWS(av)              AttrIsId( av, TidyAttr_ROWS  )
282#define attrIsROWSPAN(av)           AttrIsId( av, TidyAttr_ROWSPAN  )
283#define attrIsRULES(av)             AttrIsId( av, TidyAttr_RULES  )
284#define attrIsSCHEME(av)            AttrIsId( av, TidyAttr_SCHEME  )
285#define attrIsSCOPE(av)             AttrIsId( av, TidyAttr_SCOPE  )
286#define attrIsSCROLLING(av)         AttrIsId( av, TidyAttr_SCROLLING  )
287#define attrIsSELECTED(av)          AttrIsId( av, TidyAttr_SELECTED  )
288#define attrIsSHAPE(av)             AttrIsId( av, TidyAttr_SHAPE  )
289#define attrIsSHOWGRID(av)          AttrIsId( av, TidyAttr_SHOWGRID  )
290#define attrIsSHOWGRIDX(av)         AttrIsId( av, TidyAttr_SHOWGRIDX  )
291#define attrIsSHOWGRIDY(av)         AttrIsId( av, TidyAttr_SHOWGRIDY  )
292#define attrIsSIZE(av)              AttrIsId( av, TidyAttr_SIZE  )
293#define attrIsSPAN(av)              AttrIsId( av, TidyAttr_SPAN  )
294#define attrIsSRC(av)               AttrIsId( av, TidyAttr_SRC  )
295#define attrIsSTANDBY(av)           AttrIsId( av, TidyAttr_STANDBY  )
296#define attrIsSTART(av)             AttrIsId( av, TidyAttr_START  )
297#define attrIsSTYLE(av)             AttrIsId( av, TidyAttr_STYLE  )
298#define attrIsSUMMARY(av)           AttrIsId( av, TidyAttr_SUMMARY  )
299#define attrIsTABINDEX(av)          AttrIsId( av, TidyAttr_TABINDEX  )
300#define attrIsTARGET(av)            AttrIsId( av, TidyAttr_TARGET  )
301#define attrIsTEXT(av)              AttrIsId( av, TidyAttr_TEXT  )
302#define attrIsTITLE(av)             AttrIsId( av, TidyAttr_TITLE  )
303#define attrIsTOPMARGIN(av)         AttrIsId( av, TidyAttr_TOPMARGIN  )
304#define attrIsTYPE(av)              AttrIsId( av, TidyAttr_TYPE  )
305#define attrIsUSEMAP(av)            AttrIsId( av, TidyAttr_USEMAP  )
306#define attrIsVALIGN(av)            AttrIsId( av, TidyAttr_VALIGN  )
307#define attrIsVALUE(av)             AttrIsId( av, TidyAttr_VALUE  )
308#define attrIsVALUETYPE(av)         AttrIsId( av, TidyAttr_VALUETYPE  )
309#define attrIsVERSION(av)           AttrIsId( av, TidyAttr_VERSION  )
310#define attrIsVLINK(av)             AttrIsId( av, TidyAttr_VLINK  )
311#define attrIsVSPACE(av)            AttrIsId( av, TidyAttr_VSPACE  )
312#define attrIsWIDTH(av)             AttrIsId( av, TidyAttr_WIDTH  )
313#define attrIsWRAP(av)              AttrIsId( av, TidyAttr_WRAP  )
314#define attrIsXMLNS(av)             AttrIsId( av, TidyAttr_XMLNS  )
315#define attrIsXML_LANG(av)          AttrIsId( av, TidyAttr_XML_LANG  )
316#define attrIsXML_SPACE(av)         AttrIsId( av, TidyAttr_XML_SPACE  )
317
318
319/* Attribute Retrieval macros
320*/
321#define attrGetHREF( nod )        TY_(AttrGetById)( nod, TidyAttr_HREF  )
322#define attrGetSRC( nod )         TY_(AttrGetById)( nod, TidyAttr_SRC  )
323#define attrGetID( nod )          TY_(AttrGetById)( nod, TidyAttr_ID  )
324#define attrGetNAME( nod )        TY_(AttrGetById)( nod, TidyAttr_NAME  )
325#define attrGetSUMMARY( nod )     TY_(AttrGetById)( nod, TidyAttr_SUMMARY  )
326#define attrGetALT( nod )         TY_(AttrGetById)( nod, TidyAttr_ALT  )
327#define attrGetLONGDESC( nod )    TY_(AttrGetById)( nod, TidyAttr_LONGDESC  )
328#define attrGetUSEMAP( nod )      TY_(AttrGetById)( nod, TidyAttr_USEMAP  )
329#define attrGetISMAP( nod )       TY_(AttrGetById)( nod, TidyAttr_ISMAP  )
330#define attrGetLANGUAGE( nod )    TY_(AttrGetById)( nod, TidyAttr_LANGUAGE  )
331#define attrGetTYPE( nod )        TY_(AttrGetById)( nod, TidyAttr_TYPE  )
332#define attrGetVALUE( nod )       TY_(AttrGetById)( nod, TidyAttr_VALUE  )
333#define attrGetCONTENT( nod )     TY_(AttrGetById)( nod, TidyAttr_CONTENT  )
334#define attrGetTITLE( nod )       TY_(AttrGetById)( nod, TidyAttr_TITLE  )
335#define attrGetXMLNS( nod )       TY_(AttrGetById)( nod, TidyAttr_XMLNS  )
336#define attrGetDATAFLD( nod )     TY_(AttrGetById)( nod, TidyAttr_DATAFLD  )
337#define attrGetWIDTH( nod )       TY_(AttrGetById)( nod, TidyAttr_WIDTH  )
338#define attrGetHEIGHT( nod )      TY_(AttrGetById)( nod, TidyAttr_HEIGHT  )
339#define attrGetFOR( nod )         TY_(AttrGetById)( nod, TidyAttr_FOR  )
340#define attrGetSELECTED( nod )    TY_(AttrGetById)( nod, TidyAttr_SELECTED  )
341#define attrGetCHECKED( nod )     TY_(AttrGetById)( nod, TidyAttr_CHECKED  )
342#define attrGetLANG( nod )        TY_(AttrGetById)( nod, TidyAttr_LANG  )
343#define attrGetTARGET( nod )      TY_(AttrGetById)( nod, TidyAttr_TARGET  )
344#define attrGetHTTP_EQUIV( nod )  TY_(AttrGetById)( nod, TidyAttr_HTTP_EQUIV  )
345#define attrGetREL( nod )         TY_(AttrGetById)( nod, TidyAttr_REL  )
346
347#define attrGetOnMOUSEMOVE( nod ) TY_(AttrGetById)( nod, TidyAttr_OnMOUSEMOVE  )
348#define attrGetOnMOUSEDOWN( nod ) TY_(AttrGetById)( nod, TidyAttr_OnMOUSEDOWN  )
349#define attrGetOnMOUSEUP( nod )   TY_(AttrGetById)( nod, TidyAttr_OnMOUSEUP  )
350#define attrGetOnCLICK( nod )     TY_(AttrGetById)( nod, TidyAttr_OnCLICK  )
351#define attrGetOnMOUSEOVER( nod ) TY_(AttrGetById)( nod, TidyAttr_OnMOUSEOVER  )
352#define attrGetOnMOUSEOUT( nod )  TY_(AttrGetById)( nod, TidyAttr_OnMOUSEOUT  )
353#define attrGetOnKEYDOWN( nod )   TY_(AttrGetById)( nod, TidyAttr_OnKEYDOWN  )
354#define attrGetOnKEYUP( nod )     TY_(AttrGetById)( nod, TidyAttr_OnKEYUP  )
355#define attrGetOnKEYPRESS( nod )  TY_(AttrGetById)( nod, TidyAttr_OnKEYPRESS  )
356#define attrGetOnFOCUS( nod )     TY_(AttrGetById)( nod, TidyAttr_OnFOCUS  )
357#define attrGetOnBLUR( nod )      TY_(AttrGetById)( nod, TidyAttr_OnBLUR  )
358
359#define attrGetBGCOLOR( nod )     TY_(AttrGetById)( nod, TidyAttr_BGCOLOR  )
360
361#define attrGetLINK( nod )        TY_(AttrGetById)( nod, TidyAttr_LINK  )
362#define attrGetALINK( nod )       TY_(AttrGetById)( nod, TidyAttr_ALINK  )
363#define attrGetVLINK( nod )       TY_(AttrGetById)( nod, TidyAttr_VLINK  )
364
365#define attrGetTEXT( nod )        TY_(AttrGetById)( nod, TidyAttr_TEXT  )
366#define attrGetSTYLE( nod )       TY_(AttrGetById)( nod, TidyAttr_STYLE  )
367#define attrGetABBR( nod )        TY_(AttrGetById)( nod, TidyAttr_ABBR  )
368#define attrGetCOLSPAN( nod )     TY_(AttrGetById)( nod, TidyAttr_COLSPAN  )
369#define attrGetFONT( nod )        TY_(AttrGetById)( nod, TidyAttr_FONT  )
370#define attrGetBASEFONT( nod )    TY_(AttrGetById)( nod, TidyAttr_BASEFONT  )
371#define attrGetROWSPAN( nod )     TY_(AttrGetById)( nod, TidyAttr_ROWSPAN  )
372
373#endif /* __ATTRS_H__ */
374