SAX_Parser.h Source File

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

# 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_Escape,
    00036       STATE_Exception
    00037     };
    00038     State state_;
    00039     tokenizer_type tokenizer_;
    00040     handler_type* handler_;
    00041     std::stack<string_type> validator_;
    00042
    00043     bool ignore_space_;
    00044
    00045     void skipSpaceTokens();
    00046
    00047     bool parsingLoop();
    00048
    00049     State parseText();
    00050     State parseTag();
    00051     State parseComment();
    00052     State parseDeclaration();
    00053     State parseXMLDeclaration();
    00054
    00055     attrmap_type parseAttributes();
    00056     string_type parseReference();
    00057
    00058     void trimRight(string_type& str);
    00059   public:
    00061     SAX_Parser(){ handler_ = NULL; ignore_space_ = false; }
    00068     void setEventHandler(handler_type* handler){
    00069       handler_ = handler;
    00070     };
    00077     void setIgnoreSpace(bool flag) { ignore_space_ = flag; };
    00084     bool parse(const string_type& text);
    00091     bool parse(std::basic_istream<charT, char_traits>& is);
    00092   };
    00093 }
    00094
    00095 #ifndef MiX_SAXPARSER_CPP_
    00096 #include "SAX_Parser.cpp"
    00097 #endif
    00098
    00099 #endif