lua - 如何遍历 Pandoc 的 lua-filter 函数中的列表项?
问题描述
Pandoc 的lua 过滤器使您可以轻松地遍历文档并随时修改文档。我的问题是我不知道如何隔离列表项元素。我可以在每个列表项中找到列表和块级的东西,但我想不出一种迭代列表项的方法。
例如,假设我有以下 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
元素,文档 应该说(它目前说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
推荐阅读
- python-3.x - Networkx not drawing arrows in directed graph
- bash - How to assign values in bash after running commands
- mysql - How can I improve this SQL query to be faster, today it takes a long time
- unity3d - Why unityengine.ui is not recognized?
- javascript - How to use your own photos for infinite scroll effect
- graph - Janusgraph gremlin 查询以查找特定节点的连接组件
- apache-nifi - 阿帕奇尼菲。通过一条规则更改多个属性
- c# - PHP和C#中左右移位的不同值
- python - 如何将机密传递给 CDK 应用程序中的 AWS 托管 AD 密码参数
- arrays - 二维字符串数组,其中第一个索引是行和第二个单词