1ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/*
2ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * debugXML.c : This is a set of routines used for debugging the tree
3ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *              produced by the XML parser.
4ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
5ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * See Copyright for the status of this software.
6ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
7ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Daniel Veillard <daniel@veillard.com>
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#ifdef LIBXML_DEBUG_ENABLED
13ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
14ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <string.h>
15ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STDLIB_H
16ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <stdlib.h>
17ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
18ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STRING_H
19ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <string.h>
20ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
21ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlmemory.h>
22ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/tree.h>
23ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parser.h>
24ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parserInternals.h>
25ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/valid.h>
26ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/debugXML.h>
27ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/HTMLtree.h>
28ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/HTMLparser.h>
29ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlerror.h>
30ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/globals.h>
31ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xpathInternals.h>
32ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/uri.h>
33ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SCHEMAS_ENABLED
34ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/relaxng.h>
35ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
36ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
37ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define DUMP_TEXT_TYPE 1
38ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
39ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlDebugCtxt xmlDebugCtxt;
40ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef xmlDebugCtxt *xmlDebugCtxtPtr;
41ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlDebugCtxt {
42ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    FILE *output;               /* the output file */
43ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char shift[101];            /* used for indenting */
44ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int depth;                  /* current depth */
45ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDocPtr doc;              /* current document */
46ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr node;		/* current node */
47ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDictPtr dict;		/* the doc dictionnary */
48ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int check;                  /* do just checkings */
49ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int errors;                 /* number of errors found */
50ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int nodict;			/* if the document has no dictionnary */
51ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int options;		/* options */
52ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project};
53ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
54ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void xmlCtxtDumpNodeList(xmlDebugCtxtPtr ctxt, xmlNodePtr node);
55ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
56ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
57ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpInitCtxt(xmlDebugCtxtPtr ctxt)
58ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
59ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int i;
60ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
61ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->depth = 0;
62ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->check = 0;
63ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->errors = 0;
64ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->output = stdout;
65ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->doc = NULL;
66ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->node = NULL;
67ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->dict = NULL;
68ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->nodict = 0;
69ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->options = 0;
70ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    for (i = 0; i < 100; i++)
71ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->shift[i] = ' ';
72ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->shift[100] = 0;
73ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
74ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
75ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
76ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpCleanCtxt(xmlDebugCtxtPtr ctxt ATTRIBUTE_UNUSED)
77ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
78ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* remove the ATTRIBUTE_UNUSED when this is added */
79ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
80ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
81ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
82ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlNsCheckScope:
83ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node: the node
84ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ns: the namespace node
85ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
86ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that a given namespace is in scope on a node.
87ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
8894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * Returns 1 if in scope, -1 in case of argument error,
89ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *         -2 if the namespace is not in scope, and -3 if not on
90ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *         an ancestor node.
91ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
92ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int
93ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlNsCheckScope(xmlNodePtr node, xmlNsPtr ns)
94ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
95ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNsPtr cur;
96ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
97ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((node == NULL) || (ns == NULL))
98ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return(-1);
99ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((node->type != XML_ELEMENT_NODE) &&
101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(node->type != XML_ATTRIBUTE_NODE) &&
102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(node->type != XML_DOCUMENT_NODE) &&
103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(node->type != XML_TEXT_NODE) &&
104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(node->type != XML_HTML_DOCUMENT_NODE) &&
105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(node->type != XML_XINCLUDE_START))
106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return(-2);
107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while ((node != NULL) &&
109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project           ((node->type == XML_ELEMENT_NODE) ||
110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            (node->type == XML_ATTRIBUTE_NODE) ||
111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            (node->type == XML_TEXT_NODE) ||
112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (node->type == XML_XINCLUDE_START))) {
113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((node->type == XML_ELEMENT_NODE) ||
114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (node->type == XML_XINCLUDE_START)) {
115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    cur = node->nsDef;
116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    while (cur != NULL) {
117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        if (cur == ns)
118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    return(1);
119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (xmlStrEqual(cur->prefix, ns->prefix))
120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    return(-2);
121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		cur = cur->next;
122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	node = node->parent;
125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* the xml namespace may be declared on the document node */
127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((node != NULL) &&
128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ((node->type == XML_DOCUMENT_NODE) ||
129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 (node->type == XML_HTML_DOCUMENT_NODE))) {
130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 xmlNsPtr oldNs = ((xmlDocPtr) node)->oldNs;
131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 if (oldNs == ns)
132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     return(1);
133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(-3);
135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpSpaces(xmlDebugCtxtPtr ctxt)
139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->check)
141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt->output != NULL) && (ctxt->depth > 0)) {
143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ctxt->depth < 50)
14443ff9b493a5b9d65ae1661455a22fb2f62a3b352Nick Kralevich            fprintf(ctxt->output, "%s", &ctxt->shift[100 - 2 * ctxt->depth]);
145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else
14643ff9b493a5b9d65ae1661455a22fb2f62a3b352Nick Kralevich            fprintf(ctxt->output, "%s", ctxt->shift);
147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDebugErr:
152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  a debug context
153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error:  the error code
154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a debug error.
156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugErr(xmlDebugCtxtPtr ctxt, int error, const char *msg)
159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->errors++;
161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    __xmlRaiseError(NULL, NULL, NULL,
162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    NULL, ctxt->node, XML_FROM_CHECK,
163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    error, XML_ERR_ERROR, NULL, 0,
164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    NULL, NULL, NULL, 0, 0,
16543ff9b493a5b9d65ae1661455a22fb2f62a3b352Nick Kralevich		    "%s", msg);
166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugErr2(xmlDebugCtxtPtr ctxt, int error, const char *msg, int extra)
169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->errors++;
171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    __xmlRaiseError(NULL, NULL, NULL,
172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    NULL, ctxt->node, XML_FROM_CHECK,
173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    error, XML_ERR_ERROR, NULL, 0,
174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    NULL, NULL, NULL, 0, 0,
175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    msg, extra);
176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugErr3(xmlDebugCtxtPtr ctxt, int error, const char *msg, const char *extra)
179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->errors++;
181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    __xmlRaiseError(NULL, NULL, NULL,
182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    NULL, ctxt->node, XML_FROM_CHECK,
183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    error, XML_ERR_ERROR, NULL, 0,
184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    NULL, NULL, NULL, 0, 0,
185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    msg, extra);
186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtNsCheckScope:
190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: the debugging context
191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node: the node
192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ns: the namespace node
193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Report if a given namespace is is not in scope.
195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtNsCheckScope(xmlDebugCtxtPtr ctxt, xmlNodePtr node, xmlNsPtr ns)
198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int ret;
200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ret = xmlNsCheckScope(node, ns);
202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ret == -2) {
203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ns->prefix == NULL)
204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_NS_SCOPE,
205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			"Reference to default namespace not in scope\n");
206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else
207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr3(ctxt, XML_CHECK_NS_SCOPE,
208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 "Reference to namespace '%s' not in scope\n",
209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 (char *) ns->prefix);
210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ret == -3) {
212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ns->prefix == NULL)
213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_NS_ANCESTOR,
214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			"Reference to default namespace not on ancestor\n");
215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else
216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr3(ctxt, XML_CHECK_NS_ANCESTOR,
217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 "Reference to namespace '%s' not on ancestor\n",
218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 (char *) ns->prefix);
219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtCheckString:
224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: the debug context
225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: the string
226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do debugging on the string, currently it just checks the UTF-8 content
228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtCheckString(xmlDebugCtxtPtr ctxt, const xmlChar * str)
231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str == NULL) return;
233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->check) {
234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!xmlCheckUTF8(str)) {
235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr3(ctxt, XML_CHECK_NOT_UTF8,
236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 "String is not UTF-8 %s", (const char *) str);
237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtCheckName:
243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: the debug context
244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: the name
245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do debugging on the name, for example the dictionnary status and
247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * conformance to the Name production.
248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtCheckName(xmlDebugCtxtPtr ctxt, const xmlChar * name)
251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->check) {
253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (name == NULL) {
254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_NO_NAME, "Name is NULL");
255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return;
256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (xmlValidateName(name, 0)) {
258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr3(ctxt, XML_CHECK_NOT_NCNAME,
259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 "Name is not an NCName '%s'", (const char *) name);
260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((ctxt->dict != NULL) &&
262df143a5041f03a22808b59c76698770b74692815Selim Gurun	    (!xmlDictOwns(ctxt->dict, name)) &&
263df143a5041f03a22808b59c76698770b74692815Selim Gurun            ((ctxt->doc == NULL) ||
264df143a5041f03a22808b59c76698770b74692815Selim Gurun             ((ctxt->doc->parseFlags & (XML_PARSE_SAX1 | XML_PARSE_NODICT)) == 0))) {
265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr3(ctxt, XML_CHECK_OUTSIDE_DICT,
266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 "Name is not from the document dictionnary '%s'",
267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 (const char *) name);
268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtGenericNodeCheck(xmlDebugCtxtPtr ctxt, xmlNodePtr node) {
274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDocPtr doc;
275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDictPtr dict;
276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    doc = node->doc;
278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node->parent == NULL)
280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlDebugErr(ctxt, XML_CHECK_NO_PARENT,
281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Node has no parent\n");
282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node->doc == NULL) {
283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlDebugErr(ctxt, XML_CHECK_NO_DOC,
284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Node has no doc\n");
285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        dict = NULL;
286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	dict = doc->dict;
288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((dict == NULL) && (ctxt->nodict == 0)) {
289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if 0
290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            /* desactivated right now as it raises too many errors */
291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (doc->type == XML_DOCUMENT_NODE)
292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlDebugErr(ctxt, XML_CHECK_NO_DICT,
293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    "Document has no dictionnary\n");
294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->nodict = 1;
296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->doc == NULL)
298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->doc = doc;
299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt->dict == NULL) {
301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ctxt->dict = dict;
302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((node->parent != NULL) && (node->doc != node->parent->doc) &&
305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (!xmlStrEqual(node->name, BAD_CAST "pseudoroot")))
306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlDebugErr(ctxt, XML_CHECK_WRONG_DOC,
307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Node doc differs from parent's one\n");
308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node->prev == NULL) {
309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (node->type == XML_ATTRIBUTE_NODE) {
310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if ((node->parent != NULL) &&
311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        (node != (xmlNodePtr) node->parent->properties))
312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlDebugErr(ctxt, XML_CHECK_NO_PREV,
313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    "Attr has no prev and not first of attr list\n");
31494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun
315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if ((node->parent != NULL) && (node->parent->children != node))
316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_NO_PREV,
317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    "Node has no prev and not first of parent list\n");
318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (node->prev->next != node)
320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_WRONG_PREV,
321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        "Node prev->next : back link wrong\n");
322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node->next == NULL) {
324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((node->parent != NULL) && (node->type != XML_ATTRIBUTE_NODE) &&
32560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	    (node->parent->last != node) &&
32660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	    (node->parent->type == XML_ELEMENT_NODE))
327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_NO_NEXT,
328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    "Node has no next and not last of parent list\n");
329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (node->next->prev != node)
331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_WRONG_NEXT,
332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    "Node next->prev : forward link wrong\n");
333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (node->next->parent != node->parent)
334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_WRONG_PARENT,
335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    "Node next->prev : forward link wrong\n");
336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node->type == XML_ELEMENT_NODE) {
338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlNsPtr ns;
339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ns = node->nsDef;
341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	while (ns != NULL) {
342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlCtxtNsCheckScope(ctxt, node, ns);
343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ns = ns->next;
344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (node->ns != NULL)
346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlCtxtNsCheckScope(ctxt, node, node->ns);
347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (node->type == XML_ATTRIBUTE_NODE) {
348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (node->ns != NULL)
349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlCtxtNsCheckScope(ctxt, node, node->ns);
350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((node->type != XML_ELEMENT_NODE) &&
353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(node->type != XML_ATTRIBUTE_NODE) &&
354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(node->type != XML_ELEMENT_DECL) &&
355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(node->type != XML_ATTRIBUTE_DECL) &&
356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(node->type != XML_DTD_NODE) &&
357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(node->type != XML_HTML_DOCUMENT_NODE) &&
358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(node->type != XML_DOCUMENT_NODE)) {
359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (node->content != NULL)
360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlCtxtCheckString(ctxt, (const xmlChar *) node->content);
361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (node->type) {
363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ELEMENT_NODE:
364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ATTRIBUTE_NODE:
365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlCtxtCheckName(ctxt, node->name);
366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_TEXT_NODE:
368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if ((node->name == xmlStringText) ||
369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        (node->name == xmlStringTextNoenc))
370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		break;
371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    /* some case of entity substitution can lead to this */
372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if ((ctxt->dict != NULL) &&
373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        (node->name == xmlDictLookup(ctxt->dict, BAD_CAST "nbktext",
374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		                             7)))
375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		break;
376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr3(ctxt, XML_CHECK_WRONG_NAME,
378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 "Text node has wrong name '%s'",
379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 (const char *) node->name);
380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_COMMENT_NODE:
382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (node->name == xmlStringComment)
383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		break;
384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr3(ctxt, XML_CHECK_WRONG_NAME,
385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 "Comment node has wrong name '%s'",
386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 (const char *) node->name);
387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_PI_NODE:
389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlCtxtCheckName(ctxt, node->name);
390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_CDATA_SECTION_NODE:
392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (node->name == NULL)
393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		break;
394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr3(ctxt, XML_CHECK_NAME_NOT_NULL,
395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 "CData section has non NULL name '%s'",
396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			 (const char *) node->name);
397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ENTITY_REF_NODE:
399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ENTITY_NODE:
400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DOCUMENT_TYPE_NODE:
401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DOCUMENT_FRAG_NODE:
402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_NOTATION_NODE:
403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DTD_NODE:
404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ELEMENT_DECL:
405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ATTRIBUTE_DECL:
406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ENTITY_DECL:
407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_NAMESPACE_DECL:
408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_XINCLUDE_START:
409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_XINCLUDE_END:
410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_DOCB_ENABLED
411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DOCB_DOCUMENT_NODE:
412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DOCUMENT_NODE:
414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_HTML_DOCUMENT_NODE:
415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpString(xmlDebugCtxtPtr ctxt, const xmlChar * str)
421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int i;
423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->check) {
425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* TODO: check UTF8 content of the string */
428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str == NULL) {
429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "(NULL)");
430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    for (i = 0; i < 40; i++)
433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (str[i] == 0)
434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return;
435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else if (IS_BLANK_CH(str[i]))
436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fputc(' ', ctxt->output);
437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else if (str[i] >= 0x80)
438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "#%X", str[i]);
439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else
440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fputc(str[i], ctxt->output);
441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    fprintf(ctxt->output, "...");
442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpDtdNode(xmlDebugCtxtPtr ctxt, xmlDtdPtr dtd)
446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpSpaces(ctxt);
448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (dtd == NULL) {
450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "DTD node is NULL\n");
452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (dtd->type != XML_DTD_NODE) {
456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlDebugErr(ctxt, XML_CHECK_NOT_DTD,
457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Node is not a DTD");
458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt->check) {
461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (dtd->name != NULL)
462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "DTD(%s)", (char *) dtd->name);
463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else
464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "DTD");
465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (dtd->ExternalID != NULL)
466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, ", PUBLIC %s", (char *) dtd->ExternalID);
467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (dtd->SystemID != NULL)
468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, ", SYSTEM %s", (char *) dtd->SystemID);
469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "\n");
470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Do a bit of checking
473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) dtd);
475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpAttrDecl(xmlDebugCtxtPtr ctxt, xmlAttributePtr attr)
479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpSpaces(ctxt);
481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (attr == NULL) {
483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "Attribute declaration is NULL\n");
485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (attr->type != XML_ATTRIBUTE_DECL) {
488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlDebugErr(ctxt, XML_CHECK_NOT_ATTR_DECL,
489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Node is not an attribute declaration");
490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (attr->name != NULL) {
493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "ATTRDECL(%s)", (char *) attr->name);
495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else
496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlDebugErr(ctxt, XML_CHECK_NO_NAME,
497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Node attribute declaration has no name");
498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (attr->elem != NULL) {
499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, " for %s", (char *) attr->elem);
501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else
502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlDebugErr(ctxt, XML_CHECK_NO_ELEM,
503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Node attribute declaration has no element name");
504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt->check) {
505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        switch (attr->atype) {
506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_CDATA:
507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " CDATA");
508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_ID:
510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " ID");
511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_IDREF:
513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " IDREF");
514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_IDREFS:
516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " IDREFS");
517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_ENTITY:
519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " ENTITY");
520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_ENTITIES:
522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " ENTITIES");
523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_NMTOKEN:
525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " NMTOKEN");
526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_NMTOKENS:
528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " NMTOKENS");
529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_ENUMERATION:
531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " ENUMERATION");
532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_NOTATION:
534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " NOTATION ");
535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (attr->tree != NULL) {
538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            int indx;
539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlEnumerationPtr cur = attr->tree;
540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            for (indx = 0; indx < 5; indx++) {
542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (indx != 0)
543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    fprintf(ctxt->output, "|%s", (char *) cur->name);
544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                else
545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    fprintf(ctxt->output, " (%s", (char *) cur->name);
546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                cur = cur->next;
547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (cur == NULL)
548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    break;
549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (cur == NULL)
551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, ")");
552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            else
553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "...)");
554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        switch (attr->def) {
556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_NONE:
557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_REQUIRED:
559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " REQUIRED");
560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_IMPLIED:
562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " IMPLIED");
563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ATTRIBUTE_FIXED:
565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, " FIXED");
566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (attr->defaultValue != NULL) {
569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "\"");
570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpString(ctxt, attr->defaultValue);
571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "\"");
572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "\n");
574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Do a bit of checking
578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) attr);
580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpElemDecl(xmlDebugCtxtPtr ctxt, xmlElementPtr elem)
584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpSpaces(ctxt);
586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (elem == NULL) {
588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "Element declaration is NULL\n");
590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (elem->type != XML_ELEMENT_DECL) {
593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlDebugErr(ctxt, XML_CHECK_NOT_ELEM_DECL,
594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Node is not an element declaration");
595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (elem->name != NULL) {
598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check) {
599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "ELEMDECL(");
600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpString(ctxt, elem->name);
601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, ")");
602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else
604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlDebugErr(ctxt, XML_CHECK_NO_NAME,
605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Element declaration has no name");
606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt->check) {
607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        switch (elem->etype) {
608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ELEMENT_TYPE_UNDEFINED:
609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, ", UNDEFINED");
610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ELEMENT_TYPE_EMPTY:
612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, ", EMPTY");
613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ELEMENT_TYPE_ANY:
615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, ", ANY");
616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ELEMENT_TYPE_MIXED:
618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, ", MIXED ");
619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_ELEMENT_TYPE_ELEMENT:
621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, ", MIXED ");
622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if ((elem->type != XML_ELEMENT_NODE) && (elem->content != NULL)) {
625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            char buf[5001];
626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            buf[0] = 0;
628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlSnprintfElementContent(buf, 5000, elem->content, 1);
629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            buf[5000] = 0;
630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "%s", buf);
631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "\n");
633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Do a bit of checking
637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) elem);
639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpEntityDecl(xmlDebugCtxtPtr ctxt, xmlEntityPtr ent)
643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpSpaces(ctxt);
645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ent == NULL) {
647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "Entity declaration is NULL\n");
649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ent->type != XML_ENTITY_DECL) {
652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlDebugErr(ctxt, XML_CHECK_NOT_ENTITY_DECL,
653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Node is not an entity declaration");
654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ent->name != NULL) {
657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check) {
658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "ENTITYDECL(");
659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpString(ctxt, ent->name);
660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, ")");
661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else
663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlDebugErr(ctxt, XML_CHECK_NO_NAME,
664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Entity declaration has no name");
665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt->check) {
666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        switch (ent->etype) {
667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_INTERNAL_GENERAL_ENTITY:
668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, ", internal\n");
669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, ", external parsed\n");
672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, ", unparsed\n");
675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_INTERNAL_PARAMETER_ENTITY:
677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, ", parameter\n");
678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_EXTERNAL_PARAMETER_ENTITY:
680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, ", external parameter\n");
681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_INTERNAL_PREDEFINED_ENTITY:
683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, ", predefined\n");
684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ent->ExternalID) {
687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpSpaces(ctxt);
688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, " ExternalID=%s\n",
689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    (char *) ent->ExternalID);
690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ent->SystemID) {
692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpSpaces(ctxt);
693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, " SystemID=%s\n",
694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    (char *) ent->SystemID);
695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ent->URI != NULL) {
697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpSpaces(ctxt);
698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, " URI=%s\n", (char *) ent->URI);
699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ent->content) {
701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpSpaces(ctxt);
702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, " content=");
703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpString(ctxt, ent->content);
704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "\n");
705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Do a bit of checking
710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) ent);
712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpNamespace(xmlDebugCtxtPtr ctxt, xmlNsPtr ns)
716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpSpaces(ctxt);
718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ns == NULL) {
720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "namespace node is NULL\n");
722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ns->type != XML_NAMESPACE_DECL) {
725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlDebugErr(ctxt, XML_CHECK_NOT_NS_DECL,
726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Node is not a namespace declaration");
727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ns->href == NULL) {
730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ns->prefix != NULL)
731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr3(ctxt, XML_CHECK_NO_HREF,
732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    "Incomplete namespace %s href=NULL\n",
733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    (char *) ns->prefix);
734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else
735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_NO_HREF,
736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    "Incomplete default namespace href=NULL\n");
737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check) {
739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (ns->prefix != NULL)
740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "namespace %s href=",
741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        (char *) ns->prefix);
742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            else
743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "default namespace href=");
744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpString(ctxt, ns->href);
746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "\n");
747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpNamespaceList(xmlDebugCtxtPtr ctxt, xmlNsPtr ns)
753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while (ns != NULL) {
755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlCtxtDumpNamespace(ctxt, ns);
756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ns = ns->next;
757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpEntity(xmlDebugCtxtPtr ctxt, xmlEntityPtr ent)
762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpSpaces(ctxt);
764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ent == NULL) {
766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "Entity is NULL\n");
768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt->check) {
771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        switch (ent->etype) {
772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_INTERNAL_GENERAL_ENTITY:
773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "INTERNAL_GENERAL_ENTITY ");
774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "EXTERNAL_GENERAL_PARSED_ENTITY ");
777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "EXTERNAL_GENERAL_UNPARSED_ENTITY ");
780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_INTERNAL_PARAMETER_ENTITY:
782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "INTERNAL_PARAMETER_ENTITY ");
783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_EXTERNAL_PARAMETER_ENTITY:
785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "EXTERNAL_PARAMETER_ENTITY ");
786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            default:
788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "ENTITY_%d ! ", (int) ent->etype);
789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "%s\n", ent->name);
791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ent->ExternalID) {
792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpSpaces(ctxt);
793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "ExternalID=%s\n",
794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    (char *) ent->ExternalID);
795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ent->SystemID) {
797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpSpaces(ctxt);
798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "SystemID=%s\n", (char *) ent->SystemID);
799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ent->URI) {
801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpSpaces(ctxt);
802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "URI=%s\n", (char *) ent->URI);
803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ent->content) {
805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpSpaces(ctxt);
806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "content=");
807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpString(ctxt, ent->content);
808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "\n");
809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtDumpAttr:
815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @attr:  the attribute
817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth:  the indentation level.
818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the attribute
820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpAttr(xmlDebugCtxtPtr ctxt, xmlAttrPtr attr)
823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpSpaces(ctxt);
825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (attr == NULL) {
827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "Attr is NULL");
829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt->check) {
832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "ATTRIBUTE ");
833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlCtxtDumpString(ctxt, attr->name);
834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "\n");
835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (attr->children != NULL) {
836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            ctxt->depth++;
837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpNodeList(ctxt, attr->children);
838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            ctxt->depth--;
839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (attr->name == NULL)
842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlDebugErr(ctxt, XML_CHECK_NO_NAME,
843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	            "Attribute has no name");
844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Do a bit of checking
847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) attr);
849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtDumpAttrList:
853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @attr:  the attribute list
855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth:  the indentation level.
856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the attribute list
858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpAttrList(xmlDebugCtxtPtr ctxt, xmlAttrPtr attr)
861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while (attr != NULL) {
863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlCtxtDumpAttr(ctxt, attr);
864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        attr = attr->next;
865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtDumpOneNode:
870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  the node
872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth:  the indentation level.
873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the element node, it is not recursive
875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpOneNode(xmlDebugCtxtPtr ctxt, xmlNodePtr node)
878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node == NULL) {
880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check) {
881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpSpaces(ctxt);
882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "node is NULL\n");
883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->node = node;
887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (node->type) {
889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ELEMENT_NODE:
890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "ELEMENT ");
893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if ((node->ns != NULL) && (node->ns->prefix != NULL)) {
894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    xmlCtxtDumpString(ctxt, node->ns->prefix);
895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    fprintf(ctxt->output, ":");
896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpString(ctxt, node->name);
898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "\n");
899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ATTRIBUTE_NODE:
902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check)
903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "Error, ATTRIBUTE found here\n");
905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtGenericNodeCheck(ctxt, node);
906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return;
907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_TEXT_NODE:
908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (node->name == (const xmlChar *) xmlStringTextNoenc)
911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    fprintf(ctxt->output, "TEXT no enc");
912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                else
913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    fprintf(ctxt->output, "TEXT");
914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (ctxt->options & DUMP_TEXT_TYPE) {
915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    if (node->content == (xmlChar *) &(node->properties))
916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			fprintf(ctxt->output, " compact\n");
917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    else if (xmlDictOwns(ctxt->dict, node->content) == 1)
918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			fprintf(ctxt->output, " interned\n");
919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    else
920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			fprintf(ctxt->output, "\n");
921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		} else
922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    fprintf(ctxt->output, "\n");
923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_CDATA_SECTION_NODE:
926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "CDATA_SECTION\n");
929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ENTITY_REF_NODE:
932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "ENTITY_REF(%s)\n",
935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        (char *) node->name);
936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ENTITY_NODE:
939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "ENTITY\n");
942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_PI_NODE:
945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "PI %s\n", (char *) node->name);
948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_COMMENT_NODE:
951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "COMMENT\n");
954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DOCUMENT_NODE:
957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_HTML_DOCUMENT_NODE:
958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "Error, DOCUMENT found here\n");
962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtGenericNodeCheck(ctxt, node);
963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return;
964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DOCUMENT_TYPE_NODE:
965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "DOCUMENT_TYPE\n");
968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DOCUMENT_FRAG_NODE:
971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "DOCUMENT_FRAG\n");
974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_NOTATION_NODE:
977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "NOTATION\n");
980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DTD_NODE:
983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpDtdNode(ctxt, (xmlDtdPtr) node);
984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return;
985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ELEMENT_DECL:
986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpElemDecl(ctxt, (xmlElementPtr) node);
987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return;
988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ATTRIBUTE_DECL:
989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpAttrDecl(ctxt, (xmlAttributePtr) node);
990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return;
991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ENTITY_DECL:
992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpEntityDecl(ctxt, (xmlEntityPtr) node);
993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return;
994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_NAMESPACE_DECL:
995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpNamespace(ctxt, (xmlNsPtr) node);
996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return;
997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_XINCLUDE_START:
998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
1000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "INCLUDE START\n");
1001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
1002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return;
1003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_XINCLUDE_END:
1004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
1005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
1006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "INCLUDE END\n");
1007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
1008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return;
1009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        default:
1010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check)
1011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
1012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr2(ctxt, XML_CHECK_UNKNOWN_NODE,
1013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Unknown node type %d\n", node->type);
1014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return;
1015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node->doc == NULL) {
1017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check) {
1018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpSpaces(ctxt);
1019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
1020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "PBM: doc == NULL !!!\n");
1021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->depth++;
1023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((node->type == XML_ELEMENT_NODE) && (node->nsDef != NULL))
1024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlCtxtDumpNamespaceList(ctxt, node->nsDef);
1025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((node->type == XML_ELEMENT_NODE) && (node->properties != NULL))
1026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlCtxtDumpAttrList(ctxt, node->properties);
1027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node->type != XML_ENTITY_REF_NODE) {
1028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if ((node->type != XML_ELEMENT_NODE) && (node->content != NULL)) {
1029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!ctxt->check) {
1030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpSpaces(ctxt);
1031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "content=");
1032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlCtxtDumpString(ctxt, node->content);
1033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "\n");
1034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
1035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
1036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
1037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlEntityPtr ent;
1038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ent = xmlGetDocEntity(node->doc, node->name);
1040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ent != NULL)
1041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpEntity(ctxt, ent);
1042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->depth--;
1044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
1046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Do a bit of checking
1047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
1048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtGenericNodeCheck(ctxt, node);
1049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtDumpNode:
1053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  the node
1055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth:  the indentation level.
1056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the element node, it is recursive
1058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpNode(xmlDebugCtxtPtr ctxt, xmlNodePtr node)
1061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node == NULL) {
1063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check) {
1064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpSpaces(ctxt);
1065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "node is NULL\n");
1066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
1067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
1068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpOneNode(ctxt, node);
107094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun    if ((node->type != XML_NAMESPACE_DECL) &&
1071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (node->children != NULL) && (node->type != XML_ENTITY_REF_NODE)) {
1072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->depth++;
1073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlCtxtDumpNodeList(ctxt, node->children);
1074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->depth--;
1075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtDumpNodeList:
1080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  the node list
1082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth:  the indentation level.
1083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the list of element node, it is recursive
1085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpNodeList(xmlDebugCtxtPtr ctxt, xmlNodePtr node)
1088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while (node != NULL) {
1090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlCtxtDumpNode(ctxt, node);
1091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        node = node->next;
1092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpDocHead(xmlDebugCtxtPtr ctxt, xmlDocPtr doc)
1097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (doc == NULL) {
1099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
1100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "DOCUMENT == NULL !\n");
1101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
1102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->node = (xmlNodePtr) doc;
1104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (doc->type) {
1106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ELEMENT_NODE:
1107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_FOUND_ELEMENT,
1108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Misplaced ELEMENT node\n");
1109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ATTRIBUTE_NODE:
1111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_FOUND_ATTRIBUTE,
1112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Misplaced ATTRIBUTE node\n");
1113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_TEXT_NODE:
1115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_FOUND_TEXT,
1116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Misplaced TEXT node\n");
1117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_CDATA_SECTION_NODE:
1119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_FOUND_CDATA,
1120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Misplaced CDATA node\n");
1121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ENTITY_REF_NODE:
1123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_FOUND_ENTITYREF,
1124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Misplaced ENTITYREF node\n");
1125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ENTITY_NODE:
1127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_FOUND_ENTITY,
1128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Misplaced ENTITY node\n");
1129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_PI_NODE:
1131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_FOUND_PI,
1132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Misplaced PI node\n");
1133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_COMMENT_NODE:
1135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_FOUND_COMMENT,
1136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Misplaced COMMENT node\n");
1137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DOCUMENT_NODE:
1139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (!ctxt->check)
1140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		fprintf(ctxt->output, "DOCUMENT\n");
1141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_HTML_DOCUMENT_NODE:
1143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (!ctxt->check)
1144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		fprintf(ctxt->output, "HTML DOCUMENT\n");
1145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DOCUMENT_TYPE_NODE:
1147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_FOUND_DOCTYPE,
1148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Misplaced DOCTYPE node\n");
1149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DOCUMENT_FRAG_NODE:
1151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_FOUND_FRAGMENT,
1152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Misplaced FRAGMENT node\n");
1153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_NOTATION_NODE:
1155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr(ctxt, XML_CHECK_FOUND_NOTATION,
1156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Misplaced NOTATION node\n");
1157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        default:
1159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlDebugErr2(ctxt, XML_CHECK_UNKNOWN_NODE,
1160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	                "Unknown node type %d\n", doc->type);
1161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtDumpDocumentHead:
1166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc:  the document
1168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information cncerning the document, not recursive
1170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpDocumentHead(xmlDebugCtxtPtr ctxt, xmlDocPtr doc)
1173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (doc == NULL) return;
1175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpDocHead(ctxt, doc);
1176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt->check) {
1177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (doc->name != NULL) {
1178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "name=");
1179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpString(ctxt, BAD_CAST doc->name);
1180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "\n");
1181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
1182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (doc->version != NULL) {
1183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "version=");
1184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpString(ctxt, doc->version);
1185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "\n");
1186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
1187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (doc->encoding != NULL) {
1188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "encoding=");
1189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpString(ctxt, doc->encoding);
1190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "\n");
1191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
1192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (doc->URL != NULL) {
1193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "URL=");
1194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlCtxtDumpString(ctxt, doc->URL);
1195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "\n");
1196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
1197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (doc->standalone)
1198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "standalone=true\n");
1199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (doc->oldNs != NULL)
1201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlCtxtDumpNamespaceList(ctxt, doc->oldNs);
1202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtDumpDocument:
1206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc:  the document
1208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the document, it's recursive
1210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpDocument(xmlDebugCtxtPtr ctxt, xmlDocPtr doc)
1213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (doc == NULL) {
1215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
1216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "DOCUMENT == NULL !\n");
1217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
1218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpDocumentHead(ctxt, doc);
1220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (((doc->type == XML_DOCUMENT_NODE) ||
1221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         (doc->type == XML_HTML_DOCUMENT_NODE))
1222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        && (doc->children != NULL)) {
1223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->depth++;
1224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlCtxtDumpNodeList(ctxt, doc->children);
1225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->depth--;
1226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpEntityCallback(xmlEntityPtr cur, xmlDebugCtxtPtr ctxt)
1231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (cur == NULL) {
1233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
1234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "Entity is NULL");
1235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
1236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt->check) {
1238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "%s : ", (char *) cur->name);
1239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        switch (cur->etype) {
1240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_INTERNAL_GENERAL_ENTITY:
1241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "INTERNAL GENERAL, ");
1242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
1243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
1244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "EXTERNAL PARSED, ");
1245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
1246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
1247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "EXTERNAL UNPARSED, ");
1248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
1249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_INTERNAL_PARAMETER_ENTITY:
1250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "INTERNAL PARAMETER, ");
1251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
1252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XML_EXTERNAL_PARAMETER_ENTITY:
1253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "EXTERNAL PARAMETER, ");
1254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
1255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            default:
1256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlDebugErr2(ctxt, XML_CHECK_ENTITY_TYPE,
1257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			     "Unknown entity type %d\n", cur->etype);
1258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
1259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (cur->ExternalID != NULL)
1260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "ID \"%s\"", (char *) cur->ExternalID);
1261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (cur->SystemID != NULL)
1262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "SYSTEM \"%s\"", (char *) cur->SystemID);
1263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (cur->orig != NULL)
1264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "\n orig \"%s\"", (char *) cur->orig);
1265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL))
1266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "\n content \"%s\"",
1267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    (char *) cur->content);
1268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "\n");
1269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtDumpEntities:
1274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc:  the document
1276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for all the entities in use by the document
1278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpEntities(xmlDebugCtxtPtr ctxt, xmlDocPtr doc)
1281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (doc == NULL) return;
1283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpDocHead(ctxt, doc);
1284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((doc->intSubset != NULL) && (doc->intSubset->entities != NULL)) {
1285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlEntitiesTablePtr table = (xmlEntitiesTablePtr)
1286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            doc->intSubset->entities;
1287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
1289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "Entities in internal subset\n");
1290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlHashScan(table, (xmlHashScanner) xmlCtxtDumpEntityCallback,
1291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    ctxt);
1292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else
1293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "No entities in internal subset\n");
1294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((doc->extSubset != NULL) && (doc->extSubset->entities != NULL)) {
1295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlEntitiesTablePtr table = (xmlEntitiesTablePtr)
1296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            doc->extSubset->entities;
1297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
1299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "Entities in external subset\n");
1300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlHashScan(table, (xmlHashScanner) xmlCtxtDumpEntityCallback,
1301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    ctxt);
1302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (!ctxt->check)
1303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "No entities in external subset\n");
1304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtDumpDTD:
1308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dtd:  the DTD
1310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the DTD
1312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtDumpDTD(xmlDebugCtxtPtr ctxt, xmlDtdPtr dtd)
1315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (dtd == NULL) {
1317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!ctxt->check)
1318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "DTD is NULL\n");
1319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
1320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpDtdNode(ctxt, dtd);
1322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (dtd->children == NULL)
1323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "    DTD is empty\n");
1324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else {
1325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->depth++;
1326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlCtxtDumpNodeList(ctxt, dtd->children);
1327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->depth--;
1328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************
1332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *									*
1333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *			Public entry points for dump			*
1334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *									*
1335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/
1336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDebugDumpString:
1339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str:  the string
1341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps informations about the string, shorten it if necessary
1343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugDumpString(FILE * output, const xmlChar * str)
1346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int i;
1348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL)
1350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	output = stdout;
1351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str == NULL) {
1352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(output, "(NULL)");
1353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
1354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    for (i = 0; i < 40; i++)
1356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (str[i] == 0)
1357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return;
1358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else if (IS_BLANK_CH(str[i]))
1359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fputc(' ', output);
1360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else if (str[i] >= 0x80)
1361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(output, "#%X", str[i]);
1362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else
1363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fputc(str[i], output);
1364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    fprintf(output, "...");
1365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDebugDumpAttr:
1369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @attr:  the attribute
1371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth:  the indentation level.
1372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the attribute
1374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugDumpAttr(FILE *output, xmlAttrPtr attr, int depth) {
1377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDebugCtxt ctxt;
1378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL) return;
1380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpInitCtxt(&ctxt);
1381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.output = output;
1382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.depth = depth;
1383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpAttr(&ctxt, attr);
1384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpCleanCtxt(&ctxt);
1385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDebugDumpEntities:
1390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc:  the document
1392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for all the entities in use by the document
1394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugDumpEntities(FILE * output, xmlDocPtr doc)
1397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDebugCtxt ctxt;
1399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL) return;
1401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpInitCtxt(&ctxt);
1402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.output = output;
1403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpEntities(&ctxt, doc);
1404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpCleanCtxt(&ctxt);
1405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDebugDumpAttrList:
1409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @attr:  the attribute list
1411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth:  the indentation level.
1412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the attribute list
1414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugDumpAttrList(FILE * output, xmlAttrPtr attr, int depth)
1417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDebugCtxt ctxt;
1419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL) return;
1421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpInitCtxt(&ctxt);
1422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.output = output;
1423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.depth = depth;
1424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpAttrList(&ctxt, attr);
1425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpCleanCtxt(&ctxt);
1426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDebugDumpOneNode:
1430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  the node
1432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth:  the indentation level.
1433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the element node, it is not recursive
1435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugDumpOneNode(FILE * output, xmlNodePtr node, int depth)
1438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDebugCtxt ctxt;
1440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL) return;
1442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpInitCtxt(&ctxt);
1443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.output = output;
1444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.depth = depth;
1445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpOneNode(&ctxt, node);
1446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpCleanCtxt(&ctxt);
1447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDebugDumpNode:
1451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  the node
1453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth:  the indentation level.
1454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the element node, it is recursive
1456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugDumpNode(FILE * output, xmlNodePtr node, int depth)
1459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDebugCtxt ctxt;
1461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL)
1463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	output = stdout;
1464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpInitCtxt(&ctxt);
1465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.output = output;
1466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.depth = depth;
1467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpNode(&ctxt, node);
1468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpCleanCtxt(&ctxt);
1469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDebugDumpNodeList:
1473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  the node list
1475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth:  the indentation level.
1476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the list of element node, it is recursive
1478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugDumpNodeList(FILE * output, xmlNodePtr node, int depth)
1481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDebugCtxt ctxt;
1483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL)
1485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	output = stdout;
1486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpInitCtxt(&ctxt);
1487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.output = output;
1488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.depth = depth;
1489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpNodeList(&ctxt, node);
1490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpCleanCtxt(&ctxt);
1491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDebugDumpDocumentHead:
1495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc:  the document
1497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information cncerning the document, not recursive
1499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugDumpDocumentHead(FILE * output, xmlDocPtr doc)
1502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDebugCtxt ctxt;
1504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL)
1506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	output = stdout;
1507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpInitCtxt(&ctxt);
1508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.options |= DUMP_TEXT_TYPE;
1509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.output = output;
1510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpDocumentHead(&ctxt, doc);
1511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpCleanCtxt(&ctxt);
1512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDebugDumpDocument:
1516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc:  the document
1518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the document, it's recursive
1520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugDumpDocument(FILE * output, xmlDocPtr doc)
1523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDebugCtxt ctxt;
1525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL)
1527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	output = stdout;
1528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpInitCtxt(&ctxt);
1529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.options |= DUMP_TEXT_TYPE;
1530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.output = output;
1531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpDocument(&ctxt, doc);
1532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpCleanCtxt(&ctxt);
1533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDebugDumpDTD:
1537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dtd:  the DTD
1539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dumps debug information for the DTD
1541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugDumpDTD(FILE * output, xmlDtdPtr dtd)
1544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDebugCtxt ctxt;
1546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL)
1548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	output = stdout;
1549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpInitCtxt(&ctxt);
1550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.options |= DUMP_TEXT_TYPE;
1551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.output = output;
1552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpDTD(&ctxt, dtd);
1553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpCleanCtxt(&ctxt);
1554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************
1557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *									*
1558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *			Public entry points for checkings		*
1559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *									*
1560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/
1561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDebugCheckDocument:
1564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc:  the document
1566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check the document for potential content problems, and output
1568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the errors to @output
1569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of errors found
1571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
1573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDebugCheckDocument(FILE * output, xmlDocPtr doc)
1574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDebugCtxt ctxt;
1576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL)
1578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	output = stdout;
1579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpInitCtxt(&ctxt);
1580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.output = output;
1581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt.check = 1;
1582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpDocument(&ctxt, doc);
1583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlCtxtDumpCleanCtxt(&ctxt);
1584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ctxt.errors);
1585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************
1588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *									*
1589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *			Helpers for Shell				*
1590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *									*
1591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/
1592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlLsCountNode:
1595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  the node to count
1596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Count the children of @node.
1598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of children of @node.
1600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
1602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlLsCountNode(xmlNodePtr node) {
1603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int ret = 0;
1604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr list = NULL;
160594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun
1606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node == NULL)
1607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return(0);
1608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (node->type) {
1610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_ELEMENT_NODE:
1611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    list = node->children;
1612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_DOCUMENT_NODE:
1614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_HTML_DOCUMENT_NODE:
1615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_DOCB_ENABLED
1616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_DOCB_DOCUMENT_NODE:
1617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
1618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    list = ((xmlDocPtr) node)->children;
1619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_ATTRIBUTE_NODE:
1621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    list = ((xmlAttrPtr) node)->children;
1622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_TEXT_NODE:
1624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_CDATA_SECTION_NODE:
1625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_PI_NODE:
1626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_COMMENT_NODE:
1627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (node->content != NULL) {
1628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		ret = xmlStrlen(node->content);
1629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
1630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_ENTITY_REF_NODE:
1632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_DOCUMENT_TYPE_NODE:
1633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_ENTITY_NODE:
1634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_DOCUMENT_FRAG_NODE:
1635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_NOTATION_NODE:
1636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_DTD_NODE:
1637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ELEMENT_DECL:
1638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ATTRIBUTE_DECL:
1639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ENTITY_DECL:
1640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_NAMESPACE_DECL:
1641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_XINCLUDE_START:
1642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_XINCLUDE_END:
1643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    ret = 1;
1644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
164694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun    for (;list != NULL;ret++)
1647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        list = list->next;
1648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(ret);
1649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlLsOneNode:
1653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the FILE * for the output
1654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  the node to dump
1655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dump to @output the type and name of @node.
1657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlLsOneNode(FILE *output, xmlNodePtr node) {
1660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL) return;
1661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node == NULL) {
1662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	fprintf(output, "NULL\n");
1663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return;
1664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (node->type) {
1666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_ELEMENT_NODE:
1667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "-");
1668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_ATTRIBUTE_NODE:
1670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "a");
1671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_TEXT_NODE:
1673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "t");
1674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_CDATA_SECTION_NODE:
1676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "C");
1677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_ENTITY_REF_NODE:
1679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "e");
1680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_ENTITY_NODE:
1682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "E");
1683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_PI_NODE:
1685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "p");
1686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_COMMENT_NODE:
1688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "c");
1689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_DOCUMENT_NODE:
1691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "d");
1692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_HTML_DOCUMENT_NODE:
1694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "h");
1695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_DOCUMENT_TYPE_NODE:
1697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "T");
1698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_DOCUMENT_FRAG_NODE:
1700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "F");
1701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_NOTATION_NODE:
1703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "N");
1704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_NAMESPACE_DECL:
1706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "n");
1707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	default:
1709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "?");
1710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node->type != XML_NAMESPACE_DECL) {
1712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (node->properties != NULL)
1713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "a");
171494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	else
1715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "-");
171694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	if (node->nsDef != NULL)
1717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "n");
171894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	else
1719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(output, "-");
1720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    fprintf(output, " %8d ", xmlLsCountNode(node));
1723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (node->type) {
1725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_ELEMENT_NODE:
172694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	    if (node->name != NULL) {
172794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                if ((node->ns != NULL) && (node->ns->prefix != NULL))
172894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                    fprintf(output, "%s:", node->ns->prefix);
1729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		fprintf(output, "%s", (const char *) node->name);
173094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            }
1731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_ATTRIBUTE_NODE:
1733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (node->name != NULL)
1734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		fprintf(output, "%s", (const char *) node->name);
1735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_TEXT_NODE:
1737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (node->content != NULL) {
1738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlDebugDumpString(output, node->content);
1739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
1740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_CDATA_SECTION_NODE:
1742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_ENTITY_REF_NODE:
1744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (node->name != NULL)
1745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		fprintf(output, "%s", (const char *) node->name);
1746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_ENTITY_NODE:
1748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (node->name != NULL)
1749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		fprintf(output, "%s", (const char *) node->name);
1750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_PI_NODE:
1752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (node->name != NULL)
1753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		fprintf(output, "%s", (const char *) node->name);
1754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_COMMENT_NODE:
1756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_DOCUMENT_NODE:
1758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_HTML_DOCUMENT_NODE:
1760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_DOCUMENT_TYPE_NODE:
1762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_DOCUMENT_FRAG_NODE:
1764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_NOTATION_NODE:
1766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	case XML_NAMESPACE_DECL: {
1768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlNsPtr ns = (xmlNsPtr) node;
1769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (ns->prefix == NULL)
1771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		fprintf(output, "default -> %s", (char *)ns->href);
1772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    else
1773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		fprintf(output, "%s -> %s", (char *)ns->prefix,
1774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			(char *)ns->href);
1775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;
1776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
1777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	default:
1778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (node->name != NULL)
1779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		fprintf(output, "%s", (const char *) node->name);
1780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    fprintf(output, "\n");
1782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlBoolToText:
1786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @boolval: a bool to turn into text
1787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
178894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * Convenient way to turn bool into text
1789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a pointer to either "True" or "False"
1791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectconst char *
1793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlBoolToText(int boolval)
1794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (boolval)
1796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return("True");
1797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else
1798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return("False");
1799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
1802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/****************************************************************
1803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *								*
180494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *		The XML shell related functions			*
1805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *								*
1806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ****************************************************************/
1807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/*
1811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Improvement/cleanups for the XML shell
1812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *     - allow to shell out an editor on a subpart
1813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *     - cleanup function registrations (with help) and calling
1814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *     - provide registration routines
1815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellPrintXPathError:
1819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @errorType: valid xpath error id
1820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @arg: the argument that cause xpath to fail
1821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Print the xpath error to libxml default error channel
1823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellPrintXPathError(int errorType, const char *arg)
1826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    const char *default_arg = "Result";
1828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!arg)
1830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        arg = default_arg;
1831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (errorType) {
1833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XPATH_UNDEFINED:
1834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlGenericError(xmlGenericErrorContext,
1835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            "%s: no such node\n", arg);
1836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XPATH_BOOLEAN:
1839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlGenericError(xmlGenericErrorContext,
1840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            "%s is a Boolean\n", arg);
1841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XPATH_NUMBER:
1843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlGenericError(xmlGenericErrorContext,
1844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            "%s is a number\n", arg);
1845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XPATH_STRING:
1847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlGenericError(xmlGenericErrorContext,
1848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            "%s is a string\n", arg);
1849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XPATH_POINT:
1851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlGenericError(xmlGenericErrorContext,
1852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            "%s is a point\n", arg);
1853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XPATH_RANGE:
1855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlGenericError(xmlGenericErrorContext,
1856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            "%s is a range\n", arg);
1857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XPATH_LOCATIONSET:
1859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlGenericError(xmlGenericErrorContext,
1860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            "%s is a range\n", arg);
1861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XPATH_USERS:
1863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlGenericError(xmlGenericErrorContext,
1864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            "%s is user-defined\n", arg);
1865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XPATH_XSLT_TREE:
1867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlGenericError(xmlGenericErrorContext,
1868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            "%s is an XSLT value tree\n", arg);
1869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
1870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if 0
1872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext,
1873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    "Try casting the result string function (xpath builtin)\n",
1874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    arg);
1875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
1876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED
1880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellPrintNodeCtxt:
1882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt : a non-null shell context
1883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node : a non-null node to print to the output FILE
1884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Print node to the output FILE
1886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellPrintNodeCtxt(xmlShellCtxtPtr ctxt,xmlNodePtr node)
1889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    FILE *fp;
1891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!node)
1893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
1894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt == NULL)
1895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	fp = stdout;
1896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else
1897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	fp = ctxt->output;
1898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node->type == XML_DOCUMENT_NODE)
1900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlDocDump(fp, (xmlDocPtr) node);
1901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else if (node->type == XML_ATTRIBUTE_NODE)
1902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlDebugDumpAttrList(fp, (xmlAttrPtr) node, 0);
1903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else
1904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlElemDump(fp, node->doc, node);
1905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    fprintf(fp, "\n");
1907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellPrintNode:
1911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node : a non-null node to print to the output FILE
1912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Print node to the output FILE
1914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellPrintNode(xmlNodePtr node)
1917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlShellPrintNodeCtxt(NULL, node);
1919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */
1921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellPrintXPathResultCtxt:
1924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: a valid shell context
1925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @list: a valid result generated by an xpath evaluation
1926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Prints result to the output FILE
1928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
1930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellPrintXPathResultCtxt(xmlShellCtxtPtr ctxt,xmlXPathObjectPtr list)
1931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt)
1933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project       return;
1934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (list != NULL) {
1936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        switch (list->type) {
1937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XPATH_NODESET:{
1938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED
1939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    int indx;
1940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    if (list->nodesetval) {
1942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        for (indx = 0; indx < list->nodesetval->nodeNr;
1943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                             indx++) {
1944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlShellPrintNodeCtxt(ctxt,
1945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    list->nodesetval->nodeTab[indx]);
1946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        }
1947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    } else {
1948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        xmlGenericError(xmlGenericErrorContext,
1949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                        "Empty node set\n");
1950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    }
1951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    break;
1952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else
1953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    xmlGenericError(xmlGenericErrorContext,
1954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    "Node set\n");
1955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */
1956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
1957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XPATH_BOOLEAN:
1958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlGenericError(xmlGenericErrorContext,
1959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                "Is a Boolean:%s\n",
1960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                xmlBoolToText(list->boolval));
1961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
1962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XPATH_NUMBER:
1963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlGenericError(xmlGenericErrorContext,
1964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                "Is a number:%0g\n", list->floatval);
1965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
1966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            case XPATH_STRING:
1967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlGenericError(xmlGenericErrorContext,
1968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                "Is a string:%s\n", list->stringval);
1969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
1970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            default:
1972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlShellPrintXPathError(list->type, NULL);
1973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
1974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
1975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellPrintXPathResult:
1979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @list: a valid result generated by an xpath evaluation
1980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Prints result to the output FILE
1982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
1983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
1984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellPrintXPathResult(xmlXPathObjectPtr list)
1985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
1986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlShellPrintXPathResultCtxt(NULL, list);
1987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
1988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
1989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
1990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellList:
1991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
1992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @arg:  unused
1993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  a node
1994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
1995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "ls"
1997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Does an Unix like listing of the given node (like a directory)
1998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
1999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0
2000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
2002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellList(xmlShellCtxtPtr ctxt,
2003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
2004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             xmlNodePtr node2 ATTRIBUTE_UNUSED)
2005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr cur;
2007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt)
2008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (0);
2009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node == NULL) {
2010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	fprintf(ctxt->output, "NULL\n");
2011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return (0);
2012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((node->type == XML_DOCUMENT_NODE) ||
2014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (node->type == XML_HTML_DOCUMENT_NODE)) {
2015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        cur = ((xmlDocPtr) node)->children;
2016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (node->type == XML_NAMESPACE_DECL) {
2017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlLsOneNode(ctxt->output, node);
2018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (0);
2019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (node->children != NULL) {
2020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        cur = node->children;
2021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlLsOneNode(ctxt->output, node);
2023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (0);
2024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while (cur != NULL) {
2026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlLsOneNode(ctxt->output, cur);
2027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        cur = cur->next;
2028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (0);
2030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellBase:
2034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @arg:  unused
2036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  a node
2037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "base"
2040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * dumps the current XML base of the node
2041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0
2043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
2045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellBase(xmlShellCtxtPtr ctxt,
2046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
2047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             xmlNodePtr node2 ATTRIBUTE_UNUSED)
2048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar *base;
2050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt)
2051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return 0;
2052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node == NULL) {
2053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	fprintf(ctxt->output, "NULL\n");
2054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return (0);
205594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun    }
2056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    base = xmlNodeGetBase(node->doc, node);
2058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (base == NULL) {
2060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, " No base found !!!\n");
2061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "%s\n", base);
2063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(base);
2064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (0);
2066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_TREE_ENABLED
2069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellSetBase:
2071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @arg:  the new base
2073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  a node
2074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "setbase"
2077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * change the current XML base of the node
2078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0
2080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int
2082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellSetBase(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
2083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
2084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             xmlNodePtr node2 ATTRIBUTE_UNUSED)
2085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodeSetBase(node, (xmlChar*) arg);
2087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (0);
2088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
2092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellRegisterNamespace:
2094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @arg:  a string in prefix=nsuri format
2096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  unused
2097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "setns"
2100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * register/unregister a prefix=namespace pair
2101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * on the XPath context
2102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 on success and a negative value otherwise.
2104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int
2106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellRegisterNamespace(xmlShellCtxtPtr ctxt, char *arg,
2107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project      xmlNodePtr node ATTRIBUTE_UNUSED, xmlNodePtr node2 ATTRIBUTE_UNUSED)
2108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar* nsListDup;
2110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar* prefix;
2111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar* href;
2112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar* next;
2113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    nsListDup = xmlStrdup((xmlChar *) arg);
2115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    next = nsListDup;
2116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while(next != NULL) {
2117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/* skip spaces */
2118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*while((*next) == ' ') next++;*/
2119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if((*next) == '\0') break;
2120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/* find prefix */
2122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	prefix = next;
2123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	next = (xmlChar*)xmlStrchr(next, '=');
2124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if(next == NULL) {
2125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(ctxt->output, "setns: prefix=[nsuri] required\n");
2126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFree(nsListDup);
2127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return(-1);
2128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	*(next++) = '\0';
2130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/* find href */
2132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	href = next;
2133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	next = (xmlChar*)xmlStrchr(next, ' ');
2134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if(next != NULL) {
2135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    *(next++) = '\0';
2136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/* do register namespace */
2139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if(xmlXPathRegisterNs(ctxt->pctxt, prefix, href) != 0) {
2140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    fprintf(ctxt->output,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", prefix, href);
2141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFree(nsListDup);
2142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    return(-1);
2143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlFree(nsListDup);
2147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(0);
2148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellRegisterRootNamespaces:
2151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @arg:  unused
2153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  the root element
2154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "setrootns"
2157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * which registers all namespaces declarations found on the root element.
2158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 on success and a negative value otherwise.
2160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int
2162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellRegisterRootNamespaces(xmlShellCtxtPtr ctxt, char *arg ATTRIBUTE_UNUSED,
2163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project      xmlNodePtr root, xmlNodePtr node2 ATTRIBUTE_UNUSED)
2164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNsPtr ns;
2166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((root == NULL) || (root->type != XML_ELEMENT_NODE) ||
2168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (root->nsDef == NULL) || (ctxt == NULL) || (ctxt->pctxt == NULL))
2169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return(-1);
2170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ns = root->nsDef;
2171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while (ns != NULL) {
2172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ns->prefix == NULL)
2173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlXPathRegisterNs(ctxt->pctxt, BAD_CAST "defaultns", ns->href);
2174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else
2175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlXPathRegisterNs(ctxt->pctxt, ns->prefix, ns->href);
2176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ns = ns->next;
2177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(0);
2179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellGrep:
2184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @arg:  the string or regular expression to find
2186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  a node
2187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "grep"
2190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * dumps informations about the node (namespace, attributes, content).
2191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0
2193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int
2195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellGrep(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
2196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            char *arg, xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED)
2197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt)
2199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (0);
2200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node == NULL)
2201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return (0);
2202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (arg == NULL)
2203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return (0);
2204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_REGEXP_ENABLED
2205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((xmlStrchr((xmlChar *) arg, '?')) ||
2206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(xmlStrchr((xmlChar *) arg, '*')) ||
2207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(xmlStrchr((xmlChar *) arg, '.')) ||
2208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(xmlStrchr((xmlChar *) arg, '['))) {
2209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while (node != NULL) {
2212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (node->type == XML_COMMENT_NODE) {
2213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (xmlStrstr(node->content, (xmlChar *) arg)) {
2214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		fprintf(ctxt->output, "%s : ", xmlGetNodePath(node));
2216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlShellList(ctxt, NULL, node, NULL);
2217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
2218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (node->type == XML_TEXT_NODE) {
2219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (xmlStrstr(node->content, (xmlChar *) arg)) {
2220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		fprintf(ctxt->output, "%s : ", xmlGetNodePath(node->parent));
2222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlShellList(ctxt, NULL, node->parent, NULL);
2223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
2224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
2225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        /*
2227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         * Browse the full subtree, deep first
2228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         */
2229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if ((node->type == XML_DOCUMENT_NODE) ||
2231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            (node->type == XML_HTML_DOCUMENT_NODE)) {
2232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            node = ((xmlDocPtr) node)->children;
2233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if ((node->children != NULL)
2234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                   && (node->type != XML_ENTITY_REF_NODE)) {
2235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            /* deep first */
2236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            node = node->children;
2237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (node->next != NULL) {
2238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            /* then siblings */
2239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            node = node->next;
2240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else {
2241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            /* go up to parents->next if needed */
2242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            while (node != NULL) {
2243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (node->parent != NULL) {
2244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    node = node->parent;
2245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
2246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (node->next != NULL) {
2247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    node = node->next;
2248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    break;
2249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
2250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (node->parent == NULL) {
2251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    node = NULL;
2252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    break;
2253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
2254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
2255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (0);
2258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellDir:
2262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @arg:  unused
2264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  a node
2265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "dir"
2268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * dumps informations about the node (namespace, attributes, content).
2269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0
2271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
2273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellDir(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
2274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
2275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlNodePtr node2 ATTRIBUTE_UNUSED)
2276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt)
2278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (0);
2279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node == NULL) {
2280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	fprintf(ctxt->output, "NULL\n");
2281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return (0);
228294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun    }
2283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((node->type == XML_DOCUMENT_NODE) ||
2284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (node->type == XML_HTML_DOCUMENT_NODE)) {
2285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlDebugDumpDocumentHead(ctxt->output, (xmlDocPtr) node);
2286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (node->type == XML_ATTRIBUTE_NODE) {
2287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlDebugDumpAttr(ctxt->output, (xmlAttrPtr) node, 0);
2288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlDebugDumpOneNode(ctxt->output, node, 0);
2290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (0);
2292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellSetContent:
2296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value:  the content as a string
2298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  a node
2299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "dir"
2302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * dumps informations about the node (namespace, attributes, content).
2303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0
2305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int
2307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellSetContent(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
2308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            char *value, xmlNodePtr node,
2309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlNodePtr node2 ATTRIBUTE_UNUSED)
2310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr results;
2312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserErrors ret;
2313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt)
2315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (0);
2316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node == NULL) {
2317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	fprintf(ctxt->output, "NULL\n");
2318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return (0);
2319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (value == NULL) {
2321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "NULL\n");
2322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return (0);
2323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ret = xmlParseInNodeContext(node, value, strlen(value), 0, &results);
2326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ret == XML_ERR_OK) {
2327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (node->children != NULL) {
2328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlFreeNodeList(node->children);
2329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    node->children = NULL;
2330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    node->last = NULL;
2331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
2332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlAddChildList(node, results);
2333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "failed to parse content\n");
2335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (0);
2337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SCHEMAS_ENABLED
2340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellRNGValidate:
2342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @schemas:  the path to the Relax-NG schemas
2344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  a node
2345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "relaxng"
2348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * validating the instance against a Relax-NG schemas
2349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0
2351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int
2353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellRNGValidate(xmlShellCtxtPtr sctxt, char *schemas,
2354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlNodePtr node ATTRIBUTE_UNUSED,
2355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlNodePtr node2 ATTRIBUTE_UNUSED)
2356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlRelaxNGPtr relaxngschemas;
2358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlRelaxNGParserCtxtPtr ctxt;
2359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlRelaxNGValidCtxtPtr vctxt;
2360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int ret;
2361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt = xmlRelaxNGNewParserCtxt(schemas);
2363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlRelaxNGSetParserErrors(ctxt,
2364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (xmlRelaxNGValidityErrorFunc) fprintf,
2365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (xmlRelaxNGValidityWarningFunc) fprintf,
2366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    stderr);
2367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    relaxngschemas = xmlRelaxNGParse(ctxt);
2368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlRelaxNGFreeParserCtxt(ctxt);
2369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (relaxngschemas == NULL) {
2370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericError(xmlGenericErrorContext,
2371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		"Relax-NG schema %s failed to compile\n", schemas);
2372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return(-1);
2373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    vctxt = xmlRelaxNGNewValidCtxt(relaxngschemas);
2375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlRelaxNGSetValidErrors(vctxt,
2376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (xmlRelaxNGValidityErrorFunc) fprintf,
2377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (xmlRelaxNGValidityWarningFunc) fprintf,
2378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    stderr);
2379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ret = xmlRelaxNGValidateDoc(vctxt, sctxt->doc);
2380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ret == 0) {
2381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	fprintf(stderr, "%s validates\n", sctxt->filename);
2382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (ret > 0) {
2383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	fprintf(stderr, "%s fails to validate\n", sctxt->filename);
2384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	fprintf(stderr, "%s validation generated an internal error\n",
2386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	       sctxt->filename);
2387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlRelaxNGFreeValidCtxt(vctxt);
2389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (relaxngschemas != NULL)
2390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlRelaxNGFree(relaxngschemas);
2391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return(0);
2392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED
2396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellCat:
2398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @arg:  unused
2400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  a node
2401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "cat"
2404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * dumps the serialization node content (XML or HTML).
2405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0
2407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
2409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellCat(xmlShellCtxtPtr ctxt, char *arg ATTRIBUTE_UNUSED,
2410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED)
2411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt)
2413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (0);
2414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node == NULL) {
2415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	fprintf(ctxt->output, "NULL\n");
2416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return (0);
241794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun    }
2418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->doc->type == XML_HTML_DOCUMENT_NODE) {
2419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTML_ENABLED
2420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (node->type == XML_HTML_DOCUMENT_NODE)
2421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            htmlDocDump(ctxt->output, (htmlDocPtr) node);
2422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else
2423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            htmlNodeDumpFile(ctxt->output, ctxt->doc, node);
2424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else
2425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (node->type == XML_DOCUMENT_NODE)
2426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlDocDump(ctxt->output, (xmlDocPtr) node);
2427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else
2428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlElemDump(ctxt->output, ctxt->doc, node);
2429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_HTML_ENABLED */
2430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (node->type == XML_DOCUMENT_NODE)
2432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlDocDump(ctxt->output, (xmlDocPtr) node);
2433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else
2434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlElemDump(ctxt->output, ctxt->doc, node);
2435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    fprintf(ctxt->output, "\n");
2437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (0);
2438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */
2440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellLoad:
2443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename:  the file name
2445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  unused
2446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "load"
2449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * loads a new document specified by the filename
2450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 or -1 if loading failed
2452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
2454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellLoad(xmlShellCtxtPtr ctxt, char *filename,
2455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             xmlNodePtr node ATTRIBUTE_UNUSED,
2456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             xmlNodePtr node2 ATTRIBUTE_UNUSED)
2457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlDocPtr doc;
2459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int html = 0;
2460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt == NULL) || (filename == NULL)) return(-1);
2462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->doc != NULL)
2463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        html = (ctxt->doc->type == XML_HTML_DOCUMENT_NODE);
2464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (html) {
2466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTML_ENABLED
2467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        doc = htmlParseFile(filename, NULL);
2468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else
2469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        fprintf(ctxt->output, "HTML support not compiled in\n");
2470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        doc = NULL;
2471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_HTML_ENABLED */
2472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        doc = xmlReadFile(filename,NULL,0);
2474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (doc != NULL) {
2476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ctxt->loaded == 1) {
2477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlFreeDoc(ctxt->doc);
2478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
2479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->loaded = 1;
2480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
2481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlXPathFreeContext(ctxt->pctxt);
2482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_XPATH_ENABLED */
2483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(ctxt->filename);
2484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->doc = doc;
2485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->node = (xmlNodePtr) doc;
2486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
2487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->pctxt = xmlXPathNewContext(doc);
2488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_XPATH_ENABLED */
2489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        ctxt->filename = (char *) xmlCanonicPath((xmlChar *) filename);
2490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else
2491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (-1);
2492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (0);
2493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED
2496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellWrite:
2498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename:  the file name
2500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  a node in the tree
2501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "write"
2504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Write the current node to the filename, it saves the serialization
2505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of the subtree under the @node specified
2506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 or -1 in case of error
2508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
2510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellWrite(xmlShellCtxtPtr ctxt, char *filename, xmlNodePtr node,
2511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project              xmlNodePtr node2 ATTRIBUTE_UNUSED)
2512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (node == NULL)
2514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (-1);
2515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((filename == NULL) || (filename[0] == 0)) {
2516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (-1);
2517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef W_OK
2519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (access((char *) filename, W_OK)) {
2520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlGenericError(xmlGenericErrorContext,
2521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        "Cannot write to %s\n", filename);
2522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (-1);
2523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (node->type) {
2526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DOCUMENT_NODE:
2527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (xmlSaveFile((char *) filename, ctxt->doc) < -1) {
2528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlGenericError(xmlGenericErrorContext,
2529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                "Failed to write to %s\n", filename);
2530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                return (-1);
2531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
2532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
2533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_HTML_DOCUMENT_NODE:
2534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTML_ENABLED
2535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (htmlSaveFile((char *) filename, ctxt->doc) < 0) {
2536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlGenericError(xmlGenericErrorContext,
2537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                "Failed to write to %s\n", filename);
2538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                return (-1);
2539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
2540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else
2541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (xmlSaveFile((char *) filename, ctxt->doc) < -1) {
2542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlGenericError(xmlGenericErrorContext,
2543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                "Failed to write to %s\n", filename);
2544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                return (-1);
2545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
2546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_HTML_ENABLED */
2547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
2548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        default:{
2549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                FILE *f;
2550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                f = fopen((char *) filename, "w");
2552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (f == NULL) {
2553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    xmlGenericError(xmlGenericErrorContext,
2554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                    "Failed to write to %s\n", filename);
2555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    return (-1);
2556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
2557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlElemDump(f, ctxt->doc, node);
2558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fclose(f);
2559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
2560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (0);
2562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellSave:
2566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename:  the file name (optional)
2568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  unused
2569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "save"
2572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Write the current document to the filename, or it's original name
2573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 or -1 in case of error
2575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
2577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellSave(xmlShellCtxtPtr ctxt, char *filename,
2578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             xmlNodePtr node ATTRIBUTE_UNUSED,
2579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             xmlNodePtr node2 ATTRIBUTE_UNUSED)
2580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt == NULL) || (ctxt->doc == NULL))
2582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (-1);
2583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((filename == NULL) || (filename[0] == 0))
2584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        filename = ctxt->filename;
2585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (filename == NULL)
2586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (-1);
2587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef W_OK
2588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (access((char *) filename, W_OK)) {
2589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlGenericError(xmlGenericErrorContext,
2590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        "Cannot save to %s\n", filename);
2591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (-1);
2592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (ctxt->doc->type) {
2595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_DOCUMENT_NODE:
2596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (xmlSaveFile((char *) filename, ctxt->doc) < 0) {
2597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlGenericError(xmlGenericErrorContext,
2598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                "Failed to save to %s\n", filename);
2599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
2600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
2601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_HTML_DOCUMENT_NODE:
2602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTML_ENABLED
2603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (htmlSaveFile((char *) filename, ctxt->doc) < 0) {
2604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlGenericError(xmlGenericErrorContext,
2605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                "Failed to save to %s\n", filename);
2606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
2607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else
2608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (xmlSaveFile((char *) filename, ctxt->doc) < 0) {
2609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlGenericError(xmlGenericErrorContext,
2610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                "Failed to save to %s\n", filename);
2611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
2612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_HTML_ENABLED */
2613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
2614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        default:
2615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlGenericError(xmlGenericErrorContext,
2616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    "To save to subparts of a document use the 'write' command\n");
2617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            return (-1);
2618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (0);
2621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */
2623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
2625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellValidate:
2627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dtd:  the DTD URI (optional)
2629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node:  unused
2630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "validate"
2633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Validate the document, if a DTD path is provided, then the validation
2634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is done against the given DTD.
2635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 or -1 in case of error
2637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
2639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellValidate(xmlShellCtxtPtr ctxt, char *dtd,
2640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                 xmlNodePtr node ATTRIBUTE_UNUSED,
2641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                 xmlNodePtr node2 ATTRIBUTE_UNUSED)
2642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlValidCtxt vctxt;
2644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int res = -1;
2645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt == NULL) || (ctxt->doc == NULL)) return(-1);
2647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    vctxt.userData = stderr;
2648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    vctxt.error = (xmlValidityErrorFunc) fprintf;
2649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    vctxt.warning = (xmlValidityWarningFunc) fprintf;
2650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((dtd == NULL) || (dtd[0] == 0)) {
2652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        res = xmlValidateDocument(&vctxt, ctxt->doc);
2653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
2654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlDtdPtr subset;
2655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        subset = xmlParseDTD(NULL, (xmlChar *) dtd);
2657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (subset != NULL) {
2658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            res = xmlValidateDtd(&vctxt, ctxt->doc, subset);
2659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlFreeDtd(subset);
2661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
2662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (res);
2664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
2666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellDu:
2669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @arg:  unused
2671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @tree:  a node defining a subtree
2672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "du"
2675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * show the structure of the subtree under node @tree
2676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If @tree is null, the command works on the current node.
2677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 or -1 in case of error
2679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
2681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellDu(xmlShellCtxtPtr ctxt,
2682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project           char *arg ATTRIBUTE_UNUSED, xmlNodePtr tree,
2683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project           xmlNodePtr node2 ATTRIBUTE_UNUSED)
2684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr node;
2686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int indent = 0, i;
2687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (!ctxt)
2689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return (-1);
2690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (tree == NULL)
2692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (-1);
2693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    node = tree;
2694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while (node != NULL) {
2695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if ((node->type == XML_DOCUMENT_NODE) ||
2696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            (node->type == XML_HTML_DOCUMENT_NODE)) {
2697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "/\n");
2698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (node->type == XML_ELEMENT_NODE) {
2699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            for (i = 0; i < indent; i++)
2700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "  ");
270194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            if ((node->ns) && (node->ns->prefix))
270294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                fprintf(ctxt->output, "%s:", node->ns->prefix);
2703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            fprintf(ctxt->output, "%s\n", node->name);
2704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else {
2705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
2706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        /*
2708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         * Browse the full subtree, deep first
2709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         */
2710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if ((node->type == XML_DOCUMENT_NODE) ||
2712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            (node->type == XML_HTML_DOCUMENT_NODE)) {
2713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            node = ((xmlDocPtr) node)->children;
2714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if ((node->children != NULL)
2715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                   && (node->type != XML_ENTITY_REF_NODE)) {
2716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            /* deep first */
2717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            node = node->children;
2718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            indent++;
2719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if ((node != tree) && (node->next != NULL)) {
2720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            /* then siblings */
2721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            node = node->next;
2722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (node != tree) {
2723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            /* go up to parents->next if needed */
2724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            while (node != tree) {
2725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (node->parent != NULL) {
2726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    node = node->parent;
2727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    indent--;
2728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
2729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if ((node != tree) && (node->next != NULL)) {
2730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    node = node->next;
2731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    break;
2732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
2733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (node->parent == NULL) {
2734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    node = NULL;
2735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    break;
2736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
2737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (node == tree) {
2738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    node = NULL;
2739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    break;
2740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
2741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
2742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            /* exit condition */
2743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (node == tree)
2744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                node = NULL;
2745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else
2746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            node = NULL;
2747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (0);
2749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShellPwd:
2753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt:  the shell context
2754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer:  the output buffer
275594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * @node:  a node
2756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node2:  unused
2757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements the XML shell function "pwd"
2759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Show the full path from the root to the node, if needed building
2760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * thumblers when similar elements exists at a given ancestor level.
2761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The output is compatible with XPath commands.
2762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
2763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 or -1 in case of error
2764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
2766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShellPwd(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED, char *buffer,
2767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED)
2768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar *path;
2770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((node == NULL) || (buffer == NULL))
2772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (-1);
2773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    path = xmlGetNodePath(node);
2775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (path == NULL)
2776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	return (-1);
2777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
2779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * This test prevents buffer overflow, because this routine
2780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * is only called by xmlShell, in which the second argument is
2781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * 500 chars long.
2782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * It is a dirty hack before a cleaner solution is found.
2783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Documentation should mention that the second argument must
2784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * be at least 500 chars long, and could be stripped if too long.
2785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
2786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    snprintf(buffer, 499, "%s", path);
2787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    buffer[499] = '0';
2788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlFree(path);
2789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (0);
2791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
2792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
2794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlShell:
2795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc:  the initial document
2796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename:  the output buffer
2797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @input:  the line reading function
2798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @output:  the output FILE*, defaults to stdout if NULL
2799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
280094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * Implements the XML shell
2801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This allow to load, validate, view, modify and save a document
2802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * using a environment similar to a UNIX commandline.
2803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
2804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
2805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input,
2806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         FILE * output)
2807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
2808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char prompt[500] = "/ > ";
2809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char *cmdline = NULL, *cur;
2810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char command[100];
2811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char arg[400];
2812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int i;
2813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlShellCtxtPtr ctxt;
2814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlXPathObjectPtr list;
2815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (doc == NULL)
2817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
2818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (filename == NULL)
2819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
2820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (input == NULL)
2821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
2822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (output == NULL)
2823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        output = stdout;
2824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt = (xmlShellCtxtPtr) xmlMalloc(sizeof(xmlShellCtxt));
2825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt == NULL)
2826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
2827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->loaded = 0;
2828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->doc = doc;
2829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->input = input;
2830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->output = output;
2831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->filename = (char *) xmlStrdup((xmlChar *) filename);
2832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->node = (xmlNodePtr) ctxt->doc;
2833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
2835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctxt->pctxt = xmlXPathNewContext(ctxt->doc);
2836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->pctxt == NULL) {
2837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(ctxt);
2838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
2839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
2840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_XPATH_ENABLED */
2841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while (1) {
2842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (ctxt->node == (xmlNodePtr) ctxt->doc)
2843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            snprintf(prompt, sizeof(prompt), "%s > ", "/");
284494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun        else if ((ctxt->node != NULL) && (ctxt->node->name) &&
284594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                 (ctxt->node->ns) && (ctxt->node->ns->prefix))
284694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            snprintf(prompt, sizeof(prompt), "%s:%s > ",
284794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                     (ctxt->node->ns->prefix), ctxt->node->name);
2848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else if ((ctxt->node != NULL) && (ctxt->node->name))
2849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            snprintf(prompt, sizeof(prompt), "%s > ", ctxt->node->name);
2850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else
2851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            snprintf(prompt, sizeof(prompt), "? > ");
2852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        prompt[sizeof(prompt) - 1] = 0;
2853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        /*
2855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         * Get a new command line
2856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         */
2857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        cmdline = ctxt->input(prompt);
2858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (cmdline == NULL)
2859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
2860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        /*
2862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         * Parse the command itself
2863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         */
2864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        cur = cmdline;
2865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        while ((*cur == ' ') || (*cur == '\t'))
2866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            cur++;
2867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        i = 0;
2868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        while ((*cur != ' ') && (*cur != '\t') &&
2869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project               (*cur != '\n') && (*cur != '\r')) {
2870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (*cur == 0)
2871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
2872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            command[i++] = *cur++;
2873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
2874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        command[i] = 0;
2875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (i == 0)
2876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            continue;
2877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        /*
2879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         * Parse the argument
2880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         */
2881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        while ((*cur == ' ') || (*cur == '\t'))
2882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            cur++;
2883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        i = 0;
2884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        while ((*cur != '\n') && (*cur != '\r') && (*cur != 0)) {
2885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (*cur == 0)
2886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                break;
2887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            arg[i++] = *cur++;
2888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
2889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        arg[i] = 0;
2890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        /*
2892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         * start interpreting the command
2893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project         */
2894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!strcmp(command, "exit"))
2895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
2896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!strcmp(command, "quit"))
2897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
2898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (!strcmp(command, "bye"))
2899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
2900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (!strcmp(command, "help")) {
2901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tbase         display XML base of the node\n");
2902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tsetbase URI  change the XML base of the node\n");
2903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tbye          leave shell\n");
2904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tcat [node]   display node or current node\n");
2905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tcd [path]    change directory to path or to root\n");
2906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tdir [path]   dumps informations about the node (namespace, attributes, content)\n");
2907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tdu [path]    show the structure of the subtree under path or the current node\n");
2908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\texit         leave shell\n");
2909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\thelp         display this help\n");
2910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tfree         display memory usage\n");
2911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tload [name]  load a new document with name\n");
2912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tls [path]    list contents of path or the current directory\n");
2913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tset xml_fragment replace the current node content with the fragment parsed in context\n");
2914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
2915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\txpath expr   evaluate the XPath expression in that context and print the result\n");
2916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tsetns nsreg  register a namespace to a prefix in the XPath evaluation context\n");
2917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\t             format for nsreg is: prefix=[nsuri] (i.e. prefix= unsets a prefix)\n");
2918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tsetrootns    register all namespace found on the root element\n");
2919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\t             the default namespace if any uses 'defaultns' prefix\n");
2920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_XPATH_ENABLED */
2921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tpwd          display current working directory\n");
292294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun		  fprintf(ctxt->output, "\twhereis      display absolute path of [path] or current working directory\n");
2923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tquit         leave shell\n");
2924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED
2925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tsave [name]  save this document to name or the original name\n");
2926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\twrite [name] write the current node to the filename\n");
2927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */
2928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
2929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tvalidate     check the document for errors\n");
2930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
2931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SCHEMAS_ENABLED
2932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\trelaxng rng  validate the document agaisnt the Relax-NG schemas\n");
2933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		  fprintf(ctxt->output, "\tgrep string  search for a string in the subtree\n");
2935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED
2936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "validate")) {
2937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlShellValidate(ctxt, arg, NULL, NULL);
2938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */
2939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "load")) {
2940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlShellLoad(ctxt, arg, NULL, NULL);
2941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SCHEMAS_ENABLED
2942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "relaxng")) {
2943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlShellRNGValidate(ctxt, arg, NULL, NULL);
2944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
2945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED
2946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "save")) {
2947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlShellSave(ctxt, arg, NULL, NULL);
2948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "write")) {
2949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if ((arg == NULL) || (arg[0] == 0))
2950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlGenericError(xmlGenericErrorContext,
2951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        "Write command requires a filename argument\n");
2952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    else
2953df143a5041f03a22808b59c76698770b74692815Selim Gurun		xmlShellWrite(ctxt, arg, ctxt->node, NULL);
2954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */
2955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "grep")) {
2956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlShellGrep(ctxt, arg, ctxt->node, NULL);
2957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "free")) {
2958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (arg[0] == 0) {
2959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlMemShow(ctxt->output, 0);
2960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            } else {
2961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                int len = 0;
2962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                sscanf(arg, "%d", &len);
2964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlMemShow(ctxt->output, len);
2965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
2966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "pwd")) {
2967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            char dir[500];
2968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
2969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (!xmlShellPwd(ctxt, dir, ctxt->node, NULL))
2970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                fprintf(ctxt->output, "%s\n", dir);
2971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "du")) {
297294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            if (arg[0] == 0) {
297394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                xmlShellDu(ctxt, NULL, ctxt->node, NULL);
297494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            } else {
297594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                ctxt->pctxt->node = ctxt->node;
297694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#ifdef LIBXML_XPATH_ENABLED
297794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                ctxt->pctxt->node = ctxt->node;
297894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
297994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#else
298094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                list = NULL;
298194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#endif /* LIBXML_XPATH_ENABLED */
298294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                if (list != NULL) {
298394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                    switch (list->type) {
298494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_UNDEFINED:
298594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
298694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s: no such node\n", arg);
298794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
298894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_NODESET:{
298994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            int indx;
299094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun
299194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            if (list->nodesetval == NULL)
299294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                break;
299394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun
299494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            for (indx = 0;
299594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                 indx < list->nodesetval->nodeNr;
299694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                 indx++)
299794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                xmlShellDu(ctxt, NULL,
299894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                           list->nodesetval->
299994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                           nodeTab[indx], NULL);
300094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
300194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        }
300294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_BOOLEAN:
300394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
300494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is a Boolean\n", arg);
300594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
300694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_NUMBER:
300794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
300894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is a number\n", arg);
300994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
301094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_STRING:
301194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
301294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is a string\n", arg);
301394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
301494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_POINT:
301594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
301694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is a point\n", arg);
301794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
301894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_RANGE:
301994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
302094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is a range\n", arg);
302194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
302294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_LOCATIONSET:
302394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
302494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is a range\n", arg);
302594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
302694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_USERS:
302794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
302894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is user-defined\n", arg);
302994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
303094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_XSLT_TREE:
303194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
303294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is an XSLT value tree\n",
303394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            arg);
303494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
303594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                    }
303694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#ifdef LIBXML_XPATH_ENABLED
303794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                    xmlXPathFreeObject(list);
303894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#endif
303994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                } else {
304094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                    xmlGenericError(xmlGenericErrorContext,
304194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                    "%s: no such node\n", arg);
304294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                }
304394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                ctxt->pctxt->node = NULL;
304494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            }
3045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "base")) {
3046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlShellBase(ctxt, NULL, ctxt->node, NULL);
3047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "set")) {
3048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlShellSetContent(ctxt, arg, ctxt->node, NULL);
3049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
3050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "setns")) {
3051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (arg[0] == 0) {
3052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlGenericError(xmlGenericErrorContext,
3053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				"setns: prefix=[nsuri] required\n");
3054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            } else {
3055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlShellRegisterNamespace(ctxt, arg, NULL, NULL);
3056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
3057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "setrootns")) {
3058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlNodePtr root;
3059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
3060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    root = xmlDocGetRootElement(ctxt->doc);
3061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlShellRegisterRootNamespaces(ctxt, NULL, root, NULL);
3062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "xpath")) {
3063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (arg[0] == 0) {
3064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlGenericError(xmlGenericErrorContext,
3065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				"xpath: expression required\n");
3066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    } else {
3067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                ctxt->pctxt->node = ctxt->node;
3068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
3069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlXPathDebugDumpObject(ctxt->output, list, 0);
3070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlXPathFreeObject(list);
3071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
3072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_XPATH_ENABLED */
3073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_TREE_ENABLED
3074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "setbase")) {
3075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlShellSetBase(ctxt, arg, ctxt->node, NULL);
3076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
3077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if ((!strcmp(command, "ls")) || (!strcmp(command, "dir"))) {
3078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            int dir = (!strcmp(command, "dir"));
3079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
3080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (arg[0] == 0) {
3081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (dir)
3082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    xmlShellDir(ctxt, NULL, ctxt->node, NULL);
3083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                else
3084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    xmlShellList(ctxt, NULL, ctxt->node, NULL);
3085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            } else {
3086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                ctxt->pctxt->node = ctxt->node;
3087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
3088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                ctxt->pctxt->node = ctxt->node;
3089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
3090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else
3091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                list = NULL;
3092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_XPATH_ENABLED */
3093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (list != NULL) {
3094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    switch (list->type) {
3095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_UNDEFINED:
3096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s: no such node\n", arg);
3098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_NODESET:{
3100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                int indx;
3101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
3102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				if (list->nodesetval == NULL)
3103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    break;
3104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
3105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                for (indx = 0;
3106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                     indx < list->nodesetval->nodeNr;
3107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                     indx++) {
3108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                    if (dir)
3109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                        xmlShellDir(ctxt, NULL,
3110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                                    list->nodesetval->
3111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                                    nodeTab[indx], NULL);
3112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                    else
3113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                        xmlShellList(ctxt, NULL,
3114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                                     list->nodesetval->
3115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                                     nodeTab[indx], NULL);
3116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                }
3117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                break;
3118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            }
3119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_BOOLEAN:
3120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a Boolean\n", arg);
3122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_NUMBER:
3124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a number\n", arg);
3126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_STRING:
3128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a string\n", arg);
3130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_POINT:
3132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a point\n", arg);
313494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
313594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_RANGE:
313694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
313794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is a range\n", arg);
313894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
313994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_LOCATIONSET:
314094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
314194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is a range\n", arg);
314294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
314394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_USERS:
314494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
314594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is user-defined\n", arg);
314694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
314794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_XSLT_TREE:
314894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
314994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is an XSLT value tree\n",
315094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            arg);
315194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
315294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                    }
315394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#ifdef LIBXML_XPATH_ENABLED
315494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                    xmlXPathFreeObject(list);
315594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#endif
315694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                } else {
315794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                    xmlGenericError(xmlGenericErrorContext,
315894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                    "%s: no such node\n", arg);
315994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                }
316094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                ctxt->pctxt->node = NULL;
316194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            }
316294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun        } else if (!strcmp(command, "whereis")) {
316394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            char dir[500];
316494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun
316594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            if (arg[0] == 0) {
316694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                if (!xmlShellPwd(ctxt, dir, ctxt->node, NULL))
316794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                    fprintf(ctxt->output, "%s\n", dir);
316894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            } else {
316994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                ctxt->pctxt->node = ctxt->node;
317094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#ifdef LIBXML_XPATH_ENABLED
317194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
317294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#else
317394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                list = NULL;
317494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#endif /* LIBXML_XPATH_ENABLED */
317594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                if (list != NULL) {
317694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                    switch (list->type) {
317794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_UNDEFINED:
317894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
317994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s: no such node\n", arg);
318094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
318194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_NODESET:{
318294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                int indx;
318394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun
318494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun				if (list->nodesetval == NULL)
318594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun				    break;
318694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun
318794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                for (indx = 0;
318894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                     indx < list->nodesetval->nodeNr;
318994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                     indx++) {
319094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                    if (!xmlShellPwd(ctxt, dir, list->nodesetval->
319194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                                     nodeTab[indx], NULL))
319294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                        fprintf(ctxt->output, "%s\n", dir);
319394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                }
319494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                break;
319594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            }
319694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_BOOLEAN:
319794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
319894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is a Boolean\n", arg);
319994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
320094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_NUMBER:
320194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
320294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is a number\n", arg);
320394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
320494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_STRING:
320594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
320694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is a string\n", arg);
320794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            break;
320894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                        case XPATH_POINT:
320994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                            xmlGenericError(xmlGenericErrorContext,
321094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun                                            "%s is a point\n", arg);
3211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_RANGE:
3213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a range\n", arg);
3215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_LOCATIONSET:
3217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a range\n", arg);
3219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_USERS:
3221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is user-defined\n", arg);
3223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_XSLT_TREE:
3225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is an XSLT value tree\n",
3227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            arg);
3228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    }
3230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
3231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    xmlXPathFreeObject(list);
3232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
3233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                } else {
3234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    xmlGenericError(xmlGenericErrorContext,
3235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                    "%s: no such node\n", arg);
3236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
3237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                ctxt->pctxt->node = NULL;
3238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
3239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "cd")) {
3240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (arg[0] == 0) {
3241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                ctxt->node = (xmlNodePtr) ctxt->doc;
3242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            } else {
3243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
3244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                ctxt->pctxt->node = ctxt->node;
3245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
3246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else
3247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                list = NULL;
3248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_XPATH_ENABLED */
3249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (list != NULL) {
3250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    switch (list->type) {
3251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_UNDEFINED:
3252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s: no such node\n", arg);
3254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_NODESET:
3256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            if (list->nodesetval != NULL) {
3257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				if (list->nodesetval->nodeNr == 1) {
3258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    ctxt->node = list->nodesetval->nodeTab[0];
3259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    if ((ctxt->node != NULL) &&
3260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				        (ctxt->node->type ==
3261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					 XML_NAMESPACE_DECL)) {
3262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					xmlGenericError(xmlGenericErrorContext,
3263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project						    "cannot cd to namespace\n");
3264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project					ctxt->node = NULL;
3265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    }
3266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				} else
3267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    xmlGenericError(xmlGenericErrorContext,
3268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project						    "%s is a %d Node Set\n",
3269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project						    arg,
3270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project						    list->nodesetval->nodeNr);
3271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            } else
3272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                xmlGenericError(xmlGenericErrorContext,
3273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                                "%s is an empty Node Set\n",
3274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                                arg);
3275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_BOOLEAN:
3277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a Boolean\n", arg);
3279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_NUMBER:
3281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a number\n", arg);
3283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_STRING:
3285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a string\n", arg);
3287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_POINT:
3289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a point\n", arg);
3291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_RANGE:
3293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a range\n", arg);
3295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_LOCATIONSET:
3297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a range\n", arg);
3299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_USERS:
3301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is user-defined\n", arg);
3303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_XSLT_TREE:
3305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is an XSLT value tree\n",
3307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            arg);
3308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    }
3310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
3311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    xmlXPathFreeObject(list);
3312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
3313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                } else {
3314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    xmlGenericError(xmlGenericErrorContext,
3315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                    "%s: no such node\n", arg);
3316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
3317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                ctxt->pctxt->node = NULL;
3318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
3319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED
3320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else if (!strcmp(command, "cat")) {
3321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (arg[0] == 0) {
3322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                xmlShellCat(ctxt, NULL, ctxt->node, NULL);
3323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            } else {
3324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                ctxt->pctxt->node = ctxt->node;
3325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
3326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                ctxt->pctxt->node = ctxt->node;
3327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
3328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else
3329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                list = NULL;
3330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_XPATH_ENABLED */
3331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                if (list != NULL) {
3332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    switch (list->type) {
3333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_UNDEFINED:
3334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s: no such node\n", arg);
3336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_NODESET:{
3338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                int indx;
3339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
3340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				if (list->nodesetval == NULL)
3341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				    break;
3342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
3343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                for (indx = 0;
3344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                     indx < list->nodesetval->nodeNr;
3345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                     indx++) {
3346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                    if (i > 0)
3347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                        fprintf(ctxt->output, " -------\n");
3348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                    xmlShellCat(ctxt, NULL,
3349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                                list->nodesetval->
3350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                                nodeTab[indx], NULL);
3351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                }
3352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                break;
3353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            }
3354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_BOOLEAN:
3355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a Boolean\n", arg);
3357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_NUMBER:
3359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a number\n", arg);
3361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_STRING:
3363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a string\n", arg);
3365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_POINT:
3367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a point\n", arg);
3369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_RANGE:
3371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a range\n", arg);
3373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_LOCATIONSET:
3375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is a range\n", arg);
3377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_USERS:
3379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is user-defined\n", arg);
3381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                        case XPATH_XSLT_TREE:
3383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            xmlGenericError(xmlGenericErrorContext,
3384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            "%s is an XSLT value tree\n",
3385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                            arg);
3386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            break;
3387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    }
3388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
3389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    xmlXPathFreeObject(list);
3390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
3391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                } else {
3392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                    xmlGenericError(xmlGenericErrorContext,
3393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                    "%s: no such node\n", arg);
3394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                }
3395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                ctxt->pctxt->node = NULL;
3396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
3397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */
3398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        } else {
3399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlGenericError(xmlGenericErrorContext,
3400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                            "Unknown command %s\n", command);
3401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
3402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        free(cmdline);          /* not xmlFree here ! */
340360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott	cmdline = NULL;
3404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
3405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED
3406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlXPathFreeContext(ctxt->pctxt);
3407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_XPATH_ENABLED */
3408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->loaded) {
3409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFreeDoc(ctxt->doc);
3410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
3411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->filename != NULL)
3412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(ctxt->filename);
3413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlFree(ctxt);
3414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (cmdline != NULL)
3415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        free(cmdline);          /* not xmlFree here ! */
3416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
3417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
3418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_XPATH_ENABLED */
3419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define bottom_debugXML
3420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "elfgcchack.h"
3421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_DEBUG_ENABLED */
3422