@@ -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