10a48773fSEric van Gyzen /*
20a48773fSEric van Gyzen __ __ _
30a48773fSEric van Gyzen ___\ \/ /_ __ __ _| |_
40a48773fSEric van Gyzen / _ \\ /| '_ \ / _` | __|
50a48773fSEric van Gyzen | __// \| |_) | (_| | |_
60a48773fSEric van Gyzen \___/_/\_\ .__/ \__,_|\__|
70a48773fSEric van Gyzen |_| XML parser
80a48773fSEric van Gyzen
90a48773fSEric van Gyzen Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
10cc68614dSXin LI Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
11cc68614dSXin LI Copyright (c) 2002 Greg Stein <gstein@users.sourceforge.net>
12cc68614dSXin LI Copyright (c) 2002-2006 Karl Waclawek <karl@waclawek.net>
13cc68614dSXin LI Copyright (c) 2002-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
14ac69e5d4SEric van Gyzen Copyright (c) 2005-2009 Steven Solie <steven@solie.ca>
15*4543ef51SXin LI Copyright (c) 2016-2023 Sebastian Pipping <sebastian@pipping.org>
16cc68614dSXin LI Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
17cc68614dSXin LI Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
18*4543ef51SXin LI Copyright (c) 2021 Donghee Na <donghee.na@python.org>
190a48773fSEric van Gyzen Licensed under the MIT license:
200a48773fSEric van Gyzen
210a48773fSEric van Gyzen Permission is hereby granted, free of charge, to any person obtaining
220a48773fSEric van Gyzen a copy of this software and associated documentation files (the
230a48773fSEric van Gyzen "Software"), to deal in the Software without restriction, including
240a48773fSEric van Gyzen without limitation the rights to use, copy, modify, merge, publish,
250a48773fSEric van Gyzen distribute, sublicense, and/or sell copies of the Software, and to permit
260a48773fSEric van Gyzen persons to whom the Software is furnished to do so, subject to the
270a48773fSEric van Gyzen following conditions:
280a48773fSEric van Gyzen
290a48773fSEric van Gyzen The above copyright notice and this permission notice shall be included
300a48773fSEric van Gyzen in all copies or substantial portions of the Software.
310a48773fSEric van Gyzen
320a48773fSEric van Gyzen THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
330a48773fSEric van Gyzen EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
340a48773fSEric van Gyzen MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
350a48773fSEric van Gyzen NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
360a48773fSEric van Gyzen DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
370a48773fSEric van Gyzen OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
380a48773fSEric van Gyzen USE OR OTHER DEALINGS IN THE SOFTWARE.
395bb6a25fSPoul-Henning Kamp */
405bb6a25fSPoul-Henning Kamp
41*4543ef51SXin LI #include "expat_config.h"
42cc68614dSXin LI
43220ed979SColeman Kane #include <stddef.h>
44220ed979SColeman Kane
450a48773fSEric van Gyzen #ifdef _WIN32
465bb6a25fSPoul-Henning Kamp # include "winconfig.h"
47220ed979SColeman Kane #endif
485bb6a25fSPoul-Henning Kamp
49220ed979SColeman Kane #include "expat_external.h"
505bb6a25fSPoul-Henning Kamp #include "internal.h"
515bb6a25fSPoul-Henning Kamp #include "xmlrole.h"
525bb6a25fSPoul-Henning Kamp #include "ascii.h"
535bb6a25fSPoul-Henning Kamp
545bb6a25fSPoul-Henning Kamp /* Doesn't check:
555bb6a25fSPoul-Henning Kamp
565bb6a25fSPoul-Henning Kamp that ,| are not mixed in a model group
575bb6a25fSPoul-Henning Kamp content of literals
585bb6a25fSPoul-Henning Kamp
595bb6a25fSPoul-Henning Kamp */
605bb6a25fSPoul-Henning Kamp
616b2c1e49SXin LI static const char KW_ANY[] = {ASCII_A, ASCII_N, ASCII_Y, '\0'};
626b2c1e49SXin LI static const char KW_ATTLIST[]
636b2c1e49SXin LI = {ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0'};
646b2c1e49SXin LI static const char KW_CDATA[]
656b2c1e49SXin LI = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'};
666b2c1e49SXin LI static const char KW_DOCTYPE[]
676b2c1e49SXin LI = {ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0'};
686b2c1e49SXin LI static const char KW_ELEMENT[]
696b2c1e49SXin LI = {ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0'};
706b2c1e49SXin LI static const char KW_EMPTY[]
716b2c1e49SXin LI = {ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0'};
726b2c1e49SXin LI static const char KW_ENTITIES[] = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T,
736b2c1e49SXin LI ASCII_I, ASCII_E, ASCII_S, '\0'};
746b2c1e49SXin LI static const char KW_ENTITY[]
756b2c1e49SXin LI = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0'};
766b2c1e49SXin LI static const char KW_FIXED[]
776b2c1e49SXin LI = {ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0'};
786b2c1e49SXin LI static const char KW_ID[] = {ASCII_I, ASCII_D, '\0'};
796b2c1e49SXin LI static const char KW_IDREF[]
806b2c1e49SXin LI = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0'};
816b2c1e49SXin LI static const char KW_IDREFS[]
826b2c1e49SXin LI = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0'};
83220ed979SColeman Kane #ifdef XML_DTD
846b2c1e49SXin LI static const char KW_IGNORE[]
856b2c1e49SXin LI = {ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0'};
86220ed979SColeman Kane #endif
876b2c1e49SXin LI static const char KW_IMPLIED[]
886b2c1e49SXin LI = {ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0'};
89220ed979SColeman Kane #ifdef XML_DTD
906b2c1e49SXin LI static const char KW_INCLUDE[]
916b2c1e49SXin LI = {ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0'};
92220ed979SColeman Kane #endif
936b2c1e49SXin LI static const char KW_NDATA[]
946b2c1e49SXin LI = {ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'};
956b2c1e49SXin LI static const char KW_NMTOKEN[]
966b2c1e49SXin LI = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0'};
976b2c1e49SXin LI static const char KW_NMTOKENS[] = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K,
986b2c1e49SXin LI ASCII_E, ASCII_N, ASCII_S, '\0'};
996b2c1e49SXin LI static const char KW_NOTATION[] = {ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T,
1006b2c1e49SXin LI ASCII_I, ASCII_O, ASCII_N, '\0'};
1016b2c1e49SXin LI static const char KW_PCDATA[]
1026b2c1e49SXin LI = {ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'};
1036b2c1e49SXin LI static const char KW_PUBLIC[]
1046b2c1e49SXin LI = {ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0'};
1056b2c1e49SXin LI static const char KW_REQUIRED[] = {ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I,
1066b2c1e49SXin LI ASCII_R, ASCII_E, ASCII_D, '\0'};
1076b2c1e49SXin LI static const char KW_SYSTEM[]
1086b2c1e49SXin LI = {ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0'};
1095bb6a25fSPoul-Henning Kamp
1105bb6a25fSPoul-Henning Kamp #ifndef MIN_BYTES_PER_CHAR
1115bb6a25fSPoul-Henning Kamp # define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar)
1125bb6a25fSPoul-Henning Kamp #endif
1135bb6a25fSPoul-Henning Kamp
1145bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
1155bb6a25fSPoul-Henning Kamp # define setTopLevel(state) \
1166b2c1e49SXin LI ((state)->handler \
1176b2c1e49SXin LI = ((state)->documentEntity ? internalSubset : externalSubset1))
1185bb6a25fSPoul-Henning Kamp #else /* not XML_DTD */
1195bb6a25fSPoul-Henning Kamp # define setTopLevel(state) ((state)->handler = internalSubset)
1205bb6a25fSPoul-Henning Kamp #endif /* not XML_DTD */
1215bb6a25fSPoul-Henning Kamp
1226b2c1e49SXin LI typedef int PTRCALL PROLOG_HANDLER(PROLOG_STATE *state, int tok,
1236b2c1e49SXin LI const char *ptr, const char *end,
1245bb6a25fSPoul-Henning Kamp const ENCODING *enc);
1255bb6a25fSPoul-Henning Kamp
1266b2c1e49SXin LI static PROLOG_HANDLER prolog0, prolog1, prolog2, doctype0, doctype1, doctype2,
1276b2c1e49SXin LI doctype3, doctype4, doctype5, internalSubset, entity0, entity1, entity2,
1286b2c1e49SXin LI entity3, entity4, entity5, entity6, entity7, entity8, entity9, entity10,
1296b2c1e49SXin LI notation0, notation1, notation2, notation3, notation4, attlist0, attlist1,
1306b2c1e49SXin LI attlist2, attlist3, attlist4, attlist5, attlist6, attlist7, attlist8,
1316b2c1e49SXin LI attlist9, element0, element1, element2, element3, element4, element5,
1326b2c1e49SXin LI element6, element7,
1335bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
1346b2c1e49SXin LI externalSubset0, externalSubset1, condSect0, condSect1, condSect2,
1355bb6a25fSPoul-Henning Kamp #endif /* XML_DTD */
1366b2c1e49SXin LI declClose, error;
1375bb6a25fSPoul-Henning Kamp
1385bb6a25fSPoul-Henning Kamp static int FASTCALL common(PROLOG_STATE *state, int tok);
1395bb6a25fSPoul-Henning Kamp
140220ed979SColeman Kane static int PTRCALL
prolog0(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)1416b2c1e49SXin LI prolog0(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
1426b2c1e49SXin LI const ENCODING *enc) {
1435bb6a25fSPoul-Henning Kamp switch (tok) {
1445bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
1455bb6a25fSPoul-Henning Kamp state->handler = prolog1;
1465bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
1475bb6a25fSPoul-Henning Kamp case XML_TOK_XML_DECL:
1485bb6a25fSPoul-Henning Kamp state->handler = prolog1;
1495bb6a25fSPoul-Henning Kamp return XML_ROLE_XML_DECL;
1505bb6a25fSPoul-Henning Kamp case XML_TOK_PI:
1515bb6a25fSPoul-Henning Kamp state->handler = prolog1;
1525bb6a25fSPoul-Henning Kamp return XML_ROLE_PI;
1535bb6a25fSPoul-Henning Kamp case XML_TOK_COMMENT:
1545bb6a25fSPoul-Henning Kamp state->handler = prolog1;
1555bb6a25fSPoul-Henning Kamp return XML_ROLE_COMMENT;
1565bb6a25fSPoul-Henning Kamp case XML_TOK_BOM:
1575bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
1585bb6a25fSPoul-Henning Kamp case XML_TOK_DECL_OPEN:
1596b2c1e49SXin LI if (! XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end,
1605bb6a25fSPoul-Henning Kamp KW_DOCTYPE))
1615bb6a25fSPoul-Henning Kamp break;
1625bb6a25fSPoul-Henning Kamp state->handler = doctype0;
1635bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_NONE;
1645bb6a25fSPoul-Henning Kamp case XML_TOK_INSTANCE_START:
1655bb6a25fSPoul-Henning Kamp state->handler = error;
1665bb6a25fSPoul-Henning Kamp return XML_ROLE_INSTANCE_START;
1675bb6a25fSPoul-Henning Kamp }
1685bb6a25fSPoul-Henning Kamp return common(state, tok);
1695bb6a25fSPoul-Henning Kamp }
1705bb6a25fSPoul-Henning Kamp
171220ed979SColeman Kane static int PTRCALL
prolog1(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)1726b2c1e49SXin LI prolog1(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
1736b2c1e49SXin LI const ENCODING *enc) {
1745bb6a25fSPoul-Henning Kamp switch (tok) {
1755bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
1765bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
1775bb6a25fSPoul-Henning Kamp case XML_TOK_PI:
1785bb6a25fSPoul-Henning Kamp return XML_ROLE_PI;
1795bb6a25fSPoul-Henning Kamp case XML_TOK_COMMENT:
1805bb6a25fSPoul-Henning Kamp return XML_ROLE_COMMENT;
1815bb6a25fSPoul-Henning Kamp case XML_TOK_BOM:
1820a48773fSEric van Gyzen /* This case can never arise. To reach this role function, the
1830a48773fSEric van Gyzen * parse must have passed through prolog0 and therefore have had
1840a48773fSEric van Gyzen * some form of input, even if only a space. At that point, a
1850a48773fSEric van Gyzen * byte order mark is no longer a valid character (though
1860a48773fSEric van Gyzen * technically it should be interpreted as a non-breaking space),
1870a48773fSEric van Gyzen * so will be rejected by the tokenizing stages.
1880a48773fSEric van Gyzen */
1890a48773fSEric van Gyzen return XML_ROLE_NONE; /* LCOV_EXCL_LINE */
1905bb6a25fSPoul-Henning Kamp case XML_TOK_DECL_OPEN:
1916b2c1e49SXin LI if (! XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end,
1925bb6a25fSPoul-Henning Kamp KW_DOCTYPE))
1935bb6a25fSPoul-Henning Kamp break;
1945bb6a25fSPoul-Henning Kamp state->handler = doctype0;
1955bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_NONE;
1965bb6a25fSPoul-Henning Kamp case XML_TOK_INSTANCE_START:
1975bb6a25fSPoul-Henning Kamp state->handler = error;
1985bb6a25fSPoul-Henning Kamp return XML_ROLE_INSTANCE_START;
1995bb6a25fSPoul-Henning Kamp }
2005bb6a25fSPoul-Henning Kamp return common(state, tok);
2015bb6a25fSPoul-Henning Kamp }
2025bb6a25fSPoul-Henning Kamp
203220ed979SColeman Kane static int PTRCALL
prolog2(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)2046b2c1e49SXin LI prolog2(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
2056b2c1e49SXin LI const ENCODING *enc) {
2066b2c1e49SXin LI UNUSED_P(ptr);
2076b2c1e49SXin LI UNUSED_P(end);
2086b2c1e49SXin LI UNUSED_P(enc);
2095bb6a25fSPoul-Henning Kamp switch (tok) {
2105bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
2115bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
2125bb6a25fSPoul-Henning Kamp case XML_TOK_PI:
2135bb6a25fSPoul-Henning Kamp return XML_ROLE_PI;
2145bb6a25fSPoul-Henning Kamp case XML_TOK_COMMENT:
2155bb6a25fSPoul-Henning Kamp return XML_ROLE_COMMENT;
2165bb6a25fSPoul-Henning Kamp case XML_TOK_INSTANCE_START:
2175bb6a25fSPoul-Henning Kamp state->handler = error;
2185bb6a25fSPoul-Henning Kamp return XML_ROLE_INSTANCE_START;
2195bb6a25fSPoul-Henning Kamp }
2205bb6a25fSPoul-Henning Kamp return common(state, tok);
2215bb6a25fSPoul-Henning Kamp }
2225bb6a25fSPoul-Henning Kamp
223220ed979SColeman Kane static int PTRCALL
doctype0(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)2246b2c1e49SXin LI doctype0(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
2256b2c1e49SXin LI const ENCODING *enc) {
2266b2c1e49SXin LI UNUSED_P(ptr);
2276b2c1e49SXin LI UNUSED_P(end);
2286b2c1e49SXin LI UNUSED_P(enc);
2295bb6a25fSPoul-Henning Kamp switch (tok) {
2305bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
2315bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_NONE;
2325bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
2335bb6a25fSPoul-Henning Kamp case XML_TOK_PREFIXED_NAME:
2345bb6a25fSPoul-Henning Kamp state->handler = doctype1;
2355bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_NAME;
2365bb6a25fSPoul-Henning Kamp }
2375bb6a25fSPoul-Henning Kamp return common(state, tok);
2385bb6a25fSPoul-Henning Kamp }
2395bb6a25fSPoul-Henning Kamp
240220ed979SColeman Kane static int PTRCALL
doctype1(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)2416b2c1e49SXin LI doctype1(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
2426b2c1e49SXin LI const ENCODING *enc) {
2435bb6a25fSPoul-Henning Kamp switch (tok) {
2445bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
2455bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_NONE;
2465bb6a25fSPoul-Henning Kamp case XML_TOK_OPEN_BRACKET:
2475bb6a25fSPoul-Henning Kamp state->handler = internalSubset;
2485bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
2495bb6a25fSPoul-Henning Kamp case XML_TOK_DECL_CLOSE:
2505bb6a25fSPoul-Henning Kamp state->handler = prolog2;
2515bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_CLOSE;
2525bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
2535bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
2545bb6a25fSPoul-Henning Kamp state->handler = doctype3;
2555bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_NONE;
2565bb6a25fSPoul-Henning Kamp }
2575bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
2585bb6a25fSPoul-Henning Kamp state->handler = doctype2;
2595bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_NONE;
2605bb6a25fSPoul-Henning Kamp }
2615bb6a25fSPoul-Henning Kamp break;
2625bb6a25fSPoul-Henning Kamp }
2635bb6a25fSPoul-Henning Kamp return common(state, tok);
2645bb6a25fSPoul-Henning Kamp }
2655bb6a25fSPoul-Henning Kamp
266220ed979SColeman Kane static int PTRCALL
doctype2(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)2676b2c1e49SXin LI doctype2(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
2686b2c1e49SXin LI const ENCODING *enc) {
2696b2c1e49SXin LI UNUSED_P(ptr);
2706b2c1e49SXin LI UNUSED_P(end);
2716b2c1e49SXin LI UNUSED_P(enc);
2725bb6a25fSPoul-Henning Kamp switch (tok) {
2735bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
2745bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_NONE;
2755bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
2765bb6a25fSPoul-Henning Kamp state->handler = doctype3;
2775bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_PUBLIC_ID;
2785bb6a25fSPoul-Henning Kamp }
2795bb6a25fSPoul-Henning Kamp return common(state, tok);
2805bb6a25fSPoul-Henning Kamp }
2815bb6a25fSPoul-Henning Kamp
282220ed979SColeman Kane static int PTRCALL
doctype3(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)2836b2c1e49SXin LI doctype3(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
2846b2c1e49SXin LI const ENCODING *enc) {
2856b2c1e49SXin LI UNUSED_P(ptr);
2866b2c1e49SXin LI UNUSED_P(end);
2876b2c1e49SXin LI UNUSED_P(enc);
2885bb6a25fSPoul-Henning Kamp switch (tok) {
2895bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
2905bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_NONE;
2915bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
2925bb6a25fSPoul-Henning Kamp state->handler = doctype4;
2935bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_SYSTEM_ID;
2945bb6a25fSPoul-Henning Kamp }
2955bb6a25fSPoul-Henning Kamp return common(state, tok);
2965bb6a25fSPoul-Henning Kamp }
2975bb6a25fSPoul-Henning Kamp
298220ed979SColeman Kane static int PTRCALL
doctype4(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)2996b2c1e49SXin LI doctype4(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
3006b2c1e49SXin LI const ENCODING *enc) {
3016b2c1e49SXin LI UNUSED_P(ptr);
3026b2c1e49SXin LI UNUSED_P(end);
3036b2c1e49SXin LI UNUSED_P(enc);
3045bb6a25fSPoul-Henning Kamp switch (tok) {
3055bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
3065bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_NONE;
3075bb6a25fSPoul-Henning Kamp case XML_TOK_OPEN_BRACKET:
3085bb6a25fSPoul-Henning Kamp state->handler = internalSubset;
3095bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
3105bb6a25fSPoul-Henning Kamp case XML_TOK_DECL_CLOSE:
3115bb6a25fSPoul-Henning Kamp state->handler = prolog2;
3125bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_CLOSE;
3135bb6a25fSPoul-Henning Kamp }
3145bb6a25fSPoul-Henning Kamp return common(state, tok);
3155bb6a25fSPoul-Henning Kamp }
3165bb6a25fSPoul-Henning Kamp
317220ed979SColeman Kane static int PTRCALL
doctype5(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)3186b2c1e49SXin LI doctype5(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
3196b2c1e49SXin LI const ENCODING *enc) {
3206b2c1e49SXin LI UNUSED_P(ptr);
3216b2c1e49SXin LI UNUSED_P(end);
3226b2c1e49SXin LI UNUSED_P(enc);
3235bb6a25fSPoul-Henning Kamp switch (tok) {
3245bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
3255bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_NONE;
3265bb6a25fSPoul-Henning Kamp case XML_TOK_DECL_CLOSE:
3275bb6a25fSPoul-Henning Kamp state->handler = prolog2;
3285bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_CLOSE;
3295bb6a25fSPoul-Henning Kamp }
3305bb6a25fSPoul-Henning Kamp return common(state, tok);
3315bb6a25fSPoul-Henning Kamp }
3325bb6a25fSPoul-Henning Kamp
333220ed979SColeman Kane static int PTRCALL
internalSubset(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)3346b2c1e49SXin LI internalSubset(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
3356b2c1e49SXin LI const ENCODING *enc) {
3365bb6a25fSPoul-Henning Kamp switch (tok) {
3375bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
3385bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
3395bb6a25fSPoul-Henning Kamp case XML_TOK_DECL_OPEN:
3406b2c1e49SXin LI if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end,
3415bb6a25fSPoul-Henning Kamp KW_ENTITY)) {
3425bb6a25fSPoul-Henning Kamp state->handler = entity0;
3435bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
3445bb6a25fSPoul-Henning Kamp }
3456b2c1e49SXin LI if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end,
3465bb6a25fSPoul-Henning Kamp KW_ATTLIST)) {
3475bb6a25fSPoul-Henning Kamp state->handler = attlist0;
3485bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
3495bb6a25fSPoul-Henning Kamp }
3506b2c1e49SXin LI if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end,
3515bb6a25fSPoul-Henning Kamp KW_ELEMENT)) {
3525bb6a25fSPoul-Henning Kamp state->handler = element0;
3535bb6a25fSPoul-Henning Kamp return XML_ROLE_ELEMENT_NONE;
3545bb6a25fSPoul-Henning Kamp }
3556b2c1e49SXin LI if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end,
3565bb6a25fSPoul-Henning Kamp KW_NOTATION)) {
3575bb6a25fSPoul-Henning Kamp state->handler = notation0;
3585bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_NONE;
3595bb6a25fSPoul-Henning Kamp }
3605bb6a25fSPoul-Henning Kamp break;
3615bb6a25fSPoul-Henning Kamp case XML_TOK_PI:
3625bb6a25fSPoul-Henning Kamp return XML_ROLE_PI;
3635bb6a25fSPoul-Henning Kamp case XML_TOK_COMMENT:
3645bb6a25fSPoul-Henning Kamp return XML_ROLE_COMMENT;
3655bb6a25fSPoul-Henning Kamp case XML_TOK_PARAM_ENTITY_REF:
3665bb6a25fSPoul-Henning Kamp return XML_ROLE_PARAM_ENTITY_REF;
3675bb6a25fSPoul-Henning Kamp case XML_TOK_CLOSE_BRACKET:
3685bb6a25fSPoul-Henning Kamp state->handler = doctype5;
3695bb6a25fSPoul-Henning Kamp return XML_ROLE_DOCTYPE_NONE;
370220ed979SColeman Kane case XML_TOK_NONE:
371220ed979SColeman Kane return XML_ROLE_NONE;
3725bb6a25fSPoul-Henning Kamp }
3735bb6a25fSPoul-Henning Kamp return common(state, tok);
3745bb6a25fSPoul-Henning Kamp }
3755bb6a25fSPoul-Henning Kamp
3765bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
3775bb6a25fSPoul-Henning Kamp
378220ed979SColeman Kane static int PTRCALL
externalSubset0(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)3796b2c1e49SXin LI externalSubset0(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
3806b2c1e49SXin LI const ENCODING *enc) {
3815bb6a25fSPoul-Henning Kamp state->handler = externalSubset1;
3825bb6a25fSPoul-Henning Kamp if (tok == XML_TOK_XML_DECL)
3835bb6a25fSPoul-Henning Kamp return XML_ROLE_TEXT_DECL;
3845bb6a25fSPoul-Henning Kamp return externalSubset1(state, tok, ptr, end, enc);
3855bb6a25fSPoul-Henning Kamp }
3865bb6a25fSPoul-Henning Kamp
387220ed979SColeman Kane static int PTRCALL
externalSubset1(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)3886b2c1e49SXin LI externalSubset1(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
3896b2c1e49SXin LI const ENCODING *enc) {
3905bb6a25fSPoul-Henning Kamp switch (tok) {
3915bb6a25fSPoul-Henning Kamp case XML_TOK_COND_SECT_OPEN:
3925bb6a25fSPoul-Henning Kamp state->handler = condSect0;
3935bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
3945bb6a25fSPoul-Henning Kamp case XML_TOK_COND_SECT_CLOSE:
3955bb6a25fSPoul-Henning Kamp if (state->includeLevel == 0)
3965bb6a25fSPoul-Henning Kamp break;
3975bb6a25fSPoul-Henning Kamp state->includeLevel -= 1;
3985bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
3995bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
4005bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
4015bb6a25fSPoul-Henning Kamp case XML_TOK_CLOSE_BRACKET:
4025bb6a25fSPoul-Henning Kamp break;
4035bb6a25fSPoul-Henning Kamp case XML_TOK_NONE:
4045bb6a25fSPoul-Henning Kamp if (state->includeLevel)
4055bb6a25fSPoul-Henning Kamp break;
4065bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
4075bb6a25fSPoul-Henning Kamp default:
4085bb6a25fSPoul-Henning Kamp return internalSubset(state, tok, ptr, end, enc);
4095bb6a25fSPoul-Henning Kamp }
4105bb6a25fSPoul-Henning Kamp return common(state, tok);
4115bb6a25fSPoul-Henning Kamp }
4125bb6a25fSPoul-Henning Kamp
4135bb6a25fSPoul-Henning Kamp #endif /* XML_DTD */
4145bb6a25fSPoul-Henning Kamp
415220ed979SColeman Kane static int PTRCALL
entity0(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)4166b2c1e49SXin LI entity0(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
4176b2c1e49SXin LI const ENCODING *enc) {
4186b2c1e49SXin LI UNUSED_P(ptr);
4196b2c1e49SXin LI UNUSED_P(end);
4206b2c1e49SXin LI UNUSED_P(enc);
4215bb6a25fSPoul-Henning Kamp switch (tok) {
4225bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
4235bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
4245bb6a25fSPoul-Henning Kamp case XML_TOK_PERCENT:
4255bb6a25fSPoul-Henning Kamp state->handler = entity1;
4265bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
4275bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
4285bb6a25fSPoul-Henning Kamp state->handler = entity2;
4295bb6a25fSPoul-Henning Kamp return XML_ROLE_GENERAL_ENTITY_NAME;
4305bb6a25fSPoul-Henning Kamp }
4315bb6a25fSPoul-Henning Kamp return common(state, tok);
4325bb6a25fSPoul-Henning Kamp }
4335bb6a25fSPoul-Henning Kamp
434220ed979SColeman Kane static int PTRCALL
entity1(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)4356b2c1e49SXin LI entity1(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
4366b2c1e49SXin LI const ENCODING *enc) {
4376b2c1e49SXin LI UNUSED_P(ptr);
4386b2c1e49SXin LI UNUSED_P(end);
4396b2c1e49SXin LI UNUSED_P(enc);
4405bb6a25fSPoul-Henning Kamp switch (tok) {
4415bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
4425bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
4435bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
4445bb6a25fSPoul-Henning Kamp state->handler = entity7;
4455bb6a25fSPoul-Henning Kamp return XML_ROLE_PARAM_ENTITY_NAME;
4465bb6a25fSPoul-Henning Kamp }
4475bb6a25fSPoul-Henning Kamp return common(state, tok);
4485bb6a25fSPoul-Henning Kamp }
4495bb6a25fSPoul-Henning Kamp
450220ed979SColeman Kane static int PTRCALL
entity2(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)4516b2c1e49SXin LI entity2(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
4526b2c1e49SXin LI const ENCODING *enc) {
4535bb6a25fSPoul-Henning Kamp switch (tok) {
4545bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
4555bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
4565bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
4575bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
4585bb6a25fSPoul-Henning Kamp state->handler = entity4;
4595bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
4605bb6a25fSPoul-Henning Kamp }
4615bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
4625bb6a25fSPoul-Henning Kamp state->handler = entity3;
4635bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
4645bb6a25fSPoul-Henning Kamp }
4655bb6a25fSPoul-Henning Kamp break;
4665bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
4675bb6a25fSPoul-Henning Kamp state->handler = declClose;
4685bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_ENTITY_NONE;
4695bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_VALUE;
4705bb6a25fSPoul-Henning Kamp }
4715bb6a25fSPoul-Henning Kamp return common(state, tok);
4725bb6a25fSPoul-Henning Kamp }
4735bb6a25fSPoul-Henning Kamp
474220ed979SColeman Kane static int PTRCALL
entity3(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)4756b2c1e49SXin LI entity3(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
4766b2c1e49SXin LI const ENCODING *enc) {
4776b2c1e49SXin LI UNUSED_P(ptr);
4786b2c1e49SXin LI UNUSED_P(end);
4796b2c1e49SXin LI UNUSED_P(enc);
4805bb6a25fSPoul-Henning Kamp switch (tok) {
4815bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
4825bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
4835bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
4845bb6a25fSPoul-Henning Kamp state->handler = entity4;
4855bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_PUBLIC_ID;
4865bb6a25fSPoul-Henning Kamp }
4875bb6a25fSPoul-Henning Kamp return common(state, tok);
4885bb6a25fSPoul-Henning Kamp }
4895bb6a25fSPoul-Henning Kamp
490220ed979SColeman Kane static int PTRCALL
entity4(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)4916b2c1e49SXin LI entity4(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
4926b2c1e49SXin LI const ENCODING *enc) {
4936b2c1e49SXin LI UNUSED_P(ptr);
4946b2c1e49SXin LI UNUSED_P(end);
4956b2c1e49SXin LI UNUSED_P(enc);
4965bb6a25fSPoul-Henning Kamp switch (tok) {
4975bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
4985bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
4995bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
5005bb6a25fSPoul-Henning Kamp state->handler = entity5;
5015bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_SYSTEM_ID;
5025bb6a25fSPoul-Henning Kamp }
5035bb6a25fSPoul-Henning Kamp return common(state, tok);
5045bb6a25fSPoul-Henning Kamp }
5055bb6a25fSPoul-Henning Kamp
506220ed979SColeman Kane static int PTRCALL
entity5(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)5076b2c1e49SXin LI entity5(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
5086b2c1e49SXin LI const ENCODING *enc) {
5095bb6a25fSPoul-Henning Kamp switch (tok) {
5105bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
5115bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
5125bb6a25fSPoul-Henning Kamp case XML_TOK_DECL_CLOSE:
5135bb6a25fSPoul-Henning Kamp setTopLevel(state);
5145bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_COMPLETE;
5155bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
5165bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) {
5175bb6a25fSPoul-Henning Kamp state->handler = entity6;
5185bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
5195bb6a25fSPoul-Henning Kamp }
5205bb6a25fSPoul-Henning Kamp break;
5215bb6a25fSPoul-Henning Kamp }
5225bb6a25fSPoul-Henning Kamp return common(state, tok);
5235bb6a25fSPoul-Henning Kamp }
5245bb6a25fSPoul-Henning Kamp
525220ed979SColeman Kane static int PTRCALL
entity6(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)5266b2c1e49SXin LI entity6(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
5276b2c1e49SXin LI const ENCODING *enc) {
5286b2c1e49SXin LI UNUSED_P(ptr);
5296b2c1e49SXin LI UNUSED_P(end);
5306b2c1e49SXin LI UNUSED_P(enc);
5315bb6a25fSPoul-Henning Kamp switch (tok) {
5325bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
5335bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
5345bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
5355bb6a25fSPoul-Henning Kamp state->handler = declClose;
5365bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_ENTITY_NONE;
5375bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NOTATION_NAME;
5385bb6a25fSPoul-Henning Kamp }
5395bb6a25fSPoul-Henning Kamp return common(state, tok);
5405bb6a25fSPoul-Henning Kamp }
5415bb6a25fSPoul-Henning Kamp
542220ed979SColeman Kane static int PTRCALL
entity7(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)5436b2c1e49SXin LI entity7(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
5446b2c1e49SXin LI const ENCODING *enc) {
5455bb6a25fSPoul-Henning Kamp switch (tok) {
5465bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
5475bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
5485bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
5495bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
5505bb6a25fSPoul-Henning Kamp state->handler = entity9;
5515bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
5525bb6a25fSPoul-Henning Kamp }
5535bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
5545bb6a25fSPoul-Henning Kamp state->handler = entity8;
5555bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
5565bb6a25fSPoul-Henning Kamp }
5575bb6a25fSPoul-Henning Kamp break;
5585bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
5595bb6a25fSPoul-Henning Kamp state->handler = declClose;
5605bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_ENTITY_NONE;
5615bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_VALUE;
5625bb6a25fSPoul-Henning Kamp }
5635bb6a25fSPoul-Henning Kamp return common(state, tok);
5645bb6a25fSPoul-Henning Kamp }
5655bb6a25fSPoul-Henning Kamp
566220ed979SColeman Kane static int PTRCALL
entity8(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)5676b2c1e49SXin LI entity8(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
5686b2c1e49SXin LI const ENCODING *enc) {
5696b2c1e49SXin LI UNUSED_P(ptr);
5706b2c1e49SXin LI UNUSED_P(end);
5716b2c1e49SXin LI UNUSED_P(enc);
5725bb6a25fSPoul-Henning Kamp switch (tok) {
5735bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
5745bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
5755bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
5765bb6a25fSPoul-Henning Kamp state->handler = entity9;
5775bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_PUBLIC_ID;
5785bb6a25fSPoul-Henning Kamp }
5795bb6a25fSPoul-Henning Kamp return common(state, tok);
5805bb6a25fSPoul-Henning Kamp }
5815bb6a25fSPoul-Henning Kamp
582220ed979SColeman Kane static int PTRCALL
entity9(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)5836b2c1e49SXin LI entity9(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
5846b2c1e49SXin LI const ENCODING *enc) {
5856b2c1e49SXin LI UNUSED_P(ptr);
5866b2c1e49SXin LI UNUSED_P(end);
5876b2c1e49SXin LI UNUSED_P(enc);
5885bb6a25fSPoul-Henning Kamp switch (tok) {
5895bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
5905bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
5915bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
5925bb6a25fSPoul-Henning Kamp state->handler = entity10;
5935bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_SYSTEM_ID;
5945bb6a25fSPoul-Henning Kamp }
5955bb6a25fSPoul-Henning Kamp return common(state, tok);
5965bb6a25fSPoul-Henning Kamp }
5975bb6a25fSPoul-Henning Kamp
598220ed979SColeman Kane static int PTRCALL
entity10(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)5996b2c1e49SXin LI entity10(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
6006b2c1e49SXin LI const ENCODING *enc) {
6016b2c1e49SXin LI UNUSED_P(ptr);
6026b2c1e49SXin LI UNUSED_P(end);
6036b2c1e49SXin LI UNUSED_P(enc);
6045bb6a25fSPoul-Henning Kamp switch (tok) {
6055bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
6065bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_NONE;
6075bb6a25fSPoul-Henning Kamp case XML_TOK_DECL_CLOSE:
6085bb6a25fSPoul-Henning Kamp setTopLevel(state);
6095bb6a25fSPoul-Henning Kamp return XML_ROLE_ENTITY_COMPLETE;
6105bb6a25fSPoul-Henning Kamp }
6115bb6a25fSPoul-Henning Kamp return common(state, tok);
6125bb6a25fSPoul-Henning Kamp }
6135bb6a25fSPoul-Henning Kamp
614220ed979SColeman Kane static int PTRCALL
notation0(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)6156b2c1e49SXin LI notation0(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
6166b2c1e49SXin LI const ENCODING *enc) {
6176b2c1e49SXin LI UNUSED_P(ptr);
6186b2c1e49SXin LI UNUSED_P(end);
6196b2c1e49SXin LI UNUSED_P(enc);
6205bb6a25fSPoul-Henning Kamp switch (tok) {
6215bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
6225bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_NONE;
6235bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
6245bb6a25fSPoul-Henning Kamp state->handler = notation1;
6255bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_NAME;
6265bb6a25fSPoul-Henning Kamp }
6275bb6a25fSPoul-Henning Kamp return common(state, tok);
6285bb6a25fSPoul-Henning Kamp }
6295bb6a25fSPoul-Henning Kamp
630220ed979SColeman Kane static int PTRCALL
notation1(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)6316b2c1e49SXin LI notation1(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
6326b2c1e49SXin LI const ENCODING *enc) {
6335bb6a25fSPoul-Henning Kamp switch (tok) {
6345bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
6355bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_NONE;
6365bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
6375bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
6385bb6a25fSPoul-Henning Kamp state->handler = notation3;
6395bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_NONE;
6405bb6a25fSPoul-Henning Kamp }
6415bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
6425bb6a25fSPoul-Henning Kamp state->handler = notation2;
6435bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_NONE;
6445bb6a25fSPoul-Henning Kamp }
6455bb6a25fSPoul-Henning Kamp break;
6465bb6a25fSPoul-Henning Kamp }
6475bb6a25fSPoul-Henning Kamp return common(state, tok);
6485bb6a25fSPoul-Henning Kamp }
6495bb6a25fSPoul-Henning Kamp
650220ed979SColeman Kane static int PTRCALL
notation2(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)6516b2c1e49SXin LI notation2(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
6526b2c1e49SXin LI const ENCODING *enc) {
6536b2c1e49SXin LI UNUSED_P(ptr);
6546b2c1e49SXin LI UNUSED_P(end);
6556b2c1e49SXin LI UNUSED_P(enc);
6565bb6a25fSPoul-Henning Kamp switch (tok) {
6575bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
6585bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_NONE;
6595bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
6605bb6a25fSPoul-Henning Kamp state->handler = notation4;
6615bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_PUBLIC_ID;
6625bb6a25fSPoul-Henning Kamp }
6635bb6a25fSPoul-Henning Kamp return common(state, tok);
6645bb6a25fSPoul-Henning Kamp }
6655bb6a25fSPoul-Henning Kamp
666220ed979SColeman Kane static int PTRCALL
notation3(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)6676b2c1e49SXin LI notation3(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
6686b2c1e49SXin LI const ENCODING *enc) {
6696b2c1e49SXin LI UNUSED_P(ptr);
6706b2c1e49SXin LI UNUSED_P(end);
6716b2c1e49SXin LI UNUSED_P(enc);
6725bb6a25fSPoul-Henning Kamp switch (tok) {
6735bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
6745bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_NONE;
6755bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
6765bb6a25fSPoul-Henning Kamp state->handler = declClose;
6775bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_NOTATION_NONE;
6785bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_SYSTEM_ID;
6795bb6a25fSPoul-Henning Kamp }
6805bb6a25fSPoul-Henning Kamp return common(state, tok);
6815bb6a25fSPoul-Henning Kamp }
6825bb6a25fSPoul-Henning Kamp
683220ed979SColeman Kane static int PTRCALL
notation4(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)6846b2c1e49SXin LI notation4(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
6856b2c1e49SXin LI const ENCODING *enc) {
6866b2c1e49SXin LI UNUSED_P(ptr);
6876b2c1e49SXin LI UNUSED_P(end);
6886b2c1e49SXin LI UNUSED_P(enc);
6895bb6a25fSPoul-Henning Kamp switch (tok) {
6905bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
6915bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_NONE;
6925bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
6935bb6a25fSPoul-Henning Kamp state->handler = declClose;
6945bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_NOTATION_NONE;
6955bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_SYSTEM_ID;
6965bb6a25fSPoul-Henning Kamp case XML_TOK_DECL_CLOSE:
6975bb6a25fSPoul-Henning Kamp setTopLevel(state);
6985bb6a25fSPoul-Henning Kamp return XML_ROLE_NOTATION_NO_SYSTEM_ID;
6995bb6a25fSPoul-Henning Kamp }
7005bb6a25fSPoul-Henning Kamp return common(state, tok);
7015bb6a25fSPoul-Henning Kamp }
7025bb6a25fSPoul-Henning Kamp
703220ed979SColeman Kane static int PTRCALL
attlist0(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)7046b2c1e49SXin LI attlist0(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
7056b2c1e49SXin LI const ENCODING *enc) {
7066b2c1e49SXin LI UNUSED_P(ptr);
7076b2c1e49SXin LI UNUSED_P(end);
7086b2c1e49SXin LI UNUSED_P(enc);
7095bb6a25fSPoul-Henning Kamp switch (tok) {
7105bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
7115bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
7125bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
7135bb6a25fSPoul-Henning Kamp case XML_TOK_PREFIXED_NAME:
7145bb6a25fSPoul-Henning Kamp state->handler = attlist1;
7155bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_ELEMENT_NAME;
7165bb6a25fSPoul-Henning Kamp }
7175bb6a25fSPoul-Henning Kamp return common(state, tok);
7185bb6a25fSPoul-Henning Kamp }
7195bb6a25fSPoul-Henning Kamp
720220ed979SColeman Kane static int PTRCALL
attlist1(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)7216b2c1e49SXin LI attlist1(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
7226b2c1e49SXin LI const ENCODING *enc) {
7236b2c1e49SXin LI UNUSED_P(ptr);
7246b2c1e49SXin LI UNUSED_P(end);
7256b2c1e49SXin LI UNUSED_P(enc);
7265bb6a25fSPoul-Henning Kamp switch (tok) {
7275bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
7285bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
7295bb6a25fSPoul-Henning Kamp case XML_TOK_DECL_CLOSE:
7305bb6a25fSPoul-Henning Kamp setTopLevel(state);
7315bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
7325bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
7335bb6a25fSPoul-Henning Kamp case XML_TOK_PREFIXED_NAME:
7345bb6a25fSPoul-Henning Kamp state->handler = attlist2;
7355bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTRIBUTE_NAME;
7365bb6a25fSPoul-Henning Kamp }
7375bb6a25fSPoul-Henning Kamp return common(state, tok);
7385bb6a25fSPoul-Henning Kamp }
7395bb6a25fSPoul-Henning Kamp
740220ed979SColeman Kane static int PTRCALL
attlist2(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)7416b2c1e49SXin LI attlist2(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
7426b2c1e49SXin LI const ENCODING *enc) {
7435bb6a25fSPoul-Henning Kamp switch (tok) {
7445bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
7455bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
7466b2c1e49SXin LI case XML_TOK_NAME: {
747220ed979SColeman Kane static const char *const types[] = {
7486b2c1e49SXin LI KW_CDATA, KW_ID, KW_IDREF, KW_IDREFS,
7496b2c1e49SXin LI KW_ENTITY, KW_ENTITIES, KW_NMTOKEN, KW_NMTOKENS,
7505bb6a25fSPoul-Henning Kamp };
7515bb6a25fSPoul-Henning Kamp int i;
7525bb6a25fSPoul-Henning Kamp for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i++)
7535bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, types[i])) {
7545bb6a25fSPoul-Henning Kamp state->handler = attlist8;
7555bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i;
7565bb6a25fSPoul-Henning Kamp }
7575bb6a25fSPoul-Henning Kamp }
7585bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) {
7595bb6a25fSPoul-Henning Kamp state->handler = attlist5;
7605bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
7615bb6a25fSPoul-Henning Kamp }
7625bb6a25fSPoul-Henning Kamp break;
7635bb6a25fSPoul-Henning Kamp case XML_TOK_OPEN_PAREN:
7645bb6a25fSPoul-Henning Kamp state->handler = attlist3;
7655bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
7665bb6a25fSPoul-Henning Kamp }
7675bb6a25fSPoul-Henning Kamp return common(state, tok);
7685bb6a25fSPoul-Henning Kamp }
7695bb6a25fSPoul-Henning Kamp
770220ed979SColeman Kane static int PTRCALL
attlist3(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)7716b2c1e49SXin LI attlist3(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
7726b2c1e49SXin LI const ENCODING *enc) {
7736b2c1e49SXin LI UNUSED_P(ptr);
7746b2c1e49SXin LI UNUSED_P(end);
7756b2c1e49SXin LI UNUSED_P(enc);
7765bb6a25fSPoul-Henning Kamp switch (tok) {
7775bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
7785bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
7795bb6a25fSPoul-Henning Kamp case XML_TOK_NMTOKEN:
7805bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
7815bb6a25fSPoul-Henning Kamp case XML_TOK_PREFIXED_NAME:
7825bb6a25fSPoul-Henning Kamp state->handler = attlist4;
7835bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTRIBUTE_ENUM_VALUE;
7845bb6a25fSPoul-Henning Kamp }
7855bb6a25fSPoul-Henning Kamp return common(state, tok);
7865bb6a25fSPoul-Henning Kamp }
7875bb6a25fSPoul-Henning Kamp
788220ed979SColeman Kane static int PTRCALL
attlist4(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)7896b2c1e49SXin LI attlist4(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
7906b2c1e49SXin LI const ENCODING *enc) {
7916b2c1e49SXin LI UNUSED_P(ptr);
7926b2c1e49SXin LI UNUSED_P(end);
7936b2c1e49SXin LI UNUSED_P(enc);
7945bb6a25fSPoul-Henning Kamp switch (tok) {
7955bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
7965bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
7975bb6a25fSPoul-Henning Kamp case XML_TOK_CLOSE_PAREN:
7985bb6a25fSPoul-Henning Kamp state->handler = attlist8;
7995bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
8005bb6a25fSPoul-Henning Kamp case XML_TOK_OR:
8015bb6a25fSPoul-Henning Kamp state->handler = attlist3;
8025bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
8035bb6a25fSPoul-Henning Kamp }
8045bb6a25fSPoul-Henning Kamp return common(state, tok);
8055bb6a25fSPoul-Henning Kamp }
8065bb6a25fSPoul-Henning Kamp
807220ed979SColeman Kane static int PTRCALL
attlist5(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)8086b2c1e49SXin LI attlist5(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
8096b2c1e49SXin LI const ENCODING *enc) {
8106b2c1e49SXin LI UNUSED_P(ptr);
8116b2c1e49SXin LI UNUSED_P(end);
8126b2c1e49SXin LI UNUSED_P(enc);
8135bb6a25fSPoul-Henning Kamp switch (tok) {
8145bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
8155bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
8165bb6a25fSPoul-Henning Kamp case XML_TOK_OPEN_PAREN:
8175bb6a25fSPoul-Henning Kamp state->handler = attlist6;
8185bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
8195bb6a25fSPoul-Henning Kamp }
8205bb6a25fSPoul-Henning Kamp return common(state, tok);
8215bb6a25fSPoul-Henning Kamp }
8225bb6a25fSPoul-Henning Kamp
823220ed979SColeman Kane static int PTRCALL
attlist6(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)8246b2c1e49SXin LI attlist6(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
8256b2c1e49SXin LI const ENCODING *enc) {
8266b2c1e49SXin LI UNUSED_P(ptr);
8276b2c1e49SXin LI UNUSED_P(end);
8286b2c1e49SXin LI UNUSED_P(enc);
8295bb6a25fSPoul-Henning Kamp switch (tok) {
8305bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
8315bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
8325bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
8335bb6a25fSPoul-Henning Kamp state->handler = attlist7;
8345bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTRIBUTE_NOTATION_VALUE;
8355bb6a25fSPoul-Henning Kamp }
8365bb6a25fSPoul-Henning Kamp return common(state, tok);
8375bb6a25fSPoul-Henning Kamp }
8385bb6a25fSPoul-Henning Kamp
839220ed979SColeman Kane static int PTRCALL
attlist7(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)8406b2c1e49SXin LI attlist7(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
8416b2c1e49SXin LI const ENCODING *enc) {
8426b2c1e49SXin LI UNUSED_P(ptr);
8436b2c1e49SXin LI UNUSED_P(end);
8446b2c1e49SXin LI UNUSED_P(enc);
8455bb6a25fSPoul-Henning Kamp switch (tok) {
8465bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
8475bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
8485bb6a25fSPoul-Henning Kamp case XML_TOK_CLOSE_PAREN:
8495bb6a25fSPoul-Henning Kamp state->handler = attlist8;
8505bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
8515bb6a25fSPoul-Henning Kamp case XML_TOK_OR:
8525bb6a25fSPoul-Henning Kamp state->handler = attlist6;
8535bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
8545bb6a25fSPoul-Henning Kamp }
8555bb6a25fSPoul-Henning Kamp return common(state, tok);
8565bb6a25fSPoul-Henning Kamp }
8575bb6a25fSPoul-Henning Kamp
8585bb6a25fSPoul-Henning Kamp /* default value */
859220ed979SColeman Kane static int PTRCALL
attlist8(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)8606b2c1e49SXin LI attlist8(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
8616b2c1e49SXin LI const ENCODING *enc) {
8625bb6a25fSPoul-Henning Kamp switch (tok) {
8635bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
8645bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
8655bb6a25fSPoul-Henning Kamp case XML_TOK_POUND_NAME:
8666b2c1e49SXin LI if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end,
8675bb6a25fSPoul-Henning Kamp KW_IMPLIED)) {
8685bb6a25fSPoul-Henning Kamp state->handler = attlist1;
8695bb6a25fSPoul-Henning Kamp return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE;
8705bb6a25fSPoul-Henning Kamp }
8716b2c1e49SXin LI if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end,
8725bb6a25fSPoul-Henning Kamp KW_REQUIRED)) {
8735bb6a25fSPoul-Henning Kamp state->handler = attlist1;
8745bb6a25fSPoul-Henning Kamp return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE;
8755bb6a25fSPoul-Henning Kamp }
8766b2c1e49SXin LI if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end,
8775bb6a25fSPoul-Henning Kamp KW_FIXED)) {
8785bb6a25fSPoul-Henning Kamp state->handler = attlist9;
8795bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
8805bb6a25fSPoul-Henning Kamp }
8815bb6a25fSPoul-Henning Kamp break;
8825bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
8835bb6a25fSPoul-Henning Kamp state->handler = attlist1;
8845bb6a25fSPoul-Henning Kamp return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE;
8855bb6a25fSPoul-Henning Kamp }
8865bb6a25fSPoul-Henning Kamp return common(state, tok);
8875bb6a25fSPoul-Henning Kamp }
8885bb6a25fSPoul-Henning Kamp
889220ed979SColeman Kane static int PTRCALL
attlist9(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)8906b2c1e49SXin LI attlist9(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
8916b2c1e49SXin LI const ENCODING *enc) {
8926b2c1e49SXin LI UNUSED_P(ptr);
8936b2c1e49SXin LI UNUSED_P(end);
8946b2c1e49SXin LI UNUSED_P(enc);
8955bb6a25fSPoul-Henning Kamp switch (tok) {
8965bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
8975bb6a25fSPoul-Henning Kamp return XML_ROLE_ATTLIST_NONE;
8985bb6a25fSPoul-Henning Kamp case XML_TOK_LITERAL:
8995bb6a25fSPoul-Henning Kamp state->handler = attlist1;
9005bb6a25fSPoul-Henning Kamp return XML_ROLE_FIXED_ATTRIBUTE_VALUE;
9015bb6a25fSPoul-Henning Kamp }
9025bb6a25fSPoul-Henning Kamp return common(state, tok);
9035bb6a25fSPoul-Henning Kamp }
9045bb6a25fSPoul-Henning Kamp
905220ed979SColeman Kane static int PTRCALL
element0(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)9066b2c1e49SXin LI element0(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
9076b2c1e49SXin LI const ENCODING *enc) {
9086b2c1e49SXin LI UNUSED_P(ptr);
9096b2c1e49SXin LI UNUSED_P(end);
9106b2c1e49SXin LI UNUSED_P(enc);
9115bb6a25fSPoul-Henning Kamp switch (tok) {
9125bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
9135bb6a25fSPoul-Henning Kamp return XML_ROLE_ELEMENT_NONE;
9145bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
9155bb6a25fSPoul-Henning Kamp case XML_TOK_PREFIXED_NAME:
9165bb6a25fSPoul-Henning Kamp state->handler = element1;
9175bb6a25fSPoul-Henning Kamp return XML_ROLE_ELEMENT_NAME;
9185bb6a25fSPoul-Henning Kamp }
9195bb6a25fSPoul-Henning Kamp return common(state, tok);
9205bb6a25fSPoul-Henning Kamp }
9215bb6a25fSPoul-Henning Kamp
922220ed979SColeman Kane static int PTRCALL
element1(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)9236b2c1e49SXin LI element1(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
9246b2c1e49SXin LI const ENCODING *enc) {
9255bb6a25fSPoul-Henning Kamp switch (tok) {
9265bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
9275bb6a25fSPoul-Henning Kamp return XML_ROLE_ELEMENT_NONE;
9285bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
9295bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) {
9305bb6a25fSPoul-Henning Kamp state->handler = declClose;
9315bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_ELEMENT_NONE;
9325bb6a25fSPoul-Henning Kamp return XML_ROLE_CONTENT_EMPTY;
9335bb6a25fSPoul-Henning Kamp }
9345bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) {
9355bb6a25fSPoul-Henning Kamp state->handler = declClose;
9365bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_ELEMENT_NONE;
9375bb6a25fSPoul-Henning Kamp return XML_ROLE_CONTENT_ANY;
9385bb6a25fSPoul-Henning Kamp }
9395bb6a25fSPoul-Henning Kamp break;
9405bb6a25fSPoul-Henning Kamp case XML_TOK_OPEN_PAREN:
9415bb6a25fSPoul-Henning Kamp state->handler = element2;
9425bb6a25fSPoul-Henning Kamp state->level = 1;
9435bb6a25fSPoul-Henning Kamp return XML_ROLE_GROUP_OPEN;
9445bb6a25fSPoul-Henning Kamp }
9455bb6a25fSPoul-Henning Kamp return common(state, tok);
9465bb6a25fSPoul-Henning Kamp }
9475bb6a25fSPoul-Henning Kamp
948220ed979SColeman Kane static int PTRCALL
element2(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)9496b2c1e49SXin LI element2(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
9506b2c1e49SXin LI const ENCODING *enc) {
9515bb6a25fSPoul-Henning Kamp switch (tok) {
9525bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
9535bb6a25fSPoul-Henning Kamp return XML_ROLE_ELEMENT_NONE;
9545bb6a25fSPoul-Henning Kamp case XML_TOK_POUND_NAME:
9556b2c1e49SXin LI if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end,
9565bb6a25fSPoul-Henning Kamp KW_PCDATA)) {
9575bb6a25fSPoul-Henning Kamp state->handler = element3;
9585bb6a25fSPoul-Henning Kamp return XML_ROLE_CONTENT_PCDATA;
9595bb6a25fSPoul-Henning Kamp }
9605bb6a25fSPoul-Henning Kamp break;
9615bb6a25fSPoul-Henning Kamp case XML_TOK_OPEN_PAREN:
9625bb6a25fSPoul-Henning Kamp state->level = 2;
9635bb6a25fSPoul-Henning Kamp state->handler = element6;
9645bb6a25fSPoul-Henning Kamp return XML_ROLE_GROUP_OPEN;
9655bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
9665bb6a25fSPoul-Henning Kamp case XML_TOK_PREFIXED_NAME:
9675bb6a25fSPoul-Henning Kamp state->handler = element7;
9685bb6a25fSPoul-Henning Kamp return XML_ROLE_CONTENT_ELEMENT;
9695bb6a25fSPoul-Henning Kamp case XML_TOK_NAME_QUESTION:
9705bb6a25fSPoul-Henning Kamp state->handler = element7;
9715bb6a25fSPoul-Henning Kamp return XML_ROLE_CONTENT_ELEMENT_OPT;
9725bb6a25fSPoul-Henning Kamp case XML_TOK_NAME_ASTERISK:
9735bb6a25fSPoul-Henning Kamp state->handler = element7;
9745bb6a25fSPoul-Henning Kamp return XML_ROLE_CONTENT_ELEMENT_REP;
9755bb6a25fSPoul-Henning Kamp case XML_TOK_NAME_PLUS:
9765bb6a25fSPoul-Henning Kamp state->handler = element7;
9775bb6a25fSPoul-Henning Kamp return XML_ROLE_CONTENT_ELEMENT_PLUS;
9785bb6a25fSPoul-Henning Kamp }
9795bb6a25fSPoul-Henning Kamp return common(state, tok);
9805bb6a25fSPoul-Henning Kamp }
9815bb6a25fSPoul-Henning Kamp
982220ed979SColeman Kane static int PTRCALL
element3(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)9836b2c1e49SXin LI element3(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
9846b2c1e49SXin LI const ENCODING *enc) {
9856b2c1e49SXin LI UNUSED_P(ptr);
9866b2c1e49SXin LI UNUSED_P(end);
9876b2c1e49SXin LI UNUSED_P(enc);
9885bb6a25fSPoul-Henning Kamp switch (tok) {
9895bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
9905bb6a25fSPoul-Henning Kamp return XML_ROLE_ELEMENT_NONE;
9915bb6a25fSPoul-Henning Kamp case XML_TOK_CLOSE_PAREN:
9925bb6a25fSPoul-Henning Kamp state->handler = declClose;
9935bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_ELEMENT_NONE;
9945bb6a25fSPoul-Henning Kamp return XML_ROLE_GROUP_CLOSE;
9955bb6a25fSPoul-Henning Kamp case XML_TOK_CLOSE_PAREN_ASTERISK:
9965bb6a25fSPoul-Henning Kamp state->handler = declClose;
9975bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_ELEMENT_NONE;
9985bb6a25fSPoul-Henning Kamp return XML_ROLE_GROUP_CLOSE_REP;
9995bb6a25fSPoul-Henning Kamp case XML_TOK_OR:
10005bb6a25fSPoul-Henning Kamp state->handler = element4;
10015bb6a25fSPoul-Henning Kamp return XML_ROLE_ELEMENT_NONE;
10025bb6a25fSPoul-Henning Kamp }
10035bb6a25fSPoul-Henning Kamp return common(state, tok);
10045bb6a25fSPoul-Henning Kamp }
10055bb6a25fSPoul-Henning Kamp
1006220ed979SColeman Kane static int PTRCALL
element4(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)10076b2c1e49SXin LI element4(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
10086b2c1e49SXin LI const ENCODING *enc) {
10096b2c1e49SXin LI UNUSED_P(ptr);
10106b2c1e49SXin LI UNUSED_P(end);
10116b2c1e49SXin LI UNUSED_P(enc);
10125bb6a25fSPoul-Henning Kamp switch (tok) {
10135bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
10145bb6a25fSPoul-Henning Kamp return XML_ROLE_ELEMENT_NONE;
10155bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
10165bb6a25fSPoul-Henning Kamp case XML_TOK_PREFIXED_NAME:
10175bb6a25fSPoul-Henning Kamp state->handler = element5;
10185bb6a25fSPoul-Henning Kamp return XML_ROLE_CONTENT_ELEMENT;
10195bb6a25fSPoul-Henning Kamp }
10205bb6a25fSPoul-Henning Kamp return common(state, tok);
10215bb6a25fSPoul-Henning Kamp }
10225bb6a25fSPoul-Henning Kamp
1023220ed979SColeman Kane static int PTRCALL
element5(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)10246b2c1e49SXin LI element5(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
10256b2c1e49SXin LI const ENCODING *enc) {
10266b2c1e49SXin LI UNUSED_P(ptr);
10276b2c1e49SXin LI UNUSED_P(end);
10286b2c1e49SXin LI UNUSED_P(enc);
10295bb6a25fSPoul-Henning Kamp switch (tok) {
10305bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
10315bb6a25fSPoul-Henning Kamp return XML_ROLE_ELEMENT_NONE;
10325bb6a25fSPoul-Henning Kamp case XML_TOK_CLOSE_PAREN_ASTERISK:
10335bb6a25fSPoul-Henning Kamp state->handler = declClose;
10345bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_ELEMENT_NONE;
10355bb6a25fSPoul-Henning Kamp return XML_ROLE_GROUP_CLOSE_REP;
10365bb6a25fSPoul-Henning Kamp case XML_TOK_OR:
10375bb6a25fSPoul-Henning Kamp state->handler = element4;
10385bb6a25fSPoul-Henning Kamp return XML_ROLE_ELEMENT_NONE;
10395bb6a25fSPoul-Henning Kamp }
10405bb6a25fSPoul-Henning Kamp return common(state, tok);
10415bb6a25fSPoul-Henning Kamp }
10425bb6a25fSPoul-Henning Kamp
1043220ed979SColeman Kane static int PTRCALL
element6(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)10446b2c1e49SXin LI element6(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
10456b2c1e49SXin LI const ENCODING *enc) {
10466b2c1e49SXin LI UNUSED_P(ptr);
10476b2c1e49SXin LI UNUSED_P(end);
10486b2c1e49SXin LI UNUSED_P(enc);
10495bb6a25fSPoul-Henning Kamp switch (tok) {
10505bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
10515bb6a25fSPoul-Henning Kamp return XML_ROLE_ELEMENT_NONE;
10525bb6a25fSPoul-Henning Kamp case XML_TOK_OPEN_PAREN:
10535bb6a25fSPoul-Henning Kamp state->level += 1;
10545bb6a25fSPoul-Henning Kamp return XML_ROLE_GROUP_OPEN;
10555bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
10565bb6a25fSPoul-Henning Kamp case XML_TOK_PREFIXED_NAME:
10575bb6a25fSPoul-Henning Kamp state->handler = element7;
10585bb6a25fSPoul-Henning Kamp return XML_ROLE_CONTENT_ELEMENT;
10595bb6a25fSPoul-Henning Kamp case XML_TOK_NAME_QUESTION:
10605bb6a25fSPoul-Henning Kamp state->handler = element7;
10615bb6a25fSPoul-Henning Kamp return XML_ROLE_CONTENT_ELEMENT_OPT;
10625bb6a25fSPoul-Henning Kamp case XML_TOK_NAME_ASTERISK:
10635bb6a25fSPoul-Henning Kamp state->handler = element7;
10645bb6a25fSPoul-Henning Kamp return XML_ROLE_CONTENT_ELEMENT_REP;
10655bb6a25fSPoul-Henning Kamp case XML_TOK_NAME_PLUS:
10665bb6a25fSPoul-Henning Kamp state->handler = element7;
10675bb6a25fSPoul-Henning Kamp return XML_ROLE_CONTENT_ELEMENT_PLUS;
10685bb6a25fSPoul-Henning Kamp }
10695bb6a25fSPoul-Henning Kamp return common(state, tok);
10705bb6a25fSPoul-Henning Kamp }
10715bb6a25fSPoul-Henning Kamp
1072220ed979SColeman Kane static int PTRCALL
element7(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)10736b2c1e49SXin LI element7(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
10746b2c1e49SXin LI const ENCODING *enc) {
10756b2c1e49SXin LI UNUSED_P(ptr);
10766b2c1e49SXin LI UNUSED_P(end);
10776b2c1e49SXin LI UNUSED_P(enc);
10785bb6a25fSPoul-Henning Kamp switch (tok) {
10795bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
10805bb6a25fSPoul-Henning Kamp return XML_ROLE_ELEMENT_NONE;
10815bb6a25fSPoul-Henning Kamp case XML_TOK_CLOSE_PAREN:
10825bb6a25fSPoul-Henning Kamp state->level -= 1;
10835bb6a25fSPoul-Henning Kamp if (state->level == 0) {
10845bb6a25fSPoul-Henning Kamp state->handler = declClose;
10855bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_ELEMENT_NONE;
10865bb6a25fSPoul-Henning Kamp }
10875bb6a25fSPoul-Henning Kamp return XML_ROLE_GROUP_CLOSE;
10885bb6a25fSPoul-Henning Kamp case XML_TOK_CLOSE_PAREN_ASTERISK:
10895bb6a25fSPoul-Henning Kamp state->level -= 1;
10905bb6a25fSPoul-Henning Kamp if (state->level == 0) {
10915bb6a25fSPoul-Henning Kamp state->handler = declClose;
10925bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_ELEMENT_NONE;
10935bb6a25fSPoul-Henning Kamp }
10945bb6a25fSPoul-Henning Kamp return XML_ROLE_GROUP_CLOSE_REP;
10955bb6a25fSPoul-Henning Kamp case XML_TOK_CLOSE_PAREN_QUESTION:
10965bb6a25fSPoul-Henning Kamp state->level -= 1;
10975bb6a25fSPoul-Henning Kamp if (state->level == 0) {
10985bb6a25fSPoul-Henning Kamp state->handler = declClose;
10995bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_ELEMENT_NONE;
11005bb6a25fSPoul-Henning Kamp }
11015bb6a25fSPoul-Henning Kamp return XML_ROLE_GROUP_CLOSE_OPT;
11025bb6a25fSPoul-Henning Kamp case XML_TOK_CLOSE_PAREN_PLUS:
11035bb6a25fSPoul-Henning Kamp state->level -= 1;
11045bb6a25fSPoul-Henning Kamp if (state->level == 0) {
11055bb6a25fSPoul-Henning Kamp state->handler = declClose;
11065bb6a25fSPoul-Henning Kamp state->role_none = XML_ROLE_ELEMENT_NONE;
11075bb6a25fSPoul-Henning Kamp }
11085bb6a25fSPoul-Henning Kamp return XML_ROLE_GROUP_CLOSE_PLUS;
11095bb6a25fSPoul-Henning Kamp case XML_TOK_COMMA:
11105bb6a25fSPoul-Henning Kamp state->handler = element6;
11115bb6a25fSPoul-Henning Kamp return XML_ROLE_GROUP_SEQUENCE;
11125bb6a25fSPoul-Henning Kamp case XML_TOK_OR:
11135bb6a25fSPoul-Henning Kamp state->handler = element6;
11145bb6a25fSPoul-Henning Kamp return XML_ROLE_GROUP_CHOICE;
11155bb6a25fSPoul-Henning Kamp }
11165bb6a25fSPoul-Henning Kamp return common(state, tok);
11175bb6a25fSPoul-Henning Kamp }
11185bb6a25fSPoul-Henning Kamp
11195bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
11205bb6a25fSPoul-Henning Kamp
1121220ed979SColeman Kane static int PTRCALL
condSect0(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)11226b2c1e49SXin LI condSect0(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
11236b2c1e49SXin LI const ENCODING *enc) {
11245bb6a25fSPoul-Henning Kamp switch (tok) {
11255bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
11265bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
11275bb6a25fSPoul-Henning Kamp case XML_TOK_NAME:
11285bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) {
11295bb6a25fSPoul-Henning Kamp state->handler = condSect1;
11305bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
11315bb6a25fSPoul-Henning Kamp }
11325bb6a25fSPoul-Henning Kamp if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) {
11335bb6a25fSPoul-Henning Kamp state->handler = condSect2;
11345bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
11355bb6a25fSPoul-Henning Kamp }
11365bb6a25fSPoul-Henning Kamp break;
11375bb6a25fSPoul-Henning Kamp }
11385bb6a25fSPoul-Henning Kamp return common(state, tok);
11395bb6a25fSPoul-Henning Kamp }
11405bb6a25fSPoul-Henning Kamp
1141220ed979SColeman Kane static int PTRCALL
condSect1(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)11426b2c1e49SXin LI condSect1(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
11436b2c1e49SXin LI const ENCODING *enc) {
11446b2c1e49SXin LI UNUSED_P(ptr);
11456b2c1e49SXin LI UNUSED_P(end);
11466b2c1e49SXin LI UNUSED_P(enc);
11475bb6a25fSPoul-Henning Kamp switch (tok) {
11485bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
11495bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
11505bb6a25fSPoul-Henning Kamp case XML_TOK_OPEN_BRACKET:
11515bb6a25fSPoul-Henning Kamp state->handler = externalSubset1;
11525bb6a25fSPoul-Henning Kamp state->includeLevel += 1;
11535bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
11545bb6a25fSPoul-Henning Kamp }
11555bb6a25fSPoul-Henning Kamp return common(state, tok);
11565bb6a25fSPoul-Henning Kamp }
11575bb6a25fSPoul-Henning Kamp
1158220ed979SColeman Kane static int PTRCALL
condSect2(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)11596b2c1e49SXin LI condSect2(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
11606b2c1e49SXin LI const ENCODING *enc) {
11616b2c1e49SXin LI UNUSED_P(ptr);
11626b2c1e49SXin LI UNUSED_P(end);
11636b2c1e49SXin LI UNUSED_P(enc);
11645bb6a25fSPoul-Henning Kamp switch (tok) {
11655bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
11665bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
11675bb6a25fSPoul-Henning Kamp case XML_TOK_OPEN_BRACKET:
11685bb6a25fSPoul-Henning Kamp state->handler = externalSubset1;
11695bb6a25fSPoul-Henning Kamp return XML_ROLE_IGNORE_SECT;
11705bb6a25fSPoul-Henning Kamp }
11715bb6a25fSPoul-Henning Kamp return common(state, tok);
11725bb6a25fSPoul-Henning Kamp }
11735bb6a25fSPoul-Henning Kamp
11745bb6a25fSPoul-Henning Kamp #endif /* XML_DTD */
11755bb6a25fSPoul-Henning Kamp
1176220ed979SColeman Kane static int PTRCALL
declClose(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)11776b2c1e49SXin LI declClose(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
11786b2c1e49SXin LI const ENCODING *enc) {
11796b2c1e49SXin LI UNUSED_P(ptr);
11806b2c1e49SXin LI UNUSED_P(end);
11816b2c1e49SXin LI UNUSED_P(enc);
11825bb6a25fSPoul-Henning Kamp switch (tok) {
11835bb6a25fSPoul-Henning Kamp case XML_TOK_PROLOG_S:
11845bb6a25fSPoul-Henning Kamp return state->role_none;
11855bb6a25fSPoul-Henning Kamp case XML_TOK_DECL_CLOSE:
11865bb6a25fSPoul-Henning Kamp setTopLevel(state);
11875bb6a25fSPoul-Henning Kamp return state->role_none;
11885bb6a25fSPoul-Henning Kamp }
11895bb6a25fSPoul-Henning Kamp return common(state, tok);
11905bb6a25fSPoul-Henning Kamp }
11915bb6a25fSPoul-Henning Kamp
11920a48773fSEric van Gyzen /* This function will only be invoked if the internal logic of the
11930a48773fSEric van Gyzen * parser has broken down. It is used in two cases:
11940a48773fSEric van Gyzen *
11950a48773fSEric van Gyzen * 1: When the XML prolog has been finished. At this point the
11960a48773fSEric van Gyzen * processor (the parser level above these role handlers) should
11970a48773fSEric van Gyzen * switch from prologProcessor to contentProcessor and reinitialise
11980a48773fSEric van Gyzen * the handler function.
11990a48773fSEric van Gyzen *
12000a48773fSEric van Gyzen * 2: When an error has been detected (via common() below). At this
12010a48773fSEric van Gyzen * point again the processor should be switched to errorProcessor,
12020a48773fSEric van Gyzen * which will never call a handler.
12030a48773fSEric van Gyzen *
12040a48773fSEric van Gyzen * The result of this is that error() can only be called if the
12050a48773fSEric van Gyzen * processor switch failed to happen, which is an internal error and
12060a48773fSEric van Gyzen * therefore we shouldn't be able to provoke it simply by using the
12070a48773fSEric van Gyzen * library. It is a necessary backstop, however, so we merely exclude
12080a48773fSEric van Gyzen * it from the coverage statistics.
12090a48773fSEric van Gyzen *
12100a48773fSEric van Gyzen * LCOV_EXCL_START
12110a48773fSEric van Gyzen */
1212220ed979SColeman Kane static int PTRCALL
error(PROLOG_STATE * state,int tok,const char * ptr,const char * end,const ENCODING * enc)12136b2c1e49SXin LI error(PROLOG_STATE *state, int tok, const char *ptr, const char *end,
12146b2c1e49SXin LI const ENCODING *enc) {
12156b2c1e49SXin LI UNUSED_P(state);
12166b2c1e49SXin LI UNUSED_P(tok);
12176b2c1e49SXin LI UNUSED_P(ptr);
12186b2c1e49SXin LI UNUSED_P(end);
12196b2c1e49SXin LI UNUSED_P(enc);
12205bb6a25fSPoul-Henning Kamp return XML_ROLE_NONE;
12215bb6a25fSPoul-Henning Kamp }
12220a48773fSEric van Gyzen /* LCOV_EXCL_STOP */
12235bb6a25fSPoul-Henning Kamp
12245bb6a25fSPoul-Henning Kamp static int FASTCALL
common(PROLOG_STATE * state,int tok)12256b2c1e49SXin LI common(PROLOG_STATE *state, int tok) {
12265bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
12275bb6a25fSPoul-Henning Kamp if (! state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF)
12285bb6a25fSPoul-Henning Kamp return XML_ROLE_INNER_PARAM_ENTITY_REF;
1229cc68614dSXin LI #else
1230cc68614dSXin LI UNUSED_P(tok);
12315bb6a25fSPoul-Henning Kamp #endif
12325bb6a25fSPoul-Henning Kamp state->handler = error;
12335bb6a25fSPoul-Henning Kamp return XML_ROLE_ERROR;
12345bb6a25fSPoul-Henning Kamp }
12355bb6a25fSPoul-Henning Kamp
12365bb6a25fSPoul-Henning Kamp void
XmlPrologStateInit(PROLOG_STATE * state)12376b2c1e49SXin LI XmlPrologStateInit(PROLOG_STATE *state) {
12385bb6a25fSPoul-Henning Kamp state->handler = prolog0;
12395bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
12405bb6a25fSPoul-Henning Kamp state->documentEntity = 1;
12415bb6a25fSPoul-Henning Kamp state->includeLevel = 0;
12425bb6a25fSPoul-Henning Kamp state->inEntityValue = 0;
12435bb6a25fSPoul-Henning Kamp #endif /* XML_DTD */
12445bb6a25fSPoul-Henning Kamp }
12455bb6a25fSPoul-Henning Kamp
12465bb6a25fSPoul-Henning Kamp #ifdef XML_DTD
12475bb6a25fSPoul-Henning Kamp
12485bb6a25fSPoul-Henning Kamp void
XmlPrologStateInitExternalEntity(PROLOG_STATE * state)12496b2c1e49SXin LI XmlPrologStateInitExternalEntity(PROLOG_STATE *state) {
12505bb6a25fSPoul-Henning Kamp state->handler = externalSubset0;
12515bb6a25fSPoul-Henning Kamp state->documentEntity = 0;
12525bb6a25fSPoul-Henning Kamp state->includeLevel = 0;
12535bb6a25fSPoul-Henning Kamp }
12545bb6a25fSPoul-Henning Kamp
12555bb6a25fSPoul-Henning Kamp #endif /* XML_DTD */
1256