1*6be67779SAndroid Build Coastguard Worker /* 2*6be67779SAndroid Build Coastguard Worker __ __ _ 3*6be67779SAndroid Build Coastguard Worker ___\ \/ /_ __ __ _| |_ 4*6be67779SAndroid Build Coastguard Worker / _ \\ /| '_ \ / _` | __| 5*6be67779SAndroid Build Coastguard Worker | __// \| |_) | (_| | |_ 6*6be67779SAndroid Build Coastguard Worker \___/_/\_\ .__/ \__,_|\__| 7*6be67779SAndroid Build Coastguard Worker |_| XML parser 8*6be67779SAndroid Build Coastguard Worker 9*6be67779SAndroid Build Coastguard Worker Copyright (c) 1997-2000 Thai Open Source Software Center Ltd 10*6be67779SAndroid Build Coastguard Worker Copyright (c) 2000 Clark Cooper <[email protected]> 11*6be67779SAndroid Build Coastguard Worker Copyright (c) 2002 Fred L. Drake, Jr. <[email protected]> 12*6be67779SAndroid Build Coastguard Worker Copyright (c) 2002-2005 Karl Waclawek <[email protected]> 13*6be67779SAndroid Build Coastguard Worker Copyright (c) 2016-2024 Sebastian Pipping <[email protected]> 14*6be67779SAndroid Build Coastguard Worker Copyright (c) 2017 Rhodri James <[email protected]> 15*6be67779SAndroid Build Coastguard Worker Licensed under the MIT license: 16*6be67779SAndroid Build Coastguard Worker 17*6be67779SAndroid Build Coastguard Worker Permission is hereby granted, free of charge, to any person obtaining 18*6be67779SAndroid Build Coastguard Worker a copy of this software and associated documentation files (the 19*6be67779SAndroid Build Coastguard Worker "Software"), to deal in the Software without restriction, including 20*6be67779SAndroid Build Coastguard Worker without limitation the rights to use, copy, modify, merge, publish, 21*6be67779SAndroid Build Coastguard Worker distribute, sublicense, and/or sell copies of the Software, and to permit 22*6be67779SAndroid Build Coastguard Worker persons to whom the Software is furnished to do so, subject to the 23*6be67779SAndroid Build Coastguard Worker following conditions: 24*6be67779SAndroid Build Coastguard Worker 25*6be67779SAndroid Build Coastguard Worker The above copyright notice and this permission notice shall be included 26*6be67779SAndroid Build Coastguard Worker in all copies or substantial portions of the Software. 27*6be67779SAndroid Build Coastguard Worker 28*6be67779SAndroid Build Coastguard Worker THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 29*6be67779SAndroid Build Coastguard Worker EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 30*6be67779SAndroid Build Coastguard Worker MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 31*6be67779SAndroid Build Coastguard Worker NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 32*6be67779SAndroid Build Coastguard Worker DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 33*6be67779SAndroid Build Coastguard Worker OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 34*6be67779SAndroid Build Coastguard Worker USE OR OTHER DEALINGS IN THE SOFTWARE. 35*6be67779SAndroid Build Coastguard Worker */ 36*6be67779SAndroid Build Coastguard Worker 37*6be67779SAndroid Build Coastguard Worker #ifndef XmlTok_INCLUDED 38*6be67779SAndroid Build Coastguard Worker #define XmlTok_INCLUDED 1 39*6be67779SAndroid Build Coastguard Worker 40*6be67779SAndroid Build Coastguard Worker #ifdef __cplusplus 41*6be67779SAndroid Build Coastguard Worker extern "C" { 42*6be67779SAndroid Build Coastguard Worker #endif 43*6be67779SAndroid Build Coastguard Worker 44*6be67779SAndroid Build Coastguard Worker /* The following token may be returned by XmlContentTok */ 45*6be67779SAndroid Build Coastguard Worker #define XML_TOK_TRAILING_RSQB \ 46*6be67779SAndroid Build Coastguard Worker -5 /* ] or ]] at the end of the scan; might be \ 47*6be67779SAndroid Build Coastguard Worker start of illegal ]]> sequence */ 48*6be67779SAndroid Build Coastguard Worker /* The following tokens may be returned by both XmlPrologTok and 49*6be67779SAndroid Build Coastguard Worker XmlContentTok. 50*6be67779SAndroid Build Coastguard Worker */ 51*6be67779SAndroid Build Coastguard Worker #define XML_TOK_NONE -4 /* The string to be scanned is empty */ 52*6be67779SAndroid Build Coastguard Worker #define XML_TOK_TRAILING_CR \ 53*6be67779SAndroid Build Coastguard Worker -3 /* A CR at the end of the scan; \ 54*6be67779SAndroid Build Coastguard Worker might be part of CRLF sequence */ 55*6be67779SAndroid Build Coastguard Worker #define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */ 56*6be67779SAndroid Build Coastguard Worker #define XML_TOK_PARTIAL -1 /* only part of a token */ 57*6be67779SAndroid Build Coastguard Worker #define XML_TOK_INVALID 0 58*6be67779SAndroid Build Coastguard Worker 59*6be67779SAndroid Build Coastguard Worker /* The following tokens are returned by XmlContentTok; some are also 60*6be67779SAndroid Build Coastguard Worker returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok. 61*6be67779SAndroid Build Coastguard Worker */ 62*6be67779SAndroid Build Coastguard Worker #define XML_TOK_START_TAG_WITH_ATTS 1 63*6be67779SAndroid Build Coastguard Worker #define XML_TOK_START_TAG_NO_ATTS 2 64*6be67779SAndroid Build Coastguard Worker #define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag <e/> */ 65*6be67779SAndroid Build Coastguard Worker #define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4 66*6be67779SAndroid Build Coastguard Worker #define XML_TOK_END_TAG 5 67*6be67779SAndroid Build Coastguard Worker #define XML_TOK_DATA_CHARS 6 68*6be67779SAndroid Build Coastguard Worker #define XML_TOK_DATA_NEWLINE 7 69*6be67779SAndroid Build Coastguard Worker #define XML_TOK_CDATA_SECT_OPEN 8 70*6be67779SAndroid Build Coastguard Worker #define XML_TOK_ENTITY_REF 9 71*6be67779SAndroid Build Coastguard Worker #define XML_TOK_CHAR_REF 10 /* numeric character reference */ 72*6be67779SAndroid Build Coastguard Worker 73*6be67779SAndroid Build Coastguard Worker /* The following tokens may be returned by both XmlPrologTok and 74*6be67779SAndroid Build Coastguard Worker XmlContentTok. 75*6be67779SAndroid Build Coastguard Worker */ 76*6be67779SAndroid Build Coastguard Worker #define XML_TOK_PI 11 /* processing instruction */ 77*6be67779SAndroid Build Coastguard Worker #define XML_TOK_XML_DECL 12 /* XML decl or text decl */ 78*6be67779SAndroid Build Coastguard Worker #define XML_TOK_COMMENT 13 79*6be67779SAndroid Build Coastguard Worker #define XML_TOK_BOM 14 /* Byte order mark */ 80*6be67779SAndroid Build Coastguard Worker 81*6be67779SAndroid Build Coastguard Worker /* The following tokens are returned only by XmlPrologTok */ 82*6be67779SAndroid Build Coastguard Worker #define XML_TOK_PROLOG_S 15 83*6be67779SAndroid Build Coastguard Worker #define XML_TOK_DECL_OPEN 16 /* <!foo */ 84*6be67779SAndroid Build Coastguard Worker #define XML_TOK_DECL_CLOSE 17 /* > */ 85*6be67779SAndroid Build Coastguard Worker #define XML_TOK_NAME 18 86*6be67779SAndroid Build Coastguard Worker #define XML_TOK_NMTOKEN 19 87*6be67779SAndroid Build Coastguard Worker #define XML_TOK_POUND_NAME 20 /* #name */ 88*6be67779SAndroid Build Coastguard Worker #define XML_TOK_OR 21 /* | */ 89*6be67779SAndroid Build Coastguard Worker #define XML_TOK_PERCENT 22 90*6be67779SAndroid Build Coastguard Worker #define XML_TOK_OPEN_PAREN 23 91*6be67779SAndroid Build Coastguard Worker #define XML_TOK_CLOSE_PAREN 24 92*6be67779SAndroid Build Coastguard Worker #define XML_TOK_OPEN_BRACKET 25 93*6be67779SAndroid Build Coastguard Worker #define XML_TOK_CLOSE_BRACKET 26 94*6be67779SAndroid Build Coastguard Worker #define XML_TOK_LITERAL 27 95*6be67779SAndroid Build Coastguard Worker #define XML_TOK_PARAM_ENTITY_REF 28 96*6be67779SAndroid Build Coastguard Worker #define XML_TOK_INSTANCE_START 29 97*6be67779SAndroid Build Coastguard Worker 98*6be67779SAndroid Build Coastguard Worker /* The following occur only in element type declarations */ 99*6be67779SAndroid Build Coastguard Worker #define XML_TOK_NAME_QUESTION 30 /* name? */ 100*6be67779SAndroid Build Coastguard Worker #define XML_TOK_NAME_ASTERISK 31 /* name* */ 101*6be67779SAndroid Build Coastguard Worker #define XML_TOK_NAME_PLUS 32 /* name+ */ 102*6be67779SAndroid Build Coastguard Worker #define XML_TOK_COND_SECT_OPEN 33 /* <![ */ 103*6be67779SAndroid Build Coastguard Worker #define XML_TOK_COND_SECT_CLOSE 34 /* ]]> */ 104*6be67779SAndroid Build Coastguard Worker #define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */ 105*6be67779SAndroid Build Coastguard Worker #define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */ 106*6be67779SAndroid Build Coastguard Worker #define XML_TOK_CLOSE_PAREN_PLUS 37 /* )+ */ 107*6be67779SAndroid Build Coastguard Worker #define XML_TOK_COMMA 38 108*6be67779SAndroid Build Coastguard Worker 109*6be67779SAndroid Build Coastguard Worker /* The following token is returned only by XmlAttributeValueTok */ 110*6be67779SAndroid Build Coastguard Worker #define XML_TOK_ATTRIBUTE_VALUE_S 39 111*6be67779SAndroid Build Coastguard Worker 112*6be67779SAndroid Build Coastguard Worker /* The following token is returned only by XmlCdataSectionTok */ 113*6be67779SAndroid Build Coastguard Worker #define XML_TOK_CDATA_SECT_CLOSE 40 114*6be67779SAndroid Build Coastguard Worker 115*6be67779SAndroid Build Coastguard Worker /* With namespace processing this is returned by XmlPrologTok for a 116*6be67779SAndroid Build Coastguard Worker name with a colon. 117*6be67779SAndroid Build Coastguard Worker */ 118*6be67779SAndroid Build Coastguard Worker #define XML_TOK_PREFIXED_NAME 41 119*6be67779SAndroid Build Coastguard Worker 120*6be67779SAndroid Build Coastguard Worker #ifdef XML_DTD 121*6be67779SAndroid Build Coastguard Worker # define XML_TOK_IGNORE_SECT 42 122*6be67779SAndroid Build Coastguard Worker #endif /* XML_DTD */ 123*6be67779SAndroid Build Coastguard Worker 124*6be67779SAndroid Build Coastguard Worker #ifdef XML_DTD 125*6be67779SAndroid Build Coastguard Worker # define XML_N_STATES 4 126*6be67779SAndroid Build Coastguard Worker #else /* not XML_DTD */ 127*6be67779SAndroid Build Coastguard Worker # define XML_N_STATES 3 128*6be67779SAndroid Build Coastguard Worker #endif /* not XML_DTD */ 129*6be67779SAndroid Build Coastguard Worker 130*6be67779SAndroid Build Coastguard Worker #define XML_PROLOG_STATE 0 131*6be67779SAndroid Build Coastguard Worker #define XML_CONTENT_STATE 1 132*6be67779SAndroid Build Coastguard Worker #define XML_CDATA_SECTION_STATE 2 133*6be67779SAndroid Build Coastguard Worker #ifdef XML_DTD 134*6be67779SAndroid Build Coastguard Worker # define XML_IGNORE_SECTION_STATE 3 135*6be67779SAndroid Build Coastguard Worker #endif /* XML_DTD */ 136*6be67779SAndroid Build Coastguard Worker 137*6be67779SAndroid Build Coastguard Worker #define XML_N_LITERAL_TYPES 2 138*6be67779SAndroid Build Coastguard Worker #define XML_ATTRIBUTE_VALUE_LITERAL 0 139*6be67779SAndroid Build Coastguard Worker #define XML_ENTITY_VALUE_LITERAL 1 140*6be67779SAndroid Build Coastguard Worker 141*6be67779SAndroid Build Coastguard Worker /* The size of the buffer passed to XmlUtf8Encode must be at least this. */ 142*6be67779SAndroid Build Coastguard Worker #define XML_UTF8_ENCODE_MAX 4 143*6be67779SAndroid Build Coastguard Worker /* The size of the buffer passed to XmlUtf16Encode must be at least this. */ 144*6be67779SAndroid Build Coastguard Worker #define XML_UTF16_ENCODE_MAX 2 145*6be67779SAndroid Build Coastguard Worker 146*6be67779SAndroid Build Coastguard Worker typedef struct position { 147*6be67779SAndroid Build Coastguard Worker /* first line and first column are 0 not 1 */ 148*6be67779SAndroid Build Coastguard Worker XML_Size lineNumber; 149*6be67779SAndroid Build Coastguard Worker XML_Size columnNumber; 150*6be67779SAndroid Build Coastguard Worker } POSITION; 151*6be67779SAndroid Build Coastguard Worker 152*6be67779SAndroid Build Coastguard Worker typedef struct { 153*6be67779SAndroid Build Coastguard Worker const char *name; 154*6be67779SAndroid Build Coastguard Worker const char *valuePtr; 155*6be67779SAndroid Build Coastguard Worker const char *valueEnd; 156*6be67779SAndroid Build Coastguard Worker char normalized; 157*6be67779SAndroid Build Coastguard Worker } ATTRIBUTE; 158*6be67779SAndroid Build Coastguard Worker 159*6be67779SAndroid Build Coastguard Worker struct encoding; 160*6be67779SAndroid Build Coastguard Worker typedef struct encoding ENCODING; 161*6be67779SAndroid Build Coastguard Worker 162*6be67779SAndroid Build Coastguard Worker typedef int(PTRCALL *SCANNER)(const ENCODING *, const char *, const char *, 163*6be67779SAndroid Build Coastguard Worker const char **); 164*6be67779SAndroid Build Coastguard Worker 165*6be67779SAndroid Build Coastguard Worker enum XML_Convert_Result { 166*6be67779SAndroid Build Coastguard Worker XML_CONVERT_COMPLETED = 0, 167*6be67779SAndroid Build Coastguard Worker XML_CONVERT_INPUT_INCOMPLETE = 1, 168*6be67779SAndroid Build Coastguard Worker XML_CONVERT_OUTPUT_EXHAUSTED 169*6be67779SAndroid Build Coastguard Worker = 2 /* and therefore potentially input remaining as well */ 170*6be67779SAndroid Build Coastguard Worker }; 171*6be67779SAndroid Build Coastguard Worker 172*6be67779SAndroid Build Coastguard Worker struct encoding { 173*6be67779SAndroid Build Coastguard Worker SCANNER scanners[XML_N_STATES]; 174*6be67779SAndroid Build Coastguard Worker SCANNER literalScanners[XML_N_LITERAL_TYPES]; 175*6be67779SAndroid Build Coastguard Worker int(PTRCALL *nameMatchesAscii)(const ENCODING *, const char *, const char *, 176*6be67779SAndroid Build Coastguard Worker const char *); 177*6be67779SAndroid Build Coastguard Worker int(PTRFASTCALL *nameLength)(const ENCODING *, const char *); 178*6be67779SAndroid Build Coastguard Worker const char *(PTRFASTCALL *skipS)(const ENCODING *, const char *); 179*6be67779SAndroid Build Coastguard Worker int(PTRCALL *getAtts)(const ENCODING *enc, const char *ptr, int attsMax, 180*6be67779SAndroid Build Coastguard Worker ATTRIBUTE *atts); 181*6be67779SAndroid Build Coastguard Worker int(PTRFASTCALL *charRefNumber)(const ENCODING *enc, const char *ptr); 182*6be67779SAndroid Build Coastguard Worker int(PTRCALL *predefinedEntityName)(const ENCODING *, const char *, 183*6be67779SAndroid Build Coastguard Worker const char *); 184*6be67779SAndroid Build Coastguard Worker void(PTRCALL *updatePosition)(const ENCODING *, const char *ptr, 185*6be67779SAndroid Build Coastguard Worker const char *end, POSITION *); 186*6be67779SAndroid Build Coastguard Worker int(PTRCALL *isPublicId)(const ENCODING *enc, const char *ptr, 187*6be67779SAndroid Build Coastguard Worker const char *end, const char **badPtr); 188*6be67779SAndroid Build Coastguard Worker enum XML_Convert_Result(PTRCALL *utf8Convert)(const ENCODING *enc, 189*6be67779SAndroid Build Coastguard Worker const char **fromP, 190*6be67779SAndroid Build Coastguard Worker const char *fromLim, char **toP, 191*6be67779SAndroid Build Coastguard Worker const char *toLim); 192*6be67779SAndroid Build Coastguard Worker enum XML_Convert_Result(PTRCALL *utf16Convert)(const ENCODING *enc, 193*6be67779SAndroid Build Coastguard Worker const char **fromP, 194*6be67779SAndroid Build Coastguard Worker const char *fromLim, 195*6be67779SAndroid Build Coastguard Worker unsigned short **toP, 196*6be67779SAndroid Build Coastguard Worker const unsigned short *toLim); 197*6be67779SAndroid Build Coastguard Worker int minBytesPerChar; 198*6be67779SAndroid Build Coastguard Worker char isUtf8; 199*6be67779SAndroid Build Coastguard Worker char isUtf16; 200*6be67779SAndroid Build Coastguard Worker }; 201*6be67779SAndroid Build Coastguard Worker 202*6be67779SAndroid Build Coastguard Worker /* Scan the string starting at ptr until the end of the next complete 203*6be67779SAndroid Build Coastguard Worker token, but do not scan past eptr. Return an integer giving the 204*6be67779SAndroid Build Coastguard Worker type of token. 205*6be67779SAndroid Build Coastguard Worker 206*6be67779SAndroid Build Coastguard Worker Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set. 207*6be67779SAndroid Build Coastguard Worker 208*6be67779SAndroid Build Coastguard Worker Return XML_TOK_PARTIAL when the string does not contain a complete 209*6be67779SAndroid Build Coastguard Worker token; nextTokPtr will not be set. 210*6be67779SAndroid Build Coastguard Worker 211*6be67779SAndroid Build Coastguard Worker Return XML_TOK_INVALID when the string does not start a valid 212*6be67779SAndroid Build Coastguard Worker token; nextTokPtr will be set to point to the character which made 213*6be67779SAndroid Build Coastguard Worker the token invalid. 214*6be67779SAndroid Build Coastguard Worker 215*6be67779SAndroid Build Coastguard Worker Otherwise the string starts with a valid token; nextTokPtr will be 216*6be67779SAndroid Build Coastguard Worker set to point to the character following the end of that token. 217*6be67779SAndroid Build Coastguard Worker 218*6be67779SAndroid Build Coastguard Worker Each data character counts as a single token, but adjacent data 219*6be67779SAndroid Build Coastguard Worker characters may be returned together. Similarly for characters in 220*6be67779SAndroid Build Coastguard Worker the prolog outside literals, comments and processing instructions. 221*6be67779SAndroid Build Coastguard Worker */ 222*6be67779SAndroid Build Coastguard Worker 223*6be67779SAndroid Build Coastguard Worker #define XmlTok(enc, state, ptr, end, nextTokPtr) \ 224*6be67779SAndroid Build Coastguard Worker (((enc)->scanners[state])(enc, ptr, end, nextTokPtr)) 225*6be67779SAndroid Build Coastguard Worker 226*6be67779SAndroid Build Coastguard Worker #define XmlPrologTok(enc, ptr, end, nextTokPtr) \ 227*6be67779SAndroid Build Coastguard Worker XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr) 228*6be67779SAndroid Build Coastguard Worker 229*6be67779SAndroid Build Coastguard Worker #define XmlContentTok(enc, ptr, end, nextTokPtr) \ 230*6be67779SAndroid Build Coastguard Worker XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr) 231*6be67779SAndroid Build Coastguard Worker 232*6be67779SAndroid Build Coastguard Worker #define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \ 233*6be67779SAndroid Build Coastguard Worker XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr) 234*6be67779SAndroid Build Coastguard Worker 235*6be67779SAndroid Build Coastguard Worker #ifdef XML_DTD 236*6be67779SAndroid Build Coastguard Worker 237*6be67779SAndroid Build Coastguard Worker # define XmlIgnoreSectionTok(enc, ptr, end, nextTokPtr) \ 238*6be67779SAndroid Build Coastguard Worker XmlTok(enc, XML_IGNORE_SECTION_STATE, ptr, end, nextTokPtr) 239*6be67779SAndroid Build Coastguard Worker 240*6be67779SAndroid Build Coastguard Worker #endif /* XML_DTD */ 241*6be67779SAndroid Build Coastguard Worker 242*6be67779SAndroid Build Coastguard Worker /* This is used for performing a 2nd-level tokenization on the content 243*6be67779SAndroid Build Coastguard Worker of a literal that has already been returned by XmlTok. 244*6be67779SAndroid Build Coastguard Worker */ 245*6be67779SAndroid Build Coastguard Worker #define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \ 246*6be67779SAndroid Build Coastguard Worker (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr)) 247*6be67779SAndroid Build Coastguard Worker 248*6be67779SAndroid Build Coastguard Worker #define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \ 249*6be67779SAndroid Build Coastguard Worker XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr) 250*6be67779SAndroid Build Coastguard Worker 251*6be67779SAndroid Build Coastguard Worker #define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \ 252*6be67779SAndroid Build Coastguard Worker XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr) 253*6be67779SAndroid Build Coastguard Worker 254*6be67779SAndroid Build Coastguard Worker #define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \ 255*6be67779SAndroid Build Coastguard Worker (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2)) 256*6be67779SAndroid Build Coastguard Worker 257*6be67779SAndroid Build Coastguard Worker #define XmlNameLength(enc, ptr) (((enc)->nameLength)(enc, ptr)) 258*6be67779SAndroid Build Coastguard Worker 259*6be67779SAndroid Build Coastguard Worker #define XmlSkipS(enc, ptr) (((enc)->skipS)(enc, ptr)) 260*6be67779SAndroid Build Coastguard Worker 261*6be67779SAndroid Build Coastguard Worker #define XmlGetAttributes(enc, ptr, attsMax, atts) \ 262*6be67779SAndroid Build Coastguard Worker (((enc)->getAtts)(enc, ptr, attsMax, atts)) 263*6be67779SAndroid Build Coastguard Worker 264*6be67779SAndroid Build Coastguard Worker #define XmlCharRefNumber(enc, ptr) (((enc)->charRefNumber)(enc, ptr)) 265*6be67779SAndroid Build Coastguard Worker 266*6be67779SAndroid Build Coastguard Worker #define XmlPredefinedEntityName(enc, ptr, end) \ 267*6be67779SAndroid Build Coastguard Worker (((enc)->predefinedEntityName)(enc, ptr, end)) 268*6be67779SAndroid Build Coastguard Worker 269*6be67779SAndroid Build Coastguard Worker #define XmlUpdatePosition(enc, ptr, end, pos) \ 270*6be67779SAndroid Build Coastguard Worker (((enc)->updatePosition)(enc, ptr, end, pos)) 271*6be67779SAndroid Build Coastguard Worker 272*6be67779SAndroid Build Coastguard Worker #define XmlIsPublicId(enc, ptr, end, badPtr) \ 273*6be67779SAndroid Build Coastguard Worker (((enc)->isPublicId)(enc, ptr, end, badPtr)) 274*6be67779SAndroid Build Coastguard Worker 275*6be67779SAndroid Build Coastguard Worker #define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \ 276*6be67779SAndroid Build Coastguard Worker (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim)) 277*6be67779SAndroid Build Coastguard Worker 278*6be67779SAndroid Build Coastguard Worker #define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \ 279*6be67779SAndroid Build Coastguard Worker (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim)) 280*6be67779SAndroid Build Coastguard Worker 281*6be67779SAndroid Build Coastguard Worker typedef struct { 282*6be67779SAndroid Build Coastguard Worker ENCODING initEnc; 283*6be67779SAndroid Build Coastguard Worker const ENCODING **encPtr; 284*6be67779SAndroid Build Coastguard Worker } INIT_ENCODING; 285*6be67779SAndroid Build Coastguard Worker 286*6be67779SAndroid Build Coastguard Worker int XmlParseXmlDecl(int isGeneralTextEntity, const ENCODING *enc, 287*6be67779SAndroid Build Coastguard Worker const char *ptr, const char *end, const char **badPtr, 288*6be67779SAndroid Build Coastguard Worker const char **versionPtr, const char **versionEndPtr, 289*6be67779SAndroid Build Coastguard Worker const char **encodingNamePtr, 290*6be67779SAndroid Build Coastguard Worker const ENCODING **namedEncodingPtr, int *standalonePtr); 291*6be67779SAndroid Build Coastguard Worker 292*6be67779SAndroid Build Coastguard Worker int XmlInitEncoding(INIT_ENCODING *p, const ENCODING **encPtr, 293*6be67779SAndroid Build Coastguard Worker const char *name); 294*6be67779SAndroid Build Coastguard Worker const ENCODING *XmlGetUtf8InternalEncoding(void); 295*6be67779SAndroid Build Coastguard Worker const ENCODING *XmlGetUtf16InternalEncoding(void); 296*6be67779SAndroid Build Coastguard Worker int FASTCALL XmlUtf8Encode(int charNumber, char *buf); 297*6be67779SAndroid Build Coastguard Worker int FASTCALL XmlUtf16Encode(int charNumber, unsigned short *buf); 298*6be67779SAndroid Build Coastguard Worker int XmlSizeOfUnknownEncoding(void); 299*6be67779SAndroid Build Coastguard Worker 300*6be67779SAndroid Build Coastguard Worker typedef int(XMLCALL *CONVERTER)(void *userData, const char *p); 301*6be67779SAndroid Build Coastguard Worker 302*6be67779SAndroid Build Coastguard Worker ENCODING *XmlInitUnknownEncoding(void *mem, int *table, CONVERTER convert, 303*6be67779SAndroid Build Coastguard Worker void *userData); 304*6be67779SAndroid Build Coastguard Worker 305*6be67779SAndroid Build Coastguard Worker int XmlParseXmlDeclNS(int isGeneralTextEntity, const ENCODING *enc, 306*6be67779SAndroid Build Coastguard Worker const char *ptr, const char *end, const char **badPtr, 307*6be67779SAndroid Build Coastguard Worker const char **versionPtr, const char **versionEndPtr, 308*6be67779SAndroid Build Coastguard Worker const char **encodingNamePtr, 309*6be67779SAndroid Build Coastguard Worker const ENCODING **namedEncodingPtr, int *standalonePtr); 310*6be67779SAndroid Build Coastguard Worker 311*6be67779SAndroid Build Coastguard Worker int XmlInitEncodingNS(INIT_ENCODING *p, const ENCODING **encPtr, 312*6be67779SAndroid Build Coastguard Worker const char *name); 313*6be67779SAndroid Build Coastguard Worker const ENCODING *XmlGetUtf8InternalEncodingNS(void); 314*6be67779SAndroid Build Coastguard Worker const ENCODING *XmlGetUtf16InternalEncodingNS(void); 315*6be67779SAndroid Build Coastguard Worker ENCODING *XmlInitUnknownEncodingNS(void *mem, int *table, CONVERTER convert, 316*6be67779SAndroid Build Coastguard Worker void *userData); 317*6be67779SAndroid Build Coastguard Worker #ifdef __cplusplus 318*6be67779SAndroid Build Coastguard Worker } 319*6be67779SAndroid Build Coastguard Worker #endif 320*6be67779SAndroid Build Coastguard Worker 321*6be67779SAndroid Build Coastguard Worker #endif /* not XmlTok_INCLUDED */ 322