SCIM输入法架构及其工作原理

来源 :硅谷 | 被引量 : 0次 | 上传用户:wspywps110
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要: 基于XIM结构的输入法与X Windows系统结合过于紧密,不适合于Linux系统。而且XIM存在严重的设计缺陷,它无法支持国际化语言环境。而新一代输入法框架SCIM的出现解决以上问题,介绍SCIM的设计结构和工作原理。
  关键词: SCIM;Linux;输入法
  中图分类号:TP391.14 文献标识码:A 文章编号:1671-7597(2011)0820085-01
  
  0 引言
  国内最流行的Linux中文输入法是由余明俭等人开发的ZWinPro/Chinput。但由于该输入法直接依赖XIM输入法协议,而且没有考虑到对多语言环境的支持问题,因此这个输入法从架构上只支持中文输入。为了解决以上问题,苏哲等人开发了一个新的输入法框架SCIM(Smart Common Input Method)。作为新一代输入法框架,其架构设计精良,具有很好的扩充性和灵性性,代码质量也非常高。
  1 SCIM输入法架构的优越性
  目前,国际上有很多开发团队都在致力于开发基于SCIM框架的输入法,原因在于相对于其他的输入法架构,SCIM架构具有其独特的优越性。主要体现在:
  1)支持40多种语言,包括中日韩语、东南亚各国语言、中亚各国语言以及各种拉丁语言。
  2)采用完全面向对象的设计,并用C++实现。
  3)高度模块化。每个功能模块都以独立插件的形式存在,非常的灵活。
  4)简单的编程接口。
  5)不但支持传统的键盘输入法,也支持手写识别等新式输入法。
  6)输入法模块完全独立于图形界面,便于开发和跨平台移植。
  2 SCIM的结构设计
  有了SCIM输入法框架,输入法开发者只要编写简单的代码就可以实现自己的输入法,大大简化了输入法的开发难度。SCIM是完全模块化的,每个模块都可以完成某个功能,彼此之间非常独立,但是模块本身却是高内聚的。SCIM主要有以下几大模块:配置模块(Config)、引擎模块(IMEngine)、前端模块(FrontEnd)、进程间通信模块(IPC)、输入法Panel和Helper模块。下面简要介绍一下各个模块的特点和功能:
  1)配置模块(Config)
  配置模块最主要的功能就是为应用程序配置一些共享信息,以防冲突。所有的配置信息都由Config统一进行管理,其他模块存取配置信息都需要通过向它发送请求。SCIM的配置文件由Config 文件和Global文件组成,前者保存的是与输入法相关的配置信息,如输入法引擎、快捷键等参数,后者保存的是与输入法无关的配置信息,如socket超时、socket地址等信息。SCIM中的配置模块有不同的实现,但这些实现都必须遵循ConfigBase接口规范。
  2)输入法前端模块(FrontEnd)
  前端模块的主要功能是接受输入法服务进程中来自客户端应用程序的的请求,然后把请求转发给具体的输入法引擎或者配置模块,最后把处理的结果返回给刚才请求的客户端应用程序(在这里,输入法是作为一个服务进程来实现的)。SCIM输入法前端也有不同的实现,这些实现都遵循FrontEndBase接口规范。
  3)输入法引擎模块(IMEngine)
  输入法引擎的功能是实现具体的输入法。比如要实现全拼输入法,五笔输入法,首先需要实现一个输入法引擎(SCIM中的输入法引擎也有多种实现,这些实现都遵循IMEngineInstanceBase接口规范),然后编译成一个动态库,放在指定的目录之中。所以其它输入法都是以单独的软件包发行的,并不在SCIM的核心之列。SCIM跟具体的输入法不相关联,而是运行时动态的加载进来的。SCIM中的输入法引擎也有多种实现,这些实现都遵循IMEngineInstanceBase接口。
  4)进程间通信模块IPC
  SCIM采用的本地socket方式。应用层协议封装在Transaction中,它主要负责把特定的请求或事件等打包成数据包和从数据包中取出请求或事件。Socket实现数据的实际传输。服务器端使用SocketServer,客户端使用SocketClient。无论是服务器端还是客户端,Transaction并不关心,因为它使用的是Socket的抽象接口。
  5)输入法Panel
  对于输入法来说,Panel是不可缺少的一部分。 Panel的主要功能是提供给用户比较直观的感受,如候选字,联想词组等,也提供了一些辅助功能,如全角半角切换,中英文切换、标点切换、查看帮助信息等。Panel是有图形用户界面的,Panel必须要与特定的GUI绑定起来,SCIM虽然实现了一个基于GTK的Panel,但它是一个完全独立的工具,不管用哪一个GUI实现Panel,大部分代码都是相同或者相似的,只要稍做修改即可。SCIM把代码封装在PanelAgent和PanelClient这两个类中。前者实现所有和面板相关的socket协议,后者处理所有面板和前端的socket通信,前端用PanelClient来与Panel后台进程进行交互。
  6)输入法Helper
  SCIM把一些新的输入法方式,如手写输入法等进行特殊处理,通过Helper集成进来。SCIM提供了一个HelperAgent类,这个类的功能是把手写输入法的结果提交给应用程序。
  3 SCIM的工作原理
  在SCIM中,输入法有三大功能模块:FrontEnd,IMEngine和BackEnd。这三大模块分别实现的功能是:
  FrontEnd:主要负责用户界面的显示,以及与客户程序进行交互,将客户程序的按键请求转发给IMEngine,执行IMEngine发出的各种命令,如绘制预编辑字符串等等。FrontEndBase基类负责管理所有IMEngineInstance实例。
  IMEngine:接收FrontEnd发送的按键事件,然后向FrontEnd发送相应的命令,如显示预编辑字符串、向客户程序提交字符串等等。
  BackEnd:管理所有的IMEngine。如全拼、双拼、五笔、手写等。
  SCIM输入法工作原理图如图1所示。
  在SCIM中最关键的部分是FrontEnd和IMEngine。这两部分的实现及其之间的通讯方式是SCIM较其它输入法平台最不同的地方。
  FrontEnd主要完成用户界面的绘制、与客户应用程序交互,FrontEnd
  Base基类负责管理所有IMEngineInstance实例这三方面工作。每个IMEngineInstance 实例用唯一的id进行标识,FrontEndBase类提供的函数和IMEngineInstance的id完成对IMEngineInstance的所有操作。FrontEnd派生类不需直接处理IMEngineInstance实例或者其指针。
  ase基类负责管理所有IMEngineInstance实例这三方面工作。每个IMEngineInstance 实例用唯一的id进行标识,FrontEndBase类提供的函数和IMEngineInstance的id完成对IMEngineInstance的所有操作。FrontEnd派生类不需直接处理IMEngineInstance实例或者其指针。
  IMEngine分为IMEngineFactory和IMengineInstance两个接口类。要实现具体的输入法,比如纵横汉字输入法,就必须提供这两个类的具体实现。IMengineFactory除了负责管理如词库等的输入法涉及的公共数据,还负责创建IMEngineInstance实例。IMEngineInstance类则负责把实际的按键转换为字符串。
  FrontEnd和IMEngine之间的数据通信采用了一种松散的接口形式,即signal-slot技术,这样的方式可以简化编程接口。输入法引擎所需的所有动作都经由signal-slot发送给FrontEnd,而输入法引擎需要处理的事件则直接由FrontEnd调用IMEngineInstance类的相应函数来传递。
  4 SCIM输入法架构的发展方向
  整句输入是输入法的一个发展方向;提供更丰富的设置功能,能够满足不同用户的操作习惯也是其努力的目标。最新提出的并击技术可以大大提高打字速度,研究适合普通人使用的、比较易学的新一代的免费或低收费的并击输入法,我认为这是输入法研究的一个新的方向。
  
  参考文献:
  [1]努尔麦麦提·尤鲁瓦斯、吾守尔·斯拉木,Linux系统下基于SCIM的多语种混合输入法系统,多媒体技术及其应用本:142-143.
  [2]苏哲,开源架构师谈SCIM,软件世界,2006:70-71.
  [3]基于SCIM的输入法框架简介,http://wenku.baidu.com/view/eee723
  E69b89680203d8257a.html.
  [4]SCIM输入法架构分析,http://blog.csdn.net/absurd/.
  [5]于翔、赵晨星,Linux操作系统下三种输入法架构分析,青海大学学报,2007,25(3):62-65.
