@@ -30,21 +30,37 @@ import qualified Paths_purescript as Paths
30import System.Exit (exitSuccess, exitFailure)
30import System.Exit (exitSuccess, exitFailure)
31import System.IO (hPutStrLn, stderr)
31import System.IO (hPutStrLn, stderr)
36+-- Available output formats
37+data Format = Markdown -- Output documentation in Markdown format
38+ | Ctags -- Output ctags symbol index suitable for use with vi
39+ | Etags -- Output etags symbol index suitable for use with emacs
33data PSCDocsOptions = PSCDocsOptions
41data PSCDocsOptions = PSCDocsOptions
42+ { pscdFormat :: Format
34− { pscdInputFiles :: [FilePath]
43+ , pscdInputFiles :: [FilePath]
37docgen :: PSCDocsOptions -> IO ()
46docgen :: PSCDocsOptions -> IO ()
38−docgen (PSCDocsOptions input) = do
47+docgen (PSCDocsOptions fmt input) = do
39 e <- P.parseModulesFromFiles (fromMaybe "") <$> mapM (fmap (first Just) . parseFile) (nub input)
48 e <- P.parseModulesFromFiles (fromMaybe "") <$> mapM (fmap (first Just) . parseFile) (nub input)
41 Left err -> do
50 Left err -> do
42 hPutStrLn stderr $ show err
51 hPutStrLn stderr $ show err
43 exitFailure
52 exitFailure
44 Right ms -> do
53 Right ms -> do
45− putStrLn . runDocs $ renderModules (map snd ms)
55+ Markdown -> putStrLn . runDocs $ renderModules (map snd ms)
56+ Etags -> ldump $ dumpEtags $ pairs ms
57+ Ctags -> ldump $ dumpCtags $ pairs ms
46 exitSuccess
58 exitSuccess
47−
59+ where pairs :: [(Maybe String, m)] -> [(String, m)]
60+ pairs = map (\(k,m) -> (fromMaybe "" k,m))
61+ ldump :: [String] -> IO ()
62+ ldump = mapM_ putStrLn
48parseFile :: FilePath -> IO (FilePath, String)
64parseFile :: FilePath -> IO (FilePath, String)
49parseFile input = (,) input <$> readFile input
65parseFile input = (,) input <$> readFile input
@@ -222,8 +238,20 @@ inputFile = strArgument $
222 metavar "FILE"
238 metavar "FILE"
223 <> help "The input .purs file(s)"
239 <> help "The input .purs file(s)"
241+instance Read Format where
242+ readsPrec _ "etags" = [(Etags, "")]
243+ readsPrec _ "ctags" = [(Ctags, "")]
244+ readsPrec _ "markdown" = [(Markdown, "")]
247+format :: Parser Format
248+format = option auto $ value Markdown
251+ <> help "Set output FORMAT (markdown | etags | ctags)"
225pscDocsOptions :: Parser PSCDocsOptions
253pscDocsOptions :: Parser PSCDocsOptions
226−pscDocsOptions = PSCDocsOptions <$> many inputFile
254+pscDocsOptions = PSCDocsOptions <$> format <*> many inputFile
228main :: IO ()
256main :: IO ()
229main = execParser opts >>= docgen
257main = execParser opts >>= docgen