当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : fcitx 用上自己的五笔码表
帖子发表于 : 2010-12-10 12:28 
头像

注册: 2006-02-20 0:27
帖子: 391
送出感谢: 0 次
接收感谢: 0 次
用习惯自己的码表,就算 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 版本之前,挂载上去的方法和现在不一样,我在 http://forum.ubuntu.org.cn/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
==


页首
 用户资料  
 
2 楼 
 文章标题 : Re: fcitx 用上自己的五笔码表
帖子发表于 : 2010-12-10 16:45 

注册: 2010-12-08 17:35
帖子: 54
送出感谢: 0 次
接收感谢: 2
谢谢,很好的脚本。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: fcitx 用上自己的五笔码表
帖子发表于 : 2012-06-22 17:09 
头像

注册: 2009-07-31 18:56
帖子: 1670
地址: 广东阳江
系统: windows、ubuntu
送出感谢: 7
接收感谢: 20
:em11 收藏之


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译