-
-
Notifications
You must be signed in to change notification settings - Fork 3.5k
/
Copy pathpandoc.hs
104 lines (96 loc) · 2.98 KB
/
pandoc.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
{-# LANGUAGE CPP #-}
{-# LANGUAGE TemplateHaskell #-}
{- |
Module : Main
Copyright : Copyright (C) 2006-2024 John MacFarlane
License : GNU GPL, version 2 or above
Maintainer : John MacFarlane <jgm@berkeley@edu>
Stability : alpha
Portability : portable
Parses command-line options and calls the appropriate readers and
writers.
-}
module Main where
import qualified Control.Exception as E
import System.Environment (getArgs, getProgName)
import Text.Pandoc.App ( convertWithOpts, defaultOpts, options
, parseOptionsFromArgs, handleOptInfo )
import Text.Pandoc.Error (handleError)
import System.Exit (exitSuccess)
import Data.Monoid (Any(..))
import PandocCLI.Lua
import PandocCLI.Server
import qualified Text.Pandoc.UTF8 as UTF8
import Text.Pandoc.Version (pandocVersion)
import Text.Pandoc.Data (defaultUserDataDir)
import Text.Pandoc.Scripting (ScriptingEngine(..))
import Data.Version (showVersion)
import qualified Data.Text as T
#ifdef NIGHTLY
import qualified Language.Haskell.TH as TH
import Data.Time
#endif
#ifdef NIGHTLY
versionSuffix :: String
versionSuffix = "-nightly-" ++
$(TH.stringE =<<
TH.runIO (formatTime defaultTimeLocale "%F" <$> Data.Time.getCurrentTime))
#else
versionSuffix :: String
versionSuffix = ""
#endif
main :: IO ()
main = E.handle (handleError . Left) $ do
prg <- getProgName
rawArgs <- getArgs
let hasVersion = getAny $ foldMap
(\s -> Any (s == "-v" || s == "--version"))
(takeWhile (/= "--") rawArgs)
let versionOr action = if hasVersion then versionInfo else action
case prg of
"pandoc-server.cgi" -> versionOr runCGI
"pandoc-server" -> versionOr $ runServer rawArgs
"pandoc-lua" -> runLuaInterpreter prg rawArgs
_ ->
case rawArgs of
"lua" : args -> runLuaInterpreter "pandoc lua" args
"server": args -> versionOr $ runServer args
args -> versionOr $ do
engine <- getEngine
res <- parseOptionsFromArgs options defaultOpts prg args
case res of
Left e -> handleOptInfo engine e
Right opts -> convertWithOpts engine opts
copyrightMessage :: String
copyrightMessage =
"Copyright (C) 2006-2024 John MacFarlane. Web: https://pandoc.org\n"
++
"This is free software; see the source for copying conditions. There is no\n"
++
"warranty, not even for merchantability or fitness for a particular purpose."
flagSettings :: String
flagSettings = "Features: " ++
#ifdef VERSION_pandoc_server
"+server"
#else
"-server"
#endif
++ " " ++
#ifdef VERSION_hslua_cli
"+lua"
#else
"-lua"
#endif
versionInfo :: IO ()
versionInfo = do
progname <- getProgName
defaultDatadir <- defaultUserDataDir
scriptingEngine <- getEngine
UTF8.putStr $ T.unlines $ map T.pack
[ progname ++ " " ++ showVersion pandocVersion ++ versionSuffix
, flagSettings
, "Scripting engine: " ++ T.unpack (engineName scriptingEngine)
, "User data directory: " ++ defaultDatadir
, copyrightMessage
]
exitSuccess