aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn MacFarlane <[email protected]>2022-09-13 11:14:04 +0200
committerJohn MacFarlane <[email protected]>2022-09-13 11:14:04 +0200
commiteb03cad6ae58d8acf9dd37dc2862de5934da3bbf (patch)
treed2940b257f95119ff04bf551d3c3681895c359e4 /src
parent369058d53dfd8bea82df85774e1ce67516b8ee36 (diff)
XWiki writer: use template if it is specified.
Previously templates were ignored completely. Closes #8296.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Writers/XWiki.hs17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Writers/XWiki.hs b/src/Text/Pandoc/Writers/XWiki.hs
index c35235650..78e0d29e6 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