Salome HOME
merge from branch DEV tag mergeto_trunk_04apr08
[modules/yacs.git] / src / yacsloader / parserBase.hxx
1 #ifndef _PARSERBASE_HXX_
2 #define _PARSERBASE_HXX_
3
4 #include <expat.h>
5 #include <stack>
6 #include <map>
7 #include <string>
8 #include <iostream>
9
10 namespace YACS
11 {
12
13 struct parser
14 {
15   static parser main_parser;
16
17   parser():_level(0),_defaultParsersMap(0)
18   {
19     _counts=new std::map<std::string,int>;
20   }
21   virtual ~parser();
22
23   virtual void SetUserDataAndPush(parser* pp);
24   virtual void onStart(const XML_Char *el, const XML_Char** attr);
25   static void XMLCALL start(void *data, const XML_Char* el, const XML_Char** attr);
26
27   virtual void onEnd(const XML_Char *el,parser* child);
28     
29   static void XMLCALL end(void *data, const char *el);
30     
31   virtual void charData(const XML_Char *s, int len);
32   
33   static void XMLCALL charac(void *data, const XML_Char *s, int len);
34     
35   virtual void endParser();
36     
37   virtual void init();
38     
39   virtual void incrCount(const XML_Char *el);
40     
41   virtual void checkOrder(std::string& el);
42     
43   virtual void maxcount(std::string name, int max, std::string& el);
44     
45   virtual void mincount(std::string name,int min );
46     
47   virtual void maxchoice(std::string *names, int max, std::string& el);
48     
49   virtual void minchoice(std::string *names, int min);
50     
51   virtual void pre(){_content="";};
52   virtual void required(const std::string& name, const XML_Char** attr);
53     
54   virtual void buildAttr(const XML_Char** attr);
55     
56   std::stack<parser*>& getStack();
57
58   template<class T>
59   T post() { }
60
61   void logError(const std::string& reason);
62
63   std::string _file;
64   std::string _content;
65   std::map<std::string,int> *_counts;
66   std::map<std::string,int> _orders;
67   int _orderState;
68   int _level;
69   std::stack<std::map<std::string,int>*> _stackCount;
70   std::stack<int> _stackOrder;
71   // OCC: san -- Allow external parsers for handling of unknown elements
72   // and attributes. This capability is used by YACS GUI to read
73   // graph presentation data
74   std::map<std::string,parser*> *_defaultParsersMap;
75 };
76
77 }
78 #endif