LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 969|回复: 0

转贴一篇关于中文输入法的文章,作者是繁体中文输入法xcin的维护者。

[复制链接]
发表于 2004-3-23 14:48:30 | 显示全部楼层 |阅读模式
中文輸入法
作者:謝東翰
由於一般電腦鍵盤上的字鍵數目有限,多半 (遠) 少於地區語文所需的文字或符號的數目,使得在很多情況下無法做到一個按鍵就對應一個「字」或符號。對於使用拼音語系的地區而言,由於基本的拼音字母較少,因此可以藉由功能鍵改變鍵盤狀態,讓同一個字鍵在不同狀態下輸出不同的字母。例如在我們一般的鍵盤中, CapsLock 關閉的情況下可以打出小寫英文字母,反之可以打出大寫英文字母。

然而,到了非拼音語系的地區,特別是?喼拚Z系的國家,光是藉由上述方式也不足已打出所有的文字與符號了,故在這些地區中通常需要藉助「輸入法程式」?硗瓿晌淖州斎氲墓ぷ鳌R粋輸入法程式主要的工作是攔截使用者所敲入的字鍵序列,經由查表或其他方式將這些字鍵序列轉換成該地區文字符號,然後才輸出至應用程式。而字鍵序列與文字符號之間的對應關係,就形成了各式各樣的輸入法。而逐一將字鍵序列組合出一個個文字符號的過程,就稱之為「組字」。

大體而言,我們的「中文輸入」就是以上述的方式達成的。以下我們就針對 GNU/Linux 系統?碚勚形妮斎氲慕鉀Q方案。


純文字模式下的中文輸入:
在早期電腦的記憶體與運算能力仍十分有限的時候,若要執行 X Window 系統多半無法達到令人?M意的效能,故那時候的操作環境多半是在純文字模式之下,而純文字模式下的中文輸入方案也應需求而一一出現。

在此模式下,由於一般的文字終端機只能顯示英文,故剛我們嘗試用中文輸入法程式?磔斎胫形臅r,我們必須連帶要設法讓文字終端機也能顯示中文,如此才有意義。因此,在此模式下的輸入法程式通常會與一個可以顯示中文的文字終端機連在一起,啟動它後就等於進入了一個「中文輸入輸出」的環境。而且,一個能顯示中文字的中文終端機程式,往往比輸入法本身還要重要。

一般而言,文字模式下的輸入法?K沒有特殊的規範或協定,程式所要做的,只有取得使用者的字鍵輸入,再將中文輸出到「標準輸出 (standard out)」管道,系統自然會將這些文字餵入應用程式中。只要應用程式能夠接受?K處理 8 位元字元碼,則不會有任何問題。

這?文字模式下的中文輸入法與中文終端機程式種?很多,早期以王佑中先生所發展的 chdrv 為主要的代表,它是一個 GNU/Linux 下的中文終端機、輸入法的程式。另一個在同時期的?似程式為 yact, 它與 chdrv 的不同點在於 chdrv 是直接去控制 tty 裝置以模擬出中文終端機,而 yact 卻是以顯示卡繪圖函式庫 svgalib 為基礎,將純文字模式的終端機轉為圖形模式以顯示中文字。這些早期的中文輸入系統各自有其缺點,而隨著時間的流逝也?u?u沒有在維護了,但其他?似的中文軟體卻相繼出現。它們或是以早期的中文輸入系統為基礎,針對其缺點加以修正,或是引進新的設計概念,使其有較好的功能與較多的輸入法支援。這?的軟體包括 bcs16、jmce、jmcce .... 等。至於 FreeBSD 系統上,有早期常見的 big5con,以及後?沓霈F的可顯示、輸入 GB 碼的中文終端機程式 cce .... 等。

這?用於純文字模式下的中文輸入系統,由於需要將原本的文字顯示轉為圖形顯示,如此才能畫中文字。然而轉換成圖形顯示的方式可能依系統的不同而有不同,例如同樣在 x86 系統下執行的 GNU/Linux 與 FreeBSD 系統,它們在處理終端機程式的方式不盡相同,而且對硬體顯示卡的控制方式也有差?,這使得分別針對這些系統所設計的中文終端機程式不容易移植到其他系統上去,甚至同樣在 GNU/Linux 平台上,為 x86 系統所設計的也無法在其他硬體平台上編譯後執行。這一點與以下將介紹的 X Window 環境下的中文輸入法程式有很大的不同。?管如此,這些不同的中文輸入系統仍在原始碼的層次上互相截長補短,彼此吸收對方的優點。例如最近才出現的 jmcce, 它就是改進自 bcs16、cce、與 jmce 等中文輸入系統,而這也正是自由軟體世界中分享、互惠精神的一個很好的範例。


