int module_flush_input (void) { char *pszTmp; if (chewing_buffer_Check (g_pChewingCtx)) { pszTmp = chewing_buffer_String (g_pChewingCtx); g_himeModMainFuncs.mf_send_text (pszTmp); free (pszTmp); } chewing_Reset (g_pChewingCtx); // FIXME: dirty workaround to reset the libchewing internal data // it may impact the bEscCleanAllBuf setting chewing_handle_Esc (g_pChewingCtx); hime_label_clear (MAX_SEG_NUM); if (*g_himeModMainFuncs.mf_hime_pop_up_win && is_empty()) module_hide_win(); return 0; }
void module_show_win (void) { if (g_himeModMainFuncs.mf_hime_edit_display_ap_only ()) return; if (is_empty ()) return; gtk_window_resize (GTK_WINDOW (g_pWinChewing), 32 * (chewing_buffer_Check (g_pChewingCtx) + 1), 12); gtk_widget_show (g_pWinChewing); g_himeModMainFuncs.mf_show_win_sym (); }
void show_interval_buffer( int x, int y, ChewingContext *ctx ) { char *buf; char *p; int buf_len; char out_buf[ 100 ]; int i, count; int arrPos[ 50 ]; IntervalType it; move( x, y ); addstr( FILL_BLANK ); move( x, y ); /* Check if buffer is available. */ if ( ! chewing_buffer_Check( ctx ) ) { return; } buf = chewing_buffer_String( ctx ); buf_len = chewing_buffer_Len( ctx ); p = buf; count = 0; for ( i = 0 ;i < buf_len; i++ ) { arrPos[ i ] = count; count += ueBytesFromChar(*p) <= 1 ? 1 : 2; p += ueBytesFromChar(*p); } arrPos[ i ] = count; memset( out_buf, ' ', count * ( sizeof( char ) ) ); out_buf[ count ] = '\0'; chewing_interval_Enumerate( ctx ); while ( chewing_interval_hasNext( ctx ) ) { chewing_interval_Get( ctx, &it ); out_buf[ arrPos[ it.from ] ] = '['; out_buf[ arrPos[ it.to ] - 1 ] = ']'; memset( &out_buf[ arrPos[ it.from ] + 1 ], '-', arrPos[ it.to ] - arrPos[ it.from ] - 2 ); } addstr( out_buf ); }
void show_edit_buffer( int x, int y, ChewingContext *ctx ) { int i, cursor, count; char *buffer_string; char *p; move( x, y ); addstr( FILL_BLANK ); if ( ! chewing_buffer_Check( ctx ) ) { move( x, y ); return; } buffer_string = chewing_buffer_String( ctx ); mvaddstr( x, y, buffer_string ); cursor = chewing_cursor_Current( ctx ); p = buffer_string; count = 0; for ( i = 0 ;i < cursor; i++ ) { count += ueBytesFromChar(*p) <= 1 ? 1 : 2; p += ueBytesFromChar(*p); } move( x, count ); free( buffer_string ); }
gboolean module_feedkey (int nKeyVal, int nKeyState) { char *pszTmp = NULL; char *pszChewingCand = NULL; int nZuinLen = 0; char szWord[4]; int nPhoIdx, nBufIdx; int nIdx; if (!g_pChewingCtx) return FALSE; memset (szWord, 0x00, 4); if (!g_himeModMainFuncs.mf_tsin_pho_mode ()) return FALSE; switch (nKeyVal) { case XK_space: chewing_handle_Space (g_pChewingCtx); break; case XK_Escape: chewing_handle_Esc (g_pChewingCtx); break; case XK_Return: case XK_KP_Enter: chewing_handle_Enter (g_pChewingCtx); break; case XK_Delete: case XK_KP_Delete: chewing_handle_Del (g_pChewingCtx); break; case XK_BackSpace: chewing_handle_Backspace (g_pChewingCtx); break; case XK_Up: case XK_KP_Up: chewing_handle_Up (g_pChewingCtx); break; case XK_Down: case XK_KP_Down: chewing_handle_Down (g_pChewingCtx); break; case XK_Left: case XK_KP_Left: chewing_handle_Left (g_pChewingCtx); break; case XK_Right: case XK_KP_Right: chewing_handle_Right (g_pChewingCtx); break; #if 0 case XK_Shift_L: chewing_handle_ShiftLeft (g_pChewingCtx); break; case XK_Shift_R: chewing_handle_ShiftRight (g_pChewingCtx); break; #endif case XK_Tab: chewing_handle_Tab (g_pChewingCtx); break; default: if (nKeyVal > 32 && nKeyVal < 127) chewing_handle_Default (g_pChewingCtx, nKeyVal); break; } hime_label_clear (MAX_SEG_NUM); g_nCurrentCursorPos = chewing_cursor_Current (g_pChewingCtx); if (g_nCurrentCursorPos < 0 || g_nCurrentCursorPos > MAX_SEG_NUM) return FALSE; // zuin symbols pszTmp = chewing_zuin_String (g_pChewingCtx, &nZuinLen); if (pszTmp) { for (nBufIdx = 0; nBufIdx < nZuinLen; nBufIdx++) { memcpy (szWord, pszTmp + nBufIdx * 3, 3); for (nPhoIdx = 0; nPhoIdx < 3; nPhoIdx++) if (strstr (g_himeModMainFuncs.mf_pho_chars[nPhoIdx], szWord) != NULL) hime_label_show (szWord, nPhoIdx + chewing_buffer_Len (g_pChewingCtx) + 1); } free (pszTmp); } // check if the composing is valid or not if (chewing_buffer_Check (g_pChewingCtx)) { g_himeModMainFuncs.mf_hide_selections_win (); pszTmp = chewing_buffer_String (g_pChewingCtx); // init cand_no chewing_cand_Enumerate (g_pChewingCtx); g_himeModMainFuncs.mf_clear_sele (); if (chewing_cand_TotalChoice (g_pChewingCtx)) { nIdx = 0; while (chewing_cand_hasNext (g_pChewingCtx)) { pszChewingCand = chewing_cand_String (g_pChewingCtx); if (nIdx > chewing_get_candPerPage (g_pChewingCtx) - 1) break; hime_label_cand_show (pszChewingCand, nIdx++); free (pszChewingCand); } } for (nIdx = 0; nIdx < chewing_buffer_Len (g_pChewingCtx); nIdx++) { memcpy (szWord, pszTmp + (nIdx * 3), 3); hime_label_show (szWord, nIdx); } free (pszTmp); } if (chewing_commit_Check (g_pChewingCtx)) { pszTmp = chewing_commit_String (g_pChewingCtx); g_himeModMainFuncs.mf_send_text (pszTmp); // FIXME: workaround for repeated commit // it impacts the bEscCleanAllBuf setting! chewing_handle_Esc (g_pChewingCtx); free (pszTmp); } module_show_win (); return TRUE; }
void test_null() { int ret; char *buf; const char *const_buf; int *key; unsigned short *phone; start_testcase(NULL, fd); chewing_Reset(NULL); // shall not crash ret = chewing_set_KBType(NULL, 0); ok(ret == -1, "chewing_set_KBType() returns `%d' shall be `%d'", ret, -1); ret = chewing_get_KBType(NULL); ok(ret == -1, "chewing_get_KBType() returns `%d' shall be `%d'", ret, -1); buf = chewing_get_KBString(NULL); ok(strcmp(buf, "") == 0, "chewing_get_KBString() returns `%s' shall be `%s'", buf, ""); chewing_free(buf); chewing_delete(NULL); // shall not crash chewing_free(NULL); // shall not crash chewing_set_candPerPage(NULL, 0); // shall not crash ret = chewing_get_candPerPage(NULL); ok(ret == -1, "chewing_get_candPerPage() returns `%d' shall be `%d'", ret, -1); chewing_set_maxChiSymbolLen(NULL, 0); // shall not crash ret = chewing_get_maxChiSymbolLen(NULL); ok(ret == -1, "chewing_get_maxChiSymbolLen() returns `%d' shall be `%d'", ret, -1); chewing_set_selKey(NULL, NULL, 0); // shall not crash key = chewing_get_selKey(NULL); ok(key == NULL, "chewing_get_selKey() returns NULL"); chewing_free(key); chewing_set_addPhraseDirection(NULL, 0); // shall not crash ret = chewing_get_addPhraseDirection(NULL); ok(ret == -1, "chewing_get_addPhraseDirection() returns `%d' shall be `%d'", ret, -1); chewing_set_spaceAsSelection(NULL, 0); // shall not crash ret = chewing_get_spaceAsSelection(NULL); ok(ret == -1, "chewing_get_spaceAsSelection() returns `%d' shall be `%d'", ret, -1); chewing_set_escCleanAllBuf(NULL, 0); // shall not crash ret = chewing_get_escCleanAllBuf(NULL); ok(ret == -1, "chewing_get_escCleanAllBuf() returns `%d' shall be `%d'", ret, -1); chewing_set_autoShiftCur(NULL, 0); // shall not crash ret = chewing_get_autoShiftCur(NULL); ok(ret == -1, "chewing_get_autoShiftCur() returns `%d' shall be `%d'", ret, -1); chewing_set_easySymbolInput(NULL, 0); // shall not crash ret = chewing_get_easySymbolInput(NULL); ok(ret == -1, "chewing_get_easySymbolInput() returns `%d' shall be `%d'", ret, -1); chewing_set_phraseChoiceRearward(NULL, 0); ret = chewing_get_phraseChoiceRearward(NULL); ok(ret == -1, "chewing_get_phraseChoiceRearward() returns `%d' shall be `%d'", ret, -1); chewing_set_ChiEngMode(NULL, 0); // shall not crash ret = chewing_get_ChiEngMode(NULL); ok(ret == -1, "chewing_get_ChiEngMode() returns `%d' shall be `%d'", ret, -1); chewing_set_ShapeMode(NULL, 0); // shall not crash ret = chewing_handle_Space(NULL); ok(ret == -1, "chewing_handle_Space() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Esc(NULL); ok(ret == -1, "chewing_handle_Esc() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Enter(NULL); ok(ret == -1, "chewing_handle_Enter() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Del(NULL); ok(ret == -1, "chewing_handle_Del() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Backspace(NULL); ok(ret == -1, "chewing_handle_Backspace() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Up(NULL); ok(ret == -1, "chewing_handle_Up() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Down(NULL); ok(ret == -1, "chewing_handle_Down() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_ShiftLeft(NULL); ok(ret == -1, "chewing_handle_ShiftLeft() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Left(NULL); ok(ret == -1, "chewing_handle_Left() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_ShiftRight(NULL); ok(ret == -1, "chewing_handle_ShiftRight() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Right(NULL); ok(ret == -1, "chewing_handle_Right() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Tab(NULL); ok(ret == -1, "chewing_handle_Tab() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_DblTab(NULL); ok(ret == -1, "chewing_handle_DblTab() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Capslock(NULL); ok(ret == -1, "chewing_handle_Capslock() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Home(NULL); ok(ret == -1, "chewing_handle_Home() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_PageUp(NULL); ok(ret == -1, "chewing_handle_PageUp() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_PageDown(NULL); ok(ret == -1, "chewing_handle_PageDown() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Default(NULL, 0); ok(ret == -1, "chewing_handle_Default() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_CtrlNum(NULL, 0); ok(ret == -1, "chewing_handle_CtrlNum() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_ShiftSpace(NULL); ok(ret == -1, "chewing_handle_ShiftSpace() returns `%d' shall be `%d'", ret, -1); ret = chewing_handle_Numlock(NULL, 0); ok(ret == -1, "chewing_handle_Numlock() returns `%d' shall be `%d'", ret, -1); phone = chewing_get_phoneSeq(NULL); ok(phone == NULL, "chewing_get_phoneSeq() returns NULL"); chewing_free(phone); ret = chewing_get_phoneSeqLen(NULL); ok(ret == -1, "chewing_get_phoneSeqLen() returns `%d' shall be `%d'", ret, -1); chewing_set_logger(NULL, NULL, NULL); ret = chewing_userphrase_enumerate(NULL); ok(ret == -1, "chewing_userphrase_enumerate() returns `%d' shall be `%d'", ret, -1); ret = chewing_userphrase_has_next(NULL, NULL, NULL); ok(ret == 0, "chewing_userphrase_has_next() returns `%d' shall be `%d'", ret, 0); ret = chewing_userphrase_get(NULL, NULL, 0, NULL, 0); ok(ret == -1, "chewing_userphrase_get() returns `%d' shall be `%d'", ret, -1); ret = chewing_userphrase_add(NULL, NULL, NULL); ok(ret == -1, "chewing_userphrase_add() returns `%d' shall be `%d'", ret, -1); ret = chewing_userphrase_remove(NULL, NULL, NULL); ok(ret == -1, "chewing_userphrase_remove() returns `%d' shall be `%d'", ret, -1); ret = chewing_userphrase_lookup(NULL, NULL, NULL); ok(ret == 0, "chewing_userphrase_lookup() returns `%d' shall be `%d'", ret, 0); ret = chewing_cand_open(NULL); ok(ret == -1, "chewing_cand_open() returns `%d' shall be `%d'", ret, -1); ret = chewing_cand_close(NULL); ok(ret == -1, "chewing_cand_open() returns `%d' shall be `%d'", ret, -1); ret = chewing_cand_choose_by_index(NULL, 0); ok(ret == -1, "chewing_cand_choose_by_index() returns `%d' shall be `%d'", ret, -1); ret = chewing_cand_list_first(NULL); ok(ret == -1, "chewing_cand_list_first() returns `%d' shall be `%d'", ret, -1); ret = chewing_cand_list_last(NULL); ok(ret == -1, "chewing_cand_list_last() returns `%d' shall be `%d'", ret, -1); ret = chewing_cand_list_has_next(NULL); ok(ret == 0, "chewing_cand_list_has_next() returns `%d' shall be `%d'", ret, 0); ret = chewing_cand_list_has_prev(NULL); ok(ret == 0, "chewing_cand_list_has_prev() returns `%d' shall be `%d'", ret, 0); ret = chewing_cand_list_next(NULL); ok(ret == -1, "chewing_cand_list_next() returns `%d' shall be `%d'", ret, -1); ret = chewing_cand_list_prev(NULL); ok(ret == -1, "chewing_cand_list_prev() returns `%d' shall be `%d'", ret, -1); ret = chewing_commit_preedit_buf(NULL); ok(ret == -1, "chewing_commit_preedit_buf() returns `%d' shall be `%d'", ret, -1); ret = chewing_clean_preedit_buf(NULL); ok(ret == -1, "chewing_clean_preedit_buf() returns `%d' shall be `%d'", ret, -1); ret = chewing_clean_bopomofo_buf(NULL); ok(ret == -1, "chewing_clean_bopomofo_buf() returns `%d' shall be `%d'", ret, -1); ret = chewing_commit_Check(NULL); ok(ret == -1, "chewing_commit_Check() returns `%d' shall be `%d'", ret, -1); buf = chewing_commit_String(NULL); ok(strcmp(buf, "") == 0, "chewing_commit_String() returns `%s' shall be `%s'", buf, ""); chewing_free(buf); const_buf = chewing_commit_String_static(NULL); ok(strcmp(const_buf, "") == 0, "chewing_commit_String() returns `%s' shall be `%s'", const_buf, ""); ret = chewing_buffer_Check(NULL); ok(ret == -1, "chewing_buffer_Check() returns `%d' shall be `%d'", ret, -1); ret = chewing_buffer_Len(NULL); ok(ret == -1, "chewing_buffer_Len() returns `%d' shall be `%d'", ret, -1); buf = chewing_buffer_String(NULL); ok(strcmp(buf, "") == 0, "chewing_buffer_String() returns `%s' shall be `%s'", buf, ""); chewing_free(buf); const_buf = chewing_buffer_String_static(NULL); ok(strcmp(const_buf, "") == 0, "chewing_buffer_String_static() returns `%s' shall be `%s'", const_buf, ""); const_buf = chewing_bopomofo_String_static(NULL); ok(strcmp(const_buf, "") == 0, "chewing_bopomofo_String_static() returns `%s' shall be `%s'", const_buf, ""); BEGIN_IGNORE_DEPRECATIONS buf = chewing_zuin_String(NULL, NULL); END_IGNORE_DEPRECATIONS ok(strcmp(buf, "") == 0, "chewing_zuin_String() returns `%s' shall be `%s'", buf, ""); chewing_free(buf); ret = chewing_bopomofo_Check(NULL); ok(ret == -1, "chewing_bopomofo_Check() returns `%d' shall be `%d'", ret, -1); BEGIN_IGNORE_DEPRECATIONS chewing_zuin_Check(NULL); // shall not crash END_IGNORE_DEPRECATIONS ret = chewing_cursor_Current(NULL); ok(ret == -1, "chewing_cursor_Current() returns `%d' shall be `%d'", ret, -1); ret = chewing_cand_CheckDone(NULL); ok(ret == -1, "chewing_cand_CheckDone() returns `%d' shall be `%d'", ret, -1); ret = chewing_cand_TotalPage(NULL); ok(ret == -1, "chewing_cand_TotalPage() returns `%d' shall be `%d'", ret, -1); ret = chewing_cand_ChoicePerPage(NULL); ok(ret == -1, "chewing_cand_ChoicePerPage() returns `%d' shall be `%d'", ret, -1); ret = chewing_cand_TotalChoice(NULL); ok(ret == -1, "chewing_cand_TotalChoice() returns `%d' shall be `%d'", ret, -1); ret = chewing_cand_CurrentPage(NULL); ok(ret == -1, "chewing_cand_CurrentPage() returns `%d' shall be `%d'", ret, -1); chewing_cand_Enumerate(NULL); // shall not crash ret = chewing_cand_hasNext(NULL); ok(ret == -1, "chewing_cand_hasNext() returns `%d' shall be `%d'", ret, -1); const_buf = chewing_cand_String_static(NULL); ok(strcmp(const_buf, "") == 0, "chewing_cand_String_static() returns `%s' shall be `%s'", const_buf, ""); buf = chewing_cand_String(NULL); ok(strcmp(buf, "") == 0, "chewing_cand_String() returns `%s' shall be `%s'", buf, ""); chewing_free(buf); chewing_interval_Enumerate(NULL); // shall not crash ret = chewing_interval_hasNext(NULL); ok(ret == -1, "chewing_interval_hasNext() returns `%d' shall be `%d'", ret, -1); chewing_interval_Get(NULL, NULL); // shall not crash ret = chewing_aux_Check(NULL); ok(ret == -1, "chewing_aux_Check() returns `%d' shall be `%d'", ret, -1); ret = chewing_aux_Length(NULL); ok(ret == -1, "chewing_aux_Length() returns `%d' shall be `%d'", ret, -1); const_buf = chewing_aux_String_static(NULL); ok(strcmp(const_buf, "") == 0, "chewing_aux_String_static() returns `%s' shall be `%s'", const_buf, ""); buf = chewing_aux_String(NULL); ok(strcmp(buf, "") == 0, "chewing_aux_String() returns `%s' shall be `%s'", buf, ""); chewing_free(buf); ret = chewing_keystroke_CheckIgnore(NULL); ok(ret == -1, "chewing_keystroke_CheckIgnore() returns `%d' shall be `%d'", ret, -1); ret = chewing_keystroke_CheckAbsorb(NULL); ok(ret == -1, "chewing_keystroke_CheckAbsorb() returns `%d' shall be `%d'", ret, -1); chewing_kbtype_Enumerate(NULL); // shall not crash ret = chewing_kbtype_hasNext(NULL); ok(ret == -1, "chewing_kbtype_hasNext() returns `%d' shall be `%d'", ret, -1); const_buf = chewing_kbtype_String_static(NULL); ok(strcmp(const_buf, "") == 0, "chewing_kbtype_String_static() returns `%s' shall be `%s'", const_buf, ""); buf = chewing_kbtype_String(NULL); ok(strcmp(buf, "") == 0, "chewing_kbtype_String() returns `%s' shall be `%s'", buf, ""); chewing_free(buf); }
static gboolean hime_buffer_label_show (void) { char *pszTmp = NULL; char *pszWord = NULL; char *pszChewingCand = NULL; char *pHead = NULL; int nIdx = 0; int nPos = 0; int nWordSize = 0; pszWord = (char *) realloc (pszWord, 8); if (!pszWord) return FALSE; memset (pszWord, 0x00, 8); // check if the composing is valid or not if (chewing_buffer_Check (g_pChewingCtx)) { g_himeModMainFuncs.mf_hide_selections_win (); pszTmp = chewing_buffer_String (g_pChewingCtx); // init cand_no chewing_cand_Enumerate (g_pChewingCtx); g_himeModMainFuncs.mf_clear_sele (); if (chewing_cand_TotalChoice (g_pChewingCtx)) { while (chewing_cand_hasNext (g_pChewingCtx)) { pszChewingCand = chewing_cand_String (g_pChewingCtx); if (nIdx > chewing_get_candPerPage (g_pChewingCtx) - 1) break; hime_label_cand_show (pszChewingCand, nIdx++); free (pszChewingCand); } } for (nPos = 0, pHead = pszTmp, nIdx = 0; nPos < strlen (pszTmp); nPos += nWordSize, pHead += nWordSize) { if (!((*pHead) & 0x80)) // 1 byte utf-8 data nWordSize = 1; else if (((*pHead) & 0xf0) == 0xc0) // 2 bytes utf-8 data nWordSize = 2; else if (((*pHead) & 0xf0) == 0xe0) // 3 bytes utf-8 data nWordSize = 3; else if (((*pHead) & 0xf0) == 0xf0) // 4 bytes utf-8 data nWordSize = 4; memset (pszWord, 0x00, 8); memcpy (pszWord, pHead, nWordSize); hime_label_show (pszWord, nIdx++); } // if chewing_buffer_Check is not zero, // it means that the chewing_buffer_String must have val, // so we could free the ptr here free (pszTmp); } free (pszWord); return TRUE; }