[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: xcin input method



On Wed, Jan 05, 2000 at 09:13:57AM +0800, thhsieh@linux.org.tw wrote:
> 是的,我正計畫要改寫 gen_inp, 看能否也加入行列 30 的這項需求。
> 但我在想如果要寫的話就寫得完善一點,不要只是行列 30 just work
> 就好了。目前還沒有腹案,有人可以提供建議嗎? :-))

  我作了以下的 patch,基本上已經符合行列30 的「字」輸入規格,
解決了 w[0-9] 符號輸入和 "t" 鍵入「的」字、 "t1" 鍵入「隨」字
等問題。不過可能有點不正規,不知您喜不喜歡,加上我的 C 編程水平
實在有限,祈請參閱指正。 ^_^  不過,現在用行列30打中文打得很順就是了。 ^_^
(gen_inp.patch 和 array30.patch)。(嘻嘻,I know,我正一自私鬼。 ^_^)

  BTW, apply gen_inp.patch 前,請先:

	$ unexpand gen_inp.c > gen_inp.c.new
	$ mv gen_inp.c.new gen_inp.c

> 其實我就是「行列 40」的用戶 :-)) 但我的「行列 40」已經有點走味了,
> 反正我覺得用不習慣就改。但因為我不知道行列 40 到底能不能自由使用,
> 所以我一直沒有將 .cin 檔放出來。如果可以的話,我當然樂意加入。

  也許是時候向行列科技談一下,問個清楚。去年多前弄的 array30.cin,
一直沒有回報給行列科技,前幾個星期赫然發現行列的下載區有配合 xcin 使用的
array30.tab 下載,不過我猜是給 xcin2.3 使用的版本。也許可以跟他們說說
最新版本中 GNU/Linux 下對行列輸入法的支援實情。

  我猜,既然行列30公開授權,行列40也應該是吧?倒不見他們放行列40
的 porting 規格出來下載。要問問他們了(行列輸入法是廖明德先生發明的嗎?)
。 ^_^

> 至於其他的輸入法我就不熟了,能否請熟悉的朋友幫忙追蹤一下,然後再寄
> 來給我?我都很樂意加入。

  從 Unihan.txt 可以產出帶調的廣東話和客家話輸入法,當然也可以無調的。
建議:聲調多半用 [1-9] (廣東話九聲,不過其實其中三聲為入聲,可以說是
重覆了,所以有人也說廣東話六聲),有時加個 "." 當輕聲符號……嗯,如果
沿用 gen_inp 作這些拼音輸入法,也許可以在 gen_inp 裏加入「聲調」的
toggle,也就是只需一個帶調的 *.cin 檔,用戶可以按 alt-ctrl-?? 鍵
toggle 帶調或無調輸入模式。  ^_^  我自己很少用拼音式的輸入法,不知
其他人意見如何?  ^_^

  如果您想要這些可從 Unihan.txt 產出的輸入法,我遲些有空時可以試試。
^_^

> 另外,我在想在 xcin 主程式中是不是一定要放入這麼多的 .cin 檔?是不
> 是應該將大部分的 .cin 檔抽出來另外做一個 tarball, 而主程式的那個
> tarball 只放幾個最常見的 table (如 cj.cin) 或根本不放任何 .cin
> table? 大家可以給我意見嗎?

  也有道理。我貪方便,不想把 array30.cin 分出來。 <grin>
不過,有個想法,大可以設個 arbitrary 的 threshold 值,例如 1 MB,
如果 xcin 的 tarball 超過 1 MB,就把各個 .cin 檔分出來,只保留其他
最常用的。

> >   3. bimsphore、tabe 等將來可否配合 pinyin、cantonese 或其他輸入法應用,
> >      作智能選字? ^_^ (抑或這已經是 FAQ 了? ^_^)
> 
> 有考慮過。先說拼音,有人建議可以將拼音寫入 libtabe 裏頭,或說是 libbims
> 裏頭,當做是另一個 mode 來用,而實做上不會太難,只要將輸入的拼音碼轉成
> 注音碼,直接餵給 libbims, libtabe, 則現成的猜字演算法馬上可以派上用場。

  太好了。 ^_^

