SAX based XML parser

Dependents:   giken9_HTMLServer_Temp_Sample

Committer:
andrewbonney
Date:
Fri Apr 08 09:18:41 2011 +0000
Revision:
0:07919e3d6c56

        

Who changed what in which revision?

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