Rust in Everything
基于 pulldown-cmark 0.13.5

动手

前面各部分是读别人的代码,这一部分反过来:把一个拉取式 Markdown 解析器最核心的那条路自己走一遍,用最少的代码把「文本 → 块 → 行内节点 → 分隔符配对 → 事件」做出来,再拿 pulldown-cmark 的事件流当标准答案。目的不是造一个能用的库,而是看清 pulldown-cmark 的每一层多做了什么、为什么要多做。

  1. 迷你拉取式解析器:335 行、无依赖,Parser 实现 Iterator,队列空了才读下一个块,块内照 CommonMark 的「process emphasis」用分隔符栈配对 * 和 **;挑的 30 条 spec 例子事件流和 pulldown-cmark 0.13.5 完全一致,相关六个小节 197 条里没有一条真正的不一致;缺的东西(块树、容器、链接、实体、_、防平方的下界)逐项链到讲真实实现的那一页。
flowchart TB
  txt["Markdown 文本"] --> blk["一次读一个块"]
  blk --> cut["切成节点"]
  cut --> stk["分隔符栈配对"]
  stk --> ev["事件队列"]
  ev --> cmp["和 pulldown-cmark 对照"]

完整实现放在对应课程里。读这一页之前,最好先读过一份文档和事件模型,知道 pulldown-cmark 的块主线、行内主线各自长什么样、事件长什么样。

💬 关联讨论

发起讨论
加载中...