module System.Console.CmdArgs.Implicit.Reform(reform) where
import System.Console.CmdArgs.Implicit.Local
import System.Console.CmdArgs.Implicit.Type
import System.Console.CmdArgs.Verbosity
import Data.Generics.Any
import Data.List
import Data.Maybe
reform :: Prog_ -> CmdArgs Any -> Maybe [String]
reform Prog_{..} CmdArgs{..} = Just $
f "help" progHelpArg (isJust cmdArgsHelp) ++
f "version" progVersionArg (isJust cmdArgsVersion) ++
f "verbose" (fst progVerbosityArgs) (cmdArgsVerbosity == Just Loud) ++
f "quiet" (snd progVerbosityArgs) (cmdArgsVerbosity == Just Quiet)
where
f ex (Just x) True = pickArg $ builtinNames x ++ [ex]
f _ _ _ = []
pickArg :: [String] -> [String]
pickArg xs = case partition ((==) 1 . length) xs of
(_, x:_) -> ["--" ++ x]
(x:_, _) -> ["-" ++ x]
_ -> []