15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * debugXML.c : This is a set of routines used for debugging the tree 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * produced by the XML parser. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See Copyright for the status of this software. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Daniel Veillard <daniel@veillard.com> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IN_LIBXML 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "libxml.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_DEBUG_ENABLED 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h> 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_STDLIB_H 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h> 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_STRING_H 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h> 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/xmlmemory.h> 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/tree.h> 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/parser.h> 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/parserInternals.h> 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/valid.h> 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/debugXML.h> 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/HTMLtree.h> 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/HTMLparser.h> 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/xmlerror.h> 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/globals.h> 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/xpathInternals.h> 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/uri.h> 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/relaxng.h> 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DUMP_TEXT_TYPE 1 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _xmlDebugCtxt xmlDebugCtxt; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef xmlDebugCtxt *xmlDebugCtxtPtr; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct _xmlDebugCtxt { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE *output; /* the output file */ 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char shift[101]; /* used for indenting */ 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int depth; /* current depth */ 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocPtr doc; /* current document */ 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node; /* current node */ 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDictPtr dict; /* the doc dictionnary */ 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int check; /* do just checkings */ 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int errors; /* number of errors found */ 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nodict; /* if the document has no dictionnary */ 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int options; /* options */ 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void xmlCtxtDumpNodeList(xmlDebugCtxtPtr ctxt, xmlNodePtr node); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpInitCtxt(xmlDebugCtxtPtr ctxt) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->depth = 0; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->check = 0; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->errors = 0; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->output = stdout; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->doc = NULL; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->node = NULL; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->dict = NULL; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->nodict = 0; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->options = 0; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < 100; i++) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->shift[i] = ' '; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->shift[100] = 0; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpCleanCtxt(xmlDebugCtxtPtr ctxt ATTRIBUTE_UNUSED) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* remove the ATTRIBUTE_UNUSED when this is added */ 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlNsCheckScope: 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: the node 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ns: the namespace node 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Check that a given namespace is in scope on a node. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 1 if in scope, -1 in case of argument error, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * -2 if the namespace is not in scope, and -3 if not on 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * an ancestor node. 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlNsCheckScope(xmlNodePtr node, xmlNsPtr ns) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNsPtr cur; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node == NULL) || (ns == NULL)) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(-1); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->type != XML_ELEMENT_NODE) && 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type != XML_ATTRIBUTE_NODE) && 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type != XML_DOCUMENT_NODE) && 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type != XML_TEXT_NODE) && 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type != XML_HTML_DOCUMENT_NODE) && 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type != XML_XINCLUDE_START)) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(-2); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((node != NULL) && 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((node->type == XML_ELEMENT_NODE) || 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type == XML_ATTRIBUTE_NODE) || 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type == XML_TEXT_NODE) || 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type == XML_XINCLUDE_START))) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->type == XML_ELEMENT_NODE) || 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type == XML_XINCLUDE_START)) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur = node->nsDef; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (cur != NULL) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cur == ns) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(1); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlStrEqual(cur->prefix, ns->prefix)) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(-2); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur = cur->next; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = node->parent; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* the xml namespace may be declared on the document node */ 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node != NULL) && 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((node->type == XML_DOCUMENT_NODE) || 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type == XML_HTML_DOCUMENT_NODE))) { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNsPtr oldNs = ((xmlDocPtr) node)->oldNs; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (oldNs == ns) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(1); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(-3); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpSpaces(xmlDebugCtxtPtr ctxt) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->check) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((ctxt->output != NULL) && (ctxt->depth > 0)) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->depth < 50) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "%s", &ctxt->shift[100 - 2 * ctxt->depth]); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "%s", ctxt->shift); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlDebugErr: 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: a debug context 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @error: the error code 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Handle a debug error. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugErr(xmlDebugCtxtPtr ctxt, int error, const char *msg) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->errors++; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __xmlRaiseError(NULL, NULL, NULL, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, ctxt->node, XML_FROM_CHECK, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error, XML_ERR_ERROR, NULL, 0, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, 0, 0, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s", msg); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugErr2(xmlDebugCtxtPtr ctxt, int error, const char *msg, int extra) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->errors++; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __xmlRaiseError(NULL, NULL, NULL, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, ctxt->node, XML_FROM_CHECK, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error, XML_ERR_ERROR, NULL, 0, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, 0, 0, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg, extra); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugErr3(xmlDebugCtxtPtr ctxt, int error, const char *msg, const char *extra) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->errors++; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __xmlRaiseError(NULL, NULL, NULL, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, ctxt->node, XML_FROM_CHECK, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error, XML_ERR_ERROR, NULL, 0, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, NULL, NULL, 0, 0, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg, extra); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlCtxtNsCheckScope: 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the debugging context 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: the node 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ns: the namespace node 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Report if a given namespace is is not in scope. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtNsCheckScope(xmlDebugCtxtPtr ctxt, xmlNodePtr node, xmlNsPtr ns) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlNsCheckScope(node, ns); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret == -2) { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ns->prefix == NULL) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NS_SCOPE, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Reference to default namespace not in scope\n"); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr3(ctxt, XML_CHECK_NS_SCOPE, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Reference to namespace '%s' not in scope\n", 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) ns->prefix); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret == -3) { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ns->prefix == NULL) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NS_ANCESTOR, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Reference to default namespace not on ancestor\n"); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr3(ctxt, XML_CHECK_NS_ANCESTOR, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Reference to namespace '%s' not on ancestor\n", 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) ns->prefix); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlCtxtCheckString: 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the debug context 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @str: the string 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Do debugging on the string, currently it just checks the UTF-8 content 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtCheckString(xmlDebugCtxtPtr ctxt, const xmlChar * str) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (str == NULL) return; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->check) { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!xmlCheckUTF8(str)) { 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr3(ctxt, XML_CHECK_NOT_UTF8, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "String is not UTF-8 %s", (const char *) str); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlCtxtCheckName: 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the debug context 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: the name 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Do debugging on the name, for example the dictionnary status and 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * conformance to the Name production. 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtCheckName(xmlDebugCtxtPtr ctxt, const xmlChar * name) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->check) { 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (name == NULL) { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_NAME, "Name is NULL"); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlValidateName(name, 0)) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr3(ctxt, XML_CHECK_NOT_NCNAME, 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Name is not an NCName '%s'", (const char *) name); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((ctxt->dict != NULL) && 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!xmlDictOwns(ctxt->dict, name)) && 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((ctxt->doc == NULL) || 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((ctxt->doc->parseFlags & (XML_PARSE_SAX1 | XML_PARSE_NODICT)) == 0))) { 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr3(ctxt, XML_CHECK_OUTSIDE_DICT, 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Name is not from the document dictionnary '%s'", 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (const char *) name); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtGenericNodeCheck(xmlDebugCtxtPtr ctxt, xmlNodePtr node) { 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocPtr doc; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDictPtr dict; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = node->doc; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->parent == NULL) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_PARENT, 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node has no parent\n"); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->doc == NULL) { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_DOC, 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node has no doc\n"); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict = NULL; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict = doc->dict; 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((dict == NULL) && (ctxt->nodict == 0)) { 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if 0 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* desactivated right now as it raises too many errors */ 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc->type == XML_DOCUMENT_NODE) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_DICT, 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Document has no dictionnary\n"); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->nodict = 1; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->doc == NULL) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->doc = doc; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->dict == NULL) { 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->dict = dict; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->parent != NULL) && (node->doc != node->parent->doc) && 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!xmlStrEqual(node->name, BAD_CAST "pseudoroot"))) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_WRONG_DOC, 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node doc differs from parent's one\n"); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->prev == NULL) { 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->type == XML_ATTRIBUTE_NODE) { 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->parent != NULL) && 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node != (xmlNodePtr) node->parent->properties)) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_PREV, 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Attr has no prev and not first of attr list\n"); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((node->parent != NULL) && (node->parent->children != node)) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_PREV, 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node has no prev and not first of parent list\n"); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->prev->next != node) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_WRONG_PREV, 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node prev->next : back link wrong\n"); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->next == NULL) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->parent != NULL) && (node->type != XML_ATTRIBUTE_NODE) && 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->parent->last != node) && 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->parent->type == XML_ELEMENT_NODE)) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_NEXT, 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node has no next and not last of parent list\n"); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->next->prev != node) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_WRONG_NEXT, 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node next->prev : forward link wrong\n"); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->next->parent != node->parent) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_WRONG_PARENT, 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node next->prev : forward link wrong\n"); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->type == XML_ELEMENT_NODE) { 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNsPtr ns; 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ns = node->nsDef; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (ns != NULL) { 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtNsCheckScope(ctxt, node, ns); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ns = ns->next; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->ns != NULL) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtNsCheckScope(ctxt, node, node->ns); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (node->type == XML_ATTRIBUTE_NODE) { 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->ns != NULL) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtNsCheckScope(ctxt, node, node->ns); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->type != XML_ELEMENT_NODE) && 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type != XML_ATTRIBUTE_NODE) && 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type != XML_ELEMENT_DECL) && 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type != XML_ATTRIBUTE_DECL) && 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type != XML_DTD_NODE) && 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type != XML_HTML_DOCUMENT_NODE) && 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type != XML_DOCUMENT_NODE)) { 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->content != NULL) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtCheckString(ctxt, (const xmlChar *) node->content); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (node->type) { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_NODE: 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_NODE: 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtCheckName(ctxt, node->name); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_TEXT_NODE: 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->name == xmlStringText) || 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->name == xmlStringTextNoenc)) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* some case of entity substitution can lead to this */ 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((ctxt->dict != NULL) && 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->name == xmlDictLookup(ctxt->dict, BAD_CAST "nbktext", 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7))) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr3(ctxt, XML_CHECK_WRONG_NAME, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Text node has wrong name '%s'", 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (const char *) node->name); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_COMMENT_NODE: 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->name == xmlStringComment) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr3(ctxt, XML_CHECK_WRONG_NAME, 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Comment node has wrong name '%s'", 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (const char *) node->name); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_PI_NODE: 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtCheckName(ctxt, node->name); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_CDATA_SECTION_NODE: 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->name == NULL) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr3(ctxt, XML_CHECK_NAME_NOT_NULL, 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "CData section has non NULL name '%s'", 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (const char *) node->name); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_REF_NODE: 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_NODE: 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_TYPE_NODE: 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_FRAG_NODE: 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_NOTATION_NODE: 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DTD_NODE: 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_DECL: 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_DECL: 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_DECL: 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_NAMESPACE_DECL: 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_XINCLUDE_START: 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_XINCLUDE_END: 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_DOCB_ENABLED 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCB_DOCUMENT_NODE: 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_NODE: 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_HTML_DOCUMENT_NODE: 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpString(xmlDebugCtxtPtr ctxt, const xmlChar * str) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->check) { 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* TODO: check UTF8 content of the string */ 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (str == NULL) { 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "(NULL)"); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < 40; i++) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (str[i] == 0) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (IS_BLANK_CH(str[i])) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fputc(' ', ctxt->output); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (str[i] >= 0x80) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "#%X", str[i]); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fputc(str[i], ctxt->output); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "..."); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpDtdNode(xmlDebugCtxtPtr ctxt, xmlDtdPtr dtd) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtd == NULL) { 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "DTD node is NULL\n"); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtd->type != XML_DTD_NODE) { 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NOT_DTD, 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node is not a DTD"); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtd->name != NULL) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "DTD(%s)", (char *) dtd->name); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "DTD"); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtd->ExternalID != NULL) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", PUBLIC %s", (char *) dtd->ExternalID); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtd->SystemID != NULL) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", SYSTEM %s", (char *) dtd->SystemID); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Do a bit of checking 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) dtd); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpAttrDecl(xmlDebugCtxtPtr ctxt, xmlAttributePtr attr) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attr == NULL) { 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "Attribute declaration is NULL\n"); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attr->type != XML_ATTRIBUTE_DECL) { 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NOT_ATTR_DECL, 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node is not an attribute declaration"); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attr->name != NULL) { 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "ATTRDECL(%s)", (char *) attr->name); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_NAME, 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node attribute declaration has no name"); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attr->elem != NULL) { 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " for %s", (char *) attr->elem); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_ELEM, 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node attribute declaration has no element name"); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (attr->atype) { 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_CDATA: 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " CDATA"); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_ID: 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " ID"); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_IDREF: 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " IDREF"); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_IDREFS: 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " IDREFS"); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_ENTITY: 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " ENTITY"); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_ENTITIES: 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " ENTITIES"); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_NMTOKEN: 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " NMTOKEN"); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_NMTOKENS: 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " NMTOKENS"); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_ENUMERATION: 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " ENUMERATION"); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_NOTATION: 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " NOTATION "); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attr->tree != NULL) { 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int indx; 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlEnumerationPtr cur = attr->tree; 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (indx = 0; indx < 5; indx++) { 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (indx != 0) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "|%s", (char *) cur->name); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " (%s", (char *) cur->name); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur = cur->next; 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cur == NULL) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cur == NULL) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ")"); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "...)"); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (attr->def) { 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_NONE: 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_REQUIRED: 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " REQUIRED"); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_IMPLIED: 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " IMPLIED"); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_FIXED: 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " FIXED"); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attr->defaultValue != NULL) { 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\""); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, attr->defaultValue); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\""); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Do a bit of checking 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) attr); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpElemDecl(xmlDebugCtxtPtr ctxt, xmlElementPtr elem) 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (elem == NULL) { 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "Element declaration is NULL\n"); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (elem->type != XML_ELEMENT_DECL) { 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NOT_ELEM_DECL, 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node is not an element declaration"); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (elem->name != NULL) { 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "ELEMDECL("); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, elem->name); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ")"); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_NAME, 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Element declaration has no name"); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (elem->etype) { 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_TYPE_UNDEFINED: 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", UNDEFINED"); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_TYPE_EMPTY: 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", EMPTY"); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_TYPE_ANY: 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", ANY"); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_TYPE_MIXED: 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", MIXED "); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_TYPE_ELEMENT: 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", MIXED "); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((elem->type != XML_ELEMENT_NODE) && (elem->content != NULL)) { 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char buf[5001]; 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buf[0] = 0; 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSnprintfElementContent(buf, 5000, elem->content, 1); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buf[5000] = 0; 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "%s", buf); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Do a bit of checking 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) elem); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpEntityDecl(xmlDebugCtxtPtr ctxt, xmlEntityPtr ent) 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent == NULL) { 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "Entity declaration is NULL\n"); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent->type != XML_ENTITY_DECL) { 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NOT_ENTITY_DECL, 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node is not an entity declaration"); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent->name != NULL) { 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "ENTITYDECL("); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, ent->name); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ")"); 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_NAME, 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Entity declaration has no name"); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (ent->etype) { 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_INTERNAL_GENERAL_ENTITY: 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", internal\n"); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_EXTERNAL_GENERAL_PARSED_ENTITY: 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", external parsed\n"); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY: 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", unparsed\n"); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_INTERNAL_PARAMETER_ENTITY: 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", parameter\n"); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_EXTERNAL_PARAMETER_ENTITY: 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", external parameter\n"); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_INTERNAL_PREDEFINED_ENTITY: 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ", predefined\n"); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent->ExternalID) { 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " ExternalID=%s\n", 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) ent->ExternalID); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent->SystemID) { 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " SystemID=%s\n", 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) ent->SystemID); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent->URI != NULL) { 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " URI=%s\n", (char *) ent->URI); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent->content) { 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " content="); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, ent->content); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Do a bit of checking 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) ent); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpNamespace(xmlDebugCtxtPtr ctxt, xmlNsPtr ns) 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ns == NULL) { 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "namespace node is NULL\n"); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ns->type != XML_NAMESPACE_DECL) { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NOT_NS_DECL, 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node is not a namespace declaration"); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ns->href == NULL) { 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ns->prefix != NULL) 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr3(ctxt, XML_CHECK_NO_HREF, 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Incomplete namespace %s href=NULL\n", 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) ns->prefix); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_HREF, 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Incomplete default namespace href=NULL\n"); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ns->prefix != NULL) 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "namespace %s href=", 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) ns->prefix); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "default namespace href="); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, ns->href); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpNamespaceList(xmlDebugCtxtPtr ctxt, xmlNsPtr ns) 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (ns != NULL) { 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpNamespace(ctxt, ns); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ns = ns->next; 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpEntity(xmlDebugCtxtPtr ctxt, xmlEntityPtr ent) 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent == NULL) { 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "Entity is NULL\n"); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (ent->etype) { 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_INTERNAL_GENERAL_ENTITY: 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "INTERNAL_GENERAL_ENTITY "); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_EXTERNAL_GENERAL_PARSED_ENTITY: 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "EXTERNAL_GENERAL_PARSED_ENTITY "); 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY: 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "EXTERNAL_GENERAL_UNPARSED_ENTITY "); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_INTERNAL_PARAMETER_ENTITY: 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "INTERNAL_PARAMETER_ENTITY "); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_EXTERNAL_PARAMETER_ENTITY: 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "EXTERNAL_PARAMETER_ENTITY "); 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "ENTITY_%d ! ", (int) ent->etype); 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "%s\n", ent->name); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent->ExternalID) { 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "ExternalID=%s\n", 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) ent->ExternalID); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent->SystemID) { 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "SystemID=%s\n", (char *) ent->SystemID); 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent->URI) { 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "URI=%s\n", (char *) ent->URI); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent->content) { 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "content="); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, ent->content); 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlCtxtDumpAttr: 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @attr: the attribute 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @depth: the indentation level. 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the attribute 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpAttr(xmlDebugCtxtPtr ctxt, xmlAttrPtr attr) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attr == NULL) { 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "Attr is NULL"); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "ATTRIBUTE "); 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, attr->name); 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attr->children != NULL) { 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->depth++; 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpNodeList(ctxt, attr->children); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->depth--; 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attr->name == NULL) 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_NO_NAME, 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Attribute has no name"); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Do a bit of checking 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) attr); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlCtxtDumpAttrList: 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @attr: the attribute list 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @depth: the indentation level. 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the attribute list 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpAttrList(xmlDebugCtxtPtr ctxt, xmlAttrPtr attr) 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (attr != NULL) { 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpAttr(ctxt, attr); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attr = attr->next; 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlCtxtDumpOneNode: 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: the node 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @depth: the indentation level. 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the element node, it is not recursive 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpOneNode(xmlDebugCtxtPtr ctxt, xmlNodePtr node) 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == NULL) { 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "node is NULL\n"); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->node = node; 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (node->type) { 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_NODE: 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "ELEMENT "); 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->ns != NULL) && (node->ns->prefix != NULL)) { 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, node->ns->prefix); 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, ":"); 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, node->name); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_NODE: 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "Error, ATTRIBUTE found here\n"); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtGenericNodeCheck(ctxt, node); 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_TEXT_NODE: 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->name == (const xmlChar *) xmlStringTextNoenc) 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "TEXT no enc"); 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "TEXT"); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->options & DUMP_TEXT_TYPE) { 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->content == (xmlChar *) &(node->properties)) 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " compact\n"); 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (xmlDictOwns(ctxt->dict, node->content) == 1) 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " interned\n"); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_CDATA_SECTION_NODE: 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "CDATA_SECTION\n"); 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_REF_NODE: 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "ENTITY_REF(%s)\n", 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) node->name); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_NODE: 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "ENTITY\n"); 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_PI_NODE: 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "PI %s\n", (char *) node->name); 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_COMMENT_NODE: 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "COMMENT\n"); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_NODE: 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_HTML_DOCUMENT_NODE: 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "Error, DOCUMENT found here\n"); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtGenericNodeCheck(ctxt, node); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_TYPE_NODE: 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "DOCUMENT_TYPE\n"); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_FRAG_NODE: 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "DOCUMENT_FRAG\n"); 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_NOTATION_NODE: 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "NOTATION\n"); 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DTD_NODE: 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpDtdNode(ctxt, (xmlDtdPtr) node); 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_DECL: 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpElemDecl(ctxt, (xmlElementPtr) node); 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_DECL: 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpAttrDecl(ctxt, (xmlAttributePtr) node); 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_DECL: 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpEntityDecl(ctxt, (xmlEntityPtr) node); 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_NAMESPACE_DECL: 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpNamespace(ctxt, (xmlNsPtr) node); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_XINCLUDE_START: 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "INCLUDE START\n"); 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_XINCLUDE_END: 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "INCLUDE END\n"); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr2(ctxt, XML_CHECK_UNKNOWN_NODE, 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Unknown node type %d\n", node->type); 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->doc == NULL) { 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "PBM: doc == NULL !!!\n"); 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->depth++; 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->type == XML_ELEMENT_NODE) && (node->nsDef != NULL)) 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpNamespaceList(ctxt, node->nsDef); 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->type == XML_ELEMENT_NODE) && (node->properties != NULL)) 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpAttrList(ctxt, node->properties); 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->type != XML_ENTITY_REF_NODE) { 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->type != XML_ELEMENT_NODE) && (node->content != NULL)) { 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "content="); 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, node->content); 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlEntityPtr ent; 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ent = xmlGetDocEntity(node->doc, node->name); 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ent != NULL) 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpEntity(ctxt, ent); 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->depth--; 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Do a bit of checking 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtGenericNodeCheck(ctxt, node); 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlCtxtDumpNode: 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: the node 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @depth: the indentation level. 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the element node, it is recursive 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpNode(xmlDebugCtxtPtr ctxt, xmlNodePtr node) 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == NULL) { 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpSpaces(ctxt); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "node is NULL\n"); 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpOneNode(ctxt, node); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->type != XML_NAMESPACE_DECL) && 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->children != NULL) && (node->type != XML_ENTITY_REF_NODE)) { 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->depth++; 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpNodeList(ctxt, node->children); 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->depth--; 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlCtxtDumpNodeList: 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: the node list 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @depth: the indentation level. 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the list of element node, it is recursive 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpNodeList(xmlDebugCtxtPtr ctxt, xmlNodePtr node) 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (node != NULL) { 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpNode(ctxt, node); 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = node->next; 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpDocHead(xmlDebugCtxtPtr ctxt, xmlDocPtr doc) 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc == NULL) { 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "DOCUMENT == NULL !\n"); 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->node = (xmlNodePtr) doc; 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (doc->type) { 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_NODE: 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_FOUND_ELEMENT, 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Misplaced ELEMENT node\n"); 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_NODE: 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_FOUND_ATTRIBUTE, 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Misplaced ATTRIBUTE node\n"); 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_TEXT_NODE: 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_FOUND_TEXT, 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Misplaced TEXT node\n"); 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_CDATA_SECTION_NODE: 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_FOUND_CDATA, 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Misplaced CDATA node\n"); 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_REF_NODE: 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_FOUND_ENTITYREF, 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Misplaced ENTITYREF node\n"); 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_NODE: 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_FOUND_ENTITY, 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Misplaced ENTITY node\n"); 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_PI_NODE: 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_FOUND_PI, 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Misplaced PI node\n"); 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_COMMENT_NODE: 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_FOUND_COMMENT, 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Misplaced COMMENT node\n"); 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_NODE: 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "DOCUMENT\n"); 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_HTML_DOCUMENT_NODE: 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "HTML DOCUMENT\n"); 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_TYPE_NODE: 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_FOUND_DOCTYPE, 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Misplaced DOCTYPE node\n"); 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_FRAG_NODE: 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_FOUND_FRAGMENT, 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Misplaced FRAGMENT node\n"); 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_NOTATION_NODE: 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr(ctxt, XML_CHECK_FOUND_NOTATION, 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Misplaced NOTATION node\n"); 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr2(ctxt, XML_CHECK_UNKNOWN_NODE, 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Unknown node type %d\n", doc->type); 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlCtxtDumpDocumentHead: 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @doc: the document 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information cncerning the document, not recursive 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpDocumentHead(xmlDebugCtxtPtr ctxt, xmlDocPtr doc) 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc == NULL) return; 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpDocHead(ctxt, doc); 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc->name != NULL) { 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "name="); 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, BAD_CAST doc->name); 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc->version != NULL) { 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "version="); 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, doc->version); 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc->encoding != NULL) { 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "encoding="); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, doc->encoding); 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc->URL != NULL) { 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "URL="); 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpString(ctxt, doc->URL); 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc->standalone) 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "standalone=true\n"); 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc->oldNs != NULL) 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpNamespaceList(ctxt, doc->oldNs); 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlCtxtDumpDocument: 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @doc: the document 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the document, it's recursive 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpDocument(xmlDebugCtxtPtr ctxt, xmlDocPtr doc) 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc == NULL) { 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "DOCUMENT == NULL !\n"); 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpDocumentHead(ctxt, doc); 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (((doc->type == XML_DOCUMENT_NODE) || 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (doc->type == XML_HTML_DOCUMENT_NODE)) 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && (doc->children != NULL)) { 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->depth++; 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpNodeList(ctxt, doc->children); 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->depth--; 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpEntityCallback(xmlEntityPtr cur, xmlDebugCtxtPtr ctxt) 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cur == NULL) { 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "Entity is NULL"); 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) { 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "%s : ", (char *) cur->name); 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (cur->etype) { 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_INTERNAL_GENERAL_ENTITY: 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "INTERNAL GENERAL, "); 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_EXTERNAL_GENERAL_PARSED_ENTITY: 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "EXTERNAL PARSED, "); 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY: 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "EXTERNAL UNPARSED, "); 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_INTERNAL_PARAMETER_ENTITY: 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "INTERNAL PARAMETER, "); 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_EXTERNAL_PARAMETER_ENTITY: 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "EXTERNAL PARAMETER, "); 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugErr2(ctxt, XML_CHECK_ENTITY_TYPE, 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Unknown entity type %d\n", cur->etype); 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cur->ExternalID != NULL) 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "ID \"%s\"", (char *) cur->ExternalID); 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cur->SystemID != NULL) 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "SYSTEM \"%s\"", (char *) cur->SystemID); 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cur->orig != NULL) 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n orig \"%s\"", (char *) cur->orig); 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n content \"%s\"", 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) cur->content); 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlCtxtDumpEntities: 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @doc: the document 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for all the entities in use by the document 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpEntities(xmlDebugCtxtPtr ctxt, xmlDocPtr doc) 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc == NULL) return; 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpDocHead(ctxt, doc); 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((doc->intSubset != NULL) && (doc->intSubset->entities != NULL)) { 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlEntitiesTablePtr table = (xmlEntitiesTablePtr) 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc->intSubset->entities; 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "Entities in internal subset\n"); 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHashScan(table, (xmlHashScanner) xmlCtxtDumpEntityCallback, 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt); 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "No entities in internal subset\n"); 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((doc->extSubset != NULL) && (doc->extSubset->entities != NULL)) { 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlEntitiesTablePtr table = (xmlEntitiesTablePtr) 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc->extSubset->entities; 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "Entities in external subset\n"); 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHashScan(table, (xmlHashScanner) xmlCtxtDumpEntityCallback, 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt); 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!ctxt->check) 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "No entities in external subset\n"); 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlCtxtDumpDTD: 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @dtd: the DTD 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the DTD 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlCtxtDumpDTD(xmlDebugCtxtPtr ctxt, xmlDtdPtr dtd) 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtd == NULL) { 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt->check) 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "DTD is NULL\n"); 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpDtdNode(ctxt, dtd); 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtd->children == NULL) 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " DTD is empty\n"); 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else { 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->depth++; 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpNodeList(ctxt, dtd->children); 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->depth--; 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Public entry points for dump * 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlDebugDumpString: 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @str: the string 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps informations about the string, shorten it if necessary 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugDumpString(FILE * output, const xmlChar * str) 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output = stdout; 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (str == NULL) { 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "(NULL)"); 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < 40; i++) 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (str[i] == 0) 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (IS_BLANK_CH(str[i])) 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fputc(' ', output); 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (str[i] >= 0x80) 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "#%X", str[i]); 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fputc(str[i], output); 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "..."); 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlDebugDumpAttr: 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @attr: the attribute 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @depth: the indentation level. 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the attribute 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugDumpAttr(FILE *output, xmlAttrPtr attr, int depth) { 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugCtxt ctxt; 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) return; 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpInitCtxt(&ctxt); 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.output = output; 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.depth = depth; 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpAttr(&ctxt, attr); 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpCleanCtxt(&ctxt); 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlDebugDumpEntities: 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @doc: the document 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for all the entities in use by the document 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugDumpEntities(FILE * output, xmlDocPtr doc) 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugCtxt ctxt; 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) return; 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpInitCtxt(&ctxt); 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.output = output; 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpEntities(&ctxt, doc); 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpCleanCtxt(&ctxt); 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlDebugDumpAttrList: 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @attr: the attribute list 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @depth: the indentation level. 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the attribute list 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugDumpAttrList(FILE * output, xmlAttrPtr attr, int depth) 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugCtxt ctxt; 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) return; 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpInitCtxt(&ctxt); 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.output = output; 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.depth = depth; 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpAttrList(&ctxt, attr); 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpCleanCtxt(&ctxt); 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlDebugDumpOneNode: 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: the node 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @depth: the indentation level. 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the element node, it is not recursive 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugDumpOneNode(FILE * output, xmlNodePtr node, int depth) 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugCtxt ctxt; 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) return; 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpInitCtxt(&ctxt); 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.output = output; 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.depth = depth; 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpOneNode(&ctxt, node); 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpCleanCtxt(&ctxt); 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlDebugDumpNode: 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: the node 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @depth: the indentation level. 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the element node, it is recursive 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugDumpNode(FILE * output, xmlNodePtr node, int depth) 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugCtxt ctxt; 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output = stdout; 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpInitCtxt(&ctxt); 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.output = output; 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.depth = depth; 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpNode(&ctxt, node); 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpCleanCtxt(&ctxt); 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlDebugDumpNodeList: 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: the node list 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @depth: the indentation level. 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the list of element node, it is recursive 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugDumpNodeList(FILE * output, xmlNodePtr node, int depth) 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugCtxt ctxt; 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output = stdout; 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpInitCtxt(&ctxt); 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.output = output; 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.depth = depth; 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpNodeList(&ctxt, node); 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpCleanCtxt(&ctxt); 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlDebugDumpDocumentHead: 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @doc: the document 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information cncerning the document, not recursive 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugDumpDocumentHead(FILE * output, xmlDocPtr doc) 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugCtxt ctxt; 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output = stdout; 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpInitCtxt(&ctxt); 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.options |= DUMP_TEXT_TYPE; 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.output = output; 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpDocumentHead(&ctxt, doc); 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpCleanCtxt(&ctxt); 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlDebugDumpDocument: 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @doc: the document 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the document, it's recursive 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugDumpDocument(FILE * output, xmlDocPtr doc) 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugCtxt ctxt; 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output = stdout; 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpInitCtxt(&ctxt); 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.options |= DUMP_TEXT_TYPE; 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.output = output; 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpDocument(&ctxt, doc); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpCleanCtxt(&ctxt); 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlDebugDumpDTD: 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @dtd: the DTD 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dumps debug information for the DTD 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugDumpDTD(FILE * output, xmlDtdPtr dtd) 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugCtxt ctxt; 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output = stdout; 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpInitCtxt(&ctxt); 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.options |= DUMP_TEXT_TYPE; 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.output = output; 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpDTD(&ctxt, dtd); 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpCleanCtxt(&ctxt); 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Public entry points for checkings * 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlDebugCheckDocument: 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @doc: the document 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Check the document for potential content problems, and output 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the errors to @output 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns the number of errors found 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlDebugCheckDocument(FILE * output, xmlDocPtr doc) 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugCtxt ctxt; 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output = stdout; 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpInitCtxt(&ctxt); 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.output = output; 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt.check = 1; 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpDocument(&ctxt, doc); 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtDumpCleanCtxt(&ctxt); 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(ctxt.errors); 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Helpers for Shell * 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlLsCountNode: 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: the node to count 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Count the children of @node. 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns the number of children of @node. 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlLsCountNode(xmlNodePtr node) { 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret = 0; 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr list = NULL; 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == NULL) 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(0); 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (node->type) { 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_NODE: 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = node->children; 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_NODE: 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_HTML_DOCUMENT_NODE: 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_DOCB_ENABLED 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCB_DOCUMENT_NODE: 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = ((xmlDocPtr) node)->children; 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_NODE: 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = ((xmlAttrPtr) node)->children; 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_TEXT_NODE: 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_CDATA_SECTION_NODE: 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_PI_NODE: 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_COMMENT_NODE: 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->content != NULL) { 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlStrlen(node->content); 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_REF_NODE: 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_TYPE_NODE: 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_NODE: 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_FRAG_NODE: 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_NOTATION_NODE: 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DTD_NODE: 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_DECL: 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_DECL: 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_DECL: 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_NAMESPACE_DECL: 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_XINCLUDE_START: 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_XINCLUDE_END: 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = 1; 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (;list != NULL;ret++) 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = list->next; 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(ret); 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlLsOneNode: 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the FILE * for the output 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: the node to dump 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dump to @output the type and name of @node. 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlLsOneNode(FILE *output, xmlNodePtr node) { 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) return; 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == NULL) { 16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "NULL\n"); 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (node->type) { 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_NODE: 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "-"); 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_NODE: 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "a"); 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_TEXT_NODE: 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "t"); 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_CDATA_SECTION_NODE: 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "C"); 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_REF_NODE: 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "e"); 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_NODE: 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "E"); 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_PI_NODE: 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "p"); 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_COMMENT_NODE: 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "c"); 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_NODE: 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "d"); 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_HTML_DOCUMENT_NODE: 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "h"); 16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_TYPE_NODE: 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "T"); 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_FRAG_NODE: 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "F"); 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_NOTATION_NODE: 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "N"); 17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_NAMESPACE_DECL: 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "n"); 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "?"); 17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->type != XML_NAMESPACE_DECL) { 17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->properties != NULL) 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "a"); 17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "-"); 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->nsDef != NULL) 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "n"); 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "-"); 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, " %8d ", xmlLsCountNode(node)); 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (node->type) { 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ELEMENT_NODE: 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->name != NULL) 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "%s", (const char *) node->name); 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ATTRIBUTE_NODE: 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->name != NULL) 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "%s", (const char *) node->name); 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_TEXT_NODE: 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->content != NULL) { 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugDumpString(output, node->content); 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_CDATA_SECTION_NODE: 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_REF_NODE: 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->name != NULL) 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "%s", (const char *) node->name); 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_ENTITY_NODE: 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->name != NULL) 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "%s", (const char *) node->name); 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_PI_NODE: 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->name != NULL) 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "%s", (const char *) node->name); 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_COMMENT_NODE: 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_NODE: 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_HTML_DOCUMENT_NODE: 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_TYPE_NODE: 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_FRAG_NODE: 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_NOTATION_NODE: 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_NAMESPACE_DECL: { 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNsPtr ns = (xmlNsPtr) node; 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ns->prefix == NULL) 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "default -> %s", (char *)ns->href); 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "%s -> %s", (char *)ns->prefix, 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *)ns->href); 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->name != NULL) 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "%s", (const char *) node->name); 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(output, "\n"); 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlBoolToText: 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @boolval: a bool to turn into text 17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Convenient way to turn bool into text 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns a pointer to either "True" or "False" 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char * 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlBoolToText(int boolval) 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (boolval) 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return("True"); 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return("False"); 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**************************************************************** 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The XML shell related functions * 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ****************************************************************/ 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * TODO: Improvement/cleanups for the XML shell 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - allow to shell out an editor on a subpart 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - cleanup function registrations (with help) and calling 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - provide registration routines 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellPrintXPathError: 18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @errorType: valid xpath error id 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @arg: the argument that cause xpath to fail 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Print the xpath error to libxml default error channel 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellPrintXPathError(int errorType, const char *arg) 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *default_arg = "Result"; 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!arg) 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg = default_arg; 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (errorType) { 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_UNDEFINED: 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s: no such node\n", arg); 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_BOOLEAN: 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a Boolean\n", arg); 18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_NUMBER: 18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a number\n", arg); 18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_STRING: 18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a string\n", arg); 18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_POINT: 18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a point\n", arg); 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_RANGE: 18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a range\n", arg); 18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_LOCATIONSET: 18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a range\n", arg); 18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_USERS: 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is user-defined\n", arg); 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_XSLT_TREE: 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is an XSLT value tree\n", arg); 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if 0 18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Try casting the result string function (xpath builtin)\n", 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg); 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellPrintNodeCtxt: 18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt : a non-null shell context 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node : a non-null node to print to the output FILE 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Print node to the output FILE 18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellPrintNodeCtxt(xmlShellCtxtPtr ctxt,xmlNodePtr node) 18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE *fp; 18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!node) 18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt == NULL) 18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fp = stdout; 18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fp = ctxt->output; 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->type == XML_DOCUMENT_NODE) 18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocDump(fp, (xmlDocPtr) node); 18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (node->type == XML_ATTRIBUTE_NODE) 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugDumpAttrList(fp, (xmlAttrPtr) node, 0); 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlElemDump(fp, node->doc, node); 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(fp, "\n"); 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellPrintNode: 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node : a non-null node to print to the output FILE 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Print node to the output FILE 19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellPrintNode(xmlNodePtr node) 19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellPrintNodeCtxt(NULL, node); 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellPrintXPathResultCtxt: 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: a valid shell context 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @list: a valid result generated by an xpath evaluation 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Prints result to the output FILE 19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellPrintXPathResultCtxt(xmlShellCtxtPtr ctxt,xmlXPathObjectPtr list) 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt) 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (list != NULL) { 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (list->type) { 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_NODESET:{ 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int indx; 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (list->nodesetval) { 19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (indx = 0; indx < list->nodesetval->nodeNr; 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indx++) { 19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellPrintNodeCtxt(ctxt, 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->nodesetval->nodeTab[indx]); 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Empty node set\n"); 19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Node set\n"); 19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_BOOLEAN: 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Is a Boolean:%s\n", 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlBoolToText(list->boolval)); 19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_NUMBER: 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Is a number:%0g\n", list->floatval); 19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_STRING: 19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Is a string:%s\n", list->stringval); 19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellPrintXPathError(list->type, NULL); 19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellPrintXPathResult: 19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @list: a valid result generated by an xpath evaluation 19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 19785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Prints result to the output FILE 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellPrintXPathResult(xmlXPathObjectPtr list) 19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellPrintXPathResultCtxt(NULL, list); 19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellList: 19885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @arg: unused 19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: a node 19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "ls" 19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Does an Unix like listing of the given node (like a directory) 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellList(xmlShellCtxtPtr ctxt, 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *arg ATTRIBUTE_UNUSED, xmlNodePtr node, 20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node2 ATTRIBUTE_UNUSED) 20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr cur; 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt) 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == NULL) { 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "NULL\n"); 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->type == XML_DOCUMENT_NODE) || 20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type == XML_HTML_DOCUMENT_NODE)) { 20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur = ((xmlDocPtr) node)->children; 20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (node->type == XML_NAMESPACE_DECL) { 20145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlLsOneNode(ctxt->output, node); 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (node->children != NULL) { 20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur = node->children; 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlLsOneNode(ctxt->output, node); 20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (cur != NULL) { 20235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlLsOneNode(ctxt->output, cur); 20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur = cur->next; 20255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 20275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellBase: 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @arg: unused 20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: a node 20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "base" 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * dumps the current XML base of the node 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 20405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 20425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellBase(xmlShellCtxtPtr ctxt, 20435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *arg ATTRIBUTE_UNUSED, xmlNodePtr node, 20445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node2 ATTRIBUTE_UNUSED) 20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlChar *base; 20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt) 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == NULL) { 20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "NULL\n"); 20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base = xmlNodeGetBase(node->doc, node); 20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base == NULL) { 20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " No base found !!!\n"); 20585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 20595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "%s\n", base); 20605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(base); 20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_TREE_ENABLED 20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellSetBase: 20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @arg: the new base 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: a node 20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 20725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "setbase" 20745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * change the current XML base of the node 20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int 20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellSetBase(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED, 20805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *arg ATTRIBUTE_UNUSED, xmlNodePtr node, 20815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node2 ATTRIBUTE_UNUSED) 20825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodeSetBase(node, (xmlChar*) arg); 20845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 20875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 20895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellRegisterNamespace: 20915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @arg: a string in prefix=nsuri format 20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: unused 20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "setns" 20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * register/unregister a prefix=namespace pair 20985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * on the XPath context 20995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 21005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 on success and a negative value otherwise. 21015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int 21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellRegisterNamespace(xmlShellCtxtPtr ctxt, char *arg, 21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node ATTRIBUTE_UNUSED, xmlNodePtr node2 ATTRIBUTE_UNUSED) 21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlChar* nsListDup; 21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlChar* prefix; 21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlChar* href; 21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlChar* next; 21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nsListDup = xmlStrdup((xmlChar *) arg); 21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) next = nsListDup; 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while(next != NULL) { 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* skip spaces */ 21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /*while((*next) == ' ') next++;*/ 21165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if((*next) == '\0') break; 21175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* find prefix */ 21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefix = next; 21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) next = (xmlChar*)xmlStrchr(next, '='); 21215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(next == NULL) { 21225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "setns: prefix=[nsuri] required\n"); 21235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(nsListDup); 21245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(-1); 21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *(next++) = '\0'; 21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* find href */ 21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) href = next; 21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) next = (xmlChar*)xmlStrchr(next, ' '); 21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(next != NULL) { 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *(next++) = '\0'; 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* do register namespace */ 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(xmlXPathRegisterNs(ctxt->pctxt, prefix, href) != 0) { 21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", prefix, href); 21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(nsListDup); 21395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(-1); 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(nsListDup); 21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(0); 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellRegisterRootNamespaces: 21485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @arg: unused 21505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: the root element 21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 21525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 21535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "setrootns" 21545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * which registers all namespaces declarations found on the root element. 21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 21565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 on success and a negative value otherwise. 21575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int 21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellRegisterRootNamespaces(xmlShellCtxtPtr ctxt, char *arg ATTRIBUTE_UNUSED, 21605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr root, xmlNodePtr node2 ATTRIBUTE_UNUSED) 21615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 21625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNsPtr ns; 21635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((root == NULL) || (root->type != XML_ELEMENT_NODE) || 21655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (root->nsDef == NULL) || (ctxt == NULL) || (ctxt->pctxt == NULL)) 21665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(-1); 21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ns = root->nsDef; 21685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (ns != NULL) { 21695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ns->prefix == NULL) 21705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathRegisterNs(ctxt->pctxt, BAD_CAST "defaultns", ns->href); 21715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 21725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathRegisterNs(ctxt->pctxt, ns->prefix, ns->href); 21735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ns = ns->next; 21745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(0); 21765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 21785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 21805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellGrep: 21815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 21825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @arg: the string or regular expression to find 21835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: a node 21845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 21855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 21865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "grep" 21875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * dumps informations about the node (namespace, attributes, content). 21885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 21895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 21915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int 21925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellGrep(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED, 21935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *arg, xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED) 21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt) 21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 21975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == NULL) 21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 21995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (arg == NULL) 22005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 22015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_REGEXP_ENABLED 22025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((xmlStrchr((xmlChar *) arg, '?')) || 22035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlStrchr((xmlChar *) arg, '*')) || 22045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlStrchr((xmlChar *) arg, '.')) || 22055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlStrchr((xmlChar *) arg, '['))) { 22065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (node != NULL) { 22095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->type == XML_COMMENT_NODE) { 22105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlStrstr(node->content, (xmlChar *) arg)) { 22115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "%s : ", xmlGetNodePath(node)); 22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellList(ctxt, NULL, node, NULL); 22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (node->type == XML_TEXT_NODE) { 22165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlStrstr(node->content, (xmlChar *) arg)) { 22175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "%s : ", xmlGetNodePath(node->parent)); 22195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellList(ctxt, NULL, node->parent, NULL); 22205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 22245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Browse the full subtree, deep first 22255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->type == XML_DOCUMENT_NODE) || 22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type == XML_HTML_DOCUMENT_NODE)) { 22295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = ((xmlDocPtr) node)->children; 22305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((node->children != NULL) 22315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && (node->type != XML_ENTITY_REF_NODE)) { 22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* deep first */ 22335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = node->children; 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (node->next != NULL) { 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* then siblings */ 22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = node->next; 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 22385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* go up to parents->next if needed */ 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (node != NULL) { 22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->parent != NULL) { 22415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = node->parent; 22425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->next != NULL) { 22445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = node->next; 22455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 22465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->parent == NULL) { 22485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = NULL; 22495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 22505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 22585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellDir: 22595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 22605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @arg: unused 22615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: a node 22625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 22635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 22645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "dir" 22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * dumps informations about the node (namespace, attributes, content). 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellDir(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED, 22715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *arg ATTRIBUTE_UNUSED, xmlNodePtr node, 22725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node2 ATTRIBUTE_UNUSED) 22735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 22745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt) 22755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 22765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == NULL) { 22775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "NULL\n"); 22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 22795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->type == XML_DOCUMENT_NODE) || 22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type == XML_HTML_DOCUMENT_NODE)) { 22825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugDumpDocumentHead(ctxt->output, (xmlDocPtr) node); 22835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (node->type == XML_ATTRIBUTE_NODE) { 22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugDumpAttr(ctxt->output, (xmlAttrPtr) node, 0); 22855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 22865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugDumpOneNode(ctxt->output, node, 0); 22875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 22895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellSetContent: 22935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @value: the content as a string 22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: a node 22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 22975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 22985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "dir" 22995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * dumps informations about the node (namespace, attributes, content). 23005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 23015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 23025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 23035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int 23045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellSetContent(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED, 23055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *value, xmlNodePtr node, 23065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node2 ATTRIBUTE_UNUSED) 23075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 23085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr results; 23095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserErrors ret; 23105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt) 23125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 23135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == NULL) { 23145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "NULL\n"); 23155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 23165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value == NULL) { 23185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "NULL\n"); 23195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 23205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlParseInNodeContext(node, value, strlen(value), 0, &results); 23235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret == XML_ERR_OK) { 23245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->children != NULL) { 23255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeNodeList(node->children); 23265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node->children = NULL; 23275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node->last = NULL; 23285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlAddChildList(node, results); 23305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 23315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "failed to parse content\n"); 23325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 23345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 23375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 23385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellRNGValidate: 23395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 23405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @schemas: the path to the Relax-NG schemas 23415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: a node 23425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 23435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 23445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "relaxng" 23455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * validating the instance against a Relax-NG schemas 23465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 23475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 23485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 23495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int 23505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellRNGValidate(xmlShellCtxtPtr sctxt, char *schemas, 23515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node ATTRIBUTE_UNUSED, 23525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node2 ATTRIBUTE_UNUSED) 23535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 23545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGPtr relaxngschemas; 23555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGParserCtxtPtr ctxt; 23565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGValidCtxtPtr vctxt; 23575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret; 23585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlRelaxNGNewParserCtxt(schemas); 23605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGSetParserErrors(ctxt, 23615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlRelaxNGValidityErrorFunc) fprintf, 23625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlRelaxNGValidityWarningFunc) fprintf, 23635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stderr); 23645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) relaxngschemas = xmlRelaxNGParse(ctxt); 23655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGFreeParserCtxt(ctxt); 23665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (relaxngschemas == NULL) { 23675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 23685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Relax-NG schema %s failed to compile\n", schemas); 23695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(-1); 23705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vctxt = xmlRelaxNGNewValidCtxt(relaxngschemas); 23725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGSetValidErrors(vctxt, 23735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlRelaxNGValidityErrorFunc) fprintf, 23745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlRelaxNGValidityWarningFunc) fprintf, 23755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stderr); 23765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlRelaxNGValidateDoc(vctxt, sctxt->doc); 23775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret == 0) { 23785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s validates\n", sctxt->filename); 23795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (ret > 0) { 23805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s fails to validate\n", sctxt->filename); 23815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 23825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s validation generated an internal error\n", 23835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sctxt->filename); 23845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGFreeValidCtxt(vctxt); 23865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (relaxngschemas != NULL) 23875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGFree(relaxngschemas); 23885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(0); 23895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 23915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 23935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 23945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellCat: 23955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 23965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @arg: unused 23975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: a node 23985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 23995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 24005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "cat" 24015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * dumps the serialization node content (XML or HTML). 24025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 24035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 24045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 24055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 24065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellCat(xmlShellCtxtPtr ctxt, char *arg ATTRIBUTE_UNUSED, 24075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED) 24085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 24095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt) 24105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 24115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == NULL) { 24125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "NULL\n"); 24135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 24145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->doc->type == XML_HTML_DOCUMENT_NODE) { 24165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_HTML_ENABLED 24175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->type == XML_HTML_DOCUMENT_NODE) 24185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) htmlDocDump(ctxt->output, (htmlDocPtr) node); 24195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 24205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) htmlNodeDumpFile(ctxt->output, ctxt->doc, node); 24215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 24225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->type == XML_DOCUMENT_NODE) 24235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocDump(ctxt->output, (xmlDocPtr) node); 24245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 24255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlElemDump(ctxt->output, ctxt->doc, node); 24265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_HTML_ENABLED */ 24275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 24285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->type == XML_DOCUMENT_NODE) 24295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocDump(ctxt->output, (xmlDocPtr) node); 24305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 24315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlElemDump(ctxt->output, ctxt->doc, node); 24325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\n"); 24345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 24355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 24375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 24395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellLoad: 24405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 24415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @filename: the file name 24425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: unused 24435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 24445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 24455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "load" 24465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * loads a new document specified by the filename 24475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 24485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 or -1 if loading failed 24495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 24505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 24515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellLoad(xmlShellCtxtPtr ctxt, char *filename, 24525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node ATTRIBUTE_UNUSED, 24535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node2 ATTRIBUTE_UNUSED) 24545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 24555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocPtr doc; 24565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int html = 0; 24575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((ctxt == NULL) || (filename == NULL)) return(-1); 24595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->doc != NULL) 24605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) html = (ctxt->doc->type == XML_HTML_DOCUMENT_NODE); 24615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (html) { 24635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_HTML_ENABLED 24645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = htmlParseFile(filename, NULL); 24655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 24665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "HTML support not compiled in\n"); 24675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = NULL; 24685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_HTML_ENABLED */ 24695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 24705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlReadFile(filename,NULL,0); 24715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc != NULL) { 24735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->loaded == 1) { 24745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeDoc(ctxt->doc); 24755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->loaded = 1; 24775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 24785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathFreeContext(ctxt->pctxt); 24795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_XPATH_ENABLED */ 24805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(ctxt->filename); 24815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->doc = doc; 24825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->node = (xmlNodePtr) doc; 24835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 24845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->pctxt = xmlXPathNewContext(doc); 24855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_XPATH_ENABLED */ 24865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->filename = (char *) xmlCanonicPath((xmlChar *) filename); 24875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 24885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 24895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 24905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 24935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 24945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellWrite: 24955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 24965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @filename: the file name 24975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: a node in the tree 24985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 24995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 25005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "write" 25015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Write the current node to the filename, it saves the serialization 25025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of the subtree under the @node specified 25035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 25045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 or -1 in case of error 25055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 25065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 25075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellWrite(xmlShellCtxtPtr ctxt, char *filename, xmlNodePtr node, 25085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node2 ATTRIBUTE_UNUSED) 25095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 25105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == NULL) 25115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 25125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((filename == NULL) || (filename[0] == 0)) { 25135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 25145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef W_OK 25165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (access((char *) filename, W_OK)) { 25175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 25185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Cannot write to %s\n", filename); 25195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 25205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 25225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (node->type) { 25235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_NODE: 25245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlSaveFile((char *) filename, ctxt->doc) < -1) { 25255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 25265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Failed to write to %s\n", filename); 25275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 25285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 25305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_HTML_DOCUMENT_NODE: 25315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_HTML_ENABLED 25325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (htmlSaveFile((char *) filename, ctxt->doc) < 0) { 25335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 25345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Failed to write to %s\n", filename); 25355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 25365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 25385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlSaveFile((char *) filename, ctxt->doc) < -1) { 25395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 25405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Failed to write to %s\n", filename); 25415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 25425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_HTML_ENABLED */ 25445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 25455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default:{ 25465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE *f; 25475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f = fopen((char *) filename, "w"); 25495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (f == NULL) { 25505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 25515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Failed to write to %s\n", filename); 25525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 25535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlElemDump(f, ctxt->doc, node); 25555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fclose(f); 25565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 25595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 25625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellSave: 25635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 25645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @filename: the file name (optional) 25655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: unused 25665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 25675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 25685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "save" 25695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Write the current document to the filename, or it's original name 25705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 25715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 or -1 in case of error 25725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 25735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 25745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellSave(xmlShellCtxtPtr ctxt, char *filename, 25755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node ATTRIBUTE_UNUSED, 25765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node2 ATTRIBUTE_UNUSED) 25775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 25785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((ctxt == NULL) || (ctxt->doc == NULL)) 25795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 25805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((filename == NULL) || (filename[0] == 0)) 25815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename = ctxt->filename; 25825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filename == NULL) 25835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 25845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef W_OK 25855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (access((char *) filename, W_OK)) { 25865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 25875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Cannot save to %s\n", filename); 25885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 25895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 25915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (ctxt->doc->type) { 25925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_DOCUMENT_NODE: 25935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlSaveFile((char *) filename, ctxt->doc) < 0) { 25945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 25955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Failed to save to %s\n", filename); 25965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 25985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XML_HTML_DOCUMENT_NODE: 25995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_HTML_ENABLED 26005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (htmlSaveFile((char *) filename, ctxt->doc) < 0) { 26015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 26025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Failed to save to %s\n", filename); 26035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 26055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlSaveFile((char *) filename, ctxt->doc) < 0) { 26065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 26075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Failed to save to %s\n", filename); 26085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_HTML_ENABLED */ 26105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 26115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 26125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 26135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "To save to subparts of a document use the 'write' command\n"); 26145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 26155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 26185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 26205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 26225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 26235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellValidate: 26245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 26255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @dtd: the DTD URI (optional) 26265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: unused 26275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 26285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 26295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "validate" 26305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Validate the document, if a DTD path is provided, then the validation 26315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * is done against the given DTD. 26325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 26335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 or -1 in case of error 26345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 26355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 26365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellValidate(xmlShellCtxtPtr ctxt, char *dtd, 26375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node ATTRIBUTE_UNUSED, 26385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node2 ATTRIBUTE_UNUSED) 26395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 26405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlValidCtxt vctxt; 26415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int res = -1; 26425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((ctxt == NULL) || (ctxt->doc == NULL)) return(-1); 26445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vctxt.userData = stderr; 26455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vctxt.error = (xmlValidityErrorFunc) fprintf; 26465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vctxt.warning = (xmlValidityWarningFunc) fprintf; 26475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((dtd == NULL) || (dtd[0] == 0)) { 26495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) res = xmlValidateDocument(&vctxt, ctxt->doc); 26505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 26515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDtdPtr subset; 26525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subset = xmlParseDTD(NULL, (xmlChar *) dtd); 26545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (subset != NULL) { 26555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) res = xmlValidateDtd(&vctxt, ctxt->doc, subset); 26565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeDtd(subset); 26585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (res); 26615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_VALID_ENABLED */ 26635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 26655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellDu: 26665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 26675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @arg: unused 26685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @tree: a node defining a subtree 26695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 26705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 26715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "du" 26725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * show the structure of the subtree under node @tree 26735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If @tree is null, the command works on the current node. 26745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 26755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 or -1 in case of error 26765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 26775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 26785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellDu(xmlShellCtxtPtr ctxt, 26795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *arg ATTRIBUTE_UNUSED, xmlNodePtr tree, 26805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node2 ATTRIBUTE_UNUSED) 26815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 26825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node; 26835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int indent = 0, i; 26845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ctxt) 26865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 26875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (tree == NULL) 26895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 26905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = tree; 26915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (node != NULL) { 26925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->type == XML_DOCUMENT_NODE) || 26935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type == XML_HTML_DOCUMENT_NODE)) { 26945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "/\n"); 26955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (node->type == XML_ELEMENT_NODE) { 26965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < indent; i++) 26975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " "); 26985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "%s\n", node->name); 26995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 27005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 27035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Browse the full subtree, deep first 27045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 27055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node->type == XML_DOCUMENT_NODE) || 27075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (node->type == XML_HTML_DOCUMENT_NODE)) { 27085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = ((xmlDocPtr) node)->children; 27095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((node->children != NULL) 27105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && (node->type != XML_ENTITY_REF_NODE)) { 27115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* deep first */ 27125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = node->children; 27135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indent++; 27145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((node != tree) && (node->next != NULL)) { 27155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* then siblings */ 27165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = node->next; 27175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (node != tree) { 27185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* go up to parents->next if needed */ 27195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (node != tree) { 27205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->parent != NULL) { 27215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = node->parent; 27225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indent--; 27235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node != tree) && (node->next != NULL)) { 27255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = node->next; 27265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 27275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node->parent == NULL) { 27295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = NULL; 27305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 27315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == tree) { 27335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = NULL; 27345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 27355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* exit condition */ 27385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node == tree) 27395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = NULL; 27405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 27415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = NULL; 27425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 27445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 27455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 27475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellPwd: 27485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: the shell context 27495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @buffer: the output buffer 27505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node: a node 27515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @node2: unused 27525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 27535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell function "pwd" 27545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Show the full path from the root to the node, if needed building 27555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * thumblers when similar elements exists at a given ancestor level. 27565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The output is compatible with XPath commands. 27575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 27585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 0 or -1 in case of error 27595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 27605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 27615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellPwd(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED, char *buffer, 27625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED) 27635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 27645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlChar *path; 27655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((node == NULL) || (buffer == NULL)) 27675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 27685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = xmlGetNodePath(node); 27705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (path == NULL) 27715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (-1); 27725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 27745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This test prevents buffer overflow, because this routine 27755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * is only called by xmlShell, in which the second argument is 27765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 500 chars long. 27775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * It is a dirty hack before a cleaner solution is found. 27785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Documentation should mention that the second argument must 27795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * be at least 500 chars long, and could be stripped if too long. 27805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 27815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snprintf(buffer, 499, "%s", path); 27825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buffer[499] = '0'; 27835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(path); 27845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 27865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 27875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 27895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShell: 27905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @doc: the initial document 27915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @filename: the output buffer 27925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @input: the line reading function 27935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @output: the output FILE*, defaults to stdout if NULL 27945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 27955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the XML shell 27965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This allow to load, validate, view, modify and save a document 27975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * using a environment similar to a UNIX commandline. 27985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 27995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 28005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input, 28015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE * output) 28025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 28035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char prompt[500] = "/ > "; 28045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *cmdline = NULL, *cur; 28055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char command[100]; 28065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char arg[400]; 28075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 28085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellCtxtPtr ctxt; 28095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathObjectPtr list; 28105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc == NULL) 28125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 28135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filename == NULL) 28145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 28155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (input == NULL) 28165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 28175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) 28185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output = stdout; 28195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = (xmlShellCtxtPtr) xmlMalloc(sizeof(xmlShellCtxt)); 28205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt == NULL) 28215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 28225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->loaded = 0; 28235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->doc = doc; 28245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->input = input; 28255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->output = output; 28265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->filename = (char *) xmlStrdup((xmlChar *) filename); 28275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->node = (xmlNodePtr) ctxt->doc; 28285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 28305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->pctxt = xmlXPathNewContext(ctxt->doc); 28315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->pctxt == NULL) { 28325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(ctxt); 28335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 28345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_XPATH_ENABLED */ 28365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (1) { 28375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->node == (xmlNodePtr) ctxt->doc) 28385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snprintf(prompt, sizeof(prompt), "%s > ", "/"); 28395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((ctxt->node != NULL) && (ctxt->node->name)) 28405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snprintf(prompt, sizeof(prompt), "%s > ", ctxt->node->name); 28415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 28425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snprintf(prompt, sizeof(prompt), "? > "); 28435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prompt[sizeof(prompt) - 1] = 0; 28445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 28465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Get a new command line 28475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 28485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmdline = ctxt->input(prompt); 28495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cmdline == NULL) 28505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 28515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 28535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Parse the command itself 28545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 28555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur = cmdline; 28565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((*cur == ' ') || (*cur == '\t')) 28575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur++; 28585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i = 0; 28595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((*cur != ' ') && (*cur != '\t') && 28605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*cur != '\n') && (*cur != '\r')) { 28615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (*cur == 0) 28625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 28635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command[i++] = *cur++; 28645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command[i] = 0; 28665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i == 0) 28675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 28685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 28705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Parse the argument 28715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 28725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((*cur == ' ') || (*cur == '\t')) 28735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur++; 28745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i = 0; 28755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((*cur != '\n') && (*cur != '\r') && (*cur != 0)) { 28765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (*cur == 0) 28775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 28785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg[i++] = *cur++; 28795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg[i] = 0; 28815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 28835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * start interpreting the command 28845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 28855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!strcmp(command, "exit")) 28865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 28875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!strcmp(command, "quit")) 28885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 28895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!strcmp(command, "bye")) 28905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 28915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!strcmp(command, "help")) { 28925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tbase display XML base of the node\n"); 28935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tsetbase URI change the XML base of the node\n"); 28945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tbye leave shell\n"); 28955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tcat [node] display node or current node\n"); 28965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tcd [path] change directory to path or to root\n"); 28975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tdir [path] dumps informations about the node (namespace, attributes, content)\n"); 28985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tdu [path] show the structure of the subtree under path or the current node\n"); 28995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\texit leave shell\n"); 29005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\thelp display this help\n"); 29015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tfree display memory usage\n"); 29025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tload [name] load a new document with name\n"); 29035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tls [path] list contents of path or the current directory\n"); 29045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tset xml_fragment replace the current node content with the fragment parsed in context\n"); 29055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 29065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\txpath expr evaluate the XPath expression in that context and print the result\n"); 29075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tsetns nsreg register a namespace to a prefix in the XPath evaluation context\n"); 29085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\t format for nsreg is: prefix=[nsuri] (i.e. prefix= unsets a prefix)\n"); 29095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tsetrootns register all namespace found on the root element\n"); 29105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\t the default namespace if any uses 'defaultns' prefix\n"); 29115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_XPATH_ENABLED */ 29125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tpwd display current working directory\n"); 29135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tquit leave shell\n"); 29145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 29155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tsave [name] save this document to name or the original name\n"); 29165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\twrite [name] write the current node to the filename\n"); 29175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 29185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 29195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tvalidate check the document for errors\n"); 29205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_VALID_ENABLED */ 29215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 29225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\trelaxng rng validate the document agaisnt the Relax-NG schemas\n"); 29235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 29245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "\tgrep string search for a string in the subtree\n"); 29255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 29265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "validate")) { 29275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellValidate(ctxt, arg, NULL, NULL); 29285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_VALID_ENABLED */ 29295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "load")) { 29305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellLoad(ctxt, arg, NULL, NULL); 29315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 29325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "relaxng")) { 29335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellRNGValidate(ctxt, arg, NULL, NULL); 29345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 29355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 29365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "save")) { 29375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellSave(ctxt, arg, NULL, NULL); 29385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "write")) { 29395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((arg == NULL) || (arg[0] == 0)) 29405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 29415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Write command requires a filename argument\n"); 29425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 29435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellWrite(ctxt, arg, NULL, NULL); 29445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 29455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "grep")) { 29465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellGrep(ctxt, arg, ctxt->node, NULL); 29475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "free")) { 29485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (arg[0] == 0) { 29495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlMemShow(ctxt->output, 0); 29505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 29515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int len = 0; 29525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sscanf(arg, "%d", &len); 29545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlMemShow(ctxt->output, len); 29555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "pwd")) { 29575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char dir[500]; 29585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!xmlShellPwd(ctxt, dir, ctxt->node, NULL)) 29605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, "%s\n", dir); 29615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "du")) { 29625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellDu(ctxt, NULL, ctxt->node, NULL); 29635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "base")) { 29645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellBase(ctxt, NULL, ctxt->node, NULL); 29655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "set")) { 29665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellSetContent(ctxt, arg, ctxt->node, NULL); 29675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 29685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "setns")) { 29695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (arg[0] == 0) { 29705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 29715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "setns: prefix=[nsuri] required\n"); 29725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 29735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellRegisterNamespace(ctxt, arg, NULL, NULL); 29745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "setrootns")) { 29765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr root; 29775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) root = xmlDocGetRootElement(ctxt->doc); 29795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellRegisterRootNamespaces(ctxt, NULL, root, NULL); 29805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "xpath")) { 29815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (arg[0] == 0) { 29825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 29835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "xpath: expression required\n"); 29845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 29855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->pctxt->node = ctxt->node; 29865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt); 29875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathDebugDumpObject(ctxt->output, list, 0); 29885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathFreeObject(list); 29895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_XPATH_ENABLED */ 29915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_TREE_ENABLED 29925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "setbase")) { 29935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellSetBase(ctxt, arg, ctxt->node, NULL); 29945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 29955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(command, "ls")) || (!strcmp(command, "dir"))) { 29965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int dir = (!strcmp(command, "dir")); 29975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (arg[0] == 0) { 29995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dir) 30005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellDir(ctxt, NULL, ctxt->node, NULL); 30015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 30025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellList(ctxt, NULL, ctxt->node, NULL); 30035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 30045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->pctxt->node = ctxt->node; 30055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 30065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->pctxt->node = ctxt->node; 30075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt); 30085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 30095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = NULL; 30105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_XPATH_ENABLED */ 30115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (list != NULL) { 30125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (list->type) { 30135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_UNDEFINED: 30145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 30155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s: no such node\n", arg); 30165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_NODESET:{ 30185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int indx; 30195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (list->nodesetval == NULL) 30215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (indx = 0; 30245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indx < list->nodesetval->nodeNr; 30255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indx++) { 30265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dir) 30275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellDir(ctxt, NULL, 30285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->nodesetval-> 30295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodeTab[indx], NULL); 30305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 30315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellList(ctxt, NULL, 30325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->nodesetval-> 30335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodeTab[indx], NULL); 30345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 30355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 30375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_BOOLEAN: 30385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 30395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a Boolean\n", arg); 30405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_NUMBER: 30425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 30435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a number\n", arg); 30445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_STRING: 30465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 30475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a string\n", arg); 30485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_POINT: 30505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 30515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a point\n", arg); 30525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_RANGE: 30545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 30555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a range\n", arg); 30565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_LOCATIONSET: 30585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 30595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a range\n", arg); 30605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_USERS: 30625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 30635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is user-defined\n", arg); 30645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_XSLT_TREE: 30665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 30675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is an XSLT value tree\n", 30685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg); 30695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 30715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 30725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathFreeObject(list); 30735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 30745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 30755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 30765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s: no such node\n", arg); 30775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 30785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->pctxt->node = NULL; 30795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 30805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "cd")) { 30815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (arg[0] == 0) { 30825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->node = (xmlNodePtr) ctxt->doc; 30835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 30845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 30855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->pctxt->node = ctxt->node; 30865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt); 30875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 30885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = NULL; 30895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_XPATH_ENABLED */ 30905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (list != NULL) { 30915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (list->type) { 30925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_UNDEFINED: 30935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 30945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s: no such node\n", arg); 30955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_NODESET: 30975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (list->nodesetval != NULL) { 30985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (list->nodesetval->nodeNr == 1) { 30995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->node = list->nodesetval->nodeTab[0]; 31005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((ctxt->node != NULL) && 31015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (ctxt->node->type == 31025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XML_NAMESPACE_DECL)) { 31035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cannot cd to namespace\n"); 31055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->node = NULL; 31065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 31085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a %d Node Set\n", 31105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg, 31115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->nodesetval->nodeNr); 31125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 31135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is an empty Node Set\n", 31155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg); 31165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_BOOLEAN: 31185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a Boolean\n", arg); 31205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_NUMBER: 31225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a number\n", arg); 31245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_STRING: 31265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a string\n", arg); 31285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_POINT: 31305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a point\n", arg); 31325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_RANGE: 31345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a range\n", arg); 31365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_LOCATIONSET: 31385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a range\n", arg); 31405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_USERS: 31425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is user-defined\n", arg); 31445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_XSLT_TREE: 31465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is an XSLT value tree\n", 31485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg); 31495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 31525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathFreeObject(list); 31535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 31545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 31555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s: no such node\n", arg); 31575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->pctxt->node = NULL; 31595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 31615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!strcmp(command, "cat")) { 31625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (arg[0] == 0) { 31635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellCat(ctxt, NULL, ctxt->node, NULL); 31645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 31655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->pctxt->node = ctxt->node; 31665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 31675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->pctxt->node = ctxt->node; 31685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt); 31695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 31705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = NULL; 31715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_XPATH_ENABLED */ 31725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (list != NULL) { 31735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (list->type) { 31745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_UNDEFINED: 31755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s: no such node\n", arg); 31775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_NODESET:{ 31795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int indx; 31805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (list->nodesetval == NULL) 31825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (indx = 0; 31855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indx < list->nodesetval->nodeNr; 31865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indx++) { 31875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i > 0) 31885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(ctxt->output, " -------\n"); 31895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShellCat(ctxt, NULL, 31905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->nodesetval-> 31915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nodeTab[indx], NULL); 31925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_BOOLEAN: 31965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 31975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a Boolean\n", arg); 31985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 31995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_NUMBER: 32005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 32015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a number\n", arg); 32025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 32035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_STRING: 32045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 32055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a string\n", arg); 32065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 32075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_POINT: 32085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 32095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a point\n", arg); 32105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 32115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_RANGE: 32125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 32135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a range\n", arg); 32145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 32155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_LOCATIONSET: 32165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 32175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is a range\n", arg); 32185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 32195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_USERS: 32205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 32215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is user-defined\n", arg); 32225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 32235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_XSLT_TREE: 32245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 32255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s is an XSLT value tree\n", 32265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg); 32275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 32285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 32305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathFreeObject(list); 32315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 32325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 32335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 32345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%s: no such node\n", arg); 32355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->pctxt->node = NULL; 32375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 32395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 32405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 32415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Unknown command %s\n", command); 32425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) free(cmdline); /* not xmlFree here ! */ 32445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmdline = NULL; 32455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 32475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathFreeContext(ctxt->pctxt); 32485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_XPATH_ENABLED */ 32495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->loaded) { 32505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeDoc(ctxt->doc); 32515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->filename != NULL) 32535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(ctxt->filename); 32545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(ctxt); 32555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cmdline != NULL) 32565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) free(cmdline); /* not xmlFree here ! */ 32575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 32585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_XPATH_ENABLED */ 32605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define bottom_debugXML 32615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "elfgcchack.h" 32625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_DEBUG_ENABLED */ 3263