Sunpinyin代码导读(八)
要构建ime部分的代码,可以执行下面的操作:
$ ./autogen.sh --prefix=/usr --enable-debug --enable-gtkstandalone
$ make
使用--enable-gtkstandalone选项,会生成一个不依赖于输入法框架的演示程序,位于wrapper/gtk_standalone目录中。你可以通过这个演示程序来了解或调试Sunpinyin输入法的代码。我们后面的系列,也会从这个演示程序入手。
同时,在configure.ac中,--enable-cle是缺省打开的(你可以通过--disable-cle来关闭这个选项),因此在执行make时,还同时会为iiimf-cle(Chinese Language Engine)构建一个输入法模块,执行make install,会把它安装到/usr/lib/iiim/le/cle的目录下。如果要在Mac OS上编译,需要export LDFLAGS=-liconv。
Sunpinyin支持两种输入风格,“经典风格”和“及时转换风格”。“及时转换风格”和微软拼音的风格类似,用户在输入拼音时,只在preedit区域中显示当前的最佳句子,可以通过左右键,对其中任意不满意的部分进行编辑(即用户选择,user selection)。

“经典风格”和紫光拼音(以及后来的搜狗拼音、Google拼音)的风格类似。用户在输入拼音时,preedit区域中显示的是输入的拼音串(或用户选择),候选区中显示当前的最佳句子,以及拼音串开始部分的拼音可能得到的词和字。但这种风格下,第一次用户选择只能从拼音串的起始部分开始。


Sunpinyin采用了view/window-handler的结构。上述的两种风格,在代码中分别对应于两个视图(view)类:CIMIModernView和CIMIClassicView。所谓window-handler,就是view的一个callback类。ime/wrapper目录下有三个window-handler的实现,cle, iiim_le和gtk_standalone。要将Sunpinyin移植到其它输入法框架或平台,主要的工作就是为其编写一个wrapper。我们非常希望SCIM社区的开发者、Mac OS上的输入法开发者,会有兴趣将Sunpinyin移植到他们擅长的平台上。
下一回,我们会介绍ime部分的概念模型(concept model)。


我对于现在很多的拼音输入法一直有一个意见,只不过没处提,现在碰到了自己人,当然要说一声。
以你这篇文章最后的两个图举例,当用户输入“ce shi pin yin shu ru fa de jing du”这一串字母之后,如果他真的是想输入“测试拼音输入法的精度”这段文字,那么他很简单地拍一下空格就好了。但是如你的后一个图中所示,既然他没有拍空格,而是敲了2键,选择了“测试”这个词,那么应该可以100%地肯定,他打算输入的文字绝对不是“测试拼音输入法的精度”,而是“测试”别的什么东西。那么我想,这个时候,汉字提示就不应当把“拼音输入法的精度”作为第一备选,而是应该提示别的文字。我经常遇到打算输入的文字和输入法提示的只有最后一个字不一样,这样很可能要一路按2下去才能选择对。
发表于 Weijun 在 2007年09月11日, 06:15 下午 CST #
还有,很喜欢文章里把函数名和OpenSolaris代码库链接在一起的方法。
发表于 Weijun 在 2007年09月11日, 06:18 下午 CST #
Weijun,非常感谢您的建议,十分有道理,我们在改进时一定注意。:)
发表于 Yong Sun 在 2007年09月11日, 06:38 下午 CST #
请问, CIMIClassicView 和 CIMIModernView 的主要区别是不是:后者与前者相比,增加了更多的编辑模式?
发表于 tchaikov 在 2007年09月13日, 12:06 上午 CST #
tchaikov, 我感觉这两种风格,就实现而言其复杂程度都差不多,主要还是风格上的差异。
发表于 Yong Sun 在 2007年09月13日, 07:22 上午 CST #
这几年埋头于他处,偶然路过,又见勇哥的文采,呵呵很熟悉啊!
发表于 HolyMoon 在 2007年09月21日, 04:45 下午 CST #
建华啊,好久不见了,找时间大家再聚一聚吧,呵呵
发表于 Yong Sun 在 2007年09月24日, 09:26 上午 CST #
Hi,
I'm preparing to blog about SunPinYin in Japanese.
How did you take these screenshots?
JDS screen capture didn't work for me.
发表于 kinoue 在 2007年10月12日, 02:35 下午 CST #
Hi, Kinoue, you could use GIMP, and click [File]->[Acquire]->[Screenshot], in the popup dialog, select "Take a screenshot of a single window" (the default one), and set the timeout (e.g., 5s), then activate the input method, wait for the timeout. At last, choose the window with your cursor.
BTW, do you know Chinese, and if possible, would you like to translate my blog entries to Japanese? :$
发表于 Yong Sun 在 2007年10月12日, 02:47 下午 CST #
Kinoue, btw, after you publish your blog entry, would you please send me a link? :)
发表于 Yong Sun 在 2007年10月12日, 02:53 下午 CST #
Sun先生,非常感谢.我已经拍了几张SunPinYin窗好了。我一定送你trackback。
关于翻译成日文,你写的内容太难 :)
发表于 井上 在 2007年10月12日, 03:37 下午 CST #
Yong Sun, I wrote something at http://blogs.sun.com/LetTheSunShineIn/entry/sunpinyin_%E3%81%A7%E4%B8%AD%E5%9B%BD%E8%AA%9E%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B
发表于 kinoue 在 2007年10月20日, 01:18 上午 CST #
kinoue, yeah, I also noticed your blog on BSC. Thank you so much for promoting sunpinyin. :)
发表于 Yong Sun 在 2007年10月20日, 07:26 上午 CST #
Hi, Yong, 我想学习在Linux下编写输入法,可是找不到有关Linux平台下输入法framework的文档,不知道从何入手,能推荐一把吗?
发表于 Nice 在 2007年11月22日, 10:18 下午 CST #
Hi, Nice, Linux上广泛使用的是SCIM输入法平台,你可以到www.scim-im.org上看看有没有参考文档。最直接的办法是,研究一个比较简单的SCIM输入法实例,例如scim-chewing,它的算法和逻辑都在libchewing中,输入法的接口相对简单。
发表于 Yong Sun 在 2007年11月23日, 09:02 上午 CST #
非常感谢!btw,SunPinyin 的IIIMF 是和scim等同的一个概念吗?
发表于 Nice 在 2007年11月24日, 06:50 下午 CST #
Hi, Nice, 是的,IIIMF和SCIM都属于输入法框架。
发表于 Yong Sun 在 2007年11月25日, 09:01 下午 CST #