module Main where import Language.Haskell.Colorize import System.Console.GetOpt import System.Environment(getArgs) import System.IO import System.Exit(exitFailure) import Control.Monad(when) main :: IO () main = do opts <- getOptions when (optHelp opts) showUsage let style = case optStyle opts of ANSILight -> ansiLight ANSIDark -> ansiDark interact (\xs -> render style xs "") getOptions :: IO Options getOptions = do (fs,non_opt,errs) <- getOpt Permute flags `fmap` getArgs case (non_opt,errs) of ([],[]) -> return (foldr ($) defaultOptions fs) _ -> mapM_ (hPutStrLn stderr) errs >> showUsage -- | Print usage info and quit showUsage :: IO a showUsage = do hPutStrLn stderr (usageInfo "Available options:" flags) exitFailure flags :: [ OptDescr (Options -> Options) ] flags = [ Option [] ["ansi-dark"] (NoArg $ \o -> o { optStyle = ANSIDark }) "Generate ANSI output for a dark terminal (default)" , Option [] ["ansi-light"] (NoArg $ \o -> o { optStyle = ANSILight }) "Generate ANSI output for a light terminal" , Option ['h'] ["help"] (NoArg $ \o -> o { optHelp = True }) "Display this help." ] data OptStyle = ANSILight | ANSIDark data Options = Options { optStyle :: OptStyle , optHelp :: Bool } defaultOptions :: Options defaultOptions = Options { optStyle = ANSIDark , optHelp = False }