diff --git a/modules/xml/glue/makefile.win b/modules/xml/glue/makefile.win index 80037c5971d3..d4bef85fb508 100644 --- a/modules/xml/glue/makefile.win +++ b/modules/xml/glue/makefile.win @@ -20,9 +20,9 @@ DEPTH = ..\..\.. MODULE = xmlglue -CSRCS= xmlglue.c xmlss.c xmldom.c +CSRCS= xmlglue.c xmlss.c xmldom.c test.c EXPORTS = xmlglue.h -C_OBJS=.\$(OBJDIR)\xmlglue.obj .\$(OBJDIR)\xmlss.obj .\$(OBJDIR)\xmldom.obj +C_OBJS=.\$(OBJDIR)\xmlglue.obj .\$(OBJDIR)\xmlss.obj .\$(OBJDIR)\xmldom.obj LINCS=-I$(XPDIST)\public\nspr -I$(XPDIST)\public\expat -I$(XPDIST)\public\js diff --git a/modules/xml/glue/test.c b/modules/xml/glue/test.c new file mode 100644 index 000000000000..d88ea48460c1 --- /dev/null +++ b/modules/xml/glue/test.c @@ -0,0 +1,71 @@ + + +/* this is to test the expat parser and dom builder in standalone mode + (i.e., without the rest of communicator). + We read in an XML file, build the dom and write out the parse + structure */ + +#include +#include "xmlglue.h" + +#define testIn "foo.xml" +#define testOut "foo.out" + +void outputXMLParseTree (FILE *out, XMLElement el) ; + +void main () { + FILE *stream = fopen(testIn, "r"); + FILE *out = fopen(testOut, "w"); + char *string = getMem(512); + XMLFile xmlf = getMem(sizeof(XMLFileStruct)); + xmlf->parser = XML_ParserCreate(NULL) ; + XML_SetElementHandler(xmlf->parser, + (void (*)(void*, const char*, const char**))XMLDOM_StartHandler, + (void (*)(void*, const char*))XMLDOM_EndHandler); + XML_SetCharacterDataHandler(xmlf->parser, + (void (*)(void*, const char*, int))XMLDOM_CharHandler); + XML_SetProcessingInstructionHandler(xmlf->parser, + (void (*)(void*, const char*, const char*))XMLDOM_PIHandler); + XML_SetUserData(xmlf->parser, xmlf); + xmlf->status = 1; + while (fgets(string, 512, stream)) { + if (xmlf->status == 1) xmlf->status = XML_Parse(xmlf->parser, string, 512, 0); + memset(string, '\0', 512); + } + if (xmlf->status != 1) { + const char* error = XML_ErrorString(XML_GetErrorCode(xmlf->parser)); + char* buff = getMem(150); + int n = XML_GetErrorLineNumber(xmlf->parser); + fprintf(out, "Bad XML at line %i :

