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

#if !defined( KEYWORDLIST_JS_H_INCLUDED_ )
#define KEYWORDLIST_JS_H_INCLUDED_

#include <vector>

namespace NLangExt {

namespace NLangExt_js {

// キーワードのリストを管理する
class CKeywordList_js
{
public:
	CKeywordList_js()
	{
		// キーワードと候補配列のテンプレートを用意する
		const wchar_t *Keywords[] = {
			L"abstract",
			L"boolean",
			L"break",
			L"byte",
			L"case",
			L"catch",
			L"char",
			L"class",
			L"comment",
			L"const",
			L"continue",
			L"debugger",
			L"default",
			L"delete",
			L"do",
			L"double",
			L"else",
			L"enum",
			L"export",
			L"extends",
			L"false",
			L"final",
			L"finally",
			L"float",
			L"for",
			L"function",
			L"goto",
			L"if",
			L"implements",
			L"import",
			L"in",
			L"instanceof",
			L"int",
			L"interface",
			L"label",
			L"long",
			L"native",
			L"new",
			L"null",
			L"package",
			L"protected",
			L"public",
			L"return",
			L"short",
			L"static",
			L"super",
			L"switch",
			L"synchronized",
			L"this",
			L"throw",
			L"throws",
			L"transient",
			L"true",
			L"try",
			L"typeof",
			L"var",
			L"volatile",
			L"while",
			L"with"
		};
		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_js

} // namespace NLangExt

#endif // KEYWORDLIST_JS_H_INCLUDED_

