Cal*_*leb 3 lua abstract-syntax-tree pandoc
Pandoc 的lua 过滤器使得迭代文档和修改文档变得非常容易。我的问题是我不知道如何隔离列表项元素。我可以在每个列表项中找到列表和块级内容,但我无法找到迭代列表项的方法。
例如,假设我有以下 Markdown 文档:
1. One string
Two string
2. Three string
Four string
Run Code Online (Sandbox Code Playgroud)
假设我想将每个列表项的第一行设为粗体。我可以轻松更改 OrderedLists 中段落的处理方式,例如使用此过滤器和pandoc --lua-filter=myfilter.lua --to=markdown input.md
1. One string
Two string
2. Three string
Four string
Run Code Online (Sandbox Code Playgroud)
这确实会将第一个段落元素更改为粗体,但它只会更改第一个列表项的第一段,因为它会遍历列表中所有列表项中的所有段落,而不是遍历每个列表项,然后遍历每个段落。
1. **One string**
Two string
2. Three string
Four string
Run Code Online (Sandbox Code Playgroud)
如果我再次将两个列表项分成两个单独的列表,第一个项目的第一段将被捕获,但我想捕获每个列表项的第一段!我在文档中找不到有关迭代列表项的任何内容。一个人应该怎样做呢?
pandoc Lua 过滤器文档最近更新了有关每种类型属性的更多信息。例如,对于OrderedList
元素,文档 应该说(它目前说items
而不是content
,这是一个错误):
有序列表
一个有序的列表。
content
:列表项(块列表)listAttributes
:列表参数(ListAttributes)start
:listAttributes.start 的别名(整数)style
:listAttributes.style 的别名(字符串)delimiter
:listAttributes.delimiter 的别名(字符串)tag
,t
:字面量 OrderedList (字符串)
因此,最简单的方法是迭代内容字段并更改其中的项目:
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
Run Code Online (Sandbox Code Playgroud)