diff options
author | Albert Krewinkel <albert@zeitkraut.de> | 2018-10-26 23:45:01 +0200 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2018-10-28 12:08:52 -0700 |
commit | f6124213073cf162bd3cfa5e6d455807e8a502a9 (patch) | |
tree | 4cdca64cce0097389a6ab4031511f6d43cd9d204 /src/Text/Pandoc/Filter | |
parent | 6f29e1c9c1fc4c655c5ca4fad9e9256f8313d7bd (diff) | |
download | pandoc-f6124213073cf162bd3cfa5e6d455807e8a502a9.tar.gz |
T.P.Lua: expose more useful internals (API change)
Newly exported from Text.Pandoc.Lua:
- `runFilterFile` to run a Lua filter from file;
- data type `Global` and its constructors; and
- `setGlobals` to add globals to a Lua environment.
This module also contains `Pushable` and `Peekable` instances required
to get pandoc's data types to and from Lua. Low-level Lua operation
remain hidden in Text.Pandoc.Lua.
Diffstat (limited to 'src/Text/Pandoc/Filter')
-rw-r--r-- | src/Text/Pandoc/Filter/Lua.hs | 25 |
1 files changed, 3 insertions, 22 deletions
diff --git a/src/Text/Pandoc/Filter/Lua.hs b/src/Text/Pandoc/Filter/Lua.hs index 48aa66834..a6dc7b6cc 100644 --- a/src/Text/Pandoc/Filter/Lua.hs +++ b/src/Text/Pandoc/Filter/Lua.hs @@ -33,19 +33,14 @@ module Text.Pandoc.Filter.Lua (apply) where import Prelude import Control.Exception (throw) import Control.Monad ((>=>)) -import Foreign.Lua (Lua) import Text.Pandoc.Class (PandocIO) import Text.Pandoc.Definition (Pandoc) import Text.Pandoc.Error (PandocError (PandocFilterError)) import Text.Pandoc.Filter.Path (expandFilterPath) -import Text.Pandoc.Lua (LuaException (..), runLua) -import Text.Pandoc.Lua.Filter (LuaFilter, walkMWithLuaFilter) -import Text.Pandoc.Lua.Global (Global (..), setGlobals) -import Text.Pandoc.Lua.Util (dofileWithTraceback) +import Text.Pandoc.Lua (Global (..), LuaException (..), + runLua, runFilterFile, setGlobals) import Text.Pandoc.Options (ReaderOptions) -import qualified Foreign.Lua as Lua - -- | Run the Lua filter in @filterPath@ for a transformation to the -- target format (first element in args). Pandoc uses Lua init files to -- setup the Lua interpreter. @@ -64,23 +59,9 @@ apply ropts args f doc = do , PANDOC_READER_OPTIONS ropts , PANDOC_SCRIPT_FILE filterPath ] - top <- Lua.gettop - stat <- dofileWithTraceback filterPath - if stat /= Lua.OK - then Lua.throwTopMessage - else do - newtop <- Lua.gettop - -- Use the returned filters, or the implicitly defined global - -- filter if nothing was returned. - luaFilters <- if newtop - top >= 1 - then Lua.peek Lua.stackTop - else Lua.pushglobaltable *> fmap (:[]) Lua.popValue - runAll luaFilters doc + runFilterFile filterPath doc forceResult :: FilePath -> Either LuaException Pandoc -> PandocIO Pandoc forceResult fp eitherResult = case eitherResult of Right x -> return x Left (LuaException s) -> throw (PandocFilterError fp s) - -runAll :: [LuaFilter] -> Pandoc -> Lua Pandoc -runAll = foldr ((>=>) . walkMWithLuaFilter) return |