/*******************************************************************************
 * Copyright (c) 2015 QNX Software Systems and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 * QNX Software Systems - Initial API and implementation
 *******************************************************************************/
package org.eclipse.cdt.internal.qt.ui.editor;

import java.util.ArrayList;

/**
 * Various keywords associated with Qt Project Files. Namely, special function and variable names used by qmake.
 */
public enum QtProjectFileKeyword {
	// QMake function keywords
	FUNC_MEMBER("member"), //$NON-NLS-1$
	FUNC_FIRST("first"), //$NON-NLS-1$
	FUNC_LAST("last"), //$NON-NLS-1$
	FUNC_SIZE("size"), //$NON-NLS-1$
	FUNC_CAT("cat"), //$NON-NLS-1$
	FUNC_FROMFILE("fromfile"), //$NON-NLS-1$
	FUNC_EVAL("eval"), //$NON-NLS-1$
	FUNC_LIST("list"), //$NON-NLS-1$
	FUNC_SPRINTF("sprintf"), //$NON-NLS-1$
	FUNC_FORMAT_NUMBER("format_number"), //$NON-NLS-1$
	FUNC_JOIN("join"), //$NON-NLS-1$
	FUNC_SPLIT("split"), //$NON-NLS-1$
	FUNC_BASENAME("basename"), //$NON-NLS-1$
	FUNC_DIRNAME("dirname"), //$NON-NLS-1$
	FUNC_SECTION("section"), //$NON-NLS-1$
	FUNC_FIND("find"), //$NON-NLS-1$
	FUNC_SYSTEM("system"), //$NON-NLS-1$
	FUNC_UNIQUE("unique"), //$NON-NLS-1$
	FUNC_REVERSE("reverse"), //$NON-NLS-1$
	FUNC_QUOTE("quote"), //$NON-NLS-1$
	FUNC_ESCAPE_EXPAND("escape_expand"), //$NON-NLS-1$
	FUNC_UPPER("upper"), //$NON-NLS-1$
	FUNC_LOWER("lower"), //$NON-NLS-1$
	FUNC_TITLE("title"), //$NON-NLS-1$
	FUNC_RE_ESCAPE("re_escape"), //$NON-NLS-1$
	FUNC_VAL_ESCAPE("val_escape"), //$NON-NLS-1$
	FUNC_FILES("files"), //$NON-NLS-1$
	FUNC_PROMPT("prompt"), //$NON-NLS-1$
	FUNC_REPLACE("replace"), //$NON-NLS-1$
	FUNC_SORT_DEPENDS("sort_depends"), //$NON-NLS-1$
	FUNC_RESOLVE_DEPENDS("resolve_depends"), //$NON-NLS-1$
	FUNC_ENUMERATE_VARS("enumerate_vars"), //$NON-NLS-1$
	FUNC_SHADOWED("shadowed"), //$NON-NLS-1$
	FUNC_ABSOLUTE_PATH("absolute_path"), //$NON-NLS-1$
	FUNC_RELATIVE_PATH("relative_path"), //$NON-NLS-1$
	FUNC_CLEAN_PATH("clean_path"), //$NON-NLS-1$
	FUNC_SYSTEM_PATH("system_path"), //$NON-NLS-1$
	FUNC_SHELL_PATH("shell_path"), //$NON-NLS-1$
	FUNC_SYSTEM_QUOTE("system_quote"), //$NON-NLS-1$
	FUNC_SHELL_QUOTE("shell_quote"), //$NON-NLS-1$
	FUNC_REQUIRES("requires"), //$NON-NLS-1$
	FUNC_GREATERTHAN("greaterThan"), //$NON-NLS-1$
	FUNC_LESSTHAN("lessThan"), //$NON-NLS-1$
	FUNC_EQUALS("equals"), //$NON-NLS-1$
	FUNC_ISEQUAL("isEqual"), //$NON-NLS-1$
	FUNC_EXISTS("exists"), //$NON-NLS-1$
	FUNC_EXPORT("export"), //$NON-NLS-1$
	FUNC_CLEAR("clear"), //$NON-NLS-1$
	FUNC_UNSET("unset"), //$NON-NLS-1$
	FUNC_IF("if"), //$NON-NLS-1$
	FUNC_ISACTIVECONFIG("isActiveConfig"), //$NON-NLS-1$
	FUNC_DEFINED("defined"), //$NON-NLS-1$
	FUNC_CONTAINS("contains"), //$NON-NLS-1$
	FUNC_INFILE("infile"), //$NON-NLS-1$
	FUNC_COUNT("count"), //$NON-NLS-1$
	FUNC_ISEMPTY("isEmpty"), //$NON-NLS-1$
	FUNC_PARSEJSON("parseJson"), //$NON-NLS-1$
	FUNC_LOAD("load"), //$NON-NLS-1$
	FUNC_INCLUDE("include"), //$NON-NLS-1$
	FUNC_DEBUG("debug"), //$NON-NLS-1$
	FUNC_LOG("log"), //$NON-NLS-1$
	FUNC_MESSAGE("message"), //$NON-NLS-1$
	FUNC_WARNING("warning"), //$NON-NLS-1$
	FUNC_ERROR("error"), //$NON-NLS-1$
	FUNC_MKPATH("mkpath"), //$NON-NLS-1$
	FUNC_WRITE_FILE("write_file"), //$NON-NLS-1$
	FUNC_TOUCH("touch"), //$NON-NLS-1$
	FUNC_CACHE("cache"), //$NON-NLS-1$

