1999-07-05 20:50:46 +04:00
/*
* testHTML . c : a small tester program for HTML input .
*
* See Copyright for the status of this software .
*
* Daniel . Veillard @ w3 . org
*/
# ifdef WIN32
# define HAVE_FCNTL_H
# include <io.h>
# else
1999-09-22 13:46:25 +04:00
# include "config.h"
1999-07-05 20:50:46 +04:00
# endif
1999-09-22 13:46:25 +04:00
# include <stdio.h>
# include <string.h>
# ifdef HAVE_SYS_TYPES_H
1999-07-05 20:50:46 +04:00
# include <sys/types.h>
1999-09-22 13:46:25 +04:00
# endif
1999-07-05 20:50:46 +04:00
# ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
# endif
# ifdef HAVE_FCNTL_H
# include <fcntl.h>
# endif
# ifdef HAVE_UNISTD_H
# include <unistd.h>
# endif
1999-09-22 13:46:25 +04:00
# ifdef HAVE_STDLIB_H
1999-07-05 20:50:46 +04:00
# include <stdlib.h>
1999-09-22 13:46:25 +04:00
# endif
1999-07-05 20:50:46 +04:00
# include "HTMLparser.h"
1999-07-07 11:32:15 +04:00
# include "HTMLtree.h"
1999-07-05 20:50:46 +04:00
# include "debugXML.h"
static int debug = 0 ;
static int copy = 0 ;
/*
* Note : this is perfectly clean HTML , i . e . not a useful test .
static CHAR buffer [ ] =
" <!DOCTYPE HTML PUBLIC \" -//W3C//DTD HTML 4.0 Transitional//EN \" \n \
\ " http://www.w3.org/TR/REC-html40/loose.dtd \" > \n \
< html > \ n \
< head > \ n \
< title > This service is temporary down < / title > \ n \
< / head > \ n \
\ n \
< body bgcolor = \ " #FFFFFF \" > \n \
< h1 align = \ " center \" >Sorry, this service is temporary down</h1> \n \
We are doing our best to get it back on - line , \ n \
\ n \
< p > The W3C system administrators < / p > \ n \
< / body > \ n \
< / html > \ n \
" ;
1999-08-30 01:02:19 +04:00
*/
1999-07-05 20:50:46 +04:00
/************************************************************************
* *
* Debug *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void parseAndPrintFile ( char * filename ) {
htmlDocPtr doc , tmp ;
/*
* build an HTML tree from a string ;
*/
doc = htmlParseFile ( filename , NULL ) ;
/*
* test intermediate copy if needed .
*/
if ( copy ) {
tmp = doc ;
doc = xmlCopyDoc ( doc , 1 ) ;
xmlFreeDoc ( tmp ) ;
}
/*
* print it .
*/
if ( ! debug )
1999-07-07 11:32:15 +04:00
htmlDocDump ( stdout , doc ) ;
1999-07-05 20:50:46 +04:00
else
xmlDebugDumpDocument ( stdout , doc ) ;
/*
* free it .
*/
xmlFreeDoc ( doc ) ;
}
void parseAndPrintBuffer ( CHAR * buf ) {
htmlDocPtr doc , tmp ;
/*
* build an HTML tree from a string ;
*/
doc = htmlParseDoc ( buf , NULL ) ;
/*
* test intermediate copy if needed .
*/
if ( copy ) {
tmp = doc ;
doc = xmlCopyDoc ( doc , 1 ) ;
xmlFreeDoc ( tmp ) ;
}
/*
* print it .
*/
if ( ! debug )
1999-07-07 11:32:15 +04:00
htmlDocDump ( stdout , doc ) ;
1999-07-05 20:50:46 +04:00
else
xmlDebugDumpDocument ( stdout , doc ) ;
/*
* free it .
*/
xmlFreeDoc ( doc ) ;
}
int main ( int argc , char * * argv ) {
int i ;
int files = 0 ;
for ( i = 1 ; i < argc ; i + + ) {
if ( ( ! strcmp ( argv [ i ] , " -debug " ) ) | | ( ! strcmp ( argv [ i ] , " --debug " ) ) )
debug + + ;
else if ( ( ! strcmp ( argv [ i ] , " -copy " ) ) | | ( ! strcmp ( argv [ i ] , " --copy " ) ) )
copy + + ;
}
for ( i = 1 ; i < argc ; i + + ) {
if ( argv [ i ] [ 0 ] ! = ' - ' ) {
parseAndPrintFile ( argv [ i ] ) ;
files + + ;
}
}
if ( files = = 0 ) {
printf ( " Usage : %s [--debug] [--copy] HTMLfiles ... \n " ,
argv [ 0 ] ) ;
printf ( " \t Parse the HTML files and output the result of the parsing \n " ) ;
printf ( " \t --debug : dump a debug tree of the in-memory document \n " ) ;
printf ( " \t --copy : used to test the internal copy implementation \n " ) ;
}
return ( 0 ) ;
}