1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/parser/expat/lib/xmlrole.c Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,1330 @@ 1.4 +/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd 1.5 + See the file COPYING for copying permission. 1.6 +*/ 1.7 + 1.8 +#include <stddef.h> 1.9 + 1.10 +#ifdef COMPILED_FROM_DSP 1.11 +#include "winconfig.h" 1.12 +#elif defined(MACOS_CLASSIC) 1.13 +#include "macconfig.h" 1.14 +#elif defined(__amigaos4__) 1.15 +#include "amigaconfig.h" 1.16 +#else 1.17 +#ifdef HAVE_EXPAT_CONFIG_H 1.18 +#include <expat_config.h> 1.19 +#endif 1.20 +#endif /* ndef COMPILED_FROM_DSP */ 1.21 + 1.22 +#include "expat_external.h" 1.23 +#include "internal.h" 1.24 +#include "xmlrole.h" 1.25 +#include "ascii.h" 1.26 + 1.27 +/* Doesn't check: 1.28 + 1.29 + that ,| are not mixed in a model group 1.30 + content of literals 1.31 + 1.32 +*/ 1.33 + 1.34 +static const char KW_ANY[] = { 1.35 + ASCII_A, ASCII_N, ASCII_Y, '\0' }; 1.36 +static const char KW_ATTLIST[] = { 1.37 + ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0' }; 1.38 +static const char KW_CDATA[] = { 1.39 + ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; 1.40 +static const char KW_DOCTYPE[] = { 1.41 + ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0' }; 1.42 +static const char KW_ELEMENT[] = { 1.43 + ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0' }; 1.44 +static const char KW_EMPTY[] = { 1.45 + ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0' }; 1.46 +static const char KW_ENTITIES[] = { 1.47 + ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S, 1.48 + '\0' }; 1.49 +static const char KW_ENTITY[] = { 1.50 + ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' }; 1.51 +static const char KW_FIXED[] = { 1.52 + ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0' }; 1.53 +static const char KW_ID[] = { 1.54 + ASCII_I, ASCII_D, '\0' }; 1.55 +static const char KW_IDREF[] = { 1.56 + ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' }; 1.57 +static const char KW_IDREFS[] = { 1.58 + ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' }; 1.59 +static const char KW_IGNORE[] = { 1.60 + ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0' }; 1.61 +static const char KW_IMPLIED[] = { 1.62 + ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0' }; 1.63 +static const char KW_INCLUDE[] = { 1.64 + ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0' }; 1.65 +static const char KW_NDATA[] = { 1.66 + ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; 1.67 +static const char KW_NMTOKEN[] = { 1.68 + ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' }; 1.69 +static const char KW_NMTOKENS[] = { 1.70 + ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S, 1.71 + '\0' }; 1.72 +static const char KW_NOTATION[] = 1.73 + { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N, 1.74 + '\0' }; 1.75 +static const char KW_PCDATA[] = { 1.76 + ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; 1.77 +static const char KW_PUBLIC[] = { 1.78 + ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0' }; 1.79 +static const char KW_REQUIRED[] = { 1.80 + ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, ASCII_R, ASCII_E, ASCII_D, 1.81 + '\0' }; 1.82 +static const char KW_SYSTEM[] = { 1.83 + ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0' }; 1.84 + 1.85 +#ifndef MIN_BYTES_PER_CHAR 1.86 +#define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar) 1.87 +#endif 1.88 + 1.89 +#ifdef XML_DTD 1.90 +#define setTopLevel(state) \ 1.91 + ((state)->handler = ((state)->documentEntity \ 1.92 + ? internalSubset \ 1.93 + : externalSubset1)) 1.94 +#else /* not XML_DTD */ 1.95 +#define setTopLevel(state) ((state)->handler = internalSubset) 1.96 +#endif /* not XML_DTD */ 1.97 + 1.98 +typedef int PTRCALL PROLOG_HANDLER(PROLOG_STATE *state, 1.99 + int tok, 1.100 + const char *ptr, 1.101 + const char *end, 1.102 + const ENCODING *enc); 1.103 + 1.104 +static PROLOG_HANDLER 1.105 + prolog0, prolog1, prolog2, 1.106 + doctype0, doctype1, doctype2, doctype3, doctype4, doctype5, 1.107 + internalSubset, 1.108 + entity0, entity1, entity2, entity3, entity4, entity5, entity6, 1.109 + entity7, entity8, entity9, entity10, 1.110 + notation0, notation1, notation2, notation3, notation4, 1.111 + attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6, 1.112 + attlist7, attlist8, attlist9, 1.113 + element0, element1, element2, element3, element4, element5, element6, 1.114 + element7, 1.115 +#ifdef XML_DTD 1.116 + externalSubset0, externalSubset1, 1.117 + condSect0, condSect1, condSect2, 1.118 +#endif /* XML_DTD */ 1.119 + declClose, 1.120 + error; 1.121 + 1.122 +static int FASTCALL common(PROLOG_STATE *state, int tok); 1.123 + 1.124 +static int PTRCALL 1.125 +prolog0(PROLOG_STATE *state, 1.126 + int tok, 1.127 + const char *ptr, 1.128 + const char *end, 1.129 + const ENCODING *enc) 1.130 +{ 1.131 + switch (tok) { 1.132 + case XML_TOK_PROLOG_S: 1.133 + state->handler = prolog1; 1.134 + return XML_ROLE_NONE; 1.135 + case XML_TOK_XML_DECL: 1.136 + state->handler = prolog1; 1.137 + return XML_ROLE_XML_DECL; 1.138 + case XML_TOK_PI: 1.139 + state->handler = prolog1; 1.140 + return XML_ROLE_PI; 1.141 + case XML_TOK_COMMENT: 1.142 + state->handler = prolog1; 1.143 + return XML_ROLE_COMMENT; 1.144 + case XML_TOK_BOM: 1.145 + return XML_ROLE_NONE; 1.146 + case XML_TOK_DECL_OPEN: 1.147 + if (!XmlNameMatchesAscii(enc, 1.148 + ptr + 2 * MIN_BYTES_PER_CHAR(enc), 1.149 + end, 1.150 + KW_DOCTYPE)) 1.151 + break; 1.152 + state->handler = doctype0; 1.153 + return XML_ROLE_DOCTYPE_NONE; 1.154 + case XML_TOK_INSTANCE_START: 1.155 + state->handler = error; 1.156 + return XML_ROLE_INSTANCE_START; 1.157 + } 1.158 + return common(state, tok); 1.159 +} 1.160 + 1.161 +static int PTRCALL 1.162 +prolog1(PROLOG_STATE *state, 1.163 + int tok, 1.164 + const char *ptr, 1.165 + const char *end, 1.166 + const ENCODING *enc) 1.167 +{ 1.168 + switch (tok) { 1.169 + case XML_TOK_PROLOG_S: 1.170 + return XML_ROLE_NONE; 1.171 + case XML_TOK_PI: 1.172 + return XML_ROLE_PI; 1.173 + case XML_TOK_COMMENT: 1.174 + return XML_ROLE_COMMENT; 1.175 + case XML_TOK_BOM: 1.176 + return XML_ROLE_NONE; 1.177 + case XML_TOK_DECL_OPEN: 1.178 + if (!XmlNameMatchesAscii(enc, 1.179 + ptr + 2 * MIN_BYTES_PER_CHAR(enc), 1.180 + end, 1.181 + KW_DOCTYPE)) 1.182 + break; 1.183 + state->handler = doctype0; 1.184 + return XML_ROLE_DOCTYPE_NONE; 1.185 + case XML_TOK_INSTANCE_START: 1.186 + state->handler = error; 1.187 + return XML_ROLE_INSTANCE_START; 1.188 + } 1.189 + return common(state, tok); 1.190 +} 1.191 + 1.192 +static int PTRCALL 1.193 +prolog2(PROLOG_STATE *state, 1.194 + int tok, 1.195 + const char *ptr, 1.196 + const char *end, 1.197 + const ENCODING *enc) 1.198 +{ 1.199 + switch (tok) { 1.200 + case XML_TOK_PROLOG_S: 1.201 + return XML_ROLE_NONE; 1.202 + case XML_TOK_PI: 1.203 + return XML_ROLE_PI; 1.204 + case XML_TOK_COMMENT: 1.205 + return XML_ROLE_COMMENT; 1.206 + case XML_TOK_INSTANCE_START: 1.207 + state->handler = error; 1.208 + return XML_ROLE_INSTANCE_START; 1.209 + } 1.210 + return common(state, tok); 1.211 +} 1.212 + 1.213 +static int PTRCALL 1.214 +doctype0(PROLOG_STATE *state, 1.215 + int tok, 1.216 + const char *ptr, 1.217 + const char *end, 1.218 + const ENCODING *enc) 1.219 +{ 1.220 + switch (tok) { 1.221 + case XML_TOK_PROLOG_S: 1.222 + return XML_ROLE_DOCTYPE_NONE; 1.223 + case XML_TOK_NAME: 1.224 + case XML_TOK_PREFIXED_NAME: 1.225 + state->handler = doctype1; 1.226 + return XML_ROLE_DOCTYPE_NAME; 1.227 + } 1.228 + return common(state, tok); 1.229 +} 1.230 + 1.231 +static int PTRCALL 1.232 +doctype1(PROLOG_STATE *state, 1.233 + int tok, 1.234 + const char *ptr, 1.235 + const char *end, 1.236 + const ENCODING *enc) 1.237 +{ 1.238 + switch (tok) { 1.239 + case XML_TOK_PROLOG_S: 1.240 + return XML_ROLE_DOCTYPE_NONE; 1.241 + case XML_TOK_OPEN_BRACKET: 1.242 + state->handler = internalSubset; 1.243 + return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; 1.244 + case XML_TOK_DECL_CLOSE: 1.245 + state->handler = prolog2; 1.246 + return XML_ROLE_DOCTYPE_CLOSE; 1.247 + case XML_TOK_NAME: 1.248 + if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { 1.249 + state->handler = doctype3; 1.250 + return XML_ROLE_DOCTYPE_NONE; 1.251 + } 1.252 + if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { 1.253 + state->handler = doctype2; 1.254 + return XML_ROLE_DOCTYPE_NONE; 1.255 + } 1.256 + break; 1.257 + } 1.258 + return common(state, tok); 1.259 +} 1.260 + 1.261 +static int PTRCALL 1.262 +doctype2(PROLOG_STATE *state, 1.263 + int tok, 1.264 + const char *ptr, 1.265 + const char *end, 1.266 + const ENCODING *enc) 1.267 +{ 1.268 + switch (tok) { 1.269 + case XML_TOK_PROLOG_S: 1.270 + return XML_ROLE_DOCTYPE_NONE; 1.271 + case XML_TOK_LITERAL: 1.272 + state->handler = doctype3; 1.273 + return XML_ROLE_DOCTYPE_PUBLIC_ID; 1.274 + } 1.275 + return common(state, tok); 1.276 +} 1.277 + 1.278 +static int PTRCALL 1.279 +doctype3(PROLOG_STATE *state, 1.280 + int tok, 1.281 + const char *ptr, 1.282 + const char *end, 1.283 + const ENCODING *enc) 1.284 +{ 1.285 + switch (tok) { 1.286 + case XML_TOK_PROLOG_S: 1.287 + return XML_ROLE_DOCTYPE_NONE; 1.288 + case XML_TOK_LITERAL: 1.289 + state->handler = doctype4; 1.290 + return XML_ROLE_DOCTYPE_SYSTEM_ID; 1.291 + } 1.292 + return common(state, tok); 1.293 +} 1.294 + 1.295 +static int PTRCALL 1.296 +doctype4(PROLOG_STATE *state, 1.297 + int tok, 1.298 + const char *ptr, 1.299 + const char *end, 1.300 + const ENCODING *enc) 1.301 +{ 1.302 + switch (tok) { 1.303 + case XML_TOK_PROLOG_S: 1.304 + return XML_ROLE_DOCTYPE_NONE; 1.305 + case XML_TOK_OPEN_BRACKET: 1.306 + state->handler = internalSubset; 1.307 + return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; 1.308 + case XML_TOK_DECL_CLOSE: 1.309 + state->handler = prolog2; 1.310 + return XML_ROLE_DOCTYPE_CLOSE; 1.311 + } 1.312 + return common(state, tok); 1.313 +} 1.314 + 1.315 +static int PTRCALL 1.316 +doctype5(PROLOG_STATE *state, 1.317 + int tok, 1.318 + const char *ptr, 1.319 + const char *end, 1.320 + const ENCODING *enc) 1.321 +{ 1.322 + switch (tok) { 1.323 + case XML_TOK_PROLOG_S: 1.324 + return XML_ROLE_DOCTYPE_NONE; 1.325 + case XML_TOK_DECL_CLOSE: 1.326 + state->handler = prolog2; 1.327 + return XML_ROLE_DOCTYPE_CLOSE; 1.328 + } 1.329 + return common(state, tok); 1.330 +} 1.331 + 1.332 +static int PTRCALL 1.333 +internalSubset(PROLOG_STATE *state, 1.334 + int tok, 1.335 + const char *ptr, 1.336 + const char *end, 1.337 + const ENCODING *enc) 1.338 +{ 1.339 + switch (tok) { 1.340 + case XML_TOK_PROLOG_S: 1.341 + return XML_ROLE_NONE; 1.342 + case XML_TOK_DECL_OPEN: 1.343 + if (XmlNameMatchesAscii(enc, 1.344 + ptr + 2 * MIN_BYTES_PER_CHAR(enc), 1.345 + end, 1.346 + KW_ENTITY)) { 1.347 + state->handler = entity0; 1.348 + return XML_ROLE_ENTITY_NONE; 1.349 + } 1.350 + if (XmlNameMatchesAscii(enc, 1.351 + ptr + 2 * MIN_BYTES_PER_CHAR(enc), 1.352 + end, 1.353 + KW_ATTLIST)) { 1.354 + state->handler = attlist0; 1.355 + return XML_ROLE_ATTLIST_NONE; 1.356 + } 1.357 + if (XmlNameMatchesAscii(enc, 1.358 + ptr + 2 * MIN_BYTES_PER_CHAR(enc), 1.359 + end, 1.360 + KW_ELEMENT)) { 1.361 + state->handler = element0; 1.362 + return XML_ROLE_ELEMENT_NONE; 1.363 + } 1.364 + if (XmlNameMatchesAscii(enc, 1.365 + ptr + 2 * MIN_BYTES_PER_CHAR(enc), 1.366 + end, 1.367 + KW_NOTATION)) { 1.368 + state->handler = notation0; 1.369 + return XML_ROLE_NOTATION_NONE; 1.370 + } 1.371 + break; 1.372 + case XML_TOK_PI: 1.373 + return XML_ROLE_PI; 1.374 + case XML_TOK_COMMENT: 1.375 + return XML_ROLE_COMMENT; 1.376 + case XML_TOK_PARAM_ENTITY_REF: 1.377 + return XML_ROLE_PARAM_ENTITY_REF; 1.378 + case XML_TOK_CLOSE_BRACKET: 1.379 + state->handler = doctype5; 1.380 + return XML_ROLE_DOCTYPE_NONE; 1.381 + case XML_TOK_NONE: 1.382 + return XML_ROLE_NONE; 1.383 + } 1.384 + return common(state, tok); 1.385 +} 1.386 + 1.387 +#ifdef XML_DTD 1.388 + 1.389 +static int PTRCALL 1.390 +externalSubset0(PROLOG_STATE *state, 1.391 + int tok, 1.392 + const char *ptr, 1.393 + const char *end, 1.394 + const ENCODING *enc) 1.395 +{ 1.396 + state->handler = externalSubset1; 1.397 + if (tok == XML_TOK_XML_DECL) 1.398 + return XML_ROLE_TEXT_DECL; 1.399 + return externalSubset1(state, tok, ptr, end, enc); 1.400 +} 1.401 + 1.402 +static int PTRCALL 1.403 +externalSubset1(PROLOG_STATE *state, 1.404 + int tok, 1.405 + const char *ptr, 1.406 + const char *end, 1.407 + const ENCODING *enc) 1.408 +{ 1.409 + switch (tok) { 1.410 + case XML_TOK_COND_SECT_OPEN: 1.411 + state->handler = condSect0; 1.412 + return XML_ROLE_NONE; 1.413 + case XML_TOK_COND_SECT_CLOSE: 1.414 + if (state->includeLevel == 0) 1.415 + break; 1.416 + state->includeLevel -= 1; 1.417 + return XML_ROLE_NONE; 1.418 + case XML_TOK_PROLOG_S: 1.419 + return XML_ROLE_NONE; 1.420 + case XML_TOK_CLOSE_BRACKET: 1.421 + break; 1.422 + case XML_TOK_NONE: 1.423 + if (state->includeLevel) 1.424 + break; 1.425 + return XML_ROLE_NONE; 1.426 + default: 1.427 + return internalSubset(state, tok, ptr, end, enc); 1.428 + } 1.429 + return common(state, tok); 1.430 +} 1.431 + 1.432 +#endif /* XML_DTD */ 1.433 + 1.434 +static int PTRCALL 1.435 +entity0(PROLOG_STATE *state, 1.436 + int tok, 1.437 + const char *ptr, 1.438 + const char *end, 1.439 + const ENCODING *enc) 1.440 +{ 1.441 + switch (tok) { 1.442 + case XML_TOK_PROLOG_S: 1.443 + return XML_ROLE_ENTITY_NONE; 1.444 + case XML_TOK_PERCENT: 1.445 + state->handler = entity1; 1.446 + return XML_ROLE_ENTITY_NONE; 1.447 + case XML_TOK_NAME: 1.448 + state->handler = entity2; 1.449 + return XML_ROLE_GENERAL_ENTITY_NAME; 1.450 + } 1.451 + return common(state, tok); 1.452 +} 1.453 + 1.454 +static int PTRCALL 1.455 +entity1(PROLOG_STATE *state, 1.456 + int tok, 1.457 + const char *ptr, 1.458 + const char *end, 1.459 + const ENCODING *enc) 1.460 +{ 1.461 + switch (tok) { 1.462 + case XML_TOK_PROLOG_S: 1.463 + return XML_ROLE_ENTITY_NONE; 1.464 + case XML_TOK_NAME: 1.465 + state->handler = entity7; 1.466 + return XML_ROLE_PARAM_ENTITY_NAME; 1.467 + } 1.468 + return common(state, tok); 1.469 +} 1.470 + 1.471 +static int PTRCALL 1.472 +entity2(PROLOG_STATE *state, 1.473 + int tok, 1.474 + const char *ptr, 1.475 + const char *end, 1.476 + const ENCODING *enc) 1.477 +{ 1.478 + switch (tok) { 1.479 + case XML_TOK_PROLOG_S: 1.480 + return XML_ROLE_ENTITY_NONE; 1.481 + case XML_TOK_NAME: 1.482 + if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { 1.483 + state->handler = entity4; 1.484 + return XML_ROLE_ENTITY_NONE; 1.485 + } 1.486 + if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { 1.487 + state->handler = entity3; 1.488 + return XML_ROLE_ENTITY_NONE; 1.489 + } 1.490 + break; 1.491 + case XML_TOK_LITERAL: 1.492 + state->handler = declClose; 1.493 + state->role_none = XML_ROLE_ENTITY_NONE; 1.494 + return XML_ROLE_ENTITY_VALUE; 1.495 + } 1.496 + return common(state, tok); 1.497 +} 1.498 + 1.499 +static int PTRCALL 1.500 +entity3(PROLOG_STATE *state, 1.501 + int tok, 1.502 + const char *ptr, 1.503 + const char *end, 1.504 + const ENCODING *enc) 1.505 +{ 1.506 + switch (tok) { 1.507 + case XML_TOK_PROLOG_S: 1.508 + return XML_ROLE_ENTITY_NONE; 1.509 + case XML_TOK_LITERAL: 1.510 + state->handler = entity4; 1.511 + return XML_ROLE_ENTITY_PUBLIC_ID; 1.512 + } 1.513 + return common(state, tok); 1.514 +} 1.515 + 1.516 +static int PTRCALL 1.517 +entity4(PROLOG_STATE *state, 1.518 + int tok, 1.519 + const char *ptr, 1.520 + const char *end, 1.521 + const ENCODING *enc) 1.522 +{ 1.523 + switch (tok) { 1.524 + case XML_TOK_PROLOG_S: 1.525 + return XML_ROLE_ENTITY_NONE; 1.526 + case XML_TOK_LITERAL: 1.527 + state->handler = entity5; 1.528 + return XML_ROLE_ENTITY_SYSTEM_ID; 1.529 + } 1.530 + return common(state, tok); 1.531 +} 1.532 + 1.533 +static int PTRCALL 1.534 +entity5(PROLOG_STATE *state, 1.535 + int tok, 1.536 + const char *ptr, 1.537 + const char *end, 1.538 + const ENCODING *enc) 1.539 +{ 1.540 + switch (tok) { 1.541 + case XML_TOK_PROLOG_S: 1.542 + return XML_ROLE_ENTITY_NONE; 1.543 + case XML_TOK_DECL_CLOSE: 1.544 + setTopLevel(state); 1.545 + return XML_ROLE_ENTITY_COMPLETE; 1.546 + case XML_TOK_NAME: 1.547 + if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) { 1.548 + state->handler = entity6; 1.549 + return XML_ROLE_ENTITY_NONE; 1.550 + } 1.551 + break; 1.552 + } 1.553 + return common(state, tok); 1.554 +} 1.555 + 1.556 +static int PTRCALL 1.557 +entity6(PROLOG_STATE *state, 1.558 + int tok, 1.559 + const char *ptr, 1.560 + const char *end, 1.561 + const ENCODING *enc) 1.562 +{ 1.563 + switch (tok) { 1.564 + case XML_TOK_PROLOG_S: 1.565 + return XML_ROLE_ENTITY_NONE; 1.566 + case XML_TOK_NAME: 1.567 + state->handler = declClose; 1.568 + state->role_none = XML_ROLE_ENTITY_NONE; 1.569 + return XML_ROLE_ENTITY_NOTATION_NAME; 1.570 + } 1.571 + return common(state, tok); 1.572 +} 1.573 + 1.574 +static int PTRCALL 1.575 +entity7(PROLOG_STATE *state, 1.576 + int tok, 1.577 + const char *ptr, 1.578 + const char *end, 1.579 + const ENCODING *enc) 1.580 +{ 1.581 + switch (tok) { 1.582 + case XML_TOK_PROLOG_S: 1.583 + return XML_ROLE_ENTITY_NONE; 1.584 + case XML_TOK_NAME: 1.585 + if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { 1.586 + state->handler = entity9; 1.587 + return XML_ROLE_ENTITY_NONE; 1.588 + } 1.589 + if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { 1.590 + state->handler = entity8; 1.591 + return XML_ROLE_ENTITY_NONE; 1.592 + } 1.593 + break; 1.594 + case XML_TOK_LITERAL: 1.595 + state->handler = declClose; 1.596 + state->role_none = XML_ROLE_ENTITY_NONE; 1.597 + return XML_ROLE_ENTITY_VALUE; 1.598 + } 1.599 + return common(state, tok); 1.600 +} 1.601 + 1.602 +static int PTRCALL 1.603 +entity8(PROLOG_STATE *state, 1.604 + int tok, 1.605 + const char *ptr, 1.606 + const char *end, 1.607 + const ENCODING *enc) 1.608 +{ 1.609 + switch (tok) { 1.610 + case XML_TOK_PROLOG_S: 1.611 + return XML_ROLE_ENTITY_NONE; 1.612 + case XML_TOK_LITERAL: 1.613 + state->handler = entity9; 1.614 + return XML_ROLE_ENTITY_PUBLIC_ID; 1.615 + } 1.616 + return common(state, tok); 1.617 +} 1.618 + 1.619 +static int PTRCALL 1.620 +entity9(PROLOG_STATE *state, 1.621 + int tok, 1.622 + const char *ptr, 1.623 + const char *end, 1.624 + const ENCODING *enc) 1.625 +{ 1.626 + switch (tok) { 1.627 + case XML_TOK_PROLOG_S: 1.628 + return XML_ROLE_ENTITY_NONE; 1.629 + case XML_TOK_LITERAL: 1.630 + state->handler = entity10; 1.631 + return XML_ROLE_ENTITY_SYSTEM_ID; 1.632 + } 1.633 + return common(state, tok); 1.634 +} 1.635 + 1.636 +static int PTRCALL 1.637 +entity10(PROLOG_STATE *state, 1.638 + int tok, 1.639 + const char *ptr, 1.640 + const char *end, 1.641 + const ENCODING *enc) 1.642 +{ 1.643 + switch (tok) { 1.644 + case XML_TOK_PROLOG_S: 1.645 + return XML_ROLE_ENTITY_NONE; 1.646 + case XML_TOK_DECL_CLOSE: 1.647 + setTopLevel(state); 1.648 + return XML_ROLE_ENTITY_COMPLETE; 1.649 + } 1.650 + return common(state, tok); 1.651 +} 1.652 + 1.653 +static int PTRCALL 1.654 +notation0(PROLOG_STATE *state, 1.655 + int tok, 1.656 + const char *ptr, 1.657 + const char *end, 1.658 + const ENCODING *enc) 1.659 +{ 1.660 + switch (tok) { 1.661 + case XML_TOK_PROLOG_S: 1.662 + return XML_ROLE_NOTATION_NONE; 1.663 + case XML_TOK_NAME: 1.664 + state->handler = notation1; 1.665 + return XML_ROLE_NOTATION_NAME; 1.666 + } 1.667 + return common(state, tok); 1.668 +} 1.669 + 1.670 +static int PTRCALL 1.671 +notation1(PROLOG_STATE *state, 1.672 + int tok, 1.673 + const char *ptr, 1.674 + const char *end, 1.675 + const ENCODING *enc) 1.676 +{ 1.677 + switch (tok) { 1.678 + case XML_TOK_PROLOG_S: 1.679 + return XML_ROLE_NOTATION_NONE; 1.680 + case XML_TOK_NAME: 1.681 + if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { 1.682 + state->handler = notation3; 1.683 + return XML_ROLE_NOTATION_NONE; 1.684 + } 1.685 + if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { 1.686 + state->handler = notation2; 1.687 + return XML_ROLE_NOTATION_NONE; 1.688 + } 1.689 + break; 1.690 + } 1.691 + return common(state, tok); 1.692 +} 1.693 + 1.694 +static int PTRCALL 1.695 +notation2(PROLOG_STATE *state, 1.696 + int tok, 1.697 + const char *ptr, 1.698 + const char *end, 1.699 + const ENCODING *enc) 1.700 +{ 1.701 + switch (tok) { 1.702 + case XML_TOK_PROLOG_S: 1.703 + return XML_ROLE_NOTATION_NONE; 1.704 + case XML_TOK_LITERAL: 1.705 + state->handler = notation4; 1.706 + return XML_ROLE_NOTATION_PUBLIC_ID; 1.707 + } 1.708 + return common(state, tok); 1.709 +} 1.710 + 1.711 +static int PTRCALL 1.712 +notation3(PROLOG_STATE *state, 1.713 + int tok, 1.714 + const char *ptr, 1.715 + const char *end, 1.716 + const ENCODING *enc) 1.717 +{ 1.718 + switch (tok) { 1.719 + case XML_TOK_PROLOG_S: 1.720 + return XML_ROLE_NOTATION_NONE; 1.721 + case XML_TOK_LITERAL: 1.722 + state->handler = declClose; 1.723 + state->role_none = XML_ROLE_NOTATION_NONE; 1.724 + return XML_ROLE_NOTATION_SYSTEM_ID; 1.725 + } 1.726 + return common(state, tok); 1.727 +} 1.728 + 1.729 +static int PTRCALL 1.730 +notation4(PROLOG_STATE *state, 1.731 + int tok, 1.732 + const char *ptr, 1.733 + const char *end, 1.734 + const ENCODING *enc) 1.735 +{ 1.736 + switch (tok) { 1.737 + case XML_TOK_PROLOG_S: 1.738 + return XML_ROLE_NOTATION_NONE; 1.739 + case XML_TOK_LITERAL: 1.740 + state->handler = declClose; 1.741 + state->role_none = XML_ROLE_NOTATION_NONE; 1.742 + return XML_ROLE_NOTATION_SYSTEM_ID; 1.743 + case XML_TOK_DECL_CLOSE: 1.744 + setTopLevel(state); 1.745 + return XML_ROLE_NOTATION_NO_SYSTEM_ID; 1.746 + } 1.747 + return common(state, tok); 1.748 +} 1.749 + 1.750 +static int PTRCALL 1.751 +attlist0(PROLOG_STATE *state, 1.752 + int tok, 1.753 + const char *ptr, 1.754 + const char *end, 1.755 + const ENCODING *enc) 1.756 +{ 1.757 + switch (tok) { 1.758 + case XML_TOK_PROLOG_S: 1.759 + return XML_ROLE_ATTLIST_NONE; 1.760 + case XML_TOK_NAME: 1.761 + case XML_TOK_PREFIXED_NAME: 1.762 + state->handler = attlist1; 1.763 + return XML_ROLE_ATTLIST_ELEMENT_NAME; 1.764 + } 1.765 + return common(state, tok); 1.766 +} 1.767 + 1.768 +static int PTRCALL 1.769 +attlist1(PROLOG_STATE *state, 1.770 + int tok, 1.771 + const char *ptr, 1.772 + const char *end, 1.773 + const ENCODING *enc) 1.774 +{ 1.775 + switch (tok) { 1.776 + case XML_TOK_PROLOG_S: 1.777 + return XML_ROLE_ATTLIST_NONE; 1.778 + case XML_TOK_DECL_CLOSE: 1.779 + setTopLevel(state); 1.780 + return XML_ROLE_ATTLIST_NONE; 1.781 + case XML_TOK_NAME: 1.782 + case XML_TOK_PREFIXED_NAME: 1.783 + state->handler = attlist2; 1.784 + return XML_ROLE_ATTRIBUTE_NAME; 1.785 + } 1.786 + return common(state, tok); 1.787 +} 1.788 + 1.789 +static int PTRCALL 1.790 +attlist2(PROLOG_STATE *state, 1.791 + int tok, 1.792 + const char *ptr, 1.793 + const char *end, 1.794 + const ENCODING *enc) 1.795 +{ 1.796 + switch (tok) { 1.797 + case XML_TOK_PROLOG_S: 1.798 + return XML_ROLE_ATTLIST_NONE; 1.799 + case XML_TOK_NAME: 1.800 + { 1.801 + static const char * const types[] = { 1.802 + KW_CDATA, 1.803 + KW_ID, 1.804 + KW_IDREF, 1.805 + KW_IDREFS, 1.806 + KW_ENTITY, 1.807 + KW_ENTITIES, 1.808 + KW_NMTOKEN, 1.809 + KW_NMTOKENS, 1.810 + }; 1.811 + int i; 1.812 + for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++) 1.813 + if (XmlNameMatchesAscii(enc, ptr, end, types[i])) { 1.814 + state->handler = attlist8; 1.815 + return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i; 1.816 + } 1.817 + } 1.818 + if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) { 1.819 + state->handler = attlist5; 1.820 + return XML_ROLE_ATTLIST_NONE; 1.821 + } 1.822 + break; 1.823 + case XML_TOK_OPEN_PAREN: 1.824 + state->handler = attlist3; 1.825 + return XML_ROLE_ATTLIST_NONE; 1.826 + } 1.827 + return common(state, tok); 1.828 +} 1.829 + 1.830 +static int PTRCALL 1.831 +attlist3(PROLOG_STATE *state, 1.832 + int tok, 1.833 + const char *ptr, 1.834 + const char *end, 1.835 + const ENCODING *enc) 1.836 +{ 1.837 + switch (tok) { 1.838 + case XML_TOK_PROLOG_S: 1.839 + return XML_ROLE_ATTLIST_NONE; 1.840 + case XML_TOK_NMTOKEN: 1.841 + case XML_TOK_NAME: 1.842 + case XML_TOK_PREFIXED_NAME: 1.843 + state->handler = attlist4; 1.844 + return XML_ROLE_ATTRIBUTE_ENUM_VALUE; 1.845 + } 1.846 + return common(state, tok); 1.847 +} 1.848 + 1.849 +static int PTRCALL 1.850 +attlist4(PROLOG_STATE *state, 1.851 + int tok, 1.852 + const char *ptr, 1.853 + const char *end, 1.854 + const ENCODING *enc) 1.855 +{ 1.856 + switch (tok) { 1.857 + case XML_TOK_PROLOG_S: 1.858 + return XML_ROLE_ATTLIST_NONE; 1.859 + case XML_TOK_CLOSE_PAREN: 1.860 + state->handler = attlist8; 1.861 + return XML_ROLE_ATTLIST_NONE; 1.862 + case XML_TOK_OR: 1.863 + state->handler = attlist3; 1.864 + return XML_ROLE_ATTLIST_NONE; 1.865 + } 1.866 + return common(state, tok); 1.867 +} 1.868 + 1.869 +static int PTRCALL 1.870 +attlist5(PROLOG_STATE *state, 1.871 + int tok, 1.872 + const char *ptr, 1.873 + const char *end, 1.874 + const ENCODING *enc) 1.875 +{ 1.876 + switch (tok) { 1.877 + case XML_TOK_PROLOG_S: 1.878 + return XML_ROLE_ATTLIST_NONE; 1.879 + case XML_TOK_OPEN_PAREN: 1.880 + state->handler = attlist6; 1.881 + return XML_ROLE_ATTLIST_NONE; 1.882 + } 1.883 + return common(state, tok); 1.884 +} 1.885 + 1.886 +static int PTRCALL 1.887 +attlist6(PROLOG_STATE *state, 1.888 + int tok, 1.889 + const char *ptr, 1.890 + const char *end, 1.891 + const ENCODING *enc) 1.892 +{ 1.893 + switch (tok) { 1.894 + case XML_TOK_PROLOG_S: 1.895 + return XML_ROLE_ATTLIST_NONE; 1.896 + case XML_TOK_NAME: 1.897 + state->handler = attlist7; 1.898 + return XML_ROLE_ATTRIBUTE_NOTATION_VALUE; 1.899 + } 1.900 + return common(state, tok); 1.901 +} 1.902 + 1.903 +static int PTRCALL 1.904 +attlist7(PROLOG_STATE *state, 1.905 + int tok, 1.906 + const char *ptr, 1.907 + const char *end, 1.908 + const ENCODING *enc) 1.909 +{ 1.910 + switch (tok) { 1.911 + case XML_TOK_PROLOG_S: 1.912 + return XML_ROLE_ATTLIST_NONE; 1.913 + case XML_TOK_CLOSE_PAREN: 1.914 + state->handler = attlist8; 1.915 + return XML_ROLE_ATTLIST_NONE; 1.916 + case XML_TOK_OR: 1.917 + state->handler = attlist6; 1.918 + return XML_ROLE_ATTLIST_NONE; 1.919 + } 1.920 + return common(state, tok); 1.921 +} 1.922 + 1.923 +/* default value */ 1.924 +static int PTRCALL 1.925 +attlist8(PROLOG_STATE *state, 1.926 + int tok, 1.927 + const char *ptr, 1.928 + const char *end, 1.929 + const ENCODING *enc) 1.930 +{ 1.931 + switch (tok) { 1.932 + case XML_TOK_PROLOG_S: 1.933 + return XML_ROLE_ATTLIST_NONE; 1.934 + case XML_TOK_POUND_NAME: 1.935 + if (XmlNameMatchesAscii(enc, 1.936 + ptr + MIN_BYTES_PER_CHAR(enc), 1.937 + end, 1.938 + KW_IMPLIED)) { 1.939 + state->handler = attlist1; 1.940 + return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE; 1.941 + } 1.942 + if (XmlNameMatchesAscii(enc, 1.943 + ptr + MIN_BYTES_PER_CHAR(enc), 1.944 + end, 1.945 + KW_REQUIRED)) { 1.946 + state->handler = attlist1; 1.947 + return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE; 1.948 + } 1.949 + if (XmlNameMatchesAscii(enc, 1.950 + ptr + MIN_BYTES_PER_CHAR(enc), 1.951 + end, 1.952 + KW_FIXED)) { 1.953 + state->handler = attlist9; 1.954 + return XML_ROLE_ATTLIST_NONE; 1.955 + } 1.956 + break; 1.957 + case XML_TOK_LITERAL: 1.958 + state->handler = attlist1; 1.959 + return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE; 1.960 + } 1.961 + return common(state, tok); 1.962 +} 1.963 + 1.964 +static int PTRCALL 1.965 +attlist9(PROLOG_STATE *state, 1.966 + int tok, 1.967 + const char *ptr, 1.968 + const char *end, 1.969 + const ENCODING *enc) 1.970 +{ 1.971 + switch (tok) { 1.972 + case XML_TOK_PROLOG_S: 1.973 + return XML_ROLE_ATTLIST_NONE; 1.974 + case XML_TOK_LITERAL: 1.975 + state->handler = attlist1; 1.976 + return XML_ROLE_FIXED_ATTRIBUTE_VALUE; 1.977 + } 1.978 + return common(state, tok); 1.979 +} 1.980 + 1.981 +static int PTRCALL 1.982 +element0(PROLOG_STATE *state, 1.983 + int tok, 1.984 + const char *ptr, 1.985 + const char *end, 1.986 + const ENCODING *enc) 1.987 +{ 1.988 + switch (tok) { 1.989 + case XML_TOK_PROLOG_S: 1.990 + return XML_ROLE_ELEMENT_NONE; 1.991 + case XML_TOK_NAME: 1.992 + case XML_TOK_PREFIXED_NAME: 1.993 + state->handler = element1; 1.994 + return XML_ROLE_ELEMENT_NAME; 1.995 + } 1.996 + return common(state, tok); 1.997 +} 1.998 + 1.999 +static int PTRCALL 1.1000 +element1(PROLOG_STATE *state, 1.1001 + int tok, 1.1002 + const char *ptr, 1.1003 + const char *end, 1.1004 + const ENCODING *enc) 1.1005 +{ 1.1006 + switch (tok) { 1.1007 + case XML_TOK_PROLOG_S: 1.1008 + return XML_ROLE_ELEMENT_NONE; 1.1009 + case XML_TOK_NAME: 1.1010 + if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) { 1.1011 + state->handler = declClose; 1.1012 + state->role_none = XML_ROLE_ELEMENT_NONE; 1.1013 + return XML_ROLE_CONTENT_EMPTY; 1.1014 + } 1.1015 + if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) { 1.1016 + state->handler = declClose; 1.1017 + state->role_none = XML_ROLE_ELEMENT_NONE; 1.1018 + return XML_ROLE_CONTENT_ANY; 1.1019 + } 1.1020 + break; 1.1021 + case XML_TOK_OPEN_PAREN: 1.1022 + state->handler = element2; 1.1023 + state->level = 1; 1.1024 + return XML_ROLE_GROUP_OPEN; 1.1025 + } 1.1026 + return common(state, tok); 1.1027 +} 1.1028 + 1.1029 +static int PTRCALL 1.1030 +element2(PROLOG_STATE *state, 1.1031 + int tok, 1.1032 + const char *ptr, 1.1033 + const char *end, 1.1034 + const ENCODING *enc) 1.1035 +{ 1.1036 + switch (tok) { 1.1037 + case XML_TOK_PROLOG_S: 1.1038 + return XML_ROLE_ELEMENT_NONE; 1.1039 + case XML_TOK_POUND_NAME: 1.1040 + if (XmlNameMatchesAscii(enc, 1.1041 + ptr + MIN_BYTES_PER_CHAR(enc), 1.1042 + end, 1.1043 + KW_PCDATA)) { 1.1044 + state->handler = element3; 1.1045 + return XML_ROLE_CONTENT_PCDATA; 1.1046 + } 1.1047 + break; 1.1048 + case XML_TOK_OPEN_PAREN: 1.1049 + state->level = 2; 1.1050 + state->handler = element6; 1.1051 + return XML_ROLE_GROUP_OPEN; 1.1052 + case XML_TOK_NAME: 1.1053 + case XML_TOK_PREFIXED_NAME: 1.1054 + state->handler = element7; 1.1055 + return XML_ROLE_CONTENT_ELEMENT; 1.1056 + case XML_TOK_NAME_QUESTION: 1.1057 + state->handler = element7; 1.1058 + return XML_ROLE_CONTENT_ELEMENT_OPT; 1.1059 + case XML_TOK_NAME_ASTERISK: 1.1060 + state->handler = element7; 1.1061 + return XML_ROLE_CONTENT_ELEMENT_REP; 1.1062 + case XML_TOK_NAME_PLUS: 1.1063 + state->handler = element7; 1.1064 + return XML_ROLE_CONTENT_ELEMENT_PLUS; 1.1065 + } 1.1066 + return common(state, tok); 1.1067 +} 1.1068 + 1.1069 +static int PTRCALL 1.1070 +element3(PROLOG_STATE *state, 1.1071 + int tok, 1.1072 + const char *ptr, 1.1073 + const char *end, 1.1074 + const ENCODING *enc) 1.1075 +{ 1.1076 + switch (tok) { 1.1077 + case XML_TOK_PROLOG_S: 1.1078 + return XML_ROLE_ELEMENT_NONE; 1.1079 + case XML_TOK_CLOSE_PAREN: 1.1080 + state->handler = declClose; 1.1081 + state->role_none = XML_ROLE_ELEMENT_NONE; 1.1082 + return XML_ROLE_GROUP_CLOSE; 1.1083 + case XML_TOK_CLOSE_PAREN_ASTERISK: 1.1084 + state->handler = declClose; 1.1085 + state->role_none = XML_ROLE_ELEMENT_NONE; 1.1086 + return XML_ROLE_GROUP_CLOSE_REP; 1.1087 + case XML_TOK_OR: 1.1088 + state->handler = element4; 1.1089 + return XML_ROLE_ELEMENT_NONE; 1.1090 + } 1.1091 + return common(state, tok); 1.1092 +} 1.1093 + 1.1094 +static int PTRCALL 1.1095 +element4(PROLOG_STATE *state, 1.1096 + int tok, 1.1097 + const char *ptr, 1.1098 + const char *end, 1.1099 + const ENCODING *enc) 1.1100 +{ 1.1101 + switch (tok) { 1.1102 + case XML_TOK_PROLOG_S: 1.1103 + return XML_ROLE_ELEMENT_NONE; 1.1104 + case XML_TOK_NAME: 1.1105 + case XML_TOK_PREFIXED_NAME: 1.1106 + state->handler = element5; 1.1107 + return XML_ROLE_CONTENT_ELEMENT; 1.1108 + } 1.1109 + return common(state, tok); 1.1110 +} 1.1111 + 1.1112 +static int PTRCALL 1.1113 +element5(PROLOG_STATE *state, 1.1114 + int tok, 1.1115 + const char *ptr, 1.1116 + const char *end, 1.1117 + const ENCODING *enc) 1.1118 +{ 1.1119 + switch (tok) { 1.1120 + case XML_TOK_PROLOG_S: 1.1121 + return XML_ROLE_ELEMENT_NONE; 1.1122 + case XML_TOK_CLOSE_PAREN_ASTERISK: 1.1123 + state->handler = declClose; 1.1124 + state->role_none = XML_ROLE_ELEMENT_NONE; 1.1125 + return XML_ROLE_GROUP_CLOSE_REP; 1.1126 + case XML_TOK_OR: 1.1127 + state->handler = element4; 1.1128 + return XML_ROLE_ELEMENT_NONE; 1.1129 + } 1.1130 + return common(state, tok); 1.1131 +} 1.1132 + 1.1133 +static int PTRCALL 1.1134 +element6(PROLOG_STATE *state, 1.1135 + int tok, 1.1136 + const char *ptr, 1.1137 + const char *end, 1.1138 + const ENCODING *enc) 1.1139 +{ 1.1140 + switch (tok) { 1.1141 + case XML_TOK_PROLOG_S: 1.1142 + return XML_ROLE_ELEMENT_NONE; 1.1143 + case XML_TOK_OPEN_PAREN: 1.1144 + state->level += 1; 1.1145 + return XML_ROLE_GROUP_OPEN; 1.1146 + case XML_TOK_NAME: 1.1147 + case XML_TOK_PREFIXED_NAME: 1.1148 + state->handler = element7; 1.1149 + return XML_ROLE_CONTENT_ELEMENT; 1.1150 + case XML_TOK_NAME_QUESTION: 1.1151 + state->handler = element7; 1.1152 + return XML_ROLE_CONTENT_ELEMENT_OPT; 1.1153 + case XML_TOK_NAME_ASTERISK: 1.1154 + state->handler = element7; 1.1155 + return XML_ROLE_CONTENT_ELEMENT_REP; 1.1156 + case XML_TOK_NAME_PLUS: 1.1157 + state->handler = element7; 1.1158 + return XML_ROLE_CONTENT_ELEMENT_PLUS; 1.1159 + } 1.1160 + return common(state, tok); 1.1161 +} 1.1162 + 1.1163 +static int PTRCALL 1.1164 +element7(PROLOG_STATE *state, 1.1165 + int tok, 1.1166 + const char *ptr, 1.1167 + const char *end, 1.1168 + const ENCODING *enc) 1.1169 +{ 1.1170 + switch (tok) { 1.1171 + case XML_TOK_PROLOG_S: 1.1172 + return XML_ROLE_ELEMENT_NONE; 1.1173 + case XML_TOK_CLOSE_PAREN: 1.1174 + state->level -= 1; 1.1175 + if (state->level == 0) { 1.1176 + state->handler = declClose; 1.1177 + state->role_none = XML_ROLE_ELEMENT_NONE; 1.1178 + } 1.1179 + return XML_ROLE_GROUP_CLOSE; 1.1180 + case XML_TOK_CLOSE_PAREN_ASTERISK: 1.1181 + state->level -= 1; 1.1182 + if (state->level == 0) { 1.1183 + state->handler = declClose; 1.1184 + state->role_none = XML_ROLE_ELEMENT_NONE; 1.1185 + } 1.1186 + return XML_ROLE_GROUP_CLOSE_REP; 1.1187 + case XML_TOK_CLOSE_PAREN_QUESTION: 1.1188 + state->level -= 1; 1.1189 + if (state->level == 0) { 1.1190 + state->handler = declClose; 1.1191 + state->role_none = XML_ROLE_ELEMENT_NONE; 1.1192 + } 1.1193 + return XML_ROLE_GROUP_CLOSE_OPT; 1.1194 + case XML_TOK_CLOSE_PAREN_PLUS: 1.1195 + state->level -= 1; 1.1196 + if (state->level == 0) { 1.1197 + state->handler = declClose; 1.1198 + state->role_none = XML_ROLE_ELEMENT_NONE; 1.1199 + } 1.1200 + return XML_ROLE_GROUP_CLOSE_PLUS; 1.1201 + case XML_TOK_COMMA: 1.1202 + state->handler = element6; 1.1203 + return XML_ROLE_GROUP_SEQUENCE; 1.1204 + case XML_TOK_OR: 1.1205 + state->handler = element6; 1.1206 + return XML_ROLE_GROUP_CHOICE; 1.1207 + } 1.1208 + return common(state, tok); 1.1209 +} 1.1210 + 1.1211 +#ifdef XML_DTD 1.1212 + 1.1213 +static int PTRCALL 1.1214 +condSect0(PROLOG_STATE *state, 1.1215 + int tok, 1.1216 + const char *ptr, 1.1217 + const char *end, 1.1218 + const ENCODING *enc) 1.1219 +{ 1.1220 + switch (tok) { 1.1221 + case XML_TOK_PROLOG_S: 1.1222 + return XML_ROLE_NONE; 1.1223 + case XML_TOK_NAME: 1.1224 + if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) { 1.1225 + state->handler = condSect1; 1.1226 + return XML_ROLE_NONE; 1.1227 + } 1.1228 + if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) { 1.1229 + state->handler = condSect2; 1.1230 + return XML_ROLE_NONE; 1.1231 + } 1.1232 + break; 1.1233 + } 1.1234 + return common(state, tok); 1.1235 +} 1.1236 + 1.1237 +static int PTRCALL 1.1238 +condSect1(PROLOG_STATE *state, 1.1239 + int tok, 1.1240 + const char *ptr, 1.1241 + const char *end, 1.1242 + const ENCODING *enc) 1.1243 +{ 1.1244 + switch (tok) { 1.1245 + case XML_TOK_PROLOG_S: 1.1246 + return XML_ROLE_NONE; 1.1247 + case XML_TOK_OPEN_BRACKET: 1.1248 + state->handler = externalSubset1; 1.1249 + state->includeLevel += 1; 1.1250 + return XML_ROLE_NONE; 1.1251 + } 1.1252 + return common(state, tok); 1.1253 +} 1.1254 + 1.1255 +static int PTRCALL 1.1256 +condSect2(PROLOG_STATE *state, 1.1257 + int tok, 1.1258 + const char *ptr, 1.1259 + const char *end, 1.1260 + const ENCODING *enc) 1.1261 +{ 1.1262 + switch (tok) { 1.1263 + case XML_TOK_PROLOG_S: 1.1264 + return XML_ROLE_NONE; 1.1265 + case XML_TOK_OPEN_BRACKET: 1.1266 + state->handler = externalSubset1; 1.1267 + return XML_ROLE_IGNORE_SECT; 1.1268 + } 1.1269 + return common(state, tok); 1.1270 +} 1.1271 + 1.1272 +#endif /* XML_DTD */ 1.1273 + 1.1274 +static int PTRCALL 1.1275 +declClose(PROLOG_STATE *state, 1.1276 + int tok, 1.1277 + const char *ptr, 1.1278 + const char *end, 1.1279 + const ENCODING *enc) 1.1280 +{ 1.1281 + switch (tok) { 1.1282 + case XML_TOK_PROLOG_S: 1.1283 + return state->role_none; 1.1284 + case XML_TOK_DECL_CLOSE: 1.1285 + setTopLevel(state); 1.1286 + return state->role_none; 1.1287 + } 1.1288 + return common(state, tok); 1.1289 +} 1.1290 + 1.1291 +static int PTRCALL 1.1292 +error(PROLOG_STATE *state, 1.1293 + int tok, 1.1294 + const char *ptr, 1.1295 + const char *end, 1.1296 + const ENCODING *enc) 1.1297 +{ 1.1298 + return XML_ROLE_NONE; 1.1299 +} 1.1300 + 1.1301 +static int FASTCALL 1.1302 +common(PROLOG_STATE *state, int tok) 1.1303 +{ 1.1304 +#ifdef XML_DTD 1.1305 + if (!state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF) 1.1306 + return XML_ROLE_INNER_PARAM_ENTITY_REF; 1.1307 +#endif 1.1308 + state->handler = error; 1.1309 + return XML_ROLE_ERROR; 1.1310 +} 1.1311 + 1.1312 +void 1.1313 +XmlPrologStateInit(PROLOG_STATE *state) 1.1314 +{ 1.1315 + state->handler = prolog0; 1.1316 +#ifdef XML_DTD 1.1317 + state->documentEntity = 1; 1.1318 + state->includeLevel = 0; 1.1319 + state->inEntityValue = 0; 1.1320 +#endif /* XML_DTD */ 1.1321 +} 1.1322 + 1.1323 +#ifdef XML_DTD 1.1324 + 1.1325 +void 1.1326 +XmlPrologStateInitExternalEntity(PROLOG_STATE *state) 1.1327 +{ 1.1328 + state->handler = externalSubset0; 1.1329 + state->documentEntity = 0; 1.1330 + state->includeLevel = 0; 1.1331 +} 1.1332 + 1.1333 +#endif /* XML_DTD */