aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbert Krewinkel <albert@zeitkraut.de>2018-10-27 09:38:28 +0200
committerJohn MacFarlane <jgm@berkeley.edu>2018-10-28 12:08:52 -0700
commit8ef995cfc0f9f53444fedf517c05fe02cb6311e7 (patch)
tree4f6b9b4662030bf9d061685328646def50164e6c /src
parentf6124213073cf162bd3cfa5e6d455807e8a502a9 (diff)
downloadpandoc-8ef995cfc0f9f53444fedf517c05fe02cb6311e7.tar.gz
T.P.Filter: centralize filter path expansion
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Filter.hs13
-rw-r--r--src/Text/Pandoc/Filter/JSON.hs5
-rw-r--r--src/Text/Pandoc/Filter/Lua.hs10
3 files changed, 16 insertions, 12 deletions
diff --git a/src/Text/Pandoc/Filter.hs b/src/Text/Pandoc/Filter.hs
index 8fe93089a..1c25a5a6e 100644
--- a/src/Text/Pandoc/Filter.hs
+++ b/src/Text/Pandoc/Filter.hs
@@ -42,20 +42,29 @@ import Text.Pandoc.Definition (Pandoc)
import Text.Pandoc.Options (ReaderOptions)
import qualified Text.Pandoc.Filter.JSON as JSONFilter
import qualified Text.Pandoc.Filter.Lua as LuaFilter
+import qualified Text.Pandoc.Filter.Path as Path
+-- | Type of filter and path to filter file.
data Filter = LuaFilter FilePath
| JSONFilter FilePath
deriving (Show)
+-- | Modify the given document using a filter.
applyFilters :: ReaderOptions
-> [Filter]
-> [String]
-> Pandoc
-> PandocIO Pandoc
-applyFilters ropts filters args d =
- foldrM ($) d $ map applyFilter filters
+applyFilters ropts filters args d = do
+ expandedFilters <- mapM expandFilterPath filters
+ foldrM ($) d $ map applyFilter expandedFilters
where
applyFilter (JSONFilter f) = JSONFilter.apply ropts args f
applyFilter (LuaFilter f) = LuaFilter.apply ropts args f
+-- | Expand paths of filters, searching the data directory.
+expandFilterPath :: Filter -> PandocIO Filter
+expandFilterPath (LuaFilter fp) = LuaFilter <$> Path.expandFilterPath fp
+expandFilterPath (JSONFilter fp) = JSONFilter <$> Path.expandFilterPath fp
+
$(deriveJSON defaultOptions ''Filter)
diff --git a/src/Text/Pandoc/Filter/JSON.hs b/src/Text/Pandoc/Filter/JSON.hs
index 97b291603..2846e42e2 100644
--- a/src/Text/Pandoc/Filter/JSON.hs
+++ b/src/Text/Pandoc/Filter/JSON.hs
@@ -44,7 +44,6 @@ import System.FilePath ((</>), takeExtension)
import Text.Pandoc.Class (PandocIO)
import Text.Pandoc.Error (PandocError (PandocFilterError))
import Text.Pandoc.Definition (Pandoc)
-import Text.Pandoc.Filter.Path (expandFilterPath)
import Text.Pandoc.Options (ReaderOptions)
import Text.Pandoc.Process (pipeProcess)
import Text.Pandoc.Shared (pandocVersion)
@@ -56,9 +55,7 @@ apply :: ReaderOptions
-> FilePath
-> Pandoc
-> PandocIO Pandoc
-apply ropts args f d = do
- f' <- expandFilterPath f
- liftIO $ externalFilter ropts f' args d
+apply ropts args f = liftIO . externalFilter ropts f args
externalFilter :: MonadIO m
=> ReaderOptions -> FilePath -> [String] -> Pandoc -> m Pandoc
diff --git a/src/Text/Pandoc/Filter/Lua.hs b/src/Text/Pandoc/Filter/Lua.hs
index a6dc7b6cc..e5c34c71c 100644
--- a/src/Text/Pandoc/Filter/Lua.hs
+++ b/src/Text/Pandoc/Filter/Lua.hs
@@ -36,7 +36,6 @@ import Control.Monad ((>=>))
import Text.Pandoc.Class (PandocIO)
import Text.Pandoc.Definition (Pandoc)
import Text.Pandoc.Error (PandocError (PandocFilterError))
-import Text.Pandoc.Filter.Path (expandFilterPath)
import Text.Pandoc.Lua (Global (..), LuaException (..),
runLua, runFilterFile, setGlobals)
import Text.Pandoc.Options (ReaderOptions)
@@ -49,17 +48,16 @@ apply :: ReaderOptions
-> FilePath
-> Pandoc
-> PandocIO Pandoc
-apply ropts args f doc = do
- filterPath <- expandFilterPath f
+apply ropts args fp doc = do
let format = case args of
(x:_) -> x
_ -> error "Format not supplied for Lua filter"
- runLua >=> forceResult filterPath $ do
+ runLua >=> forceResult fp $ do
setGlobals [ FORMAT format
, PANDOC_READER_OPTIONS ropts
- , PANDOC_SCRIPT_FILE filterPath
+ , PANDOC_SCRIPT_FILE fp
]
- runFilterFile filterPath doc
+ runFilterFile fp doc
forceResult :: FilePath -> Either LuaException Pandoc -> PandocIO Pandoc
forceResult fp eitherResult = case eitherResult of