38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/*
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * testHTML.c : a small tester program for HTML input.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * See Copyright for the status of this software.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * daniel@veillard.com
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include "libxml.h"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_HTML_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <string.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <stdarg.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef HAVE_SYS_TYPES_H
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <sys/types.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef HAVE_SYS_STAT_H
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <sys/stat.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef HAVE_FCNTL_H
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <fcntl.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef HAVE_UNISTD_H
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <unistd.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef HAVE_STDLIB_H
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <stdlib.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <libxml/xmlmemory.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <libxml/HTMLparser.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <libxml/HTMLtree.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <libxml/debugXML.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <libxml/xmlerror.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <libxml/globals.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_DEBUG_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic int debug = 0;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic int copy = 0;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic int sax = 0;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic int repeat = 0;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic int noout = 0;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_PUSH_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic int push = 0;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif /* LIBXML_PUSH_ENABLED */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic char *encoding = NULL;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic int options = 0;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic xmlSAXHandler emptySAXHandlerStruct = {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* internalSubset */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* isStandalone */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* hasInternalSubset */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* hasExternalSubset */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* resolveEntity */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* getEntity */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* entityDecl */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* notationDecl */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* attributeDecl */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* elementDecl */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* unparsedEntityDecl */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* setDocumentLocator */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* startDocument */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* endDocument */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* startElement */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* endElement */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* reference */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* characters */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* ignorableWhitespace */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* processingInstruction */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* comment */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* xmlParserWarning */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* xmlParserError */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* xmlParserError */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* getParameterEntity */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* cdataBlock */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* externalSubset */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 1, /* initialized */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* private */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* startElementNsSAX2Func */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL, /* endElementNsSAX2Func */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL /* xmlStructuredErrorFunc */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync};
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncextern xmlSAXHandlerPtr debugSAXHandler;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/************************************************************************
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Debug Handlers *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ************************************************************************/
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * isStandaloneDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Is this document tagged standalone ?
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns 1 if true
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic int
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncisStandaloneDebug(void *ctx ATTRIBUTE_UNUSED)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.isStandalone()\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return(0);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * hasInternalSubsetDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Does this document has an internal subset
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns 1 if true
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic int
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynchasInternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.hasInternalSubset()\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return(0);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * hasExternalSubsetDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Does this document has an external subset
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns 1 if true
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic int
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynchasExternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.hasExternalSubset()\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return(0);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * hasInternalSubsetDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Does this document has an internal subset
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncinternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync const xmlChar *ExternalID, const xmlChar *SystemID)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.internalSubset(%s,", name);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (ExternalID == NULL)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, " ,");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, " %s,", ExternalID);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (SystemID == NULL)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, " )\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, " %s)\n", SystemID);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * resolveEntityDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @publicId: The public ID of the entity
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @systemId: The system ID of the entity
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Special entity resolver, better left to the parser, it has
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * more context than the application layer.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * The default behaviour is to NOT resolve the entities, in that case
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * the ENTITY_REF nodes are built in the structure (and the parameter
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * values).
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic xmlParserInputPtr
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncresolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xmlChar *systemId)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.resolveEntity(");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (publicId != NULL)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "%s", (char *)publicId);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, " ");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (systemId != NULL)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, ", %s)\n", (char *)systemId);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, ", )\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/*********
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (systemId != NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return(xmlNewInputFromFile(ctxt, (char *) systemId));
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *********/
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return(NULL);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * getEntityDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @name: The entity name
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Get an entity by name
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic xmlEntityPtr
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncgetEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.getEntity(%s)\n", name);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return(NULL);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * getParameterEntityDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @name: The entity name
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Get a parameter entity by name
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Returns the xmlParserInputPtr
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic xmlEntityPtr
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncgetParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.getParameterEntity(%s)\n", name);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return(NULL);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * entityDeclDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @name: the entity name
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @type: the entity type
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @publicId: The public ID of the entity
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @systemId: The system ID of the entity
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @content: the entity value (without processing).
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * An entity definition has been parsed
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncentityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.entityDecl(%s, %d, %s, %s, %s)\n",
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync name, type, publicId, systemId, content);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * attributeDeclDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @name: the attribute name
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @type: the attribute type
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * An attribute definition has been parsed
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncattributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *elem, const xmlChar *name,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int type, int def, const xmlChar *defaultValue,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlEnumerationPtr tree ATTRIBUTE_UNUSED)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, %s, ...)\n",
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elem, name, type, def, defaultValue);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * elementDeclDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @name: the element name
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @type: the element type
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @content: the element value (without processing).
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * An element definition has been parsed
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncelementDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlElementContentPtr content ATTRIBUTE_UNUSED)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.elementDecl(%s, %d, ...)\n",
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync name, type);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * notationDeclDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @name: The name of the notation
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @publicId: The public ID of the entity
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @systemId: The system ID of the entity
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * What to do when a notation declaration has been parsed.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncnotationDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync const xmlChar *publicId, const xmlChar *systemId)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.notationDecl(%s, %s, %s)\n",
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync (char *) name, (char *) publicId, (char *) systemId);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * unparsedEntityDeclDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @name: The name of the entity
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @publicId: The public ID of the entity
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @systemId: The system ID of the entity
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @notationName: the name of the notation
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * What to do when an unparsed entity declaration is parsed
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncunparsedEntityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync const xmlChar *publicId, const xmlChar *systemId,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync const xmlChar *notationName)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n",
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync (char *) name, (char *) publicId, (char *) systemId,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync (char *) notationName);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * setDocumentLocatorDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @loc: A SAX Locator
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Receive the document locator at startup, actually xmlDefaultSAXLocator
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Everything is available on the context, so this is useless in our case.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncsetDocumentLocatorDebug(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.setDocumentLocator()\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * startDocumentDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * called when the document start being processed.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstartDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.startDocument()\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * endDocumentDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * called when the document end has been detected.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncendDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.endDocument()\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * startElementDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @name: The element name
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * called when an opening tag has been processed.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstartElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int i;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.startElement(%s", (char *) name);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (atts != NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync for (i = 0;(atts[i] != NULL);i++) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, ", %s", atts[i++]);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (atts[i] != NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync unsigned char output[40];
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync const unsigned char *att = atts[i];
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int outlen, attlen;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "='");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync while ((attlen = strlen((char*)att)) > 0) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync outlen = sizeof output - 1;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlEncodeEntities(output, &outlen, att, &attlen, '\'');
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync output[outlen] = 0;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "%s", (char *) output);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync att += attlen;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "'");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, ")\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * endElementDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @name: The element name
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * called when the end of an element has been detected.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncendElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.endElement(%s)\n", (char *) name);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * charactersDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ch: a xmlChar string
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @len: the number of xmlChar
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * receiving some chars from the parser.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Question: how much at a time ???
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynccharactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync unsigned char output[40];
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int inlen = len, outlen = 30;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlEncodeEntities(output, &outlen, ch, &inlen, 0);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync output[outlen] = 0;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.characters(%s, %d)\n", output, len);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * cdataDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ch: a xmlChar string
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @len: the number of xmlChar
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * receiving some cdata chars from the parser.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Question: how much at a time ???
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynccdataDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync unsigned char output[40];
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int inlen = len, outlen = 30;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlEncodeEntities(output, &outlen, ch, &inlen, 0);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync output[outlen] = 0;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.cdata(%s, %d)\n", output, len);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * referenceDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @name: The entity name
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * called when an entity reference is detected.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncreferenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.reference(%s)\n", name);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * ignorableWhitespaceDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ch: a xmlChar string
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @start: the first char in the string
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @len: the number of xmlChar
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * receiving some ignorable whitespaces from the parser.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Question: how much at a time ???
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncignorableWhitespaceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync char output[40];
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int i;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync for (i = 0;(i<len) && (i < 30);i++)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync output[i] = ch[i];
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync output[i] = 0;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.ignorableWhitespace(%s, %d)\n", output, len);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * processingInstructionDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @target: the target name
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @data: the PI data's
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @len: the number of xmlChar
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * A processing instruction has been parsed.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncprocessingInstructionDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *target,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync const xmlChar *data)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.processingInstruction(%s, %s)\n",
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync (char *) target, (char *) data);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * commentDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @value: the comment content
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * A comment has been parsed.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynccommentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.comment(%s)\n", value);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * warningDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @msg: the message to display/transmit
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @...: extra parameters for the message display
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Display and format a warning messages, gives file, line, position and
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * extra parameters.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void XMLCDECL
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncwarningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync va_list args;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync va_start(args, msg);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.warning: ");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync vfprintf(stdout, msg, args);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync va_end(args);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * errorDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @msg: the message to display/transmit
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @...: extra parameters for the message display
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Display and format a error messages, gives file, line, position and
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * extra parameters.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void XMLCDECL
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncerrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync va_list args;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync va_start(args, msg);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.error: ");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync vfprintf(stdout, msg, args);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync va_end(args);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/**
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * fatalErrorDebug:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @ctxt: An XML parser context
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @msg: the message to display/transmit
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * @...: extra parameters for the message display
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Display and format a fatalError messages, gives file, line, position and
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * extra parameters.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void XMLCDECL
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncfatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync{
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync va_list args;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync va_start(args, msg);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "SAX.fatalError: ");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync vfprintf(stdout, msg, args);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync va_end(args);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic xmlSAXHandler debugSAXHandlerStruct = {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync internalSubsetDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync isStandaloneDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync hasInternalSubsetDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync hasExternalSubsetDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync resolveEntityDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync getEntityDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync entityDeclDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync notationDeclDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync attributeDeclDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync elementDeclDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync unparsedEntityDeclDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync setDocumentLocatorDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync startDocumentDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync endDocumentDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync startElementDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync endElementDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync referenceDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync charactersDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ignorableWhitespaceDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync processingInstructionDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync commentDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync warningDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync errorDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fatalErrorDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync getParameterEntityDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync cdataDebug,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync 1,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync NULL
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync};
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncxmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync/************************************************************************
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Debug *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * *
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ************************************************************************/
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncparseSAXFile(char *filename) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlDocPtr doc = NULL;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /*
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Empty callbacks for checking
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_PUSH_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (push) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync FILE *f;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync f = fopen(filename, "rb");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync f = fopen(filename, "r");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (f != NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int res, size = 3;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync char chars[4096];
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlParserCtxtPtr ctxt;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* if (repeat) */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync size = 4096;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync res = fread(chars, 1, 4, f);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (res > 0) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ctxt = htmlCreatePushParserCtxt(emptySAXHandler, NULL,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync chars, res, filename, XML_CHAR_ENCODING_NONE);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync while ((res = fread(chars, 1, size, f)) > 0) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlParseChunk(ctxt, chars, res, 0);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlParseChunk(ctxt, chars, 0, 1);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync doc = ctxt->myDoc;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlFreeParserCtxt(ctxt);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (doc != NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "htmlSAXParseFile returned non-NULL\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlFreeDoc(doc);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fclose(f);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (!noout) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync f = fopen(filename, "rb");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync f = fopen(filename, "r");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (f != NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int res, size = 3;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync char chars[4096];
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlParserCtxtPtr ctxt;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* if (repeat) */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync size = 4096;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync res = fread(chars, 1, 4, f);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (res > 0) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ctxt = htmlCreatePushParserCtxt(debugSAXHandler, NULL,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync chars, res, filename, XML_CHAR_ENCODING_NONE);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync while ((res = fread(chars, 1, size, f)) > 0) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlParseChunk(ctxt, chars, res, 0);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlParseChunk(ctxt, chars, 0, 1);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync doc = ctxt->myDoc;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlFreeParserCtxt(ctxt);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (doc != NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "htmlSAXParseFile returned non-NULL\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlFreeDoc(doc);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fclose(f);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync } else {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif /* LIBXML_PUSH_ENABLED */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync doc = htmlSAXParseFile(filename, NULL, emptySAXHandler, NULL);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (doc != NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "htmlSAXParseFile returned non-NULL\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlFreeDoc(doc);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (!noout) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /*
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * Debug callback
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync doc = htmlSAXParseFile(filename, NULL, debugSAXHandler, NULL);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (doc != NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fprintf(stdout, "htmlSAXParseFile returned non-NULL\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlFreeDoc(doc);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_PUSH_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif /* LIBXML_PUSH_ENABLED */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncstatic void
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncparseAndPrintFile(char *filename) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlDocPtr doc = NULL;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /*
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * build an HTML tree from a string;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_PUSH_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (push) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync FILE *f;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync f = fopen(filename, "rb");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync f = fopen(filename, "r");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (f != NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int res, size = 3;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync char chars[4096];
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlParserCtxtPtr ctxt;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /* if (repeat) */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync size = 4096;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync res = fread(chars, 1, 4, f);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (res > 0) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync ctxt = htmlCreatePushParserCtxt(NULL, NULL,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync chars, res, filename, XML_CHAR_ENCODING_NONE);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync while ((res = fread(chars, 1, size, f)) > 0) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlParseChunk(ctxt, chars, res, 0);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlParseChunk(ctxt, chars, 0, 1);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync doc = ctxt->myDoc;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlFreeParserCtxt(ctxt);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync fclose(f);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync } else {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync doc = htmlReadFile(filename, NULL, options);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync doc = htmlReadFile(filename,NULL,options);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (doc == NULL) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlGenericError(xmlGenericErrorContext,
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync "Could not parse %s\n", filename);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_TREE_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /*
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * test intermediate copy if needed.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (copy) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlDocPtr tmp;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync tmp = doc;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync doc = xmlCopyDoc(doc, 1);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlFreeDoc(tmp);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_OUTPUT_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /*
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * print it.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (!noout) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_DEBUG_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (!debug) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (encoding)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlSaveFileEnc("-", doc, encoding);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlDocDump(stdout, doc);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync } else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlDebugDumpDocument(stdout, doc);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (encoding)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlSaveFileEnc("-", doc, encoding);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync htmlDocDump(stdout, doc);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif /* LIBXML_OUTPUT_ENABLED */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync /*
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync * free it.
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlFreeDoc(doc);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncint main(int argc, char **argv) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int i, count;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync int files = 0;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync for (i = 1; i < argc ; i++) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_DEBUG_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync debug++;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy")))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync copy++;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_PUSH_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else if ((!strcmp(argv[i], "-push")) || (!strcmp(argv[i], "--push")))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync push++;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif /* LIBXML_PUSH_ENABLED */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else if ((!strcmp(argv[i], "-sax")) || (!strcmp(argv[i], "--sax")))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sax++;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout")))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync noout++;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else if ((!strcmp(argv[i], "-repeat")) ||
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync (!strcmp(argv[i], "--repeat")))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync repeat++;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else if ((!strcmp(argv[i], "-encode")) ||
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync (!strcmp(argv[i], "--encode"))) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync i++;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync encoding = argv[i];
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync for (i = 1; i < argc ; i++) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if ((!strcmp(argv[i], "-encode")) ||
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync (!strcmp(argv[i], "--encode"))) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync i++;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync continue;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (argv[i][0] != '-') {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (repeat) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync for (count = 0;count < 100 * repeat;count++) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (sax)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync parseSAXFile(argv[i]);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync parseAndPrintFile(argv[i]);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync } else {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (sax)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync parseSAXFile(argv[i]);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync else
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync parseAndPrintFile(argv[i]);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync files ++;
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync if (files == 0) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("Usage : %s [--debug] [--copy] [--copy] HTMLfiles ...\n",
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync argv[0]);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("\tParse the HTML files and output the result of the parsing\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_DEBUG_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("\t--debug : dump a debug tree of the in-memory document\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("\t--copy : used to test the internal copy implementation\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("\t--sax : debug the sequence of SAX callbacks\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("\t--repeat : parse the file 100 times, for timing\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("\t--noout : do not print the result\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#ifdef LIBXML_PUSH_ENABLED
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("\t--push : use the push mode parser\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif /* LIBXML_PUSH_ENABLED */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("\t--encode encoding : output in the given encoding\n");
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync }
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlCleanupParser();
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync xmlMemoryDump();
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return(0);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#else /* !LIBXML_HTML_ENABLED */
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#include <stdio.h>
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncint main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync printf("%s : HTML support not compiled in\n", argv[0]);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync return(0);
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync}
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#endif