module DDC.Build.Language ( Language (..) , Bundle (..) , Fragment (..) , languages , languageOfExtension) where import DDC.Core.Fragment import DDC.Build.Language.Base import DDC.Build.Language.Lite as Lite import DDC.Build.Language.Salt as Salt import DDC.Build.Language.Eval as Eval import DDC.Build.Language.Flow as Flow import DDC.Build.Language.Zero as Zero import DDC.Build.Language.Tetra as Tetra -- | Supported language profiles. -- -- One of @Tetra@, @Lite@, @Salt@, @Eval@, @Flow@, @Zero@. languages :: [(String, Language)] languages = [ ( "Tetra", Tetra.language) , ( "Lite", Lite.language) , ( "Salt", Salt.language) , ( "Eval", Eval.language) , ( "Flow", Flow.language) , ( "Zero", Zero.language) ] -- | Return the language fragment definition corresponding to the given -- file extension. eg @dcl@ gives the definition of the Lite language. languageOfExtension :: String -> Maybe Language languageOfExtension ext = let -- Strip of dots at the front. -- the 'takeExtension' function from System.FilePath -- doens't do this itself. ext' = case ext of '.' : rest -> rest _ -> ext in case ext' of "dct" -> Just Tetra.language "dcl" -> Just Lite.language "dcs" -> Just Salt.language "dcv" -> Just Eval.language "dcf" -> Just Flow.language "dcz" -> Just Zero.language _ -> Nothing