使用Lua插件在非常旧的Lua 2.5上对字符串进行表单和处理
2021-11-16 22:8:27
收藏:0
阅读:202
评论:1
我正在尝试编写Lua插件,从HTML页面中提取和放置一些元数据。它是针对soupault静态站点生成器的插件,需要使用2.5版本的Lua。因此,不能使用闭包和特定的for循环。 这个生成器的工作方式不重要,因为插件存在为一个小的独立文件.lua,并在生成器运行期间连接。 重要的是插件使用的方法。这些在插件的输入和输出中使用。
更重要的是,如何使用lua语言形成和处理提取的标签列表。
HTML页面正文中的输入数据:
<site-meta-data>
#+title: post 1 title
#+subtitle: Post 1 subtitle
#+description: Post 1 decription
#+author: Billy
#+date: 2021-11-03
#+datepublished: 2021-06-02
#+usertags: inventory,errand
#+summary: Post 1 summary
#+id: 1-test1com
</site-meta-data>
插件应该执行以下步骤:
- 获取
<site-meta-data></site-meta-data>
标记之间的字符串列表,并按照第一个冒号进行拆分(例如,string.match(destination\_number, "(.-):")
) - 创建变量名作为冒号前的第一个单词,且不包含#+ (例如,标题)
- 为此变量创建下一步操作的条件。如果从字符串中创建的变量名等于当前名称(例如,meta_tag = title),则在父标签之后插入具有值的metatag或插入提取的新标签。我将自己编写应该插入的标记。
- 处理完列表后,删除
<site-meta-data></site-meta-data>
之间的所有内容,包括标记本身。
由于在Lua脚本方面接近零,我只写了脚本的外观。
all_meta_tags = HTML.select_one(page,"site-meta-data")
all_meta_tags = HTML.parse(page,"site-meta-data")
print(all_meta_tags)
local index = 1
while all_meta_tags[index] do
meta_tag_line = all_meta_tags[index]
meta_tag = string.match(meta_tag_line, "(.-):")
meta_tag_content = string.match(meta_tag_line, ":(.*)")
meta_tag_content = strlower(String.trim(meta_tag_content))
meta_tag = Regex.replace(meta_tag, "#+", "")
if(meta_tag =="title") then
HTML.append_child(page, HTML.create_string('<meta name="title" content="value..">'))
elseif (meta_tag == 'subtitle') then
HTML.append_child(page, HTML.create_string('...'))
elseif (meta_tag == 'description') then
HTML.append_child(page, HTML.create_string('<meta name="description" content="meta_tag_value">'))
elseif (meta_tag == 'author') then
HTML.append_child(page, HTML.create_string('author...'))
elseif (meta_tag == 'date') then
HTML.append_child(page, HTML.create_string('<meta name="date" content="meta_tag_content">'))
end
index = index + 1
end
HTML.delete(HTML.select_one(page,"site-meta-data"))
请帮我修改脚本,以完成上述任务。我将更正它应该放置的标记。
原文链接 https://stackoverflow.com/questions/69996285
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
从版本 4.0 开始,soupault 支持预解析钩子。因此现在可以使用该钩子重新实现各种类型的前置元素。插件应该始终将渲染后的 HTML 放置在页面正文之前。插件可以编写为以下示例。
[hooks.pre-parse] file = "hooks/org-mode-metadata.lua" template = """ <h1 id="post-title">{{title}}</h1> ...