Lua filters: set global FORMAT instead of args.

This changes the type of runLuaFilter.
This commit is contained in:
John MacFarlane 2017-09-26 20:20:09 -07:00
parent 3fe4aad5a1
commit 9a47c7863b
3 changed files with 12 additions and 8 deletions

View file

@ -132,6 +132,10 @@ Elements without matching functions are left untouched.
See [module documentation](pandoc-module.html) for a list of pandoc
elements.
The global `FORMAT` is set to the format of the pandoc writer
being used (`html5`, `latex`, etc.), so the behavior of a filter
can be made conditional on the eventual output format.
# Pandoc Module
The `pandoc` lua module is loaded into the filter's lua

View file

@ -514,7 +514,7 @@ convertWithOpts opts = do
>=> maybe return extractMedia (optExtractMedia opts)
>=> return . flip (foldr addMetadata) metadata
>=> applyTransforms transforms
>=> applyLuaFilters datadir (optLuaFilters opts) [format]
>=> applyLuaFilters datadir (optLuaFilters opts) format
>=> applyFilters readerOpts datadir filters' [format]
)
media <- getMediaBag
@ -850,12 +850,12 @@ expandFilterPath mbDatadir fp = liftIO $ do
_ -> return fp
applyLuaFilters :: MonadIO m
=> Maybe FilePath -> [FilePath] -> [String] -> Pandoc
=> Maybe FilePath -> [FilePath] -> String -> Pandoc
-> m Pandoc
applyLuaFilters mbDatadir filters args d = do
applyLuaFilters mbDatadir filters format d = do
expandedFilters <- mapM (expandFilterPath mbDatadir) filters
let go f d' = liftIO $ do
res <- E.try (runLuaFilter mbDatadir f args d')
res <- E.try (runLuaFilter mbDatadir f format d')
case res of
Right x -> return x
Left (LuaException s) -> E.throw (PandocFilterError f s)

View file

@ -51,14 +51,14 @@ import qualified Data.Map as Map
import qualified Foreign.Lua as Lua
runLuaFilter :: (MonadIO m)
=> Maybe FilePath -> FilePath -> [String] -> Pandoc -> m Pandoc
runLuaFilter datadir filterPath args pd = liftIO . Lua.runLua $ do
=> Maybe FilePath -> FilePath -> String -> Pandoc -> m Pandoc
runLuaFilter datadir filterPath format pd = liftIO . Lua.runLua $ do
Lua.openlibs
-- store module in global "pandoc"
pushPandocModule datadir
Lua.setglobal "pandoc"
push args
Lua.setglobal "arg"
push format
Lua.setglobal "FORMAT"
top <- Lua.gettop
stat <- Lua.dofile filterPath
if stat /= OK