使用Viki(VIM) + Deplate 来编写WIKI是非常快捷和令人愉快的,关于Viki和deplate的安装、使用,网上随便搜下就能找到,这里就不累述了,这里主要介绍Deplate0.8.1以上版本中code-gvim71模块失效的问题。 Viki中可以使用基于GVIM的代码高亮,只需要在VIKI中加入以下格式即可: #Code syntax=(基于VIM 'ft'的值)<<----- <代码> ------ 在编译时加入 -m code-gvim71 参数。 不过在实际使用时却发现,编译后的文件没有高亮显示代码。查看编译后的HTML文件后发现不同的关键字指定了各自的class,但是却没有这些class的CSS定义体。用CVS更新了deplate,并尝试了网上找到的方法,都无效。 无奈下只得自己研究了,通过跟踪临时文件和查看code-gvim71.rb后,终于找到了问题的原因。原来,code-gvim71是调用vim中的2html.vim来生成高亮CODE_HTML的,但是新版本的2html.vim中加入了一个参数:html_use_css 这个参数使生成的高亮文件使用CSS,不像旧版本那样使用<font>来标记每一个关键词,而deplate却是按照旧方法来生成页面的,那当然没高亮了。 使用CSS当然是符合我们的使用习惯的,我们不可能放弃CSS而用回臃肿的<font>方法。因此只好来改善code-gvim71.rb的代码了。 原理很简单,只要让deplate在生成的页面中加入CSS样式表的定义即可。在deplate读取的临时文件中,其实已经包含了样式表定义,我们只要添加进去,并删除多余的 "body {}"定义体和将"pre {}"定义体改名即可,代码如下:
codestyle = Hpricot(html).at('style')
codestyle.inner_html = codestyle.inner_html/
.sub(//npre.*font-family: (/w+(/s/w+)*(,/s/w+)*)+;/, "/n.#{style||"default"}{")/
.sub(//nbody.*/n/, "/n")
doc.search("pre").set(:class, "#{style||"default"}")
doc = codestyle.to_html + doc.inner_html
将上述代码插入到/usr/ruby/gems/1.8/gems/deplate-0.8.1/lib/deplate/mod/code-gvim71.rb (如果不是通过GEMS安装的话则是:/usr/ruby/1.8/deplate/mod/code-gvim71.rb)的39行, doc = Hpricot(html).at('body') 之后即可。 保存后再编译看看,这下有高亮显示了。