xref: /aosp_15_r20/external/expat/lib/expat.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) 2000-2005 Fred L. Drake, Jr. <[email protected]>
12*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2001-2002 Greg Stein <[email protected]>
13*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2002-2016 Karl Waclawek <[email protected]>
14*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2016-2024 Sebastian Pipping <[email protected]>
15*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2016      Cristian Rodríguez <[email protected]>
16*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2016      Thomas Beutlich <[email protected]>
17*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2017      Rhodri James <[email protected]>
18*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2022      Thijs Schreijer <[email protected]>
19*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2023      Hanno Böck <[email protected]>
20*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2023      Sony Corporation / Snild Dolkow <[email protected]>
21*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2024      Taichi Haradaguchi <[email protected]>
22*6be67779SAndroid Build Coastguard Worker    Licensed under the MIT license:
23*6be67779SAndroid Build Coastguard Worker 
24*6be67779SAndroid Build Coastguard Worker    Permission is  hereby granted,  free of charge,  to any  person obtaining
25*6be67779SAndroid Build Coastguard Worker    a  copy  of  this  software   and  associated  documentation  files  (the
26*6be67779SAndroid Build Coastguard Worker    "Software"),  to  deal in  the  Software  without restriction,  including
27*6be67779SAndroid Build Coastguard Worker    without  limitation the  rights  to use,  copy,  modify, merge,  publish,
28*6be67779SAndroid Build Coastguard Worker    distribute, sublicense, and/or sell copies of the Software, and to permit
29*6be67779SAndroid Build Coastguard Worker    persons  to whom  the Software  is  furnished to  do so,  subject to  the
30*6be67779SAndroid Build Coastguard Worker    following conditions:
31*6be67779SAndroid Build Coastguard Worker 
32*6be67779SAndroid Build Coastguard Worker    The above copyright  notice and this permission notice  shall be included
33*6be67779SAndroid Build Coastguard Worker    in all copies or substantial portions of the Software.
34*6be67779SAndroid Build Coastguard Worker 
35*6be67779SAndroid Build Coastguard Worker    THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
36*6be67779SAndroid Build Coastguard Worker    EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
37*6be67779SAndroid Build Coastguard Worker    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
38*6be67779SAndroid Build Coastguard Worker    NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
39*6be67779SAndroid Build Coastguard Worker    DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
40*6be67779SAndroid Build Coastguard Worker    OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
41*6be67779SAndroid Build Coastguard Worker    USE OR OTHER DEALINGS IN THE SOFTWARE.
42*6be67779SAndroid Build Coastguard Worker */
43*6be67779SAndroid Build Coastguard Worker 
44*6be67779SAndroid Build Coastguard Worker #ifndef Expat_INCLUDED
45*6be67779SAndroid Build Coastguard Worker #define Expat_INCLUDED 1
46*6be67779SAndroid Build Coastguard Worker 
47*6be67779SAndroid Build Coastguard Worker #include <stdlib.h>
48*6be67779SAndroid Build Coastguard Worker #include "expat_external.h"
49*6be67779SAndroid Build Coastguard Worker 
50*6be67779SAndroid Build Coastguard Worker #ifdef __cplusplus
51*6be67779SAndroid Build Coastguard Worker extern "C" {
52*6be67779SAndroid Build Coastguard Worker #endif
53*6be67779SAndroid Build Coastguard Worker 
54*6be67779SAndroid Build Coastguard Worker struct XML_ParserStruct;
55*6be67779SAndroid Build Coastguard Worker typedef struct XML_ParserStruct *XML_Parser;
56*6be67779SAndroid Build Coastguard Worker 
57*6be67779SAndroid Build Coastguard Worker typedef unsigned char XML_Bool;
58*6be67779SAndroid Build Coastguard Worker #define XML_TRUE ((XML_Bool)1)
59*6be67779SAndroid Build Coastguard Worker #define XML_FALSE ((XML_Bool)0)
60*6be67779SAndroid Build Coastguard Worker 
61*6be67779SAndroid Build Coastguard Worker /* The XML_Status enum gives the possible return values for several
62*6be67779SAndroid Build Coastguard Worker    API functions.  The preprocessor #defines are included so this
63*6be67779SAndroid Build Coastguard Worker    stanza can be added to code that still needs to support older
64*6be67779SAndroid Build Coastguard Worker    versions of Expat 1.95.x:
65*6be67779SAndroid Build Coastguard Worker 
66*6be67779SAndroid Build Coastguard Worker    #ifndef XML_STATUS_OK
67*6be67779SAndroid Build Coastguard Worker    #define XML_STATUS_OK    1
68*6be67779SAndroid Build Coastguard Worker    #define XML_STATUS_ERROR 0
69*6be67779SAndroid Build Coastguard Worker    #endif
70*6be67779SAndroid Build Coastguard Worker 
71*6be67779SAndroid Build Coastguard Worker    Otherwise, the #define hackery is quite ugly and would have been
72*6be67779SAndroid Build Coastguard Worker    dropped.
73*6be67779SAndroid Build Coastguard Worker */
74*6be67779SAndroid Build Coastguard Worker enum XML_Status {
75*6be67779SAndroid Build Coastguard Worker   XML_STATUS_ERROR = 0,
76*6be67779SAndroid Build Coastguard Worker #define XML_STATUS_ERROR XML_STATUS_ERROR
77*6be67779SAndroid Build Coastguard Worker   XML_STATUS_OK = 1,
78*6be67779SAndroid Build Coastguard Worker #define XML_STATUS_OK XML_STATUS_OK
79*6be67779SAndroid Build Coastguard Worker   XML_STATUS_SUSPENDED = 2
80*6be67779SAndroid Build Coastguard Worker #define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED
81*6be67779SAndroid Build Coastguard Worker };
82*6be67779SAndroid Build Coastguard Worker 
83*6be67779SAndroid Build Coastguard Worker enum XML_Error {
84*6be67779SAndroid Build Coastguard Worker   XML_ERROR_NONE,
85*6be67779SAndroid Build Coastguard Worker   XML_ERROR_NO_MEMORY,
86*6be67779SAndroid Build Coastguard Worker   XML_ERROR_SYNTAX,
87*6be67779SAndroid Build Coastguard Worker   XML_ERROR_NO_ELEMENTS,
88*6be67779SAndroid Build Coastguard Worker   XML_ERROR_INVALID_TOKEN,
89*6be67779SAndroid Build Coastguard Worker   XML_ERROR_UNCLOSED_TOKEN,
90*6be67779SAndroid Build Coastguard Worker   XML_ERROR_PARTIAL_CHAR,
91*6be67779SAndroid Build Coastguard Worker   XML_ERROR_TAG_MISMATCH,
92*6be67779SAndroid Build Coastguard Worker   XML_ERROR_DUPLICATE_ATTRIBUTE,
93*6be67779SAndroid Build Coastguard Worker   XML_ERROR_JUNK_AFTER_DOC_ELEMENT,
94*6be67779SAndroid Build Coastguard Worker   XML_ERROR_PARAM_ENTITY_REF,
95*6be67779SAndroid Build Coastguard Worker   XML_ERROR_UNDEFINED_ENTITY,
96*6be67779SAndroid Build Coastguard Worker   XML_ERROR_RECURSIVE_ENTITY_REF,
97*6be67779SAndroid Build Coastguard Worker   XML_ERROR_ASYNC_ENTITY,
98*6be67779SAndroid Build Coastguard Worker   XML_ERROR_BAD_CHAR_REF,
99*6be67779SAndroid Build Coastguard Worker   XML_ERROR_BINARY_ENTITY_REF,
100*6be67779SAndroid Build Coastguard Worker   XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF,
101*6be67779SAndroid Build Coastguard Worker   XML_ERROR_MISPLACED_XML_PI,
102*6be67779SAndroid Build Coastguard Worker   XML_ERROR_UNKNOWN_ENCODING,
103*6be67779SAndroid Build Coastguard Worker   XML_ERROR_INCORRECT_ENCODING,
104*6be67779SAndroid Build Coastguard Worker   XML_ERROR_UNCLOSED_CDATA_SECTION,
105*6be67779SAndroid Build Coastguard Worker   XML_ERROR_EXTERNAL_ENTITY_HANDLING,
106*6be67779SAndroid Build Coastguard Worker   XML_ERROR_NOT_STANDALONE,
107*6be67779SAndroid Build Coastguard Worker   XML_ERROR_UNEXPECTED_STATE,
108*6be67779SAndroid Build Coastguard Worker   XML_ERROR_ENTITY_DECLARED_IN_PE,
109*6be67779SAndroid Build Coastguard Worker   XML_ERROR_FEATURE_REQUIRES_XML_DTD,
110*6be67779SAndroid Build Coastguard Worker   XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING,
111*6be67779SAndroid Build Coastguard Worker   /* Added in 1.95.7. */
112*6be67779SAndroid Build Coastguard Worker   XML_ERROR_UNBOUND_PREFIX,
113*6be67779SAndroid Build Coastguard Worker   /* Added in 1.95.8. */
114*6be67779SAndroid Build Coastguard Worker   XML_ERROR_UNDECLARING_PREFIX,
115*6be67779SAndroid Build Coastguard Worker   XML_ERROR_INCOMPLETE_PE,
116*6be67779SAndroid Build Coastguard Worker   XML_ERROR_XML_DECL,
117*6be67779SAndroid Build Coastguard Worker   XML_ERROR_TEXT_DECL,
118*6be67779SAndroid Build Coastguard Worker   XML_ERROR_PUBLICID,
119*6be67779SAndroid Build Coastguard Worker   XML_ERROR_SUSPENDED,
120*6be67779SAndroid Build Coastguard Worker   XML_ERROR_NOT_SUSPENDED,
121*6be67779SAndroid Build Coastguard Worker   XML_ERROR_ABORTED,
122*6be67779SAndroid Build Coastguard Worker   XML_ERROR_FINISHED,
123*6be67779SAndroid Build Coastguard Worker   XML_ERROR_SUSPEND_PE,
124*6be67779SAndroid Build Coastguard Worker   /* Added in 2.0. */
125*6be67779SAndroid Build Coastguard Worker   XML_ERROR_RESERVED_PREFIX_XML,
126*6be67779SAndroid Build Coastguard Worker   XML_ERROR_RESERVED_PREFIX_XMLNS,
127*6be67779SAndroid Build Coastguard Worker   XML_ERROR_RESERVED_NAMESPACE_URI,
128*6be67779SAndroid Build Coastguard Worker   /* Added in 2.2.1. */
129*6be67779SAndroid Build Coastguard Worker   XML_ERROR_INVALID_ARGUMENT,
130*6be67779SAndroid Build Coastguard Worker   /* Added in 2.3.0. */
131*6be67779SAndroid Build Coastguard Worker   XML_ERROR_NO_BUFFER,
132*6be67779SAndroid Build Coastguard Worker   /* Added in 2.4.0. */
133*6be67779SAndroid Build Coastguard Worker   XML_ERROR_AMPLIFICATION_LIMIT_BREACH
134*6be67779SAndroid Build Coastguard Worker };
135*6be67779SAndroid Build Coastguard Worker 
136*6be67779SAndroid Build Coastguard Worker enum XML_Content_Type {
137*6be67779SAndroid Build Coastguard Worker   XML_CTYPE_EMPTY = 1,
138*6be67779SAndroid Build Coastguard Worker   XML_CTYPE_ANY,
139*6be67779SAndroid Build Coastguard Worker   XML_CTYPE_MIXED,
140*6be67779SAndroid Build Coastguard Worker   XML_CTYPE_NAME,
141*6be67779SAndroid Build Coastguard Worker   XML_CTYPE_CHOICE,
142*6be67779SAndroid Build Coastguard Worker   XML_CTYPE_SEQ
143*6be67779SAndroid Build Coastguard Worker };
144*6be67779SAndroid Build Coastguard Worker 
145*6be67779SAndroid Build Coastguard Worker enum XML_Content_Quant {
146*6be67779SAndroid Build Coastguard Worker   XML_CQUANT_NONE,
147*6be67779SAndroid Build Coastguard Worker   XML_CQUANT_OPT,
148*6be67779SAndroid Build Coastguard Worker   XML_CQUANT_REP,
149*6be67779SAndroid Build Coastguard Worker   XML_CQUANT_PLUS
150*6be67779SAndroid Build Coastguard Worker };
151*6be67779SAndroid Build Coastguard Worker 
152*6be67779SAndroid Build Coastguard Worker /* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be
153*6be67779SAndroid Build Coastguard Worker    XML_CQUANT_NONE, and the other fields will be zero or NULL.
154*6be67779SAndroid Build Coastguard Worker    If type == XML_CTYPE_MIXED, then quant will be NONE or REP and
155*6be67779SAndroid Build Coastguard Worker    numchildren will contain number of elements that may be mixed in
156*6be67779SAndroid Build Coastguard Worker    and children point to an array of XML_Content cells that will be
157*6be67779SAndroid Build Coastguard Worker    all of XML_CTYPE_NAME type with no quantification.
158*6be67779SAndroid Build Coastguard Worker 
159*6be67779SAndroid Build Coastguard Worker    If type == XML_CTYPE_NAME, then the name points to the name, and
160*6be67779SAndroid Build Coastguard Worker    the numchildren field will be zero and children will be NULL. The
161*6be67779SAndroid Build Coastguard Worker    quant fields indicates any quantifiers placed on the name.
162*6be67779SAndroid Build Coastguard Worker 
163*6be67779SAndroid Build Coastguard Worker    CHOICE and SEQ will have name NULL, the number of children in
164*6be67779SAndroid Build Coastguard Worker    numchildren and children will point, recursively, to an array
165*6be67779SAndroid Build Coastguard Worker    of XML_Content cells.
166*6be67779SAndroid Build Coastguard Worker 
167*6be67779SAndroid Build Coastguard Worker    The EMPTY, ANY, and MIXED types will only occur at top level.
168*6be67779SAndroid Build Coastguard Worker */
169*6be67779SAndroid Build Coastguard Worker 
170*6be67779SAndroid Build Coastguard Worker typedef struct XML_cp XML_Content;
171*6be67779SAndroid Build Coastguard Worker 
172*6be67779SAndroid Build Coastguard Worker struct XML_cp {
173*6be67779SAndroid Build Coastguard Worker   enum XML_Content_Type type;
174*6be67779SAndroid Build Coastguard Worker   enum XML_Content_Quant quant;
175*6be67779SAndroid Build Coastguard Worker   XML_Char *name;
176*6be67779SAndroid Build Coastguard Worker   unsigned int numchildren;
177*6be67779SAndroid Build Coastguard Worker   XML_Content *children;
178*6be67779SAndroid Build Coastguard Worker };
179*6be67779SAndroid Build Coastguard Worker 
180*6be67779SAndroid Build Coastguard Worker /* This is called for an element declaration. See above for
181*6be67779SAndroid Build Coastguard Worker    description of the model argument. It's the user code's responsibility
182*6be67779SAndroid Build Coastguard Worker    to free model when finished with it. See XML_FreeContentModel.
183*6be67779SAndroid Build Coastguard Worker    There is no need to free the model from the handler, it can be kept
184*6be67779SAndroid Build Coastguard Worker    around and freed at a later stage.
185*6be67779SAndroid Build Coastguard Worker */
186*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_ElementDeclHandler)(void *userData,
187*6be67779SAndroid Build Coastguard Worker                                               const XML_Char *name,
188*6be67779SAndroid Build Coastguard Worker                                               XML_Content *model);
189*6be67779SAndroid Build Coastguard Worker 
190*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
191*6be67779SAndroid Build Coastguard Worker XML_SetElementDeclHandler(XML_Parser parser, XML_ElementDeclHandler eldecl);
192*6be67779SAndroid Build Coastguard Worker 
193*6be67779SAndroid Build Coastguard Worker /* The Attlist declaration handler is called for *each* attribute. So
194*6be67779SAndroid Build Coastguard Worker    a single Attlist declaration with multiple attributes declared will
195*6be67779SAndroid Build Coastguard Worker    generate multiple calls to this handler. The "default" parameter
196*6be67779SAndroid Build Coastguard Worker    may be NULL in the case of the "#IMPLIED" or "#REQUIRED"
197*6be67779SAndroid Build Coastguard Worker    keyword. The "isrequired" parameter will be true and the default
198*6be67779SAndroid Build Coastguard Worker    value will be NULL in the case of "#REQUIRED". If "isrequired" is
199*6be67779SAndroid Build Coastguard Worker    true and default is non-NULL, then this is a "#FIXED" default.
200*6be67779SAndroid Build Coastguard Worker */
201*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_AttlistDeclHandler)(
202*6be67779SAndroid Build Coastguard Worker     void *userData, const XML_Char *elname, const XML_Char *attname,
203*6be67779SAndroid Build Coastguard Worker     const XML_Char *att_type, const XML_Char *dflt, int isrequired);
204*6be67779SAndroid Build Coastguard Worker 
205*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
206*6be67779SAndroid Build Coastguard Worker XML_SetAttlistDeclHandler(XML_Parser parser, XML_AttlistDeclHandler attdecl);
207*6be67779SAndroid Build Coastguard Worker 
208*6be67779SAndroid Build Coastguard Worker /* The XML declaration handler is called for *both* XML declarations
209*6be67779SAndroid Build Coastguard Worker    and text declarations. The way to distinguish is that the version
210*6be67779SAndroid Build Coastguard Worker    parameter will be NULL for text declarations. The encoding
211*6be67779SAndroid Build Coastguard Worker    parameter may be NULL for XML declarations. The standalone
212*6be67779SAndroid Build Coastguard Worker    parameter will be -1, 0, or 1 indicating respectively that there
213*6be67779SAndroid Build Coastguard Worker    was no standalone parameter in the declaration, that it was given
214*6be67779SAndroid Build Coastguard Worker    as no, or that it was given as yes.
215*6be67779SAndroid Build Coastguard Worker */
216*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_XmlDeclHandler)(void *userData,
217*6be67779SAndroid Build Coastguard Worker                                           const XML_Char *version,
218*6be67779SAndroid Build Coastguard Worker                                           const XML_Char *encoding,
219*6be67779SAndroid Build Coastguard Worker                                           int standalone);
220*6be67779SAndroid Build Coastguard Worker 
221*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
222*6be67779SAndroid Build Coastguard Worker XML_SetXmlDeclHandler(XML_Parser parser, XML_XmlDeclHandler xmldecl);
223*6be67779SAndroid Build Coastguard Worker 
224*6be67779SAndroid Build Coastguard Worker typedef struct {
225*6be67779SAndroid Build Coastguard Worker   void *(*malloc_fcn)(size_t size);
226*6be67779SAndroid Build Coastguard Worker   void *(*realloc_fcn)(void *ptr, size_t size);
227*6be67779SAndroid Build Coastguard Worker   void (*free_fcn)(void *ptr);
228*6be67779SAndroid Build Coastguard Worker } XML_Memory_Handling_Suite;
229*6be67779SAndroid Build Coastguard Worker 
230*6be67779SAndroid Build Coastguard Worker /* Constructs a new parser; encoding is the encoding specified by the
231*6be67779SAndroid Build Coastguard Worker    external protocol or NULL if there is none specified.
232*6be67779SAndroid Build Coastguard Worker */
233*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(XML_Parser)
234*6be67779SAndroid Build Coastguard Worker XML_ParserCreate(const XML_Char *encoding);
235*6be67779SAndroid Build Coastguard Worker 
236*6be67779SAndroid Build Coastguard Worker /* Constructs a new parser and namespace processor.  Element type
237*6be67779SAndroid Build Coastguard Worker    names and attribute names that belong to a namespace will be
238*6be67779SAndroid Build Coastguard Worker    expanded; unprefixed attribute names are never expanded; unprefixed
239*6be67779SAndroid Build Coastguard Worker    element type names are expanded only if there is a default
240*6be67779SAndroid Build Coastguard Worker    namespace. The expanded name is the concatenation of the namespace
241*6be67779SAndroid Build Coastguard Worker    URI, the namespace separator character, and the local part of the
242*6be67779SAndroid Build Coastguard Worker    name.  If the namespace separator is '\0' then the namespace URI
243*6be67779SAndroid Build Coastguard Worker    and the local part will be concatenated without any separator.
244*6be67779SAndroid Build Coastguard Worker    It is a programming error to use the separator '\0' with namespace
245*6be67779SAndroid Build Coastguard Worker    triplets (see XML_SetReturnNSTriplet).
246*6be67779SAndroid Build Coastguard Worker    If a namespace separator is chosen that can be part of a URI or
247*6be67779SAndroid Build Coastguard Worker    part of an XML name, splitting an expanded name back into its
248*6be67779SAndroid Build Coastguard Worker    1, 2 or 3 original parts on application level in the element handler
249*6be67779SAndroid Build Coastguard Worker    may end up vulnerable, so these are advised against;  sane choices for
250*6be67779SAndroid Build Coastguard Worker    a namespace separator are e.g. '\n' (line feed) and '|' (pipe).
251*6be67779SAndroid Build Coastguard Worker 
252*6be67779SAndroid Build Coastguard Worker    Note that Expat does not validate namespace URIs (beyond encoding)
253*6be67779SAndroid Build Coastguard Worker    against RFC 3986 today (and is not required to do so with regard to
254*6be67779SAndroid Build Coastguard Worker    the XML 1.0 namespaces specification) but it may start doing that
255*6be67779SAndroid Build Coastguard Worker    in future releases.  Before that, an application using Expat must
256*6be67779SAndroid Build Coastguard Worker    be ready to receive namespace URIs containing non-URI characters.
257*6be67779SAndroid Build Coastguard Worker */
258*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(XML_Parser)
259*6be67779SAndroid Build Coastguard Worker XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator);
260*6be67779SAndroid Build Coastguard Worker 
261*6be67779SAndroid Build Coastguard Worker /* Constructs a new parser using the memory management suite referred to
262*6be67779SAndroid Build Coastguard Worker    by memsuite. If memsuite is NULL, then use the standard library memory
263*6be67779SAndroid Build Coastguard Worker    suite. If namespaceSeparator is non-NULL it creates a parser with
264*6be67779SAndroid Build Coastguard Worker    namespace processing as described above. The character pointed at
265*6be67779SAndroid Build Coastguard Worker    will serve as the namespace separator.
266*6be67779SAndroid Build Coastguard Worker 
267*6be67779SAndroid Build Coastguard Worker    All further memory operations used for the created parser will come from
268*6be67779SAndroid Build Coastguard Worker    the given suite.
269*6be67779SAndroid Build Coastguard Worker */
270*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(XML_Parser)
271*6be67779SAndroid Build Coastguard Worker XML_ParserCreate_MM(const XML_Char *encoding,
272*6be67779SAndroid Build Coastguard Worker                     const XML_Memory_Handling_Suite *memsuite,
273*6be67779SAndroid Build Coastguard Worker                     const XML_Char *namespaceSeparator);
274*6be67779SAndroid Build Coastguard Worker 
275*6be67779SAndroid Build Coastguard Worker /* Prepare a parser object to be reused.  This is particularly
276*6be67779SAndroid Build Coastguard Worker    valuable when memory allocation overhead is disproportionately high,
277*6be67779SAndroid Build Coastguard Worker    such as when a large number of small documnents need to be parsed.
278*6be67779SAndroid Build Coastguard Worker    All handlers are cleared from the parser, except for the
279*6be67779SAndroid Build Coastguard Worker    unknownEncodingHandler. The parser's external state is re-initialized
280*6be67779SAndroid Build Coastguard Worker    except for the values of ns and ns_triplets.
281*6be67779SAndroid Build Coastguard Worker 
282*6be67779SAndroid Build Coastguard Worker    Added in Expat 1.95.3.
283*6be67779SAndroid Build Coastguard Worker */
284*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(XML_Bool)
285*6be67779SAndroid Build Coastguard Worker XML_ParserReset(XML_Parser parser, const XML_Char *encoding);
286*6be67779SAndroid Build Coastguard Worker 
287*6be67779SAndroid Build Coastguard Worker /* atts is array of name/value pairs, terminated by 0;
288*6be67779SAndroid Build Coastguard Worker    names and values are 0 terminated.
289*6be67779SAndroid Build Coastguard Worker */
290*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_StartElementHandler)(void *userData,
291*6be67779SAndroid Build Coastguard Worker                                                const XML_Char *name,
292*6be67779SAndroid Build Coastguard Worker                                                const XML_Char **atts);
293*6be67779SAndroid Build Coastguard Worker 
294*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_EndElementHandler)(void *userData,
295*6be67779SAndroid Build Coastguard Worker                                              const XML_Char *name);
296*6be67779SAndroid Build Coastguard Worker 
297*6be67779SAndroid Build Coastguard Worker /* s is not 0 terminated. */
298*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_CharacterDataHandler)(void *userData,
299*6be67779SAndroid Build Coastguard Worker                                                 const XML_Char *s, int len);
300*6be67779SAndroid Build Coastguard Worker 
301*6be67779SAndroid Build Coastguard Worker /* target and data are 0 terminated */
302*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_ProcessingInstructionHandler)(void *userData,
303*6be67779SAndroid Build Coastguard Worker                                                         const XML_Char *target,
304*6be67779SAndroid Build Coastguard Worker                                                         const XML_Char *data);
305*6be67779SAndroid Build Coastguard Worker 
306*6be67779SAndroid Build Coastguard Worker /* data is 0 terminated */
307*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_CommentHandler)(void *userData, const XML_Char *data);
308*6be67779SAndroid Build Coastguard Worker 
309*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_StartCdataSectionHandler)(void *userData);
310*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_EndCdataSectionHandler)(void *userData);
311*6be67779SAndroid Build Coastguard Worker 
312*6be67779SAndroid Build Coastguard Worker /* This is called for any characters in the XML document for which
313*6be67779SAndroid Build Coastguard Worker    there is no applicable handler.  This includes both characters that
314*6be67779SAndroid Build Coastguard Worker    are part of markup which is of a kind that is not reported
315*6be67779SAndroid Build Coastguard Worker    (comments, markup declarations), or characters that are part of a
316*6be67779SAndroid Build Coastguard Worker    construct which could be reported but for which no handler has been
317*6be67779SAndroid Build Coastguard Worker    supplied. The characters are passed exactly as they were in the XML
318*6be67779SAndroid Build Coastguard Worker    document except that they will be encoded in UTF-8 or UTF-16.
319*6be67779SAndroid Build Coastguard Worker    Line boundaries are not normalized. Note that a byte order mark
320*6be67779SAndroid Build Coastguard Worker    character is not passed to the default handler. There are no
321*6be67779SAndroid Build Coastguard Worker    guarantees about how characters are divided between calls to the
322*6be67779SAndroid Build Coastguard Worker    default handler: for example, a comment might be split between
323*6be67779SAndroid Build Coastguard Worker    multiple calls.
324*6be67779SAndroid Build Coastguard Worker */
325*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_DefaultHandler)(void *userData, const XML_Char *s,
326*6be67779SAndroid Build Coastguard Worker                                           int len);
327*6be67779SAndroid Build Coastguard Worker 
328*6be67779SAndroid Build Coastguard Worker /* This is called for the start of the DOCTYPE declaration, before
329*6be67779SAndroid Build Coastguard Worker    any DTD or internal subset is parsed.
330*6be67779SAndroid Build Coastguard Worker */
331*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_StartDoctypeDeclHandler)(void *userData,
332*6be67779SAndroid Build Coastguard Worker                                                    const XML_Char *doctypeName,
333*6be67779SAndroid Build Coastguard Worker                                                    const XML_Char *sysid,
334*6be67779SAndroid Build Coastguard Worker                                                    const XML_Char *pubid,
335*6be67779SAndroid Build Coastguard Worker                                                    int has_internal_subset);
336*6be67779SAndroid Build Coastguard Worker 
337*6be67779SAndroid Build Coastguard Worker /* This is called for the end of the DOCTYPE declaration when the
338*6be67779SAndroid Build Coastguard Worker    closing > is encountered, but after processing any external
339*6be67779SAndroid Build Coastguard Worker    subset.
340*6be67779SAndroid Build Coastguard Worker */
341*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_EndDoctypeDeclHandler)(void *userData);
342*6be67779SAndroid Build Coastguard Worker 
343*6be67779SAndroid Build Coastguard Worker /* This is called for entity declarations. The is_parameter_entity
344*6be67779SAndroid Build Coastguard Worker    argument will be non-zero if the entity is a parameter entity, zero
345*6be67779SAndroid Build Coastguard Worker    otherwise.
346*6be67779SAndroid Build Coastguard Worker 
347*6be67779SAndroid Build Coastguard Worker    For internal entities (<!ENTITY foo "bar">), value will
348*6be67779SAndroid Build Coastguard Worker    be non-NULL and systemId, publicID, and notationName will be NULL.
349*6be67779SAndroid Build Coastguard Worker    The value string is NOT null-terminated; the length is provided in
350*6be67779SAndroid Build Coastguard Worker    the value_length argument. Since it is legal to have zero-length
351*6be67779SAndroid Build Coastguard Worker    values, do not use this argument to test for internal entities.
352*6be67779SAndroid Build Coastguard Worker 
353*6be67779SAndroid Build Coastguard Worker    For external entities, value will be NULL and systemId will be
354*6be67779SAndroid Build Coastguard Worker    non-NULL. The publicId argument will be NULL unless a public
355*6be67779SAndroid Build Coastguard Worker    identifier was provided. The notationName argument will have a
356*6be67779SAndroid Build Coastguard Worker    non-NULL value only for unparsed entity declarations.
357*6be67779SAndroid Build Coastguard Worker 
358*6be67779SAndroid Build Coastguard Worker    Note that is_parameter_entity can't be changed to XML_Bool, since
359*6be67779SAndroid Build Coastguard Worker    that would break binary compatibility.
360*6be67779SAndroid Build Coastguard Worker */
361*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_EntityDeclHandler)(
362*6be67779SAndroid Build Coastguard Worker     void *userData, const XML_Char *entityName, int is_parameter_entity,
363*6be67779SAndroid Build Coastguard Worker     const XML_Char *value, int value_length, const XML_Char *base,
364*6be67779SAndroid Build Coastguard Worker     const XML_Char *systemId, const XML_Char *publicId,
365*6be67779SAndroid Build Coastguard Worker     const XML_Char *notationName);
366*6be67779SAndroid Build Coastguard Worker 
367*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
368*6be67779SAndroid Build Coastguard Worker XML_SetEntityDeclHandler(XML_Parser parser, XML_EntityDeclHandler handler);
369*6be67779SAndroid Build Coastguard Worker 
370*6be67779SAndroid Build Coastguard Worker /* OBSOLETE -- OBSOLETE -- OBSOLETE
371*6be67779SAndroid Build Coastguard Worker    This handler has been superseded by the EntityDeclHandler above.
372*6be67779SAndroid Build Coastguard Worker    It is provided here for backward compatibility.
373*6be67779SAndroid Build Coastguard Worker 
374*6be67779SAndroid Build Coastguard Worker    This is called for a declaration of an unparsed (NDATA) entity.
375*6be67779SAndroid Build Coastguard Worker    The base argument is whatever was set by XML_SetBase. The
376*6be67779SAndroid Build Coastguard Worker    entityName, systemId and notationName arguments will never be
377*6be67779SAndroid Build Coastguard Worker    NULL. The other arguments may be.
378*6be67779SAndroid Build Coastguard Worker */
379*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_UnparsedEntityDeclHandler)(
380*6be67779SAndroid Build Coastguard Worker     void *userData, const XML_Char *entityName, const XML_Char *base,
381*6be67779SAndroid Build Coastguard Worker     const XML_Char *systemId, const XML_Char *publicId,
382*6be67779SAndroid Build Coastguard Worker     const XML_Char *notationName);
383*6be67779SAndroid Build Coastguard Worker 
384*6be67779SAndroid Build Coastguard Worker /* This is called for a declaration of notation.  The base argument is
385*6be67779SAndroid Build Coastguard Worker    whatever was set by XML_SetBase. The notationName will never be
386*6be67779SAndroid Build Coastguard Worker    NULL.  The other arguments can be.
387*6be67779SAndroid Build Coastguard Worker */
388*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_NotationDeclHandler)(void *userData,
389*6be67779SAndroid Build Coastguard Worker                                                const XML_Char *notationName,
390*6be67779SAndroid Build Coastguard Worker                                                const XML_Char *base,
391*6be67779SAndroid Build Coastguard Worker                                                const XML_Char *systemId,
392*6be67779SAndroid Build Coastguard Worker                                                const XML_Char *publicId);
393*6be67779SAndroid Build Coastguard Worker 
394*6be67779SAndroid Build Coastguard Worker /* When namespace processing is enabled, these are called once for
395*6be67779SAndroid Build Coastguard Worker    each namespace declaration. The call to the start and end element
396*6be67779SAndroid Build Coastguard Worker    handlers occur between the calls to the start and end namespace
397*6be67779SAndroid Build Coastguard Worker    declaration handlers. For an xmlns attribute, prefix will be
398*6be67779SAndroid Build Coastguard Worker    NULL.  For an xmlns="" attribute, uri will be NULL.
399*6be67779SAndroid Build Coastguard Worker */
400*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_StartNamespaceDeclHandler)(void *userData,
401*6be67779SAndroid Build Coastguard Worker                                                      const XML_Char *prefix,
402*6be67779SAndroid Build Coastguard Worker                                                      const XML_Char *uri);
403*6be67779SAndroid Build Coastguard Worker 
404*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_EndNamespaceDeclHandler)(void *userData,
405*6be67779SAndroid Build Coastguard Worker                                                    const XML_Char *prefix);
406*6be67779SAndroid Build Coastguard Worker 
407*6be67779SAndroid Build Coastguard Worker /* This is called if the document is not standalone, that is, it has an
408*6be67779SAndroid Build Coastguard Worker    external subset or a reference to a parameter entity, but does not
409*6be67779SAndroid Build Coastguard Worker    have standalone="yes". If this handler returns XML_STATUS_ERROR,
410*6be67779SAndroid Build Coastguard Worker    then processing will not continue, and the parser will return a
411*6be67779SAndroid Build Coastguard Worker    XML_ERROR_NOT_STANDALONE error.
412*6be67779SAndroid Build Coastguard Worker    If parameter entity parsing is enabled, then in addition to the
413*6be67779SAndroid Build Coastguard Worker    conditions above this handler will only be called if the referenced
414*6be67779SAndroid Build Coastguard Worker    entity was actually read.
415*6be67779SAndroid Build Coastguard Worker */
416*6be67779SAndroid Build Coastguard Worker typedef int(XMLCALL *XML_NotStandaloneHandler)(void *userData);
417*6be67779SAndroid Build Coastguard Worker 
418*6be67779SAndroid Build Coastguard Worker /* This is called for a reference to an external parsed general
419*6be67779SAndroid Build Coastguard Worker    entity.  The referenced entity is not automatically parsed.  The
420*6be67779SAndroid Build Coastguard Worker    application can parse it immediately or later using
421*6be67779SAndroid Build Coastguard Worker    XML_ExternalEntityParserCreate.
422*6be67779SAndroid Build Coastguard Worker 
423*6be67779SAndroid Build Coastguard Worker    The parser argument is the parser parsing the entity containing the
424*6be67779SAndroid Build Coastguard Worker    reference; it can be passed as the parser argument to
425*6be67779SAndroid Build Coastguard Worker    XML_ExternalEntityParserCreate.  The systemId argument is the
426*6be67779SAndroid Build Coastguard Worker    system identifier as specified in the entity declaration; it will
427*6be67779SAndroid Build Coastguard Worker    not be NULL.
428*6be67779SAndroid Build Coastguard Worker 
429*6be67779SAndroid Build Coastguard Worker    The base argument is the system identifier that should be used as
430*6be67779SAndroid Build Coastguard Worker    the base for resolving systemId if systemId was relative; this is
431*6be67779SAndroid Build Coastguard Worker    set by XML_SetBase; it may be NULL.
432*6be67779SAndroid Build Coastguard Worker 
433*6be67779SAndroid Build Coastguard Worker    The publicId argument is the public identifier as specified in the
434*6be67779SAndroid Build Coastguard Worker    entity declaration, or NULL if none was specified; the whitespace
435*6be67779SAndroid Build Coastguard Worker    in the public identifier will have been normalized as required by
436*6be67779SAndroid Build Coastguard Worker    the XML spec.
437*6be67779SAndroid Build Coastguard Worker 
438*6be67779SAndroid Build Coastguard Worker    The context argument specifies the parsing context in the format
439*6be67779SAndroid Build Coastguard Worker    expected by the context argument to XML_ExternalEntityParserCreate;
440*6be67779SAndroid Build Coastguard Worker    context is valid only until the handler returns, so if the
441*6be67779SAndroid Build Coastguard Worker    referenced entity is to be parsed later, it must be copied.
442*6be67779SAndroid Build Coastguard Worker    context is NULL only when the entity is a parameter entity.
443*6be67779SAndroid Build Coastguard Worker 
444*6be67779SAndroid Build Coastguard Worker    The handler should return XML_STATUS_ERROR if processing should not
445*6be67779SAndroid Build Coastguard Worker    continue because of a fatal error in the handling of the external
446*6be67779SAndroid Build Coastguard Worker    entity.  In this case the calling parser will return an
447*6be67779SAndroid Build Coastguard Worker    XML_ERROR_EXTERNAL_ENTITY_HANDLING error.
448*6be67779SAndroid Build Coastguard Worker 
449*6be67779SAndroid Build Coastguard Worker    Note that unlike other handlers the first argument is the parser,
450*6be67779SAndroid Build Coastguard Worker    not userData.
451*6be67779SAndroid Build Coastguard Worker */
452*6be67779SAndroid Build Coastguard Worker typedef int(XMLCALL *XML_ExternalEntityRefHandler)(XML_Parser parser,
453*6be67779SAndroid Build Coastguard Worker                                                    const XML_Char *context,
454*6be67779SAndroid Build Coastguard Worker                                                    const XML_Char *base,
455*6be67779SAndroid Build Coastguard Worker                                                    const XML_Char *systemId,
456*6be67779SAndroid Build Coastguard Worker                                                    const XML_Char *publicId);
457*6be67779SAndroid Build Coastguard Worker 
458*6be67779SAndroid Build Coastguard Worker /* This is called in two situations:
459*6be67779SAndroid Build Coastguard Worker    1) An entity reference is encountered for which no declaration
460*6be67779SAndroid Build Coastguard Worker       has been read *and* this is not an error.
461*6be67779SAndroid Build Coastguard Worker    2) An internal entity reference is read, but not expanded, because
462*6be67779SAndroid Build Coastguard Worker       XML_SetDefaultHandler has been called.
463*6be67779SAndroid Build Coastguard Worker    Note: skipped parameter entities in declarations and skipped general
464*6be67779SAndroid Build Coastguard Worker          entities in attribute values cannot be reported, because
465*6be67779SAndroid Build Coastguard Worker          the event would be out of sync with the reporting of the
466*6be67779SAndroid Build Coastguard Worker          declarations or attribute values
467*6be67779SAndroid Build Coastguard Worker */
468*6be67779SAndroid Build Coastguard Worker typedef void(XMLCALL *XML_SkippedEntityHandler)(void *userData,
469*6be67779SAndroid Build Coastguard Worker                                                 const XML_Char *entityName,
470*6be67779SAndroid Build Coastguard Worker                                                 int is_parameter_entity);
471*6be67779SAndroid Build Coastguard Worker 
472*6be67779SAndroid Build Coastguard Worker /* This structure is filled in by the XML_UnknownEncodingHandler to
473*6be67779SAndroid Build Coastguard Worker    provide information to the parser about encodings that are unknown
474*6be67779SAndroid Build Coastguard Worker    to the parser.
475*6be67779SAndroid Build Coastguard Worker 
476*6be67779SAndroid Build Coastguard Worker    The map[b] member gives information about byte sequences whose
477*6be67779SAndroid Build Coastguard Worker    first byte is b.
478*6be67779SAndroid Build Coastguard Worker 
479*6be67779SAndroid Build Coastguard Worker    If map[b] is c where c is >= 0, then b by itself encodes the
480*6be67779SAndroid Build Coastguard Worker    Unicode scalar value c.
481*6be67779SAndroid Build Coastguard Worker 
482*6be67779SAndroid Build Coastguard Worker    If map[b] is -1, then the byte sequence is malformed.
483*6be67779SAndroid Build Coastguard Worker 
484*6be67779SAndroid Build Coastguard Worker    If map[b] is -n, where n >= 2, then b is the first byte of an
485*6be67779SAndroid Build Coastguard Worker    n-byte sequence that encodes a single Unicode scalar value.
486*6be67779SAndroid Build Coastguard Worker 
487*6be67779SAndroid Build Coastguard Worker    The data member will be passed as the first argument to the convert
488*6be67779SAndroid Build Coastguard Worker    function.
489*6be67779SAndroid Build Coastguard Worker 
490*6be67779SAndroid Build Coastguard Worker    The convert function is used to convert multibyte sequences; s will
491*6be67779SAndroid Build Coastguard Worker    point to a n-byte sequence where map[(unsigned char)*s] == -n.  The
492*6be67779SAndroid Build Coastguard Worker    convert function must return the Unicode scalar value represented
493*6be67779SAndroid Build Coastguard Worker    by this byte sequence or -1 if the byte sequence is malformed.
494*6be67779SAndroid Build Coastguard Worker 
495*6be67779SAndroid Build Coastguard Worker    The convert function may be NULL if the encoding is a single-byte
496*6be67779SAndroid Build Coastguard Worker    encoding, that is if map[b] >= -1 for all bytes b.
497*6be67779SAndroid Build Coastguard Worker 
498*6be67779SAndroid Build Coastguard Worker    When the parser is finished with the encoding, then if release is
499*6be67779SAndroid Build Coastguard Worker    not NULL, it will call release passing it the data member; once
500*6be67779SAndroid Build Coastguard Worker    release has been called, the convert function will not be called
501*6be67779SAndroid Build Coastguard Worker    again.
502*6be67779SAndroid Build Coastguard Worker 
503*6be67779SAndroid Build Coastguard Worker    Expat places certain restrictions on the encodings that are supported
504*6be67779SAndroid Build Coastguard Worker    using this mechanism.
505*6be67779SAndroid Build Coastguard Worker 
506*6be67779SAndroid Build Coastguard Worker    1. Every ASCII character that can appear in a well-formed XML document,
507*6be67779SAndroid Build Coastguard Worker       other than the characters
508*6be67779SAndroid Build Coastguard Worker 
509*6be67779SAndroid Build Coastguard Worker       $@\^`{}~
510*6be67779SAndroid Build Coastguard Worker 
511*6be67779SAndroid Build Coastguard Worker       must be represented by a single byte, and that byte must be the
512*6be67779SAndroid Build Coastguard Worker       same byte that represents that character in ASCII.
513*6be67779SAndroid Build Coastguard Worker 
514*6be67779SAndroid Build Coastguard Worker    2. No character may require more than 4 bytes to encode.
515*6be67779SAndroid Build Coastguard Worker 
516*6be67779SAndroid Build Coastguard Worker    3. All characters encoded must have Unicode scalar values <=
517*6be67779SAndroid Build Coastguard Worker       0xFFFF, (i.e., characters that would be encoded by surrogates in
518*6be67779SAndroid Build Coastguard Worker       UTF-16 are  not allowed).  Note that this restriction doesn't
519*6be67779SAndroid Build Coastguard Worker       apply to the built-in support for UTF-8 and UTF-16.
520*6be67779SAndroid Build Coastguard Worker 
521*6be67779SAndroid Build Coastguard Worker    4. No Unicode character may be encoded by more than one distinct
522*6be67779SAndroid Build Coastguard Worker       sequence of bytes.
523*6be67779SAndroid Build Coastguard Worker */
524*6be67779SAndroid Build Coastguard Worker typedef struct {
525*6be67779SAndroid Build Coastguard Worker   int map[256];
526*6be67779SAndroid Build Coastguard Worker   void *data;
527*6be67779SAndroid Build Coastguard Worker   int(XMLCALL *convert)(void *data, const char *s);
528*6be67779SAndroid Build Coastguard Worker   void(XMLCALL *release)(void *data);
529*6be67779SAndroid Build Coastguard Worker } XML_Encoding;
530*6be67779SAndroid Build Coastguard Worker 
531*6be67779SAndroid Build Coastguard Worker /* This is called for an encoding that is unknown to the parser.
532*6be67779SAndroid Build Coastguard Worker 
533*6be67779SAndroid Build Coastguard Worker    The encodingHandlerData argument is that which was passed as the
534*6be67779SAndroid Build Coastguard Worker    second argument to XML_SetUnknownEncodingHandler.
535*6be67779SAndroid Build Coastguard Worker 
536*6be67779SAndroid Build Coastguard Worker    The name argument gives the name of the encoding as specified in
537*6be67779SAndroid Build Coastguard Worker    the encoding declaration.
538*6be67779SAndroid Build Coastguard Worker 
539*6be67779SAndroid Build Coastguard Worker    If the callback can provide information about the encoding, it must
540*6be67779SAndroid Build Coastguard Worker    fill in the XML_Encoding structure, and return XML_STATUS_OK.
541*6be67779SAndroid Build Coastguard Worker    Otherwise it must return XML_STATUS_ERROR.
542*6be67779SAndroid Build Coastguard Worker 
543*6be67779SAndroid Build Coastguard Worker    If info does not describe a suitable encoding, then the parser will
544*6be67779SAndroid Build Coastguard Worker    return an XML_ERROR_UNKNOWN_ENCODING error.
545*6be67779SAndroid Build Coastguard Worker */
546*6be67779SAndroid Build Coastguard Worker typedef int(XMLCALL *XML_UnknownEncodingHandler)(void *encodingHandlerData,
547*6be67779SAndroid Build Coastguard Worker                                                  const XML_Char *name,
548*6be67779SAndroid Build Coastguard Worker                                                  XML_Encoding *info);
549*6be67779SAndroid Build Coastguard Worker 
550*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
551*6be67779SAndroid Build Coastguard Worker XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start,
552*6be67779SAndroid Build Coastguard Worker                       XML_EndElementHandler end);
553*6be67779SAndroid Build Coastguard Worker 
554*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
555*6be67779SAndroid Build Coastguard Worker XML_SetStartElementHandler(XML_Parser parser, XML_StartElementHandler handler);
556*6be67779SAndroid Build Coastguard Worker 
557*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
558*6be67779SAndroid Build Coastguard Worker XML_SetEndElementHandler(XML_Parser parser, XML_EndElementHandler handler);
559*6be67779SAndroid Build Coastguard Worker 
560*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
561*6be67779SAndroid Build Coastguard Worker XML_SetCharacterDataHandler(XML_Parser parser,
562*6be67779SAndroid Build Coastguard Worker                             XML_CharacterDataHandler handler);
563*6be67779SAndroid Build Coastguard Worker 
564*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
565*6be67779SAndroid Build Coastguard Worker XML_SetProcessingInstructionHandler(XML_Parser parser,
566*6be67779SAndroid Build Coastguard Worker                                     XML_ProcessingInstructionHandler handler);
567*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
568*6be67779SAndroid Build Coastguard Worker XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler handler);
569*6be67779SAndroid Build Coastguard Worker 
570*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
571*6be67779SAndroid Build Coastguard Worker XML_SetCdataSectionHandler(XML_Parser parser,
572*6be67779SAndroid Build Coastguard Worker                            XML_StartCdataSectionHandler start,
573*6be67779SAndroid Build Coastguard Worker                            XML_EndCdataSectionHandler end);
574*6be67779SAndroid Build Coastguard Worker 
575*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
576*6be67779SAndroid Build Coastguard Worker XML_SetStartCdataSectionHandler(XML_Parser parser,
577*6be67779SAndroid Build Coastguard Worker                                 XML_StartCdataSectionHandler start);
578*6be67779SAndroid Build Coastguard Worker 
579*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
580*6be67779SAndroid Build Coastguard Worker XML_SetEndCdataSectionHandler(XML_Parser parser,
581*6be67779SAndroid Build Coastguard Worker                               XML_EndCdataSectionHandler end);
582*6be67779SAndroid Build Coastguard Worker 
583*6be67779SAndroid Build Coastguard Worker /* This sets the default handler and also inhibits expansion of
584*6be67779SAndroid Build Coastguard Worker    internal entities. These entity references will be passed to the
585*6be67779SAndroid Build Coastguard Worker    default handler, or to the skipped entity handler, if one is set.
586*6be67779SAndroid Build Coastguard Worker */
587*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
588*6be67779SAndroid Build Coastguard Worker XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler handler);
589*6be67779SAndroid Build Coastguard Worker 
590*6be67779SAndroid Build Coastguard Worker /* This sets the default handler but does not inhibit expansion of
591*6be67779SAndroid Build Coastguard Worker    internal entities.  The entity reference will not be passed to the
592*6be67779SAndroid Build Coastguard Worker    default handler.
593*6be67779SAndroid Build Coastguard Worker */
594*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
595*6be67779SAndroid Build Coastguard Worker XML_SetDefaultHandlerExpand(XML_Parser parser, XML_DefaultHandler handler);
596*6be67779SAndroid Build Coastguard Worker 
597*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
598*6be67779SAndroid Build Coastguard Worker XML_SetDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start,
599*6be67779SAndroid Build Coastguard Worker                           XML_EndDoctypeDeclHandler end);
600*6be67779SAndroid Build Coastguard Worker 
601*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
602*6be67779SAndroid Build Coastguard Worker XML_SetStartDoctypeDeclHandler(XML_Parser parser,
603*6be67779SAndroid Build Coastguard Worker                                XML_StartDoctypeDeclHandler start);
604*6be67779SAndroid Build Coastguard Worker 
605*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
606*6be67779SAndroid Build Coastguard Worker XML_SetEndDoctypeDeclHandler(XML_Parser parser, XML_EndDoctypeDeclHandler end);
607*6be67779SAndroid Build Coastguard Worker 
608*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
609*6be67779SAndroid Build Coastguard Worker XML_SetUnparsedEntityDeclHandler(XML_Parser parser,
610*6be67779SAndroid Build Coastguard Worker                                  XML_UnparsedEntityDeclHandler handler);
611*6be67779SAndroid Build Coastguard Worker 
612*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
613*6be67779SAndroid Build Coastguard Worker XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler handler);
614*6be67779SAndroid Build Coastguard Worker 
615*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
616*6be67779SAndroid Build Coastguard Worker XML_SetNamespaceDeclHandler(XML_Parser parser,
617*6be67779SAndroid Build Coastguard Worker                             XML_StartNamespaceDeclHandler start,
618*6be67779SAndroid Build Coastguard Worker                             XML_EndNamespaceDeclHandler end);
619*6be67779SAndroid Build Coastguard Worker 
620*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
621*6be67779SAndroid Build Coastguard Worker XML_SetStartNamespaceDeclHandler(XML_Parser parser,
622*6be67779SAndroid Build Coastguard Worker                                  XML_StartNamespaceDeclHandler start);
623*6be67779SAndroid Build Coastguard Worker 
624*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
625*6be67779SAndroid Build Coastguard Worker XML_SetEndNamespaceDeclHandler(XML_Parser parser,
626*6be67779SAndroid Build Coastguard Worker                                XML_EndNamespaceDeclHandler end);
627*6be67779SAndroid Build Coastguard Worker 
628*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
629*6be67779SAndroid Build Coastguard Worker XML_SetNotStandaloneHandler(XML_Parser parser,
630*6be67779SAndroid Build Coastguard Worker                             XML_NotStandaloneHandler handler);
631*6be67779SAndroid Build Coastguard Worker 
632*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
633*6be67779SAndroid Build Coastguard Worker XML_SetExternalEntityRefHandler(XML_Parser parser,
634*6be67779SAndroid Build Coastguard Worker                                 XML_ExternalEntityRefHandler handler);
635*6be67779SAndroid Build Coastguard Worker 
636*6be67779SAndroid Build Coastguard Worker /* If a non-NULL value for arg is specified here, then it will be
637*6be67779SAndroid Build Coastguard Worker    passed as the first argument to the external entity ref handler
638*6be67779SAndroid Build Coastguard Worker    instead of the parser object.
639*6be67779SAndroid Build Coastguard Worker */
640*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
641*6be67779SAndroid Build Coastguard Worker XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg);
642*6be67779SAndroid Build Coastguard Worker 
643*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
644*6be67779SAndroid Build Coastguard Worker XML_SetSkippedEntityHandler(XML_Parser parser,
645*6be67779SAndroid Build Coastguard Worker                             XML_SkippedEntityHandler handler);
646*6be67779SAndroid Build Coastguard Worker 
647*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
648*6be67779SAndroid Build Coastguard Worker XML_SetUnknownEncodingHandler(XML_Parser parser,
649*6be67779SAndroid Build Coastguard Worker                               XML_UnknownEncodingHandler handler,
650*6be67779SAndroid Build Coastguard Worker                               void *encodingHandlerData);
651*6be67779SAndroid Build Coastguard Worker 
652*6be67779SAndroid Build Coastguard Worker /* This can be called within a handler for a start element, end
653*6be67779SAndroid Build Coastguard Worker    element, processing instruction or character data.  It causes the
654*6be67779SAndroid Build Coastguard Worker    corresponding markup to be passed to the default handler.
655*6be67779SAndroid Build Coastguard Worker */
656*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
657*6be67779SAndroid Build Coastguard Worker XML_DefaultCurrent(XML_Parser parser);
658*6be67779SAndroid Build Coastguard Worker 
659*6be67779SAndroid Build Coastguard Worker /* If do_nst is non-zero, and namespace processing is in effect, and
660*6be67779SAndroid Build Coastguard Worker    a name has a prefix (i.e. an explicit namespace qualifier) then
661*6be67779SAndroid Build Coastguard Worker    that name is returned as a triplet in a single string separated by
662*6be67779SAndroid Build Coastguard Worker    the separator character specified when the parser was created: URI
663*6be67779SAndroid Build Coastguard Worker    + sep + local_name + sep + prefix.
664*6be67779SAndroid Build Coastguard Worker 
665*6be67779SAndroid Build Coastguard Worker    If do_nst is zero, then namespace information is returned in the
666*6be67779SAndroid Build Coastguard Worker    default manner (URI + sep + local_name) whether or not the name
667*6be67779SAndroid Build Coastguard Worker    has a prefix.
668*6be67779SAndroid Build Coastguard Worker 
669*6be67779SAndroid Build Coastguard Worker    Note: Calling XML_SetReturnNSTriplet after XML_Parse or
670*6be67779SAndroid Build Coastguard Worker      XML_ParseBuffer has no effect.
671*6be67779SAndroid Build Coastguard Worker */
672*6be67779SAndroid Build Coastguard Worker 
673*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
674*6be67779SAndroid Build Coastguard Worker XML_SetReturnNSTriplet(XML_Parser parser, int do_nst);
675*6be67779SAndroid Build Coastguard Worker 
676*6be67779SAndroid Build Coastguard Worker /* This value is passed as the userData argument to callbacks. */
677*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
678*6be67779SAndroid Build Coastguard Worker XML_SetUserData(XML_Parser parser, void *userData);
679*6be67779SAndroid Build Coastguard Worker 
680*6be67779SAndroid Build Coastguard Worker /* Returns the last value set by XML_SetUserData or NULL. */
681*6be67779SAndroid Build Coastguard Worker #define XML_GetUserData(parser) (*(void **)(parser))
682*6be67779SAndroid Build Coastguard Worker 
683*6be67779SAndroid Build Coastguard Worker /* This is equivalent to supplying an encoding argument to
684*6be67779SAndroid Build Coastguard Worker    XML_ParserCreate. On success XML_SetEncoding returns non-zero,
685*6be67779SAndroid Build Coastguard Worker    zero otherwise.
686*6be67779SAndroid Build Coastguard Worker    Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer
687*6be67779SAndroid Build Coastguard Worker      has no effect and returns XML_STATUS_ERROR.
688*6be67779SAndroid Build Coastguard Worker */
689*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(enum XML_Status)
690*6be67779SAndroid Build Coastguard Worker XML_SetEncoding(XML_Parser parser, const XML_Char *encoding);
691*6be67779SAndroid Build Coastguard Worker 
692*6be67779SAndroid Build Coastguard Worker /* If this function is called, then the parser will be passed as the
693*6be67779SAndroid Build Coastguard Worker    first argument to callbacks instead of userData.  The userData will
694*6be67779SAndroid Build Coastguard Worker    still be accessible using XML_GetUserData.
695*6be67779SAndroid Build Coastguard Worker */
696*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
697*6be67779SAndroid Build Coastguard Worker XML_UseParserAsHandlerArg(XML_Parser parser);
698*6be67779SAndroid Build Coastguard Worker 
699*6be67779SAndroid Build Coastguard Worker /* If useDTD == XML_TRUE is passed to this function, then the parser
700*6be67779SAndroid Build Coastguard Worker    will assume that there is an external subset, even if none is
701*6be67779SAndroid Build Coastguard Worker    specified in the document. In such a case the parser will call the
702*6be67779SAndroid Build Coastguard Worker    externalEntityRefHandler with a value of NULL for the systemId
703*6be67779SAndroid Build Coastguard Worker    argument (the publicId and context arguments will be NULL as well).
704*6be67779SAndroid Build Coastguard Worker    Note: For the purpose of checking WFC: Entity Declared, passing
705*6be67779SAndroid Build Coastguard Worker      useDTD == XML_TRUE will make the parser behave as if the document
706*6be67779SAndroid Build Coastguard Worker      had a DTD with an external subset.
707*6be67779SAndroid Build Coastguard Worker    Note: If this function is called, then this must be done before
708*6be67779SAndroid Build Coastguard Worker      the first call to XML_Parse or XML_ParseBuffer, since it will
709*6be67779SAndroid Build Coastguard Worker      have no effect after that.  Returns
710*6be67779SAndroid Build Coastguard Worker      XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING.
711*6be67779SAndroid Build Coastguard Worker    Note: If the document does not have a DOCTYPE declaration at all,
712*6be67779SAndroid Build Coastguard Worker      then startDoctypeDeclHandler and endDoctypeDeclHandler will not
713*6be67779SAndroid Build Coastguard Worker      be called, despite an external subset being parsed.
714*6be67779SAndroid Build Coastguard Worker    Note: If XML_DTD is not defined when Expat is compiled, returns
715*6be67779SAndroid Build Coastguard Worker      XML_ERROR_FEATURE_REQUIRES_XML_DTD.
716*6be67779SAndroid Build Coastguard Worker    Note: If parser == NULL, returns XML_ERROR_INVALID_ARGUMENT.
717*6be67779SAndroid Build Coastguard Worker */
718*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(enum XML_Error)
719*6be67779SAndroid Build Coastguard Worker XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD);
720*6be67779SAndroid Build Coastguard Worker 
721*6be67779SAndroid Build Coastguard Worker /* Sets the base to be used for resolving relative URIs in system
722*6be67779SAndroid Build Coastguard Worker    identifiers in declarations.  Resolving relative identifiers is
723*6be67779SAndroid Build Coastguard Worker    left to the application: this value will be passed through as the
724*6be67779SAndroid Build Coastguard Worker    base argument to the XML_ExternalEntityRefHandler,
725*6be67779SAndroid Build Coastguard Worker    XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base
726*6be67779SAndroid Build Coastguard Worker    argument will be copied.  Returns XML_STATUS_ERROR if out of memory,
727*6be67779SAndroid Build Coastguard Worker    XML_STATUS_OK otherwise.
728*6be67779SAndroid Build Coastguard Worker */
729*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(enum XML_Status)
730*6be67779SAndroid Build Coastguard Worker XML_SetBase(XML_Parser parser, const XML_Char *base);
731*6be67779SAndroid Build Coastguard Worker 
732*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(const XML_Char *)
733*6be67779SAndroid Build Coastguard Worker XML_GetBase(XML_Parser parser);
734*6be67779SAndroid Build Coastguard Worker 
735*6be67779SAndroid Build Coastguard Worker /* Returns the number of the attribute/value pairs passed in last call
736*6be67779SAndroid Build Coastguard Worker    to the XML_StartElementHandler that were specified in the start-tag
737*6be67779SAndroid Build Coastguard Worker    rather than defaulted. Each attribute/value pair counts as 2; thus
738*6be67779SAndroid Build Coastguard Worker    this corresponds to an index into the atts array passed to the
739*6be67779SAndroid Build Coastguard Worker    XML_StartElementHandler.  Returns -1 if parser == NULL.
740*6be67779SAndroid Build Coastguard Worker */
741*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(int)
742*6be67779SAndroid Build Coastguard Worker XML_GetSpecifiedAttributeCount(XML_Parser parser);
743*6be67779SAndroid Build Coastguard Worker 
744*6be67779SAndroid Build Coastguard Worker /* Returns the index of the ID attribute passed in the last call to
745*6be67779SAndroid Build Coastguard Worker    XML_StartElementHandler, or -1 if there is no ID attribute or
746*6be67779SAndroid Build Coastguard Worker    parser == NULL.  Each attribute/value pair counts as 2; thus this
747*6be67779SAndroid Build Coastguard Worker    corresponds to an index into the atts array passed to the
748*6be67779SAndroid Build Coastguard Worker    XML_StartElementHandler.
749*6be67779SAndroid Build Coastguard Worker */
750*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(int)
751*6be67779SAndroid Build Coastguard Worker XML_GetIdAttributeIndex(XML_Parser parser);
752*6be67779SAndroid Build Coastguard Worker 
753*6be67779SAndroid Build Coastguard Worker #ifdef XML_ATTR_INFO
754*6be67779SAndroid Build Coastguard Worker /* Source file byte offsets for the start and end of attribute names and values.
755*6be67779SAndroid Build Coastguard Worker    The value indices are exclusive of surrounding quotes; thus in a UTF-8 source
756*6be67779SAndroid Build Coastguard Worker    file an attribute value of "blah" will yield:
757*6be67779SAndroid Build Coastguard Worker    info->valueEnd - info->valueStart = 4 bytes.
758*6be67779SAndroid Build Coastguard Worker */
759*6be67779SAndroid Build Coastguard Worker typedef struct {
760*6be67779SAndroid Build Coastguard Worker   XML_Index nameStart;  /* Offset to beginning of the attribute name. */
761*6be67779SAndroid Build Coastguard Worker   XML_Index nameEnd;    /* Offset after the attribute name's last byte. */
762*6be67779SAndroid Build Coastguard Worker   XML_Index valueStart; /* Offset to beginning of the attribute value. */
763*6be67779SAndroid Build Coastguard Worker   XML_Index valueEnd;   /* Offset after the attribute value's last byte. */
764*6be67779SAndroid Build Coastguard Worker } XML_AttrInfo;
765*6be67779SAndroid Build Coastguard Worker 
766*6be67779SAndroid Build Coastguard Worker /* Returns an array of XML_AttrInfo structures for the attribute/value pairs
767*6be67779SAndroid Build Coastguard Worker    passed in last call to the XML_StartElementHandler that were specified
768*6be67779SAndroid Build Coastguard Worker    in the start-tag rather than defaulted. Each attribute/value pair counts
769*6be67779SAndroid Build Coastguard Worker    as 1; thus the number of entries in the array is
770*6be67779SAndroid Build Coastguard Worker    XML_GetSpecifiedAttributeCount(parser) / 2.
771*6be67779SAndroid Build Coastguard Worker */
772*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(const XML_AttrInfo *)
773*6be67779SAndroid Build Coastguard Worker XML_GetAttributeInfo(XML_Parser parser);
774*6be67779SAndroid Build Coastguard Worker #endif
775*6be67779SAndroid Build Coastguard Worker 
776*6be67779SAndroid Build Coastguard Worker /* Parses some input. Returns XML_STATUS_ERROR if a fatal error is
777*6be67779SAndroid Build Coastguard Worker    detected.  The last call to XML_Parse must have isFinal true; len
778*6be67779SAndroid Build Coastguard Worker    may be zero for this call (or any other).
779*6be67779SAndroid Build Coastguard Worker 
780*6be67779SAndroid Build Coastguard Worker    Though the return values for these functions has always been
781*6be67779SAndroid Build Coastguard Worker    described as a Boolean value, the implementation, at least for the
782*6be67779SAndroid Build Coastguard Worker    1.95.x series, has always returned exactly one of the XML_Status
783*6be67779SAndroid Build Coastguard Worker    values.
784*6be67779SAndroid Build Coastguard Worker */
785*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(enum XML_Status)
786*6be67779SAndroid Build Coastguard Worker XML_Parse(XML_Parser parser, const char *s, int len, int isFinal);
787*6be67779SAndroid Build Coastguard Worker 
788*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void *)
789*6be67779SAndroid Build Coastguard Worker XML_GetBuffer(XML_Parser parser, int len);
790*6be67779SAndroid Build Coastguard Worker 
791*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(enum XML_Status)
792*6be67779SAndroid Build Coastguard Worker XML_ParseBuffer(XML_Parser parser, int len, int isFinal);
793*6be67779SAndroid Build Coastguard Worker 
794*6be67779SAndroid Build Coastguard Worker /* Stops parsing, causing XML_Parse() or XML_ParseBuffer() to return.
795*6be67779SAndroid Build Coastguard Worker    Must be called from within a call-back handler, except when aborting
796*6be67779SAndroid Build Coastguard Worker    (resumable = 0) an already suspended parser. Some call-backs may
797*6be67779SAndroid Build Coastguard Worker    still follow because they would otherwise get lost. Examples:
798*6be67779SAndroid Build Coastguard Worker    - endElementHandler() for empty elements when stopped in
799*6be67779SAndroid Build Coastguard Worker      startElementHandler(),
800*6be67779SAndroid Build Coastguard Worker    - endNameSpaceDeclHandler() when stopped in endElementHandler(),
801*6be67779SAndroid Build Coastguard Worker    and possibly others.
802*6be67779SAndroid Build Coastguard Worker 
803*6be67779SAndroid Build Coastguard Worker    Can be called from most handlers, including DTD related call-backs,
804*6be67779SAndroid Build Coastguard Worker    except when parsing an external parameter entity and resumable != 0.
805*6be67779SAndroid Build Coastguard Worker    Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise.
806*6be67779SAndroid Build Coastguard Worker    Possible error codes:
807*6be67779SAndroid Build Coastguard Worker    - XML_ERROR_SUSPENDED: when suspending an already suspended parser.
808*6be67779SAndroid Build Coastguard Worker    - XML_ERROR_FINISHED: when the parser has already finished.
809*6be67779SAndroid Build Coastguard Worker    - XML_ERROR_SUSPEND_PE: when suspending while parsing an external PE.
810*6be67779SAndroid Build Coastguard Worker 
811*6be67779SAndroid Build Coastguard Worker    When resumable != 0 (true) then parsing is suspended, that is,
812*6be67779SAndroid Build Coastguard Worker    XML_Parse() and XML_ParseBuffer() return XML_STATUS_SUSPENDED.
813*6be67779SAndroid Build Coastguard Worker    Otherwise, parsing is aborted, that is, XML_Parse() and XML_ParseBuffer()
814*6be67779SAndroid Build Coastguard Worker    return XML_STATUS_ERROR with error code XML_ERROR_ABORTED.
815*6be67779SAndroid Build Coastguard Worker 
816*6be67779SAndroid Build Coastguard Worker    *Note*:
817*6be67779SAndroid Build Coastguard Worker    This will be applied to the current parser instance only, that is, if
818*6be67779SAndroid Build Coastguard Worker    there is a parent parser then it will continue parsing when the
819*6be67779SAndroid Build Coastguard Worker    externalEntityRefHandler() returns. It is up to the implementation of
820*6be67779SAndroid Build Coastguard Worker    the externalEntityRefHandler() to call XML_StopParser() on the parent
821*6be67779SAndroid Build Coastguard Worker    parser (recursively), if one wants to stop parsing altogether.
822*6be67779SAndroid Build Coastguard Worker 
823*6be67779SAndroid Build Coastguard Worker    When suspended, parsing can be resumed by calling XML_ResumeParser().
824*6be67779SAndroid Build Coastguard Worker */
825*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(enum XML_Status)
826*6be67779SAndroid Build Coastguard Worker XML_StopParser(XML_Parser parser, XML_Bool resumable);
827*6be67779SAndroid Build Coastguard Worker 
828*6be67779SAndroid Build Coastguard Worker /* Resumes parsing after it has been suspended with XML_StopParser().
829*6be67779SAndroid Build Coastguard Worker    Must not be called from within a handler call-back. Returns same
830*6be67779SAndroid Build Coastguard Worker    status codes as XML_Parse() or XML_ParseBuffer().
831*6be67779SAndroid Build Coastguard Worker    Additional error code XML_ERROR_NOT_SUSPENDED possible.
832*6be67779SAndroid Build Coastguard Worker 
833*6be67779SAndroid Build Coastguard Worker    *Note*:
834*6be67779SAndroid Build Coastguard Worker    This must be called on the most deeply nested child parser instance
835*6be67779SAndroid Build Coastguard Worker    first, and on its parent parser only after the child parser has finished,
836*6be67779SAndroid Build Coastguard Worker    to be applied recursively until the document entity's parser is restarted.
837*6be67779SAndroid Build Coastguard Worker    That is, the parent parser will not resume by itself and it is up to the
838*6be67779SAndroid Build Coastguard Worker    application to call XML_ResumeParser() on it at the appropriate moment.
839*6be67779SAndroid Build Coastguard Worker */
840*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(enum XML_Status)
841*6be67779SAndroid Build Coastguard Worker XML_ResumeParser(XML_Parser parser);
842*6be67779SAndroid Build Coastguard Worker 
843*6be67779SAndroid Build Coastguard Worker enum XML_Parsing { XML_INITIALIZED, XML_PARSING, XML_FINISHED, XML_SUSPENDED };
844*6be67779SAndroid Build Coastguard Worker 
845*6be67779SAndroid Build Coastguard Worker typedef struct {
846*6be67779SAndroid Build Coastguard Worker   enum XML_Parsing parsing;
847*6be67779SAndroid Build Coastguard Worker   XML_Bool finalBuffer;
848*6be67779SAndroid Build Coastguard Worker } XML_ParsingStatus;
849*6be67779SAndroid Build Coastguard Worker 
850*6be67779SAndroid Build Coastguard Worker /* Returns status of parser with respect to being initialized, parsing,
851*6be67779SAndroid Build Coastguard Worker    finished, or suspended and processing the final buffer.
852*6be67779SAndroid Build Coastguard Worker    XXX XML_Parse() and XML_ParseBuffer() should return XML_ParsingStatus,
853*6be67779SAndroid Build Coastguard Worker    XXX with XML_FINISHED_OK or XML_FINISHED_ERROR replacing XML_FINISHED
854*6be67779SAndroid Build Coastguard Worker */
855*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
856*6be67779SAndroid Build Coastguard Worker XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status);
857*6be67779SAndroid Build Coastguard Worker 
858*6be67779SAndroid Build Coastguard Worker /* Creates an XML_Parser object that can parse an external general
859*6be67779SAndroid Build Coastguard Worker    entity; context is a '\0'-terminated string specifying the parse
860*6be67779SAndroid Build Coastguard Worker    context; encoding is a '\0'-terminated string giving the name of
861*6be67779SAndroid Build Coastguard Worker    the externally specified encoding, or NULL if there is no
862*6be67779SAndroid Build Coastguard Worker    externally specified encoding.  The context string consists of a
863*6be67779SAndroid Build Coastguard Worker    sequence of tokens separated by formfeeds (\f); a token consisting
864*6be67779SAndroid Build Coastguard Worker    of a name specifies that the general entity of the name is open; a
865*6be67779SAndroid Build Coastguard Worker    token of the form prefix=uri specifies the namespace for a
866*6be67779SAndroid Build Coastguard Worker    particular prefix; a token of the form =uri specifies the default
867*6be67779SAndroid Build Coastguard Worker    namespace.  This can be called at any point after the first call to
868*6be67779SAndroid Build Coastguard Worker    an ExternalEntityRefHandler so longer as the parser has not yet
869*6be67779SAndroid Build Coastguard Worker    been freed.  The new parser is completely independent and may
870*6be67779SAndroid Build Coastguard Worker    safely be used in a separate thread.  The handlers and userData are
871*6be67779SAndroid Build Coastguard Worker    initialized from the parser argument.  Returns NULL if out of memory.
872*6be67779SAndroid Build Coastguard Worker    Otherwise returns a new XML_Parser object.
873*6be67779SAndroid Build Coastguard Worker */
874*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(XML_Parser)
875*6be67779SAndroid Build Coastguard Worker XML_ExternalEntityParserCreate(XML_Parser parser, const XML_Char *context,
876*6be67779SAndroid Build Coastguard Worker                                const XML_Char *encoding);
877*6be67779SAndroid Build Coastguard Worker 
878*6be67779SAndroid Build Coastguard Worker enum XML_ParamEntityParsing {
879*6be67779SAndroid Build Coastguard Worker   XML_PARAM_ENTITY_PARSING_NEVER,
880*6be67779SAndroid Build Coastguard Worker   XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE,
881*6be67779SAndroid Build Coastguard Worker   XML_PARAM_ENTITY_PARSING_ALWAYS
882*6be67779SAndroid Build Coastguard Worker };
883*6be67779SAndroid Build Coastguard Worker 
884*6be67779SAndroid Build Coastguard Worker /* Controls parsing of parameter entities (including the external DTD
885*6be67779SAndroid Build Coastguard Worker    subset). If parsing of parameter entities is enabled, then
886*6be67779SAndroid Build Coastguard Worker    references to external parameter entities (including the external
887*6be67779SAndroid Build Coastguard Worker    DTD subset) will be passed to the handler set with
888*6be67779SAndroid Build Coastguard Worker    XML_SetExternalEntityRefHandler.  The context passed will be 0.
889*6be67779SAndroid Build Coastguard Worker 
890*6be67779SAndroid Build Coastguard Worker    Unlike external general entities, external parameter entities can
891*6be67779SAndroid Build Coastguard Worker    only be parsed synchronously.  If the external parameter entity is
892*6be67779SAndroid Build Coastguard Worker    to be parsed, it must be parsed during the call to the external
893*6be67779SAndroid Build Coastguard Worker    entity ref handler: the complete sequence of
894*6be67779SAndroid Build Coastguard Worker    XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and
895*6be67779SAndroid Build Coastguard Worker    XML_ParserFree calls must be made during this call.  After
896*6be67779SAndroid Build Coastguard Worker    XML_ExternalEntityParserCreate has been called to create the parser
897*6be67779SAndroid Build Coastguard Worker    for the external parameter entity (context must be 0 for this
898*6be67779SAndroid Build Coastguard Worker    call), it is illegal to make any calls on the old parser until
899*6be67779SAndroid Build Coastguard Worker    XML_ParserFree has been called on the newly created parser.
900*6be67779SAndroid Build Coastguard Worker    If the library has been compiled without support for parameter
901*6be67779SAndroid Build Coastguard Worker    entity parsing (ie without XML_DTD being defined), then
902*6be67779SAndroid Build Coastguard Worker    XML_SetParamEntityParsing will return 0 if parsing of parameter
903*6be67779SAndroid Build Coastguard Worker    entities is requested; otherwise it will return non-zero.
904*6be67779SAndroid Build Coastguard Worker    Note: If XML_SetParamEntityParsing is called after XML_Parse or
905*6be67779SAndroid Build Coastguard Worker       XML_ParseBuffer, then it has no effect and will always return 0.
906*6be67779SAndroid Build Coastguard Worker    Note: If parser == NULL, the function will do nothing and return 0.
907*6be67779SAndroid Build Coastguard Worker */
908*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(int)
909*6be67779SAndroid Build Coastguard Worker XML_SetParamEntityParsing(XML_Parser parser,
910*6be67779SAndroid Build Coastguard Worker                           enum XML_ParamEntityParsing parsing);
911*6be67779SAndroid Build Coastguard Worker 
912*6be67779SAndroid Build Coastguard Worker /* Sets the hash salt to use for internal hash calculations.
913*6be67779SAndroid Build Coastguard Worker    Helps in preventing DoS attacks based on predicting hash
914*6be67779SAndroid Build Coastguard Worker    function behavior. This must be called before parsing is started.
915*6be67779SAndroid Build Coastguard Worker    Returns 1 if successful, 0 when called after parsing has started.
916*6be67779SAndroid Build Coastguard Worker    Note: If parser == NULL, the function will do nothing and return 0.
917*6be67779SAndroid Build Coastguard Worker */
918*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(int)
919*6be67779SAndroid Build Coastguard Worker XML_SetHashSalt(XML_Parser parser, unsigned long hash_salt);
920*6be67779SAndroid Build Coastguard Worker 
921*6be67779SAndroid Build Coastguard Worker /* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then
922*6be67779SAndroid Build Coastguard Worker    XML_GetErrorCode returns information about the error.
923*6be67779SAndroid Build Coastguard Worker */
924*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(enum XML_Error)
925*6be67779SAndroid Build Coastguard Worker XML_GetErrorCode(XML_Parser parser);
926*6be67779SAndroid Build Coastguard Worker 
927*6be67779SAndroid Build Coastguard Worker /* These functions return information about the current parse
928*6be67779SAndroid Build Coastguard Worker    location.  They may be called from any callback called to report
929*6be67779SAndroid Build Coastguard Worker    some parse event; in this case the location is the location of the
930*6be67779SAndroid Build Coastguard Worker    first of the sequence of characters that generated the event.  When
931*6be67779SAndroid Build Coastguard Worker    called from callbacks generated by declarations in the document
932*6be67779SAndroid Build Coastguard Worker    prologue, the location identified isn't as neatly defined, but will
933*6be67779SAndroid Build Coastguard Worker    be within the relevant markup.  When called outside of the callback
934*6be67779SAndroid Build Coastguard Worker    functions, the position indicated will be just past the last parse
935*6be67779SAndroid Build Coastguard Worker    event (regardless of whether there was an associated callback).
936*6be67779SAndroid Build Coastguard Worker 
937*6be67779SAndroid Build Coastguard Worker    They may also be called after returning from a call to XML_Parse
938*6be67779SAndroid Build Coastguard Worker    or XML_ParseBuffer.  If the return value is XML_STATUS_ERROR then
939*6be67779SAndroid Build Coastguard Worker    the location is the location of the character at which the error
940*6be67779SAndroid Build Coastguard Worker    was detected; otherwise the location is the location of the last
941*6be67779SAndroid Build Coastguard Worker    parse event, as described above.
942*6be67779SAndroid Build Coastguard Worker 
943*6be67779SAndroid Build Coastguard Worker    Note: XML_GetCurrentLineNumber and XML_GetCurrentColumnNumber
944*6be67779SAndroid Build Coastguard Worker    return 0 to indicate an error.
945*6be67779SAndroid Build Coastguard Worker    Note: XML_GetCurrentByteIndex returns -1 to indicate an error.
946*6be67779SAndroid Build Coastguard Worker */
947*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser);
948*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser);
949*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser);
950*6be67779SAndroid Build Coastguard Worker 
951*6be67779SAndroid Build Coastguard Worker /* Return the number of bytes in the current event.
952*6be67779SAndroid Build Coastguard Worker    Returns 0 if the event is in an internal entity.
953*6be67779SAndroid Build Coastguard Worker */
954*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(int)
955*6be67779SAndroid Build Coastguard Worker XML_GetCurrentByteCount(XML_Parser parser);
956*6be67779SAndroid Build Coastguard Worker 
957*6be67779SAndroid Build Coastguard Worker /* If XML_CONTEXT_BYTES is >=1, returns the input buffer, sets
958*6be67779SAndroid Build Coastguard Worker    the integer pointed to by offset to the offset within this buffer
959*6be67779SAndroid Build Coastguard Worker    of the current parse position, and sets the integer pointed to by size
960*6be67779SAndroid Build Coastguard Worker    to the size of this buffer (the number of input bytes). Otherwise
961*6be67779SAndroid Build Coastguard Worker    returns a NULL pointer. Also returns a NULL pointer if a parse isn't
962*6be67779SAndroid Build Coastguard Worker    active.
963*6be67779SAndroid Build Coastguard Worker 
964*6be67779SAndroid Build Coastguard Worker    NOTE: The character pointer returned should not be used outside
965*6be67779SAndroid Build Coastguard Worker    the handler that makes the call.
966*6be67779SAndroid Build Coastguard Worker */
967*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(const char *)
968*6be67779SAndroid Build Coastguard Worker XML_GetInputContext(XML_Parser parser, int *offset, int *size);
969*6be67779SAndroid Build Coastguard Worker 
970*6be67779SAndroid Build Coastguard Worker /* For backwards compatibility with previous versions. */
971*6be67779SAndroid Build Coastguard Worker #define XML_GetErrorLineNumber XML_GetCurrentLineNumber
972*6be67779SAndroid Build Coastguard Worker #define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber
973*6be67779SAndroid Build Coastguard Worker #define XML_GetErrorByteIndex XML_GetCurrentByteIndex
974*6be67779SAndroid Build Coastguard Worker 
975*6be67779SAndroid Build Coastguard Worker /* Frees the content model passed to the element declaration handler */
976*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
977*6be67779SAndroid Build Coastguard Worker XML_FreeContentModel(XML_Parser parser, XML_Content *model);
978*6be67779SAndroid Build Coastguard Worker 
979*6be67779SAndroid Build Coastguard Worker /* Exposing the memory handling functions used in Expat */
980*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void *)
981*6be67779SAndroid Build Coastguard Worker XML_ATTR_MALLOC
982*6be67779SAndroid Build Coastguard Worker XML_ATTR_ALLOC_SIZE(2)
983*6be67779SAndroid Build Coastguard Worker XML_MemMalloc(XML_Parser parser, size_t size);
984*6be67779SAndroid Build Coastguard Worker 
985*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void *)
986*6be67779SAndroid Build Coastguard Worker XML_ATTR_ALLOC_SIZE(3)
987*6be67779SAndroid Build Coastguard Worker XML_MemRealloc(XML_Parser parser, void *ptr, size_t size);
988*6be67779SAndroid Build Coastguard Worker 
989*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
990*6be67779SAndroid Build Coastguard Worker XML_MemFree(XML_Parser parser, void *ptr);
991*6be67779SAndroid Build Coastguard Worker 
992*6be67779SAndroid Build Coastguard Worker /* Frees memory used by the parser. */
993*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(void)
994*6be67779SAndroid Build Coastguard Worker XML_ParserFree(XML_Parser parser);
995*6be67779SAndroid Build Coastguard Worker 
996*6be67779SAndroid Build Coastguard Worker /* Returns a string describing the error. */
997*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(const XML_LChar *)
998*6be67779SAndroid Build Coastguard Worker XML_ErrorString(enum XML_Error code);
999*6be67779SAndroid Build Coastguard Worker 
1000*6be67779SAndroid Build Coastguard Worker /* Return a string containing the version number of this expat */
1001*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(const XML_LChar *)
1002*6be67779SAndroid Build Coastguard Worker XML_ExpatVersion(void);
1003*6be67779SAndroid Build Coastguard Worker 
1004*6be67779SAndroid Build Coastguard Worker typedef struct {
1005*6be67779SAndroid Build Coastguard Worker   int major;
1006*6be67779SAndroid Build Coastguard Worker   int minor;
1007*6be67779SAndroid Build Coastguard Worker   int micro;
1008*6be67779SAndroid Build Coastguard Worker } XML_Expat_Version;
1009*6be67779SAndroid Build Coastguard Worker 
1010*6be67779SAndroid Build Coastguard Worker /* Return an XML_Expat_Version structure containing numeric version
1011*6be67779SAndroid Build Coastguard Worker    number information for this version of expat.
1012*6be67779SAndroid Build Coastguard Worker */
1013*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(XML_Expat_Version)
1014*6be67779SAndroid Build Coastguard Worker XML_ExpatVersionInfo(void);
1015*6be67779SAndroid Build Coastguard Worker 
1016*6be67779SAndroid Build Coastguard Worker /* Added in Expat 1.95.5. */
1017*6be67779SAndroid Build Coastguard Worker enum XML_FeatureEnum {
1018*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_END = 0,
1019*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_UNICODE,
1020*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_UNICODE_WCHAR_T,
1021*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_DTD,
1022*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_CONTEXT_BYTES,
1023*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_MIN_SIZE,
1024*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_SIZEOF_XML_CHAR,
1025*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_SIZEOF_XML_LCHAR,
1026*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_NS,
1027*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_LARGE_SIZE,
1028*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_ATTR_INFO,
1029*6be67779SAndroid Build Coastguard Worker   /* Added in Expat 2.4.0. */
1030*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT,
1031*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT,
1032*6be67779SAndroid Build Coastguard Worker   /* Added in Expat 2.6.0. */
1033*6be67779SAndroid Build Coastguard Worker   XML_FEATURE_GE
1034*6be67779SAndroid Build Coastguard Worker   /* Additional features must be added to the end of this enum. */
1035*6be67779SAndroid Build Coastguard Worker };
1036*6be67779SAndroid Build Coastguard Worker 
1037*6be67779SAndroid Build Coastguard Worker typedef struct {
1038*6be67779SAndroid Build Coastguard Worker   enum XML_FeatureEnum feature;
1039*6be67779SAndroid Build Coastguard Worker   const XML_LChar *name;
1040*6be67779SAndroid Build Coastguard Worker   long int value;
1041*6be67779SAndroid Build Coastguard Worker } XML_Feature;
1042*6be67779SAndroid Build Coastguard Worker 
1043*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(const XML_Feature *)
1044*6be67779SAndroid Build Coastguard Worker XML_GetFeatureList(void);
1045*6be67779SAndroid Build Coastguard Worker 
1046*6be67779SAndroid Build Coastguard Worker #if defined(XML_DTD) || (defined(XML_GE) && XML_GE == 1)
1047*6be67779SAndroid Build Coastguard Worker /* Added in Expat 2.4.0 for XML_DTD defined and
1048*6be67779SAndroid Build Coastguard Worker  * added in Expat 2.6.0 for XML_GE == 1. */
1049*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(XML_Bool)
1050*6be67779SAndroid Build Coastguard Worker XML_SetBillionLaughsAttackProtectionMaximumAmplification(
1051*6be67779SAndroid Build Coastguard Worker     XML_Parser parser, float maximumAmplificationFactor);
1052*6be67779SAndroid Build Coastguard Worker 
1053*6be67779SAndroid Build Coastguard Worker /* Added in Expat 2.4.0 for XML_DTD defined and
1054*6be67779SAndroid Build Coastguard Worker  * added in Expat 2.6.0 for XML_GE == 1. */
1055*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(XML_Bool)
1056*6be67779SAndroid Build Coastguard Worker XML_SetBillionLaughsAttackProtectionActivationThreshold(
1057*6be67779SAndroid Build Coastguard Worker     XML_Parser parser, unsigned long long activationThresholdBytes);
1058*6be67779SAndroid Build Coastguard Worker #endif
1059*6be67779SAndroid Build Coastguard Worker 
1060*6be67779SAndroid Build Coastguard Worker /* Added in Expat 2.6.0. */
1061*6be67779SAndroid Build Coastguard Worker XMLPARSEAPI(XML_Bool)
1062*6be67779SAndroid Build Coastguard Worker XML_SetReparseDeferralEnabled(XML_Parser parser, XML_Bool enabled);
1063*6be67779SAndroid Build Coastguard Worker 
1064*6be67779SAndroid Build Coastguard Worker /* Expat follows the semantic versioning convention.
1065*6be67779SAndroid Build Coastguard Worker    See https://semver.org
1066*6be67779SAndroid Build Coastguard Worker */
1067*6be67779SAndroid Build Coastguard Worker #define XML_MAJOR_VERSION 2
1068*6be67779SAndroid Build Coastguard Worker #define XML_MINOR_VERSION 6
1069*6be67779SAndroid Build Coastguard Worker #define XML_MICRO_VERSION 3
1070*6be67779SAndroid Build Coastguard Worker 
1071*6be67779SAndroid Build Coastguard Worker #ifdef __cplusplus
1072*6be67779SAndroid Build Coastguard Worker }
1073*6be67779SAndroid Build Coastguard Worker #endif
1074*6be67779SAndroid Build Coastguard Worker 
1075*6be67779SAndroid Build Coastguard Worker #endif /* not Expat_INCLUDED */
1076