ERROR = ", n); + fprintf(out, error); + } else { + outputXMLParseTree(out, xmlf->top); + } + fclose(out); + fclose(stream); +} + +void outputXMLParseTree (FILE *out, XMLElement el) { + XMLElement child = el->child; + if (strcmp(el->tag, "xml:content") == 0) { + fprintf(out, "\n\nContent : %s\n", el->content); + } else { + fprintf(out, "\n\nElement name = %s\n", el->tag); + if (el->attributes) { + int32 n = 0; + fprintf(out, "Attributes : \n"); + while (*(el->attributes + n)) { + char* attname = *(el->attributes + n); + char* attval = *(el->attributes + n + 1); + fprintf(out, "%s = %s\n", attname, attval); + n = n + 2; + } + } + } + while (el->child) { + outputXMLParseTree(out, child); + child = child->next; + } +} + + diff --git a/modules/xml/glue/xmldom.c b/modules/xml/glue/xmldom.c index 644efccf5de9..bc36fe492805 100644 --- a/modules/xml/glue/xmldom.c +++ b/modules/xml/glue/xmldom.c @@ -69,7 +69,7 @@ copyCharStarList (char** list) } - +#ifdef MOZILLA_CLIENT char * makeAbsoluteURL (char* p1, char* p2) { @@ -78,6 +78,8 @@ makeAbsoluteURL (char* p1, char* p2) } +#endif + void addStyleSheet(XMLFile f, StyleSheet ss) { @@ -115,6 +117,7 @@ void XMLDOM_StartHandler (XMLFile f, const char* elementName, const char** attli xmle->attributes = copyCharStarList((char**)attlist); if (f->current) addChild(f->current, xmle); f->current = xmle; +#ifdef MOZILLA_CLIENT if (xmlgetAttributeValue(xmle->attributes, XLL) != NULL) { char* linkTag = xmlgetAttributeValue(xmle->attributes, XLL); char* hrefVal = xmlgetAttributeValue(xmle->attributes, href); @@ -137,9 +140,10 @@ void XMLDOM_StartHandler (XMLFile f, const char* elementName, const char** attli #ifdef DOM ET_ReflectObject(f->mwcontext, f->transclusions[f->numTransclusions - 1], NULL, LO_DOCUMENT_LAYER_ID, f->numTransclusions - 1, LM_TRANSCLUSIONS); -#endif +#endif } } +#endif } @@ -165,7 +169,7 @@ setAttribute (char** attlist, char* elName, char* elValue) return nattlist; } - +#ifdef MOZILLA_CLIENT void XMLSetTransclusionProperty( XMLFile f, uint index, char* propName, char* propValue ) { XMLElement el = f->transclusions[index]; if (!el) return; @@ -219,7 +223,10 @@ void * /* XMLElement */ XMLGetTransclusionByIndex( MWContext *context, uint inde return f->transclusions[index]; } +#endif + void XMLDOM_PIHandler (XMLFile f, const char *elementName, const char *data) { +#ifdef MOZILLA_CLIENT if (startsWith("xml:stylesheet", elementName)) { char* url ; char* attlist[2*MAX_ATTRIBUTES+1]; @@ -245,7 +252,7 @@ void XMLDOM_PIHandler (XMLFile f, const char *elementName, const char *data) { freeMem(xdata); return; } - +#endif } diff --git a/modules/xml/glue/xmlglue.c b/modules/xml/glue/xmlglue.c index be2b59f8deb5..4e34bfefac9e 100644 --- a/modules/xml/glue/xmlglue.c +++ b/modules/xml/glue/xmlglue.c @@ -27,6 +27,8 @@ If you have questions, send them to guha@netscape.com */ +#ifdef MOZILLA_CLIENT + #include "xmlglue.h" #include "xmlparse.h" #include "xmlss.h" @@ -54,7 +56,7 @@ int xml_parse_abort (NET_StreamClass *stream) { StrAllocCopy(nurls->content_type, TEXT_HTML); newstream = NET_StreamBuilder(1, nurls, (MWContext*)obj->mwcontext); sprintf(buff, "Bad XML at line %i :

ERROR = ", n); - (*(newstream->put_block))(newstream, buff, strlen(buff)); + (*(newstream->put_block))(newstream, buff, strlen(buff)); (*(newstream->put_block))(newstream, error, strlen(error)); newstream->complete(newstream); freeMem(buff); @@ -140,9 +142,6 @@ outputToStream (XMLFile f, char* s) } return; } -#ifdef DEBUG -/* FE_Trace(s); */ -#endif if (f->outputBuffer == NULL) f->outputBuffer = getMem(OUTPUT_BUFFER_SIZE+1); if ((strlen(s) > OUTPUT_BUFFER_SIZE)) { char* buff = copyString(s); @@ -405,3 +404,5 @@ readHTML (char* url, XMLHTMLInclusion ss) urls->fe_data = ss; NET_GetURL(urls, FO_CACHE_AND_XMLHTML, ss->xml->mwcontext, xmlhtml_GetUrlExitFunc); } + +#endif diff --git a/modules/xml/glue/xmlglue.h b/modules/xml/glue/xmlglue.h index 092a5baf68ff..77b55ef24d3d 100644 --- a/modules/xml/glue/xmlglue.h +++ b/modules/xml/glue/xmlglue.h @@ -26,10 +26,15 @@ #include "xmlparse.h" +#ifdef MOZILLA_CLIENT #include "jscompat.h" #include "lo_ele.h" #include "libevent.h" #include "libmocha.h" +#include "net.h" +#include "xp.h" +#include "xp_str.h" +#endif #ifdef XP_UNIX #include @@ -49,9 +54,6 @@ #include "nspr.h" #include "plhash.h" #include "ntypes.h" -#include "net.h" -#include "xp.h" -#include "xp_str.h" #include "utils.h" #include "xmlparse.h" @@ -88,7 +90,9 @@ typedef struct _XMLFileStruct { void* stream; int8 numOpenStreams; void* urls; +#ifdef MOZILLA_CLIENT MWContext* mwcontext; +#endif char* address; char* outputBuffer; XML_Parser parser; @@ -125,7 +129,9 @@ typedef struct _XMLElementStruct { char* tag; char** attributes; char* content; +#ifdef MOZILLA_CLIENT JSObject *mocha_object; +#endif struct _XMLElementStruct* parent; struct _XMLElementStruct* child; struct _XMLElementStruct* next;