OSDN Git Service

Initial commit
[wordring-tm/wordring-tm.git] / third_party / tidy-html5-master / src / tags.h
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 {
27     tagtype_null = 0,
28     tagtype_empty = 1,
29     tagtype_inline = 2,
30     tagtype_block = 4,
31     tagtype_pre = 8
32 } UserTagType;
33
34 struct _Dict
35 {
36     TidyTagId       id;
37     tmbstr          name;
38     uint            versions;
39     AttrVersion const *    attrvers;
40     uint            model;
41     Parser*         parser;
42     CheckAttribs*   chkattrs;
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 {
53     ELEMENT_HASH_SIZE=178u
54 };
55
56 struct _DictHash
57 {
58     Dict const*         tag;
59     struct _DictHash*   next;
60 };
61
62 typedef struct _DictHash DictHash;
63 #endif
64
65 struct _TidyTagImpl
66 {
67     Dict* xml_tags;                /* placeholder for all xml tags */
68     Dict* declared_tag_list;       /* User declared tags */
69 #if ELEMENT_HASH_LOOKUP
70     DictHash* hashtab[ELEMENT_HASH_SIZE];
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
91
92 /* Parser methods for tags */
93
94 Parser TY_(ParseHTML);
95 Parser TY_(ParseHead);
96 Parser TY_(ParseTitle);
97 Parser TY_(ParseScript);
98 Parser TY_(ParseFrameSet);
99 Parser TY_(ParseNoFrames);
100 Parser TY_(ParseBody);
101 Parser TY_(ParsePre);
102 Parser TY_(ParseList);
103 Parser TY_(ParseDefList);
104 Parser TY_(ParseBlock);
105 Parser TY_(ParseInline);
106 Parser TY_(ParseEmpty);
107 Parser TY_(ParseTableTag);
108 Parser TY_(ParseColGroup);
109 Parser TY_(ParseRowGroup);
110 Parser TY_(ParseRow);
111 Parser TY_(ParseSelect);
112 Parser TY_(ParseOptGroup);
113 Parser TY_(ParseText);
114 Parser TY_(ParseDatalist);
115 Parser TY_(ParseNamespace);
116
117 CheckAttribs TY_(CheckAttributes);
118
119 /* 0 == TidyTag_UNKNOWN */
120 #define TagId(node)        ((node) && (node)->tag ? (node)->tag->id : TidyTag_UNKNOWN)
121 #define TagIsId(node, tid) ((node) && (node)->tag && (node)->tag->id == tid)
122
123 Bool TY_(nodeIsText)( Node* node );
124 Bool TY_(nodeIsElement)( Node* node );
125
126 Bool TY_(nodeHasText)( TidyDocImpl* doc, Node* node );
127
128 #if 0
129 /* Compare & result to operand.  If equal, then all bits
130 ** requested are set.
131 */
132 Bool nodeMatchCM( Node* node, uint contentModel );
133 #endif
134
135 /* True if any of the bits requested are set.
136 */
137 Bool TY_(nodeHasCM)( Node* node, uint contentModel );
138
139 Bool TY_(nodeCMIsBlock)( Node* node );
140 Bool TY_(nodeCMIsInline)( Node* node );
141 Bool TY_(nodeCMIsEmpty)( Node* node );
142
143
144 Bool TY_(nodeIsHeader)( Node* node );     /* H1, H2, ..., H6 */
145 uint TY_(nodeHeaderLevel)( Node* node );  /* 1, 2, ..., 6 */
146
147 #define nodeIsHTML( node )       TagIsId( node, TidyTag_HTML )
148 #define nodeIsHEAD( node )       TagIsId( node, TidyTag_HEAD )
149 #define nodeIsTITLE( node )      TagIsId( node, TidyTag_TITLE )
150 #define nodeIsBASE( node )       TagIsId( node, TidyTag_BASE )
151 #define nodeIsMETA( node )       TagIsId( node, TidyTag_META )
152 #define nodeIsBODY( node )       TagIsId( node, TidyTag_BODY )
153 #define nodeIsFRAMESET( node )   TagIsId( node, TidyTag_FRAMESET )
154 #define nodeIsFRAME( node )      TagIsId( node, TidyTag_FRAME )
155 #define nodeIsIFRAME( node )     TagIsId( node, TidyTag_IFRAME )
156 #define nodeIsNOFRAMES( node )   TagIsId( node, TidyTag_NOFRAMES )
157 #define nodeIsHR( node )         TagIsId( node, TidyTag_HR )
158 #define nodeIsH1( node )         TagIsId( node, TidyTag_H1 )
159 #define nodeIsH2( node )         TagIsId( node, TidyTag_H2 )
160 #define nodeIsPRE( node )        TagIsId( node, TidyTag_PRE )
161 #define nodeIsLISTING( node )    TagIsId( node, TidyTag_LISTING )
162 #define nodeIsP( node )          TagIsId( node, TidyTag_P )
163 #define nodeIsUL( node )         TagIsId( node, TidyTag_UL )
164 #define nodeIsOL( node )         TagIsId( node, TidyTag_OL )
165 #define nodeIsDL( node )         TagIsId( node, TidyTag_DL )
166 #define nodeIsDIR( node )        TagIsId( node, TidyTag_DIR )
167 #define nodeIsLI( node )         TagIsId( node, TidyTag_LI )
168 #define nodeIsDT( node )         TagIsId( node, TidyTag_DT )
169 #define nodeIsDD( node )         TagIsId( node, TidyTag_DD )
170 #define nodeIsTABLE( node )      TagIsId( node, TidyTag_TABLE )
171 #define nodeIsCAPTION( node )    TagIsId( node, TidyTag_CAPTION )
172 #define nodeIsTD( node )         TagIsId( node, TidyTag_TD )
173 #define nodeIsTH( node )         TagIsId( node, TidyTag_TH )
174 #define nodeIsTR( node )         TagIsId( node, TidyTag_TR )
175 #define nodeIsCOL( node )        TagIsId( node, TidyTag_COL )
176 #define nodeIsCOLGROUP( node )   TagIsId( node, TidyTag_COLGROUP )
177 #define nodeIsBR( node )         TagIsId( node, TidyTag_BR )
178 #define nodeIsA( node )          TagIsId( node, TidyTag_A )
179 #define nodeIsLINK( node )       TagIsId( node, TidyTag_LINK )
180 #define nodeIsB( node )          TagIsId( node, TidyTag_B )
181 #define nodeIsI( node )          TagIsId( node, TidyTag_I )
182 #define nodeIsSTRONG( node )     TagIsId( node, TidyTag_STRONG )
183 #define nodeIsEM( node )         TagIsId( node, TidyTag_EM )
184 #define nodeIsBIG( node )        TagIsId( node, TidyTag_BIG )
185 #define nodeIsSMALL( node )      TagIsId( node, TidyTag_SMALL )
186 #define nodeIsPARAM( node )      TagIsId( node, TidyTag_PARAM )
187 #define nodeIsOPTION( node )     TagIsId( node, TidyTag_OPTION )
188 #define nodeIsOPTGROUP( node )   TagIsId( node, TidyTag_OPTGROUP )
189 #define nodeIsIMG( node )        TagIsId( node, TidyTag_IMG )
190 #define nodeIsMAP( node )        TagIsId( node, TidyTag_MAP )
191 #define nodeIsAREA( node )       TagIsId( node, TidyTag_AREA )
192 #define nodeIsNOBR( node )       TagIsId( node, TidyTag_NOBR )
193 #define nodeIsWBR( node )        TagIsId( node, TidyTag_WBR )
194 #define nodeIsFONT( node )       TagIsId( node, TidyTag_FONT )
195 #define nodeIsLAYER( node )      TagIsId( node, TidyTag_LAYER )
196 #define nodeIsSPACER( node )     TagIsId( node, TidyTag_SPACER )
197 #define nodeIsCENTER( node )     TagIsId( node, TidyTag_CENTER )
198 #define nodeIsSTYLE( node )      TagIsId( node, TidyTag_STYLE )
199 #define nodeIsSCRIPT( node )     TagIsId( node, TidyTag_SCRIPT )
200 #define nodeIsNOSCRIPT( node )   TagIsId( node, TidyTag_NOSCRIPT )
201 #define nodeIsFORM( node )       TagIsId( node, TidyTag_FORM )
202 #define nodeIsTEXTAREA( node )   TagIsId( node, TidyTag_TEXTAREA )
203 #define nodeIsBLOCKQUOTE( node ) TagIsId( node, TidyTag_BLOCKQUOTE )
204 #define nodeIsAPPLET( node )     TagIsId( node, TidyTag_APPLET )
205 #define nodeIsOBJECT( node )     TagIsId( node, TidyTag_OBJECT )
206 #define nodeIsDIV( node )        TagIsId( node, TidyTag_DIV )
207 #define nodeIsSPAN( node )       TagIsId( node, TidyTag_SPAN )
208 #define nodeIsINPUT( node )      TagIsId( node, TidyTag_INPUT )
209 #define nodeIsQ( node )          TagIsId( node, TidyTag_Q )
210 #define nodeIsLABEL( node )      TagIsId( node, TidyTag_LABEL )
211 #define nodeIsH3( node )         TagIsId( node, TidyTag_H3 )
212 #define nodeIsH4( node )         TagIsId( node, TidyTag_H4 )
213 #define nodeIsH5( node )         TagIsId( node, TidyTag_H5 )
214 #define nodeIsH6( node )         TagIsId( node, TidyTag_H6 )
215 #define nodeIsADDRESS( node )    TagIsId( node, TidyTag_ADDRESS )
216 #define nodeIsXMP( node )        TagIsId( node, TidyTag_XMP )
217 #define nodeIsSELECT( node )     TagIsId( node, TidyTag_SELECT )
218 #define nodeIsBLINK( node )      TagIsId( node, TidyTag_BLINK )
219 #define nodeIsMARQUEE( node )    TagIsId( node, TidyTag_MARQUEE )
220 #define nodeIsEMBED( node )      TagIsId( node, TidyTag_EMBED )
221 #define nodeIsBASEFONT( node )   TagIsId( node, TidyTag_BASEFONT )
222 #define nodeIsISINDEX( node )    TagIsId( node, TidyTag_ISINDEX )
223 #define nodeIsS( node )          TagIsId( node, TidyTag_S )
224 #define nodeIsSTRIKE( node )     TagIsId( node, TidyTag_STRIKE )
225 #define nodeIsSUB( node )        TagIsId( node, TidyTag_SUB )
226 #define nodeIsSUP( node )        TagIsId( node, TidyTag_SUP )
227 #define nodeIsU( node )          TagIsId( node, TidyTag_U )
228 #define nodeIsMENU( node )       TagIsId( node, TidyTag_MENU )
229 #define nodeIsMAIN( node )       TagIsId( node, TidyTag_MAIN )
230 #define nodeIsBUTTON( node )     TagIsId( node, TidyTag_BUTTON )
231 #define nodeIsCANVAS( node )     TagIsId( node, TidyTag_CANVAS )
232 #define nodeIsPROGRESS( node )   TagIsId( node, TidyTag_PROGRESS )
233
234 #define nodeIsINS( node )        TagIsId( node, TidyTag_INS )
235 #define nodeIsDEL( node )        TagIsId( node, TidyTag_DEL )
236
237 /* HTML5 */
238 #define nodeIsDATALIST( node )   TagIsId( node, TidyTag_DATALIST )
239 #define nodeIsMATHML( node )     TagIsId( node, TidyTag_MATHML ) /* #130 MathML attr and entity fix! */
240
241 /* NOT in HTML 5 */
242 #define nodeIsACRONYM( node )    TagIsId( node, TidyTag_ACRONYM )
243 #define nodesIsFRAME( node )     TagIsId( node, TidyTag_FRAME )
244 #define nodeIsTT( node )         TagIsId( node, TidyTag_TT )
245
246 #endif /* __TAGS_H__ */