其他文献
据国外媒体报道,搜索引擎公司百度已经推出了一个针对Android平台的应用网店服务。该服务现在只能通过Android手机直接访问。报道称百度自身并未直接提供这些应用的下载,而仍是通过搜索的方式,提供第三方应用网店的下载地址。目前,百度Android应用目录下正在推广两个热门的应用,即带广告版本的愤怒小鸟与水果忍者。  在搜索并选择一款应用后,用户可以直接从百度页面上进行下载,无需访问第三方网站的页
摘 要: 以山东外贸职业学院下属的实验室为应用背景,在分析现有的实验室信息管理系统(LIMS)的基础上,综合运用.NET平台下的ASP.NET技术和组件技术,实现一个人性化的、适合高等院校实验室管理者和应用者使用的实验室信息管理系统。本系统为高校实验的管理者和应用者提供很大的便利,不仅能让管理者方便地管理实验室的相关信息,规范实验室的管理流程,提高实验室的利用率,还能让应用者(教师和学生)及时了
本文通过对荣华二采区10
期刊
摘 要: 简单介绍UPS电源的工作原理,主要介绍UPS电源所采用的六种先进技术和提高UPS可靠性的三种方法。  关键词: UPS电源;绝缘栅双极型晶体管;可靠性  中图分类号:TM910 文献标识码:A 文章编号:1671-7597(2011)0820082-01    1 UPS电源工作原理  UPS电源按输出波形可分为方波输出和正弦波输出两大类。按其操作方式可分为后备式和在线式。其中后备
摘 要: MFC是Microsoft foundation class的简称。MFC是世界上第1个应用程序的框架类库,当时的C++还未标准化。MFC设计者们把面向对象程序设计理念引入以往过程式编程的领域,在面向对象程序设计初露头角的时候用当时还是比较低级的C++实现庞大程序框架。MFC设计庞大的类,有的类封装windows API,大大减少windows设计的工作量。MFC 6.0封装大约200