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