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