aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pandoc-cli/src/pandoc.hs39
-rw-r--r--src/Text/Pandoc/App.hs3
-rw-r--r--src/Text/Pandoc/App/CommandLineOptions.hs28
3 files changed, 34 insertions, 36 deletions
diff --git a/pandoc-cli/src/pandoc.hs b/pandoc-cli/src/pandoc.hs
index 9e82d02bc..d110c6f62 100644
--- a/pandoc-cli/src/pandoc.hs
+++ b/pandoc-cli/src/pandoc.hs
@@ -16,17 +16,12 @@ module Main where
import qualified Control.Exception as E
import System.Environment (getArgs, getProgName)
import Text.Pandoc.App ( convertWithOpts, defaultOpts, options
- , parseOptionsFromArgs, handleOptInfo )
+ , parseOptionsFromArgs, handleOptInfo, versionInfo )
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
@@ -51,7 +46,7 @@ main = E.handle (handleError . Left) $ do
let hasVersion = getAny $ foldMap
(\s -> Any (s == "-v" || s == "--version"))
(takeWhile (/= "--") rawArgs)
- let versionOr action = if hasVersion then versionInfo else action
+ let versionOr action = if hasVersion then versionInfoCLI else action
case prg of
"pandoc-server.cgi" -> versionOr runCGI
"pandoc-server" -> versionOr $ runServer rawArgs
@@ -67,37 +62,25 @@ main = E.handle (handleError . Left) $ do
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: " ++
+getFeatures :: [String]
+getFeatures = [
#ifdef VERSION_pandoc_server
"+server"
#else
"-server"
#endif
- ++ " " ++
+ ,
#ifdef VERSION_hslua_cli
"+lua"
#else
"-lua"
#endif
+ ]
-versionInfo :: IO ()
-versionInfo = do
- defaultDatadir <- defaultUserDataDir
+versionInfoCLI :: IO ()
+versionInfoCLI = do
scriptingEngine <- getEngine
- UTF8.putStr $ T.unlines $ map T.pack
- [ "pandoc " ++ showVersion pandocVersion ++ versionSuffix
- , flagSettings
- , "Scripting engine: " ++ T.unpack (engineName scriptingEngine)
- , "User data directory: " ++ defaultDatadir
- , copyrightMessage
- ]
- exitSuccess
+ versionInfo getFeatures
+ (Just $ T.unpack (engineName scriptingEngine))
+ versionSuffix
diff --git a/src/Text/Pandoc/App.hs b/src/Text/Pandoc/App.hs
index 8585fc555..a5a117c04 100644
--- a/src/Text/Pandoc/App.hs
+++ b/src/Text/Pandoc/App.hs
@@ -26,6 +26,7 @@ module Text.Pandoc.App (
, parseOptionsFromArgs
, options
, applyFilters
+ , versionInfo
) where
import qualified Control.Exception as E
import Control.Monad ( (>=>), when, forM, forM_ )
@@ -55,7 +56,7 @@ import Text.Pandoc.Image (svgToPng)
import Text.Pandoc.App.Opt (Opt (..), LineEnding (..), defaultOpts,
IpynbOutput (..), OptInfo(..))
import Text.Pandoc.App.CommandLineOptions (parseOptions, parseOptionsFromArgs,
- options, handleOptInfo)
+ options, handleOptInfo, versionInfo)
import Text.Pandoc.App.Input (InputParameters (..), readInput)
import Text.Pandoc.App.OutputSettings (OutputSettings (..), optToOutputSettings,
sandbox')
diff --git a/src/Text/Pandoc/App/CommandLineOptions.hs b/src/Text/Pandoc/App/CommandLineOptions.hs
index db7d5a1ac..b8a4e2fc9 100644
--- a/src/Text/Pandoc/App/CommandLineOptions.hs
+++ b/src/Text/Pandoc/App/CommandLineOptions.hs
@@ -21,6 +21,7 @@ module Text.Pandoc.App.CommandLineOptions (
, options
, engines
, setVariable
+ , versionInfo
) where
import Control.Monad.Trans
import Control.Monad.State.Strict
@@ -46,6 +47,7 @@ import System.IO (stdout)
import Text.DocTemplates (Context (..), ToContext (toVal), Val (..))
import Text.Pandoc
import Text.Pandoc.Builder (setMeta)
+import Data.Version (showVersion)
import Text.Pandoc.App.Opt (Opt (..), LineEnding (..), IpynbOutput (..),
DefaultsState (..), applyDefaults,
fullDefaultsPath, OptInfo(..))
@@ -193,13 +195,7 @@ handleOptInfo engine info = E.handle (handleError . Left) $ do
,"text-styles"])
,confNumFormat = Generic
,confTrailingNewline = True} sty
- VersionInfo -> do
- defaultDatadir <- defaultUserDataDir
- UTF8.hPutStrLn stdout
- $ T.pack
- $ "pandoc " ++ T.unpack pandocVersionText ++
- "\nUser data directory: " ++ defaultDatadir ++
- ('\n':copyrightMessage)
+ VersionInfo -> versionInfo [] Nothing ""
Help -> do
prg <- getProgName
UTF8.hPutStr stdout (T.pack $ usageMessage prg options)
@@ -1269,3 +1265,21 @@ normalizePath fp =
#else
normalizePath = id
#endif
+
+-- | Print version information with customizable features and scripting engine
+versionInfo :: [String] -> Maybe String -> String -> IO ()
+versionInfo features mbScriptingEngineName suffix = do
+ defaultDatadir <- defaultUserDataDir
+ let featuresLine = if null features
+ then []
+ else ["Features: " ++ unwords features]
+ let scriptingLine = case mbScriptingEngineName of
+ Nothing -> []
+ Just name -> ["Scripting engine: " ++ name]
+ UTF8.putStr $ T.unlines $ map T.pack $
+ ["pandoc " ++ showVersion pandocVersion ++ suffix] ++
+ featuresLine ++
+ scriptingLine ++
+ ["User data directory: " ++ defaultDatadir,
+ copyrightMessage]
+ exitSuccess