在非常旧的Lua2.5上使用Lua插件形成和处理字符串列表



我正在尝试编写lua插件,以便从HTML页面中提取和放置一些元数据。这是一个用于soupault静态站点生成器的插件,它需要lua 2.5版本才能工作。所以没有闭包,也没有for循环。加载这个生成器的工作方式是没有意义的,因为插件是作为一个小的独立文件.rua存在的,并在生成器运行期间插入。重要的是插件使用的方法。这些用于插件的输入和输出。

更重要的是,它是如何用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>标记之间的字符串获取到list从列表中获取字符串&由第一个冒号分隔。string.match(destination_number,"(.-(:"(
  • 创建变量名作为冒号前的第一个单词,不带#+(例如title(
  • 为该变量的下一次操作创建条件。如果变量名称根据字符串创建=当前名称,例如meta_tag=标题,插入带值的元标记或在后面插入带提取值的新标记父标记。我会自己写哪些标签应该插入
  • 在列表处理之后,移除CCD_ 2之间的所有,包括本身

由于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"))

请帮我修改脚本以完成上述任务。我会更正它应该放置的标签。

由于版本4.0,soupault支持预解析挂钩。因此,现在可以用钩子重新实现各种类型的前物质。插件应该始终将呈现的HTML放在页面正文之前。插件可以写成这个例子。

[hooks.pre-parse]
file = "hooks/org-mode-metadata.lua"
template = """
<h1 id="post-title">{{title}}</h1>
...

最新更新