HTML Tidy  5.4.0
The HTACG Tidy HTML Project
tags.h
Go to the documentation of this file.
1 #ifndef __TAGS_H__
2 #define __TAGS_H__
3 
4 /* tags.h -- recognize HTML tags
5 
6  (c) 1998-2006 (W3C) MIT, ERCIM, Keio University
7  See tidy.h for the copyright notice.
8 
9  The HTML tags are stored as 8 bit ASCII strings.
10  Use lookupw() to find a tag given a wide char string.
11 
12 */
13 
14 #include "forward.h"
15 #include "attrdict.h"
16 
17 typedef void (Parser)( TidyDocImpl* doc, Node *node, GetTokenMode mode );
18 typedef void (CheckAttribs)( TidyDocImpl* doc, Node *node );
19 
20 /*
21  Tag dictionary node
22 */
23 
24 /* types of tags that the user can define */
25 typedef enum
26 {
32 } UserTagType;
33 
34 struct _Dict
35 {
43  Dict* next;
44 };
45 
46 #if !defined(ELEMENT_HASH_LOOKUP)
47 #define ELEMENT_HASH_LOOKUP 1
48 #endif
49 
50 #if ELEMENT_HASH_LOOKUP
51 enum
52 {
54 };
55 
56 struct _DictHash
57 {
58  Dict const* tag;
59  struct _DictHash* next;
60 };
61 
62 typedef struct _DictHash DictHash;
63 #endif
64 
66 {
67  Dict* xml_tags; /* placeholder for all xml tags */
68  Dict* declared_tag_list; /* User declared tags */
69 #if ELEMENT_HASH_LOOKUP
71 #endif
72 };
73 
74 typedef struct _TidyTagImpl TidyTagImpl;
75 
76 /* interface for finding tag by name */
77 const Dict* TY_(LookupTagDef)( TidyTagId tid );
78 Bool TY_(FindTag)( TidyDocImpl* doc, Node *node );
79 Parser* TY_(FindParser)( TidyDocImpl* doc, Node *node );
80 void TY_(DefineTag)( TidyDocImpl* doc, UserTagType tagType, ctmbstr name );
81 void TY_(FreeDeclaredTags)( TidyDocImpl* doc, UserTagType tagType ); /* tagtype_null to free all */
82 
83 TidyIterator TY_(GetDeclaredTagList)( TidyDocImpl* doc );
84 ctmbstr TY_(GetNextDeclaredTag)( TidyDocImpl* doc, UserTagType tagType,
85  TidyIterator* iter );
86 
87 void TY_(InitTags)( TidyDocImpl* doc );
88 void TY_(FreeTags)( TidyDocImpl* doc );
89 void TY_(AdjustTags)( TidyDocImpl *doc ); /* if NOT HTML5 DOCTYPE, fall back to HTML4 legacy mode */
90 void TY_(ResetTags)( TidyDocImpl *doc ); /* set table to HTML5 mode */
91 Bool TY_(IsHTML5Mode)( TidyDocImpl *doc );
92 
93 /* Parser methods for tags */
94 
95 Parser TY_(ParseHTML);
96 Parser TY_(ParseHead);
97 Parser TY_(ParseTitle);
98 Parser TY_(ParseScript);
99 Parser TY_(ParseFrameSet);
100 Parser TY_(ParseNoFrames);
101 Parser TY_(ParseBody);
102 Parser TY_(ParsePre);
103 Parser TY_(ParseList);
104 Parser TY_(ParseDefList);
105 Parser TY_(ParseBlock);
106 Parser TY_(ParseInline);
107 Parser TY_(ParseEmpty);
108 Parser TY_(ParseTableTag);
109 Parser TY_(ParseColGroup);
110 Parser TY_(ParseRowGroup);
111 Parser TY_(ParseRow);
112 Parser TY_(ParseSelect);
113 Parser TY_(ParseOptGroup);
114 Parser TY_(ParseText);
115 Parser TY_(ParseDatalist);
116 Parser TY_(ParseNamespace);
117 
118 CheckAttribs TY_(CheckAttributes);
119 
120 /* 0 == TidyTag_UNKNOWN */
121 #define TagId(node) ((node) && (node)->tag ? (node)->tag->id : TidyTag_UNKNOWN)
122 #define TagIsId(node, tid) ((node) && (node)->tag && (node)->tag->id == tid)
123 
124 Bool TY_(nodeIsText)( Node* node );
125 Bool TY_(nodeIsElement)( Node* node );
126 
127 Bool TY_(nodeHasText)( TidyDocImpl* doc, Node* node );
128 
129 #if 0
130 /* Compare & result to operand. If equal, then all bits
131 ** requested are set.
132 */
133 Bool nodeMatchCM( Node* node, uint contentModel );
134 #endif
135 
136 /* True if any of the bits requested are set.
137 */
138 Bool TY_(nodeHasCM)( Node* node, uint contentModel );
139 
140 Bool TY_(nodeCMIsBlock)( Node* node );
141 Bool TY_(nodeCMIsInline)( Node* node );
142 Bool TY_(nodeCMIsEmpty)( Node* node );
143 
144 
145 Bool TY_(nodeIsHeader)( Node* node ); /* H1, H2, ..., H6 */
146 uint TY_(nodeHeaderLevel)( Node* node ); /* 1, 2, ..., 6 */
147 
148 #define nodeIsHTML( node ) TagIsId( node, TidyTag_HTML )
149 #define nodeIsHEAD( node ) TagIsId( node, TidyTag_HEAD )
150 #define nodeIsTITLE( node ) TagIsId( node, TidyTag_TITLE )
151 #define nodeIsBASE( node ) TagIsId( node, TidyTag_BASE )
152 #define nodeIsMETA( node ) TagIsId( node, TidyTag_META )
153 #define nodeIsBODY( node ) TagIsId( node, TidyTag_BODY )
154 #define nodeIsFRAMESET( node ) TagIsId( node, TidyTag_FRAMESET )
155 #define nodeIsFRAME( node ) TagIsId( node, TidyTag_FRAME )
156 #define nodeIsIFRAME( node ) TagIsId( node, TidyTag_IFRAME )
157 #define nodeIsNOFRAMES( node ) TagIsId( node, TidyTag_NOFRAMES )
158 #define nodeIsHR( node ) TagIsId( node, TidyTag_HR )
159 #define nodeIsH1( node ) TagIsId( node, TidyTag_H1 )
160 #define nodeIsH2( node ) TagIsId( node, TidyTag_H2 )
161 #define nodeIsPRE( node ) TagIsId( node, TidyTag_PRE )
162 #define nodeIsLISTING( node ) TagIsId( node, TidyTag_LISTING )
163 #define nodeIsP( node ) TagIsId( node, TidyTag_P )
164 #define nodeIsUL( node ) TagIsId( node, TidyTag_UL )
165 #define nodeIsOL( node ) TagIsId( node, TidyTag_OL )
166 #define nodeIsDL( node ) TagIsId( node, TidyTag_DL )
167 #define nodeIsDIR( node ) TagIsId( node, TidyTag_DIR )
168 #define nodeIsLI( node ) TagIsId( node, TidyTag_LI )
169 #define nodeIsDT( node ) TagIsId( node, TidyTag_DT )
170 #define nodeIsDD( node ) TagIsId( node, TidyTag_DD )
171 #define nodeIsTABLE( node ) TagIsId( node, TidyTag_TABLE )
172 #define nodeIsCAPTION( node ) TagIsId( node, TidyTag_CAPTION )
173 #define nodeIsTD( node ) TagIsId( node, TidyTag_TD )
174 #define nodeIsTH( node ) TagIsId( node, TidyTag_TH )
175 #define nodeIsTR( node ) TagIsId( node, TidyTag_TR )
176 #define nodeIsCOL( node ) TagIsId( node, TidyTag_COL )
177 #define nodeIsCOLGROUP( node ) TagIsId( node, TidyTag_COLGROUP )
178 #define nodeIsBR( node ) TagIsId( node, TidyTag_BR )
179 #define nodeIsA( node ) TagIsId( node, TidyTag_A )
180 #define nodeIsLINK( node ) TagIsId( node, TidyTag_LINK )
181 #define nodeIsB( node ) TagIsId( node, TidyTag_B )
182 #define nodeIsI( node ) TagIsId( node, TidyTag_I )
183 #define nodeIsSTRONG( node ) TagIsId( node, TidyTag_STRONG )
184 #define nodeIsEM( node ) TagIsId( node, TidyTag_EM )
185 #define nodeIsBIG( node ) TagIsId( node, TidyTag_BIG )
186 #define nodeIsSMALL( node ) TagIsId( node, TidyTag_SMALL )
187 #define nodeIsPARAM( node ) TagIsId( node, TidyTag_PARAM )
188 #define nodeIsOPTION( node ) TagIsId( node, TidyTag_OPTION )
189 #define nodeIsOPTGROUP( node ) TagIsId( node, TidyTag_OPTGROUP )
190 #define nodeIsIMG( node ) TagIsId( node, TidyTag_IMG )
191 #define nodeIsMAP( node ) TagIsId( node, TidyTag_MAP )
192 #define nodeIsAREA( node ) TagIsId( node, TidyTag_AREA )
193 #define nodeIsNOBR( node ) TagIsId( node, TidyTag_NOBR )
194 #define nodeIsWBR( node ) TagIsId( node, TidyTag_WBR )
195 #define nodeIsFONT( node ) TagIsId( node, TidyTag_FONT )
196 #define nodeIsLAYER( node ) TagIsId( node, TidyTag_LAYER )
197 #define nodeIsSPACER( node ) TagIsId( node, TidyTag_SPACER )
198 #define nodeIsCENTER( node ) TagIsId( node, TidyTag_CENTER )
199 #define nodeIsSTYLE( node ) TagIsId( node, TidyTag_STYLE )
200 #define nodeIsSCRIPT( node ) TagIsId( node, TidyTag_SCRIPT )
201 #define nodeIsNOSCRIPT( node ) TagIsId( node, TidyTag_NOSCRIPT )
202 #define nodeIsFORM( node ) TagIsId( node, TidyTag_FORM )
203 #define nodeIsTEXTAREA( node ) TagIsId( node, TidyTag_TEXTAREA )
204 #define nodeIsBLOCKQUOTE( node ) TagIsId( node, TidyTag_BLOCKQUOTE )
205 #define nodeIsAPPLET( node ) TagIsId( node, TidyTag_APPLET )
206 #define nodeIsOBJECT( node ) TagIsId( node, TidyTag_OBJECT )
207 #define nodeIsDIV( node ) TagIsId( node, TidyTag_DIV )
208 #define nodeIsSPAN( node ) TagIsId( node, TidyTag_SPAN )
209 #define nodeIsINPUT( node ) TagIsId( node, TidyTag_INPUT )
210 #define nodeIsQ( node ) TagIsId( node, TidyTag_Q )
211 #define nodeIsLABEL( node ) TagIsId( node, TidyTag_LABEL )
212 #define nodeIsH3( node ) TagIsId( node, TidyTag_H3 )
213 #define nodeIsH4( node ) TagIsId( node, TidyTag_H4 )
214 #define nodeIsH5( node ) TagIsId( node, TidyTag_H5 )
215 #define nodeIsH6( node ) TagIsId( node, TidyTag_H6 )
216 #define nodeIsADDRESS( node ) TagIsId( node, TidyTag_ADDRESS )
217 #define nodeIsXMP( node ) TagIsId( node, TidyTag_XMP )
218 #define nodeIsSELECT( node ) TagIsId( node, TidyTag_SELECT )
219 #define nodeIsBLINK( node ) TagIsId( node, TidyTag_BLINK )
220 #define nodeIsMARQUEE( node ) TagIsId( node, TidyTag_MARQUEE )
221 #define nodeIsEMBED( node ) TagIsId( node, TidyTag_EMBED )
222 #define nodeIsBASEFONT( node ) TagIsId( node, TidyTag_BASEFONT )
223 #define nodeIsISINDEX( node ) TagIsId( node, TidyTag_ISINDEX )
224 #define nodeIsS( node ) TagIsId( node, TidyTag_S )
225 #define nodeIsSTRIKE( node ) TagIsId( node, TidyTag_STRIKE )
226 #define nodeIsSUB( node ) TagIsId( node, TidyTag_SUB )
227 #define nodeIsSUP( node ) TagIsId( node, TidyTag_SUP )
228 #define nodeIsU( node ) TagIsId( node, TidyTag_U )
229 #define nodeIsMENU( node ) TagIsId( node, TidyTag_MENU )
230 #define nodeIsMAIN( node ) TagIsId( node, TidyTag_MAIN )
231 #define nodeIsBUTTON( node ) TagIsId( node, TidyTag_BUTTON )
232 #define nodeIsCANVAS( node ) TagIsId( node, TidyTag_CANVAS )
233 #define nodeIsPROGRESS( node ) TagIsId( node, TidyTag_PROGRESS )
234 
235 #define nodeIsINS( node ) TagIsId( node, TidyTag_INS )
236 #define nodeIsDEL( node ) TagIsId( node, TidyTag_DEL )
237 
238 /* HTML5 */
239 #define nodeIsDATALIST( node ) TagIsId( node, TidyTag_DATALIST )
240 #define nodeIsMATHML( node ) TagIsId( node, TidyTag_MATHML ) /* #130 MathML attr and entity fix! */
241 
242 /* NOT in HTML 5 */
243 #define nodeIsACRONYM( node ) TagIsId( node, TidyTag_ACRONYM )
244 #define nodesIsFRAME( node ) TagIsId( node, TidyTag_FRAME )
245 #define nodeIsTT( node ) TagIsId( node, TidyTag_TT )
246 
247 #endif /* __TAGS_H__ */
Definition: tags.h:30
Definition: tags.h:28
Definition: tags.h:27
Dict const * tag
Definition: tags.h:58
Parser * parser
Definition: tags.h:41
TidyTagId
Known HTML element types.
Definition: tidyenum.h:311
Definition: attrdict.h:13
const tmbchar * ctmbstr
Definition: tidyplatform.h:556
tmbstr name
Definition: tags.h:37
void() CheckAttribs(TidyDocImpl *doc, Node *node)
Definition: tags.h:18
CheckAttribs * chkattrs
Definition: tags.h:42
Bool
Definition: tidyplatform.h:593
Definition: tags.h:53
Dict * next
Definition: tags.h:43
uint model
Definition: tags.h:40
Dict * declared_tag_list
Definition: tags.h:68
Definition: tags.h:31
Definition: tags.h:34
tmbchar * tmbstr
Definition: tidyplatform.h:555
Definition: tags.h:56
DictHash * hashtab[ELEMENT_HASH_SIZE]
Definition: tags.h:70
uint versions
Definition: tags.h:38
unsigned int uint
Definition: tidyplatform.h:525
void() Parser(TidyDocImpl *doc, Node *node, GetTokenMode mode)
Definition: tags.h:17
UserTagType
Definition: tags.h:25
AttrVersion const * attrvers
Definition: tags.h:39
Definition: tags.h:29
Definition: tags.h:65
Dict * xml_tags
Definition: tags.h:67
#define TY_(str)
Definition: forward.h:23
TidyTagId id
Definition: tags.h:36
GetTokenMode
Definition: lexer.h:525
struct _DictHash * next
Definition: tags.h:59