git.iko.soy/typeable/pandoc
on master help sign in
Powerpoint writer: allow monofont to be specified in metadata...

...not just using `--variable` on the command line (as in other writers). Closes #7187.

commite22d1fbb144d63d595c5db9225dd912b09fd938f authorJohn MacFarlane <jgm@berkeley.edu> dateMon 29 Mar 2021, 14:56 (6 years ago) parenta02ab46
2 files changed+19−6
src/Text/Pandoc/Writers/Powerpoint.hs+1−1 src/Text/Pandoc/Writers/Powerpoint/Output.hs+18−5
src/Text/Pandoc/Writers/Powerpoint.hs+1−1
@@ -39,5 +39,5 @@ writePowerpoint opts (Pandoc meta blks) = do
3939 let blks' = walk fixDisplayMath blks
4040 let (pres, logMsgs) = documentToPresentation opts (Pandoc meta blks')
4141 mapM_ report logMsgs
42− archv <- presentationToArchive opts pres
42+ archv <- presentationToArchive opts meta pres
4343 return $ fromArchive archv
src/Text/Pandoc/Writers/Powerpoint/Output.hs+18−5
@@ -38,17 +38,19 @@ import qualified Text.Pandoc.Class.PandocMonad as P
3838import Text.Pandoc.Options
3939import Text.Pandoc.MIME
4040import qualified Data.ByteString.Lazy as BL
41+import Text.Pandoc.Writers.Shared (metaToContext)
4142import Text.Pandoc.Writers.OOXML
4243import qualified Data.Map as M
4344import Data.Maybe (mapMaybe, listToMaybe, fromMaybe, maybeToList, catMaybes, isJust)
4445import Text.Pandoc.ImageSize
4546import Control.Applicative ((<|>))
4647import System.FilePath.Glob
47−import Text.DocTemplates (FromContext(lookupContext))
48+import Text.DocTemplates (FromContext(lookupContext), Context)
49+import Text.DocLayout (literal)
4850import Text.TeXMath
4951import Text.Pandoc.Writers.Math (convertMath)
5052import Text.Pandoc.Writers.Powerpoint.Presentation
51−import Text.Pandoc.Shared (tshow)
53+import Text.Pandoc.Shared (tshow, stringify)
5254import Skylighting (fromColor)
5355import Data.List.NonEmpty (nonEmpty)
5456
@@ -97,6 +99,7 @@ data WriterEnv = WriterEnv { envRefArchive :: Archive
9799 , envDistArchive :: Archive
98100 , envUTCTime :: UTCTime
99101 , envOpts :: WriterOptions
102+ , envContext :: Context Text
100103 , envPresentationSize :: (Integer, Integer)
101104 , envSlideHasHeader :: Bool
102105 , envInList :: Bool
@@ -122,6 +125,7 @@ instance Default WriterEnv where
122125 , envDistArchive = emptyArchive
123126 , envUTCTime = posixSecondsToUTCTime 0
124127 , envOpts = def
128+ , envContext = mempty
125129 , envPresentationSize = (720, 540)
126130 , envSlideHasHeader = False
127131 , envInList = False
@@ -168,7 +172,7 @@ runP env st p = evalStateT (runReaderT p env) st
168172
169173monospaceFont :: Monad m => P m T.Text
170174monospaceFont = do
171− vars <- writerVariables <$> asks envOpts
175+ vars <- asks envContext
172176 case lookupContext "monofont" vars of
173177 Just s -> return s
174178 Nothing -> return "Courier"
@@ -304,8 +308,9 @@ makeSpeakerNotesMap (Presentation _ slides) =
304308 then Nothing
305309 else Just n
306310
307−presentationToArchive :: PandocMonad m => WriterOptions -> Presentation -> m Archive
308−presentationToArchive opts pres = do
311+presentationToArchive :: PandocMonad m
312+ => WriterOptions -> Meta -> Presentation -> m Archive
313+presentationToArchive opts meta pres = do
309314 distArchive <- toArchive . BL.fromStrict <$>
310315 P.readDefaultDataFile "reference.pptx"
311316 refArchive <- case writerReferenceDoc opts of
@@ -321,10 +326,18 @@ presentationToArchive opts pres = do
321326 PandocSomeError
322327 "Could not determine presentation size"
323328
329+ -- note, we need writerTemplate to be Just _ or metaToContext does
330+ -- nothing
331+ context <- metaToContext opts{ writerTemplate =
332+ writerTemplate opts <|> Just mempty }
333+ (return . literal . stringify)
334+ (return . literal . stringify) meta
335+
324336 let env = def { envRefArchive = refArchive
325337 , envDistArchive = distArchive
326338 , envUTCTime = utctime
327339 , envOpts = opts
340+ , envContext = context
328341 , envPresentationSize = presSize
329342 , envSlideIdMap = makeSlideIdMap pres
330343 , envSpeakerNotesIdMap = makeSpeakerNotesMap pres