gpt4 book ai didi

lua - lua过滤器迭代表行的问题

转载 作者:行者123 更新时间:2023-12-01 13:16:19 35 4
gpt4 key购买 nike

我正在尝试为 pandoc 编写一个简单的 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) -- Prints nothings
end
return table
end

测试.rst

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

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

我是 Lua 的新手,对 pandoc 也知之甚少。我如何遍历 elems 中的元素?

最佳答案

Pandoc lua-filters 提供方便 walk_block助手,它递归地遍历文档树并将函数应用于与键匹配的元素。

在下面的例子中,我们给 walk_block 一个只有一个键(键 Str)的 lua 表(其他语言中的 map 或 dict),以及表的值是要应用的函数。该函数检查大括号,去除它们并添加 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

关于lua - lua过滤器迭代表行的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54686240/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com