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

#ifndef MiX_SAX_EVENTHANDLER_H_
#define MiX_SAX_EVENTHANDLER_H_

#include "classes.h"
#include "misc.h"
#include "Tokenizer.h"

#include "XMLString.h"
#include "AttrMap.h"

namespace MiX{

  template <class charT,class char_traits,class xml_traits>
  class SAX_EventHandler{
  public:
    MiX_Template_Typedef(charT,char_traits,xml_traits);
    /**
     * XML宣言(<?xml...?>)を検出した時に呼ばれる
     * 
     * \param attr XML宣言に与えられたパラメータを格納したAttrMap
     */
    virtual void onXMLDeclaration(attrmap_type attr){ }
    /**
     * タグの始まりを検出した時に呼ばれる
     *
     * \param name タグの名前
     * \param attr タグに与えられたパラメータを格納したAttrMap
     */
    virtual void onStart(string_type name,attrmap_type attr){ }
    /**
     * タグの終りを検出した時に呼ばれる
     *
     * 終了タグ省略型の(<hoge/>)場合でもばれます
     * \param name タグの名前
     */
    virtual void onEnd(string_type name){ }
    /**
     * 普通の文字列を検出した時に呼ばれる
     *
     * \param text 文字列
     */
    virtual void onText(string_type text){ }
    /**
     * コメントを検出した時に呼ばれる
     *
     * \param text コメント
     */
    virtual void onComment(string_type text) { }
    /**
     * 例外が起こった時に呼ばれる
     *
     * 戻り値は解析を中止するかどうか。
     * (真を返した場合、parseメソッドはfalseを返して終了する)
     * \param e 例外オブジェクト
     */
    virtual bool onException(ParsingException e) { throw e; }
  };
}

#endif 
