// -*- mode: c++ -*-

#ifndef MIX_XMLTOKEN_H_
#define MIX_XMLTOKEN_H_

#include "classes.h"
#include "misc.h"
#include "XMLString.h"

namespace MiX{
  enum TokenType{
    Token_null = 0,
    Token_crlf,
    Token_space,
    Token_tab,
    Token_lt,
    Token_eq,
    Token_gt,
    Token_slash,
    Token_hyphen,
    Token_semicolon,
    Token_exclamation,
    Token_question,
    Token_amp,
    Token_dblquote,
    Token_quote,
    Token_text = 100
  };

  template <class charT,class char_traits,class xml_traits>
  class XMLToken {
  public:
    MiX_Template_Typedef(charT,char_traits,xml_traits);
    typedef XMLToken<charT,char_traits,xml_traits> this_type;
  private:
    string_type str_;
    TokenType type_;
    long index_;
  public:
    ///コンストラクタ
    XMLToken() : type_(Token_null),index_(-1){ };
    ///コンストラクタ
    XMLToken(const charT* first,const charT* last,TokenType type,long index);
    ///文字列情報を得ます
    string_type& getData() { return str_; };
    ///トークンタイプを得ます
    TokenType getType() { return type_; };
    ///位置を得ます
    long getIndex() { return index_; };
  };
}

#ifndef MIX_XMLTOKEN_CPP_
#include "XMLToken.cpp"
#endif

#endif
