周 俊,李永忠,楊立華
(江蘇科技大學 計算機科學與工程學院,江蘇 鎮江 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.