周 俊,李永忠,杨立华
(江苏科技大学 计算机科学与工程学院,江苏 镇江 212003)
我国藏族人口大约640万[1],藏文的存在已经有1400多年的历史。新世纪信息技术飞速发展,藏文的信息化有助于藏族人民跟上时代的潮流,而藏文输入法的实现对藏文的信息化具有重要意义。到目前为止藏文输入法在PC端的实现已经比较成熟,如微软藏文输入法是现在使用最广泛的藏文输入法,并被定为国家标准藏文输入法。在移动智能终端藏文输入法的研究相对比较空白,文中主要研究了android平台下藏文输入法实现的关键技术,并在此基础上实现了在手机终端的藏文输入。论文的主要内容为藏文的特征与编码、Android输入法框架和藏文输入法的实现过程。
传统的藏文文法一般认为藏文有30个辅音字母和4个元音符号构成[2]。一个藏文音节最多有7个符号构成,这些符号依据藏文的结构特点分别出现在音节字的不同位置 (图1)。每一个方框表示可以出现一个辅音字母,圆圈表示可以出现一个元音符号(一般不同时出现两个元音符号)。
最早的藏文国际标准编码提案是1988年由西方学者P.Lofling提出的,而编码的起步是从国际统一编码联盟发布Unicode1.0(1991年10月)开始的,最初只收录了71个藏文字符[3]。经过版本的不断完善到Unicode6.0已经收录了213个藏文字符,包括篇首符、标点符号、数字符号、辅音和元音字符、宗教符号等,编码范围为0F00-0FFF,这些构成了藏文编码的基本集[4]。
图1 藏文基本结构图Fig.1 The basic structure of Tibetan
中国的藏文编码受到汉字编码方案的影响,编码采用了垂直预组合的编码结构,即由基字和叠加字形成的字丁结构。国家标准《藏文编码字符扩充集A》共收录了1536个藏文和常用梵文的垂直预组合字符,编码范围为F300-F8FF,基本上满足了现代藏文文献的需求[5]。《藏文编码字符扩充集B》则收录了5702个藏文字符,主要为梵源藏文字符,所有字符在GB13000.1-1993的专用平面OF上编码,编码范围为F0000-F1645[6]。
藏文字体的实现采用了OPEN-TYPE技术,传统的字体技术无法实现对Unicode编码的支持,目前能够支持Unicode编码的藏文字库较多,比如DDC Uchen字库、Jomolhari字库、Lobsang Monlam 字库、Qomolangma字库等[7]。
Android是一个以Linux为基础的开放源代码移动设备操作系统,主要用于智能手机和平板电脑,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发中,吸引着无数的开发爱好者投入其中,Android凭借其平台的优势在手机市场上占据巨大份额[8]。Android已发布的最新版本为Android 5.0(Lollipop),Android系统架构主要分成五个部分:linux 内核,Android Runtime,Libraries,Application Framework和 Applications。
Android IMF(输入法框架)是 Android1.5新添的重要模块,能够很好的支持软键盘的输入,开发者可以根据此框架开发各种输入法。该框架主要由3个部分组成:Input method manager、Input method(IME)、Client application。他们之间的关系如图2所示。
图2 Android IMF框架结构Fig.2 Android IMF
Input method manager主要管理各个部分的交互,它是一个客户端API,存在于各个应用程序的context中,用来沟通管理所有进程间交互的全局系统服务。通过
来获取一个InputMethodManager实例。
Input method(IME)实现一个生成文本的独立交互模块,通过绑定一个当前的输入法,使输入法创建和生成、何时隐藏或者显示UI,且同一时间只能运行一个IME。一个输入法是service(服务)的实现,通过继承 InputMethodService来实现,它是输入法框架的核心部分。
输入法实现主要流程为:调用onCreate()方法完成输入法的初始化;通过onCreateInputView()方法在输入创建和返回一个视图层次结构,比如软键盘;onCreateCandidatesView(),创建候选词区域;onStartInputView(EditorInfo, boolean),通过此函数的调用开始输入内容;onFinishInput()该方法用于结束当前输入;最后可以通过onDestroy()方法关闭输入法。整个输入法的生命周期图如图3所示。
client application:通过输入法管理器控制输入焦点和IME的状态。一次只能有一个客户端使用IME。
藏文的输入法的开发也是按照android输入法框架来设计与实现的,主要不同点在于开发藏文输入法要实现对藏文字符的支持,文中主要研究了android平台下藏文字库的支持、藏文的字符的预组合处理和藏文输入法键盘的设置,从而实现藏文的输入。
图3 输入法生命周期图Fig.3 The input method Life cycle
Android API为我们提供了Typeface类[10],我们可以通过该类实现指定的字体和字体的样式,其实现方法如下:
即通过创建一个新的typeface类通过实现create From Asset方法从指定的字体数据中创建新的字样[11]。本文采用的字体库为DDC_Uchen.ttf(把字体库放在assets目录下)该字体库兼容了中国国家标准Unicode扩展集A,基本上能够支持对现代藏文的支持。
输入法的采用的字符集是unicode基本字符集,也就是实现对藏文基本辅音字符,元音字符,常用符号,数字符号等的输入,根据藏文字符的特性要实现藏文字体的完美输入需要对藏文字符的垂直预组合处理,也即实现藏文编码扩充集中垂直叠加而成的藏文字符和常用梵音转写字符的集合,如(UF300)我们通过输入两个基本字符集(U0F68)和(U0F72)完成对该字丁的输入。其实现方法为:
该方法主要完成了扩充集A中的垂直预组合字符和基本字符的转换,从而完成字符的预组合处理。
Android Keyboard.Key类为我们提供了软键盘的设置,我们可以通过此类设置我们的软键盘。我们可以在XML文件定义我们的键盘,例如:
如<Key android:codes="0x0F4F"/>在键盘中显示的藏文字符为 。由藏文的Unicode编码和软键盘的输入法特性,我们可以把常用的藏文符号,基本藏文元音、辅音字符,组合用辅音字母以及数字符号设置在键盘中,根据字符的种类,我们输入键盘分成4个,两个基本辅音字符和元音符号界面,另外两个分别为数字符号和组合用辅音字符界面。最终的藏文键盘效果如图4所示,在真机中的效果图如图5所示。
图4 键盘效果图Fig.4 Keyboard renderings
图5 输入法效果图Fig.5 Input method renderings
文中主要研究了藏文字符的特点,Android输入法框架,以及Android平台下实现藏文输入的关键技术,设计并实现了一个Android平台下的藏文输入法,通过真机验证能有效的进行藏文的输入。
[1]百度百科.藏族[EB/OL].[2014-10-1]http://baike.baidu.com/view/2700.htm.
[2]江荻.藏文识别原理与应用[M].北京.商务印书馆,2012.
[3]The Unicode Consortium.The Unicode Standard.Version 1.0[S].Volume 1,Reading, MA, Addison-Wesley Developers Press,1991.
[4]The Unicode Consortium.The Unicode Standard.Version 6.0[S].Mountain View,CA.2011
[5]国家技术监督局.信息技术 藏文编码字符集 扩充集A[S].(GB/T 20542-2006).北京:中国标准出版社,2007.
[6]国家技术监督局.信息技术 藏文编码字符集 扩充集 B.[S].(GB/T22238-2008).北京:中国标准出版社,2009年。
[7]Digital Tibetan.Tibetan Fonts[EB/OL].[2014-05-01].http://digitaltibetan.org/index.php/Tibetan_Fonts.
[8]wikipedia.Android[EB/OL].[2014-10-07].http://zh.wikipedia.org/zh/Android.
[9]Android APIs.InputMethodManager[EB/OL].[2014-08-05].http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html.
[10]Android APIs.Typeface [EB/OL].[2014 -08 -05].http://developer.android.com/reference/android/graphics/Typeface.html.
[11]周艺环,任伟,张旭,等.电子式互感器异常报文数据库设计[J].陕西电力,2014(5):65-68.ZHOU Yi-huan,REN Wei,ZHANG Xu,et al.Electronic transformer exception message database design[J].Shaanxi Electric Power,2014(5):65-68.