1.关于scim输入法平台 1
1.1 SCIM 设计概要 1
1.2 SCIM 的工作原理 1
2.SCIM输入法平台的安装 2
2.1下载SCIM输入法平台安装源代码 2
2.2在Linux环境下安装SCIM输入法平台 2
3.配置运行 SCIM 3
3.1命令行参数 3
3.2在终端中运行 SCIM 3
3.3将 SCIM 加入启动脚本 4
3.4参数设置 4
3.5各种配置模块简介 4
4.在scim输入法平台下实现蒙文输入法的难点 5
Linux环境下scim输入法平台的安装及配置
作者: 陈杰 指导老师: 郑关胜
南京信息工程大学计算机科学与技术2005级 学号:20054808052
摘要:语言文字是信息的主要载体,语言文字信息处理的水平,网络中语言文字使用的水平,直接关系到国家的信息化水平。首先对scim输入法平台进行了简单的介绍;然后对SCIM输入法平台的安装过程进行了描述;最后讲了一下scim输入法平台的配置运行方法。
关键词:蒙文输入法; Linux系统;scim输入法平台;
引言
现在我们已经实现了WINDOWS系统下蒙文输入法,然而我们更希望蒙文输入法能成为一种开放性资源,也就是其源代码可以允许所有的公众对其进行浏览、利用以及加以改进。Linux的源代码开放性为打破垄断、发展自主操作系统提供了机遇。作为一种将源代码完全开放的Unix类操作系统,它的开放性和技术的先进性,为我们提供了一个很好的平台。在Linux系统下实现蒙文输入法有一种方法,就是先安装scim输入法平台。
1.关于scim输入法平台
1.1 SCIM 设计概要
SCIM 库是一个通用的输入法开发平台,可以大大简化输入法的开发难度。在SCIM中,输入法被分为三大部分: FrontEnd,Server和BackEnd。这三部分的功能是:
FrontEnd:负责用户界面的显示,与客户程序通讯,将客户程序的按键请求转发给Server,执行 Server 发出的各种命令,如绘制预编辑字符串等等。
Server:接收由FrontEnd发送的按键事件,并向FrontEnd发送相应的命令,如显示预编辑字符串,向客户程序提交字符串等等。
BackEnd:管理所有的 Server。
以上三大部分通过四个虚基类(scimFrontEndBase,scimServerFactoryBase,scimServerInstanceBase,scimBackEndBase)定义了统一的接口,所有具体实现必须由这些基类派生出来。SCIM还提供了丰富的工具函数和类,如负责做编码转换的scimConvert类,负责管理候选字(词)查找表的scimLookupTable类,读写配置文件的scimConfigBase类等等。SCIM的一个显著特点是,FrontEnd,Server,Config等部分都实现了模块化,可以通过动态模块来实现具体的功能,支持不同的系统和环境。大大增强SCIM 的灵活性和可移植性。
1.2 SCIM 的工作原理
在 SCIM 中最关键的部分是FrontEnd和Server。这两部分的实现及其之间的通讯方式是SCIM与其它同类平台最不一样的地方。首先介绍一下Server部分的组成。Server部分分为ServerFactory和ServerInstance两个接口类,每个输入法服务器 都要提供这两个类的具体实现。ServerFactory负责管理输入法使用的公共数据,如 词库等等,它还负责创建ServerInstance实例。 ServerInstance类负责实际的按键到字符串的转换工作。现有输入法开发平台中的 IC (Input Context) 部分其实就是对应 ServerInstance类。ServerInstance类就是IC 的数据与处理函数的封装。每个 IC 对应一个 ServerInstance 实例。所有ServerInstance实例由 FrontEnd基类管理。每个IC对应的状态变量,分为两部分, 其中预编辑字符串等与用户界面无关的数据都保存在ServerInstance实例中;而输入窗口位置等与用户界面相关的数据则由 FrontEnd 派生类负责管理FrontEnd 的详细内容将在下面介绍。下面介绍一下FrontEnd和Server 之间的数据交换和通讯方式。为了简化编程接口,在FrontEnd和Server之间采用了一种松散的接口形式,即signal-slot技术。首先将输入法所需的所有动作以及用户界面中包含的所有基本元素总结归纳出来,其中输入法中所需要的元素包括:预编辑字符串(Preedit String):用户输入的字符在转换成实际字符串提交给客户程序之前,将显示在预编辑字符串区域中。
预编辑光标(Preedit Caret):预编辑字符串中的光标, 用户可以利用这个光标对预编辑字符串进行编辑。
状态字符串(Status String):显示输入法服务器当前的状态,如当前编码,语言等。
候选字/词查找表(Lookup Table):用户输入的按键与结果字符串可能是一对多的关系,一个(组)按键对应的所有可能的结果字符串将显示在查找表内, 供用户选择。
辅助字符串(Aux String):输入法可能需要显示某些辅助信息, 可以显示在这个区域。为了简化设计,采用了单向的signal-slot结构,即输入法服务器所需的所有动作都经由signal-slot发送给FrontEnd,而输入法服务器需要处理的事件则直接由FrontEnd调用ServerInstance类的相应函数来传递。所有动作信号的触发与事件函数的调用都封装在ServerInstance和FrontEnd 基类里。派生类只需要调用基类的相应函数即可,完全不用关心FrontEnd和ServerInstance之间的具体通讯方式。
2.SCIM输入法平台的安装
2.1下载SCIM输入法平台安装源代码
网络上有很多下载SCIM的地址,我们选用了SCIM官方网站进行了下载。在网上下载了SCIM源码包scim-1.2.2.tar.gz 。
2.2在Linux环境下安装SCIM输入法平台
我们使用的环境是Red Hat Linux Fedora Core 2
2.21.解压缩SCIM源代码包
在终端中进入包含scim-1.2.2.tar.gz的文件夹。键入命令:
tar xvfz scim-1.2.2.tar.gz
2.22配置文件
在终端中键入命令:
./configure –prefix=/usr
这一步用来生成Makefile,为下一步的编译做准备。以上命令的意思是将该软件安装在/usr下面,执行文件安装在/usr/bin(而不是默认的/usr/local/bin),资源文件就会安装在/usr/share(而不是默认的/usr/loval/share)。
2.23对软件进行编译
在终端中键入命令:
make
这一步是编译,下载的软件源代码在编译过程中没有发现错误。
2.24安装源代码
在终端中键入命令:
make install
这一步完成后,就实现了源代码在Linux下的安装。
3.配置运行 SCIM
启动 SCIM 最简单的命令就是 scim -d,该命令以后台进程形式启动 SCIM 的XFree86 XIM 前端模块, 并调入搜索到的所有输入法模块。
3.1命令行参数
scim 命令的参数有:
参数 | 目的 |
-h,--help | 显示简单的帮助。 |
-d,--daemon | 以后台进程形式运行。 |
-l,--list | 列出所有可用的模块。 |
-f,--frontend name | 运行指定的前端模块 (缺省运行 x11 前端)。 |
-c,--config name | 使用指定的配置模块 (缺省使用 simple 模块)。 |
-e,--engines name | 仅调入指定的输入法引擎模块 (缺省调入所有输入法引擎模块)。 多个模块可以用逗号隔开。 |
-ne,--no-engines name | 不调入指定的输入法引擎模块。 |
--no-socket | 不启动的 Socket 前端进程。 缺省情况下, SCIM 会首先启动一个的 Socket 前端守护进程来提供输入法服务, 然后再启动实际的 SCIM 进程。 如果已经指定使用 socket 前端, 则该选项无效。 |
$ scim -e pinyin -d
如果不想调入拼音输入法模块, 可以用如下命令启动 SCIM:
$ scim -ne pinyin -d
3.2在终端中运行 SCIM
在终端中使用以下命令启动 scim:
$ export XMODIFIERS="@im=SCIM"
$ scim -d
如果不出意外, 在这个终端中运行的应用程序都可以使用 SCIM 了。 SCIM 缺省的开关键是 ctrl-space。
3.3将 SCIM 加入启动脚本
如果想在进入图形界面后就直接可以在应用程序中使用 SCIM, 就需要将 SCIM 的启动命令加到图形界面的启动脚本中去。
如何将 SCIM 加入启动脚本
RedHat 9.x:
修改 /etc/X11/xinit/xinitrc.d/xinput。 将Chinput变为SCIM, chinput变为scim,并增加一行,如:
zh_CN*)
if [ -e /usr/bin/scim ]; then
XIM="SCIM"
elif [ -e /usr/X11R6/bin/xcin ]; then
export LC_CTYPE=zh_CN.GB2312
XIM="xcin-zh_CN.GB2312"
fi
zh_TW*)
……
;;
SCIM)
XIM_PROGRAM=scim
XIM_ARGS="-d"
;;
xcin)
……
3.4参数设置
SCIM 的参数是通过动态加载的配置模块来保存和读取的。 目前, SCIM 提供了三个配置模块:simple,gconf 和socket。下面将简要介绍一下各个配置模块的原理和功能。
SCIM还提供了一套图形化的设置界面和相应的设置模块。可以通过该设置界面修改各种配置参数。将在第二节介绍该设置界面的用法。
3.5各种配置模块简介
SCIM目前提供了以下三个配置模块:
3.5.1simple
将配置参数保存在文本文件里,缺省的置文件是:
/etc/scim/config
系统缺省配置文件
~/.scim/config
用户配置文件
用户配置文件的优先级高于系统缺省配置文件。同一个配置出现在多个配置文件中,以最高优先级的配置文件为准。
配置文件的格式如下:
/FrontEnd/X11/OnTheSpot = true
/FrontEnd/X11/ShowStatusBox = false
等号左边是配置参数的名称,右边是对应的值。对于布尔型参数,值为 true,false或者0,1。对于列表,各个元素之间用逗号分隔,如:
/FrontEnd/Keys/NextFactory = Control+Alt+Down,Control+Shift_R,Control+Shift_L
3.5.2gconf
将配置参数保存在GConf数据库里。具体参数可以用gconf-editor程序编辑。此模块为附加模块,一般不使用。使用GNOME 2.x桌面环境的用户可以使用此模块。
3.5.3.socket
利用scim Socket FrontEnd(网络前端)提供的服务来保存和读取配置参数。 该模块仅在构建网络输入环境和使GTK2本地输入模块(immodule)的时候有用。配置参数实际还是通过simple或者 gconf 配置模块保存的。
另外,还有一个虚拟的dummy配置模块,如果使用该配置模块,则所有的配置参数将会使用程序缺省的值。所有更新的参数将不被保存。该配置模块仅在某些特殊场合使用,如嵌入式系统,以减少内存和磁盘占用。
4.在scim输入法平台下实现蒙文输入法的难点
蒙古语言是阿尔泰语系的蒙古族语言文字。蒙古文是一种特殊的文字,是十世纪前后借用粟特文、回鹤文字母,经过几百年的演变而形成的文字。蒙古语有33个基本字母,其中元音字母7个,其他为辅音字母。每个字母在词首、词中、词尾出现时,其书写形式均有变化,而且蒙古语字母在组成单词时,是无缝隙连接显示;在排版时,是从上至下连接成词、从左向右换行的纵向排版显示方式。
由于蒙古语言文字在使用上的这种特殊要求,所以到目前为止尚没有出现一套完善的、能为用户所使用的蒙古文办公自动化套件产品,更不用说能实现跨平台操作。另外,由于在Unicode标准编码中蒙古文只有名义字符编码而没有显现字符编码,显示时存在“一对多”的问题。而且,某些手写体的蒙文字体,往往会出现几个蒙古文字符无法分开的情形,显示时会出现“多对一”的问题。以上是我们有待解决的问题。
结束语
Linux目前在中国的用户已经超过10万人,在内蒙古地区的用户也在不断增加。许多商业公司和团体不断的加入到Linux中文化、本地化的计划中。
由于本人准备论文的时间紧张而且能力有限,所以还有很多缺点与不足之处是必然的,希望各位老师和同学给予批评和建议。
在本文写作过程中得到了郑关胜老师多次精心指导,在此表示衷心感谢。
参考文献
[1]于明俭,陈向阳,方汉.linux程序设计权威指南[M].北京机械工业出版,2001.
[2]王舟.Unix操作系统的国际化和本地化[J].计算机应用研究,1998,(3):42-45.
[3]MohammedJ.Kabir.RedHatLinuxAdministrator’sHandbook[M].北京:电子工业出版社,2000.
[4] http://www.scim-im.org
[5] http://freedesktop.org/wiki/Software_2fscim