git.iko.soy/typeable/pandoc
on master help sign in
Allow combining `-Vheader-includes` and `--include-in-header`.

Closes #5904.

commita60eb60a3dc8bf03ea8ae23fad3f3ebff124a8e1 authorJohn MacFarlane <jgm@berkeley.edu> dateThu 14 Nov 2019, 07:48 (7 years ago) parent3645f9b
2 files changed+23−15
src/Text/Pandoc/App/OutputSettings.hs+21−15 test/command/5904.md+2
src/Text/Pandoc/App/OutputSettings.hs+21−15
@@ -22,7 +22,7 @@ module Text.Pandoc.App.OutputSettings
2222import Prelude
2323import qualified Data.Map as M
2424import qualified Data.Text as T
25−import Text.DocTemplates (toVal, Context(..))
25+import Text.DocTemplates (toVal, Context(..), Val(..))
2626import qualified Control.Exception as E
2727import Control.Monad
2828import Control.Monad.Except (catchError, throwError)
@@ -36,6 +36,7 @@ import System.Directory (getCurrentDirectory)
3636import System.Exit (exitSuccess)
3737import System.FilePath
3838import System.IO (stdout)
39+import Data.String
3940import Text.Pandoc
4041import Text.Pandoc.App.FormatHeuristics (formatFromFilePaths)
4142import Text.Pandoc.App.Opt (Opt (..))
@@ -115,17 +116,23 @@ optToOutputSettings opts = do
115116 hlStyle <- maybe (return Nothing) (fmap Just . lookupHighlightStyle . T.unpack)
116117 (optHighlightStyle opts)
117118
118− let setVariableM k v = return . setVariable k v
119+ let setVariableM k v = return . setVariable k (fromString v)
119120
120− let setListVariableM _ [] = return
121− setListVariableM k vs =
122− return . Context .
123− (M.insert (T.pack k) (toVal $ map T.pack vs)) . unContext
121+ let setListVariableM _ [] ctx = return ctx
122+ setListVariableM k vs ctx = do
123+ let ctxMap = unContext ctx
124+ return $ Context $
125+ case M.lookup k ctxMap of
126+ Just (ListVal xs) -> M.insert k
127+ (ListVal $ xs ++ map toVal vs) ctxMap
128+ Just v -> M.insert k
129+ (ListVal $ v : map toVal vs) ctxMap
130+ Nothing -> M.insert k (toVal vs) ctxMap
124131
125− let getStringContents fp = UTF8.toString . fst <$> fetchItem fp
132+ let getTextContents fp = UTF8.toText . fst <$> fetchItem (T.pack fp)
126133
127134 let setFilesVariableM k fps ctx = do
128− xs <- mapM getStringContents fps
135+ xs <- mapM getTextContents fps
129136 setListVariableM k xs ctx
130137
131138 curdir <- liftIO getCurrentDirectory
@@ -133,20 +140,19 @@ optToOutputSettings opts = do
133140 variables <-
134141 return (optVariables opts)
135142 >>=
136− setListVariableM "sourcefile" (optInputFiles opts)
143+ setListVariableM "sourcefile" (T.pack <$> optInputFiles opts)
137144 >>=
138145 setVariableM "outputfile" outputFile
139146 >>=
140− setFilesVariableM "include-before" (T.pack <$> optIncludeBeforeBody opts)
147+ setFilesVariableM "include-before" (optIncludeBeforeBody opts)
141148 >>=
142− setFilesVariableM "include-after" (T.pack <$> optIncludeAfterBody opts)
149+ setFilesVariableM "include-after" (optIncludeAfterBody opts)
143150 >>=
144− setFilesVariableM "header-includes" (T.pack <$> optIncludeInHeader opts)
151+ setFilesVariableM "header-includes" (optIncludeInHeader opts)
145152 >>=
146− setListVariableM "css" (optCss opts)
153+ setListVariableM "css" (map T.pack $ optCss opts)
147154 >>=
148− maybe return (setVariableM "title-prefix" . T.unpack)
149− (optTitlePrefix opts)
155+ maybe return (setVariableM "title-prefix" . T.unpack) (optTitlePrefix opts)
150156 >>=
151157 maybe return (setVariableM "epub-cover-image")
152158 (optEpubCoverImage opts)
test/command/5904.md+2
@@ -4,5 +4,7 @@ Hi
44^D
55foo
66
7+here is b
8+
79Hi
810```