• 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
加载中...
到移动设备上浏览
49 lines 4.45 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 Tweet

    说明

    • 插件使用 Lua 5.4 进行开发,因为附带一个 Python 或 JavaScript 解释器要几十 M,太大了。
    • 文件夹名即插件名,入口文件为 main.lua
    • _config.toml 中设置 plugins = ['plugin-name-1', 'plugin-name-2', ...] 启用插件。
    • filter 在不同的事件上接收不同的参数并返回,目前有四个事件:
    事件说明接收参数
    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)
    • 在 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 等模块。