@@ -35,7 +35,7 @@ module Text.Pandoc.Lua (LuaException (..), pushPandocModule, runLuaFilter) where
3535import Control.Monad (mplus, unless, when, (>=>))
3636import Control.Monad.Trans (MonadIO (..))
3737import Data.Data (DataType, Data, toConstr, showConstr, dataTypeOf,
38− dataTypeConstrs)
38+ dataTypeConstrs, dataTypeName)
3939import Data.Foldable (foldrM)
4040import Data.Map (Map)
4141import Data.Maybe (isJust)
@@ -108,10 +108,10 @@ constructorsFor :: DataType -> [String]
108108constructorsFor x = map show (dataTypeConstrs x)
109109
110110inlineFilterNames :: [String]
111−inlineFilterNames = constructorsFor (dataTypeOf (Str []))
111+inlineFilterNames = "Inline" : constructorsFor (dataTypeOf (Str []))
112112
113113blockFilterNames :: [String]
114−blockFilterNames = constructorsFor (dataTypeOf (Para []))
114+blockFilterNames = "Block" : constructorsFor (dataTypeOf (Para []))
115115
116116metaFilterName :: String
117117metaFilterName = "Meta"
@@ -126,10 +126,12 @@ newtype LuaFilterFunction = LuaFilterFunction { functionIndex :: Int }
126126-- | Try running a filter for the given element
127127tryFilter :: (Data a, FromLuaStack a, ToLuaStack a) => FunctionMap -> a -> Lua a
128128tryFilter fnMap x =
129− let filterFnName = showConstr (toConstr x) in
130− case Map.lookup filterFnName fnMap of
131− Nothing -> return x
129+ let filterFnName = showConstr (toConstr x)
130+ catchAllName = dataTypeName (dataTypeOf x)
131+ in
132+ case Map.lookup filterFnName fnMap `mplus` Map.lookup catchAllName fnMap of
132133 Just fn -> runFilterFunction fn x
134+ Nothing -> return x
133135
134136instance FromLuaStack LuaFilter where
135137 peek idx =