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