1be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard/* 2be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard * testHTML.c : a small tester program for HTML input. 3be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard * 4be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard * See Copyright for the status of this software. 5be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard * 6c5d64345cf19bfd72418eb0a837869b0462e9130Daniel Veillard * daniel@veillard.com 7be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard */ 8be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard 970a9da54eb200cd5c5ceafb72aff72c39021c94cBjorn Reese#include "libxml.h" 1070a9da54eb200cd5c5ceafb72aff72c39021c94cBjorn Reese 1170a9da54eb200cd5c5ceafb72aff72c39021c94cBjorn Reese#ifdef LIBXML_HTML_ENABLED 1270a9da54eb200cd5c5ceafb72aff72c39021c94cBjorn Reese 137f7d1119afb072466b0a74293b6898025d6641dbDaniel Veillard#include <string.h> 147c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard#include <stdarg.h> 157c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 167f7d1119afb072466b0a74293b6898025d6641dbDaniel Veillard 177f7d1119afb072466b0a74293b6898025d6641dbDaniel Veillard#ifdef HAVE_SYS_TYPES_H 18be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard#include <sys/types.h> 197f7d1119afb072466b0a74293b6898025d6641dbDaniel Veillard#endif 20be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard#ifdef HAVE_SYS_STAT_H 21be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard#include <sys/stat.h> 22be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard#endif 23be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard#ifdef HAVE_FCNTL_H 24be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard#include <fcntl.h> 25be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard#endif 26be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard#ifdef HAVE_UNISTD_H 27be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard#include <unistd.h> 28be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard#endif 297f7d1119afb072466b0a74293b6898025d6641dbDaniel Veillard#ifdef HAVE_STDLIB_H 30be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard#include <stdlib.h> 317f7d1119afb072466b0a74293b6898025d6641dbDaniel Veillard#endif 32be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard 33361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#include <libxml/xmlmemory.h> 34361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#include <libxml/HTMLparser.h> 35361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#include <libxml/HTMLtree.h> 36361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#include <libxml/debugXML.h> 37d6d7f7bf96a87688cc4bf756cf98367018e3ef88Daniel Veillard#include <libxml/xmlerror.h> 383c01b1d81b696fe8624b6d7e26ec0ebffcc7c06bDaniel Veillard#include <libxml/globals.h> 39be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard 40361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#ifdef LIBXML_DEBUG_ENABLED 41be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillardstatic int debug = 0; 42361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#endif 43be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillardstatic int copy = 0; 447c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillardstatic int sax = 0; 457c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillardstatic int repeat = 0; 467c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillardstatic int noout = 0; 4773b013fc1758c3c3afb54c00ade42b529fc4c77dDaniel Veillard#ifdef LIBXML_PUSH_ENABLED 485e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillardstatic int push = 0; 4973b013fc1758c3c3afb54c00ade42b529fc4c77dDaniel Veillard#endif /* LIBXML_PUSH_ENABLED */ 5032bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillardstatic char *encoding = NULL; 519475a352bdd1f15b1e0c53472a74938f9d5dc04eDaniel Veillardstatic int options = 0; 52be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard 5324505b0f5c872c5afb6da5093565e5a6e09ca541Daniel Veillardstatic xmlSAXHandler emptySAXHandlerStruct = { 547c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* internalSubset */ 557c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* isStandalone */ 567c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* hasInternalSubset */ 577c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* hasExternalSubset */ 587c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* resolveEntity */ 597c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* getEntity */ 607c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* entityDecl */ 617c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* notationDecl */ 627c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* attributeDecl */ 637c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* elementDecl */ 647c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* unparsedEntityDecl */ 657c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* setDocumentLocator */ 667c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* startDocument */ 677c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* endDocument */ 687c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* startElement */ 697c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* endElement */ 707c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* reference */ 717c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* characters */ 727c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* ignorableWhitespace */ 737c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* processingInstruction */ 747c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* comment */ 757c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* xmlParserWarning */ 767c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* xmlParserError */ 777c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* xmlParserError */ 787c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard NULL, /* getParameterEntity */ 7956a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillard NULL, /* cdataBlock */ 80d0463560300f1d8b3e41d70c3728ed84fdc8dd30Daniel Veillard NULL, /* externalSubset */ 81871611bb0325095b30559ff1edc1fdaa2ad5fd2fWilliam M. Brack 1, /* initialized */ 82871611bb0325095b30559ff1edc1fdaa2ad5fd2fWilliam M. Brack NULL, /* private */ 83871611bb0325095b30559ff1edc1fdaa2ad5fd2fWilliam M. Brack NULL, /* startElementNsSAX2Func */ 84871611bb0325095b30559ff1edc1fdaa2ad5fd2fWilliam M. Brack NULL, /* endElementNsSAX2Func */ 85871611bb0325095b30559ff1edc1fdaa2ad5fd2fWilliam M. Brack NULL /* xmlStructuredErrorFunc */ 867c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard}; 877c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 8824505b0f5c872c5afb6da5093565e5a6e09ca541Daniel Veillardstatic xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct; 897c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillardextern xmlSAXHandlerPtr debugSAXHandler; 907c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 917c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/************************************************************************ 927c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * * 937c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Debug Handlers * 947c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * * 957c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard ************************************************************************/ 967c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 977c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 987c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * isStandaloneDebug: 997c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 1007c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 1017c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Is this document tagged standalone ? 1027c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 1037c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Returns 1 if true 1047c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 10556a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic int 106c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardisStandaloneDebug(void *ctx ATTRIBUTE_UNUSED) 1077c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 1087c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.isStandalone()\n"); 1097c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard return(0); 1107c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 1117c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 1127c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 1137c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * hasInternalSubsetDebug: 1147c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 1157c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 1167c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Does this document has an internal subset 1177c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 1187c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Returns 1 if true 1197c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 12056a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic int 121c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardhasInternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED) 1227c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 1237c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.hasInternalSubset()\n"); 1247c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard return(0); 1257c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 1267c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 1277c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 1287c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * hasExternalSubsetDebug: 1297c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 1307c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 1317c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Does this document has an external subset 1327c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 1337c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Returns 1 if true 1347c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 13556a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic int 136c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardhasExternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED) 1377c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 1387c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.hasExternalSubset()\n"); 1397c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard return(0); 1407c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 1417c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 1427c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 1437c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * hasInternalSubsetDebug: 1447c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 1457c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 1467c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Does this document has an internal subset 1477c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 14856a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 149c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardinternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, 1507c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard const xmlChar *ExternalID, const xmlChar *SystemID) 1517c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 152808a3f1f9f7c7e9eb4faba618d1efdfe6d20f7d8Daniel Veillard fprintf(stdout, "SAX.internalSubset(%s,", name); 153808a3f1f9f7c7e9eb4faba618d1efdfe6d20f7d8Daniel Veillard if (ExternalID == NULL) 154808a3f1f9f7c7e9eb4faba618d1efdfe6d20f7d8Daniel Veillard fprintf(stdout, " ,"); 155808a3f1f9f7c7e9eb4faba618d1efdfe6d20f7d8Daniel Veillard else 156808a3f1f9f7c7e9eb4faba618d1efdfe6d20f7d8Daniel Veillard fprintf(stdout, " %s,", ExternalID); 157808a3f1f9f7c7e9eb4faba618d1efdfe6d20f7d8Daniel Veillard if (SystemID == NULL) 158808a3f1f9f7c7e9eb4faba618d1efdfe6d20f7d8Daniel Veillard fprintf(stdout, " )\n"); 159808a3f1f9f7c7e9eb4faba618d1efdfe6d20f7d8Daniel Veillard else 160808a3f1f9f7c7e9eb4faba618d1efdfe6d20f7d8Daniel Veillard fprintf(stdout, " %s)\n", SystemID); 1617c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 1627c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 1637c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 1647c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * resolveEntityDebug: 1657c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 1667c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @publicId: The public ID of the entity 1677c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @systemId: The system ID of the entity 1687c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 1697c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Special entity resolver, better left to the parser, it has 1707c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * more context than the application layer. 1717c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * The default behaviour is to NOT resolve the entities, in that case 1727c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * the ENTITY_REF nodes are built in the structure (and the parameter 1737c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * values). 1747c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 1757c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. 1767c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 17756a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic xmlParserInputPtr 178c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardresolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xmlChar *systemId) 1797c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 1807c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */ 1817c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 182f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard 1837c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.resolveEntity("); 1847c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard if (publicId != NULL) 1857c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "%s", (char *)publicId); 1867c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard else 1877c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, " "); 1887c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard if (systemId != NULL) 1897c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, ", %s)\n", (char *)systemId); 1907c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard else 1917c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, ", )\n"); 1927c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/********* 1937c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard if (systemId != NULL) { 1947c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard return(xmlNewInputFromFile(ctxt, (char *) systemId)); 1957c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard } 1967c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard *********/ 1977c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard return(NULL); 1987c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 1997c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 2007c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 2017c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * getEntityDebug: 2027c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 2037c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @name: The entity name 2047c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 2057c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Get an entity by name 2067c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 2077c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. 2087c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 20956a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic xmlEntityPtr 210c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardgetEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name) 2117c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 2127c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.getEntity(%s)\n", name); 2137c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard return(NULL); 2147c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 2157c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 2167c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 2177c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * getParameterEntityDebug: 2187c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 2197c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @name: The entity name 2207c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 2217c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Get a parameter entity by name 2227c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 2237c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Returns the xmlParserInputPtr 2247c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 22556a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic xmlEntityPtr 226c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardgetParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name) 2277c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 2287c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.getParameterEntity(%s)\n", name); 2297c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard return(NULL); 2307c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 2317c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 2327c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 2337c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 2347c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * entityDeclDebug: 2357c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 236f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard * @name: the entity name 237f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard * @type: the entity type 2387c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @publicId: The public ID of the entity 2397c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @systemId: The system ID of the entity 2407c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @content: the entity value (without processing). 2417c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 2427c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * An entity definition has been parsed 2437c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 24456a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 245c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardentityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type, 2467c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard const xmlChar *publicId, const xmlChar *systemId, xmlChar *content) 2477c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 2487c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.entityDecl(%s, %d, %s, %s, %s)\n", 2497c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard name, type, publicId, systemId, content); 2507c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 2517c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 2527c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 2537c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * attributeDeclDebug: 2547c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 255f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard * @name: the attribute name 256f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard * @type: the attribute type 2577c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 2587c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * An attribute definition has been parsed 2597c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 26056a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 261c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardattributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *elem, const xmlChar *name, 2627c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard int type, int def, const xmlChar *defaultValue, 263c86a4fae4a164046393d4bb948453e3a71b45754Daniel Veillard xmlEnumerationPtr tree ATTRIBUTE_UNUSED) 2647c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 2657c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, %s, ...)\n", 2667c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard elem, name, type, def, defaultValue); 2677c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 2687c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 2697c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 2707c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * elementDeclDebug: 2717c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 272f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard * @name: the element name 273f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard * @type: the element type 2747c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @content: the element value (without processing). 2757c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 2767c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * An element definition has been parsed 2777c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 27856a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 279c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardelementDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type, 280c86a4fae4a164046393d4bb948453e3a71b45754Daniel Veillard xmlElementContentPtr content ATTRIBUTE_UNUSED) 2817c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 2827c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.elementDecl(%s, %d, ...)\n", 2837c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard name, type); 2847c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 2857c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 2867c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 2877c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * notationDeclDebug: 2887c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 2897c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @name: The name of the notation 2907c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @publicId: The public ID of the entity 2917c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @systemId: The system ID of the entity 2927c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 2937c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * What to do when a notation declaration has been parsed. 2947c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 29556a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 296c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardnotationDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, 2977c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard const xmlChar *publicId, const xmlChar *systemId) 2987c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 2997c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.notationDecl(%s, %s, %s)\n", 3007c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard (char *) name, (char *) publicId, (char *) systemId); 3017c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 3027c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 3037c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 3047c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * unparsedEntityDeclDebug: 3057c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 3067c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @name: The name of the entity 3077c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @publicId: The public ID of the entity 3087c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @systemId: The system ID of the entity 3097c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @notationName: the name of the notation 3107c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 3117c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * What to do when an unparsed entity declaration is parsed 3127c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 31356a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 314c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardunparsedEntityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, 3157c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard const xmlChar *publicId, const xmlChar *systemId, 3167c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard const xmlChar *notationName) 3177c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 3187c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n", 3197c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard (char *) name, (char *) publicId, (char *) systemId, 3207c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard (char *) notationName); 3217c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 3227c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 3237c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 3247c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * setDocumentLocatorDebug: 3257c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 3267c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @loc: A SAX Locator 3277c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 3287c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Receive the document locator at startup, actually xmlDefaultSAXLocator 3297c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Everything is available on the context, so this is useless in our case. 3307c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 33156a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 332c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardsetDocumentLocatorDebug(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED) 3337c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 3347c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.setDocumentLocator()\n"); 3357c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 3367c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 3377c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 3387c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * startDocumentDebug: 3397c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 3407c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 3417c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * called when the document start being processed. 3427c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 34356a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 344c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardstartDocumentDebug(void *ctx ATTRIBUTE_UNUSED) 3457c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 3467c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.startDocument()\n"); 3477c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 3487c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 3497c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 3507c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * endDocumentDebug: 3517c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 3527c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 3537c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * called when the document end has been detected. 3547c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 35556a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 356c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardendDocumentDebug(void *ctx ATTRIBUTE_UNUSED) 3577c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 3587c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.endDocument()\n"); 3597c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 3607c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 3617c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 3627c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * startElementDebug: 3637c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 3647c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @name: The element name 3657c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 3667c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * called when an opening tag has been processed. 3677c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 36856a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 369c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardstartElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts) 3707c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 3717c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard int i; 3727c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 3737c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.startElement(%s", (char *) name); 3747c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard if (atts != NULL) { 3757c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard for (i = 0;(atts[i] != NULL);i++) { 376808a3f1f9f7c7e9eb4faba618d1efdfe6d20f7d8Daniel Veillard fprintf(stdout, ", %s", atts[i++]); 377e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard if (atts[i] != NULL) { 378e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard unsigned char output[40]; 379e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard const unsigned char *att = atts[i]; 380e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard int outlen, attlen; 381e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard fprintf(stdout, "='"); 382e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard while ((attlen = strlen((char*)att)) > 0) { 383e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard outlen = sizeof output - 1; 384e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard htmlEncodeEntities(output, &outlen, att, &attlen, '\''); 3855f704afe98c584b7188aa0e4fbc9d9e68e0d7b1bDaniel Veillard output[outlen] = 0; 386c193956ee1c3b229556301cf09f6ff1b6eb9cb70William M. Brack fprintf(stdout, "%s", (char *) output); 387e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard att += attlen; 388e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard } 389e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard fprintf(stdout, "'"); 390e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard } 3917c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard } 3927c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard } 3937c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, ")\n"); 3947c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 3957c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 3967c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 3977c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * endElementDebug: 3987c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 3997c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @name: The element name 4007c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 4017c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * called when the end of an element has been detected. 4027c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 40356a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 404c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardendElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name) 4057c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 4067c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.endElement(%s)\n", (char *) name); 4077c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 4087c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 4097c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 4107c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * charactersDebug: 4117c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 4127c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ch: a xmlChar string 4137c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @len: the number of xmlChar 4147c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 4157c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * receiving some chars from the parser. 4167c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Question: how much at a time ??? 4177c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 41856a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 419c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardcharactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len) 4207c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 421e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard unsigned char output[40]; 4224948eb4fd4f0b98e978d19ead9a1368a9cc0a637Daniel Veillard int inlen = len, outlen = 30; 4237c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 4244948eb4fd4f0b98e978d19ead9a1368a9cc0a637Daniel Veillard htmlEncodeEntities(output, &outlen, ch, &inlen, 0); 425e010c17d78f06af35b9977cf03f10df1e1c05aebDaniel Veillard output[outlen] = 0; 42687b953957305fc1ece066efa60df5c7844183439Daniel Veillard 42787b953957305fc1ece066efa60df5c7844183439Daniel Veillard fprintf(stdout, "SAX.characters(%s, %d)\n", output, len); 4287c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 4297c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 4307c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 4317eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard * cdataDebug: 4327eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard * @ctxt: An XML parser context 4337eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard * @ch: a xmlChar string 4347eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard * @len: the number of xmlChar 4357eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard * 4367eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard * receiving some cdata chars from the parser. 4377eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard * Question: how much at a time ??? 4387eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard */ 43956a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 440c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardcdataDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len) 4417eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard{ 4427eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard unsigned char output[40]; 4437eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard int inlen = len, outlen = 30; 4447eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard 4457eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard htmlEncodeEntities(output, &outlen, ch, &inlen, 0); 4467eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard output[outlen] = 0; 4477eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard 4487eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard fprintf(stdout, "SAX.cdata(%s, %d)\n", output, len); 4497eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard} 4507eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard 4517eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard/** 4527c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * referenceDebug: 4537c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 4547c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @name: The entity name 4557c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 456f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard * called when an entity reference is detected. 4577c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 45856a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 459c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardreferenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name) 4607c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 4617c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.reference(%s)\n", name); 4627c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 4637c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 4647c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 4657c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * ignorableWhitespaceDebug: 4667c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 4677c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ch: a xmlChar string 4687c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @start: the first char in the string 4697c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @len: the number of xmlChar 4707c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 4717c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * receiving some ignorable whitespaces from the parser. 4727c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Question: how much at a time ??? 4737c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 47456a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 475c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardignorableWhitespaceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len) 4767c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 47787b953957305fc1ece066efa60df5c7844183439Daniel Veillard char output[40]; 47887b953957305fc1ece066efa60df5c7844183439Daniel Veillard int i; 47987b953957305fc1ece066efa60df5c7844183439Daniel Veillard 48087b953957305fc1ece066efa60df5c7844183439Daniel Veillard for (i = 0;(i<len) && (i < 30);i++) 48187b953957305fc1ece066efa60df5c7844183439Daniel Veillard output[i] = ch[i]; 48287b953957305fc1ece066efa60df5c7844183439Daniel Veillard output[i] = 0; 48387b953957305fc1ece066efa60df5c7844183439Daniel Veillard 48487b953957305fc1ece066efa60df5c7844183439Daniel Veillard fprintf(stdout, "SAX.ignorableWhitespace(%s, %d)\n", output, len); 4857c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 4867c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 4877c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 4887c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * processingInstructionDebug: 4897c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 4907c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @target: the target name 4917c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @data: the PI data's 4927c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @len: the number of xmlChar 4937c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 4947c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * A processing instruction has been parsed. 4957c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 49656a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 497c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardprocessingInstructionDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *target, 4987c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard const xmlChar *data) 4997c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 5007c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.processingInstruction(%s, %s)\n", 5017c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard (char *) target, (char *) data); 5027c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 5037c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 5047c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 5057c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * commentDebug: 5067c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 5077c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @value: the comment content 5087c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 5097c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * A comment has been parsed. 5107c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 51156a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 512c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardcommentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value) 5137c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 5147c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.comment(%s)\n", value); 5157c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 5167c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 5177c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 5187c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * warningDebug: 5197c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 5207c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @msg: the message to display/transmit 5217c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @...: extra parameters for the message display 5227c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 5237c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Display and format a warning messages, gives file, line, position and 5247c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * extra parameters. 5257c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 526ffa3c74933baa45bef5e0d7f15473c38a4c3f9e8Daniel Veillardstatic void XMLCDECL 527c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardwarningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) 5287c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 5297c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard va_list args; 5307c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 5317c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard va_start(args, msg); 5327c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.warning: "); 5337c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard vfprintf(stdout, msg, args); 5347c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard va_end(args); 5357c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 5367c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 5377c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 5387c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * errorDebug: 5397c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 5407c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @msg: the message to display/transmit 5417c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @...: extra parameters for the message display 5427c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 5437c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Display and format a error messages, gives file, line, position and 5447c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * extra parameters. 5457c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 546ffa3c74933baa45bef5e0d7f15473c38a4c3f9e8Daniel Veillardstatic void XMLCDECL 547c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillarderrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) 5487c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 5497c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard va_list args; 5507c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 5517c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard va_start(args, msg); 5527c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.error: "); 5537c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard vfprintf(stdout, msg, args); 5547c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard va_end(args); 5557c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 5567c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 5577c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard/** 5587c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * fatalErrorDebug: 5597c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @ctxt: An XML parser context 5607c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @msg: the message to display/transmit 5617c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * @...: extra parameters for the message display 5627c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * 5637c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Display and format a fatalError messages, gives file, line, position and 5647c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * extra parameters. 5657c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 566ffa3c74933baa45bef5e0d7f15473c38a4c3f9e8Daniel Veillardstatic void XMLCDECL 567c86a4fae4a164046393d4bb948453e3a71b45754Daniel VeillardfatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) 5687c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard{ 5697c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard va_list args; 5707c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 5717c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard va_start(args, msg); 5727c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "SAX.fatalError: "); 5737c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard vfprintf(stdout, msg, args); 5747c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard va_end(args); 5757c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 5767c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 57724505b0f5c872c5afb6da5093565e5a6e09ca541Daniel Veillardstatic xmlSAXHandler debugSAXHandlerStruct = { 5787c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard internalSubsetDebug, 5797c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard isStandaloneDebug, 5807c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard hasInternalSubsetDebug, 5817c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard hasExternalSubsetDebug, 5827c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard resolveEntityDebug, 5837c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard getEntityDebug, 5847c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard entityDeclDebug, 5857c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard notationDeclDebug, 5867c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard attributeDeclDebug, 5877c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard elementDeclDebug, 5887c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard unparsedEntityDeclDebug, 5897c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard setDocumentLocatorDebug, 5907c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard startDocumentDebug, 5917c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard endDocumentDebug, 5927c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard startElementDebug, 5937c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard endElementDebug, 5947c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard referenceDebug, 5957c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard charactersDebug, 5967c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard ignorableWhitespaceDebug, 5977c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard processingInstructionDebug, 5987c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard commentDebug, 5997c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard warningDebug, 6007c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard errorDebug, 6017c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fatalErrorDebug, 6027c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard getParameterEntityDebug, 6037eda8452f826744fd6b2875d3a38e8f00602cef3Daniel Veillard cdataDebug, 604d0463560300f1d8b3e41d70c3728ed84fdc8dd30Daniel Veillard NULL, 605092643b52d29e6b721c257c4c88efa8259eebfe9Daniel Veillard 1, 606092643b52d29e6b721c257c4c88efa8259eebfe9Daniel Veillard NULL, 607092643b52d29e6b721c257c4c88efa8259eebfe9Daniel Veillard NULL, 608871611bb0325095b30559ff1edc1fdaa2ad5fd2fWilliam M. Brack NULL, 609092643b52d29e6b721c257c4c88efa8259eebfe9Daniel Veillard NULL 6107c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard}; 6117c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 6127c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel VeillardxmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct; 613be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard/************************************************************************ 614be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard * * 615be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard * Debug * 616be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard * * 617be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard ************************************************************************/ 618be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard 61956a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 62056a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel VeillardparseSAXFile(char *filename) { 621f0cc7ccc7db45fe1c055768a50be2243ed4e863cDaniel Veillard htmlDocPtr doc = NULL; 622f0cc7ccc7db45fe1c055768a50be2243ed4e863cDaniel Veillard 6237c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard /* 6247c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard * Empty callbacks for checking 6257c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard */ 62673b013fc1758c3c3afb54c00ade42b529fc4c77dDaniel Veillard#ifdef LIBXML_PUSH_ENABLED 62787b953957305fc1ece066efa60df5c7844183439Daniel Veillard if (push) { 62887b953957305fc1ece066efa60df5c7844183439Daniel Veillard FILE *f; 62987b953957305fc1ece066efa60df5c7844183439Daniel Veillard 6303403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 6313403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack f = fopen(filename, "rb"); 6323403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack#else 63387b953957305fc1ece066efa60df5c7844183439Daniel Veillard f = fopen(filename, "r"); 6343403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack#endif 63587b953957305fc1ece066efa60df5c7844183439Daniel Veillard if (f != NULL) { 63687b953957305fc1ece066efa60df5c7844183439Daniel Veillard int res, size = 3; 63787b953957305fc1ece066efa60df5c7844183439Daniel Veillard char chars[4096]; 63887b953957305fc1ece066efa60df5c7844183439Daniel Veillard htmlParserCtxtPtr ctxt; 6397c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 64087b953957305fc1ece066efa60df5c7844183439Daniel Veillard /* if (repeat) */ 64187b953957305fc1ece066efa60df5c7844183439Daniel Veillard size = 4096; 64287b953957305fc1ece066efa60df5c7844183439Daniel Veillard res = fread(chars, 1, 4, f); 64387b953957305fc1ece066efa60df5c7844183439Daniel Veillard if (res > 0) { 64487b953957305fc1ece066efa60df5c7844183439Daniel Veillard ctxt = htmlCreatePushParserCtxt(emptySAXHandler, NULL, 645779af00750fa86045e94422287d67a2cf5723f65William M. Brack chars, res, filename, XML_CHAR_ENCODING_NONE); 64687b953957305fc1ece066efa60df5c7844183439Daniel Veillard while ((res = fread(chars, 1, size, f)) > 0) { 64787b953957305fc1ece066efa60df5c7844183439Daniel Veillard htmlParseChunk(ctxt, chars, res, 0); 64887b953957305fc1ece066efa60df5c7844183439Daniel Veillard } 64987b953957305fc1ece066efa60df5c7844183439Daniel Veillard htmlParseChunk(ctxt, chars, 0, 1); 65087b953957305fc1ece066efa60df5c7844183439Daniel Veillard doc = ctxt->myDoc; 65187b953957305fc1ece066efa60df5c7844183439Daniel Veillard htmlFreeParserCtxt(ctxt); 65287b953957305fc1ece066efa60df5c7844183439Daniel Veillard } 65387b953957305fc1ece066efa60df5c7844183439Daniel Veillard if (doc != NULL) { 65487b953957305fc1ece066efa60df5c7844183439Daniel Veillard fprintf(stdout, "htmlSAXParseFile returned non-NULL\n"); 65587b953957305fc1ece066efa60df5c7844183439Daniel Veillard xmlFreeDoc(doc); 65687b953957305fc1ece066efa60df5c7844183439Daniel Veillard } 65787b953957305fc1ece066efa60df5c7844183439Daniel Veillard fclose(f); 65887b953957305fc1ece066efa60df5c7844183439Daniel Veillard } 65987b953957305fc1ece066efa60df5c7844183439Daniel Veillard if (!noout) { 6603403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 6613403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack f = fopen(filename, "rb"); 6623403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack#else 6633403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack f = fopen(filename, "r"); 6643403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack#endif 66587b953957305fc1ece066efa60df5c7844183439Daniel Veillard if (f != NULL) { 66687b953957305fc1ece066efa60df5c7844183439Daniel Veillard int res, size = 3; 66787b953957305fc1ece066efa60df5c7844183439Daniel Veillard char chars[4096]; 66887b953957305fc1ece066efa60df5c7844183439Daniel Veillard htmlParserCtxtPtr ctxt; 66987b953957305fc1ece066efa60df5c7844183439Daniel Veillard 67087b953957305fc1ece066efa60df5c7844183439Daniel Veillard /* if (repeat) */ 67187b953957305fc1ece066efa60df5c7844183439Daniel Veillard size = 4096; 67287b953957305fc1ece066efa60df5c7844183439Daniel Veillard res = fread(chars, 1, 4, f); 67387b953957305fc1ece066efa60df5c7844183439Daniel Veillard if (res > 0) { 67487b953957305fc1ece066efa60df5c7844183439Daniel Veillard ctxt = htmlCreatePushParserCtxt(debugSAXHandler, NULL, 675779af00750fa86045e94422287d67a2cf5723f65William M. Brack chars, res, filename, XML_CHAR_ENCODING_NONE); 67687b953957305fc1ece066efa60df5c7844183439Daniel Veillard while ((res = fread(chars, 1, size, f)) > 0) { 67787b953957305fc1ece066efa60df5c7844183439Daniel Veillard htmlParseChunk(ctxt, chars, res, 0); 67887b953957305fc1ece066efa60df5c7844183439Daniel Veillard } 67987b953957305fc1ece066efa60df5c7844183439Daniel Veillard htmlParseChunk(ctxt, chars, 0, 1); 68087b953957305fc1ece066efa60df5c7844183439Daniel Veillard doc = ctxt->myDoc; 68187b953957305fc1ece066efa60df5c7844183439Daniel Veillard htmlFreeParserCtxt(ctxt); 68287b953957305fc1ece066efa60df5c7844183439Daniel Veillard } 68387b953957305fc1ece066efa60df5c7844183439Daniel Veillard if (doc != NULL) { 68487b953957305fc1ece066efa60df5c7844183439Daniel Veillard fprintf(stdout, "htmlSAXParseFile returned non-NULL\n"); 68587b953957305fc1ece066efa60df5c7844183439Daniel Veillard xmlFreeDoc(doc); 68687b953957305fc1ece066efa60df5c7844183439Daniel Veillard } 68787b953957305fc1ece066efa60df5c7844183439Daniel Veillard fclose(f); 68887b953957305fc1ece066efa60df5c7844183439Daniel Veillard } 68987b953957305fc1ece066efa60df5c7844183439Daniel Veillard } 690f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard } else { 69173b013fc1758c3c3afb54c00ade42b529fc4c77dDaniel Veillard#endif /* LIBXML_PUSH_ENABLED */ 69287b953957305fc1ece066efa60df5c7844183439Daniel Veillard doc = htmlSAXParseFile(filename, NULL, emptySAXHandler, NULL); 6937c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard if (doc != NULL) { 6947c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard fprintf(stdout, "htmlSAXParseFile returned non-NULL\n"); 6957c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard xmlFreeDoc(doc); 6967c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard } 69787b953957305fc1ece066efa60df5c7844183439Daniel Veillard 69887b953957305fc1ece066efa60df5c7844183439Daniel Veillard if (!noout) { 69987b953957305fc1ece066efa60df5c7844183439Daniel Veillard /* 70087b953957305fc1ece066efa60df5c7844183439Daniel Veillard * Debug callback 70187b953957305fc1ece066efa60df5c7844183439Daniel Veillard */ 70287b953957305fc1ece066efa60df5c7844183439Daniel Veillard doc = htmlSAXParseFile(filename, NULL, debugSAXHandler, NULL); 70387b953957305fc1ece066efa60df5c7844183439Daniel Veillard if (doc != NULL) { 70487b953957305fc1ece066efa60df5c7844183439Daniel Veillard fprintf(stdout, "htmlSAXParseFile returned non-NULL\n"); 70587b953957305fc1ece066efa60df5c7844183439Daniel Veillard xmlFreeDoc(doc); 70687b953957305fc1ece066efa60df5c7844183439Daniel Veillard } 70787b953957305fc1ece066efa60df5c7844183439Daniel Veillard } 70873b013fc1758c3c3afb54c00ade42b529fc4c77dDaniel Veillard#ifdef LIBXML_PUSH_ENABLED 7097c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard } 71073b013fc1758c3c3afb54c00ade42b529fc4c77dDaniel Veillard#endif /* LIBXML_PUSH_ENABLED */ 7117c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard} 7127c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard 71356a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel Veillardstatic void 71456a4cb8c4d3eab4ab3295a61c87e8e92483922c6Daniel VeillardparseAndPrintFile(char *filename) { 7152156d4387bf23c9b927341da58bd394bb4946017Daniel Veillard htmlDocPtr doc = NULL; 716be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard 717be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard /* 718be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard * build an HTML tree from a string; 719be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard */ 720c2c0d142175989f17f2231721d12ef714a292eb2Daniel Veillard#ifdef LIBXML_PUSH_ENABLED 7215e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard if (push) { 7225e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard FILE *f; 7235e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard 7243403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 7253403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack f = fopen(filename, "rb"); 7263403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack#else 7275e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard f = fopen(filename, "r"); 7283403adde326013574de71ff667c6d75d8d62656bWilliam M. Brack#endif 7295e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard if (f != NULL) { 7305e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard int res, size = 3; 73187b953957305fc1ece066efa60df5c7844183439Daniel Veillard char chars[4096]; 7325e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard htmlParserCtxtPtr ctxt; 7335e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard 73487b953957305fc1ece066efa60df5c7844183439Daniel Veillard /* if (repeat) */ 73587b953957305fc1ece066efa60df5c7844183439Daniel Veillard size = 4096; 7365e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard res = fread(chars, 1, 4, f); 7375e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard if (res > 0) { 7385e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard ctxt = htmlCreatePushParserCtxt(NULL, NULL, 739779af00750fa86045e94422287d67a2cf5723f65William M. Brack chars, res, filename, XML_CHAR_ENCODING_NONE); 7405e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard while ((res = fread(chars, 1, size, f)) > 0) { 7415e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard htmlParseChunk(ctxt, chars, res, 0); 7425e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard } 7435e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard htmlParseChunk(ctxt, chars, 0, 1); 7445e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard doc = ctxt->myDoc; 7455e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard htmlFreeParserCtxt(ctxt); 7465e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard } 74787b953957305fc1ece066efa60df5c7844183439Daniel Veillard fclose(f); 7485e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard } 749f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard } else { 7509475a352bdd1f15b1e0c53472a74938f9d5dc04eDaniel Veillard doc = htmlReadFile(filename, NULL, options); 7515e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard } 752c2c0d142175989f17f2231721d12ef714a292eb2Daniel Veillard#else 753c2c0d142175989f17f2231721d12ef714a292eb2Daniel Veillard doc = htmlReadFile(filename,NULL,options); 754c2c0d142175989f17f2231721d12ef714a292eb2Daniel Veillard#endif 7555e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard if (doc == NULL) { 756d6d7f7bf96a87688cc4bf756cf98367018e3ef88Daniel Veillard xmlGenericError(xmlGenericErrorContext, 757d6d7f7bf96a87688cc4bf756cf98367018e3ef88Daniel Veillard "Could not parse %s\n", filename); 7585e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard } 759be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard 7602156d4387bf23c9b927341da58bd394bb4946017Daniel Veillard#ifdef LIBXML_TREE_ENABLED 761be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard /* 762be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard * test intermediate copy if needed. 763be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard */ 764be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard if (copy) { 7652156d4387bf23c9b927341da58bd394bb4946017Daniel Veillard htmlDocPtr tmp; 7662156d4387bf23c9b927341da58bd394bb4946017Daniel Veillard 767be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard tmp = doc; 768be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard doc = xmlCopyDoc(doc, 1); 769be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard xmlFreeDoc(tmp); 770be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard } 7712156d4387bf23c9b927341da58bd394bb4946017Daniel Veillard#endif 772be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard 773a9cce9cd0d7aff3ec318b5d8d376da131b6aaad4Daniel Veillard#ifdef LIBXML_OUTPUT_ENABLED 774be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard /* 775be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard * print it. 776be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard */ 777f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard if (!noout) { 778361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#ifdef LIBXML_DEBUG_ENABLED 77932bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard if (!debug) { 78032bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard if (encoding) 78132bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard htmlSaveFileEnc("-", doc, encoding); 78232bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard else 78332bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard htmlDocDump(stdout, doc); 78432bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard } else 7857c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard xmlDebugDumpDocument(stdout, doc); 786361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#else 78732bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard if (encoding) 78832bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard htmlSaveFileEnc("-", doc, encoding); 78932bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard else 79032bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard htmlDocDump(stdout, doc); 791361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#endif 792f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard } 793a9cce9cd0d7aff3ec318b5d8d376da131b6aaad4Daniel Veillard#endif /* LIBXML_OUTPUT_ENABLED */ 794be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard 795be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard /* 796be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard * free it. 797be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard */ 798be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard xmlFreeDoc(doc); 799be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard} 800be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard 801be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillardint main(int argc, char **argv) { 8027c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard int i, count; 803be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard int files = 0; 804be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard 805be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard for (i = 1; i < argc ; i++) { 806361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#ifdef LIBXML_DEBUG_ENABLED 807be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug"))) 808be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard debug++; 809361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard else 810361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#endif 811361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy"))) 812be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard copy++; 81373b013fc1758c3c3afb54c00ade42b529fc4c77dDaniel Veillard#ifdef LIBXML_PUSH_ENABLED 8145e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard else if ((!strcmp(argv[i], "-push")) || (!strcmp(argv[i], "--push"))) 8155e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard push++; 81673b013fc1758c3c3afb54c00ade42b529fc4c77dDaniel Veillard#endif /* LIBXML_PUSH_ENABLED */ 8177c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard else if ((!strcmp(argv[i], "-sax")) || (!strcmp(argv[i], "--sax"))) 8187c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard sax++; 8197c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard else if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout"))) 8207c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard noout++; 8217c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard else if ((!strcmp(argv[i], "-repeat")) || 8227c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard (!strcmp(argv[i], "--repeat"))) 8237c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard repeat++; 82432bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard else if ((!strcmp(argv[i], "-encode")) || 82532bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard (!strcmp(argv[i], "--encode"))) { 82632bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard i++; 82732bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard encoding = argv[i]; 82832bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard } 829be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard } 830be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard for (i = 1; i < argc ; i++) { 83132bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard if ((!strcmp(argv[i], "-encode")) || 83232bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard (!strcmp(argv[i], "--encode"))) { 83332bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard i++; 83432bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard continue; 83532bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard } 836be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard if (argv[i][0] != '-') { 8377c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard if (repeat) { 8387c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard for (count = 0;count < 100 * repeat;count++) { 8397c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard if (sax) 8407c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard parseSAXFile(argv[i]); 841f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard else 8427c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard parseAndPrintFile(argv[i]); 843f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard } 8447c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard } else { 8457c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard if (sax) 8467c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard parseSAXFile(argv[i]); 847f8e3db0445a1bc8cfe3f77326b07ec161482caa2Daniel Veillard else 8487c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard parseAndPrintFile(argv[i]); 8497c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard } 850be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard files ++; 851be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard } 852be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard } 853be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard if (files == 0) { 8547c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard printf("Usage : %s [--debug] [--copy] [--copy] HTMLfiles ...\n", 855be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard argv[0]); 856be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard printf("\tParse the HTML files and output the result of the parsing\n"); 857361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#ifdef LIBXML_DEBUG_ENABLED 858be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard printf("\t--debug : dump a debug tree of the in-memory document\n"); 859361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#endif 860be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard printf("\t--copy : used to test the internal copy implementation\n"); 8617c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard printf("\t--sax : debug the sequence of SAX callbacks\n"); 8625e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard printf("\t--repeat : parse the file 100 times, for timing\n"); 8637c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard printf("\t--noout : do not print the result\n"); 86473b013fc1758c3c3afb54c00ade42b529fc4c77dDaniel Veillard#ifdef LIBXML_PUSH_ENABLED 8655e5c62351f88ed07e3a67cf3735bf3ae290eb03dDaniel Veillard printf("\t--push : use the push mode parser\n"); 86673b013fc1758c3c3afb54c00ade42b529fc4c77dDaniel Veillard#endif /* LIBXML_PUSH_ENABLED */ 86732bc74ef98c7bd6172327fb03f68766f6ee4b6a2Daniel Veillard printf("\t--encode encoding : output in the given encoding\n"); 868be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard } 869f5c2c8707a79d57411876a4294c9471c04d1e47dDaniel Veillard xmlCleanupParser(); 8707c1206fc060fd4260f7c6f003c32fbbea3e542fdDaniel Veillard xmlMemoryDump(); 871be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard 872be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard return(0); 873be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1Daniel Veillard} 874361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#else /* !LIBXML_HTML_ENABLED */ 875361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#include <stdio.h> 876a9cce9cd0d7aff3ec318b5d8d376da131b6aaad4Daniel Veillardint main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { 877361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard printf("%s : HTML support not compiled in\n", argv[0]); 878361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard return(0); 879361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard} 880361d845de0f06c1d52668c8df489ec8e4071a768Daniel Veillard#endif 881