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

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{
00022   template <class charT,class traitsT>
00023   class SAX_Parser{
00024   public:
00025     MiX_Template_Typedef(charT,traitsT);
00026     typedef SAX_Parser<charT,traitsT> this_type;
00027     typedef XMLToken<charT,traitsT> token_type;
00028     typedef SAX_EventHandler<charT,traitsT> handler_type;
00029     typedef Tokenizer<charT,traitsT> tokenizer_type;
00030     typedef typename traitsT::char_traits char_traits;
00031     typedef typename traitsT::xml_traits xml_traits;
00032   private:
00033     enum State{
00034       STATE_Text,
00035       STATE_Tag,
00036       STATE_Reference,
00037       STATE_Comment,
00038       STATE_Complete,
00039       STATE_Declaration,
00040       STATE_XMLDeclaration,
00041       STATE_Escape,
00042       STATE_Exception
00043     };
00044     State state_;
00045     tokenizer_type tokenizer_;
00046     handler_type* handler_;
00047     std::stack<string_type> validator_;
00048 
00049     bool ignore_space_;
00050 
00051     void skipSpaceTokens();
00052 
00053     bool parsingLoop();
00054 
00055     State parseText();
00056     State parseTag();
00057     State parseComment();
00058     State parseDeclaration();
00059     State parseXMLDeclaration();
00060 
00061     attrmap_type parseAttributes();
00062     string_type parseReference();
00063 
00064     void trimRight(string_type& str);
00065   public:
00067     SAX_Parser(){ handler_ = NULL; };
00074     void setEventHandler(handler_type* handler){
00075       handler_ = handler;
00076     };
00083     void setIgnoreSpace(bool flag) { ignore_space_ = flag; };
00090     bool parse(const string_type& text);
00097     bool parse(std::basic_istream<charT, char_traits>& is);
00098   };
00099 }
00100 
00101 #ifndef MIX_SAXPARSER_CPP_
00102 #include "SAX_Parser.cpp"
00103 #endif
00104 
00105 #endif

MiXに対してSat Jul 27 23:16:32 2002に生成されました。 doxygen1.2.14 作者 Dimitri van Heesch, © 1997-2002