xref: /freebsd-src/contrib/expat/lib/xmlrole.c (revision 5bb6a25f8f50862853de4bdb01ecb4152f10d0e7)
1*5bb6a25fSPoul-Henning Kamp /* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
2*5bb6a25fSPoul-Henning Kamp    See the file COPYING for copying permission.
3*5bb6a25fSPoul-Henning Kamp */
4*5bb6a25fSPoul-Henning Kamp 
5*5bb6a25fSPoul-Henning Kamp #ifdef COMPILED_FROM_DSP
6*5bb6a25fSPoul-Henning Kamp #include "winconfig.h"
7*5bb6a25fSPoul-Henning Kamp #elif defined(MACOS_CLASSIC)
8*5bb6a25fSPoul-Henning Kamp #include "macconfig.h"
9*5bb6a25fSPoul-Henning Kamp #else
10*5bb6a25fSPoul-Henning Kamp #include <expat_config.h>
11*5bb6a25fSPoul-Henning Kamp #endif /* ndef COMPILED_FROM_DSP */
12*5bb6a25fSPoul-Henning Kamp 
13*5bb6a25fSPoul-Henning Kamp #include "internal.h"
14*5bb6a25fSPoul-Henning Kamp #include "xmlrole.h"
15*5bb6a25fSPoul-Henning Kamp #include "ascii.h"
16*5bb6a25fSPoul-Henning Kamp 
17*5bb6a25fSPoul-Henning Kamp /* Doesn't check:
18*5bb6a25fSPoul-Henning Kamp 
19*5bb6a25fSPoul-Henning Kamp  that ,| are not mixed in a model group
20*5bb6a25fSPoul-Henning Kamp  content of literals
21*5bb6a25fSPoul-Henning Kamp 
22*5bb6a25fSPoul-Henning Kamp */
23*5bb6a25fSPoul-Henning Kamp 
24*5bb6a25fSPoul-Henning Kamp static const char KW_ANY[] = {
25*5bb6a25fSPoul-Henning Kamp     ASCII_A, ASCII_N, ASCII_Y, '\0' };
26*5bb6a25fSPoul-Henning Kamp static const char KW_ATTLIST[] = {
27*5bb6a25fSPoul-Henning Kamp     ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0' };
28*5bb6a25fSPoul-Henning Kamp static const char KW_CDATA[] = {
29*5bb6a25fSPoul-Henning Kamp     ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
30*5bb6a25fSPoul-Henning Kamp static const char KW_DOCTYPE[] = {
31*5bb6a25fSPoul-Henning Kamp     ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0' };
32*5bb6a25fSPoul-Henning Kamp static const char KW_ELEMENT[] = {
33*5bb6a25fSPoul-Henning Kamp     ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0' };
34*5bb6a25fSPoul-Henning Kamp static const char KW_EMPTY[] = {
35*5bb6a25fSPoul-Henning Kamp     ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0' };
36*5bb6a25fSPoul-Henning Kamp static const char KW_ENTITIES[] = {
37*5bb6a25fSPoul-Henning Kamp     ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S,
38*5bb6a25fSPoul-Henning Kamp     '\0' };
39*5bb6a25fSPoul-Henning Kamp static const char KW_ENTITY[] = {
40*5bb6a25fSPoul-Henning Kamp     ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' };
41*5bb6a25fSPoul-Henning Kamp static const char KW_FIXED[] = {
42*5bb6a25fSPoul-Henning Kamp     ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0' };
43*5bb6a25fSPoul-Henning Kamp static const char KW_ID[] = {
44*5bb6a25fSPoul-Henning Kamp     ASCII_I, ASCII_D, '\0' };
45*5bb6a25fSPoul-Henning Kamp static const char KW_IDREF[] = {
46*5bb6a25fSPoul-Henning Kamp     ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' };
47*5bb6a25fSPoul-Henning Kamp static const char KW_IDREFS[] = {
48*5bb6a25fSPoul-Henning Kamp     ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' };
49*5bb6a25fSPoul-Henning Kamp static const char KW_IGNORE[] = {
50*5bb6a25fSPoul-Henning Kamp     ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0' };
51*5bb6a25fSPoul-Henning Kamp static const char KW_IMPLIED[] = {
52*5bb6a25fSPoul-Henning Kamp     ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0' };
53*5bb6a25fSPoul-Henning Kamp static const char KW_INCLUDE[] = {
54*5bb6a25fSPoul-Henning Kamp     ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0' };
55*5bb6a25fSPoul-Henning Kamp static const char KW_NDATA[] = {
56*5bb6a25fSPoul-Henning Kamp     ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
57*5bb6a25fSPoul-Henning Kamp static const char KW_NMTOKEN[] = {
58*5bb6a25fSPoul-Henning Kamp     ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' };
59*5bb6a25fSPoul-Henning Kamp static const char KW_NMTOKENS[] = {
60*5bb6a25fSPoul-Henning Kamp     ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S,
61*5bb6a25fSPoul-Henning Kamp     '\0' };
62*5bb6a25fSPoul-Henning Kamp static const char KW_NOTATION[] =
63*5bb6a25fSPoul-Henning Kamp     { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N,
64*5bb6a25fSPoul-Henning Kamp       '\0' };
65*5bb6a25fSPoul-Henning Kamp static const char KW_PCDATA[] = {
66*5bb6a25fSPoul-Henning Kamp     ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
67*5bb6a25fSPoul-Henning Kamp static const char KW_PUBLIC[] = {
68*5bb6a25fSPoul-Henning Kamp     ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0' };
69*5bb6a25fSPoul-Henning Kamp static const char KW_REQUIRED[] = {
70*5bb6a25fSPoul-Henning Kamp     ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, ASCII_R, ASCII_E, ASCII_D,
71*5bb6a25fSPoul-Henning Kamp     '\0' };
72*5bb6a25fSPoul-Henning Kamp static const char KW_SYSTEM[] = {
73*5bb6a25fSPoul-Henning Kamp     ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0' };
74*5bb6a25fSPoul-Henning Kamp 
75*5bb6a25fSPoul-Henning Kamp #ifndef MIN_BYTES_PER_CHAR
76*5bb6a25fSPoul-Henning Kamp #define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar)
77*5bb6a25fSPoul-Henning Kamp #endif
78*5bb6a25fSPoul-Henning Kamp 
79*5bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
80*5bb6a25fSPoul-Henning Kamp #define setTopLevel(state) \
81*5bb6a25fSPoul-Henning Kamp   ((state)->handler = ((state)->documentEntity \
82*5bb6a25fSPoul-Henning Kamp                        ? internalSubset \
83*5bb6a25fSPoul-Henning Kamp                        : externalSubset1))
84*5bb6a25fSPoul-Henning Kamp #else /* not XML_DTD */
85*5bb6a25fSPoul-Henning Kamp #define setTopLevel(state) ((state)->handler = internalSubset)
86*5bb6a25fSPoul-Henning Kamp #endif /* not XML_DTD */
87*5bb6a25fSPoul-Henning Kamp 
88*5bb6a25fSPoul-Henning Kamp typedef int FASTCALL PROLOG_HANDLER(PROLOG_STATE *state,
89*5bb6a25fSPoul-Henning Kamp                                     int tok,
90*5bb6a25fSPoul-Henning Kamp                                     const char *ptr,
91*5bb6a25fSPoul-Henning Kamp                                     const char *end,
92*5bb6a25fSPoul-Henning Kamp                                     const ENCODING *enc);
93*5bb6a25fSPoul-Henning Kamp 
94*5bb6a25fSPoul-Henning Kamp static PROLOG_HANDLER
95*5bb6a25fSPoul-Henning Kamp   prolog0, prolog1, prolog2,
96*5bb6a25fSPoul-Henning Kamp   doctype0, doctype1, doctype2, doctype3, doctype4, doctype5,
97*5bb6a25fSPoul-Henning Kamp   internalSubset,
98*5bb6a25fSPoul-Henning Kamp   entity0, entity1, entity2, entity3, entity4, entity5, entity6,
99*5bb6a25fSPoul-Henning Kamp   entity7, entity8, entity9, entity10,
100*5bb6a25fSPoul-Henning Kamp   notation0, notation1, notation2, notation3, notation4,
101*5bb6a25fSPoul-Henning Kamp   attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6,
102*5bb6a25fSPoul-Henning Kamp   attlist7, attlist8, attlist9,
103*5bb6a25fSPoul-Henning Kamp   element0, element1, element2, element3, element4, element5, element6,
104*5bb6a25fSPoul-Henning Kamp   element7,
105*5bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
106*5bb6a25fSPoul-Henning Kamp   externalSubset0, externalSubset1,
107*5bb6a25fSPoul-Henning Kamp   condSect0, condSect1, condSect2,
108*5bb6a25fSPoul-Henning Kamp #endif /* XML_DTD */
109*5bb6a25fSPoul-Henning Kamp   declClose,
110*5bb6a25fSPoul-Henning Kamp   error;
111*5bb6a25fSPoul-Henning Kamp 
112*5bb6a25fSPoul-Henning Kamp static int FASTCALL common(PROLOG_STATE *state, int tok);
113*5bb6a25fSPoul-Henning Kamp 
114*5bb6a25fSPoul-Henning Kamp static int FASTCALL
115*5bb6a25fSPoul-Henning Kamp prolog0(PROLOG_STATE *state,
116*5bb6a25fSPoul-Henning Kamp         int tok,
117*5bb6a25fSPoul-Henning Kamp         const char *ptr,
118*5bb6a25fSPoul-Henning Kamp         const char *end,
119*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
120*5bb6a25fSPoul-Henning Kamp {
121*5bb6a25fSPoul-Henning Kamp   switch (tok) {
122*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
123*5bb6a25fSPoul-Henning Kamp     state->handler = prolog1;
124*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
125*5bb6a25fSPoul-Henning Kamp   case XML_TOK_XML_DECL:
126*5bb6a25fSPoul-Henning Kamp     state->handler = prolog1;
127*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_XML_DECL;
128*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PI:
129*5bb6a25fSPoul-Henning Kamp     state->handler = prolog1;
130*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_PI;
131*5bb6a25fSPoul-Henning Kamp   case XML_TOK_COMMENT:
132*5bb6a25fSPoul-Henning Kamp     state->handler = prolog1;
133*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_COMMENT;
134*5bb6a25fSPoul-Henning Kamp   case XML_TOK_BOM:
135*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
136*5bb6a25fSPoul-Henning Kamp   case XML_TOK_DECL_OPEN:
137*5bb6a25fSPoul-Henning Kamp     if (!XmlNameMatchesAscii(enc,
138*5bb6a25fSPoul-Henning Kamp                              ptr + 2 * MIN_BYTES_PER_CHAR(enc),
139*5bb6a25fSPoul-Henning Kamp                              end,
140*5bb6a25fSPoul-Henning Kamp                              KW_DOCTYPE))
141*5bb6a25fSPoul-Henning Kamp       break;
142*5bb6a25fSPoul-Henning Kamp     state->handler = doctype0;
143*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_NONE;
144*5bb6a25fSPoul-Henning Kamp   case XML_TOK_INSTANCE_START:
145*5bb6a25fSPoul-Henning Kamp     state->handler = error;
146*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_INSTANCE_START;
147*5bb6a25fSPoul-Henning Kamp   }
148*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
149*5bb6a25fSPoul-Henning Kamp }
150*5bb6a25fSPoul-Henning Kamp 
151*5bb6a25fSPoul-Henning Kamp static int FASTCALL
152*5bb6a25fSPoul-Henning Kamp prolog1(PROLOG_STATE *state,
153*5bb6a25fSPoul-Henning Kamp         int tok,
154*5bb6a25fSPoul-Henning Kamp         const char *ptr,
155*5bb6a25fSPoul-Henning Kamp         const char *end,
156*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
157*5bb6a25fSPoul-Henning Kamp {
158*5bb6a25fSPoul-Henning Kamp   switch (tok) {
159*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
160*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
161*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PI:
162*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_PI;
163*5bb6a25fSPoul-Henning Kamp   case XML_TOK_COMMENT:
164*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_COMMENT;
165*5bb6a25fSPoul-Henning Kamp   case XML_TOK_BOM:
166*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
167*5bb6a25fSPoul-Henning Kamp   case XML_TOK_DECL_OPEN:
168*5bb6a25fSPoul-Henning Kamp     if (!XmlNameMatchesAscii(enc,
169*5bb6a25fSPoul-Henning Kamp                              ptr + 2 * MIN_BYTES_PER_CHAR(enc),
170*5bb6a25fSPoul-Henning Kamp                              end,
171*5bb6a25fSPoul-Henning Kamp                              KW_DOCTYPE))
172*5bb6a25fSPoul-Henning Kamp       break;
173*5bb6a25fSPoul-Henning Kamp     state->handler = doctype0;
174*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_NONE;
175*5bb6a25fSPoul-Henning Kamp   case XML_TOK_INSTANCE_START:
176*5bb6a25fSPoul-Henning Kamp     state->handler = error;
177*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_INSTANCE_START;
178*5bb6a25fSPoul-Henning Kamp   }
179*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
180*5bb6a25fSPoul-Henning Kamp }
181*5bb6a25fSPoul-Henning Kamp 
182*5bb6a25fSPoul-Henning Kamp static int FASTCALL
183*5bb6a25fSPoul-Henning Kamp prolog2(PROLOG_STATE *state,
184*5bb6a25fSPoul-Henning Kamp         int tok,
185*5bb6a25fSPoul-Henning Kamp         const char *ptr,
186*5bb6a25fSPoul-Henning Kamp         const char *end,
187*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
188*5bb6a25fSPoul-Henning Kamp {
189*5bb6a25fSPoul-Henning Kamp   switch (tok) {
190*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
191*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
192*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PI:
193*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_PI;
194*5bb6a25fSPoul-Henning Kamp   case XML_TOK_COMMENT:
195*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_COMMENT;
196*5bb6a25fSPoul-Henning Kamp   case XML_TOK_INSTANCE_START:
197*5bb6a25fSPoul-Henning Kamp     state->handler = error;
198*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_INSTANCE_START;
199*5bb6a25fSPoul-Henning Kamp   }
200*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
201*5bb6a25fSPoul-Henning Kamp }
202*5bb6a25fSPoul-Henning Kamp 
203*5bb6a25fSPoul-Henning Kamp static int FASTCALL
204*5bb6a25fSPoul-Henning Kamp doctype0(PROLOG_STATE *state,
205*5bb6a25fSPoul-Henning Kamp          int tok,
206*5bb6a25fSPoul-Henning Kamp          const char *ptr,
207*5bb6a25fSPoul-Henning Kamp          const char *end,
208*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
209*5bb6a25fSPoul-Henning Kamp {
210*5bb6a25fSPoul-Henning Kamp   switch (tok) {
211*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
212*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_NONE;
213*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
214*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PREFIXED_NAME:
215*5bb6a25fSPoul-Henning Kamp     state->handler = doctype1;
216*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_NAME;
217*5bb6a25fSPoul-Henning Kamp   }
218*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
219*5bb6a25fSPoul-Henning Kamp }
220*5bb6a25fSPoul-Henning Kamp 
221*5bb6a25fSPoul-Henning Kamp static int FASTCALL
222*5bb6a25fSPoul-Henning Kamp doctype1(PROLOG_STATE *state,
223*5bb6a25fSPoul-Henning Kamp          int tok,
224*5bb6a25fSPoul-Henning Kamp          const char *ptr,
225*5bb6a25fSPoul-Henning Kamp          const char *end,
226*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
227*5bb6a25fSPoul-Henning Kamp {
228*5bb6a25fSPoul-Henning Kamp   switch (tok) {
229*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
230*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_NONE;
231*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OPEN_BRACKET:
232*5bb6a25fSPoul-Henning Kamp     state->handler = internalSubset;
233*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
234*5bb6a25fSPoul-Henning Kamp   case XML_TOK_DECL_CLOSE:
235*5bb6a25fSPoul-Henning Kamp     state->handler = prolog2;
236*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_CLOSE;
237*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
238*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
239*5bb6a25fSPoul-Henning Kamp       state->handler = doctype3;
240*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_DOCTYPE_NONE;
241*5bb6a25fSPoul-Henning Kamp     }
242*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
243*5bb6a25fSPoul-Henning Kamp       state->handler = doctype2;
244*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_DOCTYPE_NONE;
245*5bb6a25fSPoul-Henning Kamp     }
246*5bb6a25fSPoul-Henning Kamp     break;
247*5bb6a25fSPoul-Henning Kamp   }
248*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
249*5bb6a25fSPoul-Henning Kamp }
250*5bb6a25fSPoul-Henning Kamp 
251*5bb6a25fSPoul-Henning Kamp static int FASTCALL
252*5bb6a25fSPoul-Henning Kamp doctype2(PROLOG_STATE *state,
253*5bb6a25fSPoul-Henning Kamp          int tok,
254*5bb6a25fSPoul-Henning Kamp          const char *ptr,
255*5bb6a25fSPoul-Henning Kamp          const char *end,
256*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
257*5bb6a25fSPoul-Henning Kamp {
258*5bb6a25fSPoul-Henning Kamp   switch (tok) {
259*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
260*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_NONE;
261*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
262*5bb6a25fSPoul-Henning Kamp     state->handler = doctype3;
263*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_PUBLIC_ID;
264*5bb6a25fSPoul-Henning Kamp   }
265*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
266*5bb6a25fSPoul-Henning Kamp }
267*5bb6a25fSPoul-Henning Kamp 
268*5bb6a25fSPoul-Henning Kamp static int FASTCALL
269*5bb6a25fSPoul-Henning Kamp doctype3(PROLOG_STATE *state,
270*5bb6a25fSPoul-Henning Kamp          int tok,
271*5bb6a25fSPoul-Henning Kamp          const char *ptr,
272*5bb6a25fSPoul-Henning Kamp          const char *end,
273*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
274*5bb6a25fSPoul-Henning Kamp {
275*5bb6a25fSPoul-Henning Kamp   switch (tok) {
276*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
277*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_NONE;
278*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
279*5bb6a25fSPoul-Henning Kamp     state->handler = doctype4;
280*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_SYSTEM_ID;
281*5bb6a25fSPoul-Henning Kamp   }
282*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
283*5bb6a25fSPoul-Henning Kamp }
284*5bb6a25fSPoul-Henning Kamp 
285*5bb6a25fSPoul-Henning Kamp static int FASTCALL
286*5bb6a25fSPoul-Henning Kamp doctype4(PROLOG_STATE *state,
287*5bb6a25fSPoul-Henning Kamp          int tok,
288*5bb6a25fSPoul-Henning Kamp          const char *ptr,
289*5bb6a25fSPoul-Henning Kamp          const char *end,
290*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
291*5bb6a25fSPoul-Henning Kamp {
292*5bb6a25fSPoul-Henning Kamp   switch (tok) {
293*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
294*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_NONE;
295*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OPEN_BRACKET:
296*5bb6a25fSPoul-Henning Kamp     state->handler = internalSubset;
297*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
298*5bb6a25fSPoul-Henning Kamp   case XML_TOK_DECL_CLOSE:
299*5bb6a25fSPoul-Henning Kamp     state->handler = prolog2;
300*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_CLOSE;
301*5bb6a25fSPoul-Henning Kamp   }
302*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
303*5bb6a25fSPoul-Henning Kamp }
304*5bb6a25fSPoul-Henning Kamp 
305*5bb6a25fSPoul-Henning Kamp static int FASTCALL
306*5bb6a25fSPoul-Henning Kamp doctype5(PROLOG_STATE *state,
307*5bb6a25fSPoul-Henning Kamp          int tok,
308*5bb6a25fSPoul-Henning Kamp          const char *ptr,
309*5bb6a25fSPoul-Henning Kamp          const char *end,
310*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
311*5bb6a25fSPoul-Henning Kamp {
312*5bb6a25fSPoul-Henning Kamp   switch (tok) {
313*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
314*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_NONE;
315*5bb6a25fSPoul-Henning Kamp   case XML_TOK_DECL_CLOSE:
316*5bb6a25fSPoul-Henning Kamp     state->handler = prolog2;
317*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_CLOSE;
318*5bb6a25fSPoul-Henning Kamp   }
319*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
320*5bb6a25fSPoul-Henning Kamp }
321*5bb6a25fSPoul-Henning Kamp 
322*5bb6a25fSPoul-Henning Kamp static int FASTCALL
323*5bb6a25fSPoul-Henning Kamp internalSubset(PROLOG_STATE *state,
324*5bb6a25fSPoul-Henning Kamp                int tok,
325*5bb6a25fSPoul-Henning Kamp                const char *ptr,
326*5bb6a25fSPoul-Henning Kamp                const char *end,
327*5bb6a25fSPoul-Henning Kamp                const ENCODING *enc)
328*5bb6a25fSPoul-Henning Kamp {
329*5bb6a25fSPoul-Henning Kamp   switch (tok) {
330*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
331*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
332*5bb6a25fSPoul-Henning Kamp   case XML_TOK_DECL_OPEN:
333*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc,
334*5bb6a25fSPoul-Henning Kamp                             ptr + 2 * MIN_BYTES_PER_CHAR(enc),
335*5bb6a25fSPoul-Henning Kamp                             end,
336*5bb6a25fSPoul-Henning Kamp                             KW_ENTITY)) {
337*5bb6a25fSPoul-Henning Kamp       state->handler = entity0;
338*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_ENTITY_NONE;
339*5bb6a25fSPoul-Henning Kamp     }
340*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc,
341*5bb6a25fSPoul-Henning Kamp                             ptr + 2 * MIN_BYTES_PER_CHAR(enc),
342*5bb6a25fSPoul-Henning Kamp                             end,
343*5bb6a25fSPoul-Henning Kamp                             KW_ATTLIST)) {
344*5bb6a25fSPoul-Henning Kamp       state->handler = attlist0;
345*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_ATTLIST_NONE;
346*5bb6a25fSPoul-Henning Kamp     }
347*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc,
348*5bb6a25fSPoul-Henning Kamp                             ptr + 2 * MIN_BYTES_PER_CHAR(enc),
349*5bb6a25fSPoul-Henning Kamp                             end,
350*5bb6a25fSPoul-Henning Kamp                             KW_ELEMENT)) {
351*5bb6a25fSPoul-Henning Kamp       state->handler = element0;
352*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_ELEMENT_NONE;
353*5bb6a25fSPoul-Henning Kamp     }
354*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc,
355*5bb6a25fSPoul-Henning Kamp                             ptr + 2 * MIN_BYTES_PER_CHAR(enc),
356*5bb6a25fSPoul-Henning Kamp                             end,
357*5bb6a25fSPoul-Henning Kamp                             KW_NOTATION)) {
358*5bb6a25fSPoul-Henning Kamp       state->handler = notation0;
359*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_NOTATION_NONE;
360*5bb6a25fSPoul-Henning Kamp     }
361*5bb6a25fSPoul-Henning Kamp     break;
362*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PI:
363*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_PI;
364*5bb6a25fSPoul-Henning Kamp   case XML_TOK_COMMENT:
365*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_COMMENT;
366*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PARAM_ENTITY_REF:
367*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_PARAM_ENTITY_REF;
368*5bb6a25fSPoul-Henning Kamp   case XML_TOK_CLOSE_BRACKET:
369*5bb6a25fSPoul-Henning Kamp     state->handler = doctype5;
370*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DOCTYPE_NONE;
371*5bb6a25fSPoul-Henning Kamp   }
372*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
373*5bb6a25fSPoul-Henning Kamp }
374*5bb6a25fSPoul-Henning Kamp 
375*5bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
376*5bb6a25fSPoul-Henning Kamp 
377*5bb6a25fSPoul-Henning Kamp static int FASTCALL
378*5bb6a25fSPoul-Henning Kamp externalSubset0(PROLOG_STATE *state,
379*5bb6a25fSPoul-Henning Kamp                 int tok,
380*5bb6a25fSPoul-Henning Kamp                 const char *ptr,
381*5bb6a25fSPoul-Henning Kamp                 const char *end,
382*5bb6a25fSPoul-Henning Kamp                 const ENCODING *enc)
383*5bb6a25fSPoul-Henning Kamp {
384*5bb6a25fSPoul-Henning Kamp   state->handler = externalSubset1;
385*5bb6a25fSPoul-Henning Kamp   if (tok == XML_TOK_XML_DECL)
386*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_TEXT_DECL;
387*5bb6a25fSPoul-Henning Kamp   return externalSubset1(state, tok, ptr, end, enc);
388*5bb6a25fSPoul-Henning Kamp }
389*5bb6a25fSPoul-Henning Kamp 
390*5bb6a25fSPoul-Henning Kamp static int FASTCALL
391*5bb6a25fSPoul-Henning Kamp externalSubset1(PROLOG_STATE *state,
392*5bb6a25fSPoul-Henning Kamp                 int tok,
393*5bb6a25fSPoul-Henning Kamp                 const char *ptr,
394*5bb6a25fSPoul-Henning Kamp                 const char *end,
395*5bb6a25fSPoul-Henning Kamp                 const ENCODING *enc)
396*5bb6a25fSPoul-Henning Kamp {
397*5bb6a25fSPoul-Henning Kamp   switch (tok) {
398*5bb6a25fSPoul-Henning Kamp   case XML_TOK_COND_SECT_OPEN:
399*5bb6a25fSPoul-Henning Kamp     state->handler = condSect0;
400*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
401*5bb6a25fSPoul-Henning Kamp   case XML_TOK_COND_SECT_CLOSE:
402*5bb6a25fSPoul-Henning Kamp     if (state->includeLevel == 0)
403*5bb6a25fSPoul-Henning Kamp       break;
404*5bb6a25fSPoul-Henning Kamp     state->includeLevel -= 1;
405*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
406*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
407*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
408*5bb6a25fSPoul-Henning Kamp   case XML_TOK_CLOSE_BRACKET:
409*5bb6a25fSPoul-Henning Kamp     break;
410*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NONE:
411*5bb6a25fSPoul-Henning Kamp     if (state->includeLevel)
412*5bb6a25fSPoul-Henning Kamp       break;
413*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
414*5bb6a25fSPoul-Henning Kamp   default:
415*5bb6a25fSPoul-Henning Kamp     return internalSubset(state, tok, ptr, end, enc);
416*5bb6a25fSPoul-Henning Kamp   }
417*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
418*5bb6a25fSPoul-Henning Kamp }
419*5bb6a25fSPoul-Henning Kamp 
420*5bb6a25fSPoul-Henning Kamp #endif /* XML_DTD */
421*5bb6a25fSPoul-Henning Kamp 
422*5bb6a25fSPoul-Henning Kamp static int FASTCALL
423*5bb6a25fSPoul-Henning Kamp entity0(PROLOG_STATE *state,
424*5bb6a25fSPoul-Henning Kamp         int tok,
425*5bb6a25fSPoul-Henning Kamp         const char *ptr,
426*5bb6a25fSPoul-Henning Kamp         const char *end,
427*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
428*5bb6a25fSPoul-Henning Kamp {
429*5bb6a25fSPoul-Henning Kamp   switch (tok) {
430*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
431*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NONE;
432*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PERCENT:
433*5bb6a25fSPoul-Henning Kamp     state->handler = entity1;
434*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NONE;
435*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
436*5bb6a25fSPoul-Henning Kamp     state->handler = entity2;
437*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GENERAL_ENTITY_NAME;
438*5bb6a25fSPoul-Henning Kamp   }
439*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
440*5bb6a25fSPoul-Henning Kamp }
441*5bb6a25fSPoul-Henning Kamp 
442*5bb6a25fSPoul-Henning Kamp static int FASTCALL
443*5bb6a25fSPoul-Henning Kamp entity1(PROLOG_STATE *state,
444*5bb6a25fSPoul-Henning Kamp         int tok,
445*5bb6a25fSPoul-Henning Kamp         const char *ptr,
446*5bb6a25fSPoul-Henning Kamp         const char *end,
447*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
448*5bb6a25fSPoul-Henning Kamp {
449*5bb6a25fSPoul-Henning Kamp   switch (tok) {
450*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
451*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NONE;
452*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
453*5bb6a25fSPoul-Henning Kamp     state->handler = entity7;
454*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_PARAM_ENTITY_NAME;
455*5bb6a25fSPoul-Henning Kamp   }
456*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
457*5bb6a25fSPoul-Henning Kamp }
458*5bb6a25fSPoul-Henning Kamp 
459*5bb6a25fSPoul-Henning Kamp static int FASTCALL
460*5bb6a25fSPoul-Henning Kamp entity2(PROLOG_STATE *state,
461*5bb6a25fSPoul-Henning Kamp         int tok,
462*5bb6a25fSPoul-Henning Kamp         const char *ptr,
463*5bb6a25fSPoul-Henning Kamp         const char *end,
464*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
465*5bb6a25fSPoul-Henning Kamp {
466*5bb6a25fSPoul-Henning Kamp   switch (tok) {
467*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
468*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NONE;
469*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
470*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
471*5bb6a25fSPoul-Henning Kamp       state->handler = entity4;
472*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_ENTITY_NONE;
473*5bb6a25fSPoul-Henning Kamp     }
474*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
475*5bb6a25fSPoul-Henning Kamp       state->handler = entity3;
476*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_ENTITY_NONE;
477*5bb6a25fSPoul-Henning Kamp     }
478*5bb6a25fSPoul-Henning Kamp     break;
479*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
480*5bb6a25fSPoul-Henning Kamp     state->handler = declClose;
481*5bb6a25fSPoul-Henning Kamp     state->role_none = XML_ROLE_ENTITY_NONE;
482*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_VALUE;
483*5bb6a25fSPoul-Henning Kamp   }
484*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
485*5bb6a25fSPoul-Henning Kamp }
486*5bb6a25fSPoul-Henning Kamp 
487*5bb6a25fSPoul-Henning Kamp static int FASTCALL
488*5bb6a25fSPoul-Henning Kamp entity3(PROLOG_STATE *state,
489*5bb6a25fSPoul-Henning Kamp         int tok,
490*5bb6a25fSPoul-Henning Kamp         const char *ptr,
491*5bb6a25fSPoul-Henning Kamp         const char *end,
492*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
493*5bb6a25fSPoul-Henning Kamp {
494*5bb6a25fSPoul-Henning Kamp   switch (tok) {
495*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
496*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NONE;
497*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
498*5bb6a25fSPoul-Henning Kamp     state->handler = entity4;
499*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_PUBLIC_ID;
500*5bb6a25fSPoul-Henning Kamp   }
501*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
502*5bb6a25fSPoul-Henning Kamp }
503*5bb6a25fSPoul-Henning Kamp 
504*5bb6a25fSPoul-Henning Kamp static int FASTCALL
505*5bb6a25fSPoul-Henning Kamp entity4(PROLOG_STATE *state,
506*5bb6a25fSPoul-Henning Kamp         int tok,
507*5bb6a25fSPoul-Henning Kamp         const char *ptr,
508*5bb6a25fSPoul-Henning Kamp         const char *end,
509*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
510*5bb6a25fSPoul-Henning Kamp {
511*5bb6a25fSPoul-Henning Kamp   switch (tok) {
512*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
513*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NONE;
514*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
515*5bb6a25fSPoul-Henning Kamp     state->handler = entity5;
516*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_SYSTEM_ID;
517*5bb6a25fSPoul-Henning Kamp   }
518*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
519*5bb6a25fSPoul-Henning Kamp }
520*5bb6a25fSPoul-Henning Kamp 
521*5bb6a25fSPoul-Henning Kamp static int FASTCALL
522*5bb6a25fSPoul-Henning Kamp entity5(PROLOG_STATE *state,
523*5bb6a25fSPoul-Henning Kamp         int tok,
524*5bb6a25fSPoul-Henning Kamp         const char *ptr,
525*5bb6a25fSPoul-Henning Kamp         const char *end,
526*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
527*5bb6a25fSPoul-Henning Kamp {
528*5bb6a25fSPoul-Henning Kamp   switch (tok) {
529*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
530*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NONE;
531*5bb6a25fSPoul-Henning Kamp   case XML_TOK_DECL_CLOSE:
532*5bb6a25fSPoul-Henning Kamp     setTopLevel(state);
533*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_COMPLETE;
534*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
535*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) {
536*5bb6a25fSPoul-Henning Kamp       state->handler = entity6;
537*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_ENTITY_NONE;
538*5bb6a25fSPoul-Henning Kamp     }
539*5bb6a25fSPoul-Henning Kamp     break;
540*5bb6a25fSPoul-Henning Kamp   }
541*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
542*5bb6a25fSPoul-Henning Kamp }
543*5bb6a25fSPoul-Henning Kamp 
544*5bb6a25fSPoul-Henning Kamp static int FASTCALL
545*5bb6a25fSPoul-Henning Kamp entity6(PROLOG_STATE *state,
546*5bb6a25fSPoul-Henning Kamp         int tok,
547*5bb6a25fSPoul-Henning Kamp         const char *ptr,
548*5bb6a25fSPoul-Henning Kamp         const char *end,
549*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
550*5bb6a25fSPoul-Henning Kamp {
551*5bb6a25fSPoul-Henning Kamp   switch (tok) {
552*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
553*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NONE;
554*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
555*5bb6a25fSPoul-Henning Kamp     state->handler = declClose;
556*5bb6a25fSPoul-Henning Kamp     state->role_none = XML_ROLE_ENTITY_NONE;
557*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NOTATION_NAME;
558*5bb6a25fSPoul-Henning Kamp   }
559*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
560*5bb6a25fSPoul-Henning Kamp }
561*5bb6a25fSPoul-Henning Kamp 
562*5bb6a25fSPoul-Henning Kamp static int FASTCALL
563*5bb6a25fSPoul-Henning Kamp entity7(PROLOG_STATE *state,
564*5bb6a25fSPoul-Henning Kamp         int tok,
565*5bb6a25fSPoul-Henning Kamp         const char *ptr,
566*5bb6a25fSPoul-Henning Kamp         const char *end,
567*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
568*5bb6a25fSPoul-Henning Kamp {
569*5bb6a25fSPoul-Henning Kamp   switch (tok) {
570*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
571*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NONE;
572*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
573*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
574*5bb6a25fSPoul-Henning Kamp       state->handler = entity9;
575*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_ENTITY_NONE;
576*5bb6a25fSPoul-Henning Kamp     }
577*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
578*5bb6a25fSPoul-Henning Kamp       state->handler = entity8;
579*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_ENTITY_NONE;
580*5bb6a25fSPoul-Henning Kamp     }
581*5bb6a25fSPoul-Henning Kamp     break;
582*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
583*5bb6a25fSPoul-Henning Kamp     state->handler = declClose;
584*5bb6a25fSPoul-Henning Kamp     state->role_none = XML_ROLE_ENTITY_NONE;
585*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_VALUE;
586*5bb6a25fSPoul-Henning Kamp   }
587*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
588*5bb6a25fSPoul-Henning Kamp }
589*5bb6a25fSPoul-Henning Kamp 
590*5bb6a25fSPoul-Henning Kamp static int FASTCALL
591*5bb6a25fSPoul-Henning Kamp entity8(PROLOG_STATE *state,
592*5bb6a25fSPoul-Henning Kamp         int tok,
593*5bb6a25fSPoul-Henning Kamp         const char *ptr,
594*5bb6a25fSPoul-Henning Kamp         const char *end,
595*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
596*5bb6a25fSPoul-Henning Kamp {
597*5bb6a25fSPoul-Henning Kamp   switch (tok) {
598*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
599*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NONE;
600*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
601*5bb6a25fSPoul-Henning Kamp     state->handler = entity9;
602*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_PUBLIC_ID;
603*5bb6a25fSPoul-Henning Kamp   }
604*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
605*5bb6a25fSPoul-Henning Kamp }
606*5bb6a25fSPoul-Henning Kamp 
607*5bb6a25fSPoul-Henning Kamp static int FASTCALL
608*5bb6a25fSPoul-Henning Kamp entity9(PROLOG_STATE *state,
609*5bb6a25fSPoul-Henning Kamp         int tok,
610*5bb6a25fSPoul-Henning Kamp         const char *ptr,
611*5bb6a25fSPoul-Henning Kamp         const char *end,
612*5bb6a25fSPoul-Henning Kamp         const ENCODING *enc)
613*5bb6a25fSPoul-Henning Kamp {
614*5bb6a25fSPoul-Henning Kamp   switch (tok) {
615*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
616*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NONE;
617*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
618*5bb6a25fSPoul-Henning Kamp     state->handler = entity10;
619*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_SYSTEM_ID;
620*5bb6a25fSPoul-Henning Kamp   }
621*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
622*5bb6a25fSPoul-Henning Kamp }
623*5bb6a25fSPoul-Henning Kamp 
624*5bb6a25fSPoul-Henning Kamp static int FASTCALL
625*5bb6a25fSPoul-Henning Kamp entity10(PROLOG_STATE *state,
626*5bb6a25fSPoul-Henning Kamp          int tok,
627*5bb6a25fSPoul-Henning Kamp          const char *ptr,
628*5bb6a25fSPoul-Henning Kamp          const char *end,
629*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
630*5bb6a25fSPoul-Henning Kamp {
631*5bb6a25fSPoul-Henning Kamp   switch (tok) {
632*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
633*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_NONE;
634*5bb6a25fSPoul-Henning Kamp   case XML_TOK_DECL_CLOSE:
635*5bb6a25fSPoul-Henning Kamp     setTopLevel(state);
636*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ENTITY_COMPLETE;
637*5bb6a25fSPoul-Henning Kamp   }
638*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
639*5bb6a25fSPoul-Henning Kamp }
640*5bb6a25fSPoul-Henning Kamp 
641*5bb6a25fSPoul-Henning Kamp static int FASTCALL
642*5bb6a25fSPoul-Henning Kamp notation0(PROLOG_STATE *state,
643*5bb6a25fSPoul-Henning Kamp           int tok,
644*5bb6a25fSPoul-Henning Kamp           const char *ptr,
645*5bb6a25fSPoul-Henning Kamp           const char *end,
646*5bb6a25fSPoul-Henning Kamp           const ENCODING *enc)
647*5bb6a25fSPoul-Henning Kamp {
648*5bb6a25fSPoul-Henning Kamp   switch (tok) {
649*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
650*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NOTATION_NONE;
651*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
652*5bb6a25fSPoul-Henning Kamp     state->handler = notation1;
653*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NOTATION_NAME;
654*5bb6a25fSPoul-Henning Kamp   }
655*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
656*5bb6a25fSPoul-Henning Kamp }
657*5bb6a25fSPoul-Henning Kamp 
658*5bb6a25fSPoul-Henning Kamp static int FASTCALL
659*5bb6a25fSPoul-Henning Kamp notation1(PROLOG_STATE *state,
660*5bb6a25fSPoul-Henning Kamp           int tok,
661*5bb6a25fSPoul-Henning Kamp           const char *ptr,
662*5bb6a25fSPoul-Henning Kamp           const char *end,
663*5bb6a25fSPoul-Henning Kamp           const ENCODING *enc)
664*5bb6a25fSPoul-Henning Kamp {
665*5bb6a25fSPoul-Henning Kamp   switch (tok) {
666*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
667*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NOTATION_NONE;
668*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
669*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
670*5bb6a25fSPoul-Henning Kamp       state->handler = notation3;
671*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_NOTATION_NONE;
672*5bb6a25fSPoul-Henning Kamp     }
673*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
674*5bb6a25fSPoul-Henning Kamp       state->handler = notation2;
675*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_NOTATION_NONE;
676*5bb6a25fSPoul-Henning Kamp     }
677*5bb6a25fSPoul-Henning Kamp     break;
678*5bb6a25fSPoul-Henning Kamp   }
679*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
680*5bb6a25fSPoul-Henning Kamp }
681*5bb6a25fSPoul-Henning Kamp 
682*5bb6a25fSPoul-Henning Kamp static int FASTCALL
683*5bb6a25fSPoul-Henning Kamp notation2(PROLOG_STATE *state,
684*5bb6a25fSPoul-Henning Kamp           int tok,
685*5bb6a25fSPoul-Henning Kamp           const char *ptr,
686*5bb6a25fSPoul-Henning Kamp           const char *end,
687*5bb6a25fSPoul-Henning Kamp           const ENCODING *enc)
688*5bb6a25fSPoul-Henning Kamp {
689*5bb6a25fSPoul-Henning Kamp   switch (tok) {
690*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
691*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NOTATION_NONE;
692*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
693*5bb6a25fSPoul-Henning Kamp     state->handler = notation4;
694*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NOTATION_PUBLIC_ID;
695*5bb6a25fSPoul-Henning Kamp   }
696*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
697*5bb6a25fSPoul-Henning Kamp }
698*5bb6a25fSPoul-Henning Kamp 
699*5bb6a25fSPoul-Henning Kamp static int FASTCALL
700*5bb6a25fSPoul-Henning Kamp notation3(PROLOG_STATE *state,
701*5bb6a25fSPoul-Henning Kamp           int tok,
702*5bb6a25fSPoul-Henning Kamp           const char *ptr,
703*5bb6a25fSPoul-Henning Kamp           const char *end,
704*5bb6a25fSPoul-Henning Kamp           const ENCODING *enc)
705*5bb6a25fSPoul-Henning Kamp {
706*5bb6a25fSPoul-Henning Kamp   switch (tok) {
707*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
708*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NOTATION_NONE;
709*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
710*5bb6a25fSPoul-Henning Kamp     state->handler = declClose;
711*5bb6a25fSPoul-Henning Kamp     state->role_none = XML_ROLE_NOTATION_NONE;
712*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NOTATION_SYSTEM_ID;
713*5bb6a25fSPoul-Henning Kamp   }
714*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
715*5bb6a25fSPoul-Henning Kamp }
716*5bb6a25fSPoul-Henning Kamp 
717*5bb6a25fSPoul-Henning Kamp static int FASTCALL
718*5bb6a25fSPoul-Henning Kamp notation4(PROLOG_STATE *state,
719*5bb6a25fSPoul-Henning Kamp           int tok,
720*5bb6a25fSPoul-Henning Kamp           const char *ptr,
721*5bb6a25fSPoul-Henning Kamp           const char *end,
722*5bb6a25fSPoul-Henning Kamp           const ENCODING *enc)
723*5bb6a25fSPoul-Henning Kamp {
724*5bb6a25fSPoul-Henning Kamp   switch (tok) {
725*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
726*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NOTATION_NONE;
727*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
728*5bb6a25fSPoul-Henning Kamp     state->handler = declClose;
729*5bb6a25fSPoul-Henning Kamp     state->role_none = XML_ROLE_NOTATION_NONE;
730*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NOTATION_SYSTEM_ID;
731*5bb6a25fSPoul-Henning Kamp   case XML_TOK_DECL_CLOSE:
732*5bb6a25fSPoul-Henning Kamp     setTopLevel(state);
733*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NOTATION_NO_SYSTEM_ID;
734*5bb6a25fSPoul-Henning Kamp   }
735*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
736*5bb6a25fSPoul-Henning Kamp }
737*5bb6a25fSPoul-Henning Kamp 
738*5bb6a25fSPoul-Henning Kamp static int FASTCALL
739*5bb6a25fSPoul-Henning Kamp attlist0(PROLOG_STATE *state,
740*5bb6a25fSPoul-Henning Kamp          int tok,
741*5bb6a25fSPoul-Henning Kamp          const char *ptr,
742*5bb6a25fSPoul-Henning Kamp          const char *end,
743*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
744*5bb6a25fSPoul-Henning Kamp {
745*5bb6a25fSPoul-Henning Kamp   switch (tok) {
746*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
747*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
748*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
749*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PREFIXED_NAME:
750*5bb6a25fSPoul-Henning Kamp     state->handler = attlist1;
751*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_ELEMENT_NAME;
752*5bb6a25fSPoul-Henning Kamp   }
753*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
754*5bb6a25fSPoul-Henning Kamp }
755*5bb6a25fSPoul-Henning Kamp 
756*5bb6a25fSPoul-Henning Kamp static int FASTCALL
757*5bb6a25fSPoul-Henning Kamp attlist1(PROLOG_STATE *state,
758*5bb6a25fSPoul-Henning Kamp          int tok,
759*5bb6a25fSPoul-Henning Kamp          const char *ptr,
760*5bb6a25fSPoul-Henning Kamp          const char *end,
761*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
762*5bb6a25fSPoul-Henning Kamp {
763*5bb6a25fSPoul-Henning Kamp   switch (tok) {
764*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
765*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
766*5bb6a25fSPoul-Henning Kamp   case XML_TOK_DECL_CLOSE:
767*5bb6a25fSPoul-Henning Kamp     setTopLevel(state);
768*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
769*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
770*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PREFIXED_NAME:
771*5bb6a25fSPoul-Henning Kamp     state->handler = attlist2;
772*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTRIBUTE_NAME;
773*5bb6a25fSPoul-Henning Kamp   }
774*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
775*5bb6a25fSPoul-Henning Kamp }
776*5bb6a25fSPoul-Henning Kamp 
777*5bb6a25fSPoul-Henning Kamp static int FASTCALL
778*5bb6a25fSPoul-Henning Kamp attlist2(PROLOG_STATE *state,
779*5bb6a25fSPoul-Henning Kamp          int tok,
780*5bb6a25fSPoul-Henning Kamp          const char *ptr,
781*5bb6a25fSPoul-Henning Kamp          const char *end,
782*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
783*5bb6a25fSPoul-Henning Kamp {
784*5bb6a25fSPoul-Henning Kamp   switch (tok) {
785*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
786*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
787*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
788*5bb6a25fSPoul-Henning Kamp     {
789*5bb6a25fSPoul-Henning Kamp       static const char *types[] = {
790*5bb6a25fSPoul-Henning Kamp         KW_CDATA,
791*5bb6a25fSPoul-Henning Kamp         KW_ID,
792*5bb6a25fSPoul-Henning Kamp         KW_IDREF,
793*5bb6a25fSPoul-Henning Kamp         KW_IDREFS,
794*5bb6a25fSPoul-Henning Kamp         KW_ENTITY,
795*5bb6a25fSPoul-Henning Kamp         KW_ENTITIES,
796*5bb6a25fSPoul-Henning Kamp         KW_NMTOKEN,
797*5bb6a25fSPoul-Henning Kamp         KW_NMTOKENS,
798*5bb6a25fSPoul-Henning Kamp       };
799*5bb6a25fSPoul-Henning Kamp       int i;
800*5bb6a25fSPoul-Henning Kamp       for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++)
801*5bb6a25fSPoul-Henning Kamp         if (XmlNameMatchesAscii(enc, ptr, end, types[i])) {
802*5bb6a25fSPoul-Henning Kamp           state->handler = attlist8;
803*5bb6a25fSPoul-Henning Kamp           return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i;
804*5bb6a25fSPoul-Henning Kamp         }
805*5bb6a25fSPoul-Henning Kamp     }
806*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) {
807*5bb6a25fSPoul-Henning Kamp       state->handler = attlist5;
808*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_ATTLIST_NONE;
809*5bb6a25fSPoul-Henning Kamp     }
810*5bb6a25fSPoul-Henning Kamp     break;
811*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OPEN_PAREN:
812*5bb6a25fSPoul-Henning Kamp     state->handler = attlist3;
813*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
814*5bb6a25fSPoul-Henning Kamp   }
815*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
816*5bb6a25fSPoul-Henning Kamp }
817*5bb6a25fSPoul-Henning Kamp 
818*5bb6a25fSPoul-Henning Kamp static int FASTCALL
819*5bb6a25fSPoul-Henning Kamp attlist3(PROLOG_STATE *state,
820*5bb6a25fSPoul-Henning Kamp          int tok,
821*5bb6a25fSPoul-Henning Kamp          const char *ptr,
822*5bb6a25fSPoul-Henning Kamp          const char *end,
823*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
824*5bb6a25fSPoul-Henning Kamp {
825*5bb6a25fSPoul-Henning Kamp   switch (tok) {
826*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
827*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
828*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NMTOKEN:
829*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
830*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PREFIXED_NAME:
831*5bb6a25fSPoul-Henning Kamp     state->handler = attlist4;
832*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTRIBUTE_ENUM_VALUE;
833*5bb6a25fSPoul-Henning Kamp   }
834*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
835*5bb6a25fSPoul-Henning Kamp }
836*5bb6a25fSPoul-Henning Kamp 
837*5bb6a25fSPoul-Henning Kamp static int FASTCALL
838*5bb6a25fSPoul-Henning Kamp attlist4(PROLOG_STATE *state,
839*5bb6a25fSPoul-Henning Kamp          int tok,
840*5bb6a25fSPoul-Henning Kamp          const char *ptr,
841*5bb6a25fSPoul-Henning Kamp          const char *end,
842*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
843*5bb6a25fSPoul-Henning Kamp {
844*5bb6a25fSPoul-Henning Kamp   switch (tok) {
845*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
846*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
847*5bb6a25fSPoul-Henning Kamp   case XML_TOK_CLOSE_PAREN:
848*5bb6a25fSPoul-Henning Kamp     state->handler = attlist8;
849*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
850*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OR:
851*5bb6a25fSPoul-Henning Kamp     state->handler = attlist3;
852*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
853*5bb6a25fSPoul-Henning Kamp   }
854*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
855*5bb6a25fSPoul-Henning Kamp }
856*5bb6a25fSPoul-Henning Kamp 
857*5bb6a25fSPoul-Henning Kamp static int FASTCALL
858*5bb6a25fSPoul-Henning Kamp attlist5(PROLOG_STATE *state,
859*5bb6a25fSPoul-Henning Kamp          int tok,
860*5bb6a25fSPoul-Henning Kamp          const char *ptr,
861*5bb6a25fSPoul-Henning Kamp          const char *end,
862*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
863*5bb6a25fSPoul-Henning Kamp {
864*5bb6a25fSPoul-Henning Kamp   switch (tok) {
865*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
866*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
867*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OPEN_PAREN:
868*5bb6a25fSPoul-Henning Kamp     state->handler = attlist6;
869*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
870*5bb6a25fSPoul-Henning Kamp   }
871*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
872*5bb6a25fSPoul-Henning Kamp }
873*5bb6a25fSPoul-Henning Kamp 
874*5bb6a25fSPoul-Henning Kamp static int FASTCALL
875*5bb6a25fSPoul-Henning Kamp attlist6(PROLOG_STATE *state,
876*5bb6a25fSPoul-Henning Kamp          int tok,
877*5bb6a25fSPoul-Henning Kamp          const char *ptr,
878*5bb6a25fSPoul-Henning Kamp          const char *end,
879*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
880*5bb6a25fSPoul-Henning Kamp {
881*5bb6a25fSPoul-Henning Kamp   switch (tok) {
882*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
883*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
884*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
885*5bb6a25fSPoul-Henning Kamp     state->handler = attlist7;
886*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTRIBUTE_NOTATION_VALUE;
887*5bb6a25fSPoul-Henning Kamp   }
888*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
889*5bb6a25fSPoul-Henning Kamp }
890*5bb6a25fSPoul-Henning Kamp 
891*5bb6a25fSPoul-Henning Kamp static int FASTCALL
892*5bb6a25fSPoul-Henning Kamp attlist7(PROLOG_STATE *state,
893*5bb6a25fSPoul-Henning Kamp          int tok,
894*5bb6a25fSPoul-Henning Kamp          const char *ptr,
895*5bb6a25fSPoul-Henning Kamp          const char *end,
896*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
897*5bb6a25fSPoul-Henning Kamp {
898*5bb6a25fSPoul-Henning Kamp   switch (tok) {
899*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
900*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
901*5bb6a25fSPoul-Henning Kamp   case XML_TOK_CLOSE_PAREN:
902*5bb6a25fSPoul-Henning Kamp     state->handler = attlist8;
903*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
904*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OR:
905*5bb6a25fSPoul-Henning Kamp     state->handler = attlist6;
906*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
907*5bb6a25fSPoul-Henning Kamp   }
908*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
909*5bb6a25fSPoul-Henning Kamp }
910*5bb6a25fSPoul-Henning Kamp 
911*5bb6a25fSPoul-Henning Kamp /* default value */
912*5bb6a25fSPoul-Henning Kamp static int FASTCALL
913*5bb6a25fSPoul-Henning Kamp attlist8(PROLOG_STATE *state,
914*5bb6a25fSPoul-Henning Kamp          int tok,
915*5bb6a25fSPoul-Henning Kamp          const char *ptr,
916*5bb6a25fSPoul-Henning Kamp          const char *end,
917*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
918*5bb6a25fSPoul-Henning Kamp {
919*5bb6a25fSPoul-Henning Kamp   switch (tok) {
920*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
921*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
922*5bb6a25fSPoul-Henning Kamp   case XML_TOK_POUND_NAME:
923*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc,
924*5bb6a25fSPoul-Henning Kamp                             ptr + MIN_BYTES_PER_CHAR(enc),
925*5bb6a25fSPoul-Henning Kamp                             end,
926*5bb6a25fSPoul-Henning Kamp                             KW_IMPLIED)) {
927*5bb6a25fSPoul-Henning Kamp       state->handler = attlist1;
928*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE;
929*5bb6a25fSPoul-Henning Kamp     }
930*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc,
931*5bb6a25fSPoul-Henning Kamp                             ptr + MIN_BYTES_PER_CHAR(enc),
932*5bb6a25fSPoul-Henning Kamp                             end,
933*5bb6a25fSPoul-Henning Kamp                             KW_REQUIRED)) {
934*5bb6a25fSPoul-Henning Kamp       state->handler = attlist1;
935*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE;
936*5bb6a25fSPoul-Henning Kamp     }
937*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc,
938*5bb6a25fSPoul-Henning Kamp                             ptr + MIN_BYTES_PER_CHAR(enc),
939*5bb6a25fSPoul-Henning Kamp                             end,
940*5bb6a25fSPoul-Henning Kamp                             KW_FIXED)) {
941*5bb6a25fSPoul-Henning Kamp       state->handler = attlist9;
942*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_ATTLIST_NONE;
943*5bb6a25fSPoul-Henning Kamp     }
944*5bb6a25fSPoul-Henning Kamp     break;
945*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
946*5bb6a25fSPoul-Henning Kamp     state->handler = attlist1;
947*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE;
948*5bb6a25fSPoul-Henning Kamp   }
949*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
950*5bb6a25fSPoul-Henning Kamp }
951*5bb6a25fSPoul-Henning Kamp 
952*5bb6a25fSPoul-Henning Kamp static int FASTCALL
953*5bb6a25fSPoul-Henning Kamp attlist9(PROLOG_STATE *state,
954*5bb6a25fSPoul-Henning Kamp          int tok,
955*5bb6a25fSPoul-Henning Kamp          const char *ptr,
956*5bb6a25fSPoul-Henning Kamp          const char *end,
957*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
958*5bb6a25fSPoul-Henning Kamp {
959*5bb6a25fSPoul-Henning Kamp   switch (tok) {
960*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
961*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ATTLIST_NONE;
962*5bb6a25fSPoul-Henning Kamp   case XML_TOK_LITERAL:
963*5bb6a25fSPoul-Henning Kamp     state->handler = attlist1;
964*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_FIXED_ATTRIBUTE_VALUE;
965*5bb6a25fSPoul-Henning Kamp   }
966*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
967*5bb6a25fSPoul-Henning Kamp }
968*5bb6a25fSPoul-Henning Kamp 
969*5bb6a25fSPoul-Henning Kamp static int FASTCALL
970*5bb6a25fSPoul-Henning Kamp element0(PROLOG_STATE *state,
971*5bb6a25fSPoul-Henning Kamp          int tok,
972*5bb6a25fSPoul-Henning Kamp          const char *ptr,
973*5bb6a25fSPoul-Henning Kamp          const char *end,
974*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
975*5bb6a25fSPoul-Henning Kamp {
976*5bb6a25fSPoul-Henning Kamp   switch (tok) {
977*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
978*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ELEMENT_NONE;
979*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
980*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PREFIXED_NAME:
981*5bb6a25fSPoul-Henning Kamp     state->handler = element1;
982*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ELEMENT_NAME;
983*5bb6a25fSPoul-Henning Kamp   }
984*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
985*5bb6a25fSPoul-Henning Kamp }
986*5bb6a25fSPoul-Henning Kamp 
987*5bb6a25fSPoul-Henning Kamp static int FASTCALL
988*5bb6a25fSPoul-Henning Kamp element1(PROLOG_STATE *state,
989*5bb6a25fSPoul-Henning Kamp          int tok,
990*5bb6a25fSPoul-Henning Kamp          const char *ptr,
991*5bb6a25fSPoul-Henning Kamp          const char *end,
992*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
993*5bb6a25fSPoul-Henning Kamp {
994*5bb6a25fSPoul-Henning Kamp   switch (tok) {
995*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
996*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ELEMENT_NONE;
997*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
998*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) {
999*5bb6a25fSPoul-Henning Kamp       state->handler = declClose;
1000*5bb6a25fSPoul-Henning Kamp       state->role_none = XML_ROLE_ELEMENT_NONE;
1001*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_CONTENT_EMPTY;
1002*5bb6a25fSPoul-Henning Kamp     }
1003*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) {
1004*5bb6a25fSPoul-Henning Kamp       state->handler = declClose;
1005*5bb6a25fSPoul-Henning Kamp       state->role_none = XML_ROLE_ELEMENT_NONE;
1006*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_CONTENT_ANY;
1007*5bb6a25fSPoul-Henning Kamp     }
1008*5bb6a25fSPoul-Henning Kamp     break;
1009*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OPEN_PAREN:
1010*5bb6a25fSPoul-Henning Kamp     state->handler = element2;
1011*5bb6a25fSPoul-Henning Kamp     state->level = 1;
1012*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GROUP_OPEN;
1013*5bb6a25fSPoul-Henning Kamp   }
1014*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
1015*5bb6a25fSPoul-Henning Kamp }
1016*5bb6a25fSPoul-Henning Kamp 
1017*5bb6a25fSPoul-Henning Kamp static int FASTCALL
1018*5bb6a25fSPoul-Henning Kamp element2(PROLOG_STATE *state,
1019*5bb6a25fSPoul-Henning Kamp          int tok,
1020*5bb6a25fSPoul-Henning Kamp          const char *ptr,
1021*5bb6a25fSPoul-Henning Kamp          const char *end,
1022*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
1023*5bb6a25fSPoul-Henning Kamp {
1024*5bb6a25fSPoul-Henning Kamp   switch (tok) {
1025*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
1026*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ELEMENT_NONE;
1027*5bb6a25fSPoul-Henning Kamp   case XML_TOK_POUND_NAME:
1028*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc,
1029*5bb6a25fSPoul-Henning Kamp                             ptr + MIN_BYTES_PER_CHAR(enc),
1030*5bb6a25fSPoul-Henning Kamp                             end,
1031*5bb6a25fSPoul-Henning Kamp                             KW_PCDATA)) {
1032*5bb6a25fSPoul-Henning Kamp       state->handler = element3;
1033*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_CONTENT_PCDATA;
1034*5bb6a25fSPoul-Henning Kamp     }
1035*5bb6a25fSPoul-Henning Kamp     break;
1036*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OPEN_PAREN:
1037*5bb6a25fSPoul-Henning Kamp     state->level = 2;
1038*5bb6a25fSPoul-Henning Kamp     state->handler = element6;
1039*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GROUP_OPEN;
1040*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
1041*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PREFIXED_NAME:
1042*5bb6a25fSPoul-Henning Kamp     state->handler = element7;
1043*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_CONTENT_ELEMENT;
1044*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME_QUESTION:
1045*5bb6a25fSPoul-Henning Kamp     state->handler = element7;
1046*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_CONTENT_ELEMENT_OPT;
1047*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME_ASTERISK:
1048*5bb6a25fSPoul-Henning Kamp     state->handler = element7;
1049*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_CONTENT_ELEMENT_REP;
1050*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME_PLUS:
1051*5bb6a25fSPoul-Henning Kamp     state->handler = element7;
1052*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_CONTENT_ELEMENT_PLUS;
1053*5bb6a25fSPoul-Henning Kamp   }
1054*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
1055*5bb6a25fSPoul-Henning Kamp }
1056*5bb6a25fSPoul-Henning Kamp 
1057*5bb6a25fSPoul-Henning Kamp static int FASTCALL
1058*5bb6a25fSPoul-Henning Kamp element3(PROLOG_STATE *state,
1059*5bb6a25fSPoul-Henning Kamp          int tok,
1060*5bb6a25fSPoul-Henning Kamp          const char *ptr,
1061*5bb6a25fSPoul-Henning Kamp          const char *end,
1062*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
1063*5bb6a25fSPoul-Henning Kamp {
1064*5bb6a25fSPoul-Henning Kamp   switch (tok) {
1065*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
1066*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ELEMENT_NONE;
1067*5bb6a25fSPoul-Henning Kamp   case XML_TOK_CLOSE_PAREN:
1068*5bb6a25fSPoul-Henning Kamp     state->handler = declClose;
1069*5bb6a25fSPoul-Henning Kamp     state->role_none = XML_ROLE_ELEMENT_NONE;
1070*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GROUP_CLOSE;
1071*5bb6a25fSPoul-Henning Kamp   case XML_TOK_CLOSE_PAREN_ASTERISK:
1072*5bb6a25fSPoul-Henning Kamp     state->handler = declClose;
1073*5bb6a25fSPoul-Henning Kamp     state->role_none = XML_ROLE_ELEMENT_NONE;
1074*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GROUP_CLOSE_REP;
1075*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OR:
1076*5bb6a25fSPoul-Henning Kamp     state->handler = element4;
1077*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ELEMENT_NONE;
1078*5bb6a25fSPoul-Henning Kamp   }
1079*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
1080*5bb6a25fSPoul-Henning Kamp }
1081*5bb6a25fSPoul-Henning Kamp 
1082*5bb6a25fSPoul-Henning Kamp static int FASTCALL
1083*5bb6a25fSPoul-Henning Kamp element4(PROLOG_STATE *state,
1084*5bb6a25fSPoul-Henning Kamp          int tok,
1085*5bb6a25fSPoul-Henning Kamp          const char *ptr,
1086*5bb6a25fSPoul-Henning Kamp          const char *end,
1087*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
1088*5bb6a25fSPoul-Henning Kamp {
1089*5bb6a25fSPoul-Henning Kamp   switch (tok) {
1090*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
1091*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ELEMENT_NONE;
1092*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
1093*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PREFIXED_NAME:
1094*5bb6a25fSPoul-Henning Kamp     state->handler = element5;
1095*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_CONTENT_ELEMENT;
1096*5bb6a25fSPoul-Henning Kamp   }
1097*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
1098*5bb6a25fSPoul-Henning Kamp }
1099*5bb6a25fSPoul-Henning Kamp 
1100*5bb6a25fSPoul-Henning Kamp static int FASTCALL
1101*5bb6a25fSPoul-Henning Kamp element5(PROLOG_STATE *state,
1102*5bb6a25fSPoul-Henning Kamp          int tok,
1103*5bb6a25fSPoul-Henning Kamp          const char *ptr,
1104*5bb6a25fSPoul-Henning Kamp          const char *end,
1105*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
1106*5bb6a25fSPoul-Henning Kamp {
1107*5bb6a25fSPoul-Henning Kamp   switch (tok) {
1108*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
1109*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ELEMENT_NONE;
1110*5bb6a25fSPoul-Henning Kamp   case XML_TOK_CLOSE_PAREN_ASTERISK:
1111*5bb6a25fSPoul-Henning Kamp     state->handler = declClose;
1112*5bb6a25fSPoul-Henning Kamp     state->role_none = XML_ROLE_ELEMENT_NONE;
1113*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GROUP_CLOSE_REP;
1114*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OR:
1115*5bb6a25fSPoul-Henning Kamp     state->handler = element4;
1116*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ELEMENT_NONE;
1117*5bb6a25fSPoul-Henning Kamp   }
1118*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
1119*5bb6a25fSPoul-Henning Kamp }
1120*5bb6a25fSPoul-Henning Kamp 
1121*5bb6a25fSPoul-Henning Kamp static int FASTCALL
1122*5bb6a25fSPoul-Henning Kamp element6(PROLOG_STATE *state,
1123*5bb6a25fSPoul-Henning Kamp          int tok,
1124*5bb6a25fSPoul-Henning Kamp          const char *ptr,
1125*5bb6a25fSPoul-Henning Kamp          const char *end,
1126*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
1127*5bb6a25fSPoul-Henning Kamp {
1128*5bb6a25fSPoul-Henning Kamp   switch (tok) {
1129*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
1130*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ELEMENT_NONE;
1131*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OPEN_PAREN:
1132*5bb6a25fSPoul-Henning Kamp     state->level += 1;
1133*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GROUP_OPEN;
1134*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
1135*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PREFIXED_NAME:
1136*5bb6a25fSPoul-Henning Kamp     state->handler = element7;
1137*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_CONTENT_ELEMENT;
1138*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME_QUESTION:
1139*5bb6a25fSPoul-Henning Kamp     state->handler = element7;
1140*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_CONTENT_ELEMENT_OPT;
1141*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME_ASTERISK:
1142*5bb6a25fSPoul-Henning Kamp     state->handler = element7;
1143*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_CONTENT_ELEMENT_REP;
1144*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME_PLUS:
1145*5bb6a25fSPoul-Henning Kamp     state->handler = element7;
1146*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_CONTENT_ELEMENT_PLUS;
1147*5bb6a25fSPoul-Henning Kamp   }
1148*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
1149*5bb6a25fSPoul-Henning Kamp }
1150*5bb6a25fSPoul-Henning Kamp 
1151*5bb6a25fSPoul-Henning Kamp static int FASTCALL
1152*5bb6a25fSPoul-Henning Kamp element7(PROLOG_STATE *state,
1153*5bb6a25fSPoul-Henning Kamp          int tok,
1154*5bb6a25fSPoul-Henning Kamp          const char *ptr,
1155*5bb6a25fSPoul-Henning Kamp          const char *end,
1156*5bb6a25fSPoul-Henning Kamp          const ENCODING *enc)
1157*5bb6a25fSPoul-Henning Kamp {
1158*5bb6a25fSPoul-Henning Kamp   switch (tok) {
1159*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
1160*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_ELEMENT_NONE;
1161*5bb6a25fSPoul-Henning Kamp   case XML_TOK_CLOSE_PAREN:
1162*5bb6a25fSPoul-Henning Kamp     state->level -= 1;
1163*5bb6a25fSPoul-Henning Kamp     if (state->level == 0) {
1164*5bb6a25fSPoul-Henning Kamp       state->handler = declClose;
1165*5bb6a25fSPoul-Henning Kamp       state->role_none = XML_ROLE_ELEMENT_NONE;
1166*5bb6a25fSPoul-Henning Kamp     }
1167*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GROUP_CLOSE;
1168*5bb6a25fSPoul-Henning Kamp   case XML_TOK_CLOSE_PAREN_ASTERISK:
1169*5bb6a25fSPoul-Henning Kamp     state->level -= 1;
1170*5bb6a25fSPoul-Henning Kamp     if (state->level == 0) {
1171*5bb6a25fSPoul-Henning Kamp       state->handler = declClose;
1172*5bb6a25fSPoul-Henning Kamp       state->role_none = XML_ROLE_ELEMENT_NONE;
1173*5bb6a25fSPoul-Henning Kamp     }
1174*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GROUP_CLOSE_REP;
1175*5bb6a25fSPoul-Henning Kamp   case XML_TOK_CLOSE_PAREN_QUESTION:
1176*5bb6a25fSPoul-Henning Kamp     state->level -= 1;
1177*5bb6a25fSPoul-Henning Kamp     if (state->level == 0) {
1178*5bb6a25fSPoul-Henning Kamp       state->handler = declClose;
1179*5bb6a25fSPoul-Henning Kamp       state->role_none = XML_ROLE_ELEMENT_NONE;
1180*5bb6a25fSPoul-Henning Kamp     }
1181*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GROUP_CLOSE_OPT;
1182*5bb6a25fSPoul-Henning Kamp   case XML_TOK_CLOSE_PAREN_PLUS:
1183*5bb6a25fSPoul-Henning Kamp     state->level -= 1;
1184*5bb6a25fSPoul-Henning Kamp     if (state->level == 0) {
1185*5bb6a25fSPoul-Henning Kamp       state->handler = declClose;
1186*5bb6a25fSPoul-Henning Kamp       state->role_none = XML_ROLE_ELEMENT_NONE;
1187*5bb6a25fSPoul-Henning Kamp     }
1188*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GROUP_CLOSE_PLUS;
1189*5bb6a25fSPoul-Henning Kamp   case XML_TOK_COMMA:
1190*5bb6a25fSPoul-Henning Kamp     state->handler = element6;
1191*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GROUP_SEQUENCE;
1192*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OR:
1193*5bb6a25fSPoul-Henning Kamp     state->handler = element6;
1194*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_GROUP_CHOICE;
1195*5bb6a25fSPoul-Henning Kamp   }
1196*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
1197*5bb6a25fSPoul-Henning Kamp }
1198*5bb6a25fSPoul-Henning Kamp 
1199*5bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
1200*5bb6a25fSPoul-Henning Kamp 
1201*5bb6a25fSPoul-Henning Kamp static int FASTCALL
1202*5bb6a25fSPoul-Henning Kamp condSect0(PROLOG_STATE *state,
1203*5bb6a25fSPoul-Henning Kamp           int tok,
1204*5bb6a25fSPoul-Henning Kamp           const char *ptr,
1205*5bb6a25fSPoul-Henning Kamp           const char *end,
1206*5bb6a25fSPoul-Henning Kamp           const ENCODING *enc)
1207*5bb6a25fSPoul-Henning Kamp {
1208*5bb6a25fSPoul-Henning Kamp   switch (tok) {
1209*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
1210*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
1211*5bb6a25fSPoul-Henning Kamp   case XML_TOK_NAME:
1212*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) {
1213*5bb6a25fSPoul-Henning Kamp       state->handler = condSect1;
1214*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_NONE;
1215*5bb6a25fSPoul-Henning Kamp     }
1216*5bb6a25fSPoul-Henning Kamp     if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) {
1217*5bb6a25fSPoul-Henning Kamp       state->handler = condSect2;
1218*5bb6a25fSPoul-Henning Kamp       return XML_ROLE_NONE;
1219*5bb6a25fSPoul-Henning Kamp     }
1220*5bb6a25fSPoul-Henning Kamp     break;
1221*5bb6a25fSPoul-Henning Kamp   }
1222*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
1223*5bb6a25fSPoul-Henning Kamp }
1224*5bb6a25fSPoul-Henning Kamp 
1225*5bb6a25fSPoul-Henning Kamp static int FASTCALL
1226*5bb6a25fSPoul-Henning Kamp condSect1(PROLOG_STATE *state,
1227*5bb6a25fSPoul-Henning Kamp           int tok,
1228*5bb6a25fSPoul-Henning Kamp           const char *ptr,
1229*5bb6a25fSPoul-Henning Kamp           const char *end,
1230*5bb6a25fSPoul-Henning Kamp           const ENCODING *enc)
1231*5bb6a25fSPoul-Henning Kamp {
1232*5bb6a25fSPoul-Henning Kamp   switch (tok) {
1233*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
1234*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
1235*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OPEN_BRACKET:
1236*5bb6a25fSPoul-Henning Kamp     state->handler = externalSubset1;
1237*5bb6a25fSPoul-Henning Kamp     state->includeLevel += 1;
1238*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
1239*5bb6a25fSPoul-Henning Kamp   }
1240*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
1241*5bb6a25fSPoul-Henning Kamp }
1242*5bb6a25fSPoul-Henning Kamp 
1243*5bb6a25fSPoul-Henning Kamp static int FASTCALL
1244*5bb6a25fSPoul-Henning Kamp condSect2(PROLOG_STATE *state,
1245*5bb6a25fSPoul-Henning Kamp           int tok,
1246*5bb6a25fSPoul-Henning Kamp           const char *ptr,
1247*5bb6a25fSPoul-Henning Kamp           const char *end,
1248*5bb6a25fSPoul-Henning Kamp           const ENCODING *enc)
1249*5bb6a25fSPoul-Henning Kamp {
1250*5bb6a25fSPoul-Henning Kamp   switch (tok) {
1251*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
1252*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_NONE;
1253*5bb6a25fSPoul-Henning Kamp   case XML_TOK_OPEN_BRACKET:
1254*5bb6a25fSPoul-Henning Kamp     state->handler = externalSubset1;
1255*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_IGNORE_SECT;
1256*5bb6a25fSPoul-Henning Kamp   }
1257*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
1258*5bb6a25fSPoul-Henning Kamp }
1259*5bb6a25fSPoul-Henning Kamp 
1260*5bb6a25fSPoul-Henning Kamp #endif /* XML_DTD */
1261*5bb6a25fSPoul-Henning Kamp 
1262*5bb6a25fSPoul-Henning Kamp static int FASTCALL
1263*5bb6a25fSPoul-Henning Kamp declClose(PROLOG_STATE *state,
1264*5bb6a25fSPoul-Henning Kamp           int tok,
1265*5bb6a25fSPoul-Henning Kamp           const char *ptr,
1266*5bb6a25fSPoul-Henning Kamp           const char *end,
1267*5bb6a25fSPoul-Henning Kamp           const ENCODING *enc)
1268*5bb6a25fSPoul-Henning Kamp {
1269*5bb6a25fSPoul-Henning Kamp   switch (tok) {
1270*5bb6a25fSPoul-Henning Kamp   case XML_TOK_PROLOG_S:
1271*5bb6a25fSPoul-Henning Kamp     return state->role_none;
1272*5bb6a25fSPoul-Henning Kamp   case XML_TOK_DECL_CLOSE:
1273*5bb6a25fSPoul-Henning Kamp     setTopLevel(state);
1274*5bb6a25fSPoul-Henning Kamp     return state->role_none;
1275*5bb6a25fSPoul-Henning Kamp   }
1276*5bb6a25fSPoul-Henning Kamp   return common(state, tok);
1277*5bb6a25fSPoul-Henning Kamp }
1278*5bb6a25fSPoul-Henning Kamp 
1279*5bb6a25fSPoul-Henning Kamp static int FASTCALL
1280*5bb6a25fSPoul-Henning Kamp error(PROLOG_STATE *state,
1281*5bb6a25fSPoul-Henning Kamp       int tok,
1282*5bb6a25fSPoul-Henning Kamp       const char *ptr,
1283*5bb6a25fSPoul-Henning Kamp       const char *end,
1284*5bb6a25fSPoul-Henning Kamp       const ENCODING *enc)
1285*5bb6a25fSPoul-Henning Kamp {
1286*5bb6a25fSPoul-Henning Kamp   return XML_ROLE_NONE;
1287*5bb6a25fSPoul-Henning Kamp }
1288*5bb6a25fSPoul-Henning Kamp 
1289*5bb6a25fSPoul-Henning Kamp static int FASTCALL
1290*5bb6a25fSPoul-Henning Kamp common(PROLOG_STATE *state, int tok)
1291*5bb6a25fSPoul-Henning Kamp {
1292*5bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
1293*5bb6a25fSPoul-Henning Kamp   if (!state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF)
1294*5bb6a25fSPoul-Henning Kamp     return XML_ROLE_INNER_PARAM_ENTITY_REF;
1295*5bb6a25fSPoul-Henning Kamp #endif
1296*5bb6a25fSPoul-Henning Kamp   state->handler = error;
1297*5bb6a25fSPoul-Henning Kamp   return XML_ROLE_ERROR;
1298*5bb6a25fSPoul-Henning Kamp }
1299*5bb6a25fSPoul-Henning Kamp 
1300*5bb6a25fSPoul-Henning Kamp void
1301*5bb6a25fSPoul-Henning Kamp XmlPrologStateInit(PROLOG_STATE *state)
1302*5bb6a25fSPoul-Henning Kamp {
1303*5bb6a25fSPoul-Henning Kamp   state->handler = prolog0;
1304*5bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
1305*5bb6a25fSPoul-Henning Kamp   state->documentEntity = 1;
1306*5bb6a25fSPoul-Henning Kamp   state->includeLevel = 0;
1307*5bb6a25fSPoul-Henning Kamp   state->inEntityValue = 0;
1308*5bb6a25fSPoul-Henning Kamp #endif /* XML_DTD */
1309*5bb6a25fSPoul-Henning Kamp }
1310*5bb6a25fSPoul-Henning Kamp 
1311*5bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
1312*5bb6a25fSPoul-Henning Kamp 
1313*5bb6a25fSPoul-Henning Kamp void
1314*5bb6a25fSPoul-Henning Kamp XmlPrologStateInitExternalEntity(PROLOG_STATE *state)
1315*5bb6a25fSPoul-Henning Kamp {
1316*5bb6a25fSPoul-Henning Kamp   state->handler = externalSubset0;
1317*5bb6a25fSPoul-Henning Kamp   state->documentEntity = 0;
1318*5bb6a25fSPoul-Henning Kamp   state->includeLevel = 0;
1319*5bb6a25fSPoul-Henning Kamp }
1320*5bb6a25fSPoul-Henning Kamp 
1321*5bb6a25fSPoul-Henning Kamp #endif /* XML_DTD */
1322