Pandoc 中的 Lua 过滤器:从文件中替换字符串
2020-4-8 14:27:38
收藏:0
阅读:254
评论:0
警告:我在编程方面经验不足。
在从 markdown 文档生成输出时,我的目标是用同名文件(即 'string.md' 文件)中的文本来替换占位符(例如 '{{string}}')。我已经成功用 .md 文件的第一行文本替换字符串。
然而,我无法找到一种用多行文本替换字符串的方法(基本上是一个包含函数)。
第一个任务的代码是基于 Pandoc 手册 中的一些示例编写的:
function file_exists(file)
local f = io.open(file, "rb")
if f then f:close() end
return f ~= nil
end
function lines_from(file)
if not file_exists(file) then return {} end
lines = {}
for line in io.lines(file) do
lines[#lines + 1] = line
end
return lines
end
return {
{
Str = function (elem)
if elem.text:match ("{{.+}}") then
file_name = elem.text:match ("{{.+}}")
file_name = file_name:gsub("{{","")
file_name = file_name:gsub("}}","")
local file = 'lua-filters/'..file_name..'.md'
if not file_exists(file) then
return elem
else
local lines = lines_from(file)
return pandoc.Str(elem.text:gsub("{{.+}}",lines[1]))
end
else
return elem
end
end,
}
}
每当发现一个占位符 '{{string}}' 时,它将被替换为相应文件 'string.md' 的第一行。例如:
{{project}} 是项目名称。
项目编号是 {{projectno}}。
转换为:
Project Name 是项目名称。
项目编号是 456321。
使用第二个 Lua 过滤器,我希望能够使用占位符字符串,而不仅仅是第一行,返回文本文件的全部内容。然而,我无法找到如何返回相应文件的所有行(使用上述相同代码)或将文件内容转换为更合适的元素的方法。
期望的结果是:
## 包含部分
}}lorem-ipsum{{
转换为:
## 包含部分
Lorem ipsum dolor sit amet....
Ut enim ad minim veniam...
其中 'Lorem ipsum...' 是文件 'lorem-ipsum.md' 的内容。使用 pairs 只能返回第一行:
if not file_exists(file) then
return elem
else
local lines = lines_from(file)
for k,v in pairs(lines) do
return pandoc.Str(v)
end
另一种方法可能是使用 Para 和 elem.content[1].text 而不是 Str 和 elem.text,但我无法弄清楚文件应该如何不同处理。
任何帮助将不胜感激。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
