00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00040 #ifndef YMLSAXPARSER_H
00041 #define YMLSAXPARSER_H
00042
00043 #include "interpreter.h"
00044 #include "parsecall.h"
00045 #include <list>
00046
00047 #include <xercesc/util/XercesDefs.hpp>
00048 #include <xercesc/sax2/DefaultHandler.hpp>
00049
00050 #include <BasicUtils/BasicSmartPointer.h>
00051
00052 class YMLSAXParser : public XERCES_CPP_NAMESPACE::DefaultHandler {
00053 public:
00054
00056 Interpreter *interpreter;
00057
00059 BasicSmartPointer<XMLCh, SP_ARRAY> text;
00060
00062 int setDepth;
00063
00064 typedef std::list<ParseCall *> parseCalls_t;
00066 parseCalls_t parseCalls;
00067
00068
00069 public:
00070 YMLSAXParser();
00071 virtual ~YMLSAXParser();
00072
00080 void setInterpreter(Interpreter *interpreter)
00081 {this->interpreter = interpreter;}
00082
00083
00084 virtual void startNetwork(const char *name, const char *className) {}
00085 virtual void endNetwork() {}
00086 virtual void startNode(const char *name, const char *className) {}
00087 virtual void endNode() {}
00088 virtual void startLink(const char *object1, const char *port1,
00089 const char *object2, const char *port2) {}
00090 virtual void endLink() {}
00091 virtual void startPort(const char *name, const char *dir) {}
00092 virtual void endPort() {}
00093 virtual void startProperty(const char *name, const char *value) {}
00094 virtual void endProperty() {}
00095 virtual void doc(const char *data) {}
00096 virtual void parseCall(call_t type, int argc, const char *const *args);
00097
00098
00099 void executeSet(parseCalls_t::iterator start);
00100 void startSet(const char *loop, const char *init, const char *cond);
00101 void endSet();
00102 void script(const char *data);
00103 const char *lookup(const char *);
00104 void lookupArgs(int argc, const char * const *args, const char **pargs);
00105 void localParseCall(call_t type, int argc, const char * const *args);
00106 void dispatch(call_t type, int argc, char **args);
00107 void clearText() {text = 0;}
00108
00109
00110 void startDocument();
00111 void endDocument();
00112 void startElement(const XMLCh *const uri, const XMLCh *const localname,
00113 const XMLCh *const qname,
00114 const XERCES_CPP_NAMESPACE::Attributes &attributes);
00115 void endElement(const XMLCh *const uri, const XMLCh *const localname,
00116 const XMLCh *const qname);
00117 void characters(const XMLCh *const chars, const unsigned int length);
00118
00119 protected:
00120 void clearParseCalls();
00121 };
00122 #endif
00123