aboutsummaryrefslogtreecommitdiff
path: root/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Template.hs
diff options
context:
space:
mode:
authorAlbert Krewinkel <[email protected]>2022-10-12 11:03:42 +0200
committerJohn MacFarlane <[email protected]>2022-10-12 10:16:01 -0700
commit14c7b5db20e8864f745cc95fb71c08befe49da0c (patch)
tree388ab3ef48d0aace93117379dd8571cb7ca3e478 /pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Template.hs
parent253d2e768a43c8ab3ad8e1c46b2bc4a02acec946 (diff)
Lua: add function `pandoc.template.meta_to_context`.
The functions converts Meta values to template contexts; the intended use is in combination with `pandoc.template.apply`.
Diffstat (limited to 'pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Template.hs')
-rw-r--r--pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Template.hs32
1 files changed, 29 insertions, 3 deletions
diff --git a/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Template.hs b/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Template.hs
index be769e988..d84f0c6d7 100644
--- a/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Template.hs
+++ b/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Template.hs
@@ -12,11 +12,13 @@ module Text.Pandoc.Lua.Module.Template
) where
import HsLua
-import HsLua.Module.DocLayout (pushDoc)
+import HsLua.Module.DocLayout (peekDoc, pushDoc)
import Text.Pandoc.Error (PandocError)
-import Text.Pandoc.Lua.Marshal.Context (peekContext)
+import Text.Pandoc.Lua.Marshal.AST (peekMeta, pushBlocks, pushInlines)
+import Text.Pandoc.Lua.Marshal.Context (peekContext, pushContext)
import Text.Pandoc.Lua.Marshal.Template (peekTemplate, pushTemplate)
import Text.Pandoc.Lua.PandocLua (PandocLua (unPandocLua), liftPandocLua)
+import Text.Pandoc.Writers.Shared (metaToContext')
import Text.Pandoc.Templates
( compileTemplate, getDefaultTemplate, renderTemplate
, runWithPartials, runWithDefaultPartials )
@@ -40,7 +42,7 @@ functions :: [DocumentedFunction PandocError]
functions =
[ defun "apply"
### liftPure2 renderTemplate
- <#> parameter peekTemplate "pandoc Template" "template" "template to apply"
+ <#> parameter peekTemplate "Template" "template" "template to apply"
<#> parameter peekContext "table" "context" "variable values"
=#> functionResult pushDoc "Doc" "rendered template"
#? T.unlines
@@ -74,4 +76,28 @@ functions =
=#> functionResult pushText "string"
"string representation of the writer's default template"
+ , defun "meta_to_context"
+ ### (\meta blockWriterIdx inlineWriterIdx -> unPandocLua $ do
+ let blockWriter blks = liftPandocLua $ do
+ pushvalue blockWriterIdx
+ pushBlocks blks
+ callTrace 1 1
+ forcePeek $ peekDoc top
+ let inlineWriter blks = liftPandocLua $ do
+ pushvalue inlineWriterIdx
+ pushInlines blks
+ callTrace 1 1
+ forcePeek $ peekDoc top
+ metaToContext' blockWriter inlineWriter meta)
+ <#> parameter peekMeta "Meta" "meta" "document metadata"
+ <#> parameter pure "function" "blocks_writer"
+ "converter from Blocks to Doc values"
+ <#> parameter pure "function" "inlines_writer"
+ "converter from Inlines to Doc values"
+ =#> functionResult pushContext "table" "template context"
+ #? T.unlines
+ [ "Creates template context from the document's [Meta]{#type-meta}"
+ , "data, using the given functions to convert [Blocks] and [Inlines]"
+ , "to [Doc] values."
+ ]
]