有时候希望能预制一些内容模板使用,比如当 new
一篇标题以 “微博” 开头的文章时,自动为文章设置 'tweet' 标签,这类似 Hexo 的 scaffold,不过 scaffold 只能做模板,不能进行更灵活的预处理,索性做了个插件系统。
有了插件系统,还可以按自己的需求定制短代码,转换任意内容,只需在 filter 上用正则做替换就好了。
插件系统在 0.8.0 版开始实验性支持。
一个简单的例子:Beex Tweet
main.lua
。_config.toml
中设置 plugins = ['plugin-name-1', 'plugin-name-2', ...]
启用插件。事件 | 说明 | 接收参数 |
---|---|---|
new_before_write_md | 准备好 .md 文件的内容后,保存之前。参数类型为字符串,即文本内容,返回处理后的文本。 | func(text) |
gen_after_read_md | 读取文件内容后。参数类型为字符串,即文本内容,返回处理后的文本。 | func(text) |
gen_before_render_html | 渲染之前,已经准备好模板上下文变量。参数类型为表,可用的值参考模板。 | func(context) |
gen_after_render_html | 保存之前。两个参数,字符串和表,渲染后的文本和模板上下文。 | func(text,context) |
beex
模块,注册 filter 的方式类似 WordPress,不过不支持传参(但可以通过再包一层函数来实现):
function my_filter(text)
-- do something...
return text
end
function main()
-- ↓ 注意这里用冒号
beex:add_filter("gen_after_read_md", "my_filter")
end
print()
UTF-8 时会乱码,所以提供一个打印函数,方便调试时输出中文:
-- ↓ 注意这里用点号
beex.print(text)
..
连接字符串而非 +
。
print("中文", "会", "乱码") -- Lua 自带,支持不定参数,但是会乱码
text = "中文" .. "不会" .. "乱码"
beex.print(text) -- 不会乱码