Text.Pandoc.Lua: keep element unchanged if filter returns nil

This was suggested by jgm and is consistent with the behavior of other
filtering libraries.
This commit is contained in:
Albert Krewinkel 2017-06-27 17:11:42 +02:00 committed by Albert Krewinkel
parent beb78a552c
commit 4282abbd07
No known key found for this signature in database
GPG key ID: 388DC0B21F631124

View file

@ -189,19 +189,24 @@ instance StackValue LuaFilter where
peek lua idx = fmap (LuaFilter lua) <$> Lua.peek lua idx
-- | Push a value to the stack via a lua filter function. The filter function is
-- called with all arguments that are passed to this function and is expected to
-- return a single value.
-- called with given element as argument and is expected to return an element.
-- Alternatively, the function can return nothing or nil, in which case the
-- element is left unchanged.
runFilterFunction :: StackValue a => LuaState -> LuaFilterFunction -> a -> IO a
runFilterFunction lua lf x = do
pushFilterFunction lua lf
Lua.push lua x
Lua.call lua 1 1
mbres <- Lua.peek lua (-1)
case mbres of
Nothing -> throwIO $ LuaException
("Error while trying to get a filter's return "
++ "value from lua stack.")
Just res -> res <$ Lua.pop lua 1
resType <- Lua.ltype lua (-1)
case resType of
Lua.TNIL -> Lua.pop lua 1 *> return x
_ -> do
mbres <- Lua.peek lua (-1)
case mbres of
Nothing -> throwIO $ LuaException
("Error while trying to get a filter's return "
++ "value from lua stack.")
Just res -> res <$ Lua.pop lua 1
-- | Push the filter function to the top of the stack.
pushFilterFunction :: Lua.LuaState -> LuaFilterFunction -> IO ()