在 Lisp 里用解析表达文法把 Org 转成 HTML
来源: jointhefreeworld.org — 2026-09-24
概述
作者用 Guile Scheme 的 (ice-9 peg) 模块实现了 OrgWebAlchemy:一个把 Org 文档解析成 AST、再经 SXML 渲染为 HTML 的库。起点是一堆天真的正则表达式,但他很快意识到需要更强的手段,于是转向解析表达文法。主要用例是在不启动 Emacs 的前提下把 Org 导出成 HTML,好让其它项目直接集成。文章重点对比了 PEG 与「一堆正则」的差别:Org 看起来简单,一旦遇到嵌套列表、有序/无序/描述列表、行内标记、带描述的链接、源码块、表格与转义,就必须让每个构造恰好在正确的位置停止消费输入。
核心要点
- 库的用法极简,调用 (org->html "...") 即可,内部管线是 Org 文档到 PEG、再到 AST、再到 SXML、最后到 HTML。
- 最核心的动机是离开 Emacs 也能把 Org 渲染成 HTML,方便把它集成进自己的项目。
- 作者坦承 AI 帮他理解 PEG 与调试,但实现是自己的「意大利面」,靠单元测试与手工验证逐步打磨出来。
- Org 的真正难点在于嵌套列表、三种列表类型、行内标记、链接描述、源码块、表格与转义等构造的边界处理。
- 他称这种做法为元-元-元编程,并在文中列出了 PEG 的维基页面与 GNU 的 Guile、Emacs Lisp 教程。
金句
Org-mode 看起来很简单,直到你真的动手去解析它。
👍 0
👎 0
← 返回 Lobsters 首页