Lua: allow returning a single filter from filter files

It is now possible to return a single filter from a filter file, e.g.

``` lua
-- Switch single- and double quotes
return {
  Quoted = function (q)
    elem.quotetype = elem.quotetype == 'SingleQuote'
      and 'DoubleQuote' or 'SingleQuote'
    return elem
  end
}

The filter must not contain numerical indexes, or it might be treated as
a list of filters.
This commit is contained in:
Albert Krewinkel
2024-10-01 12:23:36 +02:00
parent 752d57dac1
commit 4cf6ddb027
3 changed files with 8 additions and 9 deletions
+4 -6
View File
@@ -40,11 +40,9 @@ to small caps:
``` lua
return {
{
Strong = function (elem)
return pandoc.SmallCaps(elem.content)
end,
}
Strong = function (elem)
return pandoc.SmallCaps(elem.content)
end,
}
```
@@ -187,7 +185,7 @@ local filter = {
traverse = 'topdown',
-- ... filter functions ...
}
return {filter}
return filter
```
Support for this was added in pandoc 2.17; previous versions
@@ -43,7 +43,10 @@ runFilterFile' envIdx filterPath doc = do
-- filter if nothing was returned.
luaFilters <- forcePeek $
if newtop - oldtop >= 1
then peekList peekFilter top -- get from explicit filter table
then liftLua (rawlen top) >>= \case
-- explicitly returned filter, either a single one or a list
0 -> (:[]) <$!> peekFilter top -- single filter
_ -> peekList peekFilter top -- list of explicit filters
else (:[]) <$!> peekFilter envIdx -- get the implicit filter in _ENV
settop oldtop
runAll luaFilters doc
@@ -1,10 +1,8 @@
return {
{
Quoted = function (elem)
if elem.quotetype == "SingleQuote" then
elem.quotetype = "DoubleQuote"
end
return elem
end,
}
}