aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/App
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Pandoc/App')
-rw-r--r--src/Text/Pandoc/App/CommandLineOptions.hs101
-rw-r--r--src/Text/Pandoc/App/FormatHeuristics.hs6
-rw-r--r--src/Text/Pandoc/App/Opt.hs48
-rw-r--r--src/Text/Pandoc/App/OutputSettings.hs63
4 files changed, 111 insertions, 107 deletions
diff --git a/src/Text/Pandoc/App/CommandLineOptions.hs b/src/Text/Pandoc/App/CommandLineOptions.hs
index c6f88af24..56b1f780a 100644
--- a/src/Text/Pandoc/App/CommandLineOptions.hs
+++ b/src/Text/Pandoc/App/CommandLineOptions.hs
@@ -2,6 +2,7 @@
{-# LANGUAGE CPP #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
+{-# LANGUAGE OverloadedStrings #-}
{- |
Module : Text.Pandoc.App.CommandLineOptions
Copyright : Copyright (C) 2006-2019 John MacFarlane
@@ -45,7 +46,7 @@ import Text.Pandoc.Builder (setMeta)
import Text.Pandoc.App.Opt (Opt (..), LineEnding (..), IpynbOutput (..))
import Text.Pandoc.Filter (Filter (..))
import Text.Pandoc.Highlighting (highlightingStyles)
-import Text.Pandoc.Shared (ordNub, safeRead, defaultUserDataDirs)
+import Text.Pandoc.Shared (ordNub, elemText, safeStrRead, defaultUserDataDirs)
import Text.Printf
#ifdef EMBED_DATA_FILES
@@ -78,7 +79,7 @@ parseOptions options' defaults = do
unrecognizedOpts
unless (null errors && null unknownOptionErrors) $
- E.throwIO $ PandocOptionError $
+ E.throwIO $ PandocOptionError $ T.pack $
concat errors ++ unlines unknownOptionErrors ++
("Try " ++ prg ++ " --help for more information.")
@@ -92,7 +93,7 @@ latexEngines = ["pdflatex", "lualatex", "xelatex", "latexmk", "tectonic"]
htmlEngines :: [String]
htmlEngines = ["wkhtmltopdf", "weasyprint", "prince"]
-engines :: [(String, String)]
+engines :: [(Text, String)]
engines = map ("html",) htmlEngines ++
map ("html5",) htmlEngines ++
map ("latex",) latexEngines ++
@@ -119,13 +120,13 @@ options =
[ Option "fr" ["from","read"]
(ReqArg
(\arg opt -> return opt { optFrom =
- Just (map toLower arg) })
+ Just (T.toLower $ T.pack arg) })
"FORMAT")
""
, Option "tw" ["to","write"]
(ReqArg
- (\arg opt -> return opt { optTo = Just arg })
+ (\arg opt -> return opt { optTo = Just $ T.pack arg })
"FORMAT")
""
@@ -218,7 +219,7 @@ options =
, Option "" ["toc-depth"]
(ReqArg
(\arg opt ->
- case safeRead arg of
+ case safeStrRead arg of
Just t | t >= 1 && t <= 6 ->
return opt { optTOCDepth = t }
_ -> E.throwIO $ PandocOptionError
@@ -234,7 +235,7 @@ options =
, Option "" ["number-offset"]
(ReqArg
(\arg opt ->
- case safeRead ('[':arg ++ "]") of
+ case safeStrRead ("[" <> arg <> "]") of
Just ns -> return opt { optNumberOffset = ns,
optNumberSections = True }
_ -> E.throwIO $ PandocOptionError
@@ -255,7 +256,7 @@ options =
"default" -> return opt{ optTopLevelDivision =
TopLevelDefault }
_ -> E.throwIO $ PandocOptionError $
- "Top-level division must be " ++
+ "Top-level division must be " <>
"section, chapter, part, or default" )
"section|chapter|part")
"" -- "Use top-level division type in LaTeX, ConTeXt, DocBook"
@@ -307,7 +308,7 @@ options =
, Option "" ["highlight-style"]
(ReqArg
(\arg opt ->
- return opt{ optHighlightStyle = Just arg })
+ return opt{ optHighlightStyle = Just $ T.pack arg })
"STYLE|FILE")
"" -- "Style for highlighted code"
@@ -328,7 +329,7 @@ options =
, Option "" ["dpi"]
(ReqArg
(\arg opt ->
- case safeRead arg of
+ case safeStrRead arg of
Just t | t > 0 -> return opt { optDpi = t }
_ -> E.throwIO $ PandocOptionError
"dpi must be a number greater than 0")
@@ -351,7 +352,7 @@ options =
, Option "" ["columns"]
(ReqArg
(\arg opt ->
- case safeRead arg of
+ case safeStrRead arg of
Just t | t > 0 -> return opt { optColumns = t }
_ -> E.throwIO $ PandocOptionError
"columns must be a number greater than 0")
@@ -366,7 +367,7 @@ options =
, Option "" ["tab-stop"]
(ReqArg
(\arg opt ->
- case safeRead arg of
+ case safeStrRead arg of
Just t | t > 0 -> return opt { optTabStop = t }
_ -> E.throwIO $ PandocOptionError
"tab-stop must be a number greater than 0")
@@ -379,7 +380,7 @@ options =
let b = takeBaseName arg
if b `elem` pdfEngines
then return opt { optPdfEngine = Just arg }
- else E.throwIO $ PandocOptionError $ "pdf-engine must be one of "
+ else E.throwIO $ PandocOptionError $ T.pack $ "pdf-engine must be one of "
++ intercalate ", " pdfEngines)
"PROGRAM")
"" -- "Name of program to use in generating PDF"
@@ -410,7 +411,7 @@ options =
(\arg opt -> do
let (key, val) = splitField arg
return opt{ optRequestHeaders =
- (key, val) : optRequestHeaders opt })
+ (T.pack key, T.pack val) : optRequestHeaders opt })
"NAME:VALUE")
""
@@ -422,14 +423,15 @@ options =
, Option "" ["indented-code-classes"]
(ReqArg
- (\arg opt -> return opt { optIndentedCodeClasses = words $
- map (\c -> if c == ',' then ' ' else c) arg })
+ (\arg opt -> return opt { optIndentedCodeClasses = T.words $
+ T.map (\c -> if c == ',' then ' ' else c) $
+ T.pack arg })
"STRING")
"" -- "Classes (whitespace- or comma-separated) to use for indented code-blocks"
, Option "" ["default-image-extension"]
(ReqArg
- (\arg opt -> return opt { optDefaultImageExtension = arg })
+ (\arg opt -> return opt { optDefaultImageExtension = T.pack arg })
"extension")
"" -- "Default extension for extensionless images"
@@ -450,7 +452,7 @@ options =
, Option "" ["shift-heading-level-by"]
(ReqArg
(\arg opt ->
- case safeRead arg of
+ case safeStrRead arg of
Just t ->
return opt{ optShiftHeadingLevelBy = t }
_ -> E.throwIO $ PandocOptionError
@@ -463,7 +465,7 @@ options =
(\arg opt -> do
deprecatedOption "--base-header-level"
"Use --shift-heading-level-by instead."
- case safeRead arg of
+ case safeStrRead arg of
Just t | t > 0 && t < 6 ->
return opt{ optShiftHeadingLevelBy = t - 1 }
_ -> E.throwIO $ PandocOptionError
@@ -486,7 +488,7 @@ options =
"accept" -> return AcceptChanges
"reject" -> return RejectChanges
"all" -> return AllChanges
- _ -> E.throwIO $ PandocOptionError
+ _ -> E.throwIO $ PandocOptionError $ T.pack
("Unknown option for track-changes: " ++ arg)
return opt { optTrackChanges = action })
"accept|reject|all")
@@ -509,7 +511,7 @@ options =
"block" -> return EndOfBlock
"section" -> return EndOfSection
"document" -> return EndOfDocument
- _ -> E.throwIO $ PandocOptionError
+ _ -> E.throwIO $ PandocOptionError $ T.pack
("Unknown option for reference-location: " ++ arg)
return opt { optReferenceLocation = action })
"block|section|document")
@@ -533,7 +535,7 @@ options =
, Option "" ["slide-level"]
(ReqArg
(\arg opt ->
- case safeRead arg of
+ case safeStrRead arg of
Just t | t >= 1 && t <= 6 ->
return opt { optSlideLevel = Just t }
_ -> E.throwIO $ PandocOptionError
@@ -559,7 +561,7 @@ options =
"references" -> return ReferenceObfuscation
"javascript" -> return JavascriptObfuscation
"none" -> return NoObfuscation
- _ -> E.throwIO $ PandocOptionError
+ _ -> E.throwIO $ PandocOptionError $ T.pack
("Unknown obfuscation method: " ++ arg)
return opt { optEmailObfuscation = method })
"none|javascript|references")
@@ -567,7 +569,7 @@ options =
, Option "" ["id-prefix"]
(ReqArg
- (\arg opt -> return opt { optIdentifierPrefix = arg })
+ (\arg opt -> return opt { optIdentifierPrefix = T.pack arg })
"STRING")
"" -- "Prefix to add to automatically generated HTML identifiers"
@@ -620,7 +622,7 @@ options =
, Option "" ["epub-chapter-level"]
(ReqArg
(\arg opt ->
- case safeRead arg of
+ case safeStrRead arg of
Just t | t >= 1 && t <= 6 ->
return opt { optEpubChapterLevel = t }
_ -> E.throwIO $ PandocOptionError
@@ -685,15 +687,15 @@ options =
(OptArg
(\arg opt -> do
let url' = fromMaybe "https://latex.codecogs.com/png.latex?" arg
- return opt { optHTMLMathMethod = WebTeX url' })
+ return opt { optHTMLMathMethod = WebTeX $ T.pack url' })
"URL")
"" -- "Use web service for HTML math"
, Option "" ["mathjax"]
(OptArg
(\arg opt -> do
- let url' = fromMaybe (defaultMathJaxURL ++
- "tex-mml-chtml.js") arg
+ let url' = maybe (defaultMathJaxURL <>
+ "tex-mml-chtml.js") T.pack arg
return opt { optHTMLMathMethod = MathJax url'})
"URL")
"" -- "Use MathJax for HTML math"
@@ -703,7 +705,7 @@ options =
(\arg opt ->
return opt
{ optHTMLMathMethod = KaTeX $
- fromMaybe defaultKaTeXURL arg })
+ maybe defaultKaTeXURL T.pack arg })
"URL")
"" -- Use KaTeX for HTML Math
@@ -763,7 +765,7 @@ options =
UTF8.hPutStrLn stdout $ printf tpl allopts
(unwords readersNames)
(unwords writersNames)
- (unwords $ map fst highlightingStyles)
+ (unwords $ map (T.unpack . fst) highlightingStyles)
(unwords datafiles)
exitSuccess ))
"" -- "Print bash completion script"
@@ -790,12 +792,12 @@ options =
let allExts =
case arg of
Nothing -> extensionsFromList extList
- Just fmt -> getAllExtensions fmt
+ Just fmt -> getAllExtensions $ T.pack fmt
let defExts =
case arg of
Nothing -> getDefaultExtensions
"markdown"
- Just fmt -> getDefaultExtensions fmt
+ Just fmt -> getDefaultExtensions $ T.pack fmt
let showExt x =
(if extensionEnabled x defExts
then '+'
@@ -823,7 +825,7 @@ options =
, Option "" ["list-highlight-styles"]
(NoArg
(\_ -> do
- mapM_ (UTF8.hPutStrLn stdout . fst) highlightingStyles
+ mapM_ (UTF8.hPutStrLn stdout . T.unpack . fst) highlightingStyles
exitSuccess ))
""
@@ -835,11 +837,11 @@ options =
Nothing -> UTF8.hPutStr stdout
templ <- runIO $ do
setUserDataDir Nothing
- getDefaultTemplate arg
+ getDefaultTemplate (T.pack arg)
case templ of
Right t
| T.null t -> -- e.g. for docx, odt, json:
- E.throwIO $ PandocCouldNotFindDataFileError
+ E.throwIO $ PandocCouldNotFindDataFileError $ T.pack
("templates/default." ++ arg)
| otherwise -> write . T.unpack $ t
Left e -> E.throwIO e
@@ -890,7 +892,7 @@ options =
(\_ -> do
prg <- getProgName
defaultDatadirs <- defaultUserDataDirs
- UTF8.hPutStrLn stdout (prg ++ " " ++ pandocVersion ++
+ UTF8.hPutStrLn stdout (prg ++ " " ++ T.unpack pandocVersion ++
compileInfo ++ "\nDefault user data directory: " ++
intercalate " or " defaultDatadirs ++
('\n':copyrightMessage))
@@ -963,14 +965,14 @@ handleUnrecognizedOption x =
(("Unknown option " ++ x ++ ".") :)
readersNames :: [String]
-readersNames = sort (map fst (readers :: [(String, Reader PandocIO)]))
+readersNames = sort (map (T.unpack . fst) (readers :: [(Text, Reader PandocIO)]))
writersNames :: [String]
-writersNames = sort (map fst (writers :: [(String, Writer PandocIO)]))
+writersNames = sort (map (T.unpack . fst) (writers :: [(Text, Writer PandocIO)]))
splitField :: String -> (String, String)
splitField s =
- case break (`elem` ":=") s of
+ case break (`elemText` ":=") s of
(k,_:v) -> (k,v)
(k,[]) -> (k,"true")
@@ -991,7 +993,7 @@ applyDefaults opt file = runIOorExplode $ do
case Y.decode1 inp of
Right (f :: Opt -> Opt) -> return $ f opt
Left (errpos, errmsg) -> throwError $
- PandocParseError $
+ PandocParseError $ T.pack $
"Error parsing " ++ fp' ++ " line " ++
show (Y.posLine errpos) ++ " column " ++
show (Y.posColumn errpos) ++ ":\n" ++ errmsg
@@ -1001,18 +1003,18 @@ lookupHighlightStyle s
| takeExtension s == ".theme" = -- attempt to load KDE theme
do contents <- readFileLazy s
case parseTheme contents of
- Left _ -> throwError $ PandocOptionError $
+ Left _ -> throwError $ PandocOptionError $ T.pack $
"Could not read highlighting theme " ++ s
Right sty -> return sty
| otherwise =
- case lookup (map toLower s) highlightingStyles of
+ case lookup (T.toLower $ T.pack s) highlightingStyles of
Just sty -> return sty
- Nothing -> throwError $ PandocOptionError $
+ Nothing -> throwError $ PandocOptionError $ T.pack $
"Unknown highlight-style " ++ s
deprecatedOption :: String -> String -> IO ()
deprecatedOption o msg =
- runIO (report $ Deprecated o msg) >>=
+ runIO (report $ Deprecated (T.pack o) (T.pack msg)) >>=
\r -> case r of
Right () -> return ()
Left e -> E.throwIO e
@@ -1024,13 +1026,14 @@ setVariable key val (Context ctx) =
addMeta :: String -> String -> Meta -> Meta
addMeta k v meta =
- case lookupMeta k meta of
- Nothing -> setMeta k v' meta
+ case lookupMeta k' meta of
+ Nothing -> setMeta k' v' meta
Just (MetaList xs) ->
- setMeta k (MetaList (xs ++ [v'])) meta
- Just x -> setMeta k (MetaList [x, v']) meta
+ setMeta k' (MetaList (xs ++ [v'])) meta
+ Just x -> setMeta k' (MetaList [x, v']) meta
where
v' = readMetaValue v
+ k' = T.pack k
readMetaValue :: String -> MetaValue
readMetaValue s
@@ -1040,7 +1043,7 @@ readMetaValue s
| s == "false" = MetaBool False
| s == "False" = MetaBool False
| s == "FALSE" = MetaBool False
- | otherwise = MetaString s
+ | otherwise = MetaString $ T.pack s
-- On Windows with ghc 8.6+, we need to rewrite paths
-- beginning with \\ to \\?\UNC\. -- See #5127.
diff --git a/src/Text/Pandoc/App/FormatHeuristics.hs b/src/Text/Pandoc/App/FormatHeuristics.hs
index a02d8d15e..25e0a303e 100644
--- a/src/Text/Pandoc/App/FormatHeuristics.hs
+++ b/src/Text/Pandoc/App/FormatHeuristics.hs
@@ -1,4 +1,5 @@
{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE OverloadedStrings #-}
{- |
Module : Text.Pandoc.App.FormatHeuristics
Copyright : Copyright (C) 2006-2019 John MacFarlane
@@ -16,10 +17,11 @@ module Text.Pandoc.App.FormatHeuristics
import Prelude
import Data.Char (toLower)
+import Data.Text (Text)
import System.FilePath (takeExtension)
-- Determine default format based on file extensions.
-formatFromFilePaths :: [FilePath] -> Maybe String
+formatFromFilePaths :: [FilePath] -> Maybe Text
formatFromFilePaths [] = Nothing
formatFromFilePaths (x:xs) =
case formatFromFilePath x of
@@ -27,7 +29,7 @@ formatFromFilePaths (x:xs) =
Nothing -> formatFromFilePaths xs
-- Determine format based on file extension
-formatFromFilePath :: FilePath -> Maybe String
+formatFromFilePath :: FilePath -> Maybe Text
formatFromFilePath x =
case takeExtension (map toLower x) of
".adoc" -> Just "asciidoc"
diff --git a/src/Text/Pandoc/App/Opt.hs b/src/Text/Pandoc/App/Opt.hs
index 6db397147..c0d06e0f4 100644
--- a/src/Text/Pandoc/App/Opt.hs
+++ b/src/Text/Pandoc/App/Opt.hs
@@ -33,7 +33,7 @@ import Text.Pandoc.Options (TopLevelDivision (TopLevelDefault),
ReferenceLocation (EndOfDocument),
ObfuscationMethod (NoObfuscation),
CiteMethod (Citeproc))
-import Text.Pandoc.Shared (camelCaseToHyphenated)
+import Text.Pandoc.Shared (camelCaseStrToHyphenated)
import Text.DocLayout (render)
import Text.DocTemplates (Context(..), Val(..))
import Data.Text (Text, unpack)
@@ -76,8 +76,8 @@ data Opt = Opt
{ optTabStop :: Int -- ^ Number of spaces per tab
, optPreserveTabs :: Bool -- ^ Preserve tabs instead of converting to spaces
, optStandalone :: Bool -- ^ Include header, footer
- , optFrom :: Maybe String -- ^ Reader format
- , optTo :: Maybe String -- ^ Writer format
+ , optFrom :: Maybe Text -- ^ Reader format
+ , optTo :: Maybe Text -- ^ Writer format
, optTableOfContents :: Bool -- ^ Include table of contents
, optShiftHeadingLevelBy :: Int -- ^ Shift heading level by
, optTemplate :: Maybe FilePath -- ^ Custom template
@@ -92,7 +92,7 @@ data Opt = Opt
, optIncremental :: Bool -- ^ Use incremental lists in Slidy/Slideous/S5
, optSelfContained :: Bool -- ^ Make HTML accessible offline
, optHtmlQTags :: Bool -- ^ Use <q> tags in HTML
- , optHighlightStyle :: Maybe String -- ^ Style to use for highlighted code
+ , optHighlightStyle :: Maybe Text -- ^ Style to use for highlighted code
, optSyntaxDefinitions :: [FilePath] -- ^ xml syntax defs to load
, optTopLevelDivision :: TopLevelDivision -- ^ Type of the top-level divisions
, optHTMLMathMethod :: HTMLMathMethod -- ^ Method to print HTML math
@@ -117,9 +117,9 @@ data Opt = Opt
, optColumns :: Int -- ^ Line length in characters
, optFilters :: [Filter] -- ^ Filters to apply
, optEmailObfuscation :: ObfuscationMethod
- , optIdentifierPrefix :: String
+ , optIdentifierPrefix :: Text
, optStripEmptyParagraphs :: Bool -- ^ Strip empty paragraphs
- , optIndentedCodeClasses :: [String] -- ^ Default classes for indented code blocks
+ , optIndentedCodeClasses :: [Text] -- ^ Default classes for indented code blocks
, optDataDir :: Maybe FilePath
, optCiteMethod :: CiteMethod -- ^ Method to output cites
, optListings :: Bool -- ^ Use listings package for code blocks
@@ -128,18 +128,18 @@ data Opt = Opt
, optSlideLevel :: Maybe Int -- ^ Header level that creates slides
, optSetextHeaders :: Bool -- ^ Use atx headers for markdown level 1-2
, optAscii :: Bool -- ^ Prefer ascii output
- , optDefaultImageExtension :: String -- ^ Default image extension
+ , optDefaultImageExtension :: Text -- ^ Default image extension
, optExtractMedia :: Maybe FilePath -- ^ Path to extract embedded media
, optTrackChanges :: TrackChanges -- ^ Accept or reject MS Word track-changes.
, optFileScope :: Bool -- ^ Parse input files before combining
- , optTitlePrefix :: Maybe String -- ^ Prefix for title
+ , optTitlePrefix :: Maybe Text -- ^ Prefix for title
, optCss :: [FilePath] -- ^ CSS files to link to
, optIpynbOutput :: IpynbOutput -- ^ How to treat ipynb output blocks
, optIncludeBeforeBody :: [FilePath] -- ^ Files to include before
, optIncludeAfterBody :: [FilePath] -- ^ Files to include after body
, optIncludeInHeader :: [FilePath] -- ^ Files to include in header
, optResourcePath :: [FilePath] -- ^ Path to search for images etc
- , optRequestHeaders :: [(String, String)] -- ^ Headers for HTTP requests
+ , optRequestHeaders :: [(Text, Text)] -- ^ Headers for HTTP requests
, optEol :: LineEnding -- ^ Style of line-endings to use
, optStripComments :: Bool -- ^ Skip HTML comments
} deriving (Generic, Show)
@@ -167,13 +167,13 @@ doOpt (k',v) = do
"toc" ->
parseYAML v >>= \x -> return (\o -> o{ optTableOfContents = x })
"from" ->
- parseYAML v >>= \x -> return (\o -> o{ optFrom = unpack <$> x })
+ parseYAML v >>= \x -> return (\o -> o{ optFrom = x })
"reader" ->
- parseYAML v >>= \x -> return (\o -> o{ optFrom = unpack <$> x })
+ parseYAML v >>= \x -> return (\o -> o{ optFrom = x })
"to" ->
- parseYAML v >>= \x -> return (\o -> o{ optTo = unpack <$> x })
+ parseYAML v >>= \x -> return (\o -> o{ optTo = x })
"writer" ->
- parseYAML v >>= \x -> return (\o -> o{ optTo = unpack <$> x })
+ parseYAML v >>= \x -> return (\o -> o{ optTo = x })
"shift-heading-level-by" ->
parseYAML v >>= \x -> return (\o -> o{ optShiftHeadingLevelBy = x })
"template" ->
@@ -211,7 +211,7 @@ doOpt (k',v) = do
"html-q-tags" ->
parseYAML v >>= \x -> return (\o -> o{ optHtmlQTags = x })
"highlight-style" ->
- parseYAML v >>= \x -> return (\o -> o{ optHighlightStyle = unpack <$> x })
+ parseYAML v >>= \x -> return (\o -> o{ optHighlightStyle = x })
"syntax-definition" ->
(parseYAML v >>= \x ->
return (\o -> o{ optSyntaxDefinitions = map unpack x }))
@@ -274,12 +274,12 @@ doOpt (k',v) = do
parseYAML v >>= \x -> return (\o -> o{ optEmailObfuscation = x })
"identifier-prefix" ->
parseYAML v >>= \x ->
- return (\o -> o{ optIdentifierPrefix = unpack x })
+ return (\o -> o{ optIdentifierPrefix = x })
"strip-empty-paragraphs" ->
parseYAML v >>= \x -> return (\o -> o{ optStripEmptyParagraphs = x })
"indented-code-classes" ->
parseYAML v >>= \x ->
- return (\o -> o{ optIndentedCodeClasses = map unpack x })
+ return (\o -> o{ optIndentedCodeClasses = x })
"data-dir" ->
parseYAML v >>= \x -> return (\o -> o{ optDataDir = unpack <$> x })
"cite-method" ->
@@ -305,7 +305,7 @@ doOpt (k',v) = do
parseYAML v >>= \x -> return (\o -> o{ optAscii = x })
"default-image-extension" ->
parseYAML v >>= \x ->
- return (\o -> o{ optDefaultImageExtension = unpack x })
+ return (\o -> o{ optDefaultImageExtension = x })
"extract-media" ->
parseYAML v >>= \x ->
return (\o -> o{ optExtractMedia = unpack <$> x })
@@ -314,7 +314,7 @@ doOpt (k',v) = do
"file-scope" ->
parseYAML v >>= \x -> return (\o -> o{ optFileScope = x })
"title-prefix" ->
- parseYAML v >>= \x -> return (\o -> o{ optTitlePrefix = unpack <$> x })
+ parseYAML v >>= \x -> return (\o -> o{ optTitlePrefix = x })
"css" ->
(parseYAML v >>= \x -> return (\o -> o{ optCss = map unpack x }))
<|>
@@ -344,9 +344,7 @@ doOpt (k',v) = do
return (\o -> o{ optResourcePath = map unpack x })
"request-headers" ->
parseYAML v >>= \x ->
- return (\o -> o{ optRequestHeaders =
- map (\(key,val) ->
- (unpack key, unpack val)) x })
+ return (\o -> o{ optRequestHeaders = x })
"eol" ->
parseYAML v >>= \x -> return (\o -> o{ optEol = x })
"strip-comments" ->
@@ -429,13 +427,13 @@ defaultOpts = Opt
contextToMeta :: Context Text -> Meta
contextToMeta (Context m) =
- Meta . M.mapKeys unpack . M.map valToMetaVal $ m
+ Meta . M.map valToMetaVal $ m
valToMetaVal :: Val Text -> MetaValue
valToMetaVal (MapVal (Context m)) =
- MetaMap . M.mapKeys unpack . M.map valToMetaVal $ m
+ MetaMap . M.map valToMetaVal $ m
valToMetaVal (ListVal xs) = MetaList $ map valToMetaVal xs
-valToMetaVal (SimpleVal d) = MetaString (unpack $ render Nothing d)
+valToMetaVal (SimpleVal d) = MetaString $ render Nothing d
valToMetaVal NullVal = MetaString ""
-- see https://github.com/jgm/pandoc/pull/4083
@@ -446,5 +444,5 @@ $(deriveJSON
defaultOptions{ fieldLabelModifier = map toLower } ''LineEnding)
$(deriveJSON
defaultOptions{ fieldLabelModifier =
- camelCaseToHyphenated . dropWhile isLower
+ camelCaseStrToHyphenated . dropWhile isLower
} ''Opt)
diff --git a/src/Text/Pandoc/App/OutputSettings.hs b/src/Text/Pandoc/App/OutputSettings.hs
index b29860c03..d328a9b6a 100644
--- a/src/Text/Pandoc/App/OutputSettings.hs
+++ b/src/Text/Pandoc/App/OutputSettings.hs
@@ -1,6 +1,7 @@
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
{- |
@@ -27,7 +28,7 @@ import Control.Monad
import Control.Monad.Except (catchError, throwError)
import Control.Monad.Trans
import Data.Char (toLower)
-import Data.List (find, isPrefixOf, isSuffixOf)
+import Data.List (find, isPrefixOf)
import Data.Maybe (fromMaybe)
import Skylighting (defaultSyntaxMap)
import Skylighting.Parser (addSyntaxDefinition, parseSyntaxDefinition)
@@ -42,18 +43,18 @@ import Text.Pandoc.App.CommandLineOptions (engines, lookupHighlightStyle,
setVariable)
import qualified Text.Pandoc.UTF8 as UTF8
+readUtf8File :: PandocMonad m => FilePath -> m T.Text
+readUtf8File = fmap UTF8.toText . readFileStrict
+
-- | Settings specifying how document output should be produced.
data OutputSettings = OutputSettings
- { outputFormat :: String
+ { outputFormat :: T.Text
, outputWriter :: Writer PandocIO
- , outputWriterName :: String
+ , outputWriterName :: T.Text
, outputWriterOptions :: WriterOptions
, outputPdfProgram :: Maybe String
}
-readUtf8File :: PandocMonad m => FilePath -> m String
-readUtf8File = fmap UTF8.toString . readFileStrict
-
-- | Get output settings from command line options.
optToOutputSettings :: Opt -> PandocIO OutputSettings
optToOutputSettings opts = do
@@ -85,33 +86,33 @@ optToOutputSettings opts = do
case formatFromFilePaths [outputFile] of
Nothing -> do
report $ CouldNotDeduceFormat
- [takeExtension outputFile] "html"
+ [T.pack $ takeExtension outputFile] "html"
return ("html", Nothing)
Just f -> return (f, Nothing)
- let format = if ".lua" `isSuffixOf` writerName
+ let format = if ".lua" `T.isSuffixOf` writerName
then writerName
- else map toLower $ baseWriterName writerName
+ else T.toLower $ baseWriterName writerName
(writer :: Writer PandocIO, writerExts) <-
- if ".lua" `isSuffixOf` format
+ if ".lua" `T.isSuffixOf` format
then return (TextWriter
- (\o d -> writeCustom writerName o d)
+ (\o d -> writeCustom (T.unpack writerName) o d)
:: Writer PandocIO, mempty)
- else getWriter (map toLower writerName)
+ else getWriter (T.toLower writerName)
let standalone = optStandalone opts || not (isTextFormat format) || pdfOutput
let addSyntaxMap existingmap f = do
res <- liftIO (parseSyntaxDefinition f)
case res of
- Left errstr -> throwError $ PandocSyntaxMapError errstr
+ Left errstr -> throwError $ PandocSyntaxMapError $ T.pack errstr
Right syn -> return $ addSyntaxDefinition syn existingmap
syntaxMap <- foldM addSyntaxMap defaultSyntaxMap
(optSyntaxDefinitions opts)
- hlStyle <- maybe (return Nothing) (fmap Just . lookupHighlightStyle)
+ hlStyle <- maybe (return Nothing) (fmap Just . lookupHighlightStyle . T.unpack)
(optHighlightStyle opts)
let setVariableM k v = return . setVariable k v
@@ -135,15 +136,15 @@ optToOutputSettings opts = do
>>=
setVariableM "outputfile" outputFile
>>=
- setFilesVariableM "include-before" (optIncludeBeforeBody opts)
+ setFilesVariableM "include-before" (T.pack <$> optIncludeBeforeBody opts)
>>=
- setFilesVariableM "include-after" (optIncludeAfterBody opts)
+ setFilesVariableM "include-after" (T.pack <$> optIncludeAfterBody opts)
>>=
- setFilesVariableM "header-includes" (optIncludeInHeader opts)
+ setFilesVariableM "header-includes" (T.pack <$> optIncludeInHeader opts)
>>=
setListVariableM "css" (optCss opts)
>>=
- maybe return (setVariableM "title-prefix")
+ maybe return (setVariableM "title-prefix" . T.unpack)
(optTitlePrefix opts)
>>=
maybe return (setVariableM "epub-cover-image")
@@ -168,7 +169,7 @@ optToOutputSettings opts = do
Just tp -> do
-- strip off extensions
let tp' = case takeExtension tp of
- "" -> tp <.> format
+ "" -> tp <.> T.unpack format
_ -> tp
Just . UTF8.toText <$>
((do surl <- stSourceURL <$> getCommonState
@@ -176,7 +177,7 @@ optToOutputSettings opts = do
-- unless the full URL is specified:
modifyCommonState $ \st -> st{
stSourceURL = Nothing }
- (bs, _) <- fetchItem tp'
+ (bs, _) <- fetchItem $ T.pack tp'
modifyCommonState $ \st -> st{
stSourceURL = surl }
return bs)
@@ -194,7 +195,7 @@ optToOutputSettings opts = do
Just ts -> do
res <- compileTemplate templatePath ts
case res of
- Left e -> throwError $ PandocTemplateError e
+ Left e -> throwError $ PandocTemplateError $ T.pack e
Right t -> return $ Just t
let writerOpts = def {
@@ -222,7 +223,7 @@ optToOutputSettings opts = do
, writerSlideLevel = optSlideLevel opts
, writerHighlightStyle = hlStyle
, writerSetextHeaders = optSetextHeaders opts
- , writerEpubSubdirectory = optEpubSubdirectory opts
+ , writerEpubSubdirectory = T.pack $ optEpubSubdirectory opts
, writerEpubMetadata = epubMetadata
, writerEpubFonts = optEpubFonts opts
, writerEpubChapterLevel = optEpubChapterLevel opts
@@ -239,12 +240,12 @@ optToOutputSettings opts = do
, outputPdfProgram = maybePdfProg
}
-baseWriterName :: String -> String
-baseWriterName = takeWhile (\c -> c /= '+' && c /= '-')
+baseWriterName :: T.Text -> T.Text
+baseWriterName = T.takeWhile (\c -> c /= '+' && c /= '-')
-pdfWriterAndProg :: Maybe String -- ^ user-specified writer name
+pdfWriterAndProg :: Maybe T.Text -- ^ user-specified writer name
-> Maybe String -- ^ user-specified pdf-engine
- -> IO (String, Maybe String) -- ^ IO (writerName, maybePdfEngineProg)
+ -> IO (T.Text, Maybe String) -- ^ IO (writerName, maybePdfEngineProg)
pdfWriterAndProg mWriter mEngine =
case go mWriter mEngine of
Right (writ, prog) -> return (writ, Just prog)
@@ -256,20 +257,20 @@ pdfWriterAndProg mWriter mEngine =
go (Just writer) (Just engine) =
case find (== (baseWriterName writer, takeBaseName engine)) engines of
Just _ -> Right (writer, engine)
- Nothing -> Left $ "pdf-engine " ++ engine ++
- " is not compatible with output format " ++ writer
+ Nothing -> Left $ "pdf-engine " <> T.pack engine <>
+ " is not compatible with output format " <> writer
writerForEngine eng = case [f | (f,e) <- engines, e == eng] of
fmt : _ -> Right fmt
[] -> Left $
- "pdf-engine " ++ eng ++ " not known"
+ "pdf-engine " <> T.pack eng <> " not known"
engineForWriter "pdf" = Left "pdf writer"
engineForWriter w = case [e | (f,e) <- engines, f == baseWriterName w] of
eng : _ -> Right eng
[] -> Left $
- "cannot produce pdf output from " ++ w
+ "cannot produce pdf output from " <> w
-isTextFormat :: String -> Bool
+isTextFormat :: T.Text -> Bool
isTextFormat s =
s `notElem` ["odt","docx","epub2","epub3","epub","pptx","pdf"]