00001
00002
00003 #ifndef MIX_TOKENIZER_H_
00004 #define MIX_TOKENIZER_H_
00005
00006
00007 #include "classes.h"
00008 #include "misc.h"
00009 #include "XMLToken.h"
00010
00011 #include <stack>
00012 #include <string>
00013
00014 namespace MiX{
00023 template <class Char,class Traits,class XMLTraits>
00024 class Tokenizer{
00025 public:
00026 MiX_Template_Typedef(Char,Traits,XMLTraits);
00027 typedef Tokenizer<Char,Traits,XMLTraits> this_type;
00028 typedef XMLToken<Char,Traits,XMLTraits> token_type;
00029 private:
00030 const Char* data_;
00031 const Char* start_;
00032 const Char* current_;
00033 long len_;
00034 static const Char tokens_[];
00035 MiX_STD::stack<token_type> stack_;
00036 static TokenType isToken(Char);
00037 public:
00039 Tokenizer(){ };
00041 bool injectString(const Char* text)
00042 { current_ = start_ = data_ = text; return true; };
00044 bool ejectToken(XMLToken<Char,Traits,XMLTraits>& dest);
00046 void pushToken(const XMLToken<Char,Traits,XMLTraits>& tok){
00047 stack_.push(tok);
00048 }
00049 };
00050
00051 }
00052
00053 #ifndef MIX_TOKENIZER_CPP_
00054 #include "Tokenizer.cpp"
00055 #endif
00056
00057 #endif