aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbert Krewinkel <[email protected]>2022-09-29 13:59:34 +0200
committerJohn MacFarlane <[email protected]>2022-09-30 08:33:40 -0700
commit78814f27e07e2b9953ac1aba7f9646c3dca15a13 (patch)
tree61b721fd7c6a89fd0b690daa39f2391a2fa6a20d /src
parent4d365ca3ff740c5f574271a86c164d8c04daa83d (diff)
[API Change] Filter: Parameterize `applyFilters` over scripting engine.
Pass the scripting engine as a parameter so it can be swapped out.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/App.hs13
-rw-r--r--src/Text/Pandoc/Filter.hs9
2 files changed, 13 insertions, 9 deletions
diff --git a/src/Text/Pandoc/App.hs b/src/Text/Pandoc/App.hs
index cad3da9b7..1cbdb0e78 100644
--- a/src/Text/Pandoc/App.hs
+++ b/src/Text/Pandoc/App.hs
@@ -64,8 +64,9 @@ import Text.Pandoc.App.OutputSettings (OutputSettings (..), optToOutputSettings)
import Text.Collate.Lang (Lang (..), parseLang)
import Text.Pandoc.Filter (Filter (JSONFilter, LuaFilter), Environment (..),
applyFilters)
-import Text.Pandoc.Lua (readCustom)
+import Text.Pandoc.Lua as Lua (getEngine, readCustom)
import Text.Pandoc.PDF (makePDF)
+import Text.Pandoc.Scripting (ScriptingEngine (..))
import Text.Pandoc.SelfContained (makeSelfContained)
import Text.Pandoc.Shared (eastAsianLineBreakFilter,
headerShift, isURI, tabFilter, uriPathToPath, filterIpynbOutput,
@@ -101,8 +102,9 @@ convertWithOpts opts = do
#else
istty <- liftIO $ queryTerminal stdOutput
#endif
+ scriptingEngine <- Lua.getEngine
- res <- runIO $ convertWithOpts' istty datadir opts
+ res <- runIO $ convertWithOpts' scriptingEngine istty datadir opts
case res of
Left e -> E.throwIO e
Right (output, reports) -> do
@@ -121,11 +123,12 @@ convertWithOpts opts = do
BinaryOutput bs -> writeFnBinary outputFile bs
convertWithOpts' :: (PandocMonad m, MonadIO m, MonadMask m)
- => Bool
+ => ScriptingEngine
+ -> Bool
-> Maybe FilePath
-> Opt
-> m (PandocOutput, [LogMessage])
-convertWithOpts' istty datadir opts = do
+convertWithOpts' scriptingEngine istty datadir opts = do
let outputFile = fromMaybe "-" (optOutputFile opts)
let filters = optFilters opts
let verbosity = optVerbosity opts
@@ -337,7 +340,7 @@ convertWithOpts' istty datadir opts = do
>=> return . adjustMetadata (<> optMetadata opts)
>=> return . adjustMetadata (<> cslMetadata)
>=> applyTransforms transforms
- >=> applyFilters filterEnv filters [T.unpack format]
+ >=> applyFilters scriptingEngine filterEnv filters [T.unpack format]
>=> (if not (optSandbox opts) &&
(isJust (optExtractMedia opts)
|| writerNameBase == "docx") -- for fallback pngs
diff --git a/src/Text/Pandoc/Filter.hs b/src/Text/Pandoc/Filter.hs
index 8ab1347d1..2bfcf9b8a 100644
--- a/src/Text/Pandoc/Filter.hs
+++ b/src/Text/Pandoc/Filter.hs
@@ -29,8 +29,8 @@ import Text.Pandoc.Definition (Pandoc)
import Text.Pandoc.Filter.Environment (Environment (..))
import Text.Pandoc.Logging
import Text.Pandoc.Citeproc (processCitations)
+import Text.Pandoc.Scripting (ScriptingEngine (engineApplyFilter))
import qualified Text.Pandoc.Filter.JSON as JSONFilter
-import qualified Text.Pandoc.Lua as LuaFilter
import qualified Data.Text as T
import System.FilePath (takeExtension)
import Control.Applicative ((<|>))
@@ -74,19 +74,20 @@ instance ToJSON Filter where
-- | Modify the given document using a filter.
applyFilters :: (PandocMonad m, MonadIO m)
- => Environment
+ => ScriptingEngine
+ -> Environment
-> [Filter]
-> [String]
-> Pandoc
-> m Pandoc
-applyFilters fenv filters args d = do
+applyFilters scrngin fenv filters args d = do
expandedFilters <- mapM expandFilterPath filters
foldM applyFilter d expandedFilters
where
applyFilter doc (JSONFilter f) =
withMessages f $ JSONFilter.apply fenv args f doc
applyFilter doc (LuaFilter f) =
- withMessages f $ LuaFilter.applyFilter fenv args f doc
+ withMessages f $ engineApplyFilter scrngin fenv args f doc
applyFilter doc CiteprocFilter =
processCitations doc
withMessages f action = do