Markdown语法标准中并没有一种方法来标明代码语言的种类。所以要想用Javascript来进行代码高亮的话就需要手动加一些类似于<code class="python">的HTML标签,显得十分Ugly。

于是乎想从Server端入手,想到了Pygments这个神器。但问题又来了。。。

初步打算用

```python
print 'hello'
```

这样的方式来指明代码种类。先把代码段用正则匹配出来,根据语言种类调用Pygments进行着色。然后再把其它部分连同着色后的的代码段一起Markdown转换。

后来越想越觉得不太靠谱,还是有点Ugly。

于是乎继续Google,终于发现了一个完美的方法,并对Markdown2刮目相看。

一直用Markdown2这个Python写的解释器来转换Markdown脚本,之前光看名字还觉得这玩意是个山寨货。今天研究发现,这货还挺好用。

Markdown2提供了一个代码高亮的扩展:fenced code blocks, 它能自动匹配这样的代码,并调用Pygments进行着色。

```python
print "hi"
```

使用方法也很简单:

html = markdown2.markdown("some markdown", ..., extras=["fenced-code-blocks"])

问题圆满解决~

更多Markdown2扩展请参考Wiki