diff options
Diffstat (limited to 'src/Text/Pandoc/Filter.hs')
-rw-r--r-- | src/Text/Pandoc/Filter.hs | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/Text/Pandoc/Filter.hs b/src/Text/Pandoc/Filter.hs index 502aaefae..f5c1a4f76 100644 --- a/src/Text/Pandoc/Filter.hs +++ b/src/Text/Pandoc/Filter.hs @@ -26,6 +26,7 @@ import Text.Pandoc.Class.PandocMonad (report, getVerbosity) import Text.Pandoc.Definition (Pandoc) import Text.Pandoc.Options (ReaderOptions) import Text.Pandoc.Logging +import Text.Pandoc.Citeproc (processCitations) import qualified Text.Pandoc.Filter.JSON as JSONFilter import qualified Text.Pandoc.Filter.Lua as LuaFilter import qualified Text.Pandoc.Filter.Path as Path @@ -39,6 +40,7 @@ import Control.Monad (foldM, when) -- | Type of filter and path to filter file. data Filter = LuaFilter FilePath | JSONFilter FilePath + | CiteprocFilter -- built-in citeproc deriving (Show, Generic) instance FromYAML Filter where @@ -47,15 +49,19 @@ instance FromYAML Filter where ty <- m .: "type" fp <- m .: "path" case ty of + "citeproc" -> return CiteprocFilter "lua" -> return $ LuaFilter $ T.unpack fp "json" -> return $ JSONFilter $ T.unpack fp _ -> fail $ "Unknown filter type " ++ show (ty :: T.Text)) node <|> (withStr "Filter" $ \t -> do let fp = T.unpack t - case takeExtension fp of - ".lua" -> return $ LuaFilter fp - _ -> return $ JSONFilter fp) node + if fp == "citeproc" + then return CiteprocFilter + else return $ + case takeExtension fp of + ".lua" -> LuaFilter fp + _ -> JSONFilter fp) node -- | Modify the given document using a filter. applyFilters :: ReaderOptions @@ -71,6 +77,8 @@ applyFilters ropts filters args d = do withMessages f $ JSONFilter.apply ropts args f doc applyFilter doc (LuaFilter f) = withMessages f $ LuaFilter.apply ropts args f doc + applyFilter doc CiteprocFilter = + processCitations doc withMessages f action = do verbosity <- getVerbosity when (verbosity == INFO) $ report $ RunningFilter f @@ -85,5 +93,6 @@ applyFilters ropts filters args d = do expandFilterPath :: Filter -> PandocIO Filter expandFilterPath (LuaFilter fp) = LuaFilter <$> Path.expandFilterPath fp expandFilterPath (JSONFilter fp) = JSONFilter <$> Path.expandFilterPath fp +expandFilterPath CiteprocFilter = return CiteprocFilter $(deriveJSON defaultOptions ''Filter) |