-- | application code
module Main where
import System.Console.GetOpt
import Language.Haskell.DataFilesGen
import System.Environment
import qualified Data.Set as S
import Data.Default
-- | Application entry point
main :: IO ()
main = do
args <- getArgs
(opts,fps) <- parseOpts args
res <- mapM (generateList opts) fps
let ind = replicate (optIndent opts) ' '
mapM_ (\s->putStrLn (ind ++ s)) $ concat res
-- | Parse options
parseOpts :: [String] -> IO (Options,[String])
parseOpts argv =
case getOpt Permute options argv of
(o,n,[] ) -> return (foldl (flip id) def o, n)
(_,_,errs) -> ioError (userError (concat errs ++ usageInfo header options))
where header = "Usage: data-files-gen [OPTION...] dir"
-- | Option description
options :: [OptDescr (Options -> Options)]
options = [
Option ['d'] ["dir"]
(ReqArg (\f opts -> opts { optExcludeDirs = S.insert f $ optExcludeDirs opts })
"DIR")
"directory name to exclude"
,Option ['e'] ["ext"]
(ReqArg (\f opts -> opts { optExcludeExts = S.insert ("."++f) $ optExcludeExts opts })
"EXT")
"extension to exclude"
,Option ['i'] ["indent"]
(ReqArg (\i opts -> opts { optIndent = read i })
"INT")
"number of spaces to use for indentation"
]