之前写过一篇文章(高亮Markdown中的代码),介绍了python-markdown2中高亮代码的方法。后来在使用中我发现了一个fenced code blocks的bug,如果代码中间有空行,它会把换行之后的部分当成嵌套的。生成的文件中会有一堆类似这样的部分:

<span class="k">class</span> <span class="nc">

后来到其Github上一搜,发现很多人都有类似问题,比如这里。也有人给出了解决方案

但是这个Pull request已经提出4个月了,原作者至今没有通过,而且整个代码也有近1年没有动过了。Clone了一份它的代码,发现如果想自定义扩展的话比较困难。无奈之下从新研究起了曾经被我抛弃的Python-Markdown。结果发现原来它也有很多扩展,而且比Markdown2中的更多。更重要的是提供了扩展的接口,很方便地写自己的扩展。于是就在peanut中替换了markdown2,代码如下:

md = markdown.Markdown(extensions=['fenced_code', 'codehilite', 'meta'])
#do something
html = md.reset().convert(content.strip(' \n'))

fenced_code用来识别

```python
```

这样的代码段,codehilite用来高亮代码,meta用来识别文章信息,比如:

title: 高亮Markdown中的代码(续)
date: 2013-8-20
tag: python
     markdown

过度完毕,问题搞定~