X Window 下的中文輸入:

XIM 協定:
由於近?黼娔X硬體的進步,使得執行 X Window 系統?u?u可以達到令人?M意的效能,同時在一般情況下使用圖形操作介面往往比純文字的操作介面方便,故有越?碓蕉嗟氖褂谜咿D向使用 X Window 的環境,使用 X Window 下的中文終端機程式與中文輸入法。因此在相對上,純文字模式的中文輸入法使用者較少了,而 X Window 下的輸入法發展則日?u蓬勃起?怼

在 X Window 的圖形介面底下,由於各程式間的交互作用是以「視窗」為單位,它們可以藉由標準的 X 協定達到彼此間的溝通,故我們自然而然地可以將中文終端機程式與輸入法本身分開發展,而不再需要像純文字模式下將二者綁在一起 (然而在早期的確有將二者綁在一起的解決方案,如 cxterm,它是直接自 X Window 的標準終端機程式 xterm 修改而?),如此在一個圖形桌面上只需執行一個中文輸入法,就可以對許多中文終端機程式提供中文輸入的服務,不但?省系統資源,同時模組化的開發模式也讓後續維護工作容易得多。

然而,在 X Window 下的輸入法所面臨的問題卻比純文字下要複雜許多。由於考慮到程式國際化等方面的問題,故 X Window 定義了一組標準的輸入法協定,稱之為 XIM (X Input Method) 協定。此協定是架構在程式國際化 (I18N) 與系統區域化資料庫 (locale) 之上的,故只要遵守此協定,則應用程式就可以在不需修改程式碼的原則下,接受?碜愿鞣N語系輸入法程式的文字輸入。

與純文字輸入方式不同的是,在這裡輸入法程式不預先攔截使用者的字鍵輸入。而應用程式與輸入法程式之間的關係,就好像客戶端與伺服端一樣,應用程式提出輸入請求,則輸入法程式提供輸入服務。因此,當我們對一個視窗做中文輸入時,?際上敲入的字鍵是直接送往應用程式本身,而應用程式在處理它之前,會先經由 XIM 協定將這些字鍵序列送往輸入法程式,然後由輸入法程式那邊取得中文字。故在此協定下,應用程式又稱之為 ``XIM client'',而輸入法程式又稱之為 ``XIM server''。

在一個 ``X Window 的顯示設備 (display)'' 中 (這裡意指一個螢幕、一個鍵盤,再加一個滑鼠,也就是一個 X Window 終端桌上環境),可以同時執行好幾個 XIM server,它們可以輸出不同語系的文字 (例如有的可以用?泶蛑形模械目梢源蛉瘴),或其中有幾個可以輸出相同語系的文字。而 XIM client 要選那一個 XIM server ?硎褂茫仨毻高^以下兩個環境變數的設定:
export LC_CTYPE={區域化資料庫名稱}
export XMODIFIERS="@im={XIM server 名稱}"
其中前者指定了語系環境,後者指定了要用那一個輸入法程式。所有的 XIM client 在啟動之前必須先有上述的環境變數設定,啟動後才能接受該 XIM server 的輸入。

一般 XIM server 所顯示的資?可以分成以下三?:


組字資?: 顯示於 XIM server 組字的過程中。
狀態資?: 顯示 XIM server 目前的狀態。
其他輔助資?: 例如功能表選單或線上文件說明等。
其中依組字與狀態資?顯示的位置不同,就形成了各種操作介面 (input style),供使用者方便使用。其中包括:


Root: 此二資?都顯示在 XIM server 的主視窗內。
OverTheSpot: XIM server 會在 XIM client 的輸入游標附近開啟一個小視窗,以顯示組字資?。如此使用者在打字過程中眼睛就不需要時時去看 XIM server 主視窗的組字資?。
OffTheSpot: XIM client 會在自己的視窗中開出一塊區域,讓 XIM server ?盹@示其組字資?。此區域通常是在 XIM client 視窗的底下。
OnTheSpot: XIM server 提供必要的資料給 XIM client,讓它用自己的方法?懋 XIM server 的組字資?。這通常是給有特別需求的 XIM client 選用。
其中 Root 模式是最簡單的方式,一般而言所有的 XIM server 與 XIM client 都會支援,至於其他的模式則不一定。必須 XIM server 與 XIM client 都同時支援的模式才能使用。如果二者同時支援幾種模式,則當二者開始連繫,準備讓使用者輸入時,它們就會先協調好,以挑選最佳的模式?碛谩.斎唬芏鄷r候使用者也可以在 XIM client 這邊指定要使用那一種模式。

