blob: 9be595c4820800e4a98bb23671a6b67260fc7c3e (
plain)
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
105
|
{-# LANGUAGE CPP #-}
{-# LANGUAGE TemplateHaskell #-}
{- |
Module : Main
Copyright : Copyright (C) 2006-2023 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 qualified Text.Pandoc.UTF8 as UTF8
import System.Exit (exitSuccess)
import Data.Monoid (Any(..))
import Control.Monad (when)
import PandocCLI.Lua
import PandocCLI.Server
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 <- map UTF8.decodeArg <$> getArgs
let hasVersion = getAny $ foldMap
(\s -> Any (s == "-v" || s == "--version"))
(takeWhile (/= "--") rawArgs)
when hasVersion versionInfo
case prg of
"pandoc-server.cgi" -> runCGI
"pandoc-server" -> runServer rawArgs
"pandoc-lua" -> runLuaInterpreter prg rawArgs
_ ->
case rawArgs of
"lua" : args -> runLuaInterpreter "pandoc lua" args
"server": args -> runServer args
args -> 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-2023 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
putStr $ unlines
[ progname ++ " " ++ showVersion pandocVersion ++ versionSuffix
, flagSettings
, "Scripting engine: " ++ T.unpack (engineName scriptingEngine)
, "User data directory: " ++ defaultDatadir
, copyrightMessage
]
exitSuccess
|