packages feed

mulang-3.5.2: src/Language/Mulang/Analyzer/DomainLanguageCompiler.hs

module Language.Mulang.Analyzer.DomainLanguageCompiler (
  emptyDomainLanguage,
  compileDomainLanguage) where

import           Data.Maybe (fromMaybe)
import           Language.Mulang.Analyzer.Analysis
import qualified Language.Mulang.DomainLanguage as DL
import           Text.Inflections.Tokenizer (camelCase, rubyCase, snakeCase)
import           Text.Dictionary (fromFile, toDictionary)


emptyDomainLanguage :: DomainLanguage
emptyDomainLanguage = DomainLanguage Nothing Nothing Nothing Nothing

compileDomainLanguage :: Maybe DomainLanguage -> IO DL.DomainLanguage
compileDomainLanguage Nothing                                 = compileDomainLanguage (Just emptyDomainLanguage)
compileDomainLanguage (Just (DomainLanguage path style size jargon)) = do
  dictionary <- compileDictionay path
  return $ DL.DomainLanguage dictionary (compileStyle style) (compileSize size) (compileJargon jargon)

  where
    compileDictionay (Just path) = fromFile path
    compileDictionay _           = return $ toDictionary []

    compileSize = fromMaybe 3

    compileStyle (Just SnakeCase) = snakeCase
    compileStyle (Just RubyCase)  = rubyCase
    compileStyle _                = camelCase

    compileJargon = fromMaybe []