1fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
2fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis   See the file COPYING for copying permission.
31dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis*/
41dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
5a5df290e0668f9ba34c2f8d9b3fdaf650ec72024Gregory P. Smith#include <stddef.h>
6a5df290e0668f9ba34c2f8d9b3fdaf650ec72024Gregory P. Smith
71dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef COMPILED_FROM_DSP
8fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis#include "winconfig.h"
9fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis#elif defined(MACOS_CLASSIC)
10fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis#include "macconfig.h"
11a5df290e0668f9ba34c2f8d9b3fdaf650ec72024Gregory P. Smith#elif defined(__amigaos__)
12f08d663a2f9cbd8dd0ca868272f03ad115691df7Trent Mick#include "amigaconfig.h"
13a5df290e0668f9ba34c2f8d9b3fdaf650ec72024Gregory P. Smith#elif defined(__WATCOMC__)
14a5df290e0668f9ba34c2f8d9b3fdaf650ec72024Gregory P. Smith#include "watcomconfig.h"
151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#else
1608317aefef89ca18ce12e53c0cdb3c8e132a6201Fred Drake#ifdef HAVE_EXPAT_CONFIG_H
17fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis#include <expat_config.h>
1808317aefef89ca18ce12e53c0cdb3c8e132a6201Fred Drake#endif
191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* ndef COMPILED_FROM_DSP */
201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
2131d485c0f5e817d37dbbfb86fdea66027866ce84Fred Drake#include "expat_external.h"
22fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis#include "internal.h"
231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#include "xmlrole.h"
241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#include "ascii.h"
251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis/* Doesn't check:
271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
281dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis that ,| are not mixed in a model group
291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis content of literals
301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis*/
321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
33fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_ANY[] = {
34fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_A, ASCII_N, ASCII_Y, '\0' };
35fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_ATTLIST[] = {
36fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0' };
37fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_CDATA[] = {
38fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
39fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_DOCTYPE[] = {
40fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0' };
41fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_ELEMENT[] = {
42fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0' };
43fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_EMPTY[] = {
44fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0' };
45fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_ENTITIES[] = {
46fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S,
47fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    '\0' };
48fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_ENTITY[] = {
49fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' };
50fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_FIXED[] = {
51fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0' };
52fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_ID[] = {
53fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_I, ASCII_D, '\0' };
54fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_IDREF[] = {
55fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' };
56fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_IDREFS[] = {
57fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' };
58a5df290e0668f9ba34c2f8d9b3fdaf650ec72024Gregory P. Smith#ifdef XML_DTD
59fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_IGNORE[] = {
60fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0' };
61a5df290e0668f9ba34c2f8d9b3fdaf650ec72024Gregory P. Smith#endif
62fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_IMPLIED[] = {
63fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0' };
64a5df290e0668f9ba34c2f8d9b3fdaf650ec72024Gregory P. Smith#ifdef XML_DTD
65fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_INCLUDE[] = {
66fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0' };
67a5df290e0668f9ba34c2f8d9b3fdaf650ec72024Gregory P. Smith#endif
68fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_NDATA[] = {
69fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
70fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_NMTOKEN[] = {
71fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' };
72fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_NMTOKENS[] = {
73fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S,
74fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    '\0' };
75fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_NOTATION[] =
76fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N,
77fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      '\0' };
78fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_PCDATA[] = {
79fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
80fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_PUBLIC[] = {
81fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0' };
82fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_REQUIRED[] = {
83fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, ASCII_R, ASCII_E, ASCII_D,
84fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    '\0' };
85fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_SYSTEM[] = {
86fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0' };
871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifndef MIN_BYTES_PER_CHAR
891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar)
901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif
911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#define setTopLevel(state) \
941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  ((state)->handler = ((state)->documentEntity \
951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis                       ? internalSubset \
961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis                       : externalSubset1))
971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#else /* not XML_DTD */
981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#define setTopLevel(state) ((state)->handler = internalSubset)
991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* not XML_DTD */
1001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
101fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwistypedef int PTRCALL PROLOG_HANDLER(PROLOG_STATE *state,
102fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                                   int tok,
103fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                                   const char *ptr,
104fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                                   const char *end,
105fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                                   const ENCODING *enc);
1061dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwisstatic PROLOG_HANDLER
1081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  prolog0, prolog1, prolog2,
1091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  doctype0, doctype1, doctype2, doctype3, doctype4, doctype5,
1101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  internalSubset,
1111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  entity0, entity1, entity2, entity3, entity4, entity5, entity6,
112fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  entity7, entity8, entity9, entity10,
1131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  notation0, notation1, notation2, notation3, notation4,
1141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6,
1151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  attlist7, attlist8, attlist9,
1161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  element0, element1, element2, element3, element4, element5, element6,
1171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  element7,
1181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
1191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  externalSubset0, externalSubset1,
1201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  condSect0, condSect1, condSect2,
1211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* XML_DTD */
1221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  declClose,
1231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  error;
1241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
125fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int FASTCALL common(PROLOG_STATE *state, int tok);
1261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
127fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
128fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisprolog0(PROLOG_STATE *state,
129fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
130fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
131fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
132fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
1331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
1341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
1351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog1;
1371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
1381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_XML_DECL:
1391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog1;
1401dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_XML_DECL;
1411dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PI:
1421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog1;
143fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_PI;
1441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COMMENT:
1451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog1;
146fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_COMMENT;
1471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_BOM:
1481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
1491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_OPEN:
1501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (!XmlNameMatchesAscii(enc,
151fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                             ptr + 2 * MIN_BYTES_PER_CHAR(enc),
152fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                             end,
153fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                             KW_DOCTYPE))
1541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      break;
1551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = doctype0;
156fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
1571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_INSTANCE_START:
1581dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = error;
1591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_INSTANCE_START;
1601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
1611dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
1621dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
1631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
164fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
165fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisprolog1(PROLOG_STATE *state,
166fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
167fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
168fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
169fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
1701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
1711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
1721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
1741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PI:
175fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_PI;
1761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COMMENT:
177fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_COMMENT;
1781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_BOM:
1791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
1801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_OPEN:
1811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (!XmlNameMatchesAscii(enc,
182fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                             ptr + 2 * MIN_BYTES_PER_CHAR(enc),
183fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                             end,
184fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                             KW_DOCTYPE))
1851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      break;
1861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = doctype0;
187fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
1881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_INSTANCE_START:
1891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = error;
1901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_INSTANCE_START;
1911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
1921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
1931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
1941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
195fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
196fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisprolog2(PROLOG_STATE *state,
197fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
198fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
199fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
200fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
2011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
2021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
2031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
2041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
2051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PI:
206fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_PI;
2071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COMMENT:
208fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_COMMENT;
2091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_INSTANCE_START:
2101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = error;
2111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_INSTANCE_START;
2121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
2131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
2141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
2151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
216fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
217fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisdoctype0(PROLOG_STATE *state,
218fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
219fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
220fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
221fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
2221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
2231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
2241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
225fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
2261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
2271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
2281dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = doctype1;
2291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_NAME;
2301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
2311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
2321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
2331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
234fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
235fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisdoctype1(PROLOG_STATE *state,
236fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
237fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
238fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
239fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
2401dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
2411dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
2421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
243fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
2441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_BRACKET:
2451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = internalSubset;
2461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
2471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
2481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog2;
2491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_CLOSE;
2501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
2511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
2521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = doctype3;
253fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_DOCTYPE_NONE;
2541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
2551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
2561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = doctype2;
257fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_DOCTYPE_NONE;
2581dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
2591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
2601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
2611dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
2621dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
2631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
264fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
265fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisdoctype2(PROLOG_STATE *state,
266fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
267fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
268fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
269fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
2701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
2711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
2721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
273fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
2741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
2751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = doctype3;
2761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_PUBLIC_ID;
2771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
2781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
2791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
2801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
281fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
282fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisdoctype3(PROLOG_STATE *state,
283fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
284fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
285fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
286fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
2871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
2881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
2891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
290fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
2911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
2921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = doctype4;
2931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_SYSTEM_ID;
2941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
2951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
2961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
2971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
298fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
299fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisdoctype4(PROLOG_STATE *state,
300fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
301fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
302fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
303fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
3041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
3051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
3061dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
307fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
3081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_BRACKET:
3091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = internalSubset;
3101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
3111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
3121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog2;
3131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_CLOSE;
3141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
3151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
3161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
3171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
318fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
319fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisdoctype5(PROLOG_STATE *state,
320fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
321fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
322fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
323fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
3241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
3251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
3261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
327fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
3281dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
3291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog2;
3301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_CLOSE;
3311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
3321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
3331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
3341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
335fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
336fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwisinternalSubset(PROLOG_STATE *state,
337fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis               int tok,
338fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis               const char *ptr,
339fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis               const char *end,
340fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis               const ENCODING *enc)
3411dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
3421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
3431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
3441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
3451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_OPEN:
3461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
347fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + 2 * MIN_BYTES_PER_CHAR(enc),
348fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
349fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_ENTITY)) {
3501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = entity0;
351fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ENTITY_NONE;
3521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
3531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
354fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + 2 * MIN_BYTES_PER_CHAR(enc),
355fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
356fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_ATTLIST)) {
3571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = attlist0;
358fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ATTLIST_NONE;
3591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
3601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
361fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + 2 * MIN_BYTES_PER_CHAR(enc),
362fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
363fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_ELEMENT)) {
3641dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = element0;
365fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ELEMENT_NONE;
3661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
3671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
368fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + 2 * MIN_BYTES_PER_CHAR(enc),
369fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
370fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_NOTATION)) {
3711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = notation0;
372fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_NOTATION_NONE;
3731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
3741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
3751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PI:
376fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_PI;
3771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COMMENT:
378fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_COMMENT;
3791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PARAM_ENTITY_REF:
3801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_PARAM_ENTITY_REF;
3811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_BRACKET:
3821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = doctype5;
383fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
38431d485c0f5e817d37dbbfb86fdea66027866ce84Fred Drake  case XML_TOK_NONE:
38531d485c0f5e817d37dbbfb86fdea66027866ce84Fred Drake    return XML_ROLE_NONE;
3861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
3871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
3881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
3891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
3901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
3911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
392fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
393fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwisexternalSubset0(PROLOG_STATE *state,
394fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                int tok,
395fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                const char *ptr,
396fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                const char *end,
397fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                const ENCODING *enc)
3981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
3991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->handler = externalSubset1;
4001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  if (tok == XML_TOK_XML_DECL)
4011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_TEXT_DECL;
4021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return externalSubset1(state, tok, ptr, end, enc);
4031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
4041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
405fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
406fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwisexternalSubset1(PROLOG_STATE *state,
407fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                int tok,
408fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                const char *ptr,
409fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                const char *end,
410fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                const ENCODING *enc)
4111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
4121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
4131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COND_SECT_OPEN:
4141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = condSect0;
4151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
4161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COND_SECT_CLOSE:
4171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (state->includeLevel == 0)
4181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      break;
4191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->includeLevel -= 1;
4201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
4211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
4221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
4231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_BRACKET:
4241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
4251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NONE:
4261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (state->includeLevel)
4271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      break;
4281dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
4291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  default:
4301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return internalSubset(state, tok, ptr, end, enc);
4311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
4321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
4331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
4341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
4351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* XML_DTD */
4361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
437fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
438fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity0(PROLOG_STATE *state,
439fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
440fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
441fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
442fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
4431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
4441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
4451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
446fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
4471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PERCENT:
4481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = entity1;
449fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
4501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
4511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = entity2;
4521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GENERAL_ENTITY_NAME;
4531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
4541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
4551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
4561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
457fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
458fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity1(PROLOG_STATE *state,
459fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
460fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
461fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
462fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
4631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
4641dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
4651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
466fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
4671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
4681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = entity7;
4691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_PARAM_ENTITY_NAME;
4701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
4711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
4721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
4731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
474fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
475fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity2(PROLOG_STATE *state,
476fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
477fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
478fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
479fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
4801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
4811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
4821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
483fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
4841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
4851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
4861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = entity4;
487fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ENTITY_NONE;
4881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
4891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
4901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = entity3;
491fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ENTITY_NONE;
4921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
4931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
4941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
4951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
496fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_ENTITY_NONE;
4971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_VALUE;
4981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
4991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
5001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
5011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
502fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
503fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity3(PROLOG_STATE *state,
504fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
505fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
506fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
507fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
5081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
5091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
5101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
511fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
5121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
5131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = entity4;
5141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_PUBLIC_ID;
5151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
5161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
5171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
5181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
519fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
520fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity4(PROLOG_STATE *state,
521fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
522fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
523fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
524fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
5251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
5261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
5271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
528fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
5291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
5301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = entity5;
5311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_SYSTEM_ID;
5321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
5331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
5341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
5351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
536fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
537fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity5(PROLOG_STATE *state,
538fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
539fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
540fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
541fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
5421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
5431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
5441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
545fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
5461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
5471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    setTopLevel(state);
5481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_COMPLETE;
5491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
5501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) {
5511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = entity6;
552fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ENTITY_NONE;
5531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
5541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
5551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
5561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
5571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
5581dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
559fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
560fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity6(PROLOG_STATE *state,
561fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
562fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
563fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
564fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
5651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
5661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
5671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
568fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
5691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
5701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
571fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_ENTITY_NONE;
5721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_NOTATION_NAME;
5731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
5741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
5751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
5761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
577fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
578fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity7(PROLOG_STATE *state,
579fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
580fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
581fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
582fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
5831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
5841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
5851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
586fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
5871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
5881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
5891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = entity9;
590fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ENTITY_NONE;
5911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
5921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
5931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = entity8;
594fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ENTITY_NONE;
5951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
5961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
5971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
5981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
599fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_ENTITY_NONE;
6001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_VALUE;
6011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
6021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
6031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
6041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
605fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
606fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity8(PROLOG_STATE *state,
607fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
608fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
609fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
610fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
6111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
6121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
6131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
614fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
6151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
6161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = entity9;
6171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_PUBLIC_ID;
6181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
6191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
6201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
6211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
622fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
623fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity9(PROLOG_STATE *state,
624fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
625fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
626fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
627fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
6281dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
6291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
6301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
631fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
6321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
633fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->handler = entity10;
6341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_SYSTEM_ID;
6351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
6361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
6371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
6381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
639fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
640fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity10(PROLOG_STATE *state,
641fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
642fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
643fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
644fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
6451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
6461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
6471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
648fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
649fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  case XML_TOK_DECL_CLOSE:
650fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    setTopLevel(state);
651fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_COMPLETE;
652fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  }
653fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  return common(state, tok);
654fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis}
655fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis
656fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
657fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisnotation0(PROLOG_STATE *state,
658fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
659fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
660fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
661fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
662fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis{
663fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  switch (tok) {
664fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  case XML_TOK_PROLOG_S:
665fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_NOTATION_NONE;
6661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
6671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = notation1;
6681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NOTATION_NAME;
6691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
6701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
6711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
6721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
673fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
674fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisnotation1(PROLOG_STATE *state,
675fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
676fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
677fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
678fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
6791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
6801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
6811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
682fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_NOTATION_NONE;
6831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
6841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
6851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = notation3;
686fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_NOTATION_NONE;
6871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
6881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
6891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = notation2;
690fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_NOTATION_NONE;
6911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
6921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
6931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
6941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
6951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
6961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
697fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
698fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisnotation2(PROLOG_STATE *state,
699fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
700fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
701fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
702fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
7031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
7041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
7051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
706fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_NOTATION_NONE;
7071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
7081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = notation4;
7091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NOTATION_PUBLIC_ID;
7101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
7111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
7121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
7131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
714fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
715fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisnotation3(PROLOG_STATE *state,
716fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
717fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
718fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
719fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
7201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
7211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
7221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
723fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_NOTATION_NONE;
7241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
7251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
726fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_NOTATION_NONE;
7271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NOTATION_SYSTEM_ID;
7281dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
7291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
7301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
7311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
732fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
733fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisnotation4(PROLOG_STATE *state,
734fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
735fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
736fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
737fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
7381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
7391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
7401dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
741fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_NOTATION_NONE;
7421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
7431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
744fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_NOTATION_NONE;
7451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NOTATION_SYSTEM_ID;
7461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
7471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    setTopLevel(state);
7481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NOTATION_NO_SYSTEM_ID;
7491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
7501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
7511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
7521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
753fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
754fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist0(PROLOG_STATE *state,
755fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
756fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
757fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
758fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
7591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
7601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
7611dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
762fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
7631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
7641dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
7651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist1;
7661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ATTLIST_ELEMENT_NAME;
7671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
7681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
7691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
7701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
771fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
772fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist1(PROLOG_STATE *state,
773fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
774fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
775fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
776fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
7771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
7781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
7791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
780fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
7811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
7821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    setTopLevel(state);
783fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
7841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
7851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
7861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist2;
7871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ATTRIBUTE_NAME;
7881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
7891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
7901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
7911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
792fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
793fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist2(PROLOG_STATE *state,
794fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
795fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
796fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
797fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
7981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
7991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
8001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
801fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
8031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    {
804f08d663a2f9cbd8dd0ca868272f03ad115691df7Trent Mick      static const char * const types[] = {
805fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        KW_CDATA,
8061dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_ID,
8071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_IDREF,
8081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_IDREFS,
8091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_ENTITY,
8101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_ENTITIES,
8111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_NMTOKEN,
8121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_NMTOKENS,
8131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      };
8141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      int i;
8151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++)
816fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        if (XmlNameMatchesAscii(enc, ptr, end, types[i])) {
817fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          state->handler = attlist8;
818fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i;
819fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        }
8201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
8211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) {
8221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = attlist5;
823fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ATTLIST_NONE;
8241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
8251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
8261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_PAREN:
8271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist3;
828fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
8301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
8311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
8321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
833fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
834fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist3(PROLOG_STATE *state,
835fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
836fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
837fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
838fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
8391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
8401dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
8411dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
842fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NMTOKEN:
8441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
8451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
8461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist4;
8471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ATTRIBUTE_ENUM_VALUE;
8481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
8491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
8501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
8511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
852fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
853fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist4(PROLOG_STATE *state,
854fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
855fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
856fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
857fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
8581dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
8591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
8601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
861fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8621dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN:
8631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist8;
864fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OR:
8661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist3;
867fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
8691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
8701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
8711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
872fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
873fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist5(PROLOG_STATE *state,
874fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
875fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
876fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
877fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
8781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
8791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
8801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
881fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_PAREN:
8831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist6;
884fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
8861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
8871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
8881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
889fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
890fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist6(PROLOG_STATE *state,
891fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
892fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
893fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
894fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
8951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
8961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
8971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
898fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
9001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist7;
9011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ATTRIBUTE_NOTATION_VALUE;
9021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
9031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
9041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
9051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
906fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
907fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist7(PROLOG_STATE *state,
908fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
909fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
910fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
911fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
9121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
9131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
9141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
915fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
9161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN:
9171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist8;
918fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
9191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OR:
9201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist6;
921fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
9221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
9231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
9241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
9251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
9261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis/* default value */
927fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
928fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist8(PROLOG_STATE *state,
929fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
930fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
931fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
932fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
9331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
9341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
9351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
936fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
9371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_POUND_NAME:
9381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
939fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + MIN_BYTES_PER_CHAR(enc),
940fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
941fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_IMPLIED)) {
9421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = attlist1;
9431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE;
9441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
9451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
946fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + MIN_BYTES_PER_CHAR(enc),
947fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
948fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_REQUIRED)) {
9491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = attlist1;
9501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE;
9511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
9521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
953fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + MIN_BYTES_PER_CHAR(enc),
954fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
955fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_FIXED)) {
9561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = attlist9;
957fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ATTLIST_NONE;
9581dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
9591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
9601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
9611dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist1;
9621dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE;
9631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
9641dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
9651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
9661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
967fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
968fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist9(PROLOG_STATE *state,
969fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
970fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
971fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
972fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
9731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
9741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
9751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
976fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
9771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
9781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist1;
9791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_FIXED_ATTRIBUTE_VALUE;
9801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
9811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
9821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
9831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
984fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
985fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement0(PROLOG_STATE *state,
986fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
987fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
988fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
989fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
9901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
9911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
9921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
993fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
9941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
9951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
9961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element1;
9971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ELEMENT_NAME;
9981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
9991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
10001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
10011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1002fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1003fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement1(PROLOG_STATE *state,
1004fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1005fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1006fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1007fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
10081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
10091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
10101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1011fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
10121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
10131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) {
10141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = declClose;
1015fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      state->role_none = XML_ROLE_ELEMENT_NONE;
10161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_CONTENT_EMPTY;
10171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
10181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) {
10191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = declClose;
1020fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      state->role_none = XML_ROLE_ELEMENT_NONE;
10211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_CONTENT_ANY;
10221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
10231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
10241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_PAREN:
10251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element2;
10261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level = 1;
10271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_OPEN;
10281dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
10291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
10301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
10311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1032fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1033fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement2(PROLOG_STATE *state,
1034fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1035fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1036fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1037fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
10381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
10391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
10401dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1041fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
10421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_POUND_NAME:
10431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
1044fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + MIN_BYTES_PER_CHAR(enc),
1045fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
1046fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_PCDATA)) {
10471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = element3;
10481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_CONTENT_PCDATA;
10491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
10501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
10511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_PAREN:
10521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level = 2;
10531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element6;
10541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_OPEN;
10551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
10561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
10571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
10581dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT;
10591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME_QUESTION:
10601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
10611dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT_OPT;
10621dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME_ASTERISK:
10631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
10641dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT_REP;
10651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME_PLUS:
10661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
10671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT_PLUS;
10681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
10691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
10701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
10711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1072fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1073fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement3(PROLOG_STATE *state,
1074fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1075fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1076fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1077fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
10781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
10791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
10801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1081fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
10821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN:
10831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
1084fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_ELEMENT_NONE;
10851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE;
10861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN_ASTERISK:
10871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
1088fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_ELEMENT_NONE;
10891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE_REP;
10901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OR:
10911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element4;
1092fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
10931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
10941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
10951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
10961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1097fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1098fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement4(PROLOG_STATE *state,
1099fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1100fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1101fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1102fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
11031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
11041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
11051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1106fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
11071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
11081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
11091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element5;
11101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT;
11111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
11121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
11131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
11141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1115fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1116fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement5(PROLOG_STATE *state,
1117fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1118fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1119fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1120fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
11211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
11221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
11231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1124fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
11251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN_ASTERISK:
11261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
1127fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_ELEMENT_NONE;
11281dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE_REP;
11291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OR:
11301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element4;
1131fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
11321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
11331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
11341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
11351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1136fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1137fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement6(PROLOG_STATE *state,
1138fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1139fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1140fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1141fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
11421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
11431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
11441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1145fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
11461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_PAREN:
11471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level += 1;
11481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_OPEN;
11491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
11501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
11511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
11521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT;
11531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME_QUESTION:
11541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
11551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT_OPT;
11561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME_ASTERISK:
11571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
11581dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT_REP;
11591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME_PLUS:
11601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
11611dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT_PLUS;
11621dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
11631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
11641dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
11651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1166fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1167fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement7(PROLOG_STATE *state,
1168fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1169fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1170fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1171fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
11721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
11731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
11741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1175fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
11761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN:
11771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level -= 1;
1178fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    if (state->level == 0) {
11791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = declClose;
1180fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      state->role_none = XML_ROLE_ELEMENT_NONE;
1181fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    }
11821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE;
11831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN_ASTERISK:
11841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level -= 1;
1185fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    if (state->level == 0) {
11861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = declClose;
1187fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      state->role_none = XML_ROLE_ELEMENT_NONE;
1188fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    }
11891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE_REP;
11901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN_QUESTION:
11911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level -= 1;
1192fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    if (state->level == 0) {
11931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = declClose;
1194fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      state->role_none = XML_ROLE_ELEMENT_NONE;
1195fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    }
11961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE_OPT;
11971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN_PLUS:
11981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level -= 1;
1199fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    if (state->level == 0) {
12001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = declClose;
1201fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      state->role_none = XML_ROLE_ELEMENT_NONE;
1202fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    }
12031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE_PLUS;
12041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COMMA:
12051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element6;
12061dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_SEQUENCE;
12071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OR:
12081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element6;
12091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CHOICE;
12101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
12111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
12121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
12131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
12141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
12151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1216fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1217fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwiscondSect0(PROLOG_STATE *state,
1218fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
1219fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
1220fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
1221fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
12221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
12231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
12241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
12251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
12261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
12271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) {
12281dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = condSect1;
12291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_NONE;
12301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
12311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) {
12321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = condSect2;
12331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_NONE;
12341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
12351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
12361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
12371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
12381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
12391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1240fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1241fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwiscondSect1(PROLOG_STATE *state,
1242fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
1243fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
1244fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
1245fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
12461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
12471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
12481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
12491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
12501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_BRACKET:
12511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = externalSubset1;
12521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->includeLevel += 1;
12531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
12541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
12551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
12561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
12571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1258fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1259fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwiscondSect2(PROLOG_STATE *state,
1260fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
1261fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
1262fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
1263fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
12641dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
12651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
12661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
12671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
12681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_BRACKET:
12691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = externalSubset1;
12701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_IGNORE_SECT;
12711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
12721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
12731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
12741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
12751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* XML_DTD */
12761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1277fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1278fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwisdeclClose(PROLOG_STATE *state,
1279fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
1280fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
1281fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
1282fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
12831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
12841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
12851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1286fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return state->role_none;
12871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
12881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    setTopLevel(state);
1289fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return state->role_none;
12901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
12911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
12921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
12931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1294fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1295fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiserror(PROLOG_STATE *state,
1296fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      int tok,
1297fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      const char *ptr,
1298fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      const char *end,
1299fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      const ENCODING *enc)
13001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
13011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return XML_ROLE_NONE;
13021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
13031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1304fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int FASTCALL
1305fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiscommon(PROLOG_STATE *state, int tok)
13061dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
13071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
13081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  if (!state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF)
13091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_INNER_PARAM_ENTITY_REF;
13101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif
13111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->handler = error;
13121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return XML_ROLE_ERROR;
13131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
13141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1315fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisvoid
1316fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwisXmlPrologStateInit(PROLOG_STATE *state)
13171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
13181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->handler = prolog0;
13191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
13201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->documentEntity = 1;
13211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->includeLevel = 0;
1322fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  state->inEntityValue = 0;
13231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* XML_DTD */
13241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
13251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
13261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
13271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1328fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisvoid
1329fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwisXmlPrologStateInitExternalEntity(PROLOG_STATE *state)
13301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
13311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->handler = externalSubset0;
13321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->documentEntity = 0;
13331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->includeLevel = 0;
13341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
13351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
13361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* XML_DTD */
1337