From eb03cad6ae58d8acf9dd37dc2862de5934da3bbf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 13 Sep 2022 11:14:04 +0200 Subject: [PATCH] XWiki writer: use template if it is specified. Previously templates were ignored completely. Closes #8296. --- src/Text/Pandoc/Writers/XWiki.hs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Text/Pandoc/Writers/XWiki.hs b/src/Text/Pandoc/Writers/XWiki.hs index c352356507cb..78e0d29e6143 100644 --- a/src/Text/Pandoc/Writers/XWiki.hs +++ b/src/Text/Pandoc/Writers/XWiki.hs @@ -44,6 +44,9 @@ import Text.Pandoc.Options import Text.Pandoc.Shared import Text.Pandoc.Writers.MediaWiki (highlightingLangs) import Text.Pandoc.Writers.Shared (toLegacyTable) +import Text.Pandoc.Templates (renderTemplate) +import Text.Pandoc.Writers.Shared (defField, metaToContext) +import Text.DocLayout (render, literal) newtype WriterState = WriterState { listLevel :: Text -- String at the beginning of items @@ -53,9 +56,19 @@ type XWikiReader m = ReaderT WriterState m -- | Convert Pandoc to XWiki. writeXWiki :: PandocMonad m => WriterOptions -> Pandoc -> m Text -writeXWiki _ (Pandoc _ blocks) = +writeXWiki opts (Pandoc meta blocks) = do let env = WriterState { listLevel = "" } - in runReaderT (blockListToXWiki blocks) env + metadata <- metaToContext opts + (fmap (literal . trimr) . (\bs -> runReaderT (blockListToXWiki bs) env)) + (fmap (literal . trimr) . (\is -> runReaderT (inlineListToXWiki is) env)) + meta + body <- runReaderT (blockListToXWiki blocks) env + let context = defField "body" body + $ defField "toc" (writerTableOfContents opts) metadata + return $ + case writerTemplate opts of + Just tpl -> render Nothing $ renderTemplate tpl context + Nothing -> body -- | Concatenates strings with line breaks between them. vcat :: [Text] -> Text