xref: /aosp_15_r20/external/expat/lib/xmltok.h (revision 6be67779651aebaf20f11e5663acd1ae59e93f66)
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