@@ -32,7 +32,7 @@ module Text.Pandoc.Lua
3232 , pushPandocModule
3333 ) where
3434
35−import Control.Monad (when, (>=>))
35+import Control.Monad ((>=>))
3636import Foreign.Lua (FromLuaStack (peek), Lua, LuaException (..),
3737 Status (OK), ToLuaStack (push))
3838import Text.Pandoc.Class (PandocIO)
@@ -40,6 +40,7 @@ import Text.Pandoc.Definition (Pandoc)
4040import Text.Pandoc.Lua.Filter (LuaFilter, walkMWithLuaFilter)
4141import Text.Pandoc.Lua.Init (runPandocLua)
4242import Text.Pandoc.Lua.Module.Pandoc (pushModule) -- TODO: remove
43+import Text.Pandoc.Lua.Util (popValue)
4344import qualified Foreign.Lua as Lua
4445
4546-- | Run the Lua filter in @filterPath@ for a transformation to target
@@ -63,22 +64,17 @@ runLuaFilter' filterPath format pd = do
6364 Lua.throwLuaError luaErrMsg
6465 else do
6566 newtop <- Lua.gettop
66− -- Use the implicitly defined global filter if nothing was returned
67− when (newtop - top < 1) pushGlobalFilter
68− luaFilters <- peek (-1)
67+ -- Use the returned filters, or the implicitly defined global filter if
68+ -- nothing was returned.
69+ luaFilters <- if (newtop - top >= 1)
70+ then peek (-1)
71+ else Lua.getglobal "_G" *> fmap (:[]) popValue
6972 runAll luaFilters pd
7073 where
7174 registerFormat = do
7275 push format
7376 Lua.setglobal "FORMAT"
7477
75−pushGlobalFilter :: Lua ()
76−pushGlobalFilter = do
77− Lua.newtable
78− Lua.getglobal' "pandoc.global_filter"
79− Lua.call 0 1
80− Lua.rawseti (-2) 1
81−
8278runAll :: [LuaFilter] -> Pandoc -> Lua Pandoc
8379runAll = foldr ((>=>) . walkMWithLuaFilter) return
8480