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