	// QMake variable keywords
	VAR_CCFLAG("CCFLAG"), //$NON-NLS-1$
	VAR_CLEAN_DEPS("CLEAN_DEPS"), //$NON-NLS-1$
	VAR_CONFIG("CONFIG"), //$NON-NLS-1$
	VAR_DEFINES("DEFINES"), //$NON-NLS-1$
	VAR_DEF_FILE("DEF_FILE"), //$NON-NLS-1$
	VAR_DEPENDPATH("DEPENDPATH"), //$NON-NLS-1$
	VAR_DEPLOYMENT("DEPLOYMENT"), //$NON-NLS-1$
	VAR_DEPLOYMENT_PLUGIN("DEPLOYMENT_PLUGIN"), //$NON-NLS-1$
	VAR_DESTDIR("DESTDIR"), //$NON-NLS-1$
	VAR_DESTDIR_TARGET("DESTDIR_TARGET"), //$NON-NLS-1$
	VAR_DISTFILES("DISTFILES"), //$NON-NLS-1$
	VAR_DLLDESTDIR("DLLDESTDIR"), //$NON-NLS-1$
	VAR_DSP_TEMPLATE("DSP_TEMPLATE"), //$NON-NLS-1$
	VAR_FORMS("FORMS"), //$NON-NLS-1$
	VAR_FORMS3("FORMS3"), //$NON-NLS-1$
	VAR_GUID("GUID"), //$NON-NLS-1$
	VAR_HEADERS("HEADERS"), //$NON-NLS-1$
	VAR_ICON("ICON"), //$NON-NLS-1$
	VAR_INCLUDEPATH("INCLUDEPATH"), //$NON-NLS-1$
	VAR_INSTALLS("INSTALLS"), //$NON-NLS-1$
	VAR_LEXIMPLS("LEXIMPLS"), //$NON-NLS-1$
	VAR_LEXOBJECTS("LEXOBJECTS"), //$NON-NLS-1$
	VAR_LEXSOURCES("LEXSOURCES"), //$NON-NLS-1$
	VAR_LIBS("LIBS"), //$NON-NLS-1$
	VAR_LITERAL_HASH("LITERAL_HASH"), //$NON-NLS-1$
	VAR_MAKEFILE("MAKEFILE"), //$NON-NLS-1$
	VAR_MAKEFILE_GENERATOR("MAKEFILE_GENERATOR"), //$NON-NLS-1$
	VAR_MOBILITY("MOBILITY"), //$NON-NLS-1$
	VAR_MOC_DIR("MOC_DIR"), //$NON-NLS-1$
	VAR_OBJECTIVE_HEADERS("OBJECTIVE_HEADERS"), //$NON-NLS-1$
	VAR_OBJECTIVE_SOURCES("OBJECTIVE_SOURCES"), //$NON-NLS-1$
	VAR_OBJECTS("OBJECTS"), //$NON-NLS-1$
	VAR_OBJECTS_DIR("OBJECTS_DIR"), //$NON-NLS-1$
	VAR_OBJMOC("OBJMOC"), //$NON-NLS-1$
	VAR_OTHER_FILES("OTHER_FILES"), //$NON-NLS-1$
	VAR_OUT_PWD("OUT_PWD"), //$NON-NLS-1$
	VAR_PKGCONFIG("PKGCONFIG"), //$NON-NLS-1$
	VAR_POST_TARGETDEPS("POST_TARGETDEPS"), //$NON-NLS-1$
	VAR_PRECOMPILED_HEADER("PRECOMPILED_HEADER"), //$NON-NLS-1$
	VAR_PRE_TARGETDEPS("PRE_TARGETDEPS"), //$NON-NLS-1$
	VAR_PWD("PWD"), //$NON-NLS-1$
	VAR_QMAKE("QMAKE"), //$NON-NLS-1$
	VAR_QMAKESPEC("QMAKESPEC"), //$NON-NLS-1$
	VAR_QMAKE_APP_FLAG("QMAKE_APP_FLAG"), //$NON-NLS-1$
	VAR_QMAKE_APP_OR_DLL("QMAKE_APP_OR_DLL"), //$NON-NLS-1$
	VAR_QMAKE_AR_CMD("QMAKE_AR_CMD"), //$NON-NLS-1$
	VAR_QMAKE_BUNDLE_DATA("QMAKE_BUNDLE_DATA"), //$NON-NLS-1$
	VAR_QMAKE_BUNDLE_EXTENSION("QMAKE_BUNDLE_EXTENSION"), //$NON-NLS-1$
	VAR_QMAKE_CC("QMAKE_CC"), //$NON-NLS-1$
	VAR_QMAKE_CFLAGS("QMAKE_CFLAGS"), //$NON-NLS-1$
	VAR_QMAKE_CFLAGS_DEBUG("QMAKE_CFLAGS_DEBUG"), //$NON-NLS-1$
	VAR_QMAKE_CFLAGS_MT("QMAKE_CFLAGS_MT"), //$NON-NLS-1$
	VAR_QMAKE_CFLAGS_MT_DBG("QMAKE_CFLAGS_MT_DBG"), //$NON-NLS-1$
	VAR_QMAKE_CFLAGS_MT_DLL("QMAKE_CFLAGS_MT_DLL"), //$NON-NLS-1$
	VAR_QMAKE_CFLAGS_MT_DLLDBG("QMAKE_CFLAGS_MT_DLLDBG"), //$NON-NLS-1$
	VAR_QMAKE_CFLAGS_RELEASE("QMAKE_CFLAGS_RELEASE"), //$NON-NLS-1$
	VAR_QMAKE_CFLAGS_SHLIB("QMAKE_CFLAGS_SHLIB"), //$NON-NLS-1$
	VAR_QMAKE_CFLAGS_THREAD("QMAKE_CFLAGS_THREAD"), //$NON-NLS-1$
	VAR_QMAKE_CFLAGS_WARN_OFF("QMAKE_CFLAGS_WARN_OFF"), //$NON-NLS-1$
	VAR_QMAKE_CFLAGS_WARN_ON("QMAKE_CFLAGS_WARN_ON"), //$NON-NLS-1$
	VAR_QMAKE_CLEAN("QMAKE_CLEAN"), //$NON-NLS-1$
	VAR_QMAKE_CXX("QMAKE_CXX"), //$NON-NLS-1$
	VAR_QMAKE_CXXFLAGS("QMAKE_CXXFLAGS"), //$NON-NLS-1$
	VAR_QMAKE_CXXFLAGS_DEBUG("QMAKE_CXXFLAGS_DEBUG"), //$NON-NLS-1$
	VAR_QMAKE_CXXFLAGS_MT("QMAKE_CXXFLAGS_MT"), //$NON-NLS-1$
	VAR_QMAKE_CXXFLAGS_MT_DBG("QMAKE_CXXFLAGS_MT_DBG"), //$NON-NLS-1$
	VAR_QMAKE_CXXFLAGS_MT_DLL("QMAKE_CXXFLAGS_MT_DLL"), //$NON-NLS-1$
	VAR_QMAKE_CXXFLAGS_MT_DLLDBG("QMAKE_CXXFLAGS_MT_DLLDBG"), //$NON-NLS-1$
	VAR_QMAKE_CXXFLAGS_RELEASE("QMAKE_CXXFLAGS_RELEASE"), //$NON-NLS-1$
	VAR_QMAKE_CXXFLAGS_SHLIB("QMAKE_CXXFLAGS_SHLIB"), //$NON-NLS-1$
	VAR_QMAKE_CXXFLAGS_THREAD("QMAKE_CXXFLAGS_THREAD"), //$NON-NLS-1$
	VAR_QMAKE_CXXFLAGS_WARN_OFF("QMAKE_CXXFLAGS_WARN_OFF"), //$NON-NLS-1$
	VAR_QMAKE_CXXFLAGS_WARN_ON("QMAKE_CXXFLAGS_WARN_ON"), //$NON-NLS-1$
	VAR_QMAKE_DISTCLEAN("QMAKE_DISTCLEAN"), //$NON-NLS-1$
	VAR_QMAKE_EXTENSION_SHLIB("QMAKE_EXTENSION_SHLIB"), //$NON-NLS-1$
	VAR_QMAKE_EXTRA_COMPILERS("QMAKE_EXTRA_COMPILERS"), //$NON-NLS-1$
	VAR_QMAKE_EXTRA_TARGETS("QMAKE_EXTRA_TARGETS"), //$NON-NLS-1$
	VAR_QMAKE_EXT_CPP("QMAKE_EXT_CPP"), //$NON-NLS-1$
	VAR_QMAKE_EXT_H("QMAKE_EXT_H"), //$NON-NLS-1$
	VAR_QMAKE_EXT_LEX("QMAKE_EXT_LEX"), //$NON-NLS-1$
	VAR_QMAKE_EXT_MOC("QMAKE_EXT_MOC"), //$NON-NLS-1$
	VAR_QMAKE_EXT_OBJ("QMAKE_EXT_OBJ"), //$NON-NLS-1$
	VAR_QMAKE_EXT_PRL("QMAKE_EXT_PRL"), //$NON-NLS-1$
	VAR_QMAKE_EXT_UI("QMAKE_EXT_UI"), //$NON-NLS-1$
	VAR_QMAKE_EXT_YACC("QMAKE_EXT_YACC"), //$NON-NLS-1$
	VAR_QMAKE_FAILED_REQUIREMENTS("QMAKE_FAILED_REQUIREMENTS"), //$NON-NLS-1$
	VAR_QMAKE_FRAMEWORK_BUNDLE_NAME("QMAKE_FRAMEWORK_BUNDLE_NAME"), //$NON-NLS-1$
	VAR_QMAKE_FRAMEWORK_VERSION("QMAKE_FRAMEWORK_VERSION"), //$NON-NLS-1$
	VAR_QMAKE_INCDIR("QMAKE_INCDIR"), //$NON-NLS-1$
	VAR_QMAKE_INCDIR_EGL("QMAKE_INCDIR_EGL"), //$NON-NLS-1$
	VAR_QMAKE_INCDIR_OPENGL("QMAKE_INCDIR_OPENGL"), //$NON-NLS-1$
	VAR_QMAKE_INCDIR_OPENGL_ES1("QMAKE_INCDIR_OPENGL_ES1"), //$NON-NLS-1$
	VAR_QMAKE_INCDIR_OPENGL_ES2("QMAKE_INCDIR_OPENGL_ES2"), //$NON-NLS-1$
	VAR_QMAKE_INCDIR_OPENVG("QMAKE_INCDIR_OPENVG"), //$NON-NLS-1$
	VAR_QMAKE_INCDIR_QT("QMAKE_INCDIR_QT"), //$NON-NLS-1$
	VAR_QMAKE_INCDIR_THREAD("QMAKE_INCDIR_THREAD"), //$NON-NLS-1$
	VAR_QMAKE_INCDIR_X("QMAKE_INCDIR_X11"), //$NON-NLS-1$
	VAR_QMAKE_INFO_PLIST("QMAKE_INFO_PLIST"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS("QMAKE_LFLAGS"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_CONSOLE("QMAKE_LFLAGS_CONSOLE"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_CONSOLE_DLL("QMAKE_LFLAGS_CONSOLE_DLL"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_DEBUG("QMAKE_LFLAGS_DEBUG"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_PLUGIN("QMAKE_LFLAGS_PLUGIN"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_QT_DLL("QMAKE_LFLAGS_QT_DLL"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_RELEASE("QMAKE_LFLAGS_RELEASE"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_RPATH("QMAKE_LFLAGS_RPATH"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_SHAPP("QMAKE_LFLAGS_SHAPP"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_SHLIB("QMAKE_LFLAGS_SHLIB"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_SONAME("QMAKE_LFLAGS_SONAME"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_THREAD("QMAKE_LFLAGS_THREAD"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_WINDOWS("QMAKE_LFLAGS_WINDOWS"), //$NON-NLS-1$
	VAR_QMAKE_LFLAGS_WINDOWS_DLL("QMAKE_LFLAGS_WINDOWS_DLL"), //$NON-NLS-1$
	VAR_QMAKE_LIBDIR("QMAKE_LIBDIR"), //$NON-NLS-1$
	VAR_QMAKE_LIBDIR_EGL("QMAKE_LIBDIR_EGL"), //$NON-NLS-1$
	VAR_QMAKE_LIBDIR_FLAGS("QMAKE_LIBDIR_FLAGS"), //$NON-NLS-1$
	VAR_QMAKE_LIBDIR_OPENGL("QMAKE_LIBDIR_OPENGL"), //$NON-NLS-1$
	VAR_QMAKE_LIBDIR_OPENVG("QMAKE_LIBDIR_OPENVG"), //$NON-NLS-1$
	VAR_QMAKE_LIBDIR_QT("QMAKE_LIBDIR_QT"), //$NON-NLS-1$
	VAR_QMAKE_LIBDIR_X("QMAKE_LIBDIR_X11"), //$NON-NLS-1$
	VAR_QMAKE_LIBS("QMAKE_LIBS"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_CONSOLE("QMAKE_LIBS_CONSOLE"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_EGL("QMAKE_LIBS_EGL"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_OPENGL("QMAKE_LIBS_OPENGL"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_OPENGL_ES1("QMAKE_LIBS_OPENGL_ES1"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_OPENGL_ES2("QMAKE_LIBS_OPENGL_ES2"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_OPENGL_QT("QMAKE_LIBS_OPENGL_QT"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_OPENVG("QMAKE_LIBS_OPENVG"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_QT("QMAKE_LIBS_QT"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_QT_DLL("QMAKE_LIBS_QT_DLL"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_QT_OPENGL("QMAKE_LIBS_QT_OPENGL"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_QT_THREAD("QMAKE_LIBS_QT_THREAD"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_RT("QMAKE_LIBS_RT"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_RTMT("QMAKE_LIBS_RTMT"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_THREAD("QMAKE_LIBS_THREAD"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_WINDOWS("QMAKE_LIBS_WINDOWS"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_X11("QMAKE_LIBS_X11"), //$NON-NLS-1$
	VAR_QMAKE_LIBS_X11SM("QMAKE_LIBS_X11SM"), //$NON-NLS-1$
	VAR_QMAKE_LIB_FLAG("QMAKE_LIB_FLAG"), //$NON-NLS-1$
	VAR_QMAKE_LINK("QMAKE_LINK"), //$NON-NLS-1$
	VAR_QMAKE_LINK_SHLIB_CMD("QMAKE_LINK_SHLIB_CMD"), //$NON-NLS-1$
	VAR_QMAKE_LN_SHLIB("QMAKE_LN_SHLIB"), //$NON-NLS-1$
	VAR_QMAKE_MACOSX_DEPLOYMENT_TARGET("QMAKE_MACOSX_DEPLOYMENT_TARGET"), //$NON-NLS-1$
	VAR_QMAKE_MAC_SDK("QMAKE_MAC_SDK"), //$NON-NLS-1$
	VAR_QMAKE_MAKEFILE("QMAKE_MAKEFILE"), //$NON-NLS-1$
	VAR_QMAKE_MOC_SRC("QMAKE_MOC_SRC"), //$NON-NLS-1$
	VAR_QMAKE_POST_LINK("QMAKE_POST_LINK"), //$NON-NLS-1$
	VAR_QMAKE_PRE_LINK("QMAKE_PRE_LINK"), //$NON-NLS-1$
	VAR_QMAKE_PROJECT_NAME("QMAKE_PROJECT_NAME"), //$NON-NLS-1$
	VAR_QMAKE_QMAKE("QMAKE_QMAKE"), //$NON-NLS-1$
	VAR_QMAKE_QT_DLL("QMAKE_QT_DLL"), //$NON-NLS-1$
	VAR_QMAKE_RESOURCE_FLAGS("QMAKE_RESOURCE_FLAGS"), //$NON-NLS-1$
	VAR_QMAKE_RPATH("QMAKE_RPATH"), //$NON-NLS-1$
	VAR_QMAKE_RPATHDIR("QMAKE_RPATHDIR"), //$NON-NLS-1$
	VAR_QMAKE_RUN_CC("QMAKE_RUN_CC"), //$NON-NLS-1$
	VAR_QMAKE_RUN_CC_IMP("QMAKE_RUN_CC_IMP"), //$NON-NLS-1$
	VAR_QMAKE_RUN_CXX("QMAKE_RUN_CXX"), //$NON-NLS-1$
	VAR_QMAKE_RUN_CXX_IMP("QMAKE_RUN_CXX_IMP"), //$NON-NLS-1$
	VAR_QMAKE_TARGET("QMAKE_TARGET"), //$NON-NLS-1$
	VAR_QMAKE_UIC("QMAKE_UIC"), //$NON-NLS-1$
	VAR_QT("QT"), //$NON-NLS-1$
	VAR_QTPLUGIN("QTPLUGIN"), //$NON-NLS-1$
	VAR_QT_MAJOR_VERSION("QT_MAJOR_VERSION"), //$NON-NLS-1$
	VAR_QT_MINOR_VERSION("QT_MINOR_VERSION"), //$NON-NLS-1$
	VAR_QT_PATCH_VERSION("QT_PATCH_VERSION"), //$NON-NLS-1$
	VAR_QT_VERSION("QT_VERSION"), //$NON-NLS-1$
	VAR_RCC_DIR("RCC_DIR"), //$NON-NLS-1$
	VAR_RC_FILE("RC_FILE"), //$NON-NLS-1$
	VAR_REQUIRES("REQUIRES"), //$NON-NLS-1$
	VAR_RESOURCES("RESOURCES"), //$NON-NLS-1$
	VAR_RES_FILE("RES_FILE"), //$NON-NLS-1$
	VAR_RSS_RULES("RSS_RULES"), //$NON-NLS-1$
	VAR_SIGNATURE_FILE("SIGNATURE_FILE"), //$NON-NLS-1$
	VAR_SOURCES("SOURCES"), //$NON-NLS-1$
	VAR_SRCMOC("SRCMOC"), //$NON-NLS-1$
	VAR_STATECHARTS("STATECHARTS"), //$NON-NLS-1$
	VAR_SUBDIRS("SUBDIRS"), //$NON-NLS-1$
	VAR_TARGET("TARGET"), //$NON-NLS-1$
	VAR_TEMPLATE("TEMPLATE"), //$NON-NLS-1$
	VAR_TRANSLATIONS("TRANSLATIONS"), //$NON-NLS-1$
	VAR_UICIMPLS("UICIMPLS"), //$NON-NLS-1$
	VAR_UICOBJECTS("UICOBJECTS"), //$NON-NLS-1$
	VAR_UI_DIR("UI_DIR"), //$NON-NLS-1$
	VAR_UI_HEADERS_DIR("UI_HEADERS_DIR"), //$NON-NLS-1$
	VAR_UI_SOURCES_DIR("UI_SOURCES_DIR"), //$NON-NLS-1$
	VAR_VERSION("VERSION"), //$NON-NLS-1$
	VAR_VERSION_PE_HEADER("VERSION_PE_HEADER"), //$NON-NLS-1$
	VAR_VER_MAJ("VER_MAJ"), //$NON-NLS-1$
	VAR_VER_MIN("VER_MIN"), //$NON-NLS-1$
	VAR_VER_PAT("VER_PAT"), //$NON-NLS-1$
	VAR_VPATH("VPATH"), //$NON-NLS-1$
	VAR_YACCIMPLS("YACCIMPLS"), //$NON-NLS-1$
	VAR_YACCOBJECTS("YACCOBJECTS"), //$NON-NLS-1$
	VAR_YACCSOURCES("YACCSOURCES"), //$NON-NLS-1$
	VAR__PRO_FILE_("_PRO_FILE_"), //$NON-NLS-1$
	VAR__PRO_FILE_PWD_("_PRO_FILE_PWD_"); //$NON-NLS-1$

	private final String keyword;

	QtProjectFileKeyword(String key) {
		this.keyword = key;
	}

	/**
	 * Returns a <code>String</code> containing this keyword's identifier.
	 *
	 * @return a string
	 */
	public String getKeyword() {
		return keyword;
	}

	private static QtProjectFileKeyword[] getKeywordsWithPrefix(String prefix) {
		ArrayList<QtProjectFileKeyword> list = new ArrayList<>();
		for (QtProjectFileKeyword word : QtProjectFileKeyword.values()) {
			if (word.name().startsWith(prefix)) {
				list.add(word);
			}
		}
		QtProjectFileKeyword[] array = new QtProjectFileKeyword[list.size()];
		return list.toArray(array);
	}

	/**
	 * Returns all keywords associated with functions in qmake.
	 *
	 * @return an array of keywords
	 */
	public static QtProjectFileKeyword[] getFunctionKeywords() {
		return getKeywordsWithPrefix("FUNC_"); //$NON-NLS-1$
	}

	/**
	 * Returns all keywords associated with variables in qmake.
	 *
	 * @return an array of keywords
	 */
	public static QtProjectFileKeyword[] getVariableKeywords() {
		return getKeywordsWithPrefix("VAR_"); //$NON-NLS-1$
	}
}
