chewing-hash-editor: 新酷音輸入法詞庫編輯器

473 views
Skip to first unread message

Jim Huang

unread,
Jun 2, 2012, 5:01:11 PM6/2/12
to Chewing-Dev, Timothy Lin
Hello list,

新酷音原有一個簡單的編輯器,可讀寫文字格式的詞庫,可是目前的新酷音使用者詞庫已全面採用二進位格式,
而 Timothy Lin 把原來的編輯器改成可以讀寫目前新酷音的使用者詞庫,並且做了一些修正及改進,現在可進行
一般的編輯了,程式碼請見:
http://code.google.com/p/chewing-hash-editor/

Timothy, 考慮把程式碼搬到 https://github.com/chewing 嗎?可以放在 chewing-utils.git
一類的 repository

Thanks,
-jserv

Jim Huang

unread,
Jun 2, 2012, 5:04:42 PM6/2/12
to Chewing-Dev, Timothy Lin
另外,在 Ubuntu Linux 12.04 上,hg 的版本會遇到連結錯誤,修正方式如下:

diff -r d557b1bed938 src/Makefile
--- a/src/Makefile Thu May 03 18:23:17 2012 +0800
+++ b/src/Makefile Sun Jun 03 05:03:26 2012 +0800
@@ -4,7 +4,7 @@
all: che

che: che.o key2pho-utf8.o chewing-utf8-util.o zhuindict.o
- gcc $(LIB_GTK) che.o key2pho-utf8.o chewing-utf8-util.o zhuindict.o -o che
+ gcc che.o key2pho-utf8.o chewing-utf8-util.o zhuindict.o -o che $(LIB_GTK)

zhuindict.o: zhuindict.c
gcc $(CFLAGS) -c zhuindict.c

Jim Huang

unread,
Jun 3, 2012, 10:30:03 AM6/3/12
to Timothy Lin, Chewing-Dev
hi Timothy,

已將入 github/chewing 成員,請見:
https://github.com/chewing/chewing-utils

建議提交命名為 chewing-utils/hash-editor
然後授權模式比照 libchewing (GNU LGPL),這樣日後若有 hash-editor 的程式碼要整合回去,問題會少一些。

另外,一旦 git 修改遞交後,請一併更新 Issue #8 狀態:
https://github.com/chewing/libchewing/issues/8

請多利用 chewin...@googlegroups.com 作為開發討論。

Thanks,
-jserv

在 2012年6月3日下午6:46,Timothy Lin <lzh...@gmail.com> 寫道:
> jserv 您好,
>
> 我希望可以把新酷音詞庫編輯器的程式碼搬到新酷音的開發網站,剛才稍微瀏覽了
> 一下 https://github.com/chewing,可是找不到 chewing-utils 的 repository
> 在哪裡。平常我用的版本控制系統是 mercurial,對 git 的運作方式還不太清
> 楚,請問要如何找到 chewing-utils.git?另外,如果要 commit 的話應該要有帳
> 號吧,我有申請了一個 github 的帳號,名稱是 lzh9102,是否可以把我加入可以
> commit 的名單?謝謝。

WM

unread,
Jun 5, 2012, 3:43:07 AM6/5/12
to chewin...@googlegroups.com, Timothy Lin
Hi, Timothy,

麻煩在github repo裡面補上readme檔案,

並略述編譯與操作事項。


另外,如果要正式發表給一般使用者,也請提供網站用的公告文案,以及操作擷圖,

我會在翻修網站時一併更新上去。

jserv於 2012年6月3日星期日UTC+8下午10時30分03秒寫道:

Jim Huang

unread,
Jun 5, 2012, 9:58:37 PM6/5/12
to chewin...@googlegroups.com, Timothy Lin
hi Timothy,

我在 git 做了些更新,追加「開啟預設 uhash」的機制。

另外,執行時期能否不依賴 zhuin.txt 的存在呢?如果我們希望 hash-editor 成為 ibus-chewing,
scim-chewing, gcin-chewing 等輸入法前端的一部分,那麼,我們得事先擺放 zhuin.txt 檔案到
合適的路徑,這多少造成些麻煩。

Thanks,
-jserv

Jim Huang

unread,
Jun 6, 2012, 6:28:54 PM6/6/12
to Chewing-Dev, Timothy Lin
在 2012年6月6日下午5:06,Timothy Lin <lzh...@gmail.com> 寫道:
> zhuin.txt的用途是讓使用者新增語詞的時候,可以把輸入的字自動轉成最常見的
> 注音。現在我的作法是把這個檔案嵌入到程式裡面,讓執行檔大 小變成大約
> 500kbytes,而不需要讀取外部的zhuin.txt,這樣的作法適當嗎?實作方法是另外
> 寫一個程式,把zhuin.txt轉成 陣列,存到一個header檔,然後在原來的程式中
> include它。

hi Timothy,

這樣不錯,至少解決了 deployment 的問題,不過現在的資料表示法感覺有點累贅:

$ head hash-editor/src/zhuin_data.h
/* this file is generated from zhuin.txt. */
static const struct entry default_data[] = {
{"ˇ", "ˇ"},
{"兀", "ㄨˋ"},
{"㴖", "ㄌㄨㄛˋ"},
{"𠅗", "ㄉㄧㄝˋ"},
{"一", "ㄧ"},
{"丁", "ㄉㄧㄥ"},
{"丂", "ㄎㄠˇ"},
{"七", "ㄑㄧ"},

中文對應到注音符號,應該不需用完整的符號來表示,畢竟符號是有限的,聲母 21 個、韻母 16 個,外加 5 種聲調,可用更精簡的方式來呈現,或許就是一數值。

Thanks,
-jserv

Rifur

unread,
Jun 30, 2012, 11:52:40 PM6/30/12
to chewin...@googlegroups.com, Timothy Lin
Hi all,

我昨天試著輸入一位哲學家(列維納斯)的名字,意外發現 chewing-utils 新增詞彙的功能有點小問題。再現錯誤的描述如下:

(1) 點選(或 ctrl+N)「新增語詞」。
(2) 輸入「列印」。
(3) 按下「轉成注音」。

此時我們可以發現,「列」這個字呈現為方框,而「印」是好的。
並且,終端機輸出:「(che:31150): Pango-WARNING **: Invalid UTF-8 string passed
to pango_layout_set_text()」

我嘗試了幾個不同的組合,發現在漢字的注音組成為 {聲母 + 介母 + 韻母 + 聲符} 共四個符號的時候,就會出錯。由於聲介韻母各佔
3bytes,聲符佔 2bytes,3*3 + 2=11 > 10,造成 che.c 之 entry_active( ) 的 char
zhuin_buffer[10] 記憶體不當操作,意外覆寫相鄰的 gchar buf[4] 的空間,導致「列」等等的文字崩壞。

可以修正如下:

- char zhuin_buffer[10];
+ char zhuin_buffer[12];

謝謝!

Rifur

> --
> 您已訂閱「Google 網上論壇」的「Chewing IM Development」群組,因此我們特別傳送這封郵件通知您。
> 如要在此群組張貼留言,請傳送電子郵件至 chewin...@googlegroups.com
> 如要取消訂閱此群組,請傳送電子郵件至 chewing-deve...@googlegroups.com
> 如需更多選項,請造訪此群組:http://groups.google.com/group/chewing-devel?hl=zh-TW
>

Jim Huang

unread,
Jul 1, 2012, 12:33:48 AM7/1/12
to chewin...@googlegroups.com, Timothy Lin
在 2012年7月1日上午11:52,Rifur <rifu...@gmail.com> 寫道:
[...]

> 此時我們可以發現,「列」這個字呈現為方框,而「印」是好的。
> 並且,終端機輸出:「(che:31150): Pango-WARNING **: Invalid UTF-8 string passed
> to pango_layout_set_text()」
>
> 我嘗試了幾個不同的組合,發現在漢字的注音組成為 {聲母 + 介母 + 韻母 + 聲符} 共四個符號的時候,就會出錯。由於聲介韻母各佔
> 3bytes,聲符佔 2bytes,3*3 + 2=11 > 10,造成 che.c 之 entry_active( ) 的 char
> zhuin_buffer[10] 記憶體不當操作,意外覆寫相鄰的 gchar buf[4] 的空間,導致「列」等等的文字崩壞。

Thanks! Merged in git commit b70d0740236b7c1061c7c18212d33ffd6db0428e

You can submit git format-patch in mail body as well.

Sincerely,
-jserv

Rifur

unread,
Aug 5, 2012, 6:26:34 AM8/5/12
to chewin...@googlegroups.com
Hi all,

在 chewing-utils 中,按鍵盤方向鍵(上、下)無法捲動詞目,code 其實有註冊 key-press-event,也有處理
scrolling 的函式,不過呼叫的部份卻被遺漏了。
修正方式如下:

diff --git a/hash-editor/src/che.c b/hash-editor/src/che.c
index 732c465..553ab1b 100644
--- a/hash-editor/src/che.c
+++ b/hash-editor/src/che.c
@@ -837,6 +837,7 @@ che_select_prev_phrase()
if (path && gtk_tree_path_prev(path)) {
gtk_tree_model_get_iter(store, &iter, path);
gtk_tree_selection_select_iter(selection, &iter);
+ che_select_row(&iter);
}
gtk_tree_path_free(path);
}
@@ -849,8 +850,10 @@ che_select_next_phrase()
&iter);
if (valid) {
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter);
- if (valid)
+ if (valid) {
gtk_tree_selection_select_iter(selection,
&iter); /* select the next item */
+ che_select_row(&iter);
+ }
}
}


謝謝!(上一封還沒打主旨就送出了,不好意思 > <")

Rifur

Jim Huang

unread,
Aug 5, 2012, 12:11:26 PM8/5/12
to chewin...@googlegroups.com
在 2012年8月5日下午6:26,Rifur <rifu...@gmail.com> 寫道:
> 在 chewing-utils 中,按鍵盤方向鍵(上、下)無法捲動詞目,code 其實有註冊 key-press-event,也有處理
> scrolling 的函式,不過呼叫的部份卻被遺漏了。
> 修正方式如下:

感謝遞交 patch,已整合,請見 commit d8def8e085d483c6a1e92d2c9a55739982a7dd85

對了,目前似乎沒有處理 Page Up/Down 與滑鼠右鍵,有興趣看看嗎?

Regards,
-jserv

Reply all
Reply to author
Forward
0 new messages