> 但如果是修改 gen_inp 來呼叫 tabe 的函式的話,則只能做到有限度的猜字。
> 基本上 gen_inp 是 table 導向的,它適用的是重複字數少的輸入法,而這類輸
> 入法是否有猜字功能似乎顯得不很重要,因此我不太願意為它重寫一個猜字演算
> 法來用,換句話說,可以的話我暫不考慮在 gen_inp 中加入猜字的功能,或者
> 說如果真的要猜字的話,頂多就只有簡單的查查 table, 選詞頻或字頻最高的
> 來用。但若要複雜到可以分析語句、往前修改 .... 的話,我希望能盡量用
> libbims 的話就盡量用。

  有道理。  ^_^

> 基本上, bimsphone 只是一個殼,它呼叫 libbims (libtabe 的一部分) 來工
> 作, libbims 是注音猜字演算法的核心,它呼叫 libtabe 來工作, libtabe
> 則管理龐大的字詞,同時也有詞頻等資料。不幸的是,目前它們幾乎都是給 Big5
> 碼用的,若要給其他內碼用還得費一番手腳。但如果是 Big5 的話,我相信只要
> 是靠「音」來輸入法的,如注音、拼音 .... 等,應該都可以直接使用 libbims。

> 至於使用 GB 碼的朋友是否需要「會猜字」的輸入法?我不清楚,我印象中他們
> 大都使用 table 形式的輸入法,甚至他們的拼音輸入法,需要打入一個 key
> stroke, 結果跑出一個詞。如 sky ==> 天空。目前 gen_inp 做不到,但我計
> 畫下一步改寫時要加入這個功能,因為已經有大陸朋友向我抱怨,少了這個的
> 拼音輸入法對他們而言幾乎是「無用」的 :-))

  對。其實我也不清楚大陸朋友最常用的是什麼輸入法,倒也有不少智能拼音,
多不多人用就不知道了。

> 但如果仍然需要 GB 的猜字形的輸入法時怎麼辦?或者我暫時先自私一點好了,
> 假如是 Big5 使用者,臨時要打 GB 碼的話呢?有人建議我要在 xcin 裏頭內建
> 一層轉碼層,讓我們現在用 Big5 輸入法打字,餵出去的卻是 GB 碼。這轉碼層
> 做起來似乎很容易,但若要寫得很完善恐怕也要一番功夫。所謂很完善意思是我
> 們要考慮的不只是 Big5 <==> GB 雙向而已,我希望做到的是可擴充性,就像載
> 入 module 或 .tab 檔一樣,需要時才載入某些 table 做某二內碼間的轉碼。

  還有與 Unicode 轉碼、EACC、CNS11643-1992、朱邦復先生的漢字大字庫、
尤其是 Big5+、Big5e、Big5 w/HKSCS、GBK…… <grin, duck, run>

> Sorry, 一下子說太多了,還是一步步來吧 :-))

  有道理。  ^_^  不知 TurboLinux Chinese 三劍俠(于明儉、方漢、陳向陽)
的 chinput 對這些問題的處理如何?聽說他們有智能拼音的。其他功能我就不知道了。
只是他們的 .cit/.tit 檔跟 cxterm 和 Emacs 裏的一樣,沒有(也不能?)正確
排序,沒有簡碼等等,打起來非常不順。  ^_^

  對了,我從 TLC 那裏「借」了他們的 zh_CN.GBK 來用,雖然說是 alpha 版,
但似乎也相當不錯,您們在 CLE 有沒有興趣加個 zh_CN.GBK 的 C 和 X locale
資料檔?如果您不想麻煩找他們的 .src.rpm,我可以把那些 .src.rpm 裏面相關
zh_CN.GBK 的檔案放上網頁上。If so, please let me know.  ^_^  (I need to
organize them first.  :-)

					東東

