@@ -20,11 +20,13 @@ module Text.Pandoc.Filter
2020 ) where
2121
2222import Prelude
23+import System.CPUTime (getCPUTime)
2324import Data.Aeson.TH (deriveJSON, defaultOptions)
2425import GHC.Generics (Generic)
25−import Text.Pandoc.Class (PandocIO)
26+import Text.Pandoc.Class (PandocIO, report, getVerbosity)
2627import Text.Pandoc.Definition (Pandoc)
2728import Text.Pandoc.Options (ReaderOptions)
29+import Text.Pandoc.Logging
2830import qualified Text.Pandoc.Filter.JSON as JSONFilter
2931import qualified Text.Pandoc.Filter.Lua as LuaFilter
3032import qualified Text.Pandoc.Filter.Path as Path
@@ -32,7 +34,8 @@ import Data.YAML
3234import qualified Data.Text as T
3335import System.FilePath (takeExtension)
3436import Control.Applicative ((<|>))
35−import Control.Monad (foldM)
37+import Control.Monad.Trans (MonadIO (liftIO))
38+import Control.Monad (foldM, when)
3639
3740-- | Type of filter and path to filter file.
3841data Filter = LuaFilter FilePath
@@ -65,8 +68,19 @@ applyFilters ropts filters args d = do
6568 expandedFilters <- mapM expandFilterPath filters
6669 foldM applyFilter d expandedFilters
6770 where
68− applyFilter doc (JSONFilter f) = JSONFilter.apply ropts args f doc
69− applyFilter doc (LuaFilter f) = LuaFilter.apply ropts args f doc
71+ applyFilter doc (JSONFilter f) =
72+ withMessages f $ JSONFilter.apply ropts args f doc
73+ applyFilter doc (LuaFilter f) =
74+ withMessages f $ LuaFilter.apply ropts args f doc
75+ withMessages f action = do
76+ verbosity <- getVerbosity
77+ when (verbosity == INFO) $ report $ RunningFilter f
78+ starttime <- toMilliseconds <$> liftIO getCPUTime
79+ res <- action
80+ endtime <- toMilliseconds <$> liftIO getCPUTime
81+ when (verbosity == INFO) $ report $ FilterCompleted f (endtime - starttime)
82+ return res
83+ toMilliseconds picoseconds = picoseconds `div` 1000000000
7084
7185-- | Expand paths of filters, searching the data directory.
7286expandFilterPath :: Filter -> PandocIO Filter