昨天晚上用了一下雅黑字体,觉得一般。无意中发现simsun,simhei等字体是中易公司的杰作,进一步发现一直被我忽视的郑码相当强大,很值得学一学。后来发现fcitx支持郑码的码表,小高兴了一下,准备把支持18030大字符集的郑码6.6码表整合到fcitx中。
折腾了半天,按照fcitx码表的格式,用python写了个脚本把window下用imengine.exe提取出来的郑码码表转成fcitx格式的(imengine在c:\Program Files\Windows NT\Accessories下,如果你没有,那你肯定是用番茄花园的系统盘,给优化掉了;大字符集的郑码在安装完郑码6.6后,才就是c:\WINDOWS\system32\ZMGB18J.MB,windows自带的是WINZM.MB)。然后就用fcitx自带的txt2mb来生成mb文件,这时问题来了。fcitx的源代码是用euc-cn编码的,里面用来判断码表源码格式正确与否的是用 “[数据]” 这样一个字段,而我生成的码表源文件是用utf8编码的,[数据]这几个字的编码和euc-cn是不同的,所以就被认为格式错误,这个郁闷
一怒之下,写了个python脚本把fcitx的源码都改成utf8编码。自以为这下没问题了,编译时发现,通不过,这下无语了。突然想到,scim可以支持多种语言,因此它肯定能支持utf8,所以就决定换回scim。
上网搜了一下,发现ubuntu上的zhasm在6.17号做了一个郑码的scim码表(详见这个链接)。他用的是perl,生成的是windows自带的5.0版的郑码码表。具体的步骤也说明了,不过没有给出脚本,所以我就打算自己用python写一个转换的脚本,来用收录了18030字符集的郑码码表。
scim也可以支持五笔,这个需要LANGUAS="zh"来安装scim-tables,gentoo下emerge -av scim-tables即可。之后在/usr/share/scim/tables下就可以找到WuBi.bin文件,这个就是五笔码表的二进制文件。我们可以用scim-make-table WuBi.bin -o wubi.txt来生成其源文件,这是我们生成郑码码表的指南,从中我们可以知道scim-table支持的码表是什么格式。我偷懒,直接用zhasm的zm.txt里的信息部分作为头文件,复制为headinfo.txt,所以现在需要解决的问题就是用windows下的码表(提供编码)和五笔(提供词频)的scim码表来生成郑码的scim码表部分,具体的也是用正则表达式来解决。今天再次体验到正则表达式的威力,一个字,牛!
简单地说,我们先获得郑码的字词编码并分为1,2,3,4四类,对应1个到四个键的编码,然后我们找出五笔里对应字词的词频,最后我们把这个处理过的,带有词频的码表数据放在headinfo后边写到zmgb.txt中。这样scim格式的大字符集郑码码表就做好了。
有了码表就可用用scim-make-table zmgb.txt -b -o zm.bin来生成二进制格式的码表。zhasm做了一个郑码的图标zm.png我们就不需要自己做图标了。最后把zm.bin放到/usr/share/scim/tables下,把zm.png放到/usr/share/scim/icons下,重启X(或重启scim,理论上应该也可以,我没试),在scim图标上点左键,你就会看到郑码已经添加到你的scim中了![]()
最后和大家分享一下脚本吧。郑码的码表还是大家自己做吧,毕竟是中易版权所有的东西![]()
我把源码贴出来了,不过是龙文平台的郑码,大同小异,可以到我的blog上搜索,见:zhasm.com
地址是,http://zhasm.com/archives/59.html 不过这封评论有可能被当成spam过滤掉。
好的,我去看看:-)