15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * testSAX.c : a small tester program for parsing using the SAX API.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See Copyright for the status of this software.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * daniel@veillard.com
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "libxml.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_TIME_H
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/time.h>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_TIMEB_H
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/timeb.h>
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_TIME_H
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <time.h>
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SAX1_ENABLED
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h>
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdarg.h>
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_TYPES_H
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/types.h>
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_STAT_H
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/stat.h>
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_FCNTL_H
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <fcntl.h>
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_UNISTD_H
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <unistd.h>
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_STDLIB_H
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h>
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_STRING_H
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h>
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/globals.h>
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/xmlerror.h>
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/parser.h>
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/parserInternals.h> /* only for xmlNewInputFromFile() */
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/tree.h>
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/debugXML.h>
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/xmlmemory.h>
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int debug = 0;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int copy = 0;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int recovery = 0;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int push = 0;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int speed = 0;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int noent = 0;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int quiet = 0;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int nonull = 0;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int sax2 = 0;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int repeat = 0;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int callbacks = 0;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int timing = 0;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Timing routines.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Internal timing routines to remove the necessity to have unix-specific
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * function calls
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef HAVE_GETTIMEOFDAY
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_TIMEB_H
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_TIME_H
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_FTIME
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)my_gettimeofday(struct timeval *tvp, void *tzp)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	struct timeb timebuffer;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	ftime(&timebuffer);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if (tvp) {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		tvp->tv_sec = timebuffer.time;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		tvp->tv_usec = timebuffer.millitm * 1000L;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return (0);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HAVE_GETTIMEOFDAY 1
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define gettimeofday my_gettimeofday
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* HAVE_FTIME */
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* HAVE_SYS_TIME_H */
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* HAVE_SYS_TIMEB_H */
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* !HAVE_GETTIMEOFDAY */
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(HAVE_GETTIMEOFDAY)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static struct timeval begin, end;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * startTimer: call where you want to start timing
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)startTimer(void)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gettimeofday(&begin, NULL);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * endTimer: call where you want to stop timing and to print out a
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *           message about the timing performed; format is a printf
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *           type argument
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endTimer(const char *fmt, ...)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    long msec;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_list ap;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gettimeofday(&end, NULL);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    msec = end.tv_sec - begin.tv_sec;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    msec *= 1000;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    msec += (end.tv_usec - begin.tv_usec) / 1000;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef HAVE_STDARG_H
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error "endTimer required stdarg functions"
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_start(ap, fmt);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vfprintf(stderr, fmt, ap);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_end(ap);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stderr, " took %ld ms\n", msec);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(HAVE_TIME_H)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * No gettimeofday function, so we have to make do with calling clock.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This is obviously less accurate, but there's little we can do about
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * that.
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CLOCKS_PER_SEC
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CLOCKS_PER_SEC 100
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static clock_t begin, end;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)startTimer(void)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    begin = clock();
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endTimer(const char *fmt, ...)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    long msec;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_list ap;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    end = clock();
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    msec = ((end - begin) * 1000) / CLOCKS_PER_SEC;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef HAVE_STDARG_H
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error "endTimer required stdarg functions"
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_start(ap, fmt);
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vfprintf(stderr, fmt, ap);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_end(ap);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stderr, " took %ld ms\n", msec);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * We don't have a gettimeofday or time.h, so we just don't do timing
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)startTimer(void)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /*
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Do nothing
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endTimer(char *format, ...)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /*
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * We cannot do anything because we don't have a timing function
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_STDARG_H
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_start(ap, format);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vfprintf(stderr, format, ap);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_end(ap);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stderr, " was not timed\n", msec);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /* We don't have gettimeofday, time or stdarg.h, what crazy world is
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * this ?!
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * empty SAX block
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlSAXHandler emptySAXHandlerStruct = {
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* internalSubset */
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* isStandalone */
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* hasInternalSubset */
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* hasExternalSubset */
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* resolveEntity */
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* getEntity */
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* entityDecl */
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* notationDecl */
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* attributeDecl */
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* elementDecl */
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* unparsedEntityDecl */
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* setDocumentLocator */
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* startDocument */
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* endDocument */
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* startElement */
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* endElement */
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* reference */
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* characters */
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* ignorableWhitespace */
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* processingInstruction */
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* comment */
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* xmlParserWarning */
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* xmlParserError */
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* xmlParserError */
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* getParameterEntity */
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* cdataBlock; */
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* externalSubset; */
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    1,
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL,
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* startElementNs */
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL, /* endElementNs */
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL  /* xmlStructuredErrorFunc */
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern xmlSAXHandlerPtr debugSAXHandler;
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *									*
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *				Debug Handlers				*
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *									*
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * isStandaloneDebug:
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Is this document tagged standalone ?
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 1 if true
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)isStandaloneDebug(void *ctx ATTRIBUTE_UNUSED)
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return(0);
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.isStandalone()\n");
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return(0);
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * hasInternalSubsetDebug:
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Does this document has an internal subset
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 1 if true
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hasInternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return(0);
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.hasInternalSubset()\n");
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return(0);
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * hasExternalSubsetDebug:
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Does this document has an external subset
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 1 if true
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hasExternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return(0);
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.hasExternalSubset()\n");
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return(0);
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * internalSubsetDebug:
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Does this document has an internal subset
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)internalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	       const xmlChar *ExternalID, const xmlChar *SystemID)
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.internalSubset(%s,", name);
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (ExternalID == NULL)
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, " ,");
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, " %s,", ExternalID);
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (SystemID == NULL)
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, " )\n");
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, " %s)\n", SystemID);
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * externalSubsetDebug:
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Does this document has an external subset
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)externalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	       const xmlChar *ExternalID, const xmlChar *SystemID)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.externalSubset(%s,", name);
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (ExternalID == NULL)
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, " ,");
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, " %s,", ExternalID);
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (SystemID == NULL)
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, " )\n");
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, " %s)\n", SystemID);
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * resolveEntityDebug:
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @publicId: The public ID of the entity
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @systemId: The system ID of the entity
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Special entity resolver, better left to the parser, it has
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * more context than the application layer.
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The default behaviour is to NOT resolve the entities, in that case
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the ENTITY_REF nodes are built in the structure (and the parameter
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * values).
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlParserInputPtr
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)resolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xmlChar *systemId)
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return(NULL);
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.resolveEntity(");
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (publicId != NULL)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, "%s", (char *)publicId);
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, " ");
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (systemId != NULL)
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, ", %s)\n", (char *)systemId);
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, ", )\n");
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*********
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (systemId != NULL) {
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return(xmlNewInputFromFile(ctxt, (char *) systemId));
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *********/
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return(NULL);
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * getEntityDebug:
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The entity name
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Get an entity by name
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlEntityPtr
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)getEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return(NULL);
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.getEntity(%s)\n", name);
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return(NULL);
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * getParameterEntityDebug:
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The entity name
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Get a parameter entity by name
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns the xmlParserInputPtr
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlEntityPtr
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)getParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return(NULL);
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.getParameterEntity(%s)\n", name);
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return(NULL);
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * entityDeclDebug:
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name:  the entity name
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type:  the entity type
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @publicId: The public ID of the entity
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @systemId: The system ID of the entity
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @content: the entity value (without processing).
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * An entity definition has been parsed
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)entityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const xmlChar *nullstr = BAD_CAST "(null)";
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /* not all libraries handle printing null pointers nicely */
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (publicId == NULL)
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        publicId = nullstr;
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (systemId == NULL)
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        systemId = nullstr;
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (content == NULL)
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        content = (xmlChar *)nullstr;
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.entityDecl(%s, %d, %s, %s, %s)\n",
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            name, type, publicId, systemId, content);
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * attributeDeclDebug:
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name:  the attribute name
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type:  the attribute type
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * An attribute definition has been parsed
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)attributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar * elem,
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const xmlChar * name, int type, int def,
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const xmlChar * defaultValue, xmlEnumerationPtr tree)
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return;
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (defaultValue == NULL)
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, NULL, ...)\n",
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                elem, name, type, def);
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, %s, ...)\n",
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                elem, name, type, def, defaultValue);
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    xmlFreeEnumeration(tree);
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * elementDeclDebug:
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name:  the element name
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type:  the element type
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @content: the element value (without processing).
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * An element definition has been parsed
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)elementDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    xmlElementContentPtr content ATTRIBUTE_UNUSED)
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.elementDecl(%s, %d, ...)\n",
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            name, type);
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * notationDeclDebug:
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The name of the notation
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @publicId: The public ID of the entity
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @systemId: The system ID of the entity
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * What to do when a notation declaration has been parsed.
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)notationDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	     const xmlChar *publicId, const xmlChar *systemId)
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.notationDecl(%s, %s, %s)\n",
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            (char *) name, (char *) publicId, (char *) systemId);
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * unparsedEntityDeclDebug:
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The name of the entity
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @publicId: The public ID of the entity
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @systemId: The system ID of the entity
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @notationName: the name of the notation
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * What to do when an unparsed entity declaration is parsed
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)unparsedEntityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		   const xmlChar *publicId, const xmlChar *systemId,
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		   const xmlChar *notationName)
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const xmlChar *nullstr = BAD_CAST "(null)";
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (publicId == NULL)
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        publicId = nullstr;
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (systemId == NULL)
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        systemId = nullstr;
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (notationName == NULL)
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        notationName = nullstr;
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n",
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            (char *) name, (char *) publicId, (char *) systemId,
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    (char *) notationName);
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * setDocumentLocatorDebug:
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @loc: A SAX Locator
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Receive the document locator at startup, actually xmlDefaultSAXLocator
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Everything is available on the context, so this is useless in our case.
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)setDocumentLocatorDebug(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.setDocumentLocator()\n");
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * startDocumentDebug:
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when the document start being processed.
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)startDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.startDocument()\n");
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * endDocumentDebug:
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when the document end has been detected.
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.endDocument()\n");
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * startElementDebug:
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name:  The element name
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when an opening tag has been processed.
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)startElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts)
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int i;
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.startElement(%s", (char *) name);
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (atts != NULL) {
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        for (i = 0;(atts[i] != NULL);i++) {
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    fprintf(stdout, ", %s='", atts[i++]);
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if (atts[i] != NULL)
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	        fprintf(stdout, "%s'", atts[i]);
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, ")\n");
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * endElementDebug:
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name:  The element name
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when the end of an element has been detected.
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.endElement(%s)\n", (char *) name);
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * charactersDebug:
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ch:  a xmlChar string
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @len: the number of xmlChar
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * receiving some chars from the parser.
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Question: how much at a time ???
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)charactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    char output[40];
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int i;
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (i = 0;(i<len) && (i < 30);i++)
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	output[i] = ch[i];
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    output[i] = 0;
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.characters(%s, %d)\n", output, len);
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * referenceDebug:
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name:  The entity name
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when an entity reference is detected.
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)referenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.reference(%s)\n", name);
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ignorableWhitespaceDebug:
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ch:  a xmlChar string
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @start: the first char in the string
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @len: the number of xmlChar
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * receiving some ignorable whitespaces from the parser.
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Question: how much at a time ???
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ignorableWhitespaceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    char output[40];
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int i;
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (i = 0;(i<len) && (i < 30);i++)
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	output[i] = ch[i];
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    output[i] = 0;
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.ignorableWhitespace(%s, %d)\n", output, len);
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * processingInstructionDebug:
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @target:  the target name
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @data: the PI data's
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @len: the number of xmlChar
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * A processing instruction has been parsed.
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)processingInstructionDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *target,
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const xmlChar *data)
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (data != NULL)
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, "SAX.processingInstruction(%s, %s)\n",
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		(char *) target, (char *) data);
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, "SAX.processingInstruction(%s, NULL)\n",
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		(char *) target);
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * cdataBlockDebug:
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: the user data (XML parser context)
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @value:  The pcdata content
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @len:  the block length
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when a pcdata block has been parsed
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cdataBlockDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value, int len)
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.pcdata(%.20s, %d)\n",
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    (char *) value, len);
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * commentDebug:
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @value:  the comment content
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * A comment has been parsed.
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.comment(%s)\n", value);
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * warningDebug:
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @msg:  the message to display/transmit
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @...:  extra parameters for the message display
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Display and format a warning messages, gives file, line, position and
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * extra parameters.
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_list args;
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_start(args, msg);
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.warning: ");
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vfprintf(stdout, msg, args);
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_end(args);
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * errorDebug:
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @msg:  the message to display/transmit
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @...:  extra parameters for the message display
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Display and format a error messages, gives file, line, position and
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * extra parameters.
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_list args;
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_start(args, msg);
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.error: ");
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vfprintf(stdout, msg, args);
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_end(args);
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * fatalErrorDebug:
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @msg:  the message to display/transmit
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @...:  extra parameters for the message display
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Display and format a fatalError messages, gives file, line, position and
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * extra parameters.
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_list args;
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_start(args, msg);
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.fatalError: ");
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vfprintf(stdout, msg, args);
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    va_end(args);
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlSAXHandler debugSAXHandlerStruct = {
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    internalSubsetDebug,
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    isStandaloneDebug,
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    hasInternalSubsetDebug,
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    hasExternalSubsetDebug,
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    resolveEntityDebug,
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getEntityDebug,
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    entityDeclDebug,
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    notationDeclDebug,
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    attributeDeclDebug,
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    elementDeclDebug,
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unparsedEntityDeclDebug,
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setDocumentLocatorDebug,
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    startDocumentDebug,
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    endDocumentDebug,
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    startElementDebug,
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    endElementDebug,
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    referenceDebug,
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    charactersDebug,
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ignorableWhitespaceDebug,
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    processingInstructionDebug,
8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    commentDebug,
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    warningDebug,
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    errorDebug,
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fatalErrorDebug,
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getParameterEntityDebug,
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cdataBlockDebug,
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    externalSubsetDebug,
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    1,
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL,
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL,
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL,
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * SAX2 specific callbacks
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * startElementNsDebug:
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name:  The element name
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when an opening tag has been processed.
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)startElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    const xmlChar *localname,
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    const xmlChar *prefix,
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    const xmlChar *URI,
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    int nb_namespaces,
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    const xmlChar **namespaces,
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    int nb_attributes,
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    int nb_defaulted,
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    const xmlChar **attributes)
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int i;
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.startElementNs(%s", (char *) localname);
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (prefix == NULL)
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, ", NULL");
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, ", %s", (char *) prefix);
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (URI == NULL)
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, ", NULL");
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, ", '%s'", (char *) URI);
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, ", %d", nb_namespaces);
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (namespaces != NULL) {
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        for (i = 0;i < nb_namespaces * 2;i++) {
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    fprintf(stdout, ", xmlns");
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if (namespaces[i] != NULL)
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	        fprintf(stdout, ":%s", namespaces[i]);
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    i++;
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    fprintf(stdout, "='%s'", namespaces[i]);
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, ", %d, %d", nb_attributes, nb_defaulted);
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (attributes != NULL) {
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        for (i = 0;i < nb_attributes * 5;i += 5) {
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if (attributes[i + 1] != NULL)
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		fprintf(stdout, ", %s:%s='", attributes[i + 1], attributes[i]);
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    else
9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		fprintf(stdout, ", %s='", attributes[i]);
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    fprintf(stdout, "%.4s...', %d", attributes[i + 3],
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    (int)(attributes[i + 4] - attributes[i + 3]));
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, ")\n");
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * endElementDebug:
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt:  An XML parser context
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name:  The element name
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when the end of an element has been detected.
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  const xmlChar *localname,
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  const xmlChar *prefix,
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  const xmlChar *URI)
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callbacks++;
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (quiet)
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return;
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stdout, "SAX.endElementNs(%s", (char *) localname);
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (prefix == NULL)
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, ", NULL");
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, ", %s", (char *) prefix);
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (URI == NULL)
9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, ", NULL)\n");
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fprintf(stdout, ", '%s')\n", (char *) URI);
9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlSAXHandler debugSAX2HandlerStruct = {
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    internalSubsetDebug,
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    isStandaloneDebug,
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    hasInternalSubsetDebug,
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    hasExternalSubsetDebug,
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    resolveEntityDebug,
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getEntityDebug,
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    entityDeclDebug,
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    notationDeclDebug,
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    attributeDeclDebug,
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    elementDeclDebug,
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unparsedEntityDeclDebug,
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setDocumentLocatorDebug,
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    startDocumentDebug,
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    endDocumentDebug,
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL,
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL,
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    referenceDebug,
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    charactersDebug,
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ignorableWhitespaceDebug,
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    processingInstructionDebug,
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    commentDebug,
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    warningDebug,
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    errorDebug,
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fatalErrorDebug,
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getParameterEntityDebug,
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cdataBlockDebug,
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    externalSubsetDebug,
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    XML_SAX2_MAGIC,
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL,
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    startElementNsDebug,
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    endElementNsDebug,
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *									*
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *				Debug					*
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *									*
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)parseAndPrintFile(char *filename) {
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int res;
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PUSH_ENABLED
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (push) {
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	FILE *f;
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if ((!quiet) && (!nonull)) {
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    /*
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	     * Empty callbacks for checking
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	     */
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    f = fopen(filename, "rb");
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    f = fopen(filename, "r");
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if (f != NULL) {
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		int ret;
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		char chars[10];
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		xmlParserCtxtPtr ctxt;
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		ret = fread(chars, 1, 4, f);
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		if (ret > 0) {
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    ctxt = xmlCreatePushParserCtxt(emptySAXHandler, NULL,
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)				chars, ret, filename);
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    while ((ret = fread(chars, 1, 3, f)) > 0) {
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			xmlParseChunk(ctxt, chars, ret, 0);
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    }
10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    xmlParseChunk(ctxt, chars, 0, 1);
10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    xmlFreeParserCtxt(ctxt);
10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		}
10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		fclose(f);
10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    } else {
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		xmlGenericError(xmlGenericErrorContext,
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			"Cannot read file %s\n", filename);
10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    }
10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/*
10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * Debug callback
10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	f = fopen(filename, "rb");
10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	f = fopen(filename, "r");
10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if (f != NULL) {
10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    int ret;
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    char chars[10];
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    xmlParserCtxtPtr ctxt;
10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    ret = fread(chars, 1, 4, f);
10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if (ret > 0) {
10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	        if (sax2)
10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    ctxt = xmlCreatePushParserCtxt(debugSAX2Handler, NULL,
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)				chars, ret, filename);
10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		else
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    ctxt = xmlCreatePushParserCtxt(debugSAXHandler, NULL,
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)				chars, ret, filename);
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		while ((ret = fread(chars, 1, 3, f)) > 0) {
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    xmlParseChunk(ctxt, chars, ret, 0);
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		}
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		ret = xmlParseChunk(ctxt, chars, 0, 1);
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		xmlFreeParserCtxt(ctxt);
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		if (ret != 0) {
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    fprintf(stdout,
10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		            "xmlSAXUserParseFile returned error %d\n", ret);
10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		}
10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    }
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    fclose(f);
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_PUSH_ENABLED */
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if (!speed) {
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    /*
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	     * Empty callbacks for checking
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	     */
10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if ((!quiet) && (!nonull)) {
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		res = xmlSAXUserParseFile(emptySAXHandler, NULL, filename);
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		if (res != 0) {
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", res);
10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		}
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    }
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    /*
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	     * Debug callback
10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	     */
10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    callbacks = 0;
10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if (repeat) {
10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	        int i;
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		for (i = 0;i < 99;i++) {
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    if (sax2)
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			res = xmlSAXUserParseFile(debugSAX2Handler, NULL,
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			                          filename);
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		    else
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			res = xmlSAXUserParseFile(debugSAXHandler, NULL,
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			                          filename);
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		}
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    }
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if (sax2)
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	        res = xmlSAXUserParseFile(debugSAX2Handler, NULL, filename);
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    else
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		res = xmlSAXUserParseFile(debugSAXHandler, NULL, filename);
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if (res != 0) {
11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", res);
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    }
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if (quiet)
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		fprintf(stdout, "%d callbacks generated\n", callbacks);
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	} else {
11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    /*
11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	     * test 100x the SAX parse
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	     */
11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    int i;
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    for (i = 0; i<100;i++)
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		res = xmlSAXUserParseFile(emptySAXHandler, NULL, filename);
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if (res != 0) {
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", res);
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    }
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PUSH_ENABLED
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main(int argc, char **argv) {
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int i;
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int files = 0;
11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LIBXML_TEST_VERSION	/* be safe, plus calls xmlInitParser */
11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (i = 1; i < argc ; i++) {
11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    debug++;
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy")))
11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    copy++;
11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else if ((!strcmp(argv[i], "-recover")) ||
11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	         (!strcmp(argv[i], "--recover")))
11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    recovery++;
11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else if ((!strcmp(argv[i], "-push")) ||
11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	         (!strcmp(argv[i], "--push")))
11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PUSH_ENABLED
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    push++;
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    fprintf(stderr,"'push' not enabled in library - ignoring\n");
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_PUSH_ENABLED */
11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else if ((!strcmp(argv[i], "-speed")) ||
11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	         (!strcmp(argv[i], "--speed")))
11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    speed++;
11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else if ((!strcmp(argv[i], "-timing")) ||
11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	         (!strcmp(argv[i], "--timing"))) {
11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    nonull++;
11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    timing++;
11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    quiet++;
11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	} else if ((!strcmp(argv[i], "-repeat")) ||
11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	         (!strcmp(argv[i], "--repeat"))) {
11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    repeat++;
11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    quiet++;
11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	} else if ((!strcmp(argv[i], "-noent")) ||
11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	         (!strcmp(argv[i], "--noent")))
11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    noent++;
11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else if ((!strcmp(argv[i], "-quiet")) ||
11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	         (!strcmp(argv[i], "--quiet")))
11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    quiet++;
11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else if ((!strcmp(argv[i], "-sax2")) ||
11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	         (!strcmp(argv[i], "--sax2")))
11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    sax2++;
11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else if ((!strcmp(argv[i], "-nonull")) ||
11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	         (!strcmp(argv[i], "--nonull")))
11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    nonull++;
11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (noent != 0) xmlSubstituteEntitiesDefault(1);
11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (i = 1; i < argc ; i++) {
11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if (argv[i][0] != '-') {
11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if (timing) {
11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		startTimer();
11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    }
11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    parseAndPrintFile(argv[i]);
11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    if (timing) {
11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		endTimer("Parsing");
11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    }
11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    files ++;
11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    xmlCleanupParser();
11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    xmlMemoryDump();
11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return(0);
11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    printf("%s : SAX1 parsing support not compiled in\n", argv[0]);
11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return(0);
11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_SAX1_ENABLED */
1199