diff options
-rw-r--r-- | doc/lua-filters.md | 4 | ||||
-rw-r--r-- | src/Text/Pandoc/App.hs | 8 | ||||
-rw-r--r-- | src/Text/Pandoc/Lua.hs | 8 |
3 files changed, 12 insertions, 8 deletions
diff --git a/doc/lua-filters.md b/doc/lua-filters.md index 5e43afb26..16f6bfd56 100644 --- a/doc/lua-filters.md +++ b/doc/lua-filters.md @@ -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 diff --git a/src/Text/Pandoc/App.hs b/src/Text/Pandoc/App.hs index 89a804176..c26b8e768 100644 --- a/src/Text/Pandoc/App.hs +++ b/src/Text/Pandoc/App.hs @@ -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) diff --git a/src/Text/Pandoc/Lua.hs b/src/Text/Pandoc/Lua.hs index 2860b84df..ab3b5f4ca 100644 --- a/src/Text/Pandoc/Lua.hs +++ b/src/Text/Pandoc/Lua.hs @@ -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 |