• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

ibus-fwnnをaonotoがいじってみる(予定)


コミットメタ情報

リビジョンefe9a0d83a72233b7834deb9cb32ec1f68138029 (tree)
日時2015-08-07 03:26:20
作者Hashimoto Masahiko <hashimom@X201...>
コミッターHashimoto Masahiko

ログメッセージ

equip real-time-convert

変更サマリ

差分

--- a/src/convert.c
+++ b/src/convert.c
@@ -2,6 +2,7 @@
22
33 #include <string.h>
44 #include <syslog.h>
5+#include <stdlib.h>
56 #include "convert.h"
67
78 typedef struct {
--- a/src/engine.c
+++ b/src/engine.c
@@ -16,6 +16,7 @@ struct _IBusFwnnEngine {
1616
1717 /* members */
1818 GString *preedit;
19+ GString *convedit;
1920 gint cursor_pos;
2021
2122 IBusLookupTable *table;
@@ -35,6 +36,7 @@ static gboolean
3536 guint keyval,
3637 guint keycode,
3738 guint modifiers);
39+#if 0
3840 static void ibus_fwnn_engine_focus_in (IBusEngine *engine);
3941 static void ibus_fwnn_engine_focus_out (IBusEngine *engine);
4042 static void ibus_fwnn_engine_reset (IBusEngine *engine);
@@ -61,6 +63,7 @@ static void ibus_fwnn_engine_property_show
6163 static void ibus_fwnn_engine_property_hide
6264 (IBusEngine *engine,
6365 const gchar *prop_name);
66+#endif
6467
6568 static void ibus_fwnn_engine_update (IBusFwnnEngine *fwnn);
6669
@@ -93,6 +96,7 @@ ibus_fwnn_engine_init (IBusFwnnEngine *fwnn)
9396 printf("ibus_fwnn_engine init FAILED\n");
9497 }
9598 fwnn->preedit = g_string_new ("");
99+ fwnn->convedit = g_string_new ("");
96100 fwnn->cursor_pos = 0;
97101
98102 fwnn->table = ibus_lookup_table_new (9, 0, TRUE, TRUE);
@@ -113,6 +117,7 @@ ibus_fwnn_engine_destroy (IBusFwnnEngine *fwnn)
113117
114118 if (fwnn->preedit) {
115119 g_string_free (fwnn->preedit, TRUE);
120+ g_string_free (fwnn->convedit, TRUE);
116121 fwnn->preedit = NULL;
117122 }
118123
@@ -124,6 +129,7 @@ ibus_fwnn_engine_destroy (IBusFwnnEngine *fwnn)
124129 ((IBusObjectClass *) ibus_fwnn_engine_parent_class)->destroy ((IBusObject *)fwnn);
125130 }
126131
132+#if 0
127133 static void
128134 ibus_fwnn_engine_update_lookup_table (IBusFwnnEngine *fwnn)
129135 {
@@ -157,25 +163,29 @@ ibus_fwnn_engine_update_lookup_table (IBusFwnnEngine *fwnn)
157163 // if (sugs)
158164 // fwnn_dict_free_suggestions (dict, sugs);
159165 }
166+#endif
160167
161168 static gboolean
162169 ibus_fwnn_engine_kanren (IBusFwnnEngine *fwnn)
163170 {
164171 IBusText *text;
165- char *kanren_p = NULL;
172+ unsigned char *kanren_p = NULL;
166173 gint retval;
167174
168175 kanren_p = fwnnserver_kanren(fwnn->preedit->str);
169176 text = ibus_text_new_from_static_string (kanren_p);
170- g_string_assign (fwnn->preedit, text->text);
171- ibus_text_append_attribute(text, IBUS_ATTR_TYPE_FOREGROUND, 0x00FFFF, 0, fwnn->preedit->len);
177+ g_string_assign (fwnn->convedit, text->text);
178+
179+ text->attrs = ibus_attr_list_new ();
180+ ibus_attr_list_append (text->attrs,
181+ ibus_attr_underline_new (IBUS_ATTR_UNDERLINE_SINGLE, 0, fwnn->convedit->len));
182+
172183 ibus_engine_update_preedit_text ((IBusEngine *)fwnn,
173184 text,
174185 fwnn->cursor_pos,
175186 TRUE);
176187
177188 ibus_engine_hide_lookup_table ((IBusEngine *)fwnn);
178-
179189 return TRUE;
180190 }
181191
@@ -188,9 +198,10 @@ ibus_fwnn_engine_commit (IBusFwnnEngine *fwnn)
188198 if (fwnn->preedit->len == 0)
189199 return FALSE;
190200
191- text = ibus_text_new_from_static_string (fwnn->preedit->str);
201+ text = ibus_text_new_from_static_string (fwnn->convedit->str);
192202 ibus_engine_commit_text ((IBusEngine *)fwnn, text);
193203 g_string_assign (fwnn->preedit, "");
204+ g_string_assign (fwnn->convedit, "");
194205 fwnn->cursor_pos = 0;
195206
196207 ibus_fwnn_engine_update (fwnn);
@@ -337,7 +348,7 @@ ibus_fwnn_engine_process_key_event (IBusEngine *engine,
337348 fwnn->cursor_pos,
338349 keyval);
339350 fwnn->cursor_pos = conv_run_romajiconv(fwnn->preedit, fwnn->cursor_pos);
340- ibus_fwnn_engine_update (fwnn);
351+ ibus_fwnn_engine_kanren(fwnn);
341352
342353 return TRUE;
343354 }
--- a/src/fwnnserver.c
+++ b/src/fwnnserver.c
@@ -18,7 +18,7 @@
1818 #define PC_DIC "pubdic/computer.dic"
1919 #define SYMBOL_DIC "pubdic/symbol.dic"
2020
21-#define MAX_CONV_STRLEN (4096)
21+#define MAX_CONV_STRLEN (1024)
2222 #define CONV_UTF82EUC (0)
2323 #define CONV_EUC2UTF8 (1)
2424
@@ -27,7 +27,9 @@ static WNN_ENV *wnnenv;
2727 static struct wnn_ret_buf wnnbuf= {0, NULL};
2828
2929 /* もちろん仮。malloc して返すように変更する予定 */
30-static char wnn_out_kanstr[MAX_CONV_STRLEN];
30+static unsigned char wnn_yomi_buf[MAX_CONV_STRLEN];
31+static unsigned char wnn_out_kanstr[MAX_CONV_STRLEN];
32+
3133
3234 static void set_wnn_env_pram()
3335 {
@@ -76,7 +78,7 @@ static void strtows(w_char *u, unsigned char *e)
7678 *u=0;
7779 }
7880
79-static int putws(unsigned short *s, char *outstr)
81+static int putws(unsigned short *s, unsigned char *outstr)
8082 {
8183 int ret = 0;
8284
@@ -93,8 +95,8 @@ static void output_js2char(struct wnn_dai_bunsetsu *dlist, int cnt)
9395 {
9496 int i, tmpbuf_len;
9597 struct wnn_sho_bunsetsu *sbn;
96- char kanstr_tmp[MAX_CONV_STRLEN];
97- char kanstr_utf8[MAX_CONV_STRLEN];
98+ unsigned char kanstr_tmp[MAX_CONV_STRLEN];
99+ unsigned char kanstr_utf8[MAX_CONV_STRLEN];
98100
99101 for ( ; cnt > 0; dlist++, cnt --) {
100102 sbn = dlist->sbn;
@@ -169,12 +171,20 @@ int fwnnserver_adddic(char *dicfilename)
169171 return dicno;
170172 }
171173
172-char *fwnnserver_kanren(char *yomi)
174+unsigned char *fwnnserver_kanren(unsigned char *yomi)
173175 {
174176 // とりあえずサイズ決め打ち
175- char yomi_euc[MAX_CONV_STRLEN];
177+ unsigned char yomi_euc[MAX_CONV_STRLEN];
176178 w_char upstrings[MAX_CONV_STRLEN];
177179 int count = 0;
180+ int i=0, yomilen = strlen(yomi);
181+
182+ // 未確定文字ポインタ(暫定実装で削除予定)
183+ for (i = 0; i < yomilen;) {
184+ if (yomi[i] < 0x7F)
185+ break;
186+ i += 3;
187+ }
178188
179189 memset(yomi_euc, 0, MAX_CONV_STRLEN);
180190 memset(upstrings, 0, MAX_CONV_STRLEN);
@@ -183,9 +193,13 @@ char *fwnnserver_kanren(char *yomi)
183193 exec_iconv(yomi, yomi_euc, CONV_UTF82EUC);
184194 strtows(upstrings, yomi_euc);
185195
186- count = js_kanren(wnnenv, upstrings, WNN_ALL_HINSI, NULL, WNN_VECT_KANREN, WNN_VECT_NO, WNN_VECT_BUNSETSU,&wnnbuf);
196+ count = js_kanren(wnnenv, upstrings, WNN_ALL_HINSI, NULL,
197+ WNN_VECT_KANREN, WNN_VECT_NO, WNN_VECT_BUNSETSU,&wnnbuf);
187198 output_js2char((struct wnn_dai_bunsetsu *)wnnbuf.buf, count);
188199
200+ if (i < yomilen)
201+ strcat(wnn_out_kanstr, yomi+i);
202+
189203 return wnn_out_kanstr;
190204 }
191205
--- a/src/fwnnserver.h
+++ b/src/fwnnserver.h
@@ -2,9 +2,10 @@
22 #ifndef __FWNN_H__
33 #define __FWNN_H
44
5+
56 int fwnnserver_open();
67 int fwnnserver_close();
78 int fwnnserver_adddic(char *dicfilename);
8-char *fwnnserver_kanren(char *yomi);
9+unsigned char *fwnnserver_kanren(unsigned char *yomi);
910
1011 #endif