package net.sf.eclipsefp.haskell.core.cabalmodel; import java.util.HashMap; import java.util.Locale; import java.util.Map; /** <p>contains constant definitions for the elements of the Cabal * syntax.</p> * * @author Leif Frenzel */ public enum CabalSyntax { SECTION_EXECUTABLE("executable",true), //$NON-NLS-1$ SECTION_LIBRARY("library",true), //$NON-NLS-1$ SECTION_SOURCE_REPOSITORY("source-repository",true), //$NON-NLS-1$ SECTION_FLAG("flag",true), //$NON-NLS-1$ SECTION_IF("if",true), //$NON-NLS-1$ SECTION_ELSE("else",true), //$NON-NLS-1$ SECTION_TESTSUITE("test-suite",true), //$NON-NLS-1$ SECTION_BENCHMARK("benchmark",true), //$NON-NLS-1$ FIELD_CATEGORY("category"), //$NON-NLS-1$ FIELD_EXPOSED_MODULES("exposed-modules"), //$NON-NLS-1$ FIELD_NAME("name"), //$NON-NLS-1$ FIELD_LICENSE_FILE("license-file"), //$NON-NLS-1$ FIELD_LICENSE_FILES("license-files"), //$NON-NLS-1$ FIELD_LICENSE("license"), //$NON-NLS-1$ FIELD_COPYRIGHT("copyright"), //$NON-NLS-1$ FIELD_VERSION("version"), //$NON-NLS-1$ FIELD_AUTHOR("author"), //$NON-NLS-1$ FIELD_MAINTAINER("maintainer"),//$NON-NLS-1$ FIELD_SYNOPSIS("synopsis"),//$NON-NLS-1$ FIELD_DESCRIPTION("description"),//$NON-NLS-1$ FIELD_HOMEPAGE("homepage"),//$NON-NLS-1$ FIELD_BUILD_TYPE("build-type"),//$NON-NLS-1$ FIELD_CABAL_VERSION("cabal-version"),//$NON-NLS-1$ FIELD_STABILITY("stability"),//$NON-NLS-1$ FIELD_PACKAGE_URL("package-url"),//$NON-NLS-1$ FIELD_TESTED_WITH("tested-with"),//$NON-NLS-1$ FIELD_BUILD_DEPENDS("build-depends"),//$NON-NLS-1$ FIELD_DATA_FILES("data-files"),//$NON-NLS-1$ FIELD_EXTRA_SOURCE_FILES("extra-source-files"),//$NON-NLS-1$ FIELD_EXTRA_TMP_FILES("extra-tmp-files"),//$NON-NLS-1$ FIELD_EXTRA_DOC_FILES("extra-doc-files"),//$NON-NLS-1$ FIELD_MAIN_IS("main-is"),//$NON-NLS-1$ FIELD_BUILDABLE("buildable"),//$NON-NLS-1$ FIELD_OTHER_MODULES("other-modules"),//$NON-NLS-1$ FIELD_HS_SOURCE_DIRS("hs-source-dirs"),//$NON-NLS-1$ FIELD_EXTENSIONS("extensions"),//$NON-NLS-1$ FIELD_DEFAULT_EXTENSIONS("default-extensions"),//$NON-NLS-1$ FIELD_OTHER_EXTENSIONS("other-extensions"),//$NON-NLS-1$ FIELD_DEFAULT_LANGUAGE("default-language"),//$NON-NLS-1$ FIELD_OTHER_LANGUAGES("other-languages"),//$NON-NLS-1$ FIELD_GHC_OPTIONS("ghc-options"),//$NON-NLS-1$ FIELD_GHC_PROF_OPTIONS("ghc-prof-options"),//$NON-NLS-1$ FIELD_GHC_SHARED_OPTIONS("ghc-shared-options"),//$NON-NLS-1$ FIELD_HUGS_OPTIONS("hugs-options"),//$NON-NLS-1$ FIELD_NHC_OPTIONS("nhc-options"),//$NON-NLS-1$ FIELD_INCLUDES("includes"),//$NON-NLS-1$ FIELD_INCLUDE_DIRS("include-dirs"),//$NON-NLS-1$ FIELD_C_SOURCES("c-sources"),//$NON-NLS-1$ FIELD_EXTRA_LIBRARIES("extra-libraries"),//$NON-NLS-1$ FIELD_EXTRA_LIB_DIRS("extra-lib-dirs"),//$NON-NLS-1$ FIELD_CC_OPTIONS("cc-options"),//$NON-NLS-1$ FIELD_LD_OPTIONS("ld-options"),//$NON-NLS-1$ FIELD_FRAMEWORKS("frameworks"),//$NON-NLS-1$ FIELD_DEFAULT("default"),//$NON-NLS-1$ FIELD_TYPE("type"),//$NON-NLS-1$ FIELD_LOCATION("location"),//$NON-NLS-1$ FIELD_TAG("tag"),//$NON-NLS-1$ FIELD_BUG_REPORTS("bug-reports"),//$NON-NLS-1$ FIELD_DATA_DIR("data-dir"),//$NON-NLS-1$ FIELD_BUILD_TOOLS("build-tools"),//$NON-NLS-1$ FIELD_NHC98_OPTIONS("nhc98-options"),//$NON-NLS-1$ FIELD_INSTALL_INCLUDES("install-includes"),//$NON-NLS-1$ FIELD_PKGCONFIG_DEPENDS("pkgconfig-depends"),//$NON-NLS-1$ FIELD_CPP_OPTIONS("cpp-options"),//$NON-NLS-1$ FIELD_TEST_MODULE("test-module"),//$NON-NLS-1$ FIELD_X_USES_TEST_FRAMEWORK("x-uses-tf"),//$NON-NLS-1$ FIELD_MANUAL("manual"),//$NON-NLS-1$ VALUE_EXITCODE_STDIO_1_0("exitcode-stdio-1.0",CabalSyntaxType.VALUE),//$NON-NLS-1$ VALUE_DETAILED_0_9("detailed-0.9",CabalSyntaxType.VALUE),//$NON-NLS-1$ ; public enum CabalSyntaxType { FIELD, VALUE, SECTION } private final String cabalName; private final CabalSyntaxType type; private CabalSyntax(final String cabalName){ this.cabalName=cabalName; type=CabalSyntaxType.FIELD; } private CabalSyntax(final String cabalName,final boolean sectionHeader){ this.cabalName=cabalName; this.type=sectionHeader?CabalSyntaxType.SECTION:CabalSyntaxType.FIELD; } private CabalSyntax(final String cabalName,final CabalSyntaxType type){ this.cabalName=cabalName; this.type=type; } public CabalSyntaxType getType() { return type; } public boolean isSectionHeader() { return CabalSyntaxType.SECTION.equals(type); } @Override public String toString() { return cabalName; } public String getCabalName() { return cabalName; } public static final Map<String,CabalSyntax> sections=new HashMap<>(); static { for (CabalSyntax cs:CabalSyntax.values() ){ if (cs.isSectionHeader()){ sections.put(cs.getCabalName().toLowerCase(Locale.ENGLISH),cs); } } } }