#pragma once

class CTextTools
{
public:

	//////////////////////////////////////////////////////////////
	//	文字列処理
	//////////////////////////////////////////////////////////////
	//!	書式かされた文字列取得
	static CString GetFormat(LPCTSTR lpszFormat, ...);

	//!	int64へ変換
	static __int64 strtoi64(CString str,int  base);

	//!	行の切り出し
	static int GetLine(CString &str, CString &line);

	//!	トークンの切り出し
	static int GetToken(CString &str, CString &token, CString div);

	//!	トークン全て切り出し
	static void GetAllToken(CString str, CStringArray &tokens, CString div);

	//////////////////////////////////////////////////////////////
	//	文字列配列処理
	//////////////////////////////////////////////////////////////
	//!	配列から文字列を検索
	static int FindStrIndex(CStringArray &list, CString find, int noCase = 0);

	//////////////////////////////////////////////////////////////
	//	文字列変換
	//////////////////////////////////////////////////////////////
	//!	Unicodeから、ANSI文字列へ
	static CStringA	WideStrToMultiStr(wchar_t *str);

	//!	ANSIから、Unicode文字列へ
	static CStringW	MultiStrToWideStr(char *str);

	//!	ANSIからUTF8へ
	static CStringA	ANSIToUTF8Str(char *str);

	//!	UTF8からANSIへ
	static CStringA	UTF8ToANSIStr(char *str);

};


/*!
	文字列置き換えクラス
*/
class CTextEscape
{
public:
	class CTextEscapeItem
	{
	public:
		CTextEscapeItem() {};
		CTextEscapeItem(CString	token, CString escape)
		{
			m_token = token;
			m_escape = escape;
		};

		CString	m_token;
		CString	m_escape;
	};

	///////////////////////////////////////////////////////////////////////////
	//	文字列のエスケープ
	///////////////////////////////////////////////////////////////////////////
	//!	エスケープの実行
	CString Escape(CString src);

	//!	エスケープの解除
	CString UnEscape(CString escaped);

	//!	追加
	void AddEscape(CString token, CString escape);

	//!	クリア
	void Clear();


protected:
	///////////////////////////////////////////////////////////////////////////
	//	文字列のエスケープ
	///////////////////////////////////////////////////////////////////////////
	//!	一番最初に見つかったインデックスを取得
	int MultiFind(int startIndex, int &findIndex, CString &src, CArray<CTextEscapeItem> &items);

	///////////////////////////////////////////////////////////////////////////
	//	メンバ変数
	///////////////////////////////////////////////////////////////////////////
	//!	置き換え
	CArray<CTextEscapeItem>	m_escape;

	//!	置き換え
	CArray<CTextEscapeItem>	m_unescape;
};