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