• Why Github?
  • Team
  • Enterprise
  • Explore
  • Marketplace
  • Pricing
Sign inSign up
Watch996
Star102.4k
Fork61.8k
Tag: todo
Switch branches/tags
K / Beex 插件系统(Plugins).md
Go to Mobile Clone
加载中...
到移动设备上浏览
48 lines 3.89 KB
First commit on 31 Jul 2020

尚未完成: Not completed尚未完成Not completed 随时检查: Check back later随时检查Check back later

    尚在开发/Still programming

    例子

    有时候希望能预制一些内容模板使用,比如当 new 一篇标题以 “微博” 开头的文章时,自动为文章设置 'tweet' 标签,这类似 Hexo 的 scaffold,不过 scaffold 只能做模板,不能进行更灵活的预处理,索性做了个插件系统。

    有了插件系统,还可以按自己的需求定制短代码,转换任意内容,只需在 filter 上用正则做替换就好了。

    插件系统计划在 0.8.0 版开始支持,还没开发完,先打包了一个正在开发的版本 Beex-dev 提供试用。

    一个简单的例子:Beex Tweet

    说明

    • 插件使用 Lua 5.4 进行开发,因为附带一个 Python 或 JavaScript 解释器要几十 M,太大了。
    • 文件夹名即插件名,代码位于文件夹内 main.lua 文件,入口函数为 main()
    • _config.toml 中设置 plugins = ['plugin-1', 'plugin-2',...] 启用插件。
    • filter 接收一个参数,即文本内容,并返回处理后的文本。
    • 目前提供四个钩子事件,注意看注释:
      "new_after_create_md",  // 准备好 `.md` 文件的内容后,保存之前。
      "gen_after_read_md",  // 读取文件内容后。
      "gen_after_render_md",  // 将内容转成 HTML 之后。
      "gen_after_render_html",  // 将内容载入模板后,保存之前。
      
      • 在 Lua 环境中提供一个 beex 模块,注册 filter 的方式类似 WordPress,不过不支持传参(但可以通过再包一层函数来实现):
        function my_filter(text)
            -- do something...
            return text
        end
        
        function main()
            --  ↓ 注意这里用冒号
            beex:add_filter("gen_after_read_md", "my_filter")
        end
        
    • Lua 虽然支持读写 UTF-8,但 print() UTF-8 时会乱码,所以提供一个打印函数,方便调试时输出中文:
      --  ↓ 注意这里用点号
      beex.print(text)
      
      • 只接受一个参数,所以多个参数先连接为一个字符串,Lua 使用 .. 连接字符串而非 +
        print("中文", "会", "乱码") -- Lua 自带,支持不定参数,但是会乱码
        text = "中文" .. "不会" .. "乱码"
        beex.print(text)  -- 不会乱码
        
    • 为了安全性,移除了 Lua 的 io 和 require 等模块。