最近练手写了个 markdown parser 采用 GFM 格式 没有其他依赖 https://github.com/jjyr/minidown 比想像中的要麻烦不少..
可以完美解析GFM 的 source 页!
另: 既然有人读就再增加了一些略详细的说明
大概思路是字符串传到Document类,然后split成行
这是markdown一个特点, 单行就可以进行解析,比如 `code` 等语法都是不允许换行的,即使是块结构的语法, 如```,也是可以从单行中判断开始与结束
之后`Document#parse_reference`会去解析一遍文档, 把markdown中的链接/图片定义替换
然后parse_line进行每行的解析
大概就是
while line = unparsed_lines.shift
parsed_nodes << (parse_line line)
end
parse_line中如果发现特殊结构
如: `>, *`等就由相应的类去解析(如`>`开头会由`BlockElement`类解析)
其余交给TextElement来解析文本内的语法,比如 *斜体*
....然后就是与各种正则的搏斗
之后对parse后的node调用to_html全部转换为HTML输出