论文部分内容阅读
【摘要】Linux系统的输入法存在多种框架和实现,以往的标准化努力没有给出令人满意的结果,输入法引擎(IME)接口标准化采用了新的路线,有助于开发可适用于不同框架的IME。在总结归纳现有输入法框架基础上,分析了对IME接口进行标准化的基本原理,详细说明了IME接口标准的重要特性和设计原则;相关的实体被划分到4个部分,使用时序图对不同部分的交互进行了细致的分析,其设计和实践可供开发符合标准的IME时参考。
【关键词】中文信息处理;输入法;输入法引擎;Linux标准化
【中图号】TP3-0【文献标示码】A【文章编号】1005-1074(2008)11-0225-01
1标准化输入法引擎API
1.1标准化路线的改变以往对输入法标准化的对象分别是输入法客户使用输入法的API和输入法框架的工作协议,随着系统的演进、国际化水平的提高,原有标准已经不再能满足用户需求,其约束力也在减弱。中文Linux标准对输入法标准化对象的选择,是以往标准认定的属于特定框架实现内部事务的输入法引擎API,从输入法发展情况看,这一全新的标准化路线不仅合理,而且可行。制定一个更好的标准取代现有标准并不容易现实,目前多种XIM 替代框架都在发展,各有优势和用户群,用标准形式对竞争前景尚不明朗的技术做出选择显然不是明智之举。此外,XIM协议标准化是为了在单一的框架中允许不同实现,从实践情况看,这种标准化方式的意义也值得推敲。多种框架并存的现状可能长期存在,对不同类型系统综合考虑时更是如此,输入法引擎API标准化是在这一前提下的合理选择。此标准化路线的可行性根源在于不同框架下的接口语义是相似的,实际的差异主要来自不同的编程风格和功能划分,在综合分析现有框架下输入法引擎接口的基础上,提出一个更合理、更完备的API定义是完全可能的。
1.2主要特性设计既然多种输入法框架并存的现状必须面对,“框架独立性”就成为输入法引擎API标准设计的一个基本出发点。为适应不同框架要求,需要对标准API应具备的能力做出取舍,一些依靠特定框架结构才能实现的特性将不在标准中做出要求,一些只对特定框架才有意义的信息也不通过标准接口暴露给输入法引擎。输入法引擎API标准对输入法应具有的标准界面做出了规定,不是对标准界面的外观进行具体定义,而是对所需界面元素以及相应功能进行了规范;设计基于领域内的最佳实践,并充分考虑了动态载入的特性和输入法引擎个性化的要求。自画界面支持是标准的重要部分,以前对此没有进行过有效规范。自画界面不仅可用于输入法引擎提供自己的操作界面,而且可用于开发非键盘输入法引擎和各种输入法辅助工具。支持自画界面的关键是提供输入法引擎与框架、辅助界面进程与框架之间的双向通信通道,标准最终定义了一个通用的通信机制。
1.3接口设计的一些原则首先是在保证接口功能语义的前提下尽可能使接口形式简单直观,以便输入法引擎开发者理解和使用;其次是简化依赖关系,输入法引擎以模块形式被框架加载,模块必须提供一个特定名字的注册函数作为与框架交换所有信息的入口,模块对框架不存在依赖关系。这种单向依赖避免了让不同框架提供同名函数库的方法可能带来的二进制兼容问题。另一个原则是让输入法引擎模块包含足够的自说明信息,这样可以避免依靠外部配置文件来载入模块,便于输入法引擎在不同框架下的部署。
2输入法引擎API标准概况
2.1设计模型输入法引擎API设计模型中有4个基本部件:IMM负责载入输入法引擎模块并进行管理;IME以模块形式实现输入法逻辑;Helper Manager载入辅助模块并进行管理;Helper以模块形式实现辅助功能Helper部分最初为自画界面而设计,后来已超出单纯界面的作用,可用于实现各种辅助功能,所以用Helper命名。输入法引擎API由IMM/IME接口和Helper Manager/Helper接口构成。实际系统中输入法部件的动态运行机制可以有很大不同,从进程模型看,不同IME在IMM 进程中(如果是库模式,可能就在应用程序进程中)运行,Helper则一般会在独立进程中执行,不同Helper进程应该由一个Helper Manager根根进程创建,并在创建过程中建立与框架中其他部分的通信信道,具体过程是各输入法框架实现定义的,并不反映在标准内容中。
2.2标准界面的工作流程对使用标准界面的输入法引擎而言,需要关心的只是IME/IMM接口,进程的主循环在IME之外,IME提供了一系列接口函数,供IMM在不同时机调用。IMM载入IME模块的过程是最初入口,通过使用系统提供的动态加载函数载入模块,获得模块注册函数访问入口,以有效的IMM函数集结构和空白IME函数集结构作为参数调用该注册函数,IMM和IME双方即可获得使用对方功能所需的全部入口。以上载入过程基本也适用于Helper模块的载入。
IME和IMM 之间的部分典型交互过程以及触发时机示例如下:①初始化过程。给IME一个初始化自身的机会,IMM完成模块载入过程后进行。②创建输入法上下文(IC)。让IME有机会建立自己的私有IC数据,当输入法客户程序要求建立IC时进行。③按键处理。当用户按键时进行,让IME能对按键进行处理,实现输入法逻辑。④界面事件处理。使IME能对IMM标准界面事件做出相应,例如鼠标选择候选页翻页、鼠标操作改变预编辑区光标位置等。
3基于标准的输入法引擎实现
使用标准界面的输入法引擎Unicode内码输入法,功能是输入包括替代对(surrogate pair)在内的UTF-16编码,提交对应字符的UTF-8编码。由于加入了替代对处理,对预编辑区的显示和编辑都有较为完整的处理,另外加入了候选列表处理以便测试候选显示功能。
【关键词】中文信息处理;输入法;输入法引擎;Linux标准化
【中图号】TP3-0【文献标示码】A【文章编号】1005-1074(2008)11-0225-01
1标准化输入法引擎API
1.1标准化路线的改变以往对输入法标准化的对象分别是输入法客户使用输入法的API和输入法框架的工作协议,随着系统的演进、国际化水平的提高,原有标准已经不再能满足用户需求,其约束力也在减弱。中文Linux标准对输入法标准化对象的选择,是以往标准认定的属于特定框架实现内部事务的输入法引擎API,从输入法发展情况看,这一全新的标准化路线不仅合理,而且可行。制定一个更好的标准取代现有标准并不容易现实,目前多种XIM 替代框架都在发展,各有优势和用户群,用标准形式对竞争前景尚不明朗的技术做出选择显然不是明智之举。此外,XIM协议标准化是为了在单一的框架中允许不同实现,从实践情况看,这种标准化方式的意义也值得推敲。多种框架并存的现状可能长期存在,对不同类型系统综合考虑时更是如此,输入法引擎API标准化是在这一前提下的合理选择。此标准化路线的可行性根源在于不同框架下的接口语义是相似的,实际的差异主要来自不同的编程风格和功能划分,在综合分析现有框架下输入法引擎接口的基础上,提出一个更合理、更完备的API定义是完全可能的。
1.2主要特性设计既然多种输入法框架并存的现状必须面对,“框架独立性”就成为输入法引擎API标准设计的一个基本出发点。为适应不同框架要求,需要对标准API应具备的能力做出取舍,一些依靠特定框架结构才能实现的特性将不在标准中做出要求,一些只对特定框架才有意义的信息也不通过标准接口暴露给输入法引擎。输入法引擎API标准对输入法应具有的标准界面做出了规定,不是对标准界面的外观进行具体定义,而是对所需界面元素以及相应功能进行了规范;设计基于领域内的最佳实践,并充分考虑了动态载入的特性和输入法引擎个性化的要求。自画界面支持是标准的重要部分,以前对此没有进行过有效规范。自画界面不仅可用于输入法引擎提供自己的操作界面,而且可用于开发非键盘输入法引擎和各种输入法辅助工具。支持自画界面的关键是提供输入法引擎与框架、辅助界面进程与框架之间的双向通信通道,标准最终定义了一个通用的通信机制。
1.3接口设计的一些原则首先是在保证接口功能语义的前提下尽可能使接口形式简单直观,以便输入法引擎开发者理解和使用;其次是简化依赖关系,输入法引擎以模块形式被框架加载,模块必须提供一个特定名字的注册函数作为与框架交换所有信息的入口,模块对框架不存在依赖关系。这种单向依赖避免了让不同框架提供同名函数库的方法可能带来的二进制兼容问题。另一个原则是让输入法引擎模块包含足够的自说明信息,这样可以避免依靠外部配置文件来载入模块,便于输入法引擎在不同框架下的部署。
2输入法引擎API标准概况
2.1设计模型输入法引擎API设计模型中有4个基本部件:IMM负责载入输入法引擎模块并进行管理;IME以模块形式实现输入法逻辑;Helper Manager载入辅助模块并进行管理;Helper以模块形式实现辅助功能Helper部分最初为自画界面而设计,后来已超出单纯界面的作用,可用于实现各种辅助功能,所以用Helper命名。输入法引擎API由IMM/IME接口和Helper Manager/Helper接口构成。实际系统中输入法部件的动态运行机制可以有很大不同,从进程模型看,不同IME在IMM 进程中(如果是库模式,可能就在应用程序进程中)运行,Helper则一般会在独立进程中执行,不同Helper进程应该由一个Helper Manager根根进程创建,并在创建过程中建立与框架中其他部分的通信信道,具体过程是各输入法框架实现定义的,并不反映在标准内容中。
2.2标准界面的工作流程对使用标准界面的输入法引擎而言,需要关心的只是IME/IMM接口,进程的主循环在IME之外,IME提供了一系列接口函数,供IMM在不同时机调用。IMM载入IME模块的过程是最初入口,通过使用系统提供的动态加载函数载入模块,获得模块注册函数访问入口,以有效的IMM函数集结构和空白IME函数集结构作为参数调用该注册函数,IMM和IME双方即可获得使用对方功能所需的全部入口。以上载入过程基本也适用于Helper模块的载入。
IME和IMM 之间的部分典型交互过程以及触发时机示例如下:①初始化过程。给IME一个初始化自身的机会,IMM完成模块载入过程后进行。②创建输入法上下文(IC)。让IME有机会建立自己的私有IC数据,当输入法客户程序要求建立IC时进行。③按键处理。当用户按键时进行,让IME能对按键进行处理,实现输入法逻辑。④界面事件处理。使IME能对IMM标准界面事件做出相应,例如鼠标选择候选页翻页、鼠标操作改变预编辑区光标位置等。
3基于标准的输入法引擎实现
使用标准界面的输入法引擎Unicode内码输入法,功能是输入包括替代对(surrogate pair)在内的UTF-16编码,提交对应字符的UTF-8编码。由于加入了替代对处理,对预编辑区的显示和编辑都有较为完整的处理,另外加入了候选列表处理以便测试候选显示功能。