[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: