メインページ   名前空間一覧   クラス階層   構成   ファイル一覧   名前空間メンバ   構成メンバ   ファイルメンバ  

SAX_Parser.h

解説を見る。
00001 // -*- mode: c++ -*-
00002 
00003 #ifndef MiX_SAXPARSER_H_
00004 #define MiX_SAXPARSER_H_
00005 
00006 #include <map>
00007 #include <stack>
00008 
00009 #include "classes.h"
00010 #include "DefaultXMLTraits.h"
00011 #include "misc.h"
00012 #include "Tokenizer.h"
00013 #include "SAX_EventHandler.h"
00014 #include "XMLString.h"
00015 #include "AttrMap.h"
00016 
00017 namespace MiX{
00018   template <class charT,class char_traits,class xml_traits>
00019   class SAX_Parser{
00020   public:
00021     MiX_Template_Typedef(charT,char_traits,xml_traits);
00022     typedef SAX_Parser<charT,char_traits,xml_traits> this_type;
00023     typedef XMLToken<charT,char_traits,xml_traits> token_type;
00024     typedef SAX_EventHandler<charT,char_traits,xml_traits> handler_type;
00025     typedef Tokenizer<charT,char_traits,xml_traits> tokenizer_type;
00026   private:
00027     enum State{
00028       STATE_Text,
00029       STATE_Tag,
00030       STATE_Reference,
00031       STATE_Comment,
00032       STATE_Complete,
00033       STATE_Declaration,
00034       STATE_XMLDeclaration,
00035       STATE_CData,
00036       STATE_Escape,
00037       STATE_Exception
00038     };
00039     State state_;
00040     tokenizer_type tokenizer_;
00041     handler_type* handler_;
00042     std::stack<string_type> validator_;
00043 
00044     bool ignore_space_;
00045     bool decrared_;
00046 
00047     void skipSpaceTokens();
00048 
00049     bool parsingLoop();
00050 
00051     State parseText();
00052     State parseTag();
00053     State parseComment();
00054     State parseDeclaration();
00055     State parseXMLDeclaration();
00056     State parseCData();
00057 
00058     attrmap_type parseAttributes();
00059     string_type parseReference();
00060 
00061     void trimRight(string_type& str);
00062   public:
00064     SAX_Parser(){ handler_ = NULL; ignore_space_ = false; }
00071     void setEventHandler(handler_type* handler){
00072       handler_ = handler;
00073     };
00080     void setIgnoreSpace(bool flag) { ignore_space_ = flag; };
00087     bool parse(const string_type& text);
00088 #ifdef MiX_HAS_BASIC_STREAM
00089 
00095     bool parse(std::basic_istream<charT, char_traits>& is);
00096 #endif
00097   };
00098 }
00099 
00100 #ifndef MiX_SAXPARSER_CPP_
00101 #include "SAX_Parser.cpp"
00102 #endif
00103 
00104 #endif

MiXに対してThu Sep 4 05:11:11 2003に生成されました。 doxygen1.2.18