如何迭代 Pandoc 的 lua-filter 函数中的列表项?
How can I iterate over list items in Pandoc's lua-filter function?
Pandoc 的 lua filter 使得遍历文档和修改文档变得非常容易。我的问题是我不知道如何隔离列表项元素。我可以在每个列表项中找到 lists 和块级别的东西,但我无法找到迭代列表项的方法。
例如,假设我有以下 Markdown 文档:
1. One string
Two string
2. Three string
Four string
假设我想将每个列表项的第一行加粗。我可以轻松地更改段落在 OrderedLists 中的处理方式,比如使用此过滤器和 pandoc --lua-filter=myfilter.lua --to=markdown input.md
local i
OrderedList = function (element)
i = 0
return pandoc.walk_block(element, {
Para = function (element)
i = i + 1
if i == 1 then return pandoc.Para { pandoc.Strong(element.c) }
else return element end
end
})
end
这确实会将第一个段落元素更改为粗体,但它只会更改第一个列表项的第一段,因为它会遍历列表中所有列表项的所有段落,而不是每个列表项,然后每一段。
1. **One string**
Two string
2. Three string
Four string
如果我再次将两个列表项分成两个单独的列表,则会捕获第一项的第一段,但我想捕获每个列表项的第一段!我在文档中找不到任何关于遍历列表项的内容。应该怎么做呢?
最近更新了 pandoc Lua 过滤器文档,其中包含有关每种类型属性的更多信息。例如,对于 OrderedList
元素,docs 应该 说(它目前说 items
而不是 content
,这是一个错误) :
OrderedList
An ordered list.
content
: list items (List of Blocks)
listAttributes
: list parameters (ListAttributes)
start
: alias for listAttributes.start (integer)
style
: alias for listAttributes.style (string)
delimiter
: alias for listAttributes.delimiter (string)
tag
, t
: the literal OrderedList (string)
所以最简单的方法是遍历内容字段并更改其中的项目:
OrderedList = function (element)
for i, item in ipairs(element.content) do
local first = item[1]
if first and first.t == 'Para' then
element.content[i][1] = pandoc.Para{pandoc.Strong(first.content)}
end
end
return element
end
Pandoc 的 lua filter 使得遍历文档和修改文档变得非常容易。我的问题是我不知道如何隔离列表项元素。我可以在每个列表项中找到 lists 和块级别的东西,但我无法找到迭代列表项的方法。
例如,假设我有以下 Markdown 文档:
1. One string
Two string
2. Three string
Four string
假设我想将每个列表项的第一行加粗。我可以轻松地更改段落在 OrderedLists 中的处理方式,比如使用此过滤器和 pandoc --lua-filter=myfilter.lua --to=markdown input.md
local i
OrderedList = function (element)
i = 0
return pandoc.walk_block(element, {
Para = function (element)
i = i + 1
if i == 1 then return pandoc.Para { pandoc.Strong(element.c) }
else return element end
end
})
end
这确实会将第一个段落元素更改为粗体,但它只会更改第一个列表项的第一段,因为它会遍历列表中所有列表项的所有段落,而不是每个列表项,然后每一段。
1. **One string**
Two string
2. Three string
Four string
如果我再次将两个列表项分成两个单独的列表,则会捕获第一项的第一段,但我想捕获每个列表项的第一段!我在文档中找不到任何关于遍历列表项的内容。应该怎么做呢?
最近更新了 pandoc Lua 过滤器文档,其中包含有关每种类型属性的更多信息。例如,对于 OrderedList
元素,docs 应该 说(它目前说 items
而不是 content
,这是一个错误) :
OrderedList
An ordered list.
content
: list items (List of Blocks)listAttributes
: list parameters (ListAttributes)start
: alias for listAttributes.start (integer)style
: alias for listAttributes.style (string)delimiter
: alias for listAttributes.delimiter (string)tag
,t
: the literal OrderedList (string)
所以最简单的方法是遍历内容字段并更改其中的项目:
OrderedList = function (element)
for i, item in ipairs(element.content) do
local first = item[1]
if first and first.t == 'Para' then
element.content[i][1] = pandoc.Para{pandoc.Strong(first.content)}
end
end
return element
end