///////////////////////////////////////////////////////////////////////////
// KeywordList_vbs.h
// VBScriptのキーワードのリストを保持するクラス
///////////////////////////////////////////////////////////////////////////

#if !defined( KEYWORDLIST_VBS_H_INCLUDED_ )
#define KEYWORDLIST_VBS_H_INCLUDED_

#include <vector>
#include <string>

namespace NLangExt {

namespace NLangExt_vbs {

// キーワードのリストを管理する
class CKeywordList_vbs
{
public:
	CKeywordList_vbs()
	{
		// キーワードと候補配列のテンプレートを用意する
		const wchar_t *Keywords[] = {
			L"vbBlack",
			L"vbRed",
			L"vbGreen",
			L"vbYellow",
			L"vbBlue",
			L"vbMagenta",
			L"vbCyan",
			L"vbWhite",
			L"vbSunday",
			L"vbMonday",
			L"vbTuesday",
			L"vbWednesday",
			L"vbThursday",
			L"vbFriday",
			L"vbSaturday",
			L"vbUseSystemDayOfWeek",
			L"vbFirstJan1",
			L"vbFirstFourDays",
			L"vbFirstFullWeek",
			L"vbGeneralDate",
			L"vbLongDate",
			L"vbShortDate",
			L"vbLongTime",
			L"vbShortTime",
			L"vbObjectError",
			L"vbOKOnly",
			L"vbOKCancel",
			L"vbAbortRetryIgnore",
			L"vbYesNoCancel",
			L"vbYesNo",
			L"vbRetryCancel",
			L"vbCritical",
			L"vbQuestion",
			L"vbExclamation",
			L"vbInformation",
			L"vbDefaultButton1",
			L"vbDefaultButton2",
			L"vbDefaultButton3",
			L"vbDefaultButton4",
			L"vbApplicationModal",
			L"vbSystemModal",
			L"vbOK",
			L"vbCancel",
			L"vbAbort",
			L"vbRetry",
			L"vbIgnore",
			L"vbYes",
			L"vbNo",
			L"vbCr",
			L"vbCrLf",
			L"vbFormFeed",
			L"vbLf",
			L"vbNewLine",
			L"vbNullChar",
			L"vbNullString",
			L"vbTab",
			L"vbVerticalTab",
			L"vbUseDefault",
			L"vbTrue",
			L"vbFalse",
			L"vbEmpty",
			L"vbNull",
			L"vbInteger",
			L"vbLong",
			L"vbSingle",
			L"vbDouble",
			L"vbCurrency",
			L"vbDate",
			L"vbString",
			L"vbObject",
			L"vbError",
			L"vbBoolean",
			L"vbVariant",
			L"vbDataObject",
			L"vbDecimal",
			L"vbByte",
			L"vbArray",
			L"On",
			L"Error",
			L"Resume",
			L"Next",
			L"GoTo",
			L"Mod",
			L"Is",
			L"And",
			L"Or",
			L"Xor",
			L"Eqv",
			L"Imp",
			L"Call",
			L"Class",
			L"End",
			L"Const",
			L"Public",
			L"Private",
			L"Dim",
			L"Do",
			L"While",
			L"Until",
			L"Exit",
			L"Loop",
			L"Erase",
			L"Execute",
			L"ExecuteGlobal",
			L"For",
			L"Each",
			L"In",
			L"Next",
			L"To",
			L"Step",
			L"Default",
			L"Function",
			L"If",
			L"Then",
			L"Else",
			L"ElseIf",
			L"On",
			L"Error",
			L"Resume",
			L"Next",
			L"Goto",
			L"Option",
			L"Explicit",
			L"Property",
			L"Get",
			L"Let",
			L"Set",
			L"Rendomize",
			L"ReDim",
			L"Preserve",
			L"Rem",
			L"Select",
			L"Case",
			L"Set",
			L"New",
			L"Nothig",
			L"GetRef",
			L"Sub",
			L"While",
			L"Wend",
			L"With",
			L"Empty",
			L"False",
			L"Null",
			L"True"
		};
		static const int KeywordCnt = sizeof( Keywords ) / sizeof( Keywords[0] );
		int i;

		if ( !vKeyword.empty() ) return ;

		// キーワードの配列に格納
		for ( i = 0; i < KeywordCnt; i++ )
			vKeyword.push_back( std::wstring( Keywords[i] ) );

		// アルファベット順に並び替える
		std::sort( vKeyword.begin(), vKeyword.end() );

	};

	// キーワードの配列を取得する
	const std::vector< std::wstring >& GetKeywordList() const
	{
		return vKeyword;
	};
protected:

	std::vector< std::wstring > vKeyword;	// キーワード
};


} // namespace NLangExt_vbs

} // namespace NLangExt

#endif // KEYWORDLIST_VBS_H_INCLUDED_

