lua 过滤器在迭代表行时出现问题

我正在尝试编写一个简单的 lua 过滤器,以便对 ReST 表中的元素进行一些宏扩展。

filter.lua

function tablelength(T)
  local count = 0
  for _ in pairs(T) do count = count + 1 end
  return count
end

function Table(table)

    elems=pandoc.Table(table)["rows"]

    print(tablelength(table))
    for v in pairs(elems) do
        print(v) -- 什么也不打印
    end
    return table
end

test.rst

======= =========
A       B
======= =========
{{x}}   {{y}}
======= =========

现在,如果我运行 pandoc.exe -s --lua-filter filter.lua test.rst -t rst,程序会说 elems 中有 5 个元素,但是 for 循环会被跳过,我真的不知道我在这里做错了什么。

我很新于 Lua,而且对 pandoc 也了解很少。如何迭代 elems 中的元素?

点赞
用户214446
用户214446

Pandoc 的 lua-filters 提供了方便的 walk_block 工具,它会递归遍历文档树并将函数应用于与指定键匹配的元素。

在下面的示例中,我们向 walk_block 提供了一个 lua 表格(在其他语言中又称为映射或字典),其中只有一个键(键为 Str),表格的值是要应用的函数。该函数检查大括号,将其删除并在其前缀处添加 foo

function Table(table)
  return pandoc.walk_block(table, {
    Str = function(el)
      if el.text:sub(1,2) == '{{' then
        txt = 'foo' .. el.text:sub(3, -3)
      else
        txt = el.text
      end
      return pandoc.Str(txt)
    end
  })
end
2019-02-14 12:20:51