[API Change] Filter: Parameterize applyFilters over scripting engine.

Pass the scripting engine as a parameter so it can be swapped out.
This commit is contained in:
Albert Krewinkel
2022-09-30 08:33:40 -07:00
committed by John MacFarlane
parent 4d365ca3ff
commit 78814f27e0
3 changed files with 15 additions and 12 deletions
+8 -5
View File
@@ -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
+5 -4
View File
@@ -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
+2 -3
View File
@@ -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