chm是windows系统下的Html Help文件。今天在网上看到有一个rst2chm.py的模块可以将reStruecturedText格式的文本文件转换成chm文档,地址访问:
http://www.rutherfurd.net/software/rst2chm/index.html
我下载后,按说明,试着将 NewEdit 的文档(因为是用reStruecturedText格式写的)进行了转化,开始有一些问题,最后改了rst2html.py终于转换成功。
使用rst2chm.py首先要安装微软件HTML Help Workshop软件。然后在 NewEdit 的doc目录下,我使用如下命令:
rst2chm.py --title=NewEdit --default-topic=index.htm --stylesheet=default.css
NewEdit.chm index.txt userguide.txt technical.txt
命令比较长我分成了两行。title是chm文档窗口的标题。default-topic是打开chm时显示的第一页的索引。stylesheet是用到的样式表文件。newedit.chm是生成的chm文件名。再后面是要处理作为目录的文件名列表。可以使用*.txt这样的通配符。每个文件都会在目录中生成为单独的文件夹。
在处理中文的文件时,rst2chm.py会现问题。于是我不得已仔细阅读了它的源代码,并作了修改:
1. 解决输出GBK编码的HTML文件,原程序的输出编码写死了,我直接加上了:
pub.settings.output_encoding='cp936'
pub.destination = docutils.io.StringOutput(
encoding=settings.output_encoding)
强制将输出编码指定为'cp936'
2. 修改生成的hhp工程文件的语言指定。在改过了第一步之后,HTML文件已经变了GBK编码,但生成的chm目录仍然不是中文的。经过种种测试,我发现用微软的工具生成的就对,用rst2chm.py生成的就不对。结果我发现,在hhw(微软件工具名)中工程文件中有一个配置选项,其 有一个语言的选项,其值为:0x804 中文。而rst2chm.py中生成的是英文,难怪。找到生成hhp的地方将语言的选项改掉:
settings = {
...
'language': '0x0804 Chinese',
'title': options.title,
'files': '\n'.join(html_files),
}
这样就可以了。
3. 为了将hhp显示出来,我还修改了clean的地方,将它注释掉,不然执行完rst2chm.py会将生成的东西(包括hhp)删除:
# if options.clean:
# status('cleaning up... ', options)
# if options.generate_html:
# map(os.remove, html_files)
# os.remove(options.hhp_file)
# os.remove(options.hhc_file)
# status('OK\n' ,options)
等全部成功后再把注释去了就行了。
基本上经过这些改动,rst2chm.py就可以生成正确的中文目录的chm文档了。
原本想改得更漂亮些,但有些太麻烦,就这样吧。有兴趣的可以试试。
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=51089