00001 //========================================================================== 00002 // SAXPARSER.H - part of 00003 // OMNeT++/OMNEST 00004 // Discrete System Simulation in C++ 00005 // 00006 //========================================================================== 00007 00008 /*--------------------------------------------------------------* 00009 Copyright (C) 2002-2008 Andras Varga 00010 Copyright (C) 2006-2008 OpenSim Ltd. 00011 00012 This file is distributed WITHOUT ANY WARRANTY. See the file 00013 `license' for details on this and other legal matters. 00014 *--------------------------------------------------------------*/ 00015 00016 00017 00018 #ifndef __SAXPARSER_H 00019 #define __SAXPARSER_H 00020 00021 #include <stdio.h> 00022 #include "nedxmldefs.h" 00023 00024 NAMESPACE_BEGIN 00025 00026 class SAXParser; 00027 00028 00039 class NEDXML_API SAXHandler 00040 { 00041 friend class SAXParser; 00042 protected: 00043 SAXParser *parser; 00044 00045 // internal: called from SAXParser::setHandler() 00046 virtual void setParser(SAXParser *p) {parser=p;} 00047 00048 public: 00052 SAXHandler() {parser=0;} 00053 00057 virtual ~SAXHandler() {} 00058 00062 virtual void startElement(const char *name, const char **atts) {} 00063 00067 virtual void endElement(const char *name) {} 00068 00072 virtual void characterData(const char *s, int len) {} 00073 00077 virtual void processingInstruction(const char *target, const char *data) {} 00078 00082 virtual void comment(const char *data) {} 00083 00087 virtual void startCdataSection() {} 00088 00092 virtual void endCdataSection() {} 00093 }; 00094 00095 00104 class NEDXML_API SAXParser 00105 { 00106 protected: 00107 char errortext[512]; 00108 SAXHandler *saxhandler; 00109 void *currentparser; 00110 00111 protected: 00112 // allows for a common implementation of parse() and parseContent() 00113 bool doParse(const char *filename, const char *content); 00114 00115 public: 00119 SAXParser(); 00120 00124 void setHandler(SAXHandler *sh); 00125 00132 bool parse(const char *filename); 00133 00140 bool parseContent(const char *content); 00141 00145 int getCurrentLineNumber(); 00146 00150 const char *getErrorMessage() {return errortext;} 00151 }; 00152 00153 NAMESPACE_END 00154 00155 00156 #endif 00157