mirror of
https://github.com/jgm/pandoc.git
synced 2026-09-24 15:44:59 +08:00
[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:
committed by
John MacFarlane
parent
4d365ca3ff
commit
78814f27e0
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user