Windows-chewing 目前進度,卡在 candidate

58 views
Skip to first unread message

PCMan

unread,
Sep 6, 2013, 1:57:27 AM9/6/13
to chewin...@googlegroups.com
目前進度還算大致還可以,
基本打字沒問題,卡在 candidate window
我看了一下 libchewing API有這些

CHEWING_API int chewing_cand_CheckDone( ChewingContext *ctx );
CHEWING_API int chewing_cand_TotalPage( ChewingContext *ctx );
CHEWING_API int chewing_cand_ChoicePerPage( ChewingContext *ctx );
CHEWING_API int chewing_cand_TotalChoice( ChewingContext *ctx );
CHEWING_API int chewing_cand_CurrentPage( ChewingContext *ctx );
CHEWING_API void chewing_cand_Enumerate( ChewingContext *ctx );
CHEWING_API int chewing_cand_hasNext( ChewingContext *ctx );
CHEWING_API char *chewing_cand_String( ChewingContext *ctx );

但是 enumerate 的方式和 windows 的處理不相容
chewing_cand_Enumerate() 會把 cand_no 設定成目前 page 第一筆
而 chewing_cand_String() 會移動 cand_no 往下一個
可是每次呼叫,都會變動 ChewingContext 內的 cand_no
而到最後 cand_no 應該會等於 totalChoice - 1
但是沒有任何方法可以讓他重新回到 0

我雖然知道 tatal count,但沒有辦法任意取得整個 list 中的任一個字串
如果我要取得 list 完整的內容,我必須一直 chewing_cand_String()
才能全部讀出來,但是這時候 cand_no 就指到 list 末端了
沒有辦法再回去

Windows TSF 會要求 text service 需要一次提供整個 list
並且可以 random acess list 中的每個 string
用目前的 chewing API 無法實做出來
除非模擬每個 page 切換一次,一直 enumerate 下去
然後把字串都存到list內,但是這樣很髒,
有可能在 API 上做一些修正嗎?
每次呼叫都改變 ChewingContext 內部的狀態,
對於單純需要取得整個 candidate list 的時候,是會有點麻煩

Thanks

ChangZhuo Chen

unread,
Sep 6, 2013, 6:15:10 AM9/6/13
to chewin...@googlegroups.com
On Friday, September 6, 2013 1:57:27 PM UTC+8, PCMan wrote:
有可能在 API 上做一些修正嗎?
每次呼叫都改變 ChewingContext 內部的狀態,
對於單純需要取得整個 candidate list 的時候,是會有點麻煩


新加一個 API [1],可以直接取出第 n 個 candidate。

CHEWING_API char *chewing_cand_String_by_index( ChewingContext *ctx, int index )

PCMan

unread,
Sep 6, 2013, 7:33:16 AM9/6/13
to chewin...@googlegroups.com
謝謝
不過可能還需要另一個 API 搭配使用,可能會更有彈性
int chewing_cand_Choose( ChewingContext *ctx, int index);
這樣實作輸入法者,也可以一次列出所有 candidate 供點選
而不用逐頁切換,就像是新注音可以一次列出全部一樣

目前我沒有用到這個新 API,我用其他方式繞過解決了
現在 Windows chewing TSF 版本可以輸入文字
而且可以選字 (選字視窗的code有部分從舊 Win32 IME 移植過來)
選字視窗的位置和大小都是正確的,歡迎測試

基本上只需要補上標點符號和其他缺少的按鍵支援
就剩下美化工作,還有設定 display attribute 了

之後就是開始要處理 language bar 和 menu :-)

Cheers!


2013/9/6 ChangZhuo Chen <czc...@gmail.com>:
> --
> 您已訂閱「Google 網上論壇」的「Chewing IM Development」群組,因此我們特別傳送這封郵件通知您。
> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到
> chewing-deve...@googlegroups.com
> 如要在此群組張貼留言,請傳送電子郵件至 chewin...@googlegroups.com
> 請前往以下網址造訪這個群組:http://groups.google.com/group/chewing-devel
> 如需更多選項,請前往:https://groups.google.com/groups/opt_out
Reply all
Reply to author
Forward
0 new messages