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