17db96d56Sopenharmony_ci/* 27db96d56Sopenharmony_ci __ __ _ 37db96d56Sopenharmony_ci ___\ \/ /_ __ __ _| |_ 47db96d56Sopenharmony_ci / _ \\ /| '_ \ / _` | __| 57db96d56Sopenharmony_ci | __// \| |_) | (_| | |_ 67db96d56Sopenharmony_ci \___/_/\_\ .__/ \__,_|\__| 77db96d56Sopenharmony_ci |_| XML parser 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci Copyright (c) 1997-2000 Thai Open Source Software Center Ltd 107db96d56Sopenharmony_ci Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net> 117db96d56Sopenharmony_ci Copyright (c) 2002 Greg Stein <gstein@users.sourceforge.net> 127db96d56Sopenharmony_ci Copyright (c) 2002-2006 Karl Waclawek <karl@waclawek.net> 137db96d56Sopenharmony_ci Copyright (c) 2002-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net> 147db96d56Sopenharmony_ci Copyright (c) 2005-2009 Steven Solie <steven@solie.ca> 157db96d56Sopenharmony_ci Copyright (c) 2016-2021 Sebastian Pipping <sebastian@pipping.org> 167db96d56Sopenharmony_ci Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk> 177db96d56Sopenharmony_ci Copyright (c) 2019 David Loffredo <loffredo@steptools.com> 187db96d56Sopenharmony_ci Copyright (c) 2021 Dong-hee Na <donghee.na@python.org> 197db96d56Sopenharmony_ci Licensed under the MIT license: 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci Permission is hereby granted, free of charge, to any person obtaining 227db96d56Sopenharmony_ci a copy of this software and associated documentation files (the 237db96d56Sopenharmony_ci "Software"), to deal in the Software without restriction, including 247db96d56Sopenharmony_ci without limitation the rights to use, copy, modify, merge, publish, 257db96d56Sopenharmony_ci distribute, sublicense, and/or sell copies of the Software, and to permit 267db96d56Sopenharmony_ci persons to whom the Software is furnished to do so, subject to the 277db96d56Sopenharmony_ci following conditions: 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ci The above copyright notice and this permission notice shall be included 307db96d56Sopenharmony_ci in all copies or substantial portions of the Software. 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 337db96d56Sopenharmony_ci EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 347db96d56Sopenharmony_ci MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 357db96d56Sopenharmony_ci NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 367db96d56Sopenharmony_ci DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 377db96d56Sopenharmony_ci OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 387db96d56Sopenharmony_ci USE OR OTHER DEALINGS IN THE SOFTWARE. 397db96d56Sopenharmony_ci*/ 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci#include <expat_config.h> 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ci#include <stddef.h> 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci#ifdef _WIN32 467db96d56Sopenharmony_ci# include "winconfig.h" 477db96d56Sopenharmony_ci#endif 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ci#include "expat_external.h" 507db96d56Sopenharmony_ci#include "internal.h" 517db96d56Sopenharmony_ci#include "xmlrole.h" 527db96d56Sopenharmony_ci#include "ascii.h" 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci/* Doesn't check: 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci that ,| are not mixed in a model group 577db96d56Sopenharmony_ci content of literals 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci*/ 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_cistatic const char KW_ANY[] = {ASCII_A, ASCII_N, ASCII_Y, '\0'}; 627db96d56Sopenharmony_cistatic const char KW_ATTLIST[] 637db96d56Sopenharmony_ci = {ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0'}; 647db96d56Sopenharmony_cistatic const char KW_CDATA[] 657db96d56Sopenharmony_ci = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'}; 667db96d56Sopenharmony_cistatic const char KW_DOCTYPE[] 677db96d56Sopenharmony_ci = {ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0'}; 687db96d56Sopenharmony_cistatic const char KW_ELEMENT[] 697db96d56Sopenharmony_ci = {ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0'}; 707db96d56Sopenharmony_cistatic const char KW_EMPTY[] 717db96d56Sopenharmony_ci = {ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0'}; 727db96d56Sopenharmony_cistatic const char KW_ENTITIES[] = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, 737db96d56Sopenharmony_ci ASCII_I, ASCII_E, ASCII_S, '\0'}; 747db96d56Sopenharmony_cistatic const char KW_ENTITY[] 757db96d56Sopenharmony_ci = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0'}; 767db96d56Sopenharmony_cistatic const char KW_FIXED[] 777db96d56Sopenharmony_ci = {ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0'}; 787db96d56Sopenharmony_cistatic const char KW_ID[] = {ASCII_I, ASCII_D, '\0'}; 797db96d56Sopenharmony_cistatic const char KW_IDREF[] 807db96d56Sopenharmony_ci = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0'}; 817db96d56Sopenharmony_cistatic const char KW_IDREFS[] 827db96d56Sopenharmony_ci = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0'}; 837db96d56Sopenharmony_ci#ifdef XML_DTD 847db96d56Sopenharmony_cistatic const char KW_IGNORE[] 857db96d56Sopenharmony_ci = {ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0'}; 867db96d56Sopenharmony_ci#endif 877db96d56Sopenharmony_cistatic const char KW_IMPLIED[] 887db96d56Sopenharmony_ci = {ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0'}; 897db96d56Sopenharmony_ci#ifdef XML_DTD 907db96d56Sopenharmony_cistatic const char KW_INCLUDE[] 917db96d56Sopenharmony_ci = {ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0'}; 927db96d56Sopenharmony_ci#endif 937db96d56Sopenharmony_cistatic const char KW_NDATA[] 947db96d56Sopenharmony_ci = {ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'}; 957db96d56Sopenharmony_cistatic const char KW_NMTOKEN[] 967db96d56Sopenharmony_ci = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0'}; 977db96d56Sopenharmony_cistatic const char KW_NMTOKENS[] = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, 987db96d56Sopenharmony_ci ASCII_E, ASCII_N, ASCII_S, '\0'}; 997db96d56Sopenharmony_cistatic const char KW_NOTATION[] = {ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, 1007db96d56Sopenharmony_ci ASCII_I, ASCII_O, ASCII_N, '\0'}; 1017db96d56Sopenharmony_cistatic const char KW_PCDATA[] 1027db96d56Sopenharmony_ci = {ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'}; 1037db96d56Sopenharmony_cistatic const char KW_PUBLIC[] 1047db96d56Sopenharmony_ci = {ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0'}; 1057db96d56Sopenharmony_cistatic const char KW_REQUIRED[] = {ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, 1067db96d56Sopenharmony_ci ASCII_R, ASCII_E, ASCII_D, '\0'}; 1077db96d56Sopenharmony_cistatic const char KW_SYSTEM[] 1087db96d56Sopenharmony_ci = {ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0'}; 1097db96d56Sopenharmony_ci 1107db96d56Sopenharmony_ci#ifndef MIN_BYTES_PER_CHAR 1117db96d56Sopenharmony_ci# define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar) 1127db96d56Sopenharmony_ci#endif 1137db96d56Sopenharmony_ci 1147db96d56Sopenharmony_ci#ifdef XML_DTD 1157db96d56Sopenharmony_ci# define setTopLevel(state) \ 1167db96d56Sopenharmony_ci ((state)->handler \ 1177db96d56Sopenharmony_ci = ((state)->documentEntity ? internalSubset : externalSubset1)) 1187db96d56Sopenharmony_ci#else /* not XML_DTD */ 1197db96d56Sopenharmony_ci# define setTopLevel(state) ((state)->handler = internalSubset) 1207db96d56Sopenharmony_ci#endif /* not XML_DTD */ 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_citypedef int PTRCALL PROLOG_HANDLER(PROLOG_STATE *state, int tok, 1237db96d56Sopenharmony_ci const char *ptr, const char *end, 1247db96d56Sopenharmony_ci const ENCODING *enc); 1257db96d56Sopenharmony_ci 1267db96d56Sopenharmony_cistatic PROLOG_HANDLER prolog0, prolog1, prolog2, doctype0, doctype1, doctype2, 1277db96d56Sopenharmony_ci doctype3, doctype4, doctype5, internalSubset, entity0, entity1, entity2, 1287db96d56Sopenharmony_ci entity3, entity4, entity5, entity6, entity7, entity8, entity9, entity10, 1297db96d56Sopenharmony_ci notation0, notation1, notation2, notation3, notation4, attlist0, attlist1, 1307db96d56Sopenharmony_ci attlist2, attlist3, attlist4, attlist5, attlist6, attlist7, attlist8, 1317db96d56Sopenharmony_ci attlist9, element0, element1, element2, element3, element4, element5, 1327db96d56Sopenharmony_ci element6, element7, 1337db96d56Sopenharmony_ci#ifdef XML_DTD 1347db96d56Sopenharmony_ci externalSubset0, externalSubset1, condSect0, condSect1, condSect2, 1357db96d56Sopenharmony_ci#endif /* XML_DTD */ 1367db96d56Sopenharmony_ci declClose, error; 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_cistatic int FASTCALL common(PROLOG_STATE *state, int tok); 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_cistatic int PTRCALL 1417db96d56Sopenharmony_ciprolog0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 1427db96d56Sopenharmony_ci const ENCODING *enc) { 1437db96d56Sopenharmony_ci switch (tok) { 1447db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 1457db96d56Sopenharmony_ci state->handler = prolog1; 1467db96d56Sopenharmony_ci return XML_ROLE_NONE; 1477db96d56Sopenharmony_ci case XML_TOK_XML_DECL: 1487db96d56Sopenharmony_ci state->handler = prolog1; 1497db96d56Sopenharmony_ci return XML_ROLE_XML_DECL; 1507db96d56Sopenharmony_ci case XML_TOK_PI: 1517db96d56Sopenharmony_ci state->handler = prolog1; 1527db96d56Sopenharmony_ci return XML_ROLE_PI; 1537db96d56Sopenharmony_ci case XML_TOK_COMMENT: 1547db96d56Sopenharmony_ci state->handler = prolog1; 1557db96d56Sopenharmony_ci return XML_ROLE_COMMENT; 1567db96d56Sopenharmony_ci case XML_TOK_BOM: 1577db96d56Sopenharmony_ci return XML_ROLE_NONE; 1587db96d56Sopenharmony_ci case XML_TOK_DECL_OPEN: 1597db96d56Sopenharmony_ci if (! XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, 1607db96d56Sopenharmony_ci KW_DOCTYPE)) 1617db96d56Sopenharmony_ci break; 1627db96d56Sopenharmony_ci state->handler = doctype0; 1637db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_NONE; 1647db96d56Sopenharmony_ci case XML_TOK_INSTANCE_START: 1657db96d56Sopenharmony_ci state->handler = error; 1667db96d56Sopenharmony_ci return XML_ROLE_INSTANCE_START; 1677db96d56Sopenharmony_ci } 1687db96d56Sopenharmony_ci return common(state, tok); 1697db96d56Sopenharmony_ci} 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_cistatic int PTRCALL 1727db96d56Sopenharmony_ciprolog1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 1737db96d56Sopenharmony_ci const ENCODING *enc) { 1747db96d56Sopenharmony_ci switch (tok) { 1757db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 1767db96d56Sopenharmony_ci return XML_ROLE_NONE; 1777db96d56Sopenharmony_ci case XML_TOK_PI: 1787db96d56Sopenharmony_ci return XML_ROLE_PI; 1797db96d56Sopenharmony_ci case XML_TOK_COMMENT: 1807db96d56Sopenharmony_ci return XML_ROLE_COMMENT; 1817db96d56Sopenharmony_ci case XML_TOK_BOM: 1827db96d56Sopenharmony_ci /* This case can never arise. To reach this role function, the 1837db96d56Sopenharmony_ci * parse must have passed through prolog0 and therefore have had 1847db96d56Sopenharmony_ci * some form of input, even if only a space. At that point, a 1857db96d56Sopenharmony_ci * byte order mark is no longer a valid character (though 1867db96d56Sopenharmony_ci * technically it should be interpreted as a non-breaking space), 1877db96d56Sopenharmony_ci * so will be rejected by the tokenizing stages. 1887db96d56Sopenharmony_ci */ 1897db96d56Sopenharmony_ci return XML_ROLE_NONE; /* LCOV_EXCL_LINE */ 1907db96d56Sopenharmony_ci case XML_TOK_DECL_OPEN: 1917db96d56Sopenharmony_ci if (! XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, 1927db96d56Sopenharmony_ci KW_DOCTYPE)) 1937db96d56Sopenharmony_ci break; 1947db96d56Sopenharmony_ci state->handler = doctype0; 1957db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_NONE; 1967db96d56Sopenharmony_ci case XML_TOK_INSTANCE_START: 1977db96d56Sopenharmony_ci state->handler = error; 1987db96d56Sopenharmony_ci return XML_ROLE_INSTANCE_START; 1997db96d56Sopenharmony_ci } 2007db96d56Sopenharmony_ci return common(state, tok); 2017db96d56Sopenharmony_ci} 2027db96d56Sopenharmony_ci 2037db96d56Sopenharmony_cistatic int PTRCALL 2047db96d56Sopenharmony_ciprolog2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 2057db96d56Sopenharmony_ci const ENCODING *enc) { 2067db96d56Sopenharmony_ci UNUSED_P(ptr); 2077db96d56Sopenharmony_ci UNUSED_P(end); 2087db96d56Sopenharmony_ci UNUSED_P(enc); 2097db96d56Sopenharmony_ci switch (tok) { 2107db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 2117db96d56Sopenharmony_ci return XML_ROLE_NONE; 2127db96d56Sopenharmony_ci case XML_TOK_PI: 2137db96d56Sopenharmony_ci return XML_ROLE_PI; 2147db96d56Sopenharmony_ci case XML_TOK_COMMENT: 2157db96d56Sopenharmony_ci return XML_ROLE_COMMENT; 2167db96d56Sopenharmony_ci case XML_TOK_INSTANCE_START: 2177db96d56Sopenharmony_ci state->handler = error; 2187db96d56Sopenharmony_ci return XML_ROLE_INSTANCE_START; 2197db96d56Sopenharmony_ci } 2207db96d56Sopenharmony_ci return common(state, tok); 2217db96d56Sopenharmony_ci} 2227db96d56Sopenharmony_ci 2237db96d56Sopenharmony_cistatic int PTRCALL 2247db96d56Sopenharmony_cidoctype0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 2257db96d56Sopenharmony_ci const ENCODING *enc) { 2267db96d56Sopenharmony_ci UNUSED_P(ptr); 2277db96d56Sopenharmony_ci UNUSED_P(end); 2287db96d56Sopenharmony_ci UNUSED_P(enc); 2297db96d56Sopenharmony_ci switch (tok) { 2307db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 2317db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_NONE; 2327db96d56Sopenharmony_ci case XML_TOK_NAME: 2337db96d56Sopenharmony_ci case XML_TOK_PREFIXED_NAME: 2347db96d56Sopenharmony_ci state->handler = doctype1; 2357db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_NAME; 2367db96d56Sopenharmony_ci } 2377db96d56Sopenharmony_ci return common(state, tok); 2387db96d56Sopenharmony_ci} 2397db96d56Sopenharmony_ci 2407db96d56Sopenharmony_cistatic int PTRCALL 2417db96d56Sopenharmony_cidoctype1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 2427db96d56Sopenharmony_ci const ENCODING *enc) { 2437db96d56Sopenharmony_ci switch (tok) { 2447db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 2457db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_NONE; 2467db96d56Sopenharmony_ci case XML_TOK_OPEN_BRACKET: 2477db96d56Sopenharmony_ci state->handler = internalSubset; 2487db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; 2497db96d56Sopenharmony_ci case XML_TOK_DECL_CLOSE: 2507db96d56Sopenharmony_ci state->handler = prolog2; 2517db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_CLOSE; 2527db96d56Sopenharmony_ci case XML_TOK_NAME: 2537db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { 2547db96d56Sopenharmony_ci state->handler = doctype3; 2557db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_NONE; 2567db96d56Sopenharmony_ci } 2577db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { 2587db96d56Sopenharmony_ci state->handler = doctype2; 2597db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_NONE; 2607db96d56Sopenharmony_ci } 2617db96d56Sopenharmony_ci break; 2627db96d56Sopenharmony_ci } 2637db96d56Sopenharmony_ci return common(state, tok); 2647db96d56Sopenharmony_ci} 2657db96d56Sopenharmony_ci 2667db96d56Sopenharmony_cistatic int PTRCALL 2677db96d56Sopenharmony_cidoctype2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 2687db96d56Sopenharmony_ci const ENCODING *enc) { 2697db96d56Sopenharmony_ci UNUSED_P(ptr); 2707db96d56Sopenharmony_ci UNUSED_P(end); 2717db96d56Sopenharmony_ci UNUSED_P(enc); 2727db96d56Sopenharmony_ci switch (tok) { 2737db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 2747db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_NONE; 2757db96d56Sopenharmony_ci case XML_TOK_LITERAL: 2767db96d56Sopenharmony_ci state->handler = doctype3; 2777db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_PUBLIC_ID; 2787db96d56Sopenharmony_ci } 2797db96d56Sopenharmony_ci return common(state, tok); 2807db96d56Sopenharmony_ci} 2817db96d56Sopenharmony_ci 2827db96d56Sopenharmony_cistatic int PTRCALL 2837db96d56Sopenharmony_cidoctype3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 2847db96d56Sopenharmony_ci const ENCODING *enc) { 2857db96d56Sopenharmony_ci UNUSED_P(ptr); 2867db96d56Sopenharmony_ci UNUSED_P(end); 2877db96d56Sopenharmony_ci UNUSED_P(enc); 2887db96d56Sopenharmony_ci switch (tok) { 2897db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 2907db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_NONE; 2917db96d56Sopenharmony_ci case XML_TOK_LITERAL: 2927db96d56Sopenharmony_ci state->handler = doctype4; 2937db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_SYSTEM_ID; 2947db96d56Sopenharmony_ci } 2957db96d56Sopenharmony_ci return common(state, tok); 2967db96d56Sopenharmony_ci} 2977db96d56Sopenharmony_ci 2987db96d56Sopenharmony_cistatic int PTRCALL 2997db96d56Sopenharmony_cidoctype4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 3007db96d56Sopenharmony_ci const ENCODING *enc) { 3017db96d56Sopenharmony_ci UNUSED_P(ptr); 3027db96d56Sopenharmony_ci UNUSED_P(end); 3037db96d56Sopenharmony_ci UNUSED_P(enc); 3047db96d56Sopenharmony_ci switch (tok) { 3057db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 3067db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_NONE; 3077db96d56Sopenharmony_ci case XML_TOK_OPEN_BRACKET: 3087db96d56Sopenharmony_ci state->handler = internalSubset; 3097db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; 3107db96d56Sopenharmony_ci case XML_TOK_DECL_CLOSE: 3117db96d56Sopenharmony_ci state->handler = prolog2; 3127db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_CLOSE; 3137db96d56Sopenharmony_ci } 3147db96d56Sopenharmony_ci return common(state, tok); 3157db96d56Sopenharmony_ci} 3167db96d56Sopenharmony_ci 3177db96d56Sopenharmony_cistatic int PTRCALL 3187db96d56Sopenharmony_cidoctype5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 3197db96d56Sopenharmony_ci const ENCODING *enc) { 3207db96d56Sopenharmony_ci UNUSED_P(ptr); 3217db96d56Sopenharmony_ci UNUSED_P(end); 3227db96d56Sopenharmony_ci UNUSED_P(enc); 3237db96d56Sopenharmony_ci switch (tok) { 3247db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 3257db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_NONE; 3267db96d56Sopenharmony_ci case XML_TOK_DECL_CLOSE: 3277db96d56Sopenharmony_ci state->handler = prolog2; 3287db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_CLOSE; 3297db96d56Sopenharmony_ci } 3307db96d56Sopenharmony_ci return common(state, tok); 3317db96d56Sopenharmony_ci} 3327db96d56Sopenharmony_ci 3337db96d56Sopenharmony_cistatic int PTRCALL 3347db96d56Sopenharmony_ciinternalSubset(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 3357db96d56Sopenharmony_ci const ENCODING *enc) { 3367db96d56Sopenharmony_ci switch (tok) { 3377db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 3387db96d56Sopenharmony_ci return XML_ROLE_NONE; 3397db96d56Sopenharmony_ci case XML_TOK_DECL_OPEN: 3407db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, 3417db96d56Sopenharmony_ci KW_ENTITY)) { 3427db96d56Sopenharmony_ci state->handler = entity0; 3437db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 3447db96d56Sopenharmony_ci } 3457db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, 3467db96d56Sopenharmony_ci KW_ATTLIST)) { 3477db96d56Sopenharmony_ci state->handler = attlist0; 3487db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 3497db96d56Sopenharmony_ci } 3507db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, 3517db96d56Sopenharmony_ci KW_ELEMENT)) { 3527db96d56Sopenharmony_ci state->handler = element0; 3537db96d56Sopenharmony_ci return XML_ROLE_ELEMENT_NONE; 3547db96d56Sopenharmony_ci } 3557db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, 3567db96d56Sopenharmony_ci KW_NOTATION)) { 3577db96d56Sopenharmony_ci state->handler = notation0; 3587db96d56Sopenharmony_ci return XML_ROLE_NOTATION_NONE; 3597db96d56Sopenharmony_ci } 3607db96d56Sopenharmony_ci break; 3617db96d56Sopenharmony_ci case XML_TOK_PI: 3627db96d56Sopenharmony_ci return XML_ROLE_PI; 3637db96d56Sopenharmony_ci case XML_TOK_COMMENT: 3647db96d56Sopenharmony_ci return XML_ROLE_COMMENT; 3657db96d56Sopenharmony_ci case XML_TOK_PARAM_ENTITY_REF: 3667db96d56Sopenharmony_ci return XML_ROLE_PARAM_ENTITY_REF; 3677db96d56Sopenharmony_ci case XML_TOK_CLOSE_BRACKET: 3687db96d56Sopenharmony_ci state->handler = doctype5; 3697db96d56Sopenharmony_ci return XML_ROLE_DOCTYPE_NONE; 3707db96d56Sopenharmony_ci case XML_TOK_NONE: 3717db96d56Sopenharmony_ci return XML_ROLE_NONE; 3727db96d56Sopenharmony_ci } 3737db96d56Sopenharmony_ci return common(state, tok); 3747db96d56Sopenharmony_ci} 3757db96d56Sopenharmony_ci 3767db96d56Sopenharmony_ci#ifdef XML_DTD 3777db96d56Sopenharmony_ci 3787db96d56Sopenharmony_cistatic int PTRCALL 3797db96d56Sopenharmony_ciexternalSubset0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 3807db96d56Sopenharmony_ci const ENCODING *enc) { 3817db96d56Sopenharmony_ci state->handler = externalSubset1; 3827db96d56Sopenharmony_ci if (tok == XML_TOK_XML_DECL) 3837db96d56Sopenharmony_ci return XML_ROLE_TEXT_DECL; 3847db96d56Sopenharmony_ci return externalSubset1(state, tok, ptr, end, enc); 3857db96d56Sopenharmony_ci} 3867db96d56Sopenharmony_ci 3877db96d56Sopenharmony_cistatic int PTRCALL 3887db96d56Sopenharmony_ciexternalSubset1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 3897db96d56Sopenharmony_ci const ENCODING *enc) { 3907db96d56Sopenharmony_ci switch (tok) { 3917db96d56Sopenharmony_ci case XML_TOK_COND_SECT_OPEN: 3927db96d56Sopenharmony_ci state->handler = condSect0; 3937db96d56Sopenharmony_ci return XML_ROLE_NONE; 3947db96d56Sopenharmony_ci case XML_TOK_COND_SECT_CLOSE: 3957db96d56Sopenharmony_ci if (state->includeLevel == 0) 3967db96d56Sopenharmony_ci break; 3977db96d56Sopenharmony_ci state->includeLevel -= 1; 3987db96d56Sopenharmony_ci return XML_ROLE_NONE; 3997db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 4007db96d56Sopenharmony_ci return XML_ROLE_NONE; 4017db96d56Sopenharmony_ci case XML_TOK_CLOSE_BRACKET: 4027db96d56Sopenharmony_ci break; 4037db96d56Sopenharmony_ci case XML_TOK_NONE: 4047db96d56Sopenharmony_ci if (state->includeLevel) 4057db96d56Sopenharmony_ci break; 4067db96d56Sopenharmony_ci return XML_ROLE_NONE; 4077db96d56Sopenharmony_ci default: 4087db96d56Sopenharmony_ci return internalSubset(state, tok, ptr, end, enc); 4097db96d56Sopenharmony_ci } 4107db96d56Sopenharmony_ci return common(state, tok); 4117db96d56Sopenharmony_ci} 4127db96d56Sopenharmony_ci 4137db96d56Sopenharmony_ci#endif /* XML_DTD */ 4147db96d56Sopenharmony_ci 4157db96d56Sopenharmony_cistatic int PTRCALL 4167db96d56Sopenharmony_cientity0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 4177db96d56Sopenharmony_ci const ENCODING *enc) { 4187db96d56Sopenharmony_ci UNUSED_P(ptr); 4197db96d56Sopenharmony_ci UNUSED_P(end); 4207db96d56Sopenharmony_ci UNUSED_P(enc); 4217db96d56Sopenharmony_ci switch (tok) { 4227db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 4237db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 4247db96d56Sopenharmony_ci case XML_TOK_PERCENT: 4257db96d56Sopenharmony_ci state->handler = entity1; 4267db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 4277db96d56Sopenharmony_ci case XML_TOK_NAME: 4287db96d56Sopenharmony_ci state->handler = entity2; 4297db96d56Sopenharmony_ci return XML_ROLE_GENERAL_ENTITY_NAME; 4307db96d56Sopenharmony_ci } 4317db96d56Sopenharmony_ci return common(state, tok); 4327db96d56Sopenharmony_ci} 4337db96d56Sopenharmony_ci 4347db96d56Sopenharmony_cistatic int PTRCALL 4357db96d56Sopenharmony_cientity1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 4367db96d56Sopenharmony_ci const ENCODING *enc) { 4377db96d56Sopenharmony_ci UNUSED_P(ptr); 4387db96d56Sopenharmony_ci UNUSED_P(end); 4397db96d56Sopenharmony_ci UNUSED_P(enc); 4407db96d56Sopenharmony_ci switch (tok) { 4417db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 4427db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 4437db96d56Sopenharmony_ci case XML_TOK_NAME: 4447db96d56Sopenharmony_ci state->handler = entity7; 4457db96d56Sopenharmony_ci return XML_ROLE_PARAM_ENTITY_NAME; 4467db96d56Sopenharmony_ci } 4477db96d56Sopenharmony_ci return common(state, tok); 4487db96d56Sopenharmony_ci} 4497db96d56Sopenharmony_ci 4507db96d56Sopenharmony_cistatic int PTRCALL 4517db96d56Sopenharmony_cientity2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 4527db96d56Sopenharmony_ci const ENCODING *enc) { 4537db96d56Sopenharmony_ci switch (tok) { 4547db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 4557db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 4567db96d56Sopenharmony_ci case XML_TOK_NAME: 4577db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { 4587db96d56Sopenharmony_ci state->handler = entity4; 4597db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 4607db96d56Sopenharmony_ci } 4617db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { 4627db96d56Sopenharmony_ci state->handler = entity3; 4637db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 4647db96d56Sopenharmony_ci } 4657db96d56Sopenharmony_ci break; 4667db96d56Sopenharmony_ci case XML_TOK_LITERAL: 4677db96d56Sopenharmony_ci state->handler = declClose; 4687db96d56Sopenharmony_ci state->role_none = XML_ROLE_ENTITY_NONE; 4697db96d56Sopenharmony_ci return XML_ROLE_ENTITY_VALUE; 4707db96d56Sopenharmony_ci } 4717db96d56Sopenharmony_ci return common(state, tok); 4727db96d56Sopenharmony_ci} 4737db96d56Sopenharmony_ci 4747db96d56Sopenharmony_cistatic int PTRCALL 4757db96d56Sopenharmony_cientity3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 4767db96d56Sopenharmony_ci const ENCODING *enc) { 4777db96d56Sopenharmony_ci UNUSED_P(ptr); 4787db96d56Sopenharmony_ci UNUSED_P(end); 4797db96d56Sopenharmony_ci UNUSED_P(enc); 4807db96d56Sopenharmony_ci switch (tok) { 4817db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 4827db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 4837db96d56Sopenharmony_ci case XML_TOK_LITERAL: 4847db96d56Sopenharmony_ci state->handler = entity4; 4857db96d56Sopenharmony_ci return XML_ROLE_ENTITY_PUBLIC_ID; 4867db96d56Sopenharmony_ci } 4877db96d56Sopenharmony_ci return common(state, tok); 4887db96d56Sopenharmony_ci} 4897db96d56Sopenharmony_ci 4907db96d56Sopenharmony_cistatic int PTRCALL 4917db96d56Sopenharmony_cientity4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 4927db96d56Sopenharmony_ci const ENCODING *enc) { 4937db96d56Sopenharmony_ci UNUSED_P(ptr); 4947db96d56Sopenharmony_ci UNUSED_P(end); 4957db96d56Sopenharmony_ci UNUSED_P(enc); 4967db96d56Sopenharmony_ci switch (tok) { 4977db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 4987db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 4997db96d56Sopenharmony_ci case XML_TOK_LITERAL: 5007db96d56Sopenharmony_ci state->handler = entity5; 5017db96d56Sopenharmony_ci return XML_ROLE_ENTITY_SYSTEM_ID; 5027db96d56Sopenharmony_ci } 5037db96d56Sopenharmony_ci return common(state, tok); 5047db96d56Sopenharmony_ci} 5057db96d56Sopenharmony_ci 5067db96d56Sopenharmony_cistatic int PTRCALL 5077db96d56Sopenharmony_cientity5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 5087db96d56Sopenharmony_ci const ENCODING *enc) { 5097db96d56Sopenharmony_ci switch (tok) { 5107db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 5117db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 5127db96d56Sopenharmony_ci case XML_TOK_DECL_CLOSE: 5137db96d56Sopenharmony_ci setTopLevel(state); 5147db96d56Sopenharmony_ci return XML_ROLE_ENTITY_COMPLETE; 5157db96d56Sopenharmony_ci case XML_TOK_NAME: 5167db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) { 5177db96d56Sopenharmony_ci state->handler = entity6; 5187db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 5197db96d56Sopenharmony_ci } 5207db96d56Sopenharmony_ci break; 5217db96d56Sopenharmony_ci } 5227db96d56Sopenharmony_ci return common(state, tok); 5237db96d56Sopenharmony_ci} 5247db96d56Sopenharmony_ci 5257db96d56Sopenharmony_cistatic int PTRCALL 5267db96d56Sopenharmony_cientity6(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 5277db96d56Sopenharmony_ci const ENCODING *enc) { 5287db96d56Sopenharmony_ci UNUSED_P(ptr); 5297db96d56Sopenharmony_ci UNUSED_P(end); 5307db96d56Sopenharmony_ci UNUSED_P(enc); 5317db96d56Sopenharmony_ci switch (tok) { 5327db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 5337db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 5347db96d56Sopenharmony_ci case XML_TOK_NAME: 5357db96d56Sopenharmony_ci state->handler = declClose; 5367db96d56Sopenharmony_ci state->role_none = XML_ROLE_ENTITY_NONE; 5377db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NOTATION_NAME; 5387db96d56Sopenharmony_ci } 5397db96d56Sopenharmony_ci return common(state, tok); 5407db96d56Sopenharmony_ci} 5417db96d56Sopenharmony_ci 5427db96d56Sopenharmony_cistatic int PTRCALL 5437db96d56Sopenharmony_cientity7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 5447db96d56Sopenharmony_ci const ENCODING *enc) { 5457db96d56Sopenharmony_ci switch (tok) { 5467db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 5477db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 5487db96d56Sopenharmony_ci case XML_TOK_NAME: 5497db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { 5507db96d56Sopenharmony_ci state->handler = entity9; 5517db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 5527db96d56Sopenharmony_ci } 5537db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { 5547db96d56Sopenharmony_ci state->handler = entity8; 5557db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 5567db96d56Sopenharmony_ci } 5577db96d56Sopenharmony_ci break; 5587db96d56Sopenharmony_ci case XML_TOK_LITERAL: 5597db96d56Sopenharmony_ci state->handler = declClose; 5607db96d56Sopenharmony_ci state->role_none = XML_ROLE_ENTITY_NONE; 5617db96d56Sopenharmony_ci return XML_ROLE_ENTITY_VALUE; 5627db96d56Sopenharmony_ci } 5637db96d56Sopenharmony_ci return common(state, tok); 5647db96d56Sopenharmony_ci} 5657db96d56Sopenharmony_ci 5667db96d56Sopenharmony_cistatic int PTRCALL 5677db96d56Sopenharmony_cientity8(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 5687db96d56Sopenharmony_ci const ENCODING *enc) { 5697db96d56Sopenharmony_ci UNUSED_P(ptr); 5707db96d56Sopenharmony_ci UNUSED_P(end); 5717db96d56Sopenharmony_ci UNUSED_P(enc); 5727db96d56Sopenharmony_ci switch (tok) { 5737db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 5747db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 5757db96d56Sopenharmony_ci case XML_TOK_LITERAL: 5767db96d56Sopenharmony_ci state->handler = entity9; 5777db96d56Sopenharmony_ci return XML_ROLE_ENTITY_PUBLIC_ID; 5787db96d56Sopenharmony_ci } 5797db96d56Sopenharmony_ci return common(state, tok); 5807db96d56Sopenharmony_ci} 5817db96d56Sopenharmony_ci 5827db96d56Sopenharmony_cistatic int PTRCALL 5837db96d56Sopenharmony_cientity9(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 5847db96d56Sopenharmony_ci const ENCODING *enc) { 5857db96d56Sopenharmony_ci UNUSED_P(ptr); 5867db96d56Sopenharmony_ci UNUSED_P(end); 5877db96d56Sopenharmony_ci UNUSED_P(enc); 5887db96d56Sopenharmony_ci switch (tok) { 5897db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 5907db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 5917db96d56Sopenharmony_ci case XML_TOK_LITERAL: 5927db96d56Sopenharmony_ci state->handler = entity10; 5937db96d56Sopenharmony_ci return XML_ROLE_ENTITY_SYSTEM_ID; 5947db96d56Sopenharmony_ci } 5957db96d56Sopenharmony_ci return common(state, tok); 5967db96d56Sopenharmony_ci} 5977db96d56Sopenharmony_ci 5987db96d56Sopenharmony_cistatic int PTRCALL 5997db96d56Sopenharmony_cientity10(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 6007db96d56Sopenharmony_ci const ENCODING *enc) { 6017db96d56Sopenharmony_ci UNUSED_P(ptr); 6027db96d56Sopenharmony_ci UNUSED_P(end); 6037db96d56Sopenharmony_ci UNUSED_P(enc); 6047db96d56Sopenharmony_ci switch (tok) { 6057db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 6067db96d56Sopenharmony_ci return XML_ROLE_ENTITY_NONE; 6077db96d56Sopenharmony_ci case XML_TOK_DECL_CLOSE: 6087db96d56Sopenharmony_ci setTopLevel(state); 6097db96d56Sopenharmony_ci return XML_ROLE_ENTITY_COMPLETE; 6107db96d56Sopenharmony_ci } 6117db96d56Sopenharmony_ci return common(state, tok); 6127db96d56Sopenharmony_ci} 6137db96d56Sopenharmony_ci 6147db96d56Sopenharmony_cistatic int PTRCALL 6157db96d56Sopenharmony_cinotation0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 6167db96d56Sopenharmony_ci const ENCODING *enc) { 6177db96d56Sopenharmony_ci UNUSED_P(ptr); 6187db96d56Sopenharmony_ci UNUSED_P(end); 6197db96d56Sopenharmony_ci UNUSED_P(enc); 6207db96d56Sopenharmony_ci switch (tok) { 6217db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 6227db96d56Sopenharmony_ci return XML_ROLE_NOTATION_NONE; 6237db96d56Sopenharmony_ci case XML_TOK_NAME: 6247db96d56Sopenharmony_ci state->handler = notation1; 6257db96d56Sopenharmony_ci return XML_ROLE_NOTATION_NAME; 6267db96d56Sopenharmony_ci } 6277db96d56Sopenharmony_ci return common(state, tok); 6287db96d56Sopenharmony_ci} 6297db96d56Sopenharmony_ci 6307db96d56Sopenharmony_cistatic int PTRCALL 6317db96d56Sopenharmony_cinotation1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 6327db96d56Sopenharmony_ci const ENCODING *enc) { 6337db96d56Sopenharmony_ci switch (tok) { 6347db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 6357db96d56Sopenharmony_ci return XML_ROLE_NOTATION_NONE; 6367db96d56Sopenharmony_ci case XML_TOK_NAME: 6377db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { 6387db96d56Sopenharmony_ci state->handler = notation3; 6397db96d56Sopenharmony_ci return XML_ROLE_NOTATION_NONE; 6407db96d56Sopenharmony_ci } 6417db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { 6427db96d56Sopenharmony_ci state->handler = notation2; 6437db96d56Sopenharmony_ci return XML_ROLE_NOTATION_NONE; 6447db96d56Sopenharmony_ci } 6457db96d56Sopenharmony_ci break; 6467db96d56Sopenharmony_ci } 6477db96d56Sopenharmony_ci return common(state, tok); 6487db96d56Sopenharmony_ci} 6497db96d56Sopenharmony_ci 6507db96d56Sopenharmony_cistatic int PTRCALL 6517db96d56Sopenharmony_cinotation2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 6527db96d56Sopenharmony_ci const ENCODING *enc) { 6537db96d56Sopenharmony_ci UNUSED_P(ptr); 6547db96d56Sopenharmony_ci UNUSED_P(end); 6557db96d56Sopenharmony_ci UNUSED_P(enc); 6567db96d56Sopenharmony_ci switch (tok) { 6577db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 6587db96d56Sopenharmony_ci return XML_ROLE_NOTATION_NONE; 6597db96d56Sopenharmony_ci case XML_TOK_LITERAL: 6607db96d56Sopenharmony_ci state->handler = notation4; 6617db96d56Sopenharmony_ci return XML_ROLE_NOTATION_PUBLIC_ID; 6627db96d56Sopenharmony_ci } 6637db96d56Sopenharmony_ci return common(state, tok); 6647db96d56Sopenharmony_ci} 6657db96d56Sopenharmony_ci 6667db96d56Sopenharmony_cistatic int PTRCALL 6677db96d56Sopenharmony_cinotation3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 6687db96d56Sopenharmony_ci const ENCODING *enc) { 6697db96d56Sopenharmony_ci UNUSED_P(ptr); 6707db96d56Sopenharmony_ci UNUSED_P(end); 6717db96d56Sopenharmony_ci UNUSED_P(enc); 6727db96d56Sopenharmony_ci switch (tok) { 6737db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 6747db96d56Sopenharmony_ci return XML_ROLE_NOTATION_NONE; 6757db96d56Sopenharmony_ci case XML_TOK_LITERAL: 6767db96d56Sopenharmony_ci state->handler = declClose; 6777db96d56Sopenharmony_ci state->role_none = XML_ROLE_NOTATION_NONE; 6787db96d56Sopenharmony_ci return XML_ROLE_NOTATION_SYSTEM_ID; 6797db96d56Sopenharmony_ci } 6807db96d56Sopenharmony_ci return common(state, tok); 6817db96d56Sopenharmony_ci} 6827db96d56Sopenharmony_ci 6837db96d56Sopenharmony_cistatic int PTRCALL 6847db96d56Sopenharmony_cinotation4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 6857db96d56Sopenharmony_ci const ENCODING *enc) { 6867db96d56Sopenharmony_ci UNUSED_P(ptr); 6877db96d56Sopenharmony_ci UNUSED_P(end); 6887db96d56Sopenharmony_ci UNUSED_P(enc); 6897db96d56Sopenharmony_ci switch (tok) { 6907db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 6917db96d56Sopenharmony_ci return XML_ROLE_NOTATION_NONE; 6927db96d56Sopenharmony_ci case XML_TOK_LITERAL: 6937db96d56Sopenharmony_ci state->handler = declClose; 6947db96d56Sopenharmony_ci state->role_none = XML_ROLE_NOTATION_NONE; 6957db96d56Sopenharmony_ci return XML_ROLE_NOTATION_SYSTEM_ID; 6967db96d56Sopenharmony_ci case XML_TOK_DECL_CLOSE: 6977db96d56Sopenharmony_ci setTopLevel(state); 6987db96d56Sopenharmony_ci return XML_ROLE_NOTATION_NO_SYSTEM_ID; 6997db96d56Sopenharmony_ci } 7007db96d56Sopenharmony_ci return common(state, tok); 7017db96d56Sopenharmony_ci} 7027db96d56Sopenharmony_ci 7037db96d56Sopenharmony_cistatic int PTRCALL 7047db96d56Sopenharmony_ciattlist0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 7057db96d56Sopenharmony_ci const ENCODING *enc) { 7067db96d56Sopenharmony_ci UNUSED_P(ptr); 7077db96d56Sopenharmony_ci UNUSED_P(end); 7087db96d56Sopenharmony_ci UNUSED_P(enc); 7097db96d56Sopenharmony_ci switch (tok) { 7107db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 7117db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 7127db96d56Sopenharmony_ci case XML_TOK_NAME: 7137db96d56Sopenharmony_ci case XML_TOK_PREFIXED_NAME: 7147db96d56Sopenharmony_ci state->handler = attlist1; 7157db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_ELEMENT_NAME; 7167db96d56Sopenharmony_ci } 7177db96d56Sopenharmony_ci return common(state, tok); 7187db96d56Sopenharmony_ci} 7197db96d56Sopenharmony_ci 7207db96d56Sopenharmony_cistatic int PTRCALL 7217db96d56Sopenharmony_ciattlist1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 7227db96d56Sopenharmony_ci const ENCODING *enc) { 7237db96d56Sopenharmony_ci UNUSED_P(ptr); 7247db96d56Sopenharmony_ci UNUSED_P(end); 7257db96d56Sopenharmony_ci UNUSED_P(enc); 7267db96d56Sopenharmony_ci switch (tok) { 7277db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 7287db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 7297db96d56Sopenharmony_ci case XML_TOK_DECL_CLOSE: 7307db96d56Sopenharmony_ci setTopLevel(state); 7317db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 7327db96d56Sopenharmony_ci case XML_TOK_NAME: 7337db96d56Sopenharmony_ci case XML_TOK_PREFIXED_NAME: 7347db96d56Sopenharmony_ci state->handler = attlist2; 7357db96d56Sopenharmony_ci return XML_ROLE_ATTRIBUTE_NAME; 7367db96d56Sopenharmony_ci } 7377db96d56Sopenharmony_ci return common(state, tok); 7387db96d56Sopenharmony_ci} 7397db96d56Sopenharmony_ci 7407db96d56Sopenharmony_cistatic int PTRCALL 7417db96d56Sopenharmony_ciattlist2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 7427db96d56Sopenharmony_ci const ENCODING *enc) { 7437db96d56Sopenharmony_ci switch (tok) { 7447db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 7457db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 7467db96d56Sopenharmony_ci case XML_TOK_NAME: { 7477db96d56Sopenharmony_ci static const char *const types[] = { 7487db96d56Sopenharmony_ci KW_CDATA, KW_ID, KW_IDREF, KW_IDREFS, 7497db96d56Sopenharmony_ci KW_ENTITY, KW_ENTITIES, KW_NMTOKEN, KW_NMTOKENS, 7507db96d56Sopenharmony_ci }; 7517db96d56Sopenharmony_ci int i; 7527db96d56Sopenharmony_ci for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i++) 7537db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, types[i])) { 7547db96d56Sopenharmony_ci state->handler = attlist8; 7557db96d56Sopenharmony_ci return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i; 7567db96d56Sopenharmony_ci } 7577db96d56Sopenharmony_ci } 7587db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) { 7597db96d56Sopenharmony_ci state->handler = attlist5; 7607db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 7617db96d56Sopenharmony_ci } 7627db96d56Sopenharmony_ci break; 7637db96d56Sopenharmony_ci case XML_TOK_OPEN_PAREN: 7647db96d56Sopenharmony_ci state->handler = attlist3; 7657db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 7667db96d56Sopenharmony_ci } 7677db96d56Sopenharmony_ci return common(state, tok); 7687db96d56Sopenharmony_ci} 7697db96d56Sopenharmony_ci 7707db96d56Sopenharmony_cistatic int PTRCALL 7717db96d56Sopenharmony_ciattlist3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 7727db96d56Sopenharmony_ci const ENCODING *enc) { 7737db96d56Sopenharmony_ci UNUSED_P(ptr); 7747db96d56Sopenharmony_ci UNUSED_P(end); 7757db96d56Sopenharmony_ci UNUSED_P(enc); 7767db96d56Sopenharmony_ci switch (tok) { 7777db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 7787db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 7797db96d56Sopenharmony_ci case XML_TOK_NMTOKEN: 7807db96d56Sopenharmony_ci case XML_TOK_NAME: 7817db96d56Sopenharmony_ci case XML_TOK_PREFIXED_NAME: 7827db96d56Sopenharmony_ci state->handler = attlist4; 7837db96d56Sopenharmony_ci return XML_ROLE_ATTRIBUTE_ENUM_VALUE; 7847db96d56Sopenharmony_ci } 7857db96d56Sopenharmony_ci return common(state, tok); 7867db96d56Sopenharmony_ci} 7877db96d56Sopenharmony_ci 7887db96d56Sopenharmony_cistatic int PTRCALL 7897db96d56Sopenharmony_ciattlist4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 7907db96d56Sopenharmony_ci const ENCODING *enc) { 7917db96d56Sopenharmony_ci UNUSED_P(ptr); 7927db96d56Sopenharmony_ci UNUSED_P(end); 7937db96d56Sopenharmony_ci UNUSED_P(enc); 7947db96d56Sopenharmony_ci switch (tok) { 7957db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 7967db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 7977db96d56Sopenharmony_ci case XML_TOK_CLOSE_PAREN: 7987db96d56Sopenharmony_ci state->handler = attlist8; 7997db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 8007db96d56Sopenharmony_ci case XML_TOK_OR: 8017db96d56Sopenharmony_ci state->handler = attlist3; 8027db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 8037db96d56Sopenharmony_ci } 8047db96d56Sopenharmony_ci return common(state, tok); 8057db96d56Sopenharmony_ci} 8067db96d56Sopenharmony_ci 8077db96d56Sopenharmony_cistatic int PTRCALL 8087db96d56Sopenharmony_ciattlist5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 8097db96d56Sopenharmony_ci const ENCODING *enc) { 8107db96d56Sopenharmony_ci UNUSED_P(ptr); 8117db96d56Sopenharmony_ci UNUSED_P(end); 8127db96d56Sopenharmony_ci UNUSED_P(enc); 8137db96d56Sopenharmony_ci switch (tok) { 8147db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 8157db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 8167db96d56Sopenharmony_ci case XML_TOK_OPEN_PAREN: 8177db96d56Sopenharmony_ci state->handler = attlist6; 8187db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 8197db96d56Sopenharmony_ci } 8207db96d56Sopenharmony_ci return common(state, tok); 8217db96d56Sopenharmony_ci} 8227db96d56Sopenharmony_ci 8237db96d56Sopenharmony_cistatic int PTRCALL 8247db96d56Sopenharmony_ciattlist6(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 8257db96d56Sopenharmony_ci const ENCODING *enc) { 8267db96d56Sopenharmony_ci UNUSED_P(ptr); 8277db96d56Sopenharmony_ci UNUSED_P(end); 8287db96d56Sopenharmony_ci UNUSED_P(enc); 8297db96d56Sopenharmony_ci switch (tok) { 8307db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 8317db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 8327db96d56Sopenharmony_ci case XML_TOK_NAME: 8337db96d56Sopenharmony_ci state->handler = attlist7; 8347db96d56Sopenharmony_ci return XML_ROLE_ATTRIBUTE_NOTATION_VALUE; 8357db96d56Sopenharmony_ci } 8367db96d56Sopenharmony_ci return common(state, tok); 8377db96d56Sopenharmony_ci} 8387db96d56Sopenharmony_ci 8397db96d56Sopenharmony_cistatic int PTRCALL 8407db96d56Sopenharmony_ciattlist7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 8417db96d56Sopenharmony_ci const ENCODING *enc) { 8427db96d56Sopenharmony_ci UNUSED_P(ptr); 8437db96d56Sopenharmony_ci UNUSED_P(end); 8447db96d56Sopenharmony_ci UNUSED_P(enc); 8457db96d56Sopenharmony_ci switch (tok) { 8467db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 8477db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 8487db96d56Sopenharmony_ci case XML_TOK_CLOSE_PAREN: 8497db96d56Sopenharmony_ci state->handler = attlist8; 8507db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 8517db96d56Sopenharmony_ci case XML_TOK_OR: 8527db96d56Sopenharmony_ci state->handler = attlist6; 8537db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 8547db96d56Sopenharmony_ci } 8557db96d56Sopenharmony_ci return common(state, tok); 8567db96d56Sopenharmony_ci} 8577db96d56Sopenharmony_ci 8587db96d56Sopenharmony_ci/* default value */ 8597db96d56Sopenharmony_cistatic int PTRCALL 8607db96d56Sopenharmony_ciattlist8(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 8617db96d56Sopenharmony_ci const ENCODING *enc) { 8627db96d56Sopenharmony_ci switch (tok) { 8637db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 8647db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 8657db96d56Sopenharmony_ci case XML_TOK_POUND_NAME: 8667db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, 8677db96d56Sopenharmony_ci KW_IMPLIED)) { 8687db96d56Sopenharmony_ci state->handler = attlist1; 8697db96d56Sopenharmony_ci return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE; 8707db96d56Sopenharmony_ci } 8717db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, 8727db96d56Sopenharmony_ci KW_REQUIRED)) { 8737db96d56Sopenharmony_ci state->handler = attlist1; 8747db96d56Sopenharmony_ci return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE; 8757db96d56Sopenharmony_ci } 8767db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, 8777db96d56Sopenharmony_ci KW_FIXED)) { 8787db96d56Sopenharmony_ci state->handler = attlist9; 8797db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 8807db96d56Sopenharmony_ci } 8817db96d56Sopenharmony_ci break; 8827db96d56Sopenharmony_ci case XML_TOK_LITERAL: 8837db96d56Sopenharmony_ci state->handler = attlist1; 8847db96d56Sopenharmony_ci return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE; 8857db96d56Sopenharmony_ci } 8867db96d56Sopenharmony_ci return common(state, tok); 8877db96d56Sopenharmony_ci} 8887db96d56Sopenharmony_ci 8897db96d56Sopenharmony_cistatic int PTRCALL 8907db96d56Sopenharmony_ciattlist9(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 8917db96d56Sopenharmony_ci const ENCODING *enc) { 8927db96d56Sopenharmony_ci UNUSED_P(ptr); 8937db96d56Sopenharmony_ci UNUSED_P(end); 8947db96d56Sopenharmony_ci UNUSED_P(enc); 8957db96d56Sopenharmony_ci switch (tok) { 8967db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 8977db96d56Sopenharmony_ci return XML_ROLE_ATTLIST_NONE; 8987db96d56Sopenharmony_ci case XML_TOK_LITERAL: 8997db96d56Sopenharmony_ci state->handler = attlist1; 9007db96d56Sopenharmony_ci return XML_ROLE_FIXED_ATTRIBUTE_VALUE; 9017db96d56Sopenharmony_ci } 9027db96d56Sopenharmony_ci return common(state, tok); 9037db96d56Sopenharmony_ci} 9047db96d56Sopenharmony_ci 9057db96d56Sopenharmony_cistatic int PTRCALL 9067db96d56Sopenharmony_cielement0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 9077db96d56Sopenharmony_ci const ENCODING *enc) { 9087db96d56Sopenharmony_ci UNUSED_P(ptr); 9097db96d56Sopenharmony_ci UNUSED_P(end); 9107db96d56Sopenharmony_ci UNUSED_P(enc); 9117db96d56Sopenharmony_ci switch (tok) { 9127db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 9137db96d56Sopenharmony_ci return XML_ROLE_ELEMENT_NONE; 9147db96d56Sopenharmony_ci case XML_TOK_NAME: 9157db96d56Sopenharmony_ci case XML_TOK_PREFIXED_NAME: 9167db96d56Sopenharmony_ci state->handler = element1; 9177db96d56Sopenharmony_ci return XML_ROLE_ELEMENT_NAME; 9187db96d56Sopenharmony_ci } 9197db96d56Sopenharmony_ci return common(state, tok); 9207db96d56Sopenharmony_ci} 9217db96d56Sopenharmony_ci 9227db96d56Sopenharmony_cistatic int PTRCALL 9237db96d56Sopenharmony_cielement1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 9247db96d56Sopenharmony_ci const ENCODING *enc) { 9257db96d56Sopenharmony_ci switch (tok) { 9267db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 9277db96d56Sopenharmony_ci return XML_ROLE_ELEMENT_NONE; 9287db96d56Sopenharmony_ci case XML_TOK_NAME: 9297db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) { 9307db96d56Sopenharmony_ci state->handler = declClose; 9317db96d56Sopenharmony_ci state->role_none = XML_ROLE_ELEMENT_NONE; 9327db96d56Sopenharmony_ci return XML_ROLE_CONTENT_EMPTY; 9337db96d56Sopenharmony_ci } 9347db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) { 9357db96d56Sopenharmony_ci state->handler = declClose; 9367db96d56Sopenharmony_ci state->role_none = XML_ROLE_ELEMENT_NONE; 9377db96d56Sopenharmony_ci return XML_ROLE_CONTENT_ANY; 9387db96d56Sopenharmony_ci } 9397db96d56Sopenharmony_ci break; 9407db96d56Sopenharmony_ci case XML_TOK_OPEN_PAREN: 9417db96d56Sopenharmony_ci state->handler = element2; 9427db96d56Sopenharmony_ci state->level = 1; 9437db96d56Sopenharmony_ci return XML_ROLE_GROUP_OPEN; 9447db96d56Sopenharmony_ci } 9457db96d56Sopenharmony_ci return common(state, tok); 9467db96d56Sopenharmony_ci} 9477db96d56Sopenharmony_ci 9487db96d56Sopenharmony_cistatic int PTRCALL 9497db96d56Sopenharmony_cielement2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 9507db96d56Sopenharmony_ci const ENCODING *enc) { 9517db96d56Sopenharmony_ci switch (tok) { 9527db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 9537db96d56Sopenharmony_ci return XML_ROLE_ELEMENT_NONE; 9547db96d56Sopenharmony_ci case XML_TOK_POUND_NAME: 9557db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, 9567db96d56Sopenharmony_ci KW_PCDATA)) { 9577db96d56Sopenharmony_ci state->handler = element3; 9587db96d56Sopenharmony_ci return XML_ROLE_CONTENT_PCDATA; 9597db96d56Sopenharmony_ci } 9607db96d56Sopenharmony_ci break; 9617db96d56Sopenharmony_ci case XML_TOK_OPEN_PAREN: 9627db96d56Sopenharmony_ci state->level = 2; 9637db96d56Sopenharmony_ci state->handler = element6; 9647db96d56Sopenharmony_ci return XML_ROLE_GROUP_OPEN; 9657db96d56Sopenharmony_ci case XML_TOK_NAME: 9667db96d56Sopenharmony_ci case XML_TOK_PREFIXED_NAME: 9677db96d56Sopenharmony_ci state->handler = element7; 9687db96d56Sopenharmony_ci return XML_ROLE_CONTENT_ELEMENT; 9697db96d56Sopenharmony_ci case XML_TOK_NAME_QUESTION: 9707db96d56Sopenharmony_ci state->handler = element7; 9717db96d56Sopenharmony_ci return XML_ROLE_CONTENT_ELEMENT_OPT; 9727db96d56Sopenharmony_ci case XML_TOK_NAME_ASTERISK: 9737db96d56Sopenharmony_ci state->handler = element7; 9747db96d56Sopenharmony_ci return XML_ROLE_CONTENT_ELEMENT_REP; 9757db96d56Sopenharmony_ci case XML_TOK_NAME_PLUS: 9767db96d56Sopenharmony_ci state->handler = element7; 9777db96d56Sopenharmony_ci return XML_ROLE_CONTENT_ELEMENT_PLUS; 9787db96d56Sopenharmony_ci } 9797db96d56Sopenharmony_ci return common(state, tok); 9807db96d56Sopenharmony_ci} 9817db96d56Sopenharmony_ci 9827db96d56Sopenharmony_cistatic int PTRCALL 9837db96d56Sopenharmony_cielement3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 9847db96d56Sopenharmony_ci const ENCODING *enc) { 9857db96d56Sopenharmony_ci UNUSED_P(ptr); 9867db96d56Sopenharmony_ci UNUSED_P(end); 9877db96d56Sopenharmony_ci UNUSED_P(enc); 9887db96d56Sopenharmony_ci switch (tok) { 9897db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 9907db96d56Sopenharmony_ci return XML_ROLE_ELEMENT_NONE; 9917db96d56Sopenharmony_ci case XML_TOK_CLOSE_PAREN: 9927db96d56Sopenharmony_ci state->handler = declClose; 9937db96d56Sopenharmony_ci state->role_none = XML_ROLE_ELEMENT_NONE; 9947db96d56Sopenharmony_ci return XML_ROLE_GROUP_CLOSE; 9957db96d56Sopenharmony_ci case XML_TOK_CLOSE_PAREN_ASTERISK: 9967db96d56Sopenharmony_ci state->handler = declClose; 9977db96d56Sopenharmony_ci state->role_none = XML_ROLE_ELEMENT_NONE; 9987db96d56Sopenharmony_ci return XML_ROLE_GROUP_CLOSE_REP; 9997db96d56Sopenharmony_ci case XML_TOK_OR: 10007db96d56Sopenharmony_ci state->handler = element4; 10017db96d56Sopenharmony_ci return XML_ROLE_ELEMENT_NONE; 10027db96d56Sopenharmony_ci } 10037db96d56Sopenharmony_ci return common(state, tok); 10047db96d56Sopenharmony_ci} 10057db96d56Sopenharmony_ci 10067db96d56Sopenharmony_cistatic int PTRCALL 10077db96d56Sopenharmony_cielement4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 10087db96d56Sopenharmony_ci const ENCODING *enc) { 10097db96d56Sopenharmony_ci UNUSED_P(ptr); 10107db96d56Sopenharmony_ci UNUSED_P(end); 10117db96d56Sopenharmony_ci UNUSED_P(enc); 10127db96d56Sopenharmony_ci switch (tok) { 10137db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 10147db96d56Sopenharmony_ci return XML_ROLE_ELEMENT_NONE; 10157db96d56Sopenharmony_ci case XML_TOK_NAME: 10167db96d56Sopenharmony_ci case XML_TOK_PREFIXED_NAME: 10177db96d56Sopenharmony_ci state->handler = element5; 10187db96d56Sopenharmony_ci return XML_ROLE_CONTENT_ELEMENT; 10197db96d56Sopenharmony_ci } 10207db96d56Sopenharmony_ci return common(state, tok); 10217db96d56Sopenharmony_ci} 10227db96d56Sopenharmony_ci 10237db96d56Sopenharmony_cistatic int PTRCALL 10247db96d56Sopenharmony_cielement5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 10257db96d56Sopenharmony_ci const ENCODING *enc) { 10267db96d56Sopenharmony_ci UNUSED_P(ptr); 10277db96d56Sopenharmony_ci UNUSED_P(end); 10287db96d56Sopenharmony_ci UNUSED_P(enc); 10297db96d56Sopenharmony_ci switch (tok) { 10307db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 10317db96d56Sopenharmony_ci return XML_ROLE_ELEMENT_NONE; 10327db96d56Sopenharmony_ci case XML_TOK_CLOSE_PAREN_ASTERISK: 10337db96d56Sopenharmony_ci state->handler = declClose; 10347db96d56Sopenharmony_ci state->role_none = XML_ROLE_ELEMENT_NONE; 10357db96d56Sopenharmony_ci return XML_ROLE_GROUP_CLOSE_REP; 10367db96d56Sopenharmony_ci case XML_TOK_OR: 10377db96d56Sopenharmony_ci state->handler = element4; 10387db96d56Sopenharmony_ci return XML_ROLE_ELEMENT_NONE; 10397db96d56Sopenharmony_ci } 10407db96d56Sopenharmony_ci return common(state, tok); 10417db96d56Sopenharmony_ci} 10427db96d56Sopenharmony_ci 10437db96d56Sopenharmony_cistatic int PTRCALL 10447db96d56Sopenharmony_cielement6(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 10457db96d56Sopenharmony_ci const ENCODING *enc) { 10467db96d56Sopenharmony_ci UNUSED_P(ptr); 10477db96d56Sopenharmony_ci UNUSED_P(end); 10487db96d56Sopenharmony_ci UNUSED_P(enc); 10497db96d56Sopenharmony_ci switch (tok) { 10507db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 10517db96d56Sopenharmony_ci return XML_ROLE_ELEMENT_NONE; 10527db96d56Sopenharmony_ci case XML_TOK_OPEN_PAREN: 10537db96d56Sopenharmony_ci state->level += 1; 10547db96d56Sopenharmony_ci return XML_ROLE_GROUP_OPEN; 10557db96d56Sopenharmony_ci case XML_TOK_NAME: 10567db96d56Sopenharmony_ci case XML_TOK_PREFIXED_NAME: 10577db96d56Sopenharmony_ci state->handler = element7; 10587db96d56Sopenharmony_ci return XML_ROLE_CONTENT_ELEMENT; 10597db96d56Sopenharmony_ci case XML_TOK_NAME_QUESTION: 10607db96d56Sopenharmony_ci state->handler = element7; 10617db96d56Sopenharmony_ci return XML_ROLE_CONTENT_ELEMENT_OPT; 10627db96d56Sopenharmony_ci case XML_TOK_NAME_ASTERISK: 10637db96d56Sopenharmony_ci state->handler = element7; 10647db96d56Sopenharmony_ci return XML_ROLE_CONTENT_ELEMENT_REP; 10657db96d56Sopenharmony_ci case XML_TOK_NAME_PLUS: 10667db96d56Sopenharmony_ci state->handler = element7; 10677db96d56Sopenharmony_ci return XML_ROLE_CONTENT_ELEMENT_PLUS; 10687db96d56Sopenharmony_ci } 10697db96d56Sopenharmony_ci return common(state, tok); 10707db96d56Sopenharmony_ci} 10717db96d56Sopenharmony_ci 10727db96d56Sopenharmony_cistatic int PTRCALL 10737db96d56Sopenharmony_cielement7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 10747db96d56Sopenharmony_ci const ENCODING *enc) { 10757db96d56Sopenharmony_ci UNUSED_P(ptr); 10767db96d56Sopenharmony_ci UNUSED_P(end); 10777db96d56Sopenharmony_ci UNUSED_P(enc); 10787db96d56Sopenharmony_ci switch (tok) { 10797db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 10807db96d56Sopenharmony_ci return XML_ROLE_ELEMENT_NONE; 10817db96d56Sopenharmony_ci case XML_TOK_CLOSE_PAREN: 10827db96d56Sopenharmony_ci state->level -= 1; 10837db96d56Sopenharmony_ci if (state->level == 0) { 10847db96d56Sopenharmony_ci state->handler = declClose; 10857db96d56Sopenharmony_ci state->role_none = XML_ROLE_ELEMENT_NONE; 10867db96d56Sopenharmony_ci } 10877db96d56Sopenharmony_ci return XML_ROLE_GROUP_CLOSE; 10887db96d56Sopenharmony_ci case XML_TOK_CLOSE_PAREN_ASTERISK: 10897db96d56Sopenharmony_ci state->level -= 1; 10907db96d56Sopenharmony_ci if (state->level == 0) { 10917db96d56Sopenharmony_ci state->handler = declClose; 10927db96d56Sopenharmony_ci state->role_none = XML_ROLE_ELEMENT_NONE; 10937db96d56Sopenharmony_ci } 10947db96d56Sopenharmony_ci return XML_ROLE_GROUP_CLOSE_REP; 10957db96d56Sopenharmony_ci case XML_TOK_CLOSE_PAREN_QUESTION: 10967db96d56Sopenharmony_ci state->level -= 1; 10977db96d56Sopenharmony_ci if (state->level == 0) { 10987db96d56Sopenharmony_ci state->handler = declClose; 10997db96d56Sopenharmony_ci state->role_none = XML_ROLE_ELEMENT_NONE; 11007db96d56Sopenharmony_ci } 11017db96d56Sopenharmony_ci return XML_ROLE_GROUP_CLOSE_OPT; 11027db96d56Sopenharmony_ci case XML_TOK_CLOSE_PAREN_PLUS: 11037db96d56Sopenharmony_ci state->level -= 1; 11047db96d56Sopenharmony_ci if (state->level == 0) { 11057db96d56Sopenharmony_ci state->handler = declClose; 11067db96d56Sopenharmony_ci state->role_none = XML_ROLE_ELEMENT_NONE; 11077db96d56Sopenharmony_ci } 11087db96d56Sopenharmony_ci return XML_ROLE_GROUP_CLOSE_PLUS; 11097db96d56Sopenharmony_ci case XML_TOK_COMMA: 11107db96d56Sopenharmony_ci state->handler = element6; 11117db96d56Sopenharmony_ci return XML_ROLE_GROUP_SEQUENCE; 11127db96d56Sopenharmony_ci case XML_TOK_OR: 11137db96d56Sopenharmony_ci state->handler = element6; 11147db96d56Sopenharmony_ci return XML_ROLE_GROUP_CHOICE; 11157db96d56Sopenharmony_ci } 11167db96d56Sopenharmony_ci return common(state, tok); 11177db96d56Sopenharmony_ci} 11187db96d56Sopenharmony_ci 11197db96d56Sopenharmony_ci#ifdef XML_DTD 11207db96d56Sopenharmony_ci 11217db96d56Sopenharmony_cistatic int PTRCALL 11227db96d56Sopenharmony_cicondSect0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 11237db96d56Sopenharmony_ci const ENCODING *enc) { 11247db96d56Sopenharmony_ci switch (tok) { 11257db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 11267db96d56Sopenharmony_ci return XML_ROLE_NONE; 11277db96d56Sopenharmony_ci case XML_TOK_NAME: 11287db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) { 11297db96d56Sopenharmony_ci state->handler = condSect1; 11307db96d56Sopenharmony_ci return XML_ROLE_NONE; 11317db96d56Sopenharmony_ci } 11327db96d56Sopenharmony_ci if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) { 11337db96d56Sopenharmony_ci state->handler = condSect2; 11347db96d56Sopenharmony_ci return XML_ROLE_NONE; 11357db96d56Sopenharmony_ci } 11367db96d56Sopenharmony_ci break; 11377db96d56Sopenharmony_ci } 11387db96d56Sopenharmony_ci return common(state, tok); 11397db96d56Sopenharmony_ci} 11407db96d56Sopenharmony_ci 11417db96d56Sopenharmony_cistatic int PTRCALL 11427db96d56Sopenharmony_cicondSect1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 11437db96d56Sopenharmony_ci const ENCODING *enc) { 11447db96d56Sopenharmony_ci UNUSED_P(ptr); 11457db96d56Sopenharmony_ci UNUSED_P(end); 11467db96d56Sopenharmony_ci UNUSED_P(enc); 11477db96d56Sopenharmony_ci switch (tok) { 11487db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 11497db96d56Sopenharmony_ci return XML_ROLE_NONE; 11507db96d56Sopenharmony_ci case XML_TOK_OPEN_BRACKET: 11517db96d56Sopenharmony_ci state->handler = externalSubset1; 11527db96d56Sopenharmony_ci state->includeLevel += 1; 11537db96d56Sopenharmony_ci return XML_ROLE_NONE; 11547db96d56Sopenharmony_ci } 11557db96d56Sopenharmony_ci return common(state, tok); 11567db96d56Sopenharmony_ci} 11577db96d56Sopenharmony_ci 11587db96d56Sopenharmony_cistatic int PTRCALL 11597db96d56Sopenharmony_cicondSect2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 11607db96d56Sopenharmony_ci const ENCODING *enc) { 11617db96d56Sopenharmony_ci UNUSED_P(ptr); 11627db96d56Sopenharmony_ci UNUSED_P(end); 11637db96d56Sopenharmony_ci UNUSED_P(enc); 11647db96d56Sopenharmony_ci switch (tok) { 11657db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 11667db96d56Sopenharmony_ci return XML_ROLE_NONE; 11677db96d56Sopenharmony_ci case XML_TOK_OPEN_BRACKET: 11687db96d56Sopenharmony_ci state->handler = externalSubset1; 11697db96d56Sopenharmony_ci return XML_ROLE_IGNORE_SECT; 11707db96d56Sopenharmony_ci } 11717db96d56Sopenharmony_ci return common(state, tok); 11727db96d56Sopenharmony_ci} 11737db96d56Sopenharmony_ci 11747db96d56Sopenharmony_ci#endif /* XML_DTD */ 11757db96d56Sopenharmony_ci 11767db96d56Sopenharmony_cistatic int PTRCALL 11777db96d56Sopenharmony_cideclClose(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 11787db96d56Sopenharmony_ci const ENCODING *enc) { 11797db96d56Sopenharmony_ci UNUSED_P(ptr); 11807db96d56Sopenharmony_ci UNUSED_P(end); 11817db96d56Sopenharmony_ci UNUSED_P(enc); 11827db96d56Sopenharmony_ci switch (tok) { 11837db96d56Sopenharmony_ci case XML_TOK_PROLOG_S: 11847db96d56Sopenharmony_ci return state->role_none; 11857db96d56Sopenharmony_ci case XML_TOK_DECL_CLOSE: 11867db96d56Sopenharmony_ci setTopLevel(state); 11877db96d56Sopenharmony_ci return state->role_none; 11887db96d56Sopenharmony_ci } 11897db96d56Sopenharmony_ci return common(state, tok); 11907db96d56Sopenharmony_ci} 11917db96d56Sopenharmony_ci 11927db96d56Sopenharmony_ci/* This function will only be invoked if the internal logic of the 11937db96d56Sopenharmony_ci * parser has broken down. It is used in two cases: 11947db96d56Sopenharmony_ci * 11957db96d56Sopenharmony_ci * 1: When the XML prolog has been finished. At this point the 11967db96d56Sopenharmony_ci * processor (the parser level above these role handlers) should 11977db96d56Sopenharmony_ci * switch from prologProcessor to contentProcessor and reinitialise 11987db96d56Sopenharmony_ci * the handler function. 11997db96d56Sopenharmony_ci * 12007db96d56Sopenharmony_ci * 2: When an error has been detected (via common() below). At this 12017db96d56Sopenharmony_ci * point again the processor should be switched to errorProcessor, 12027db96d56Sopenharmony_ci * which will never call a handler. 12037db96d56Sopenharmony_ci * 12047db96d56Sopenharmony_ci * The result of this is that error() can only be called if the 12057db96d56Sopenharmony_ci * processor switch failed to happen, which is an internal error and 12067db96d56Sopenharmony_ci * therefore we shouldn't be able to provoke it simply by using the 12077db96d56Sopenharmony_ci * library. It is a necessary backstop, however, so we merely exclude 12087db96d56Sopenharmony_ci * it from the coverage statistics. 12097db96d56Sopenharmony_ci * 12107db96d56Sopenharmony_ci * LCOV_EXCL_START 12117db96d56Sopenharmony_ci */ 12127db96d56Sopenharmony_cistatic int PTRCALL 12137db96d56Sopenharmony_cierror(PROLOG_STATE *state, int tok, const char *ptr, const char *end, 12147db96d56Sopenharmony_ci const ENCODING *enc) { 12157db96d56Sopenharmony_ci UNUSED_P(state); 12167db96d56Sopenharmony_ci UNUSED_P(tok); 12177db96d56Sopenharmony_ci UNUSED_P(ptr); 12187db96d56Sopenharmony_ci UNUSED_P(end); 12197db96d56Sopenharmony_ci UNUSED_P(enc); 12207db96d56Sopenharmony_ci return XML_ROLE_NONE; 12217db96d56Sopenharmony_ci} 12227db96d56Sopenharmony_ci/* LCOV_EXCL_STOP */ 12237db96d56Sopenharmony_ci 12247db96d56Sopenharmony_cistatic int FASTCALL 12257db96d56Sopenharmony_cicommon(PROLOG_STATE *state, int tok) { 12267db96d56Sopenharmony_ci#ifdef XML_DTD 12277db96d56Sopenharmony_ci if (! state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF) 12287db96d56Sopenharmony_ci return XML_ROLE_INNER_PARAM_ENTITY_REF; 12297db96d56Sopenharmony_ci#else 12307db96d56Sopenharmony_ci UNUSED_P(tok); 12317db96d56Sopenharmony_ci#endif 12327db96d56Sopenharmony_ci state->handler = error; 12337db96d56Sopenharmony_ci return XML_ROLE_ERROR; 12347db96d56Sopenharmony_ci} 12357db96d56Sopenharmony_ci 12367db96d56Sopenharmony_civoid 12377db96d56Sopenharmony_ciXmlPrologStateInit(PROLOG_STATE *state) { 12387db96d56Sopenharmony_ci state->handler = prolog0; 12397db96d56Sopenharmony_ci#ifdef XML_DTD 12407db96d56Sopenharmony_ci state->documentEntity = 1; 12417db96d56Sopenharmony_ci state->includeLevel = 0; 12427db96d56Sopenharmony_ci state->inEntityValue = 0; 12437db96d56Sopenharmony_ci#endif /* XML_DTD */ 12447db96d56Sopenharmony_ci} 12457db96d56Sopenharmony_ci 12467db96d56Sopenharmony_ci#ifdef XML_DTD 12477db96d56Sopenharmony_ci 12487db96d56Sopenharmony_civoid 12497db96d56Sopenharmony_ciXmlPrologStateInitExternalEntity(PROLOG_STATE *state) { 12507db96d56Sopenharmony_ci state->handler = externalSubset0; 12517db96d56Sopenharmony_ci state->documentEntity = 0; 12527db96d56Sopenharmony_ci state->includeLevel = 0; 12537db96d56Sopenharmony_ci} 12547db96d56Sopenharmony_ci 12557db96d56Sopenharmony_ci#endif /* XML_DTD */ 1256