1ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/*
2ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX2.c : Default SAX2 handler to build a tree.
3ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
4ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * See Copyright for the status of this software.
5ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
6ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Daniel Veillard <daniel@veillard.com>
7ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
8ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
9ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
10ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define IN_LIBXML
11ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "libxml.h"
12ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <stdlib.h>
13ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <string.h>
1460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott#include <limits.h>
15ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlmemory.h>
16ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/tree.h>
17ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parser.h>
18ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parserInternals.h>
19ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/valid.h>
20ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/entities.h>
21ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlerror.h>
22ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/debugXML.h>
23ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlIO.h>
24ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/SAX.h>
25ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/uri.h>
26ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/valid.h>
27ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/HTMLtree.h>
28ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/globals.h>
29ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
3060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/* Define SIZE_T_MAX unless defined through <limits.h>. */
3160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott#ifndef SIZE_T_MAX
3260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott# define SIZE_T_MAX     ((size_t)-1)
3360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott#endif /* !SIZE_T_MAX */
3460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott
35ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* #define DEBUG_SAX2 */
36ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* #define DEBUG_SAX2_TREE */
37ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
38ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
39ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO:
40ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
41ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * macro to flag unimplemented blocks
42ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * XML_CATALOG_PREFER user env to select between system/public prefered
43ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * option. C.f. Richard Tobin <richard@cogsci.ed.ac.uk>
44ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *> Just FYI, I am using an environment variable XML_CATALOG_PREFER with
45ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *> values "system" and "public".  I have made the default be "system" to
46ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *> match yours.
47ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
48ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define TODO 								\
49ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,				\
50ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "Unimplemented block at %s:%d\n",				\
51ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            __FILE__, __LINE__);
52ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
53ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/*
54ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2ErrMemory:
55ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  an XML validation parser context
56ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:   a string to accompany the error message
57ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
58ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
59ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2ErrMemory(xmlParserCtxtPtr ctxt, const char *msg) {
60ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
61ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
62ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->sax->error(ctxt->userData, "%s: out of memory\n", msg);
63ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->errNo = XML_ERR_NO_MEMORY;
64ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->instate = XML_PARSER_EOF;
65ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->disableSAX = 1;
66ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
67ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
68ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
69ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
70ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlValidError:
71ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  an XML validation parser context
72ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error:  the error number
73ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the error message
74ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str1:  extra data
75ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str2:  extra data
76ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
77ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a validation error
78ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
79ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
80ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlErrValid(xmlParserCtxtPtr ctxt, xmlParserErrors error,
81ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            const char *msg, const char *str1, const char *str2)
82ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
83ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlStructuredErrorFunc schannel = NULL;
84ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
85ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
86ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (ctxt->instate == XML_PARSER_EOF))
87ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
88ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
89ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->errNo = error;
90ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC))
91ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    schannel = ctxt->sax->serror;
92ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	__xmlRaiseError(schannel,
93ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			ctxt->vctxt.error, ctxt->vctxt.userData,
94ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			ctxt, NULL, XML_FROM_DTD, error,
95ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			XML_ERR_ERROR, NULL, 0, (const char *) str1,
96ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			(const char *) str2, NULL, 0, 0,
97ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			msg, (const char *) str1, (const char *) str2);
98ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->valid = 0;
99ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	__xmlRaiseError(schannel,
101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			NULL, NULL,
102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			ctxt, NULL, XML_FROM_DTD, error,
103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			XML_ERR_ERROR, NULL, 0, (const char *) str1,
104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			(const char *) str2, NULL, 0, 0,
105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			msg, (const char *) str1, (const char *) str2);
106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFatalErrMsg:
111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  an XML parser context
112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error:  the error number
113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the error message
114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str1:  an error string
115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str2:  an error string
116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a fatal parser error, i.e. violating Well-Formedness constraints
118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFatalErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project               const char *msg, const xmlChar *str1, const xmlChar *str2)
122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (ctxt->instate == XML_PARSER_EOF))
125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL)
127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->errNo = error;
128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    XML_ERR_FATAL, NULL, 0,
130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    (const char *) str1, (const char *) str2,
131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    NULL, 0, 0, msg, str1, str2);
132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->wellFormed = 0;
134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->valid = 0;
135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->recovery == 0)
136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->disableSAX = 1;
137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlWarnMsg:
142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  an XML parser context
143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error:  the error number
144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the error message
145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str1:  an error string
146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str2:  an error string
147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a parser warning
149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlWarnMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project               const char *msg, const xmlChar *str1)
153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (ctxt->instate == XML_PARSER_EOF))
156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL)
158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->errNo = error;
159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    XML_ERR_WARNING, NULL, 0,
161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    (const char *) str1, NULL,
162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    NULL, 0, 0, msg, str1);
163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlNsErrMsg:
167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  an XML parser context
168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error:  the error number
169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the error message
170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str1:  an error string
171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str2:  an error string
172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a namespace error
174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlNsErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            const char *msg, const xmlChar *str1, const xmlChar *str2)
178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (ctxt->instate == XML_PARSER_EOF))
181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL)
183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->errNo = error;
184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error,
185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    XML_ERR_ERROR, NULL, 0,
186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    (const char *) str1, (const char *) str2,
187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    NULL, 0, 0, msg, str1, str2);
188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlNsWarnMsg:
192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  an XML parser context
193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error:  the error number
194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the error message
195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str1:  an error string
196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a namespace warning
198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlNsWarnMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             const char *msg, const xmlChar *str1, const xmlChar *str2)
202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (ctxt->instate == XML_PARSER_EOF))
205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL)
207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->errNo = error;
208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error,
209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    XML_ERR_WARNING, NULL, 0,
210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    (const char *) str1, (const char *) str2,
211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    NULL, 0, 0, msg, str1, str2);
212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2GetPublicId:
216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN"
219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a xmlChar *
221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectconst xmlChar *
223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2GetPublicId(void *ctx ATTRIBUTE_UNUSED)
224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(NULL);
227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2GetSystemId:
231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Provides the system ID, basically URL or filename e.g.
234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * http://www.sgmlsource.com/dtds/memo.dtd
235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a xmlChar *
237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectconst xmlChar *
239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2GetSystemId(void *ctx)
240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctx == NULL) || (ctxt->input == NULL)) return(NULL);
243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return((const xmlChar *) ctxt->input->filename);
244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2GetLineNumber:
248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Provide the line number of the current parsing point.
251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns an int
253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2GetLineNumber(void *ctx)
256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctx == NULL) || (ctxt->input == NULL)) return(0);
259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ctxt->input->line);
260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2GetColumnNumber:
264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Provide the column number of the current parsing point.
267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns an int
269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2GetColumnNumber(void *ctx)
272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctx == NULL) || (ctxt->input == NULL)) return(0);
275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ctxt->input->col);
276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2IsStandalone:
280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Is this document tagged standalone ?
283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 1 if true
285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2IsStandalone(void *ctx)
288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctx == NULL) || (ctxt->myDoc == NULL)) return(0);
291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ctxt->myDoc->standalone == 1);
292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2HasInternalSubset:
296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Does this document has an internal subset
299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 1 if true
301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2HasInternalSubset(void *ctx)
304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt == NULL) || (ctxt->myDoc == NULL)) return(0);
307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ctxt->myDoc->intSubset != NULL);
308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2HasExternalSubset:
312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Does this document has an external subset
315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 1 if true
317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2HasExternalSubset(void *ctx)
320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt == NULL) || (ctxt->myDoc == NULL)) return(0);
323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ctxt->myDoc->extSubset != NULL);
324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2InternalSubset:
328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  the user data (XML parser context)
329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name:  the root element name
330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ExternalID:  the external ID
331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @SystemID:  the SYSTEM ID (e.g. filename or URL)
332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Callback on internal subset declaration.
334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2InternalSubset(void *ctx, const xmlChar *name,
337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	       const xmlChar *ExternalID, const xmlChar *SystemID)
338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDtdPtr dtd;
341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2InternalSubset(%s, %s, %s)\n",
345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            name, ExternalID, SystemID);
346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->myDoc == NULL)
349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    dtd = xmlGetIntSubset(ctxt->myDoc);
351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (dtd != NULL) {
352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->html)
353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return;
354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlUnlinkNode((xmlNodePtr) dtd);
355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFreeDtd(dtd);
356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->myDoc->intSubset = NULL;
357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->myDoc->intSubset =
359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlCreateIntSubset(ctxt->myDoc, name, ExternalID, SystemID);
360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->myDoc->intSubset == NULL)
361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlSAX2ErrMemory(ctxt, "xmlSAX2InternalSubset");
362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2ExternalSubset:
366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name:  the root element name
368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ExternalID:  the external ID
369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @SystemID:  the SYSTEM ID (e.g. filename or URL)
370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Callback on external subset declaration.
372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2ExternalSubset(void *ctx, const xmlChar *name,
375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	       const xmlChar *ExternalID, const xmlChar *SystemID)
376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2ExternalSubset(%s, %s, %s)\n",
382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            name, ExternalID, SystemID);
383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (((ExternalID != NULL) || (SystemID != NULL)) &&
385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (((ctxt->validate) || (ctxt->loadsubset != 0)) &&
386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 (ctxt->wellFormed && ctxt->myDoc))) {
387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * Try to fetch and parse the external subset.
389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserInputPtr oldinput;
391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int oldinputNr;
392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int oldinputMax;
393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserInputPtr *oldinputTab;
394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserInputPtr input = NULL;
395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlCharEncoding enc;
396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int oldcharset;
397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * Ask the Entity resolver to load the damn thing
400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ctxt->sax != NULL) && (ctxt->sax->resolveEntity != NULL))
402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    input = ctxt->sax->resolveEntity(ctxt->userData, ExternalID,
403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                                        SystemID);
404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (input == NULL) {
405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return;
406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlNewDtd(ctxt->myDoc, name, ExternalID, SystemID);
409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * make sure we won't destroy the main document context
412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	oldinput = ctxt->input;
414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	oldinputNr = ctxt->inputNr;
415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	oldinputMax = ctxt->inputMax;
416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	oldinputTab = ctxt->inputTab;
417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	oldcharset = ctxt->charset;
418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->inputTab = (xmlParserInputPtr *)
420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                 xmlMalloc(5 * sizeof(xmlParserInputPtr));
421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->inputTab == NULL) {
422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlSAX2ErrMemory(ctxt, "xmlSAX2ExternalSubset");
423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->input = oldinput;
424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->inputNr = oldinputNr;
425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->inputMax = oldinputMax;
426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->inputTab = oldinputTab;
427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->charset = oldcharset;
428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return;
429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->inputNr = 0;
431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->inputMax = 5;
432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->input = NULL;
433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlPushInput(ctxt, input);
434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * On the fly encoding conversion if needed
437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->input->length >= 4) {
439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    enc = xmlDetectCharEncoding(ctxt->input->cur, 4);
440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlSwitchEncoding(ctxt, enc);
441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (input->filename == NULL)
444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    input->filename = (char *) xmlCanonicPath(SystemID);
445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	input->line = 1;
446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	input->col = 1;
447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	input->base = ctxt->input->cur;
448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	input->cur = ctxt->input->cur;
449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	input->free = NULL;
450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * let's parse that entity knowing it's an external subset.
453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParseExternalSubset(ctxt, ExternalID, SystemID);
455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        /*
457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * Free up the external entities
458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	while (ctxt->inputNr > 1)
461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlPopInput(ctxt);
462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFreeInputStream(ctxt->input);
463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(ctxt->inputTab);
464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * Restore the parsing context of the main entity
467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->input = oldinput;
469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->inputNr = oldinputNr;
470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->inputMax = oldinputMax;
471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->inputTab = oldinputTab;
472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->charset = oldcharset;
473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/* ctxt->wellFormed = oldwellFormed; */
474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2ResolveEntity:
479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @publicId: The public ID of the entity
481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @systemId: The system ID of the entity
482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The entity loader, to control the loading of external entities,
484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the application can either:
485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *    - override this xmlSAX2ResolveEntity() callback in the SAX block
486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *    - or better use the xmlSetExternalEntityLoader() function to
487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *      set up it's own entity resolution routine
488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputPtr
492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2ResolveEntity(void *ctx, const xmlChar *publicId, const xmlChar *systemId)
493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr ret;
496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar *URI;
497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    const char *base = NULL;
498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return(NULL);
500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->input != NULL)
501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	base = ctxt->input->filename;
502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (base == NULL)
503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	base = ctxt->directory;
504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    URI = xmlBuildURI(systemId, (const xmlChar *) base);
506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2ResolveEntity(%s, %s)\n", publicId, systemId);
510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ret = xmlLoadExternalEntity((const char *) URI,
513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				(const char *) publicId, ctxt);
514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (URI != NULL)
515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(URI);
516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ret);
517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2GetEntity:
521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: The entity name
523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get an entity by name
525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the xmlEntityPtr if found.
527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlEntityPtr
529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2GetEntity(void *ctx, const xmlChar *name)
530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlEntityPtr ret = NULL;
533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return(NULL);
535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2GetEntity(%s)\n", name);
538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->inSubset == 0) {
541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret = xmlGetPredefinedEntity(name);
542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ret != NULL)
543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return(ret);
544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->myDoc != NULL) && (ctxt->myDoc->standalone == 1)) {
546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->inSubset == 2) {
547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->myDoc->standalone = 0;
548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret = xmlGetDocEntity(ctxt->myDoc, name);
549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->myDoc->standalone = 1;
550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret = xmlGetDocEntity(ctxt->myDoc, name);
552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ret == NULL) {
553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ctxt->myDoc->standalone = 0;
554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ret = xmlGetDocEntity(ctxt->myDoc, name);
555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (ret != NULL) {
556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlFatalErrMsg(ctxt, XML_ERR_NOT_STANDALONE,
557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 "Entity(%s) document marked standalone but requires external subset\n",
558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				   name, NULL);
559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		}
560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ctxt->myDoc->standalone = 1;
561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret = xmlGetDocEntity(ctxt->myDoc, name);
565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ret != NULL) &&
567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	((ctxt->validate) || (ctxt->replaceEntities)) &&
568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(ret->children == NULL) &&
569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(ret->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)) {
570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int val;
571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * for validation purposes we really need to fetch and
574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * parse the external entity
575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlNodePtr children;
577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        val = xmlParseCtxtExternalEntity(ctxt, ret->URI,
579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		                         ret->ExternalID, &children);
580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (val == 0) {
581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlAddChildList((xmlNodePtr) ret, children);
582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_PROCESSING,
584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		           "Failure to process entity %s\n", name, NULL);
585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->validate = 0;
586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return(NULL);
587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret->owner = 1;
58960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	if (ret->checked == 0)
59060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	    ret->checked = 1;
591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ret);
593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2GetParameterEntity:
597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: The entity name
599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get a parameter entity by name
601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the xmlEntityPtr if found.
603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlEntityPtr
605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2GetParameterEntity(void *ctx, const xmlChar *name)
606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlEntityPtr ret;
609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return(NULL);
611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2GetParameterEntity(%s)\n", name);
614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ret = xmlGetParameterEntity(ctxt->myDoc, name);
617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ret);
618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2EntityDecl:
623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name:  the entity name
625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type:  the entity type
626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @publicId: The public ID of the entity
627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @systemId: The system ID of the entity
628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @content: the entity value (without processing).
629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * An entity definition has been parsed
631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type,
634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project          const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlEntityPtr ent;
637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2EntityDecl(%s, %d, %s, %s, %s)\n",
643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            name, type, publicId, systemId, content);
644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->inSubset == 1) {
646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ent = xmlAddDocEntity(ctxt->myDoc, name, type, publicId,
647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		              systemId, content);
648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ent == NULL) && (ctxt->pedantic))
649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlWarnMsg(ctxt, XML_WAR_ENTITY_REDEFINED,
650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     "Entity(%s) already defined in the internal subset\n",
651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	               name);
652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlChar *URI;
654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    const char *base = NULL;
655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ctxt->input != NULL)
657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		base = ctxt->input->filename;
658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (base == NULL)
659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		base = ctxt->directory;
660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    URI = xmlBuildURI(systemId, (const xmlChar *) base);
662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ent->URI = URI;
663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (ctxt->inSubset == 2) {
665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ent = xmlAddDtdEntity(ctxt->myDoc, name, type, publicId,
666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		              systemId, content);
667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ent == NULL) && (ctxt->pedantic) &&
668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->sax->warning(ctxt->userData,
670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     "Entity(%s) already defined in the external subset\n", name);
671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlChar *URI;
673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    const char *base = NULL;
674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ctxt->input != NULL)
676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		base = ctxt->input->filename;
677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (base == NULL)
678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		base = ctxt->directory;
679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    URI = xmlBuildURI(systemId, (const xmlChar *) base);
681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ent->URI = URI;
682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_PROCESSING,
685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	               "SAX.xmlSAX2EntityDecl(%s) called while not in subset\n",
686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		       name, NULL);
687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2AttributeDecl:
692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @elem:  the name of the element
694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fullname:  the attribute name
695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type:  the attribute type
696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @def:  the type of default value
697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @defaultValue: the attribute default value
698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @tree:  the tree of enumerated value set
699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * An attribute definition has been parsed
701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2AttributeDecl(void *ctx, const xmlChar *elem, const xmlChar *fullname,
704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project              int type, int def, const xmlChar *defaultValue,
705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	      xmlEnumerationPtr tree)
706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlAttributePtr attr;
709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar *name = NULL, *prefix = NULL;
710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt == NULL) || (ctxt->myDoc == NULL))
712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2AttributeDecl(%s, %s, %d, %d, %s, ...)\n",
717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            elem, fullname, type, def, defaultValue);
718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((xmlStrEqual(fullname, BAD_CAST "xml:id")) &&
720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (type != XML_ATTRIBUTE_ID)) {
721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * Raise the error but keep the validity flag
723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int tmp = ctxt->valid;
725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlErrValid(ctxt, XML_DTD_XMLID_TYPE,
726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	      "xml:id : attribute type should be ID\n", NULL, NULL);
727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->valid = tmp;
728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* TODO: optimize name/prefix allocation */
730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    name = xmlSplitQName(ctxt, fullname, &prefix);
731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->vctxt.valid = 1;
732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->inSubset == 1)
733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	attr = xmlAddAttributeDecl(&ctxt->vctxt, ctxt->myDoc->intSubset, elem,
734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	       name, prefix, (xmlAttributeType) type,
735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	       (xmlAttributeDefault) def, defaultValue, tree);
736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else if (ctxt->inSubset == 2)
737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	attr = xmlAddAttributeDecl(&ctxt->vctxt, ctxt->myDoc->extSubset, elem,
738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	   name, prefix, (xmlAttributeType) type,
739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	   (xmlAttributeDefault) def, defaultValue, tree);
740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else {
741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR,
742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     "SAX.xmlSAX2AttributeDecl(%s) called while not in subset\n",
743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	               name, NULL);
744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFreeEnumeration(tree);
745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->vctxt.valid == 0)
749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->valid = 0;
750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((attr != NULL) && (ctxt->validate) && (ctxt->wellFormed) &&
751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (ctxt->myDoc->intSubset != NULL))
752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->valid &= xmlValidateAttributeDecl(&ctxt->vctxt, ctxt->myDoc,
753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                                        attr);
754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (prefix != NULL)
756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(prefix);
757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (name != NULL)
758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(name);
759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2ElementDecl:
763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name:  the element name
765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type:  the element type
766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @content: the element value tree
767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * An element definition has been parsed
769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2ElementDecl(void *ctx, const xmlChar * name, int type,
772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlElementContentPtr content)
773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlElementPtr elem = NULL;
776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt == NULL) || (ctxt->myDoc == NULL))
778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    "SAX.xmlSAX2ElementDecl(%s, %d, ...)\n", name, type);
783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->inSubset == 1)
786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        elem = xmlAddElementDecl(&ctxt->vctxt, ctxt->myDoc->intSubset,
787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                 name, (xmlElementTypeVal) type, content);
788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else if (ctxt->inSubset == 2)
789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        elem = xmlAddElementDecl(&ctxt->vctxt, ctxt->myDoc->extSubset,
790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                 name, (xmlElementTypeVal) type, content);
791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else {
792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR,
793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     "SAX.xmlSAX2ElementDecl(%s) called while not in subset\n",
794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	               name, NULL);
795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (elem == NULL)
799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->valid = 0;
800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->validate && ctxt->wellFormed &&
801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->myDoc && ctxt->myDoc->intSubset)
802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->valid &=
803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlValidateElementDecl(&ctxt->vctxt, ctxt->myDoc, elem);
804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2NotationDecl:
809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: The name of the notation
811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @publicId: The public ID of the entity
812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @systemId: The system ID of the entity
813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * What to do when a notation declaration has been parsed.
815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2NotationDecl(void *ctx, const xmlChar *name,
818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     const xmlChar *publicId, const xmlChar *systemId)
819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNotationPtr nota = NULL;
822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt == NULL) || (ctxt->myDoc == NULL))
824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2NotationDecl(%s, %s, %s)\n", name, publicId, systemId);
829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((publicId == NULL) && (systemId == NULL)) {
832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFatalErrMsg(ctxt, XML_ERR_NOTATION_PROCESSING,
833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     "SAX.xmlSAX2NotationDecl(%s) externalID or PublicID missing\n",
834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	               name, NULL);
835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (ctxt->inSubset == 1)
837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	nota = xmlAddNotationDecl(&ctxt->vctxt, ctxt->myDoc->intSubset, name,
838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                              publicId, systemId);
839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else if (ctxt->inSubset == 2)
840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	nota = xmlAddNotationDecl(&ctxt->vctxt, ctxt->myDoc->extSubset, name,
841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                              publicId, systemId);
842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else {
843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFatalErrMsg(ctxt, XML_ERR_NOTATION_PROCESSING,
844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     "SAX.xmlSAX2NotationDecl(%s) called while not in subset\n",
845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	               name, NULL);
846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (nota == NULL) ctxt->valid = 0;
850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->validate) && (ctxt->wellFormed) &&
851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (ctxt->myDoc->intSubset != NULL))
852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->valid &= xmlValidateNotationDecl(&ctxt->vctxt, ctxt->myDoc,
853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                                       nota);
854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2UnparsedEntityDecl:
859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: The name of the entity
861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @publicId: The public ID of the entity
862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @systemId: The system ID of the entity
863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @notationName: the name of the notation
864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * What to do when an unparsed entity declaration is parsed
866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2UnparsedEntityDecl(void *ctx, const xmlChar *name,
869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		   const xmlChar *publicId, const xmlChar *systemId,
870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		   const xmlChar *notationName)
871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlEntityPtr ent;
873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2UnparsedEntityDecl(%s, %s, %s, %s)\n",
878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            name, publicId, systemId, notationName);
879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->inSubset == 1) {
881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ent = xmlAddDocEntity(ctxt->myDoc, name,
882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			XML_EXTERNAL_GENERAL_UNPARSED_ENTITY,
883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			publicId, systemId, notationName);
884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ent == NULL) && (ctxt->pedantic) &&
885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->sax->warning(ctxt->userData,
887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     "Entity(%s) already defined in the internal subset\n", name);
888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlChar *URI;
890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    const char *base = NULL;
891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ctxt->input != NULL)
893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		base = ctxt->input->filename;
894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (base == NULL)
895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		base = ctxt->directory;
896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    URI = xmlBuildURI(systemId, (const xmlChar *) base);
898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ent->URI = URI;
899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (ctxt->inSubset == 2) {
901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ent = xmlAddDtdEntity(ctxt->myDoc, name,
902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			XML_EXTERNAL_GENERAL_UNPARSED_ENTITY,
903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			publicId, systemId, notationName);
904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ent == NULL) && (ctxt->pedantic) &&
905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->sax->warning(ctxt->userData,
907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     "Entity(%s) already defined in the external subset\n", name);
908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlChar *URI;
910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    const char *base = NULL;
911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ctxt->input != NULL)
913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		base = ctxt->input->filename;
914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (base == NULL)
915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		base = ctxt->directory;
916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    URI = xmlBuildURI(systemId, (const xmlChar *) base);
918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ent->URI = URI;
919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR,
922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     "SAX.xmlSAX2UnparsedEntityDecl(%s) called while not in subset\n",
923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	               name, NULL);
924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2SetDocumentLocator:
929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @loc: A SAX Locator
931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Receive the document locator at startup, actually xmlDefaultSAXLocator
933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Everything is available on the context, so this is useless in our case.
934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2SetDocumentLocator(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2SetDocumentLocator()\n");
942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2StartDocument:
947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * called when the document start being processed.
950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2StartDocument(void *ctx)
953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDocPtr doc;
956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2StartDocument()\n");
962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->html) {
964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTML_ENABLED
965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->myDoc == NULL)
966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->myDoc = htmlNewDocNoDtD(NULL, NULL);
96760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	ctxt->myDoc->properties = XML_DOC_HTML;
96860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	ctxt->myDoc->parseFlags = ctxt->options;
969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->myDoc == NULL) {
970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlSAX2ErrMemory(ctxt, "xmlSAX2StartDocument");
971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return;
972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else
974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlGenericError(xmlGenericErrorContext,
975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		"libxml2 built without HTML support\n");
976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->errNo = XML_ERR_INTERNAL_ERROR;
977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->instate = XML_PARSER_EOF;
978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->disableSAX = 1;
979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	doc = ctxt->myDoc = xmlNewDoc(ctxt->version);
983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (doc != NULL) {
98460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	    doc->properties = 0;
98560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	    if (ctxt->options & XML_PARSE_OLD10)
98660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	        doc->properties |= XML_DOC_OLD10;
98760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	    doc->parseFlags = ctxt->options;
988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ctxt->encoding != NULL)
989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		doc->encoding = xmlStrdup(ctxt->encoding);
990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    else
991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		doc->encoding = NULL;
992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    doc->standalone = ctxt->standalone;
993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlSAX2ErrMemory(ctxt, "xmlSAX2StartDocument");
995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return;
996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ctxt->dictNames) && (doc != NULL)) {
998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    doc->dict = ctxt->dict;
999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDictReference(doc->dict);
1000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->myDoc != NULL) && (ctxt->myDoc->URL == NULL) &&
1003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(ctxt->input != NULL) && (ctxt->input->filename != NULL)) {
1004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->myDoc->URL = xmlPathToURI((const xmlChar *)ctxt->input->filename);
1005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->myDoc->URL == NULL)
1006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlSAX2ErrMemory(ctxt, "xmlSAX2StartDocument");
1007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2EndDocument:
1012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
1013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * called when the document end has been detected.
1015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2EndDocument(void *ctx)
1018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
1020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
1021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
1022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2EndDocument()\n");
1023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
1024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
1025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
1026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->validate && ctxt->wellFormed &&
1027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->myDoc && ctxt->myDoc->intSubset)
1028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->valid &= xmlValidateDocumentFinal(&ctxt->vctxt, ctxt->myDoc);
1029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
1030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Grab the encoding if it was added on-the-fly
1033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->encoding != NULL) && (ctxt->myDoc != NULL) &&
1035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(ctxt->myDoc->encoding == NULL)) {
1036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->myDoc->encoding = ctxt->encoding;
1037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->encoding = NULL;
1038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->inputTab != NULL) &&
1040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (ctxt->inputNr > 0) && (ctxt->inputTab[0] != NULL) &&
1041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (ctxt->inputTab[0]->encoding != NULL) && (ctxt->myDoc != NULL) &&
1042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(ctxt->myDoc->encoding == NULL)) {
1043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->myDoc->encoding = xmlStrdup(ctxt->inputTab[0]->encoding);
1044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->charset != XML_CHAR_ENCODING_NONE) && (ctxt->myDoc != NULL) &&
1046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(ctxt->myDoc->charset == XML_CHAR_ENCODING_NONE)) {
1047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->myDoc->charset = ctxt->charset;
1048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
1052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2AttributeInternal:
1054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
1055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fullname:  The attribute name, including namespace prefix
1056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value:  The attribute value
1057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefix: the prefix on the element node
1058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle an attribute that has been read by the parser.
1060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The default handling is to convert the attribute into an
1061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * DOM subtree and past it in a new xmlAttr element added to
1062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the element.
1063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
1066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             const xmlChar *value, const xmlChar *prefix ATTRIBUTE_UNUSED)
1067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
1069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlAttrPtr ret;
1070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar *name;
1071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar *ns;
1072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar *nval;
1073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNsPtr namespace;
1074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->html) {
1076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	name = xmlStrdup(fullname);
1077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ns = NULL;
1078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	namespace = NULL;
1079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
1080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
1081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * Split the full name into a namespace prefix and the tag name
1082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
1083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	name = xmlSplitQName(ctxt, fullname, &ns);
1084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((name != NULL) && (name[0] == 0)) {
1085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (xmlStrEqual(ns, BAD_CAST "xmlns")) {
1086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlNsErrMsg(ctxt, XML_ERR_NS_DECL_ERROR,
1087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    "invalid namespace declaration '%s'\n",
1088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    fullname, NULL);
1089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    } else {
1090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlNsWarnMsg(ctxt, XML_WAR_NS_COLUMN,
1091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			     "Avoid attribute ending with ':' like '%s'\n",
1092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			     fullname, NULL);
1093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ns != NULL)
1095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlFree(ns);
1096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ns = NULL;
1097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFree(name);
1098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    name = xmlStrdup(fullname);
1099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (name == NULL) {
1102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
1103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ns != NULL)
1104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFree(ns);
1105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
1106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1108df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef LIBXML_HTML_ENABLED
1109df143a5041f03a22808b59c76698770b74692815Selim Gurun    if ((ctxt->html) &&
1110df143a5041f03a22808b59c76698770b74692815Selim Gurun        (value == NULL) && (htmlIsBooleanAttr(fullname))) {
1111df143a5041f03a22808b59c76698770b74692815Selim Gurun            nval = xmlStrdup(fullname);
1112df143a5041f03a22808b59c76698770b74692815Selim Gurun            value = (const xmlChar *) nval;
1113df143a5041f03a22808b59c76698770b74692815Selim Gurun    } else
1114df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif
1115df143a5041f03a22808b59c76698770b74692815Selim Gurun    {
1116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
1117df143a5041f03a22808b59c76698770b74692815Selim Gurun        /*
1118df143a5041f03a22808b59c76698770b74692815Selim Gurun         * Do the last stage of the attribute normalization
1119df143a5041f03a22808b59c76698770b74692815Selim Gurun         * Needed for HTML too:
1120df143a5041f03a22808b59c76698770b74692815Selim Gurun         *   http://www.w3.org/TR/html4/types.html#h-6.2
1121df143a5041f03a22808b59c76698770b74692815Selim Gurun         */
1122df143a5041f03a22808b59c76698770b74692815Selim Gurun        ctxt->vctxt.valid = 1;
1123df143a5041f03a22808b59c76698770b74692815Selim Gurun        nval = xmlValidCtxtNormalizeAttributeValue(&ctxt->vctxt,
1124df143a5041f03a22808b59c76698770b74692815Selim Gurun                                               ctxt->myDoc, ctxt->node,
1125df143a5041f03a22808b59c76698770b74692815Selim Gurun                                               fullname, value);
1126df143a5041f03a22808b59c76698770b74692815Selim Gurun        if (ctxt->vctxt.valid != 1) {
1127df143a5041f03a22808b59c76698770b74692815Selim Gurun            ctxt->valid = 0;
1128df143a5041f03a22808b59c76698770b74692815Selim Gurun        }
1129df143a5041f03a22808b59c76698770b74692815Selim Gurun        if (nval != NULL)
1130df143a5041f03a22808b59c76698770b74692815Selim Gurun            value = nval;
1131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else
1132df143a5041f03a22808b59c76698770b74692815Selim Gurun        nval = NULL;
1133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
1134df143a5041f03a22808b59c76698770b74692815Selim Gurun    }
1135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Check whether it's a namespace definition
1138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((!ctxt->html) && (ns == NULL) &&
1140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (name[0] == 'x') && (name[1] == 'm') && (name[2] == 'l') &&
1141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (name[3] == 'n') && (name[4] == 's') && (name[5] == 0)) {
1142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlNsPtr nsret;
1143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlChar *val;
1144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->replaceEntities) {
1146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->depth++;
1147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF,
1148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		                          0,0,0);
1149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->depth--;
1150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
1151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    val = (xmlChar *) value;
1152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (val[0] != 0) {
1155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlURIPtr uri;
1156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    uri = xmlParseURI((const char *)val);
1158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (uri == NULL) {
1159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
1160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    ctxt->sax->warning(ctxt->userData,
1161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 "xmlns: %s not a valid URI\n", val);
1162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    } else {
1163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (uri->scheme == NULL) {
1164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
1165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			ctxt->sax->warning(ctxt->userData,
1166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			     "xmlns: URI %s is not absolute\n", val);
1167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		}
1168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlFreeURI(uri);
1169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/* a default namespace definition */
1173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	nsret = xmlNewNs(ctxt->node, val, NULL);
1174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
1176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
1177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * Validate also for namespace decls, they are attributes from
1178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * an XML-1.0 perspective
1179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
1180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (nsret != NULL && ctxt->validate && ctxt->wellFormed &&
1181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->myDoc && ctxt->myDoc->intSubset)
1182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc,
1183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					   ctxt->node, prefix, nsret, val);
1184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
1185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (name != NULL)
1186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFree(name);
1187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (nval != NULL)
1188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFree(nval);
1189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (val != value)
1190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFree(val);
1191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
1192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((!ctxt->html) &&
1194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(ns != NULL) && (ns[0] == 'x') && (ns[1] == 'm') && (ns[2] == 'l') &&
1195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (ns[3] == 'n') && (ns[4] == 's') && (ns[5] == 0)) {
1196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlNsPtr nsret;
1197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlChar *val;
1198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->replaceEntities) {
1200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->depth++;
1201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF,
1202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		                          0,0,0);
1203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->depth--;
1204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (val == NULL) {
1205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
1206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        xmlFree(ns);
1207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (name != NULL)
1208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlFree(name);
1209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		return;
1210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
1212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    val = (xmlChar *) value;
1213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (val[0] == 0) {
1216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlNsErrMsg(ctxt, XML_NS_ERR_EMPTY,
1217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		        "Empty namespace name for prefix %s\n", name, NULL);
1218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ctxt->pedantic != 0) && (val[0] != 0)) {
1220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlURIPtr uri;
1221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    uri = xmlParseURI((const char *)val);
1223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (uri == NULL) {
1224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        xmlNsWarnMsg(ctxt, XML_WAR_NS_URI,
1225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 "xmlns:%s: %s not a valid URI\n", name, value);
1226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    } else {
1227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (uri->scheme == NULL) {
1228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlNsWarnMsg(ctxt, XML_WAR_NS_URI_RELATIVE,
1229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			   "xmlns:%s: URI %s is not absolute\n", name, value);
1230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		}
1231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlFreeURI(uri);
1232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/* a standard namespace definition */
1236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	nsret = xmlNewNs(ctxt->node, val, name);
1237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(ns);
1238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
1239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
1240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * Validate also for namespace decls, they are attributes from
1241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * an XML-1.0 perspective
1242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
1243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (nsret != NULL && ctxt->validate && ctxt->wellFormed &&
1244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->myDoc && ctxt->myDoc->intSubset)
1245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc,
1246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					   ctxt->node, prefix, nsret, value);
1247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
1248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (name != NULL)
1249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFree(name);
1250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (nval != NULL)
1251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFree(nval);
1252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (val != value)
1253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFree(val);
1254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
1255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ns != NULL) {
1258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	namespace = xmlSearchNs(ctxt->myDoc, ctxt->node, ns);
1259df143a5041f03a22808b59c76698770b74692815Selim Gurun
1260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (namespace == NULL) {
1261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlNsErrMsg(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE,
1262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    "Namespace prefix %s of attribute %s is not defined\n",
1263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		             ns, name);
1264df143a5041f03a22808b59c76698770b74692815Selim Gurun	} else {
1265df143a5041f03a22808b59c76698770b74692815Selim Gurun            xmlAttrPtr prop;
1266df143a5041f03a22808b59c76698770b74692815Selim Gurun
1267df143a5041f03a22808b59c76698770b74692815Selim Gurun            prop = ctxt->node->properties;
1268df143a5041f03a22808b59c76698770b74692815Selim Gurun            while (prop != NULL) {
1269df143a5041f03a22808b59c76698770b74692815Selim Gurun                if (prop->ns != NULL) {
1270df143a5041f03a22808b59c76698770b74692815Selim Gurun                    if ((xmlStrEqual(name, prop->name)) &&
1271df143a5041f03a22808b59c76698770b74692815Selim Gurun                        ((namespace == prop->ns) ||
1272df143a5041f03a22808b59c76698770b74692815Selim Gurun                         (xmlStrEqual(namespace->href, prop->ns->href)))) {
1273df143a5041f03a22808b59c76698770b74692815Selim Gurun                            xmlNsErrMsg(ctxt, XML_ERR_ATTRIBUTE_REDEFINED,
1274df143a5041f03a22808b59c76698770b74692815Selim Gurun                                    "Attribute %s in %s redefined\n",
1275df143a5041f03a22808b59c76698770b74692815Selim Gurun                                             name, namespace->href);
1276df143a5041f03a22808b59c76698770b74692815Selim Gurun                        ctxt->wellFormed = 0;
1277df143a5041f03a22808b59c76698770b74692815Selim Gurun                        if (ctxt->recovery == 0) ctxt->disableSAX = 1;
1278df143a5041f03a22808b59c76698770b74692815Selim Gurun                        goto error;
1279df143a5041f03a22808b59c76698770b74692815Selim Gurun                    }
1280df143a5041f03a22808b59c76698770b74692815Selim Gurun                }
1281df143a5041f03a22808b59c76698770b74692815Selim Gurun                prop = prop->next;
1282df143a5041f03a22808b59c76698770b74692815Selim Gurun            }
1283df143a5041f03a22808b59c76698770b74692815Selim Gurun        }
1284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
1285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	namespace = NULL;
1286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* !!!!!! <a toto:arg="" xmlns:toto="http://toto.com"> */
1289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ret = xmlNewNsPropEatName(ctxt->node, namespace, name, NULL);
1290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ret != NULL) {
1292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if ((ctxt->replaceEntities == 0) && (!ctxt->html)) {
1293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlNodePtr tmp;
1294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret->children = xmlStringGetNodeList(ctxt->myDoc, value);
1296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    tmp = ret->children;
1297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    while (tmp != NULL) {
1298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		tmp->parent = (xmlNodePtr) ret;
1299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (tmp->next == NULL)
1300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    ret->last = tmp;
1301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		tmp = tmp->next;
1302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else if (value != NULL) {
1304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret->children = xmlNewDocText(ctxt->myDoc, value);
1305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret->last = ret->children;
1306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ret->children != NULL)
1307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ret->children->parent = (xmlNodePtr) ret;
1308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
1312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((!ctxt->html) && ctxt->validate && ctxt->wellFormed &&
1313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->myDoc && ctxt->myDoc->intSubset) {
1314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
1316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * If we don't substitute entities, the validation should be
1317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * done on a value with replaced entities anyway.
1318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
1319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->replaceEntities) {
1320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlChar *val;
1321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->depth++;
1323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF,
1324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		                          0,0,0);
1325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->depth--;
1326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (val == NULL)
1328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
1329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				ctxt->myDoc, ctxt->node, ret, value);
1330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    else {
1331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlChar *nvalnorm;
1332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		/*
1334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 * Do the last stage of the attribute normalization
1335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 * It need to be done twice ... it's an extra burden related
1336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 * to the ability to keep xmlSAX2References in attributes
1337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 */
1338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		nvalnorm = xmlValidNormalizeAttributeValue(ctxt->myDoc,
1339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					    ctxt->node, fullname, val);
1340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (nvalnorm != NULL) {
1341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlFree(val);
1342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    val = nvalnorm;
1343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		}
1344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
1346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			        ctxt->myDoc, ctxt->node, ret, val);
1347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlFree(val);
1348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
1350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt, ctxt->myDoc,
1351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					       ctxt->node, ret, value);
1352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else
1354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
1355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project           if (((ctxt->loadsubset & XML_SKIP_IDS) == 0) &&
1356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	       (((ctxt->replaceEntities == 0) && (ctxt->external != 2)) ||
1357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        ((ctxt->replaceEntities != 0) && (ctxt->inSubset == 0)))) {
1358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        /*
1359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * when validating, the ID registration is done at the attribute
1360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * validation level. Otherwise we have to do specific handling here.
1361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
1362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (xmlStrEqual(fullname, BAD_CAST "xml:id")) {
1363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    /*
1364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * Add the xml:id value
1365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     *
1366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * Open issue: normalization of the value.
1367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     */
1368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (xmlValidateNCName(value, 1) != 0) {
1369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        xmlErrValid(ctxt, XML_DTD_XMLID_VALUE,
1370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		      "xml:id : attribute value %s is not an NCName\n",
1371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    (const char *) value, NULL);
1372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlAddID(&ctxt->vctxt, ctxt->myDoc, value, ret);
1374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else if (xmlIsID(ctxt->myDoc, ctxt->node, ret))
1375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlAddID(&ctxt->vctxt, ctxt->myDoc, value, ret);
1376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else if (xmlIsRef(ctxt->myDoc, ctxt->node, ret))
1377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlAddRef(&ctxt->vctxt, ctxt->myDoc, value, ret);
1378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecterror:
1381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (nval != NULL)
1382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(nval);
1383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ns != NULL)
1384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(ns);
1385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/*
1388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCheckDefaultedAttributes:
1389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check defaulted attributes from the DTD
1391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCheckDefaultedAttributes(xmlParserCtxtPtr ctxt, const xmlChar *name,
1394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	const xmlChar *prefix, const xmlChar **atts) {
1395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlElementPtr elemDecl;
1396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    const xmlChar *att;
1397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int internal = 1;
1398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int i;
1399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    elemDecl = xmlGetDtdQElementDesc(ctxt->myDoc->intSubset, name, prefix);
1401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (elemDecl == NULL) {
1402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	elemDecl = xmlGetDtdQElementDesc(ctxt->myDoc->extSubset, name, prefix);
1403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	internal = 0;
1404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectprocess_external_subset:
1407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (elemDecl != NULL) {
1409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlAttributePtr attr = elemDecl->attributes;
1410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
1411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * Check against defaulted attributes from the external subset
1412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * if the document is stamped as standalone
1413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
1414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ctxt->myDoc->standalone == 1) &&
1415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (ctxt->myDoc->extSubset != NULL) &&
1416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (ctxt->validate)) {
1417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    while (attr != NULL) {
1418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if ((attr->defaultValue != NULL) &&
1419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    (xmlGetDtdQAttrDesc(ctxt->myDoc->extSubset,
1420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					attr->elem, attr->name,
1421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					attr->prefix) == attr) &&
1422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    (xmlGetDtdQAttrDesc(ctxt->myDoc->intSubset,
1423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					attr->elem, attr->name,
1424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					attr->prefix) == NULL)) {
1425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlChar *fulln;
1426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    if (attr->prefix != NULL) {
1428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			fulln = xmlStrdup(attr->prefix);
1429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			fulln = xmlStrcat(fulln, BAD_CAST ":");
1430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			fulln = xmlStrcat(fulln, attr->name);
1431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    } else {
1432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			fulln = xmlStrdup(attr->name);
1433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    }
1434df143a5041f03a22808b59c76698770b74692815Selim Gurun                    if (fulln == NULL) {
1435df143a5041f03a22808b59c76698770b74692815Selim Gurun                        xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
1436df143a5041f03a22808b59c76698770b74692815Selim Gurun                        break;
1437df143a5041f03a22808b59c76698770b74692815Selim Gurun                    }
1438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    /*
1440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		     * Check that the attribute is not declared in the
1441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		     * serialization
1442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		     */
1443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    att = NULL;
1444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    if (atts != NULL) {
1445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			i = 0;
1446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			att = atts[i];
1447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			while (att != NULL) {
1448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    if (xmlStrEqual(att, fulln))
1449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				break;
1450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    i += 2;
1451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    att = atts[i];
1452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			}
1453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    }
1454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    if (att == NULL) {
1455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		        xmlErrValid(ctxt, XML_DTD_STANDALONE_DEFAULTED,
1456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project      "standalone: attribute %s on %s defaulted from external subset\n",
1457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    (const char *)fulln,
1458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    (const char *)attr->elem);
1459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    }
1460df143a5041f03a22808b59c76698770b74692815Selim Gurun                    xmlFree(fulln);
1461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		}
1462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		attr = attr->nexth;
1463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
1467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * Actually insert defaulted values when needed
1468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
1469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	attr = elemDecl->attributes;
1470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	while (attr != NULL) {
1471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    /*
1472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * Make sure that attributes redefinition occuring in the
1473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * internal subset are not overriden by definitions in the
1474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * external subset.
1475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     */
1476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (attr->defaultValue != NULL) {
1477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		/*
1478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 * the element should be instantiated in the tree if:
1479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 *  - this is a namespace prefix
1480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 *  - the user required for completion in the tree
1481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 *    like XSLT
1482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 *  - there isn't already an attribute definition
1483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 *    in the internal subset overriding it.
1484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 */
1485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (((attr->prefix != NULL) &&
1486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		     (xmlStrEqual(attr->prefix, BAD_CAST "xmlns"))) ||
1487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    ((attr->prefix == NULL) &&
1488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		     (xmlStrEqual(attr->name, BAD_CAST "xmlns"))) ||
1489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    (ctxt->loadsubset & XML_COMPLETE_ATTRS)) {
1490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlAttributePtr tst;
1491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    tst = xmlGetDtdQAttrDesc(ctxt->myDoc->intSubset,
1493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					     attr->elem, attr->name,
1494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					     attr->prefix);
1495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    if ((tst == attr) || (tst == NULL)) {
1496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		        xmlChar fn[50];
1497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			xmlChar *fulln;
1498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        fulln = xmlBuildQName(attr->name, attr->prefix, fn, 50);
1500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			if (fulln == NULL) {
1501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
1502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    return;
1503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			}
1504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			/*
1506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 * Check that the attribute is not declared in the
1507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 * serialization
1508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 */
1509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			att = NULL;
1510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			if (atts != NULL) {
1511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    i = 0;
1512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    att = atts[i];
1513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    while (att != NULL) {
1514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				if (xmlStrEqual(att, fulln))
1515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    break;
1516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				i += 2;
1517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				att = atts[i];
1518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    }
1519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			}
1520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			if (att == NULL) {
1521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    xmlSAX2AttributeInternal(ctxt, fulln,
1522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project						 attr->defaultValue, prefix);
1523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			}
1524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			if ((fulln != fn) && (fulln != attr->name))
1525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    xmlFree(fulln);
1526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    }
1527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		}
1528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    attr = attr->nexth;
1530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (internal == 1) {
1532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    elemDecl = xmlGetDtdQElementDesc(ctxt->myDoc->extSubset,
1533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		                             name, prefix);
1534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    internal = 0;
1535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    goto process_external_subset;
1536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2StartElement:
1542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
1543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fullname:  The element name, including namespace prefix
1544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @atts:  An array of name/value attributes pairs, NULL terminated
1545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * called when an opening tag has been processed.
1547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2StartElement(void *ctx, const xmlChar *fullname, const xmlChar **atts)
1550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
1552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr ret;
1553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr parent;
1554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNsPtr ns;
1555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar *name;
1556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar *prefix;
1557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    const xmlChar *att;
1558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    const xmlChar *value;
1559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int i;
1560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctx == NULL) || (fullname == NULL) || (ctxt->myDoc == NULL)) return;
1562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    parent = ctxt->node;
1563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
1564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
1565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2StartElement(%s)\n", fullname);
1566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
1567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * First check on validity:
1570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) &&
1572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ((ctxt->myDoc->intSubset == NULL) ||
1573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 ((ctxt->myDoc->intSubset->notations == NULL) &&
1574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	  (ctxt->myDoc->intSubset->elements == NULL) &&
1575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	  (ctxt->myDoc->intSubset->attributes == NULL) &&
1576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	  (ctxt->myDoc->intSubset->entities == NULL)))) {
1577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlErrValid(ctxt, XML_ERR_NO_DTD,
1578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	  "Validation failed: no DTD found !", NULL, NULL);
1579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->validate = 0;
1580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Split the full name into a namespace prefix and the tag name
1585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    name = xmlSplitQName(ctxt, fullname, &prefix);
1587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Note : the namespace resolution is deferred until the end of the
1591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     *        attributes parsing, since local namespace can be defined as
1592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     *        an attribute at this level.
1593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL, name, NULL);
1595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ret == NULL) {
1596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (prefix != NULL)
1597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFree(prefix);
1598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
1599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
1600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->myDoc->children == NULL) {
1602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
1603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericError(xmlGenericErrorContext, "Setting %s as root\n", name);
1604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
1605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret);
1606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (parent == NULL) {
1607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        parent = ctxt->myDoc->children;
1608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->nodemem = -1;
1610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->linenumbers) {
1611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->input != NULL) {
1612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ctxt->input->line < 65535)
1613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ret->line = (short) ctxt->input->line;
1614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    else
1615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        ret->line = 65535;
1616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * We are parsing a new node.
1621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
1623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "pushing(%s)\n", name);
1624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
1625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    nodePush(ctxt, ret);
1626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Link the child element
1629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (parent != NULL) {
1631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (parent->type == XML_ELEMENT_NODE) {
1632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
1633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlGenericError(xmlGenericErrorContext,
1634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    "adding child %s to %s\n", name, parent->name);
1635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
1636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlAddChild(parent, ret);
1637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
1638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
1639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlGenericError(xmlGenericErrorContext,
1640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    "adding sibling %s to ", name);
1641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugDumpOneNode(stderr, parent, 0);
1642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
1643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlAddSibling(parent, ret);
1644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Insert all the defaulted attributes from the DTD especially namespaces
1649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((!ctxt->html) &&
1651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	((ctxt->myDoc->intSubset != NULL) ||
1652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 (ctxt->myDoc->extSubset != NULL))) {
1653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlCheckDefaultedAttributes(ctxt, name, prefix, atts);
1654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * process all the attributes whose name start with "xmlns"
1658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (atts != NULL) {
1660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        i = 0;
1661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	att = atts[i++];
1662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	value = atts[i++];
1663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (!ctxt->html) {
1664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    while ((att != NULL) && (value != NULL)) {
1665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if ((att[0] == 'x') && (att[1] == 'm') && (att[2] == 'l') &&
1666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    (att[3] == 'n') && (att[4] == 's'))
1667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlSAX2AttributeInternal(ctxt, att, value, prefix);
1668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		att = atts[i++];
1670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		value = atts[i++];
1671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Search the namespace, note that since the attributes have been
1677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * processed, the local namespaces are available.
1678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ns = xmlSearchNs(ctxt->myDoc, ret, prefix);
1680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ns == NULL) && (parent != NULL))
1681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ns = xmlSearchNs(ctxt->myDoc, parent, prefix);
1682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((prefix != NULL) && (ns == NULL)) {
1683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ns = xmlNewNs(ret, NULL, prefix);
1684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlNsWarnMsg(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE,
1685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		     "Namespace prefix %s is not defined\n",
1686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		     prefix, NULL);
1687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * set the namespace node, making sure that if the default namspace
1691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * is unbound on a parent we simply kee it NULL
1692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ns != NULL) && (ns->href != NULL) &&
1694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	((ns->href[0] != 0) || (ns->prefix != NULL)))
1695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlSetNs(ret, ns);
1696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * process all the other attributes
1699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (atts != NULL) {
1701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        i = 0;
1702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	att = atts[i++];
1703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	value = atts[i++];
1704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->html) {
1705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    while (att != NULL) {
1706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlSAX2AttributeInternal(ctxt, att, value, NULL);
1707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		att = atts[i++];
1708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		value = atts[i++];
1709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
1711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    while ((att != NULL) && (value != NULL)) {
1712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if ((att[0] != 'x') || (att[1] != 'm') || (att[2] != 'l') ||
1713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    (att[3] != 'n') || (att[4] != 's'))
1714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlSAX2AttributeInternal(ctxt, att, value, NULL);
1715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		/*
1717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 * Next ones
1718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 */
1719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		att = atts[i++];
1720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		value = atts[i++];
1721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
1726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * If it's the Document root, finish the DTD validation and
1728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * check the document root element for validity
1729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->validate) && (ctxt->vctxt.finishDtd == XML_CTXT_FINISH_DTD_0)) {
1731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int chk;
1732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	chk = xmlValidateDtdFinal(&ctxt->vctxt, ctxt->myDoc);
1734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (chk <= 0)
1735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->valid = 0;
1736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (chk < 0)
1737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->wellFormed = 0;
1738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->valid &= xmlValidateRoot(&ctxt->vctxt, ctxt->myDoc);
1739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->vctxt.finishDtd = XML_CTXT_FINISH_DTD_1;
1740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
1742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (prefix != NULL)
1744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(prefix);
1745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2EndElement:
1750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
1751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name:  The element name
1752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * called when the end of an element has been detected.
1754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2EndElement(void *ctx, const xmlChar *name ATTRIBUTE_UNUSED)
1757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
1759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserNodeInfo node_info;
1760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr cur;
1761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
1763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    cur = ctxt->node;
1764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
1765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (name == NULL)
1766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2EndElement(NULL)\n");
1767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else
1768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2EndElement(%s)\n", name);
1769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
1770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* Capture end position and add node */
1772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (cur != NULL && ctxt->record_info) {
1773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project      node_info.end_pos = ctxt->input->cur - ctxt->input->base;
1774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project      node_info.end_line = ctxt->input->line;
1775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project      node_info.node = cur;
1776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project      xmlParserAddNodeInfo(ctxt, &node_info);
1777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->nodemem = -1;
1779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
1781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->validate && ctxt->wellFormed &&
1782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->myDoc && ctxt->myDoc->intSubset)
1783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->valid &= xmlValidateOneElement(&ctxt->vctxt, ctxt->myDoc,
1784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					     cur);
1785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
1786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * end of parsing of this node.
1790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
1792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "popping(%s)\n", cur->name);
1793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
1794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    nodePop(ctxt);
1795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED || LIBXML_HTML_ENABLE */
1797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/*
1799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2TextNode:
1800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the parser context
1801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str:  the input string
1802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: the string length
1803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Remove the entities from an attribute value
1805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the newly allocated string or NULL if not needed or error
1807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlNodePtr
1809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2TextNode(xmlParserCtxtPtr ctxt, const xmlChar *str, int len) {
1810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr ret;
1811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    const xmlChar *intern = NULL;
1812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Allocate
1815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->freeElems != NULL) {
1817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret = ctxt->freeElems;
1818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->freeElems = ret->next;
1819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->freeElemsNr--;
1820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
1821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
1822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ret == NULL) {
1824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlErrMemory(ctxt, "xmlSAX2Characters");
1825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return(NULL);
1826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    memset(ret, 0, sizeof(xmlNode));
1828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * intern the formatting blanks found between tags, or the
1830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * very short strings
1831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->dictNames) {
1833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlChar cur = str[len];
1834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((len < (int) (2 * sizeof(void *))) &&
1836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (ctxt->options & XML_PARSE_COMPACT)) {
1837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    /* store the string in the node overrithing properties and nsDef */
1838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlChar *tmp = (xmlChar *) &(ret->properties);
1839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    memcpy(tmp, str, len);
1840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    tmp[len] = 0;
1841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    intern = tmp;
1842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else if ((len <= 3) && ((cur == '"') || (cur == '\'') ||
1843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ((cur == '<') && (str[len + 1] != '!')))) {
1844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    intern = xmlDictLookup(ctxt->dict, str, len);
1845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else if (IS_BLANK_CH(*str) && (len < 60) && (cur == '<') &&
1846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	           (str[len + 1] != '!')) {
1847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    int i;
1848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    for (i = 1;i < len;i++) {
1850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (!IS_BLANK_CH(str[i])) goto skip;
1851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    intern = xmlDictLookup(ctxt->dict, str, len);
1853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectskip:
1856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ret->type = XML_TEXT_NODE;
1857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ret->name = xmlStringText;
1859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (intern == NULL) {
1860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret->content = xmlStrndup(str, len);
1861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ret->content == NULL) {
1862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlSAX2ErrMemory(ctxt, "xmlSAX2TextNode");
1863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFree(ret);
1864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return(NULL);
1865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else
1867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret->content = (xmlChar *) intern;
1868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
186960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott    if (ctxt->input != NULL)
187060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott        ret->line = ctxt->input->line;
187160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott
1872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
1873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlRegisterNodeDefaultValue(ret);
1874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ret);
1875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
1878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/*
1879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2DecodeAttrEntities:
1880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the parser context
1881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str:  the input string
1882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: the string length
1883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Remove the entities from an attribute value
1885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the newly allocated string or NULL if not needed or error
1887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar *
1889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2DecodeAttrEntities(xmlParserCtxtPtr ctxt, const xmlChar *str,
1890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                          const xmlChar *end) {
1891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    const xmlChar *in;
1892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar *ret;
1893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    in = str;
1895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while (in < end)
1896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (*in++ == '&')
1897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    goto decode;
1898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(NULL);
1899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectdecode:
1900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->depth++;
1901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ret = xmlStringLenDecodeEntities(ctxt, str, end - str,
1902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				     XML_SUBSTITUTE_REF, 0,0,0);
1903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->depth--;
1904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ret);
1905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
1907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2AttributeNs:
1910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
1911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @localname:  the local name of the attribute
1912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefix:  the attribute namespace prefix if available
1913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URI:  the attribute namespace name if available
1914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value:  Start of the attribute value
1915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @valueend: end of the attribute value
1916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle an attribute that has been read by the parser.
1918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The default handling is to convert the attribute into an
1919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * DOM subtree and past it in a new xmlAttr element added to
1920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the element.
1921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
1924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                   const xmlChar * localname,
1925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                   const xmlChar * prefix,
1926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		   const xmlChar * value,
1927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		   const xmlChar * valueend)
1928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlAttrPtr ret;
1930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNsPtr namespace = NULL;
1931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar *dup = NULL;
1932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Note: if prefix == NULL, the attribute is not in the default namespace
1935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (prefix != NULL)
1937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	namespace = xmlSearchNs(ctxt->myDoc, ctxt->node, prefix);
1938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * allocate the node
1941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->freeAttrs != NULL) {
1943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ret = ctxt->freeAttrs;
1944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->freeAttrs = ret->next;
1945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->freeAttrsNr--;
1946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	memset(ret, 0, sizeof(xmlAttr));
1947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret->type = XML_ATTRIBUTE_NODE;
1948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret->parent = ctxt->node;
1950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret->doc = ctxt->myDoc;
1951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret->ns = namespace;
1952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->dictNames)
1954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret->name = localname;
1955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else
1956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret->name = xmlStrdup(localname);
1957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        /* link at the end to preserv order, TODO speed up with a last */
1959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->node->properties == NULL) {
1960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->node->properties = ret;
1961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
1962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlAttrPtr prev = ctxt->node->properties;
1963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    while (prev->next != NULL) prev = prev->next;
1965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    prev->next = ret;
1966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret->prev = prev;
1967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
1970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
1971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
1972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->dictNames)
1973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret = xmlNewNsPropEatName(ctxt->node, namespace,
1974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                              (xmlChar *) localname, NULL);
1975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else
1976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret = xmlNewNsProp(ctxt->node, namespace, localname, NULL);
1977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ret == NULL) {
1978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlErrMemory(ctxt, "xmlSAX2AttributeNs");
1979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return;
1980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->replaceEntities == 0) && (!ctxt->html)) {
1984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlNodePtr tmp;
1985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
1987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * We know that if there is an entity reference, then
1988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * the string has been dup'ed and terminates with 0
1989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * otherwise with ' or "
1990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
1991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (*valueend != 0) {
1992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    tmp = xmlSAX2TextNode(ctxt, value, valueend - value);
1993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret->children = tmp;
1994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret->last = tmp;
1995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (tmp != NULL) {
1996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		tmp->doc = ret->doc;
1997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		tmp->parent = (xmlNodePtr) ret;
1998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
1999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
2000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret->children = xmlStringLenGetNodeList(ctxt->myDoc, value,
2001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project						    valueend - value);
2002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    tmp = ret->children;
2003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    while (tmp != NULL) {
2004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        tmp->doc = ret->doc;
2005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		tmp->parent = (xmlNodePtr) ret;
2006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (tmp->next == NULL)
2007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    ret->last = tmp;
2008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		tmp = tmp->next;
2009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
2010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (value != NULL) {
2012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlNodePtr tmp;
2013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	tmp = xmlSAX2TextNode(ctxt, value, valueend - value);
2015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret->children = tmp;
2016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret->last = tmp;
2017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (tmp != NULL) {
2018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    tmp->doc = ret->doc;
2019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    tmp->parent = (xmlNodePtr) ret;
2020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
2024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((!ctxt->html) && ctxt->validate && ctxt->wellFormed &&
2025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->myDoc && ctxt->myDoc->intSubset) {
2026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
2027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * If we don't substitute entities, the validation should be
2028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * done on a value with replaced entities anyway.
2029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
2030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->replaceEntities) {
2031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    dup = xmlSAX2DecodeAttrEntities(ctxt, value, valueend);
2032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (dup == NULL) {
2033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        if (*valueend == 0) {
2034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
2035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    ctxt->myDoc, ctxt->node, ret, value);
2036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		} else {
2037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    /*
2038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		     * That should already be normalized.
2039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		     * cheaper to finally allocate here than duplicate
2040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		     * entry points in the full validation code
2041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		     */
2042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    dup = xmlStrndup(value, valueend - value);
2043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
2045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    ctxt->myDoc, ctxt->node, ret, dup);
2046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		}
2047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    } else {
2048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        /*
2049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 * dup now contains a string of the flattened attribute
2050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 * content with entities substitued. Check if we need to
2051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 * apply an extra layer of normalization.
2052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 * It need to be done twice ... it's an extra burden related
2053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 * to the ability to keep references in attributes
2054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		 */
2055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (ctxt->attsSpecial != NULL) {
2056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlChar *nvalnorm;
2057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlChar fn[50];
2058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlChar *fullname;
2059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    fullname = xmlBuildQName(localname, prefix, fn, 50);
2061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    if (fullname != NULL) {
2062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			ctxt->vctxt.valid = 1;
2063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		        nvalnorm = xmlValidCtxtNormalizeAttributeValue(
2064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			                 &ctxt->vctxt, ctxt->myDoc,
2065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					 ctxt->node, fullname, dup);
2066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			if (ctxt->vctxt.valid != 1)
2067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    ctxt->valid = 0;
2068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			if ((fullname != fn) && (fullname != localname))
2070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    xmlFree(fullname);
2071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			if (nvalnorm != NULL) {
2072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    xmlFree(dup);
2073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    dup = nvalnorm;
2074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			}
2075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    }
2076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		}
2077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
2079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			        ctxt->myDoc, ctxt->node, ret, dup);
2080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
2081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
2082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    /*
2083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * if entities already have been substitued, then
2084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * the attribute as passed is already normalized
2085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     */
2086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    dup = xmlStrndup(value, valueend - value);
2087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
2089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                             ctxt->myDoc, ctxt->node, ret, dup);
2090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else
2092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
2093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project           if (((ctxt->loadsubset & XML_SKIP_IDS) == 0) &&
2094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	       (((ctxt->replaceEntities == 0) && (ctxt->external != 2)) ||
2095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        ((ctxt->replaceEntities != 0) && (ctxt->inSubset == 0)))) {
2096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        /*
2097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * when validating, the ID registration is done at the attribute
2098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * validation level. Otherwise we have to do specific handling here.
2099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
2100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if ((prefix == ctxt->str_xml) &&
2101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	           (localname[0] == 'i') && (localname[1] == 'd') &&
2102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		   (localname[2] == 0)) {
2103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    /*
2104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * Add the xml:id value
2105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     *
2106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * Open issue: normalization of the value.
2107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     */
2108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (dup == NULL)
2109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        dup = xmlStrndup(value, valueend - value);
2110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
2111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (xmlValidateNCName(dup, 1) != 0) {
2112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        xmlErrValid(ctxt, XML_DTD_XMLID_VALUE,
2113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		      "xml:id : attribute value %s is not an NCName\n",
2114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    (const char *) dup, NULL);
2115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
2116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlAddID(&ctxt->vctxt, ctxt->myDoc, dup, ret);
2118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else if (xmlIsID(ctxt->myDoc, ctxt->node, ret)) {
2119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    /* might be worth duplicate entry points and not copy */
2120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (dup == NULL)
2121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        dup = xmlStrndup(value, valueend - value);
2122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlAddID(&ctxt->vctxt, ctxt->myDoc, dup, ret);
2123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else if (xmlIsRef(ctxt->myDoc, ctxt->node, ret)) {
2124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (dup == NULL)
2125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        dup = xmlStrndup(value, valueend - value);
2126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlAddRef(&ctxt->vctxt, ctxt->myDoc, dup, ret);
2127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (dup != NULL)
2130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(dup);
2131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2StartElementNs:
2135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  the user data (XML parser context)
2136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @localname:  the local name of the element
2137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefix:  the element namespace prefix if available
2138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URI:  the element namespace name if available
2139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @nb_namespaces:  number of namespace definitions on that node
2140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @namespaces:  pointer to the array of prefix/URI pairs namespace definitions
2141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @nb_attributes:  the number of attributes on that node
2142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @nb_defaulted:  the number of defaulted attributes.
2143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @attributes:  pointer to the array of (localname/prefix/URI/value/end)
2144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *               attribute values.
2145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX2 callback when an element start has been detected by the parser.
2147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It provides the namespace informations for the element, as well as
2148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the new namespace declarations on the element.
2149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2StartElementNs(void *ctx,
2152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                      const xmlChar *localname,
2153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		      const xmlChar *prefix,
2154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		      const xmlChar *URI,
2155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		      int nb_namespaces,
2156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		      const xmlChar **namespaces,
2157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		      int nb_attributes,
2158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		      int nb_defaulted,
2159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		      const xmlChar **attributes)
2160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
2162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr ret;
2163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr parent;
2164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNsPtr last = NULL, ns;
2165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    const xmlChar *uri, *pref;
2166df143a5041f03a22808b59c76698770b74692815Selim Gurun    xmlChar *lname = NULL;
2167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int i, j;
2168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
2170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    parent = ctxt->node;
2171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * First check on validity:
2173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) &&
2175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ((ctxt->myDoc->intSubset == NULL) ||
2176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 ((ctxt->myDoc->intSubset->notations == NULL) &&
2177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	  (ctxt->myDoc->intSubset->elements == NULL) &&
2178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	  (ctxt->myDoc->intSubset->attributes == NULL) &&
2179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	  (ctxt->myDoc->intSubset->entities == NULL)))) {
2180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlErrValid(ctxt, XML_ERR_NO_DTD,
2181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	  "Validation failed: no DTD found !", NULL, NULL);
2182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->validate = 0;
2183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2186df143a5041f03a22808b59c76698770b74692815Selim Gurun     * Take care of the rare case of an undefined namespace prefix
2187df143a5041f03a22808b59c76698770b74692815Selim Gurun     */
2188df143a5041f03a22808b59c76698770b74692815Selim Gurun    if ((prefix != NULL) && (URI == NULL)) {
2189df143a5041f03a22808b59c76698770b74692815Selim Gurun        if (ctxt->dictNames) {
2190df143a5041f03a22808b59c76698770b74692815Selim Gurun	    const xmlChar *fullname;
2191df143a5041f03a22808b59c76698770b74692815Selim Gurun
2192df143a5041f03a22808b59c76698770b74692815Selim Gurun	    fullname = xmlDictQLookup(ctxt->dict, prefix, localname);
2193df143a5041f03a22808b59c76698770b74692815Selim Gurun	    if (fullname != NULL)
2194df143a5041f03a22808b59c76698770b74692815Selim Gurun	        localname = fullname;
2195df143a5041f03a22808b59c76698770b74692815Selim Gurun	} else {
2196df143a5041f03a22808b59c76698770b74692815Selim Gurun	    lname = xmlBuildQName(localname, prefix, NULL, 0);
2197df143a5041f03a22808b59c76698770b74692815Selim Gurun	}
2198df143a5041f03a22808b59c76698770b74692815Selim Gurun    }
2199df143a5041f03a22808b59c76698770b74692815Selim Gurun    /*
2200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * allocate the node
2201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->freeElems != NULL) {
2203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ret = ctxt->freeElems;
2204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->freeElems = ret->next;
2205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->freeElemsNr--;
2206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	memset(ret, 0, sizeof(xmlNode));
2207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret->type = XML_ELEMENT_NODE;
2208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->dictNames)
2210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret->name = localname;
2211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else {
2212df143a5041f03a22808b59c76698770b74692815Selim Gurun	    if (lname == NULL)
2213df143a5041f03a22808b59c76698770b74692815Selim Gurun		ret->name = xmlStrdup(localname);
2214df143a5041f03a22808b59c76698770b74692815Selim Gurun	    else
2215df143a5041f03a22808b59c76698770b74692815Selim Gurun	        ret->name = lname;
2216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ret->name == NULL) {
2217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs");
2218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		return;
2219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
2220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
2222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlRegisterNodeDefaultValue(ret);
2223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->dictNames)
2225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL,
2226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                               (xmlChar *) localname, NULL);
2227df143a5041f03a22808b59c76698770b74692815Selim Gurun	else if (lname == NULL)
2228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret = xmlNewDocNode(ctxt->myDoc, NULL, localname, NULL);
2229df143a5041f03a22808b59c76698770b74692815Selim Gurun	else
2230df143a5041f03a22808b59c76698770b74692815Selim Gurun	    ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL,
2231df143a5041f03a22808b59c76698770b74692815Selim Gurun	                               (xmlChar *) lname, NULL);
2232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ret == NULL) {
2233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs");
2234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return;
2235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->linenumbers) {
2238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->input != NULL) {
2239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ctxt->input->line < 65535)
2240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ret->line = (short) ctxt->input->line;
2241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    else
2242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        ret->line = 65535;
2243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->myDoc->children == NULL) || (parent == NULL)) {
2247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret);
2248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Build the namespace list
2251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    for (i = 0,j = 0;j < nb_namespaces;j++) {
2253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        pref = namespaces[i++];
2254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	uri = namespaces[i++];
2255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ns = xmlNewNs(NULL, uri, pref);
2256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ns != NULL) {
2257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (last == NULL) {
2258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        ret->nsDef = last = ns;
2259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    } else {
2260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        last->next = ns;
2261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		last = ns;
2262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
2263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if ((URI != NULL) && (prefix == pref))
2264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ret->ns = ns;
2265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
2266df143a5041f03a22808b59c76698770b74692815Selim Gurun            /*
2267df143a5041f03a22808b59c76698770b74692815Selim Gurun             * any out of memory error would already have been raised
2268df143a5041f03a22808b59c76698770b74692815Selim Gurun             * but we can't be garanteed it's the actual error due to the
2269df143a5041f03a22808b59c76698770b74692815Selim Gurun             * API, best is to skip in this case
2270df143a5041f03a22808b59c76698770b74692815Selim Gurun             */
2271df143a5041f03a22808b59c76698770b74692815Selim Gurun	    continue;
2272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
2274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((!ctxt->html) && ctxt->validate && ctxt->wellFormed &&
2275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->myDoc && ctxt->myDoc->intSubset) {
2276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc,
2277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                                           ret, prefix, ns, uri);
2278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
2280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->nodemem = -1;
2282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * We are parsing a new node.
2285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    nodePush(ctxt, ret);
2287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Link the child element
2290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (parent != NULL) {
2292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (parent->type == XML_ELEMENT_NODE) {
2293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlAddChild(parent, ret);
2294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
2295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlAddSibling(parent, ret);
2296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Insert the defaulted attributes from the DTD only if requested:
2301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((nb_defaulted != 0) &&
2303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ((ctxt->loadsubset & XML_COMPLETE_ATTRS) == 0))
2304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	nb_attributes -= nb_defaulted;
2305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Search the namespace if it wasn't already found
2308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Note that, if prefix is NULL, this searches for the default Ns
2309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((URI != NULL) && (ret->ns == NULL)) {
2311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ret->ns = xmlSearchNs(ctxt->myDoc, parent, prefix);
2312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ret->ns == NULL) && (xmlStrEqual(prefix, BAD_CAST "xml"))) {
2313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret->ns = xmlSearchNs(ctxt->myDoc, ret, prefix);
2314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ret->ns == NULL) {
2316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ns = xmlNewNs(ret, NULL, prefix);
2317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ns == NULL) {
2318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs");
2320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		return;
2321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
2322df143a5041f03a22808b59c76698770b74692815Selim Gurun            if (prefix != NULL)
2323df143a5041f03a22808b59c76698770b74692815Selim Gurun                xmlNsWarnMsg(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE,
2324df143a5041f03a22808b59c76698770b74692815Selim Gurun                             "Namespace prefix %s was not found\n",
2325df143a5041f03a22808b59c76698770b74692815Selim Gurun                             prefix, NULL);
2326df143a5041f03a22808b59c76698770b74692815Selim Gurun            else
2327df143a5041f03a22808b59c76698770b74692815Selim Gurun                xmlNsWarnMsg(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE,
2328df143a5041f03a22808b59c76698770b74692815Selim Gurun                             "Namespace default prefix was not found\n",
2329df143a5041f03a22808b59c76698770b74692815Selim Gurun                             NULL, NULL);
2330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * process all the other attributes
2335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (nb_attributes > 0) {
2337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        for (j = 0,i = 0;i < nb_attributes;i++,j+=5) {
2338df143a5041f03a22808b59c76698770b74692815Selim Gurun	    /*
2339df143a5041f03a22808b59c76698770b74692815Selim Gurun	     * Handle the rare case of an undefined atribute prefix
2340df143a5041f03a22808b59c76698770b74692815Selim Gurun	     */
2341df143a5041f03a22808b59c76698770b74692815Selim Gurun	    if ((attributes[j+1] != NULL) && (attributes[j+2] == NULL)) {
2342df143a5041f03a22808b59c76698770b74692815Selim Gurun		if (ctxt->dictNames) {
2343df143a5041f03a22808b59c76698770b74692815Selim Gurun		    const xmlChar *fullname;
2344df143a5041f03a22808b59c76698770b74692815Selim Gurun
2345df143a5041f03a22808b59c76698770b74692815Selim Gurun		    fullname = xmlDictQLookup(ctxt->dict, attributes[j+1],
2346df143a5041f03a22808b59c76698770b74692815Selim Gurun		                              attributes[j]);
2347df143a5041f03a22808b59c76698770b74692815Selim Gurun		    if (fullname != NULL) {
2348df143a5041f03a22808b59c76698770b74692815Selim Gurun			xmlSAX2AttributeNs(ctxt, fullname, NULL,
2349df143a5041f03a22808b59c76698770b74692815Selim Gurun			                   attributes[j+3], attributes[j+4]);
2350df143a5041f03a22808b59c76698770b74692815Selim Gurun		        continue;
2351df143a5041f03a22808b59c76698770b74692815Selim Gurun		    }
2352df143a5041f03a22808b59c76698770b74692815Selim Gurun		} else {
2353df143a5041f03a22808b59c76698770b74692815Selim Gurun		    lname = xmlBuildQName(attributes[j], attributes[j+1],
2354df143a5041f03a22808b59c76698770b74692815Selim Gurun		                          NULL, 0);
2355df143a5041f03a22808b59c76698770b74692815Selim Gurun		    if (lname != NULL) {
2356df143a5041f03a22808b59c76698770b74692815Selim Gurun			xmlSAX2AttributeNs(ctxt, lname, NULL,
2357df143a5041f03a22808b59c76698770b74692815Selim Gurun			                   attributes[j+3], attributes[j+4]);
2358df143a5041f03a22808b59c76698770b74692815Selim Gurun			xmlFree(lname);
2359df143a5041f03a22808b59c76698770b74692815Selim Gurun		        continue;
2360df143a5041f03a22808b59c76698770b74692815Selim Gurun		    }
2361df143a5041f03a22808b59c76698770b74692815Selim Gurun		}
2362df143a5041f03a22808b59c76698770b74692815Selim Gurun	    }
2363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlSAX2AttributeNs(ctxt, attributes[j], attributes[j+1],
2364df143a5041f03a22808b59c76698770b74692815Selim Gurun			       attributes[j+3], attributes[j+4]);
2365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
2369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * If it's the Document root, finish the DTD validation and
2371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * check the document root element for validity
2372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->validate) && (ctxt->vctxt.finishDtd == XML_CTXT_FINISH_DTD_0)) {
2374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int chk;
2375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	chk = xmlValidateDtdFinal(&ctxt->vctxt, ctxt->myDoc);
2377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (chk <= 0)
2378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->valid = 0;
2379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (chk < 0)
2380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->wellFormed = 0;
2381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->valid &= xmlValidateRoot(&ctxt->vctxt, ctxt->myDoc);
2382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt->vctxt.finishDtd = XML_CTXT_FINISH_DTD_1;
2383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
2385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2EndElementNs:
2389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  the user data (XML parser context)
2390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @localname:  the local name of the element
2391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefix:  the element namespace prefix if available
2392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URI:  the element namespace name if available
2393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX2 callback when an element end has been detected by the parser.
2395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It provides the namespace informations for the element.
2396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2EndElementNs(void *ctx,
2399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    const xmlChar * localname ATTRIBUTE_UNUSED,
2400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    const xmlChar * prefix ATTRIBUTE_UNUSED,
2401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    const xmlChar * URI ATTRIBUTE_UNUSED)
2402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
2404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserNodeInfo node_info;
2405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr cur;
2406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
2408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    cur = ctxt->node;
2409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* Capture end position and add node */
2410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->record_info) && (cur != NULL)) {
2411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        node_info.end_pos = ctxt->input->cur - ctxt->input->base;
2412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        node_info.end_line = ctxt->input->line;
2413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        node_info.node = cur;
2414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlParserAddNodeInfo(ctxt, &node_info);
2415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->nodemem = -1;
2417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
2419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->validate && ctxt->wellFormed &&
2420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->myDoc && ctxt->myDoc->intSubset)
2421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->valid &= xmlValidateOneElement(&ctxt->vctxt, ctxt->myDoc, cur);
2422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
2423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * end of parsing of this node.
2426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    nodePop(ctxt);
2428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2Reference:
2432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
2433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name:  The entity name
2434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * called when an entity xmlSAX2Reference is detected.
2436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2Reference(void *ctx, const xmlChar *name)
2439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
2441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr ret;
2442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
2444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
2445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
2446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2Reference(%s)\n", name);
2447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (name[0] == '#')
2449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret = xmlNewCharRef(ctxt->myDoc, name);
2450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else
2451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret = xmlNewReference(ctxt->myDoc, name);
2452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
2453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
2454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "add xmlSAX2Reference %s to %s \n", name, ctxt->node->name);
2455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
245660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott    if (xmlAddChild(ctxt->node, ret) == NULL) {
245760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott        xmlFreeNode(ret);
245860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott    }
2459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2Characters:
2463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
2464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ch:  a xmlChar string
2465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: the number of xmlChar
2466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * receiving some chars from the parser.
2468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2Characters(void *ctx, const xmlChar *ch, int len)
2471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
2473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr lastChild;
2474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
2476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
2477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
2478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2Characters(%.30s, %d)\n", ch, len);
2479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Handle the data if any. If there is no child
2482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * add it as content, otherwise if the last child is text,
2483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * concatenate it, else create a new node of type text.
2484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->node == NULL) {
2487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
2488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericError(xmlGenericErrorContext,
2489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		"add chars: ctxt->node == NULL !\n");
2490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
2492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    lastChild = ctxt->node->last;
2494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
2495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
2496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "add chars to %s \n", ctxt->node->name);
2497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Here we needed an accelerator mechanism in case of very large
2501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * elements. Use an attribute in the structure !!!
2502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (lastChild == NULL) {
2504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        lastChild = xmlSAX2TextNode(ctxt, ch, len);
2505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (lastChild != NULL) {
2506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->node->children = lastChild;
2507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->node->last = lastChild;
2508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    lastChild->parent = ctxt->node;
2509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    lastChild->doc = ctxt->node->doc;
2510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->nodelen = len;
2511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->nodemem = len + 1;
2512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
2513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters");
2514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return;
2515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int coalesceText = (lastChild != NULL) &&
2518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (lastChild->type == XML_TEXT_NODE) &&
2519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (lastChild->name == xmlStringText);
2520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((coalesceText) && (ctxt->nodemem != 0)) {
2521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    /*
2522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * The whole point of maintaining nodelen and nodemem,
2523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * xmlTextConcat is too costly, i.e. compute length,
2524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * reallocate a new buffer, move data, append ch. Here
2525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * We try to minimaze realloc() uses and avoid copying
2526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     * and recomputing length over and over.
2527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     */
2528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (lastChild->content == (xmlChar *)&(lastChild->properties)) {
2529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		lastChild->content = xmlStrdup(lastChild->content);
2530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		lastChild->properties = NULL;
2531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    } else if ((ctxt->nodemem == ctxt->nodelen + 1) &&
2532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	               (xmlDictOwns(ctxt->dict, lastChild->content))) {
2533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		lastChild->content = xmlStrdup(lastChild->content);
2534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
253560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott            if (((size_t)ctxt->nodelen + (size_t)len > XML_MAX_TEXT_LENGTH) &&
253660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott                ((ctxt->options & XML_PARSE_HUGE) == 0)) {
253760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott                xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters: huge text node");
253860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott                return;
253960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott            }
254060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	    if ((size_t)ctxt->nodelen > SIZE_T_MAX - (size_t)len ||
254160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	        (size_t)ctxt->nodemem + (size_t)len > SIZE_T_MAX / 2) {
254260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott                xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters overflow prevented");
254360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott                return;
254460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	    }
2545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ctxt->nodelen + len >= ctxt->nodemem) {
2546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlChar *newbuf;
254760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott		size_t size;
2548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		size = ctxt->nodemem + len;
2550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		size *= 2;
2551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                newbuf = (xmlChar *) xmlRealloc(lastChild->content,size);
2552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (newbuf == NULL) {
2553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters");
2554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    return;
2555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		}
2556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ctxt->nodemem = size;
2557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		lastChild->content = newbuf;
2558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
2559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    memcpy(&lastChild->content[ctxt->nodelen], ch, len);
2560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->nodelen += len;
2561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    lastChild->content[ctxt->nodelen] = 0;
2562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else if (coalesceText) {
2563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (xmlTextConcat(lastChild, ch, len)) {
2564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters");
2565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
2566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ctxt->node->children != NULL) {
2567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ctxt->nodelen = xmlStrlen(lastChild->content);
2568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ctxt->nodemem = ctxt->nodelen + 1;
2569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
2570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else {
2571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    /* Mixed content, first time */
2572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    lastChild = xmlSAX2TextNode(ctxt, ch, len);
2573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (lastChild != NULL) {
2574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlAddChild(ctxt->node, lastChild);
2575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (ctxt->node->children != NULL) {
2576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    ctxt->nodelen = len;
2577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    ctxt->nodemem = len + 1;
2578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		}
2579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
2580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2IgnorableWhitespace:
2586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
2587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ch:  a xmlChar string
2588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: the number of xmlChar
2589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * receiving some ignorable whitespaces from the parser.
2591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * UNUSED: by default the DOM building will use xmlSAX2Characters
2592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2IgnorableWhitespace(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch ATTRIBUTE_UNUSED, int len ATTRIBUTE_UNUSED)
2595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
2597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
2598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
2599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2IgnorableWhitespace(%.30s, %d)\n", ch, len);
2600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2ProcessingInstruction:
2605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
2606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @target:  the target name
2607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @data: the PI data's
2608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * A processing instruction has been parsed.
2610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2ProcessingInstruction(void *ctx, const xmlChar *target,
2613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                      const xmlChar *data)
2614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
2616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr ret;
2617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr parent;
2618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
2620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    parent = ctxt->node;
2621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
2622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
2623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.xmlSAX2ProcessingInstruction(%s, %s)\n", target, data);
2624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ret = xmlNewDocPI(ctxt->myDoc, target, data);
2627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ret == NULL) return;
2628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->linenumbers) {
2630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->input != NULL) {
2631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ctxt->input->line < 65535)
2632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ret->line = (short) ctxt->input->line;
2633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    else
2634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        ret->line = 65535;
2635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->inSubset == 1) {
2638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlAddChild((xmlNodePtr) ctxt->myDoc->intSubset, ret);
2639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
2640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (ctxt->inSubset == 2) {
2641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlAddChild((xmlNodePtr) ctxt->myDoc->extSubset, ret);
2642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
2643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->myDoc->children == NULL) || (parent == NULL)) {
2645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
2646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlGenericError(xmlGenericErrorContext,
2647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    "Setting PI %s as root\n", target);
2648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret);
2650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
2651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (parent->type == XML_ELEMENT_NODE) {
2653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
2654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericError(xmlGenericErrorContext,
2655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		"adding PI %s child to %s\n", target, parent->name);
2656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlAddChild(parent, ret);
2658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
2660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericError(xmlGenericErrorContext,
2661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		"adding PI %s sibling to ", target);
2662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlDebugDumpOneNode(stderr, parent, 0);
2663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlAddSibling(parent, ret);
2665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2Comment:
2670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
2671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value:  the xmlSAX2Comment content
2672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * A xmlSAX2Comment has been parsed.
2674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2Comment(void *ctx, const xmlChar *value)
2677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
2679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr ret;
2680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr parent;
2681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
2683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    parent = ctxt->node;
2684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
2685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2Comment(%s)\n", value);
2686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ret = xmlNewDocComment(ctxt->myDoc, value);
2688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ret == NULL) return;
2689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->linenumbers) {
2690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->input != NULL) {
2691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ctxt->input->line < 65535)
2692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ret->line = (short) ctxt->input->line;
2693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    else
2694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        ret->line = 65535;
2695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->inSubset == 1) {
2699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlAddChild((xmlNodePtr) ctxt->myDoc->intSubset, ret);
2700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
2701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (ctxt->inSubset == 2) {
2702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlAddChild((xmlNodePtr) ctxt->myDoc->extSubset, ret);
2703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
2704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->myDoc->children == NULL) || (parent == NULL)) {
2706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
2707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlGenericError(xmlGenericErrorContext,
2708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    "Setting xmlSAX2Comment as root\n");
2709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret);
2711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
2712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (parent->type == XML_ELEMENT_NODE) {
2714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
2715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericError(xmlGenericErrorContext,
2716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		"adding xmlSAX2Comment child to %s\n", parent->name);
2717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlAddChild(parent, ret);
2719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
2721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericError(xmlGenericErrorContext,
2722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		"adding xmlSAX2Comment sibling to ");
2723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlDebugDumpOneNode(stderr, parent, 0);
2724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlAddSibling(parent, ret);
2726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2CDataBlock:
2731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the user data (XML parser context)
2732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value:  The pcdata content
2733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len:  the block length
2734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * called when a pcdata block has been parsed
2736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2CDataBlock(void *ctx, const xmlChar *value, int len)
2739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
2741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr ret, lastChild;
2742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctx == NULL) return;
2744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX
2745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
2746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "SAX.pcdata(%.10s, %d)\n", value, len);
2747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    lastChild = xmlGetLastChild(ctxt->node);
2749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_SAX_TREE
2750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
2751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "add chars to %s \n", ctxt->node->name);
2752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((lastChild != NULL) &&
2754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (lastChild->type == XML_CDATA_SECTION_NODE)) {
2755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlTextConcat(lastChild, value, len);
2756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ret = xmlNewCDataBlock(ctxt->myDoc, value, len);
2758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlAddChild(ctxt->node, ret);
2759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int xmlSAX2DefaultVersionValue = 2;
2763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED
2765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAXDefaultVersion:
2767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @version:  the version, 1 or 2
2768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Set the default version of SAX used globally by the library.
2770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * By default, during initialization the default is set to 2.
2771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Note that it is generally a better coding style to use
2772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAXVersion() to set up the version explicitly for a given
2773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parsing context.
2774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the previous value in case of success and -1 in case of error.
2776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
2778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAXDefaultVersion(int version)
2779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int ret = xmlSAX2DefaultVersionValue;
2781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((version != 1) && (version != 2))
2783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return(-1);
2784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlSAX2DefaultVersionValue = version;
2785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ret);
2786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */
2788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAXVersion:
2791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @hdlr:  the SAX handler
2792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @version:  the version, 1 or 2
2793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Initialize the default XML SAX handler according to the version
2795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 in case of success and -1 in case of error.
2797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
2799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAXVersion(xmlSAXHandler *hdlr, int version)
2800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (hdlr == NULL) return(-1);
2802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (version == 2) {
2803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	hdlr->startElement = NULL;
2804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	hdlr->endElement = NULL;
2805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	hdlr->startElementNs = xmlSAX2StartElementNs;
2806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	hdlr->endElementNs = xmlSAX2EndElementNs;
2807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	hdlr->serror = NULL;
2808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	hdlr->initialized = XML_SAX2_MAGIC;
2809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED
2810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (version == 1) {
2811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	hdlr->startElement = xmlSAX2StartElement;
2812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	hdlr->endElement = xmlSAX2EndElement;
2813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	hdlr->initialized = 1;
2814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */
2815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else
2816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return(-1);
2817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->internalSubset = xmlSAX2InternalSubset;
2818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->externalSubset = xmlSAX2ExternalSubset;
2819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->isStandalone = xmlSAX2IsStandalone;
2820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->hasInternalSubset = xmlSAX2HasInternalSubset;
2821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->hasExternalSubset = xmlSAX2HasExternalSubset;
2822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->resolveEntity = xmlSAX2ResolveEntity;
2823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->getEntity = xmlSAX2GetEntity;
2824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->getParameterEntity = xmlSAX2GetParameterEntity;
2825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->entityDecl = xmlSAX2EntityDecl;
2826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->attributeDecl = xmlSAX2AttributeDecl;
2827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->elementDecl = xmlSAX2ElementDecl;
2828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->notationDecl = xmlSAX2NotationDecl;
2829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->unparsedEntityDecl = xmlSAX2UnparsedEntityDecl;
2830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
2831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->startDocument = xmlSAX2StartDocument;
2832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->endDocument = xmlSAX2EndDocument;
2833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->reference = xmlSAX2Reference;
2834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->characters = xmlSAX2Characters;
2835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->cdataBlock = xmlSAX2CDataBlock;
2836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->ignorableWhitespace = xmlSAX2Characters;
2837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->processingInstruction = xmlSAX2ProcessingInstruction;
2838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->comment = xmlSAX2Comment;
2839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->warning = xmlParserWarning;
2840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->error = xmlParserError;
2841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->fatalError = xmlParserError;
2842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(0);
2844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2InitDefaultSAXHandler:
2848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @hdlr:  the SAX handler
2849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @warning:  flag if non-zero sets the handler warning procedure
2850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Initialize the default XML SAX2 handler
2852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2InitDefaultSAXHandler(xmlSAXHandler *hdlr, int warning)
2855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((hdlr == NULL) || (hdlr->initialized != 0))
2857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
2858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlSAXVersion(hdlr, xmlSAX2DefaultVersionValue);
2860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (warning == 0)
2861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	hdlr->warning = NULL;
2862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else
2863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	hdlr->warning = xmlParserWarning;
2864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDefaultSAXHandlerInit:
2868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Initialize the default SAX2 handler
2870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDefaultSAXHandlerInit(void)
2873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED
2875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlSAXVersion((xmlSAXHandlerPtr) &xmlDefaultSAXHandler, 1);
2876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */
2877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTML_ENABLED
2880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2InitHtmlDefaultSAXHandler:
2883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @hdlr:  the SAX handler
2884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Initialize the default HTML SAX2 handler
2886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2InitHtmlDefaultSAXHandler(xmlSAXHandler *hdlr)
2889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((hdlr == NULL) || (hdlr->initialized != 0))
2891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
2892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->internalSubset = xmlSAX2InternalSubset;
2894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->externalSubset = NULL;
2895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->isStandalone = NULL;
2896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->hasInternalSubset = NULL;
2897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->hasExternalSubset = NULL;
2898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->resolveEntity = NULL;
2899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->getEntity = xmlSAX2GetEntity;
2900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->getParameterEntity = NULL;
2901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->entityDecl = NULL;
2902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->attributeDecl = NULL;
2903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->elementDecl = NULL;
2904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->notationDecl = NULL;
2905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->unparsedEntityDecl = NULL;
2906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
2907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->startDocument = xmlSAX2StartDocument;
2908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->endDocument = xmlSAX2EndDocument;
2909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->startElement = xmlSAX2StartElement;
2910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->endElement = xmlSAX2EndElement;
2911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->reference = NULL;
2912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->characters = xmlSAX2Characters;
2913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->cdataBlock = xmlSAX2CDataBlock;
2914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
2915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->processingInstruction = xmlSAX2ProcessingInstruction;
2916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->comment = xmlSAX2Comment;
2917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->warning = xmlParserWarning;
2918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->error = xmlParserError;
2919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->fatalError = xmlParserError;
2920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->initialized = 1;
2922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * htmlDefaultSAXHandlerInit:
2926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Initialize the default SAX handler
2928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjecthtmlDefaultSAXHandlerInit(void)
2931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlSAX2InitHtmlDefaultSAXHandler((xmlSAXHandlerPtr) &htmlDefaultSAXHandler);
2933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_HTML_ENABLED */
2936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_DOCB_ENABLED
2938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAX2InitDocbDefaultSAXHandler:
2941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @hdlr:  the SAX handler
2942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Initialize the default DocBook SAX2 handler
2944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAX2InitDocbDefaultSAXHandler(xmlSAXHandler *hdlr)
2947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((hdlr == NULL) || (hdlr->initialized != 0))
2949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
2950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->internalSubset = xmlSAX2InternalSubset;
2952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->externalSubset = NULL;
2953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->isStandalone = xmlSAX2IsStandalone;
2954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->hasInternalSubset = xmlSAX2HasInternalSubset;
2955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->hasExternalSubset = xmlSAX2HasExternalSubset;
2956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->resolveEntity = xmlSAX2ResolveEntity;
2957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->getEntity = xmlSAX2GetEntity;
2958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->getParameterEntity = NULL;
2959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->entityDecl = xmlSAX2EntityDecl;
2960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->attributeDecl = NULL;
2961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->elementDecl = NULL;
2962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->notationDecl = NULL;
2963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->unparsedEntityDecl = NULL;
2964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
2965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->startDocument = xmlSAX2StartDocument;
2966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->endDocument = xmlSAX2EndDocument;
2967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->startElement = xmlSAX2StartElement;
2968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->endElement = xmlSAX2EndElement;
2969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->reference = xmlSAX2Reference;
2970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->characters = xmlSAX2Characters;
2971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->cdataBlock = NULL;
2972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
2973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->processingInstruction = NULL;
2974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->comment = xmlSAX2Comment;
2975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->warning = xmlParserWarning;
2976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->error = xmlParserError;
2977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->fatalError = xmlParserError;
2978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    hdlr->initialized = 1;
2980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * docbDefaultSAXHandlerInit:
2984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Initialize the default SAX handler
2986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectdocbDefaultSAXHandlerInit(void)
2989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlSAX2InitDocbDefaultSAXHandler((xmlSAXHandlerPtr) &docbDefaultSAXHandler);
2991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_DOCB_ENABLED */
2994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define bottom_SAX2
2995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "elfgcchack.h"
2996