fcitx 用上自己的五笔码表

系统字体配置、中文显示和输入法问题
回复
头像
hitly
帖子: 391
注册时间: 2006-02-20 0:27
送出感谢: 0
接收感谢: 0

fcitx 用上自己的五笔码表

#1

帖子 hitly » 2010-12-10 12:28

用习惯自己的码表,就算 Windows7 下用 QQ五笔,也一样是用自己的码表。还有一样就是繁体字的输入用专门的码表会好很多,毕竟 fcitx 那个“繁”点亮之后很多,像“头发”、“发财”这样的同一个“发”字在繁体里是不一样的没法判断,这样的例子数不胜数。

原文链接: http://www.open2l.com/fcitx-wubi.html

现在以“念青五笔”为例,讨论怎么样从 Windows 下获取其码表。在 Windows 下安装好之后,到目录 C:\WINDOWS\SYSTEM 下找 nq.MB (如是繁体版的,则是nqz.MB),其就是码表,当然,双击是打不开的。

我们要一个工具 IMEGEN ,它的作用就是把刚才的 nq.MB 给逆转换成文本文件 nq.txt,这工具上网去搜索一下就马上可以找到。转出来的 nq.txt,显示是这样的:

代码: 全选

工a aau
式aa ais
菚aaa
恭恭敬敬aaaa
工期aaad
葡萄牙aaah
花花世界aaal
工艺aaan
工区aaaq
工匠aaar
工薪aaau
劳苦功高aaay
……
而 fcitx 需要的是这种格式的:

代码: 全选

a   工
aa  式
aaa 菚
aaaa    恭恭敬敬
aaad    工期
aaah    葡萄牙
aaal    花花世界
aaan    工艺
aaaq    工区
aaar    工匠
aaau    工薪
aaay    劳苦功高
……
怎么转换?方法很多,可以各显神通去。这里提供一种方法,用两个 perl 程序在 Linux 下操作完成。

先建立这两个程序。

建立 dos2unix.pl :

代码: 全选

cat > dos2unix.pl << "EOF"
#!/usr/bin/perl -w
while(<> ){
s/\r\n$/\n/;
print;
}
EOF
建立 trans2fcitx.pl (其中的 mywubi.txt 可以改成你想要的输出文件名):

代码: 全选

cat > trans2fcitx.pl << "EOF"
#!/usr/bin/perl -w
open(FH,">mywubi.txt")||die('open fail');
while($str=<> ){
$str=~s/ .*//; #erase extra data after space
$str=~s/([a-z]{1,4}$)//; #extract encodings
$tmp=$1;
chop($str); #erase \n
if(length($str)%2){ #if true indicate wrong whwn extract encodings
$str.=substr($tmp,0,1); #fix the wrong problem
$tmp=~s/[a-z]//;
}
#print FH "$tmp $str\n"; #write to new file
print FH "$tmp  $str\n";
}
EOF
建立好以后,用法以下:

代码: 全选

perl dos2unix.pl < nq.txt >tmp
perl trans2fcitx.pl < tmp
其将生成一个 mywubi.txt ,其就是我们想要的码表,这份文件可以用来当 QQ五笔的词库了,如果平时自己有新词,一点一点加进去,也就形成了自己的专用词库。

有经验的朋友肯定知道 fcitx 源码里其五笔文件码表是这样的:

代码: 全选

;fcitx 版本 0x03 码表文件
键码=abcdefghijklmnopqrstuvwxy
码长=4
拼音=@
拼音长度=4
[组词规则]
e2=p11+p12+p21+p22
e3=p11+p21+p31+p32
a4=p11+p21+p31+n11
[数据]
a 工
a 戈
a 或
a 其
aa 式
aa 戒
aaa 工
aaaa 工
aaaa 恭恭敬敬
……
没错,只要我们打开其源码里的 wbx.txt ,把 “a 工” 及之后的内容全部换成刚才生成的 mywubi.txt 的内容,再另存为一个如 fdjw.txt 的文件,这不就能用了吗?

在 fcitx 3.6 版本之前,挂载上去的方法和现在不一样,我在 viewtopic.php?f=8&t=197169 写过相关的文章。

本文就是讨论怎么从源码里加进去,再编译(至于如何编译安装,我在《编译安装 fcitx4.0》己写)。

这里假设已用上面的方法生成了 fdjb.txt(飞刀简五)、fdzw.txt(飞刀正五)两个文本码表。

解压源码包并进入 table 目录:

代码: 全选

tar xvzf fcitx-4.0.0_all.tar.gz
cd fcitx-4.0.0/data/table
把 fdwb.txt、fdzw.txt 放进这里面。

建立 fdjw.conf ,内容如下:

代码: 全选

[CodeTable]
Name=Feidaojianwu
IconName=wubi
File=fdjw.mb
AdjustOrder=AdjustNo
Priority=1
UsePY=True
PYKey=z
AutoSend=-1
NoneMatchAutoSend=0
UseMatchingKey=True
MatchingKey=z
AutoPhrase=True
AutoPhraseLength=4
AutoPhrasePhrase=True
SaveAutoPhrase=3
ExactMatch=False
PromptTableCode=False
Symbol=zzzz
同样,建立 fdzw.conf ,内容如下:

代码: 全选

[CodeTable]
Name=Feidaozhengwu
IconName=wubi
File=fdzw.mb
AdjustOrder=AdjustNo
Priority=1
UsePY=True
PYKey=z
AutoSend=-1
NoneMatchAutoSend=0
UseMatchingKey=True
MatchingKey=z
AutoPhrase=True
AutoPhraseLength=4
AutoPhrasePhrase=True
SaveAutoPhrase=3
ExactMatch=False
PromptTableCode=False
Symbol=zzzz
其中的 IconName=wubi ,皮肤图标就用其自带的五笔图案,当然可以自己做一个,放到 skin 文件的不同皮肤的文件夹下去,改一个自己的名。

修改同目录下的 Makefile.am 四个地方,在有 wbx 的地方(一共四个)后面都加进相似的,如:

代码: 全选

@srcdir@/wbx.mb \
根据其写法加入 fdjw.mb、fdzw.mb,如下:

代码: 全选

@srcdir@/fdjw.mb \
@srcdir@/fdzw.mb \
同样, Makefile.in 也一样,也是这四个地方。

修改 po 文件夹下的 zh_CN.po 文件,找到下面内容(在第 653 行):

代码: 全选

#: data/table/wbx.conf:2
msgid "Wubi"
msgstr "五笔字型"
在其后加入:

代码: 全选

#: data/table/fdjw.conf:2
msgid "Feidaojianwu"
msgstr "飞刀简五"
 
#: data/table/fdzw.conf:2
msgid "Feidaozhengwu"
msgstr "飞刀正五"
好了可以用上 ./configure && make && make install 三步曲了。
Linux mylinux 2.6.37.3-mylinux #1 SMP Fri Feb 18 19:52:03 CST 2011 i686 GNU/Linux

==
境由心造,事在人为!
==
http://www.open2l.com
==
faguosate
帖子: 54
注册时间: 2010-12-08 17:35
送出感谢: 0
接收感谢: 2 次

Re: fcitx 用上自己的五笔码表

#2

帖子 faguosate » 2010-12-10 16:45

谢谢,很好的脚本。
头像
qq420100523
帖子: 1682
注册时间: 2009-07-31 18:56
系统: windows、ubuntu
来自: 广东阳江
送出感谢: 10 次
接收感谢: 20 次

Re: fcitx 用上自己的五笔码表

#3

帖子 qq420100523 » 2012-06-22 17:09

:em11 收藏之
回复

回到 “字体美化和中文支持”