@@ -33,19 +33,14 @@ module Text.Pandoc.Filter.Lua (apply) where
33import Prelude
33import Prelude
34import Control.Exception (throw)
34import Control.Exception (throw)
35import Control.Monad ((>=>))
35import Control.Monad ((>=>))
36−import Foreign.Lua (Lua)
37import Text.Pandoc.Class (PandocIO)
36import Text.Pandoc.Class (PandocIO)
38import Text.Pandoc.Definition (Pandoc)
37import Text.Pandoc.Definition (Pandoc)
39import Text.Pandoc.Error (PandocError (PandocFilterError))
38import Text.Pandoc.Error (PandocError (PandocFilterError))
40import Text.Pandoc.Filter.Path (expandFilterPath)
39import Text.Pandoc.Filter.Path (expandFilterPath)
41−import Text.Pandoc.Lua (LuaException (..), runLua)
40+import Text.Pandoc.Lua (Global (..), LuaException (..),
42−import Text.Pandoc.Lua.Filter (LuaFilter, walkMWithLuaFilter)
41+ runLua, runFilterFile, setGlobals)
43−import Text.Pandoc.Lua.Global (Global (..), setGlobals)
44−import Text.Pandoc.Lua.Util (dofileWithTraceback)
45import Text.Pandoc.Options (ReaderOptions)
42import Text.Pandoc.Options (ReaderOptions)
47−import qualified Foreign.Lua as Lua
49-- | Run the Lua filter in @filterPath@ for a transformation to the
44-- | Run the Lua filter in @filterPath@ for a transformation to the
50-- target format (first element in args). Pandoc uses Lua init files to
45-- target format (first element in args). Pandoc uses Lua init files to
51-- setup the Lua interpreter.
46-- setup the Lua interpreter.
@@ -64,23 +59,9 @@ apply ropts args f doc = do
64 , PANDOC_READER_OPTIONS ropts
59 , PANDOC_READER_OPTIONS ropts
65 , PANDOC_SCRIPT_FILE filterPath
60 , PANDOC_SCRIPT_FILE filterPath
67− top <- Lua.gettop
62+ runFilterFile filterPath doc
68− stat <- dofileWithTraceback filterPath
70− then Lua.throwTopMessage
73− -- Use the returned filters, or the implicitly defined global
74− -- filter if nothing was returned.
75− luaFilters <- if newtop - top >= 1
76− then Lua.peek Lua.stackTop
77− else Lua.pushglobaltable *> fmap (:[]) Lua.popValue
78− runAll luaFilters doc
80forceResult :: FilePath -> Either LuaException Pandoc -> PandocIO Pandoc
64forceResult :: FilePath -> Either LuaException Pandoc -> PandocIO Pandoc
81forceResult fp eitherResult = case eitherResult of
65forceResult fp eitherResult = case eitherResult of
82 Right x -> return x
66 Right x -> return x
83 Left (LuaException s) -> throw (PandocFilterError fp s)
67 Left (LuaException s) -> throw (PandocFilterError fp s)
85−runAll :: [LuaFilter] -> Pandoc -> Lua Pandoc
86−runAll = foldr ((>=>) . walkMWithLuaFilter) return