-- 
Anthony Fok Tung-Ling                Civil and Environmental Engineering
foka@ualberta.ca, foka@debian.org    University of Alberta, Canada
anthony_fok@catholic.org             Keep smiling!  *^_^*
Come visit Our Lady of Victory Camp -- http://come.to/olvc
--- gen_inp.c.original	Wed Jan  5 04:06:12 2000
+++ gen_inp.c	Wed Jan  5 04:24:06 2000
@@ -20,6 +20,7 @@
 */      
 
 
+#include <ctype.h>
 #include <string.h>
 #include <X11/Xlib.h>
 #include <X11/keysym.h>
@@ -141,6 +142,10 @@
     if (get_resource(cmd, value, 50, 2))
 	set_data(&(cf->mode), RC_IFLAG, value, INP_MODE_BEEPDUP, 0);
 
+    cmd[1] = "ARRAY30";					/* array30 mode */
+    if (get_resource(cmd, value, 50, 2))
+	set_data(&(cf->mode), RC_IFLAG, value, INP_MODE_ARRAY30, 0);
+
     cmd[1] = "QPHRASE_MODE";
     if (get_resource(cmd, value, 50, 2))
 	cf->modesc = (ubyte_t)(atoi(value) % 256);
@@ -533,6 +538,11 @@
 commit_keystroke(gen_inp_conf_t *cf, inpinfo_t *inpinfo, gen_inp_iccf_t *iccf)
 /* return: the IMKEY state */
 {
+    if (cf->mode & INP_MODE_ARRAY30 && !strcmp(iccf->keystroke, "t")) {
+	/* Output "de5" when keystroke is "t", special for Array30 */
+	strcpy(iccf->keystroke, "lplh");
+    }
+
     if (match_keystroke(cf, inpinfo, iccf)) {
 	if (inpinfo->n_mcch == 1) {
 	    commit_char(inpinfo, iccf, inpinfo->mcch);
@@ -855,6 +865,12 @@
 	selkey_idx = ((s = strchr(cf->header.selkey, keystr[0]))) ? 
 		(int)(s - cf->header.selkey) : -1;
 
+	if (cf->mode & INP_MODE_ARRAY30
+	    && strcmp(iccf->keystroke, "w") && isdigit(keystr[0])) {
+	    /* Deals with "w[0-9]" symbol input in Array30 */
+	    wch.wch = (wchar_t)0;
+	}
+
 	if (inpinfo->keystroke_len && selkey_idx != -1 &&  ! wch.wch) {
 	    /* Don't enter the multi-cch selection, but selkey pressed. */
 	    return (mcch_choosech(cf, inpinfo, iccf, selkey_idx)) ?
@@ -970,7 +986,7 @@
 
 /*----------------------------------------------------------------------------
 
-	Definition of general input method module (templet).
+	Definition of general input method module (template).
 
 ----------------------------------------------------------------------------*/
 
--- gen_inp.h.original	Sun Nov 28 07:02:27 1999
+++ gen_inp.h	Wed Jan  5 04:27:00 2000
@@ -37,6 +37,7 @@
 #define INP_MODE_SINMDLINE1  0x00000200 /* Enable sinmd in line1 mode. */
 #define INP_MODE_SPACERESET  0x00000400 /* Enable space reset error mode. */
 #define INP_MODE_AUTORESET   0x00000800 /* Enable auto reset error mode. */
+#define INP_MODE_ARRAY30     0x00001000 /* Enable Array30 mode. */
 #define INP_MODE_BEEPWRONG   0x00010000 /* Beap when type a wrong char. */
 #define INP_MODE_BEEPDUP     0x00020000 /* Beap when exists duplet chars. */
 
--- array30.cin.orig	Wed Jun  9 00:50:33 1999
+++ array30.cin	Wed Jan  5 13:01:45 2000
@@ -11350,7 +11350,7 @@
 szp 踳
 szqd 踦
 sztg 跠
-t 的
+t 隨
 t 民
 t 巴
 t 書

Reply to: