摘要:根據(jù)面向中西亞軟件開發(fā)與出口的戰(zhàn)略,需要開發(fā)適合在哈薩克斯坦國應(yīng)用的哈文操作系統(tǒng)及應(yīng)用軟件。通過對哈薩克斯坦國目前使用的文字的調(diào)查與研究,總結(jié)出目前哈國使用的文字編碼字符集、鍵盤布局,編制出哈薩克斯坦哈文輸入法,實現(xiàn)了哈薩克斯坦哈文鍵盤輸入,為開發(fā)哈薩克斯坦哈文操作系統(tǒng)提供了支持。
關(guān)鍵詞:哈薩克文;編碼字符集;鍵盤布局;輸入法
中圖法分類號:TP391文獻(xiàn)標(biāo)識碼: A 文章編號:1009-3044(2009)35-10116-02
Character Research and Input Method of Kazakhstan Kazakh in Information Processing
FENG Li-juan, YUAN Bao-she
(College of Information Science and Engineering, Xinjiang University, Urumqi 830046, China)
Abstract: Based on the software development and export strategy of facing central Asia and west Asia, it is necessary to develop Operating system and application software fit in Kazakhstan. By means of the investment and research to the character use in Kazakhstan at the present time, summarized the coded character sets, and keyboard layout that currently use in Kazakhstan, developed the input method of Kazakhstan Kazakh, implemented the keyboard layout of the Kazakhstan Kazakh, supplied supports to develop the Operating system of Kazakhstan Kazakh.
Key words: kazakh; the coded character sets; keyboard layout; input method
新疆是中國參與中亞區(qū)域經(jīng)濟(jì)合作的主體和前沿,將在中亞區(qū)域經(jīng)濟(jì)合作中扮演重要角色,發(fā)揮獨特的作用。在操作系統(tǒng)平臺上實現(xiàn)哈薩克斯坦國文字信息處理并向中亞國家出口軟件,是新疆發(fā)展外向型軟件產(chǎn)業(yè)的一個方向和優(yōu)勢。
哈薩克斯坦國目前使用的文字種類多,應(yīng)用狀態(tài)比較混亂[1]。通過對哈薩克斯坦國目前使用的文字的調(diào)查與研究,總結(jié)出目前哈國使用的文字編碼字符集、鍵盤布局,編制出西里爾哈文輸入法及老哈文輸入法,實現(xiàn)了西里爾哈文及阿拉伯字母哈文鍵盤輸入,為開發(fā)用于哈薩克斯坦國的哈文操作系統(tǒng)提供了支持。
1 哈薩克斯坦國語言文字現(xiàn)狀
由于歷史的原因,哈薩克斯坦國目前使用的語言主要分成哈薩克語與俄語兩大類,其中哈薩克語又分三種不同的文字來表示。哈薩克斯坦共和國目前使用的文字主要有四種:1) 俄文;2) 以阿拉伯字母為基礎(chǔ)的哈薩克文;3) 以西里爾字母為基礎(chǔ)的哈薩克文;4) 以拉丁字母為基礎(chǔ)的哈薩克文。
哈薩克斯坦地區(qū)使用的文字經(jīng)歷過多次變革,較早期使用以阿拉伯文符號表示哈文字母,稱老文字。并入前蘇聯(lián)后主要使用俄文,獨立后的哈薩克斯坦國決定恢復(fù)使用哈薩克文,但由于在前蘇聯(lián)時期俄文已經(jīng)完全普及,目前國民中依然是習(xí)慣用俄文。以上三種哈文文字也都有人在使用,將來哈薩克斯坦國文字可能走拉丁化的道路[2]。在哈薩克斯坦以外的其他國家(包括中國境內(nèi))的哈薩克族人主要使用以阿拉伯字母為基礎(chǔ)的老哈文。下面分別介紹哈薩克斯坦國目前使用的文字。
1.1 俄文
目前在哈薩克斯坦國使用俄文的人比較多。哈薩克斯坦國使用的俄文與俄羅斯的俄文是一樣的,包括有33個字母,元音字母10個,輔音字母21個,2個無音字母[3]。對于俄文字母我們已經(jīng)很熟悉了,本文不作介紹。
1.2 西里爾字母的哈薩克文
20世紀(jì)40年代的前蘇聯(lián)時期,為了有利于人們學(xué)習(xí)和掌握俄語,和俄文字母及編輯方向保持一致,哈薩克文改用西里爾字母拼寫。
哈薩克語有37個音素,以西里爾字母為基礎(chǔ)的哈薩克文有42個字母,不同于俄文的33個字母,字母不出現(xiàn)在俄文詞里,是哈薩克語特有的字母。字母在哈薩克語里用來拼寫外來語(俄語)借詞時使用[4]。因此,哈薩克斯坦哈薩克標(biāo)準(zhǔn)語一般只有31個音素。從語言歷史來看,哈薩克語固有詞中,實際上只有24或25個音位。如表一為西里爾字母的哈薩克文字母。
字母ь和ъ只用來拼寫,為非音素字母。其中ъ叫硬音符號;ь叫軟音符號。
哈薩克斯坦從前蘇聯(lián)獨立以后,為了減少前蘇聯(lián)的影響,大力推廣哈薩克語。這就使得越來越多的人開始使用西里爾字母的哈薩克文。現(xiàn)今使用西里爾字母的哈薩克文和俄文兩種文字的人都比較多。
1.3 阿拉伯字母的哈文
在哈薩克斯坦的歷史上曾經(jīng)使用過阿拉伯字母為基礎(chǔ)的哈薩克老文字。老文字共有33個字母,但書寫方法和西里爾字母不一樣。老文字具有一些特點:采用從右向左的書寫方法;書寫順序具有雙向性;字母的顯現(xiàn)形式有變化(分為4種顯現(xiàn)形式:獨寫形、首寫形、中寫形和尾寫形);具有連字特征,具有2個字母用一個代碼的情況;字符寬度不等[5]。
盡管獨立后的哈薩克斯坦國曾決定恢復(fù)使用老文字,由于左向文字與世界上多數(shù)國家的右向文字在輸入與處理上存在許多的不便,加上哈薩克斯坦國俄文和西里爾文的普及,實際上使用這種老文字的場合并不多。
1.4 拉丁化的哈文
目前,哈薩克斯坦國進(jìn)一步進(jìn)行文字改革,計劃走拉丁化的道路。以拉丁字母為基礎(chǔ)的哈薩克文字,和英文一樣都采用拉丁字母。20世紀(jì)20年代的時候,哈薩克斯坦曾經(jīng)使用過拉丁字母拼寫哈薩克文[2]。因此“向拉丁字母轉(zhuǎn)變”這一概念準(zhǔn)確地講,應(yīng)該是恢復(fù)使用哈薩克斯坦曾經(jīng)使用過的文字。世界上的發(fā)達(dá)國家都通過計算機(jī)發(fā)展自己的文字和文化,而計算機(jī)直接處理的都是拉丁英文字母。因此采用拉丁字母是哈薩克斯坦的一種趨勢,在文字改革中,多數(shù)學(xué)者都贊同使用拉丁字母。
2 哈薩克文字符集編碼
哈薩克斯坦國目前使用的哈薩克文有三種表示形式。以Unicode代碼為例,三種形式的哈薩克文字在Unicode字符集中都已包括。其中:基于西里爾文字母的哈文編碼使用\\u0401~\\u04E9,共占84個碼位;基于阿拉伯文字母的老哈文名義字符使用\\u060C~\\u0651的編碼區(qū),其對應(yīng)的變形顯現(xiàn)形式占用\\uFB00~\\uFEFF的編碼區(qū),共占130個碼位;基于拉丁字母的哈文使用基本拉丁區(qū)和拉丁擴(kuò)充區(qū)的代碼[6]。
3 哈薩克文輸入法
3.1 西里爾哈文輸入法
西里爾字母為基礎(chǔ)的哈薩克文字有42個字母,在QWERTY鍵盤上輸入時必須占用部分符號鍵位。西里爾哈文鍵盤布局見圖1。
可以利用IMM-IME結(jié)構(gòu)實現(xiàn)西里爾哈文輸入法。IMM是輸入法管理器,該模塊負(fù)責(zé)管理各種輸入法之間的切換,及輸入鍵盤狀態(tài)和鍵盤數(shù)據(jù)的傳送等。
IME是輸入法編輯器,這是哈薩克文輸入法的主要部分。IME模塊的程序文件名為:*.ime。實際上IME文件是一個動態(tài)鏈接庫程序,它與一般的*.dil文件沒有區(qū)別,只是文件的擴(kuò)展名不同而已。輸入法的算法就在該模塊中實現(xiàn)。該模塊從系統(tǒng)中接收鍵盤消息,經(jīng)過輸入法所定義的有關(guān)轉(zhuǎn)換產(chǎn)生西里爾哈薩克文字符。
輸入法的實現(xiàn)主要包括IME轉(zhuǎn)換界面的接口函數(shù)的實現(xiàn)和IME用戶界面的實現(xiàn)。下面分別介紹。
IME轉(zhuǎn)換界面的接口函數(shù)的實現(xiàn)。在微軟公司的輸入法開發(fā)規(guī)范中,共設(shè)計了19個接口函數(shù)。這些函數(shù)供IMM在適當(dāng)?shù)臅r候調(diào)用。并非每一個輸入法編輯器在實現(xiàn)時都需要在所有的接口函數(shù)中添加代碼,大部分情況下很多函數(shù)只需保留一個空函數(shù)體即可[7]。下面給出的4個函數(shù),對于鍵盤輸入法來說比較重要,必須予以實現(xiàn)。分別為:1)ImeInquire:此接口函數(shù)在用戶選擇西里爾字母哈文輸入法時最先由輸入法管理器(IMM)調(diào)用,以獲得該輸入法的有關(guān)信息。2)ImeConfigure:此接口函數(shù)將在用戶通過控制面板或系統(tǒng)圖標(biāo)設(shè)置西里爾字母哈文輸入法屬性時被輸入法管理器調(diào)用。3)ImeProcessKey:此接口函數(shù)由西里爾字母哈文輸入法管理器在處理鍵盤事件時調(diào)用。4)ImeToAsciiEx:只有當(dāng)ImeProcessKey返回TRUE時才調(diào)用這個接口函數(shù)。
IME用戶界面的實現(xiàn)。用戶界面接口是由一些可見或不可見的窗口組成,這些窗口主要的作用是接收處理各種消息以及為IME提供與用戶交互的界面。用戶界面的接口實現(xiàn)主要有以下幾個部分:UI窗口(包括窗口類和窗口過程、消息處理函數(shù)),UI窗口組件(狀態(tài)窗口、輸入窗口、候選窗口等窗口的窗口類和窗口過程),IME的屬性配置窗口、軟鍵盤、任務(wù)條上的指示器窗口和輸入法熱鍵等。這些窗口將接收和處理由IMM和應(yīng)用程序發(fā)來的輸入消息,提供與用戶交互的界面,讓用戶隨時了解輸入法的當(dāng)前狀態(tài)。在編寫用戶界面窗口的過程時,主要是處理由缺省的IME窗口傳入的IME消息。其中WM-IME-SETCONTEX T、WM-IME-STARTCOMPOSITION/WM-IME-ENDCOMPOSITION、WM-IME-CONPOSITI_ ON、WM-IME-SELEC等消息相對比較重要,應(yīng)予以處理。
通過以上過程我們就完成了西里爾字母哈文的計算機(jī)輸入與輸出。
3.2 阿拉伯字母老哈文輸入法
在線程和輸入隊列共享技術(shù)的基礎(chǔ)上,利用Windows操作系統(tǒng)的Hook機(jī)制實現(xiàn)阿拉伯字母老哈文的輸入。在Win32中,每個線程都有自己的輸入狀態(tài),通過修改線程的輸入狀態(tài)可以安裝老哈文鍵盤鉤子。但Win32中,用戶的鍵盤輸入被導(dǎo)向一個線程的輸入隊列,而不是一個窗口。 在一個線程輸入隊列中的消息是不能被其它線程隨意訪問的,因GetFoc_ us( )函數(shù)返回調(diào)用線程的本地輸入狀態(tài)變量所指示的擁有鍵盤輸入焦點的窗口的句柄,所以直接用GetFocus( )函數(shù)來截取擁有輸入焦點的窗口句柄是不可能的。因此可以采用線程輸入隊列的共享技術(shù)。為了滿足在不同場合的要求,Microsoft提供一個API函數(shù)GetForeGround_ Window( ):
BOOLGetForeGroundWindow(void);
該函數(shù)返回當(dāng)前位于前臺的窗口的句柄,即主窗口的句柄。為了給此窗口發(fā)送鍵盤消息, 這里的應(yīng)用程序必須共享它的輸入隊列。這時,應(yīng)用程序能夠跟蹤被發(fā)送到其它應(yīng)用程序的各類消息。輸入隊列的共享由下列函數(shù)來實現(xiàn):
BOOL AttachThreadInput(DWORD idAttach, idAttachTo, fAttach)
DWORD idAttach; //輸入隊列被共享的線程的ID
DWORD idAttachTo;//想要讓線程共享的那個輸入隊列的線程的ID
DWORD fAttach; //如果為TRUE,表示想要共享,如果為FASLE 表示再次分開兩個線程的輸入隊列。
實現(xiàn)輸入隊列的共享以后,可以用Windows API函數(shù)SetWindowsHookEx( )函數(shù)安裝一個鍵盤鉤子實現(xiàn)老哈文字符的輸入。鍵盤鉤子在輸入事件到達(dá)應(yīng)用程序之前將其截獲,將鍵盤等輸入設(shè)備的動作消息轉(zhuǎn)化為阿拉伯字母老哈文的字串,而后再傳遞給應(yīng)用程序窗口。
由于對老哈文字符集采用了Unicode編碼,在輸出老哈文時必須調(diào)用有關(guān)API 函數(shù)的Unicode版本。在WindowsXP中Unicode字符串的輸出是通過調(diào)用TextOutW或ExtTextOutW函數(shù)來實現(xiàn)的。如TextOutW函數(shù)的原型為:
BOOL TextOutW(HDC,Hdc,int X,int Y,LPCWSTR lpStr,int nCount);
調(diào)用這些Unicode版本的輸出函數(shù)后,就能夠輸出任何一個老哈文字符。通過以上的方法就完成了老哈文的輸入與輸出。
3.3 拉丁字母哈文輸入法
拉丁字母哈文輸入可以用鍵盤映射自定義鍵盤輸入,比較簡單,本文不介紹。
4 結(jié)束語
本文的研究工作以新疆維吾爾自治區(qū)面向中、西亞軟件開發(fā)項目為研究背景,實現(xiàn)了西里爾字母哈薩克文及阿拉伯字母老哈文的鍵盤輸入,為進(jìn)一步開發(fā)相應(yīng)的面向中亞的哈薩克文操作系統(tǒng)本地化提供了基礎(chǔ)。
參考文獻(xiàn):
[1] 張宏莉,趙榮.哈薩克斯坦的語言政策[J].世界民族,2006(3):28-37.
[2] 吳宏偉.哈薩克斯坦共和國的哈薩克語文研究[J].世界民族,1999(1):72-76.
[3] 周鼎,徐振新.俄語入門[M].北京:外語教學(xué)與研究出版社,1986.
[4] 阿里肯阿吾哈力.哈薩克斯坦哈薩克語教程[M].北京:民族出版社,2006.
[5] 袁保社,袁曉琴.OpenType字形技術(shù)研究與哈薩克文字庫設(shè)計[J].計算機(jī)工程與設(shè)計,2009,30(10):2570-2572.
[6] The Unicode consortium[EB/OL].Unicode,Inc:http://www.Unicode.org.
[7] 胡宇曉,馬少平,夏瑩.基于IMM-IME輸入法接口的實現(xiàn)方法[J].計算機(jī)工程與應(yīng)用,2002(1):117-124.