#pragma once
#include "xmltextparser.h"
#include "WorkspaceNode.h"

class CWorkspaceXMLReader :
	protected CXMLTextParser
{
public:
	CWorkspaceXMLReader(void);
	virtual ~CWorkspaceXMLReader(void);

	//!	XML読み込み(throw CXMLTextParserException)
	void LoadFromFile(CWorkspaceNode *root, CString path, CString workspaceClassType = "CWorkspace");

	//!	XML読み込み(throw CXMLTextParserException)
	void FromString(CWorkspaceNode *root, CStringA str, CString workspaceClassType = "CWorkspace");

protected:
	/////////////////////////////////////////////////////////////////////////////////////
	//	実装
	/////////////////////////////////////////////////////////////////////////////////////
	//!	開始タグ
	virtual void OnStartTag(CString tag, CTagOptionArray &keys);

	//!	終了タグ
	virtual void OnEndTag(CString tag);

	//!	特殊タグ
	virtual void OnSpecialTag(CString tag);

	//!	データ
	virtual void OnData(CString data);

	/////////////////////////////////////////////////////////////////////////////////////
	//	メンバ変数
	/////////////////////////////////////////////////////////////////////////////////////
	//!	現在のノード
	CWorkspaceNode *m_curNode;

	//!	キーフラグ
	int		m_inKeyLeaf;

	//!	現在のキー名
	CString	m_keyName;

	//!	現在のデータ
	CString	m_keyData;

	//!	深さカウンタ
	CTypedPtrList<CPtrList,CWorkspaceNode*>	m_depth;

	//!	ワークスペース名
	CString	m_workspaceClassType;
};
