]> git.wincent.com - docvim.git/blob - lib/Text/Docvim/Options.hs
Add additional blank line above headings
[docvim.git] / lib / Text / Docvim / Options.hs
1 -- | Options parser for the docvim executable.
2 module Text.Docvim.Options (Options(..), options) where
3
4 import Options.Applicative
5 import Data.Version
6 import qualified Paths_docvim
7
8 -- TODO: figure out where (and if!) to expand ~ and such in path options
9 data Options = Options
10   { outfiles :: Maybe [FilePath]
11   , debug :: Bool
12   , directory :: String
13   , verbose :: Bool }
14
15 parseOutfiles :: Parser [String]
16 parseOutfiles = some $ argument str
17   (  metavar "OUTFILES..."
18   <> help (unlines [ "Target file(s) for generated output"
19                    , "(default: standard output)" ]))
20
21 version :: Parser (a -> a)
22 version = infoOption (showVersion Paths_docvim.version)
23   (  long "version"
24   <> help "Print version information" )
25
26 parseDebug :: Parser Bool
27 parseDebug = switch
28   $  long "debug"
29   <> short 'd'
30   <> help "Print debug information during processing"
31
32 parseDirectory :: Parser String
33 parseDirectory = strOption
34   $  long "directory"
35   <> short 'c'
36   <> metavar "DIRECTORY"
37   <> value "."
38   <> showDefault
39   <> help "Change to DIRECTORY before processing"
40
41 parseVerbose :: Parser Bool
42 parseVerbose = switch
43   $  long "verbose"
44   <> short 'v'
45   <> help "Be verbose during processing"
46
47 parseOptions :: Parser Options
48 parseOptions = Options
49   <$> optional parseOutfiles
50   <*> parseDebug
51   <*> parseDirectory
52   <*> parseVerbose
53
54 options :: IO Options
55 options = execParser $ info (helper <*> version <*> parseOptions)
56   (  fullDesc
57   <> progDesc "Generate documentation for a Vim plug-in"
58   <> header "docvim - a documentation generator for Vim plug-ins" )