Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

Parser.hh

Go to the documentation of this file.
00001 /*      
00002 *  Parser.hh    
00003 *       
00004 *  Created by Marc Parizeau on Sat Oct 26 2002. 
00005 *  Copyright © 2002 LVSN. All rights reserved.  
00006 *       
00007 */      
00008         
00009 #ifndef XML_Parser_hh_  
00010 #define XML_Parser_hh_  
00011         
00012 #include <xml/Streamer.hh>
00013 #include <xml/Tokenizer.hh>
00014 #include <map>  
00015         
00016 namespace XML { 
00017         
00018 class Parser    
00019 {       
00020 public: 
00021 
00022         class Node {    
00023         public: 
00024                 enum Type{      
00025                         eDecl,  
00026                         eSpecial,       
00027                         eTag,   
00028                         eString 
00029                 };      
00030         
00031                 Node(void) : mChild(0), mSibling(0) {}
00032                 ~Node(void);
00033         
00034                 Node* getFirstChild() const {return mChild;}    
00035                 Node* getNextSibling() const {return mSibling;} 
00036                 std::string getTagAttribute(const std::string& inName) const;   
00037                 const std::string& getTagName() const {return mValue;}  
00038                 Type getType() const {return mType;}    
00039                 std::string getValue() const {return mValue;}   
00040                 void serialize(Streamer& outStream, bool inIndent=true) const;  
00041         
00042         protected:      
00043                 Type mType;     
00044                 std::string mValue;     
00045                 std::map<std::string,std::string> mAttributes;  
00046                 Node* mChild;   
00047                 Node* mSibling; 
00048         
00049                 static Node* parse(Tokenizer& inTokenizer);     
00050                 void parseAttributeList(Tokenizer& inTokenizer, std::string& outToken); 
00051                 void parseStartTag(Tokenizer& inTokenizer, std::string& outToken);      
00052                 void throwError(Tokenizer& inTokenizer, const std::string& inMessage) const;    
00053         
00054         friend class Parser;
00055                 //friend class Chroma;
00056         
00057         private:
00058                 Node(const Node&);              
00059                 void operator=(const Node&);    
00060         };//Node
00061 
00062 public:
00063         Parser(void) : mRoot(0) {}
00064         ~Parser(void) {if(mRoot) delete mRoot;}
00065 
00066         Node* getRootNode() const {return mRoot;}
00067         
00068         void parse(const std::string& inFileName);      
00069         void parse(std::istream& inStream, const std::string& inName="");
00070 
00071 protected:      
00072         Node* mRoot;    
00073 
00074 
00075 private:        
00076         // Restrict (disable) copy constructor. 
00077         Parser(const Parser&);  
00078         void operator=(const Parser&);  
00079 }; //end class parser
00080         
00081 };// namespace XML      
00082         
00083 #endif // XML_Parser_hh_        
00084 
00085 

Generated on Sun Jan 16 11:05:56 2005 for RolLerCoaster by  doxygen 1.3.9.1