由於 X Window 環境下有較好的人機介面,因此大部分的輸入法程式都是在 X Window 下運作的。早期的輸入法程式可能不支援 XIM 協定,但近年?硇掳l展的輸入法程式幾乎都支援 XIM 協定,以下就幾種常見、可以做中文輸入的輸入法程式稍作介紹。


XCIN (X Chinese INput method):
XCIN (http://xcin.linux.org.tw) 可能是台灣地區最普及的一個輸入法程式。它最早期是由 劉德華 (Edward Der-Hua Liu) 先生發展的 (1994 年 10 月),那時它?K不支援 XIM 協定,直到 1999 年全新改寫後才開始支援。歷經多年的延革,?K加入了多位網友的貢獻,使它逐?u成為一個穩定且功能齊備的輸入法程式。其特色包括:


支援 BIG5, BIG5HKSCS, 與 GB2312 等多種編碼方式。使用時只要在不同的區域化資料庫環境 (LC_CTYPE) 下啟動它,即可自動採用該語系的編碼?碜鲚斎搿

支援動態外掛式輸入模組,讓我們可以依需要開發不同的輸入法模組,以支援不同的輸入法。目前 XCIN 套件內含三個輸入法模組:

zh_hex: 內碼輸入模組。
gen_inp: 一般性輸入法模組,以查表方式進行組字,適用於字根?型的輸入法。
bimsphone: 自動猜字注音輸入法。它以 libtabe (http://libtabe.sourceforg.net/, http://xcin.linux.org.tw/libtabe/) 做為猜字引擎,經由字詞的分析辭庫查詢完成自動猜字動作。
除此之外,由其他計畫所發展的 XCIN 輸入法模組計有:


酷音中音輸入法 (http://chewing.oio.cx/): 它是由中研際資?所徐讚昇博士指導、?律全與?康本所設計的輸入法模組。 它也是一個自動猜字的注音輸入法,擁有比 bimsphone 更方便的功能,使用 上與 Microsoft 平台上常見的自然輸入法很接近。

支援多種輸入法。除了上述的內碼輸入與自動猜字注音輸入法以外,還支援了:

倉頡輸入法 (BIG5, BIG5HKSCS, GB2312)
行列 30 輸入法 (BIG5)
拼音輸入法 (BIG5, GB2312)
簡易輸入法 (BIG5)
一般注音輸入法 (BIG5, GB2312)
雙拼輸入法 (GB2312)
五筆輸入法 (GB2312)
另外,一些商業公司也提供了適當的輸入法表格,在其特定的版權限制下,可以在 XCIN 底下使用。其中包括了大易輸入法、嘸蝦米輸入法 .... 等等。


支援 Xi18n, XIM 協定與 Root 和 OverTheSpot 輸入模式。

擁有豐富多樣使用者自定選項。

可以跨平台編譯執行,其中包括 GNU/Linux, FreeBSD 與 HP-UX。
當然,XCIN 仍不是一個完美的程式,未?砣杂邢喈敶蟮母纳瓶臻g,主要包括: Unicode 與更多編碼系統的支援、輸入法模組功能改進、可同時處理多區域化資料庫的 XIM client 請求、更多 UNIX 平台的移植等等。


Chinput
這是一個針對 GB 編碼與大陸地區使用者習慣而設計的中文輸入法,其設計者為于明儉先生。它是以 cxterm 為基礎發展出?淼摹K瑯又г XIM 協定,與 XCIN 相較,它具備較佳的拼音輸入功能,有較好的圖形操作介面,同時也支援 GB、Big5、JIS (一種日文的編碼) 與 KS (一種韓文的編碼) 等編碼方式,以及許多常見的輸入法表格和方便的輸入功能,是一支相當優秀的中文輸入法程式。


參考資料:

Xlib Programming Manual, 作者: Adrian Nye, 出版者: O'Reilly, ISBN 1-56592-002-3.

XCIN 發展計畫: http://xcin.linux.org.tw/.

libtabe 計畫: http://libtabe.sourceforge.net/,
http://xcin.linux.org.tw/libtabe/.

酷音輸入法計畫: http://chewing.oio.cx/.

Chinput: http://www.lslnet.com/linux/ch/chinput.html.

中文 HOTWO: http://www.linuxdoc.org/HOWTO/Chinese-HOWTO.html.
http://www.linux.org.tw/CLDP/Chinese-HOWTO.html.

本文的原始鏈接是http://www.slat.org/project/software-map/v0.3/node111.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表