blob: d110c6f622fbea15c3f74b7acdf905378d6e559d (
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
|
{-# 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, versionInfo )
import Text.Pandoc.Error (handleError)
import Data.Monoid (Any(..))
import PandocCLI.Lua
import PandocCLI.Server
import Text.Pandoc.Scripting (ScriptingEngine(..))
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 versionInfoCLI 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
getFeatures :: [String]
getFeatures = [
#ifdef VERSION_pandoc_server
"+server"
#else
"-server"
#endif
,
#ifdef VERSION_hslua_cli
"+lua"
#else
"-lua"
#endif
]
versionInfoCLI :: IO ()
versionInfoCLI = do
scriptingEngine <- getEngine
versionInfo getFeatures
(Just $ T.unpack (engineName scriptingEngine))
versionSuffix
|