xmlrole.c revision 08317aefef89ca18ce12e53c0cdb3c8e132a6201
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
51dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef COMPILED_FROM_DSP
6fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis#include "winconfig.h"
7fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis#elif defined(MACOS_CLASSIC)
8fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis#include "macconfig.h"
91dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#else
1008317aefef89ca18ce12e53c0cdb3c8e132a6201Fred Drake#ifdef HAVE_EXPAT_CONFIG_H
11fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis#include <expat_config.h>
1208317aefef89ca18ce12e53c0cdb3c8e132a6201Fred Drake#endif
131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* ndef COMPILED_FROM_DSP */
141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
15fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis#include "internal.h"
161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#include "xmlrole.h"
171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#include "ascii.h"
181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis/* Doesn't check:
201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis that ,| are not mixed in a model group
221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis content of literals
231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis*/
251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
26fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_ANY[] = {
27fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_A, ASCII_N, ASCII_Y, '\0' };
28fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_ATTLIST[] = {
29fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0' };
30fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_CDATA[] = {
31fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
32fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_DOCTYPE[] = {
33fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0' };
34fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_ELEMENT[] = {
35fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0' };
36fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_EMPTY[] = {
37fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0' };
38fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_ENTITIES[] = {
39fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S,
40fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    '\0' };
41fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_ENTITY[] = {
42fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' };
43fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_FIXED[] = {
44fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0' };
45fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_ID[] = {
46fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_I, ASCII_D, '\0' };
47fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_IDREF[] = {
48fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' };
49fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_IDREFS[] = {
50fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' };
51fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_IGNORE[] = {
52fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0' };
53fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_IMPLIED[] = {
54fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0' };
55fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_INCLUDE[] = {
56fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0' };
57fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_NDATA[] = {
58fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
59fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_NMTOKEN[] = {
60fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' };
61fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_NMTOKENS[] = {
62fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S,
63fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    '\0' };
64fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_NOTATION[] =
65fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N,
66fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      '\0' };
67fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_PCDATA[] = {
68fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
69fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_PUBLIC[] = {
70fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0' };
71fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_REQUIRED[] = {
72fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, ASCII_R, ASCII_E, ASCII_D,
73fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    '\0' };
74fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic const char KW_SYSTEM[] = {
75fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0' };
761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifndef MIN_BYTES_PER_CHAR
781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar)
791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif
801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#define setTopLevel(state) \
831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  ((state)->handler = ((state)->documentEntity \
841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis                       ? internalSubset \
851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis                       : externalSubset1))
861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#else /* not XML_DTD */
871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#define setTopLevel(state) ((state)->handler = internalSubset)
881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* not XML_DTD */
891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
90fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwistypedef int PTRCALL PROLOG_HANDLER(PROLOG_STATE *state,
91fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                                   int tok,
92fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                                   const char *ptr,
93fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                                   const char *end,
94fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                                   const ENCODING *enc);
951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwisstatic PROLOG_HANDLER
971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  prolog0, prolog1, prolog2,
981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  doctype0, doctype1, doctype2, doctype3, doctype4, doctype5,
991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  internalSubset,
1001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  entity0, entity1, entity2, entity3, entity4, entity5, entity6,
101fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  entity7, entity8, entity9, entity10,
1021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  notation0, notation1, notation2, notation3, notation4,
1031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6,
1041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  attlist7, attlist8, attlist9,
1051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  element0, element1, element2, element3, element4, element5, element6,
1061dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  element7,
1071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
1081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  externalSubset0, externalSubset1,
1091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  condSect0, condSect1, condSect2,
1101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* XML_DTD */
1111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  declClose,
1121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  error;
1131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
114fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int FASTCALL common(PROLOG_STATE *state, int tok);
1151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
116fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
117fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisprolog0(PROLOG_STATE *state,
118fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
119fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
120fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
121fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
1221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
1231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
1241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog1;
1261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
1271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_XML_DECL:
1281dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog1;
1291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_XML_DECL;
1301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PI:
1311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog1;
132fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_PI;
1331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COMMENT:
1341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog1;
135fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_COMMENT;
1361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_BOM:
1371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
1381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_OPEN:
1391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (!XmlNameMatchesAscii(enc,
140fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                             ptr + 2 * MIN_BYTES_PER_CHAR(enc),
141fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                             end,
142fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                             KW_DOCTYPE))
1431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      break;
1441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = doctype0;
145fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
1461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_INSTANCE_START:
1471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = error;
1481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_INSTANCE_START;
1491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
1501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
1511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
1521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
153fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
154fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisprolog1(PROLOG_STATE *state,
155fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
156fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
157fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
158fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
1591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
1601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
1611dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1621dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
1631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PI:
164fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_PI;
1651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COMMENT:
166fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_COMMENT;
1671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_BOM:
1681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
1691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_OPEN:
1701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (!XmlNameMatchesAscii(enc,
171fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                             ptr + 2 * MIN_BYTES_PER_CHAR(enc),
172fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                             end,
173fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                             KW_DOCTYPE))
1741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      break;
1751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = doctype0;
176fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
1771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_INSTANCE_START:
1781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = error;
1791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_INSTANCE_START;
1801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
1811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
1821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
1831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
184fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
185fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisprolog2(PROLOG_STATE *state,
186fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
187fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
188fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
189fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
1901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
1911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
1921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
1941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PI:
195fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_PI;
1961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COMMENT:
197fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_COMMENT;
1981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_INSTANCE_START:
1991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = error;
2001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_INSTANCE_START;
2011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
2021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
2031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
2041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
205fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
206fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisdoctype0(PROLOG_STATE *state,
207fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
208fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
209fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
210fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
2111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
2121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
2131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
214fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
2151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
2161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
2171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = doctype1;
2181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_NAME;
2191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
2201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
2211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
2221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
223fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
224fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisdoctype1(PROLOG_STATE *state,
225fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
226fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
227fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
228fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
2291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
2301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
2311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
232fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
2331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_BRACKET:
2341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = internalSubset;
2351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
2361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
2371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog2;
2381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_CLOSE;
2391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
2401dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
2411dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = doctype3;
242fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_DOCTYPE_NONE;
2431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
2441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
2451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = doctype2;
246fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_DOCTYPE_NONE;
2471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
2481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
2491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
2501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
2511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
2521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
253fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
254fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisdoctype2(PROLOG_STATE *state,
255fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
256fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
257fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
258fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
2591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
2601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
2611dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
262fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
2631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
2641dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = doctype3;
2651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_PUBLIC_ID;
2661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
2671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
2681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
2691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
270fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
271fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisdoctype3(PROLOG_STATE *state,
272fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
273fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
274fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
275fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
2761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
2771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
2781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
279fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
2801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
2811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = doctype4;
2821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_SYSTEM_ID;
2831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
2841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
2851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
2861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
287fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
288fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisdoctype4(PROLOG_STATE *state,
289fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
290fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
291fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
292fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
2931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
2941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
2951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
296fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
2971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_BRACKET:
2981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = internalSubset;
2991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
3001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
3011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog2;
3021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_CLOSE;
3031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
3041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
3051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
3061dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
307fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
308fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisdoctype5(PROLOG_STATE *state,
309fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
310fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
311fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
312fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
3131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
3141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
3151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
316fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
3171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
3181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = prolog2;
3191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DOCTYPE_CLOSE;
3201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
3211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
3221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
3231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
324fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
325fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwisinternalSubset(PROLOG_STATE *state,
326fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis               int tok,
327fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis               const char *ptr,
328fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis               const char *end,
329fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis               const ENCODING *enc)
3301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
3311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
3321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
3331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
3341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_OPEN:
3351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
336fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + 2 * MIN_BYTES_PER_CHAR(enc),
337fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
338fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_ENTITY)) {
3391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = entity0;
340fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ENTITY_NONE;
3411dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
3421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
343fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + 2 * MIN_BYTES_PER_CHAR(enc),
344fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
345fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_ATTLIST)) {
3461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = attlist0;
347fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ATTLIST_NONE;
3481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
3491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
350fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + 2 * MIN_BYTES_PER_CHAR(enc),
351fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
352fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_ELEMENT)) {
3531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = element0;
354fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ELEMENT_NONE;
3551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
3561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
357fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + 2 * MIN_BYTES_PER_CHAR(enc),
358fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
359fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_NOTATION)) {
3601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = notation0;
361fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_NOTATION_NONE;
3621dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
3631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
3641dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PI:
365fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_PI;
3661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COMMENT:
367fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_COMMENT;
3681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PARAM_ENTITY_REF:
3691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_PARAM_ENTITY_REF;
3701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_BRACKET:
3711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = doctype5;
372fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_DOCTYPE_NONE;
3731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
3741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
3751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
3761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
3771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
3781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
379fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
380fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwisexternalSubset0(PROLOG_STATE *state,
381fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                int tok,
382fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                const char *ptr,
383fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                const char *end,
384fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                const ENCODING *enc)
3851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
3861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->handler = externalSubset1;
3871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  if (tok == XML_TOK_XML_DECL)
3881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_TEXT_DECL;
3891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return externalSubset1(state, tok, ptr, end, enc);
3901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
3911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
392fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
393fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwisexternalSubset1(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  switch (tok) {
4001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COND_SECT_OPEN:
4011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = condSect0;
4021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
4031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COND_SECT_CLOSE:
4041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (state->includeLevel == 0)
4051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      break;
4061dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->includeLevel -= 1;
4071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
4081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
4091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
4101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_BRACKET:
4111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
4121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NONE:
4131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (state->includeLevel)
4141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      break;
4151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
4161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  default:
4171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return internalSubset(state, tok, ptr, end, enc);
4181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
4191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
4201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
4211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
4221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* XML_DTD */
4231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
424fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
425fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity0(PROLOG_STATE *state,
426fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
427fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
428fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
429fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
4301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
4311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
4321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
433fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
4341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PERCENT:
4351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = entity1;
436fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
4371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
4381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = entity2;
4391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GENERAL_ENTITY_NAME;
4401dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
4411dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
4421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
4431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
444fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
445fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity1(PROLOG_STATE *state,
446fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
447fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
448fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
449fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
4501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
4511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
4521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
453fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
4541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
4551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = entity7;
4561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_PARAM_ENTITY_NAME;
4571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
4581dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
4591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
4601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
461fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
462fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity2(PROLOG_STATE *state,
463fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
464fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
465fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
466fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
4671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
4681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
4691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
470fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
4711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
4721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
4731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = entity4;
474fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ENTITY_NONE;
4751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
4761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
4771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = entity3;
478fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ENTITY_NONE;
4791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
4801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
4811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
4821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
483fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_ENTITY_NONE;
4841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_VALUE;
4851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
4861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
4871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
4881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
489fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
490fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity3(PROLOG_STATE *state,
491fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
492fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
493fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
494fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
4951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
4961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
4971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
498fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
4991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
5001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = entity4;
5011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_PUBLIC_ID;
5021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
5031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
5041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
5051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
506fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
507fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity4(PROLOG_STATE *state,
508fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
509fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
510fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
511fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
5121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
5131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
5141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
515fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
5161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
5171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = entity5;
5181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_SYSTEM_ID;
5191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
5201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
5211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
5221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
523fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
524fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity5(PROLOG_STATE *state,
525fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
526fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
527fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
528fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
5291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
5301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
5311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
532fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
5331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
5341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    setTopLevel(state);
5351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_COMPLETE;
5361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
5371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) {
5381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = entity6;
539fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ENTITY_NONE;
5401dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
5411dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
5421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
5431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
5441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
5451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
546fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
547fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity6(PROLOG_STATE *state,
548fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
549fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
550fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
551fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
5521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
5531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
5541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
555fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
5561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
5571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
558fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_ENTITY_NONE;
5591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_NOTATION_NAME;
5601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
5611dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
5621dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
5631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
564fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
565fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity7(PROLOG_STATE *state,
566fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
567fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
568fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
569fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
5701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
5711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
5721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
573fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
5741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
5751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
5761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = entity9;
577fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ENTITY_NONE;
5781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
5791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
5801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = entity8;
581fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ENTITY_NONE;
5821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
5831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
5841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
5851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
586fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_ENTITY_NONE;
5871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_VALUE;
5881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
5891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
5901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
5911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
592fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
593fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity8(PROLOG_STATE *state,
594fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
595fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
596fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
597fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
5981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
5991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
6001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
601fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
6021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
6031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = entity9;
6041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_PUBLIC_ID;
6051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
6061dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
6071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
6081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
609fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
610fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity9(PROLOG_STATE *state,
611fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        int tok,
612fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *ptr,
613fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const char *end,
614fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        const ENCODING *enc)
6151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
6161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
6171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
618fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
6191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
620fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->handler = entity10;
6211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ENTITY_SYSTEM_ID;
6221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
6231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
6241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
6251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
626fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
627fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisentity10(PROLOG_STATE *state,
628fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
629fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
630fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
631fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
6321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
6331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
6341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
635fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_NONE;
636fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  case XML_TOK_DECL_CLOSE:
637fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    setTopLevel(state);
638fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ENTITY_COMPLETE;
639fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  }
640fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  return common(state, tok);
641fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis}
642fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis
643fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
644fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisnotation0(PROLOG_STATE *state,
645fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
646fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
647fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
648fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
649fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis{
650fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  switch (tok) {
651fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  case XML_TOK_PROLOG_S:
652fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_NOTATION_NONE;
6531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
6541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = notation1;
6551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NOTATION_NAME;
6561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
6571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
6581dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
6591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
660fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
661fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisnotation1(PROLOG_STATE *state,
662fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
663fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
664fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
665fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
6661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
6671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
6681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
669fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_NOTATION_NONE;
6701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
6711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
6721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = notation3;
673fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_NOTATION_NONE;
6741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
6751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
6761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = notation2;
677fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_NOTATION_NONE;
6781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
6791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
6801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
6811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
6821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
6831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
684fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
685fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisnotation2(PROLOG_STATE *state,
686fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
687fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
688fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
689fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
6901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
6911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
6921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
693fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_NOTATION_NONE;
6941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
6951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = notation4;
6961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NOTATION_PUBLIC_ID;
6971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
6981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
6991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
7001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
701fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
702fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisnotation3(PROLOG_STATE *state,
703fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
704fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
705fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
706fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
7071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
7081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
7091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
710fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_NOTATION_NONE;
7111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
7121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
713fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_NOTATION_NONE;
7141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NOTATION_SYSTEM_ID;
7151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
7161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
7171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
7181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
719fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
720fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisnotation4(PROLOG_STATE *state,
721fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
722fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
723fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
724fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
7251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
7261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
7271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
728fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_NOTATION_NONE;
7291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
7301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
731fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_NOTATION_NONE;
7321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NOTATION_SYSTEM_ID;
7331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
7341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    setTopLevel(state);
7351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NOTATION_NO_SYSTEM_ID;
7361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
7371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
7381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
7391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
740fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
741fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist0(PROLOG_STATE *state,
742fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
743fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
744fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
745fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
7461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
7471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
7481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
749fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
7501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
7511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
7521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist1;
7531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ATTLIST_ELEMENT_NAME;
7541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
7551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
7561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
7571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
758fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
759fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist1(PROLOG_STATE *state,
760fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
761fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
762fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
763fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
7641dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
7651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
7661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
767fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
7681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
7691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    setTopLevel(state);
770fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
7711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
7721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
7731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist2;
7741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ATTRIBUTE_NAME;
7751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
7761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
7771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
7781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
779fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
780fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist2(PROLOG_STATE *state,
781fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
782fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
783fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
784fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
7851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
7861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
7871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
788fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
7891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
7901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    {
7911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      static const char *types[] = {
792fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        KW_CDATA,
7931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_ID,
7941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_IDREF,
7951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_IDREFS,
7961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_ENTITY,
7971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_ENTITIES,
7981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_NMTOKEN,
7991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis        KW_NMTOKENS,
8001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      };
8011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      int i;
8021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++)
803fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        if (XmlNameMatchesAscii(enc, ptr, end, types[i])) {
804fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          state->handler = attlist8;
805fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i;
806fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis        }
8071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
8081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) {
8091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = attlist5;
810fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ATTLIST_NONE;
8111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
8121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
8131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_PAREN:
8141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist3;
815fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
8171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
8181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
8191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
820fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
821fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist3(PROLOG_STATE *state,
822fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
823fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
824fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
825fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
8261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
8271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
8281dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
829fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NMTOKEN:
8311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
8321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
8331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist4;
8341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ATTRIBUTE_ENUM_VALUE;
8351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
8361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
8371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
8381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
839fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
840fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist4(PROLOG_STATE *state,
841fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
842fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
843fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
844fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
8451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
8461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
8471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
848fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN:
8501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist8;
851fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OR:
8531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist3;
854fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
8561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
8571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
8581dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
859fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
860fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist5(PROLOG_STATE *state,
861fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
862fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
863fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
864fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
8651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
8661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
8671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
868fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_PAREN:
8701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist6;
871fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
8731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
8741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
8751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
876fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
877fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist6(PROLOG_STATE *state,
878fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
879fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
880fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
881fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
8821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
8831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
8841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
885fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
8861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
8871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist7;
8881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ATTRIBUTE_NOTATION_VALUE;
8891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
8901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
8911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
8921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
893fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
894fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist7(PROLOG_STATE *state,
895fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
896fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
897fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
898fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
8991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
9001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
9011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
902fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
9031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN:
9041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist8;
905fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
9061dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OR:
9071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist6;
908fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
9091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
9101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
9111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
9121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
9131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis/* default value */
914fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
915fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist8(PROLOG_STATE *state,
916fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
917fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
918fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
919fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
9201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
9211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
9221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
923fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
9241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_POUND_NAME:
9251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
926fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + MIN_BYTES_PER_CHAR(enc),
927fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
928fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_IMPLIED)) {
9291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = attlist1;
9301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE;
9311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
9321dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
933fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + MIN_BYTES_PER_CHAR(enc),
934fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
935fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_REQUIRED)) {
9361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = attlist1;
9371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE;
9381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
9391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
940fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + MIN_BYTES_PER_CHAR(enc),
941fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
942fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_FIXED)) {
9431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = attlist9;
944fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      return XML_ROLE_ATTLIST_NONE;
9451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
9461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
9471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
9481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist1;
9491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE;
9501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
9511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
9521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
9531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
954fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
955fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisattlist9(PROLOG_STATE *state,
956fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
957fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
958fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
959fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
9601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
9611dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
9621dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
963fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ATTLIST_NONE;
9641dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_LITERAL:
9651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = attlist1;
9661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_FIXED_ATTRIBUTE_VALUE;
9671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
9681dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
9691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
9701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
971fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
972fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement0(PROLOG_STATE *state,
973fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
974fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
975fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
976fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
9771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
9781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
9791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
980fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
9811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
9821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
9831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element1;
9841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_ELEMENT_NAME;
9851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
9861dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
9871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
9881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
989fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
990fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement1(PROLOG_STATE *state,
991fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
992fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
993fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
994fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
9951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
9961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
9971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
998fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
9991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
10001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) {
10011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = declClose;
1002fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      state->role_none = XML_ROLE_ELEMENT_NONE;
10031dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_CONTENT_EMPTY;
10041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
10051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) {
10061dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = declClose;
1007fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      state->role_none = XML_ROLE_ELEMENT_NONE;
10081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_CONTENT_ANY;
10091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
10101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
10111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_PAREN:
10121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element2;
10131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level = 1;
10141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_OPEN;
10151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
10161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
10171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
10181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1019fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1020fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement2(PROLOG_STATE *state,
1021fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1022fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1023fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1024fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
10251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
10261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
10271dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1028fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
10291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_POUND_NAME:
10301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc,
1031fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            ptr + MIN_BYTES_PER_CHAR(enc),
1032fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            end,
1033fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis                            KW_PCDATA)) {
10341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = element3;
10351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_CONTENT_PCDATA;
10361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
10371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
10381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_PAREN:
10391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level = 2;
10401dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element6;
10411dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_OPEN;
10421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
10431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
10441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
10451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT;
10461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME_QUESTION:
10471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
10481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT_OPT;
10491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME_ASTERISK:
10501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
10511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT_REP;
10521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME_PLUS:
10531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
10541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT_PLUS;
10551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
10561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
10571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
10581dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1059fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1060fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement3(PROLOG_STATE *state,
1061fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1062fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1063fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1064fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
10651dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
10661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
10671dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1068fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
10691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN:
10701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
1071fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_ELEMENT_NONE;
10721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE;
10731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN_ASTERISK:
10741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
1075fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_ELEMENT_NONE;
10761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE_REP;
10771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OR:
10781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element4;
1079fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
10801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
10811dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
10821dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
10831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1084fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1085fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement4(PROLOG_STATE *state,
1086fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1087fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1088fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1089fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
10901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
10911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
10921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1093fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
10941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
10951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
10961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element5;
10971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT;
10981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
10991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
11001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
11011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1102fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1103fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement5(PROLOG_STATE *state,
1104fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1105fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1106fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1107fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
11081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
11091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
11101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1111fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
11121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN_ASTERISK:
11131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = declClose;
1114fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    state->role_none = XML_ROLE_ELEMENT_NONE;
11151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE_REP;
11161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OR:
11171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element4;
1118fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
11191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
11201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
11211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
11221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1123fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1124fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement6(PROLOG_STATE *state,
1125fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1126fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1127fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1128fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
11291dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
11301dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
11311dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1132fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
11331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_PAREN:
11341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level += 1;
11351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_OPEN;
11361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
11371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PREFIXED_NAME:
11381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
11391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT;
11401dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME_QUESTION:
11411dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
11421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT_OPT;
11431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME_ASTERISK:
11441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
11451dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT_REP;
11461dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME_PLUS:
11471dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element7;
11481dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_CONTENT_ELEMENT_PLUS;
11491dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
11501dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
11511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
11521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1153fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1154fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiselement7(PROLOG_STATE *state,
1155fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         int tok,
1156fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *ptr,
1157fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const char *end,
1158fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis         const ENCODING *enc)
11591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
11601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
11611dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1162fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return XML_ROLE_ELEMENT_NONE;
11631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN:
11641dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level -= 1;
1165fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    if (state->level == 0) {
11661dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = declClose;
1167fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      state->role_none = XML_ROLE_ELEMENT_NONE;
1168fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    }
11691dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE;
11701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN_ASTERISK:
11711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level -= 1;
1172fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    if (state->level == 0) {
11731dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = declClose;
1174fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      state->role_none = XML_ROLE_ELEMENT_NONE;
1175fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    }
11761dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE_REP;
11771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN_QUESTION:
11781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level -= 1;
1179fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    if (state->level == 0) {
11801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = declClose;
1181fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      state->role_none = XML_ROLE_ELEMENT_NONE;
1182fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    }
11831dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE_OPT;
11841dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_CLOSE_PAREN_PLUS:
11851dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->level -= 1;
1186fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    if (state->level == 0) {
11871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = declClose;
1188fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      state->role_none = XML_ROLE_ELEMENT_NONE;
1189fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    }
11901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CLOSE_PLUS;
11911dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_COMMA:
11921dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element6;
11931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_SEQUENCE;
11941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OR:
11951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = element6;
11961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_GROUP_CHOICE;
11971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
11981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
11991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
12001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
12011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
12021dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1203fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1204fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwiscondSect0(PROLOG_STATE *state,
1205fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
1206fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
1207fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
1208fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
12091dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
12101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
12111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
12121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
12131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_NAME:
12141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) {
12151dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = condSect1;
12161dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_NONE;
12171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
12181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) {
12191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      state->handler = condSect2;
12201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis      return XML_ROLE_NONE;
12211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    }
12221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    break;
12231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
12241dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
12251dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
12261dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1227fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1228fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwiscondSect1(PROLOG_STATE *state,
1229fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
1230fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
1231fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
1232fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
12331dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
12341dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
12351dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
12361dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
12371dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_BRACKET:
12381dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = externalSubset1;
12391dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->includeLevel += 1;
12401dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
12411dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
12421dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
12431dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
12441dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1245fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1246fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwiscondSect2(PROLOG_STATE *state,
1247fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
1248fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
1249fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
1250fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
12511dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
12521dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
12531dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
12541dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_NONE;
12551dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_OPEN_BRACKET:
12561dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    state->handler = externalSubset1;
12571dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_IGNORE_SECT;
12581dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
12591dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
12601dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
12611dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
12621dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* XML_DTD */
12631dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1264fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1265fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwisdeclClose(PROLOG_STATE *state,
1266fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          int tok,
1267fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *ptr,
1268fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const char *end,
1269fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis          const ENCODING *enc)
12701dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
12711dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  switch (tok) {
12721dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_PROLOG_S:
1273fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return state->role_none;
12741dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  case XML_TOK_DECL_CLOSE:
12751dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    setTopLevel(state);
1276fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis    return state->role_none;
12771dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  }
12781dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return common(state, tok);
12791dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
12801dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1281fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int PTRCALL
1282fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiserror(PROLOG_STATE *state,
1283fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      int tok,
1284fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      const char *ptr,
1285fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      const char *end,
1286fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis      const ENCODING *enc)
12871dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
12881dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return XML_ROLE_NONE;
12891dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
12901dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1291fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisstatic int FASTCALL
1292fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwiscommon(PROLOG_STATE *state, int tok)
12931dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
12941dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
12951dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  if (!state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF)
12961dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis    return XML_ROLE_INNER_PARAM_ENTITY_REF;
12971dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif
12981dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->handler = error;
12991dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  return XML_ROLE_ERROR;
13001dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
13011dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1302fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisvoid
1303fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwisXmlPrologStateInit(PROLOG_STATE *state)
13041dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
13051dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->handler = prolog0;
13061dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
13071dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->documentEntity = 1;
13081dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->includeLevel = 0;
1309fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwis  state->inEntityValue = 0;
13101dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* XML_DTD */
13111dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
13121dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
13131dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#ifdef XML_DTD
13141dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
1315fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. Löwisvoid
1316fc03a94aaccc9ae606ee3438ca21d65a335d43e9Martin v. LöwisXmlPrologStateInitExternalEntity(PROLOG_STATE *state)
13171dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis{
13181dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->handler = externalSubset0;
13191dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->documentEntity = 0;
13201dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis  state->includeLevel = 0;
13211dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis}
13221dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis
13231dbb1caf86abe5f9920b1f4719daba1c86ce6770Martin v. Löwis#endif /* XML_DTD */
1324