如何在Pandoc的lua-filter函数中遍历列表项?

时间:2019-01-28 13:31:09

标签: lua abstract-syntax-tree pandoc

Pandoc的lua filter可以非常轻松地遍历文档并随时随地修改文档。我的问题是我不知道如何隔离列表项元素。我可以在每个列表项中找到列表和块级内容,但是我无法找到一种遍历列表项的方法。

例如,假设我有以下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

如果我再次将两个列表项分成两个单独的列表,则将捕获第一项的第一段,但是我想捕获每个列表项的第一段!我在文档中找不到有关遍历列表项的任何内容。应该怎么做?

1 个答案:

答案 0 :(得分:3)

在pandoc的Lua滤波器文档最近已更新与每个类型的属性的详细信息。例如,对于migrate_device_data元素,应说docs (当前说的是ReprovisionPolicy而不是OrderedList,这是一个错误):

  

OrderedList

     

有序列表。

     
      
  • items:列表项(块列表)
  •   
  • content:列表参数(ListAttributes)
  •   
  • content:别名listAttributes.start(整数)
  •   
  • listAttributes:别名listAttributes.style(字符串)
  •   
  • start:别名listAttributes.delimiter(字符串)
  •   
  • styledelimiter:字面OrderedList(字符串)
  •   

因此,最简单的方法是遍历内容字段和变化项目在其中:

tag