蓝天,小湖,湖水中一方小筑

在ReST文档中使用pygments

最近在整理个东西,本来想用LaTeX做的,但是想想它的代码高亮实在麻烦,而且默认的情况下只有黑白的,真的很难看的;而且最终发布是PDF,有时也不是很方便,所 以考虑用网页的形式弄。不想为这玩意再架个服务器,想来想去,能用好的大概就是 reStructuredText 了。

说是想到了reStructuredText,其实一开始是想自己写一个的,大概也不外乎是标记分析啥的,主要是想要 pygments 带的语法高亮,只是在网上找东西的时候,突然发现 pygments 已经支持了rst的编写,于是就打消了造轮子的想法。毕竟,现在能把文档整理出来是最重要的。但 是用的时候碰到了点问题,它是通过rst的directive支持扩展的。一开始是通过easy_install的包没有那个rst-directive.py的文件 ,使用hg弄下来的代码里面才有;弄下来后紧接着就是安装directive。折腾了半天,直到今天才找到一个网页上有大概的步骤,照做,然后一切搞定。

首先需要把那个rst-directive.py文件拷到docutils/parsers/rst/directives/下,然后再在那个directives目 录下的__init__.py中加一行,‘sourcecode’: (‘rst-directive’, ‘pygments_directive’), 至于加哪,就在类似的地方加吧,里面有一堆directives的,这样就算注册了,然后在rst文档中,就可以使用.. sourcecode这个directive了,rst会自动调用rst-directive中的pygments_directive来处理。

这样处理还不行,因为pygments默认只是把程序通过词法分析器拆开后,归到一个一个的class下,还需要CSS才能生成带颜色的东西。在网上找它的CSS文件 的时候,碰到了一个有用的命令:

pygmentize -S default -f html

这样它会在 stdout 输出CSS,直接重定向到文件即可。在rst2html中使用时,可以通过– stylesheet等参数设置使用的CSS,好像默认它会把这些CSS嵌入到网页中去,嗯。

OK了,还是满不错的,代码好看多了,嗯 ^_^