aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Filter/Lua.hs25
-rw-r--r--src/Text/Pandoc/Lua.hs16
-rw-r--r--src/Text/Pandoc/Lua/Filter.hs32
3 files changed, 46 insertions, 27 deletions
diff --git a/src/Text/Pandoc/Filter/Lua.hs b/src/Text/Pandoc/Filter/Lua.hs
index 047733e6d..f1ea97e64 100644
--- a/src/Text/Pandoc/Filter/Lua.hs
+++ b/src/Text/Pandoc/Filter/Lua.hs
@@ -11,15 +11,12 @@ Apply Lua filters to modify a pandoc documents programmatically.
-}
module Text.Pandoc.Filter.Lua (apply) where
-import Control.Exception (throw)
-import Control.Monad ((>=>))
import qualified Data.Text as T
import Text.Pandoc.Class (PandocMonad)
import Control.Monad.Trans (MonadIO)
import Text.Pandoc.Definition (Pandoc)
-import Text.Pandoc.Error (PandocError (PandocFilterError, PandocLuaError))
import Text.Pandoc.Filter.Environment (Environment (..))
-import Text.Pandoc.Lua (Global (..), runLua, runFilterFile, setGlobals)
+import Text.Pandoc.Lua (Global (..), applyFilter)
-- | Run the Lua filter in @filterPath@ for a transformation to the
-- target format (first element in args). Pandoc uses Lua init files to
@@ -34,18 +31,8 @@ apply fenv args fp doc = do
let format = case args of
(x:_) -> x
_ -> error "Format not supplied for Lua filter"
- runLua >=> forceResult fp $ do
- setGlobals [ FORMAT $ T.pack format
- , PANDOC_READER_OPTIONS (envReaderOptions fenv)
- , PANDOC_WRITER_OPTIONS (envWriterOptions fenv)
- , PANDOC_SCRIPT_FILE fp
- ]
- runFilterFile fp doc
-
-forceResult :: (PandocMonad m, MonadIO m)
- => FilePath -> Either PandocError Pandoc -> m Pandoc
-forceResult fp eitherResult = case eitherResult of
- Right x -> return x
- Left err -> throw . PandocFilterError (T.pack fp) $ case err of
- PandocLuaError msg -> msg
- _ -> T.pack $ show err
+ applyFilter [ FORMAT $ T.pack format
+ , PANDOC_READER_OPTIONS (envReaderOptions fenv)
+ , PANDOC_WRITER_OPTIONS (envWriterOptions fenv)
+ , PANDOC_SCRIPT_FILE fp
+ ] fp doc
diff --git a/src/Text/Pandoc/Lua.hs b/src/Text/Pandoc/Lua.hs
index 3d699b494..b1d263fc7 100644
--- a/src/Text/Pandoc/Lua.hs
+++ b/src/Text/Pandoc/Lua.hs
@@ -9,15 +9,19 @@
Running pandoc Lua filters.
-}
module Text.Pandoc.Lua
- ( runLua
- -- * Lua globals
- , Global (..)
+ ( -- * High-level functions
+ applyFilter
+ , readCustom
+ , writeCustom
+ -- * Low-level functions
+ , Global(..)
, setGlobals
- -- * Filters
- , runFilterFile
+ , runLua
) where
-import Text.Pandoc.Lua.Filter (runFilterFile)
+import Text.Pandoc.Lua.Filter (applyFilter)
import Text.Pandoc.Lua.Global (Global (..), setGlobals)
import Text.Pandoc.Lua.Init (runLua)
+import Text.Pandoc.Lua.Reader (readCustom)
+import Text.Pandoc.Lua.Writer (writeCustom)
import Text.Pandoc.Lua.Orphans ()
diff --git a/src/Text/Pandoc/Lua/Filter.hs b/src/Text/Pandoc/Lua/Filter.hs
index da8af9a26..b920f358d 100644
--- a/src/Text/Pandoc/Lua/Filter.hs
+++ b/src/Text/Pandoc/Lua/Filter.hs
@@ -13,15 +13,22 @@ Stability : alpha
Types and functions for running Lua filters.
-}
module Text.Pandoc.Lua.Filter
- ( runFilterFile
+ ( applyFilter
) where
import Control.Monad ((>=>), (<$!>))
import HsLua as Lua
import Text.Pandoc.Definition
-import Text.Pandoc.Error (PandocError)
import Text.Pandoc.Lua.ErrorConversion ()
import Text.Pandoc.Lua.Marshal.AST
import Text.Pandoc.Lua.Marshal.Filter
+import Text.Pandoc.Lua.Global (Global (..), setGlobals)
+import Text.Pandoc.Lua.Init (runLua)
+import Control.Exception (throw)
+import qualified Data.Text as T
+import Text.Pandoc.Class (PandocMonad)
+import Control.Monad.Trans (MonadIO)
+import Text.Pandoc.Error (PandocError (PandocFilterError, PandocLuaError))
+
-- | Transform document using the filter defined in the given file.
@@ -44,3 +51,24 @@ runFilterFile filterPath doc = do
runAll :: [Filter] -> Pandoc -> LuaE PandocError Pandoc
runAll = foldr ((>=>) . applyFully) return
+
+-- | 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.
+applyFilter :: (PandocMonad m, MonadIO m)
+ => [Global]
+ -> FilePath
+ -> Pandoc
+ -> m Pandoc
+applyFilter globals fp doc = do
+ runLua >=> forceResult fp $ do
+ setGlobals globals
+ runFilterFile fp doc
+
+forceResult :: (PandocMonad m, MonadIO m)
+ => FilePath -> Either PandocError Pandoc -> m Pandoc
+forceResult fp eitherResult = case eitherResult of
+ Right x -> return x
+ Left err -> throw . PandocFilterError (T.pack fp) $ case err of
+ PandocLuaError msg -> msg
+ _ -> T.pack $ show err