diff options
| author | Albert Krewinkel <albert@zeitkraut.de> | 2022-09-29 13:59:34 +0200 |
|---|---|---|
| committer | John MacFarlane <jgm@berkeley.edu> | 2022-09-30 08:33:40 -0700 |
| commit | 78814f27e07e2b9953ac1aba7f9646c3dca15a13 (patch) | |
| tree | 61b721fd7c6a89fd0b690daa39f2391a2fa6a20d | |
| parent | 4d365ca3ff740c5f574271a86c164d8c04daa83d (diff) | |
[API Change] Filter: Parameterize `applyFilters` over scripting engine.
Pass the scripting engine as a parameter so it can be swapped out.
| -rw-r--r-- | src/Text/Pandoc/App.hs | 13 | ||||
| -rw-r--r-- | src/Text/Pandoc/Filter.hs | 9 | ||||
| -rw-r--r-- | test/Tests/Lua.hs | 5 |
3 files changed, 15 insertions, 12 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 diff --git a/test/Tests/Lua.hs b/test/Tests/Lua.hs index 0a6db0131..6f544ccd4 100644 --- a/test/Tests/Lua.hs +++ b/test/Tests/Lua.hs @@ -28,8 +28,7 @@ import Text.Pandoc.Class (runIOorExplode, setUserDataDir) import Text.Pandoc.Definition (Attr, Block (BlockQuote, Div, Para), Pandoc, Inline (Emph, Str), pandocTypesVersion) import Text.Pandoc.Error (PandocError (PandocLuaError)) -import Text.Pandoc.Filter (Filter (LuaFilter), applyFilters) -import Text.Pandoc.Lua (Global (..), runLua, setGlobals) +import Text.Pandoc.Lua (Global (..), applyFilter, runLua, setGlobals) import Text.Pandoc.Options (def) import Text.Pandoc.Shared (pandocVersionText) @@ -234,7 +233,7 @@ assertFilterConversion :: String -> FilePath -> Pandoc -> Pandoc -> Assertion assertFilterConversion msg filterPath docIn expectedDoc = do actualDoc <- runIOorExplode $ do setUserDataDir (Just "../data") - applyFilters def [LuaFilter ("lua" </> filterPath)] ["HTML"] docIn + applyFilter def ["HTML"] ("lua" </> filterPath) docIn assertEqual msg expectedDoc actualDoc runLuaTest :: HasCallStack => Lua.LuaE PandocError a -> IO a |
