aboutsummaryrefslogtreecommitdiff
path: root/src/Text
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text')
-rw-r--r--src/Text/Pandoc/Lua.hs13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Lua.hs b/src/Text/Pandoc/Lua.hs
index ffc57c9c2..f4a22b92a 100644
--- a/src/Text/Pandoc/Lua.hs
+++ b/src/Text/Pandoc/Lua.hs
@@ -54,13 +54,17 @@ runLuaFilter filterPath args pd = liftIO $ do
-- store module in global "pandoc"
pushPandocModule lua
Lua.setglobal lua "pandoc"
+ top <- Lua.gettop lua
status <- Lua.loadfile lua filterPath
if (status /= 0)
then do
Just luaErrMsg <- Lua.peek lua 1
error luaErrMsg
else do
- Lua.call lua 0 1
+ Lua.call lua 0 Lua.multret
+ newtop <- Lua.gettop lua
+ -- Use the implicitly defined global filter if nothing was returned
+ when (newtop - top < 1) $ pushGlobalFilter lua
Just luaFilters <- Lua.peek lua (-1)
Lua.push lua args
Lua.setglobal lua "PandocParameters"
@@ -68,6 +72,13 @@ runLuaFilter filterPath args pd = liftIO $ do
Lua.close lua
return doc
+pushGlobalFilter :: LuaState -> IO ()
+pushGlobalFilter lua =
+ Lua.newtable lua
+ *> Lua.getglobal2 lua "pandoc.global_filter"
+ *> Lua.call lua 0 1
+ *> Lua.rawseti lua (-2) 1
+
runAll :: [LuaFilter] -> Pandoc -> IO Pandoc
runAll [] = return
runAll (x:xs) = walkMWithLuaFilter x >=> runAll xs