void test_symbol_cand_page() { ChewingContext *ctx; chewing_Init( NULL, NULL ); ctx = chewing_new(); chewing_set_candPerPage( ctx, 10 ); chewing_set_maxChiSymbolLen( ctx, 16 ); chewing_handle_Default( ctx, '`' ); ok( chewing_cand_CurrentPage( ctx ) == 0, "current page shall be 0" ); ok( chewing_cand_TotalPage( ctx ) == 2, "total page shall be 2" ); ok_candidate( ctx, CAND, ARRAY_SIZE( CAND ) ); chewing_delete( ctx ); chewing_Terminate(); }
void test_type_symbol() { ChewingContext *ctx; int i; chewing_Init( NULL, NULL ); ctx = chewing_new(); chewing_set_candPerPage( ctx, 10 ); chewing_set_maxChiSymbolLen( ctx, 16 ); for (i = 0; i < ARRAY_SIZE(SYMBOL); ++i ) { type_keystroke_by_string( ctx, SYMBOL[i].token ); ok_preedit_buffer( ctx, "" ); ok_commit_buffer( ctx, SYMBOL[i].expected ); } chewing_delete( ctx ); chewing_Terminate(); }
void test_userphrase_auto_learn() { static const char bopomofo[] = "\xE3\x84\x8E\xE3\x84\x9C \xE3\x84\x8E\xE3\x84\x9C" /* ㄎㄜ ㄎㄜ */; ChewingContext *ctx; remove( TEST_HASH_DIR PLAT_SEPARATOR HASH_FILE ); chewing_Init( NULL, NULL ); ctx = chewing_new(); chewing_set_maxChiSymbolLen( ctx, 16 ); chewing_set_addPhraseDirection( ctx, 1 ); ok( has_userphrase( ctx, bopomofo, NULL ) == 0, "`%s' shall not be in userphrase", bopomofo ); type_keystroke_by_string( ctx, "dk dk <E>" ); ok( has_userphrase( ctx, bopomofo, NULL ) == 1, "`%s' shall be in userphrase", bopomofo ); chewing_delete( ctx ); chewing_Terminate(); }
void test_mode_change() { chewing_Init( NULL, NULL ); ChewingContext *ctx = chewing_new(); ok( ctx, "chewing_new shall not return NULL" ); chewing_set_maxChiSymbolLen( ctx, 16 ); type_keystoke_by_string( ctx, CHINESE.token ); ok_commit_buffer( ctx, CHINESE.expected ); chewing_set_easySymbolInput( ctx, 1 ); type_keystoke_by_string( ctx, EASY_SYMBOL[0].token ); ok_commit_buffer( ctx, EASY_SYMBOL[0].expected ); chewing_set_easySymbolInput( ctx, 0 ); type_keystoke_by_string( ctx, CHINESE.token ); ok_commit_buffer( ctx, CHINESE.expected ); chewing_delete( ctx ); chewing_Terminate(); }
void test_set_candPerPage() { const int VALUE[] = { MIN_CAND_PER_PAGE, MAX_CAND_PER_PAGE, }; const int INVALID_VALUE[] = { MIN_CAND_PER_PAGE - 1, MAX_CAND_PER_PAGE + 1, }; ChewingContext *ctx; int i; int j; chewing_Init( 0, 0 ); ctx = chewing_new(); for ( i = 0; i < ARRAY_SIZE( VALUE ); ++i ) { chewing_set_candPerPage( ctx, VALUE[i] ); ok( chewing_get_candPerPage( ctx ) == VALUE[i], "candPerPage shall be `%d'", VALUE[i] ); for ( j = 0; j < ARRAY_SIZE( INVALID_VALUE ); ++j ) { // mode shall not change when set mode has invalid value. chewing_set_candPerPage( ctx, INVALID_VALUE[j] ); ok( chewing_get_candPerPage( ctx ) == VALUE[i], "candPerPage shall be `%d'", VALUE[i] ); } } chewing_delete( ctx ); chewing_Terminate(); }
void test_set_ShapeMode() { const int VALUE[] = { HALFSHAPE_MODE, FULLSHAPE_MODE, }; const int INVALID_VALUE[] = { -1, 2, }; ChewingContext *ctx; int i; int j; chewing_Init( 0, 0 ); ctx = chewing_new(); for ( i = 0; i < ARRAY_SIZE( VALUE ); ++i ) { chewing_set_ShapeMode( ctx, VALUE[i] ); ok( chewing_get_ShapeMode( ctx ) == VALUE[i], "ShapeMode shall be `%d'", VALUE[i] ); for ( j = 0; j < ARRAY_SIZE( INVALID_VALUE ); ++j ) { // mode shall not change when set mode has invalid value. chewing_set_ShapeMode( ctx, INVALID_VALUE[j] ); ok( chewing_get_ShapeMode( ctx ) == VALUE[i], "ShapeMode shall be `%d'", VALUE[i] ); } } chewing_delete( ctx ); chewing_Terminate(); }
int main( int argc, char *argv[] ) #endif { ChewingContext *ctx; char *prefix = CHEWING_DATA_PREFIX; int i; int ctrl_shifted; /* Initialize libchewing */ /* for the sake of testing, we should not change existing hash data */ chewing_Init( prefix, TEST_HASH_DIR ); /* Request handle to ChewingContext */ ctx = chewing_new(); /* Set keyboard type */ chewing_set_KBType( ctx, chewing_KBStr2Num( "KB_DEFAULT" ) ); chewing_set_candPerPage( ctx, 9 ); chewing_set_maxChiSymbolLen( ctx, 16 ); chewing_set_addPhraseDirection( ctx, 1 ); chewing_set_selKey( ctx, selKey_define, 10 ); chewing_set_spaceAsSelection( ctx, 1 ); while ( 1 ) { i = get_keystroke(); switch ( i ) { case KEY_LEFT: chewing_handle_Left( ctx ); break; case KEY_SLEFT: chewing_handle_ShiftLeft( ctx ); break; case KEY_RIGHT: chewing_handle_Right( ctx ); break; case KEY_SRIGHT: chewing_handle_ShiftRight( ctx ); break; case KEY_UP: chewing_handle_Up( ctx ); break; case KEY_DOWN: chewing_handle_Down( ctx ); break; case KEY_SPACE: chewing_handle_Space( ctx ); break; case KEY_ENTER: chewing_handle_Enter( ctx ); break; case KEY_BACKSPACE: chewing_handle_Backspace( ctx ); break; case KEY_ESC: chewing_handle_Esc( ctx ); break; case KEY_DELETE: chewing_handle_Del( ctx ); break; case KEY_HOME: chewing_handle_Home( ctx ); break; case KEY_END: chewing_handle_End( ctx ); break; case KEY_TAB: chewing_handle_Tab( ctx ); break; case KEY_CAPSLOCK: chewing_handle_Capslock( ctx ); break; case END: goto end; default: ctrl_shifted = ( i - KEY_CTRL_BASE ); if ( ( ctrl_shifted >= '0' ) && ( ctrl_shifted <= '9' ) ) { chewing_handle_CtrlNum( ctx, ctrl_shifted ); } else { chewing_handle_Default( ctx, (char) i ); } break; } commit_string( ctx ); #ifdef USED_IN_SIMULATION if ( i == KEY_ENTER ) compare_per_run(); #endif } end: /* Free Chewing IM handle */ chewing_delete( ctx ); /* Termate Chewing services */ chewing_Terminate(); #ifndef USED_IN_SIMULATION printf( "\n" ); #endif return 0; }
int main( int argc, char *argv[] ) { ChewingContext *ctx; FILE *fout; FILE *fout2; char *prefix = CHEWING_DATA_PREFIX; char *out_file = "tmp.txt"; char *out_file2 = "tmp_out.txt"; int ch; int width, height; int add_phrase_length; /*if ( argc < 2 ) { fprintf( stderr, "usage: genkeystroke filename\n" ); exit( 1 ); } else { fout = fopen( argv[ 1 ], "w" );*/ fout = fopen( out_file, "w" ); if ( ! fout ) { fprintf( stderr, "Error: failed to open %s\n", out_file ); exit( 1 ); } fout2 = fopen( out_file2, "w" ); if ( ! fout2 ) { fprintf( stderr, "Error: failed to open %s\n", out_file2 ); exit( 1 ); } /*}*/ /* Initialize curses library */ setlocale(LC_CTYPE, ""); initscr(); if ( has_colors() == TRUE ) { start_color(); init_pair( 1, COLOR_WHITE, COLOR_BLUE ); init_pair( 2, COLOR_RED, COLOR_YELLOW ); init_pair( 3, COLOR_WHITE, COLOR_RED ); hasColor = 1; } cbreak(); noecho(); keypad( stdscr, 1 ); getmaxyx( stdscr, height, width ); start_color(); clear(); refresh(); /* Initialize libchewing */ /* for the sake of testing, we should not change existing hash data */ chewing_Init( prefix, TEST_HASH_DIR ); /* Request handle to ChewingContext */ ctx = chewing_new(); /* Set keyboard type */ chewing_set_KBType( ctx, chewing_KBStr2Num( "KB_DEFAULT" ) ); /* Fill configuration values */ chewing_set_candPerPage( ctx, 9 ); chewing_set_maxChiSymbolLen( ctx, 16 ); chewing_set_addPhraseDirection( ctx, 1 ); chewing_set_selKey( ctx, selKey_define, 10 ); chewing_set_spaceAsSelection( ctx, 1 ); chewing_set_autoShiftCur( ctx, 1 ); chewing_set_phraseChoiceRearward( ctx, 1 ); clear(); mvaddstr( 0, 0, "Any key to start testing..." ); while ( TRUE ) { ch = getch(); switch ( ch ) { case KEY_LEFT: chewing_handle_Left( ctx ); fprintf( fout, "<L>" ); break; case KEY_SLEFT: chewing_handle_ShiftLeft( ctx ); fprintf( fout, "<SL>" ); break; case KEY_RIGHT: chewing_handle_Right( ctx ); fprintf( fout, "<R>" ); break; case KEY_SRIGHT: chewing_handle_ShiftRight( ctx ); fprintf( fout, "<SR>" ); break; case KEY_UP: chewing_handle_Up( ctx ); fprintf( fout, "<U>" ); break; case KEY_DOWN: chewing_handle_Down( ctx ); fprintf( fout, "<D>" ); break; case KEY_SPACE: chewing_handle_Space( ctx ); fprintf( fout, " " ); break; case KEY_ENTER: chewing_handle_Enter( ctx ); fprintf( fout, "<E>" ); break; case KEY_BACKSPACE: chewing_handle_Backspace( ctx ); fprintf( fout, "<B>" ); break; case KEY_ESC: chewing_handle_Esc( ctx ); fprintf( fout, "<EE>" ); break; case KEY_DC: chewing_handle_Del( ctx ); fprintf( fout, "<DC>" ); break; case KEY_HOME: chewing_handle_Home( ctx ); fprintf( fout, "<H>" ); break; case KEY_END: chewing_handle_End( ctx ); fprintf( fout, "<EN>" ); break; case KEY_TAB: chewing_handle_Tab( ctx ); fprintf( fout, "<T>" ); break; case CTRL_0: case CTRL_1: case CTRL_2: case CTRL_3: case CTRL_4: case CTRL_5: case CTRL_6: case CTRL_7: case CTRL_8: case CTRL_9: add_phrase_length = ( ch - CTRL_0 + '0' ); chewing_handle_CtrlNum( ctx, add_phrase_length ); fprintf( fout, "<C%c>", add_phrase_length ); break; case KEY_CTRL_('B'): /* emulate CapsLock */ chewing_handle_Capslock( ctx ); fprintf( fout, "<CB>"); break; case KEY_CTRL_('D'): case EOF: goto end; case KEY_CTRL_('H'): /* emulate Shift */ if ( chewing_get_ShapeMode( ctx ) == FULLSHAPE_MODE ) chewing_set_ShapeMode( ctx, HALFSHAPE_MODE ); else chewing_set_ShapeMode( ctx, FULLSHAPE_MODE ); break; default: chewing_handle_Default( ctx, (char) ch ); fprintf( fout, "%c", (char) ch ); break; } drawline( 0, 0 ); drawline( 2, 0 ); show_interval_buffer( 3, 0, ctx ); drawline( 4, 0 ); show_choose_buffer( 5, 0, ctx ); drawline( 6, 0 ); show_zuin_buffer( 7, 0, ctx ); show_full_shape( 7, 5, ctx ); drawline( 8, 0 ); mvaddstr( 9, 0, "Ctrl + d : leave" ); mvaddstr( 9, 20, "Ctrl + b : toggle Eng/Chi mode" ); mvaddstr( 10, 0, "F1, F2, F3, ..., F9 : Add user defined phrase"); mvaddstr( 11, 0, "Crtl + h : toggle Full/Half shape mode" ); show_commit_string( ctx ); store_commit_string( ctx, fout2 ); show_userphrase( 7, 12, ctx ); show_edit_buffer( 1, 0, ctx ); } end: endwin(); /* Release Chewing context */ chewing_delete( ctx ); /* Termate Chewing services */ chewing_Terminate(); fprintf( fout, "\n" ); fprintf( fout2, "\n" ); fclose( fout ); fclose( fout2 ); return 0; }
void Chewing::ReloadSymbolTable(const char* dataDir, const char* userDir ) { chewing_Terminate(); chewing_Init(dataDir, userDir); }
Chewing::~Chewing() { chewing_Terminate(); chewing_delete(ctx); }
int main() { ChewingContext *ct; char *buf; int counter; /* * Initialize Chewing input method engine * Parameter 1:data path * Parameter 2:path to keep user-defined phrases */ chewing_Init("../data/", "."); ct = chewing_new(); /* Chinese mode by default */ if (chewing_get_ChiEngMode(ct) == CHINESE_MODE) printf("Chinese mode!\n"); /* Set the selection keys, otherwise you can not select candidates. */ chewing_set_selKey(ct, selKeys, 9); /* Set the legth of maximum Chinese symbol */ chewing_set_maxChiSymbolLen(ct, 10); /* Set the amount of candidates per page */ chewing_set_candPerPage(ct, 9); /* * Sequence 1:'綠茶' */ chewing_handle_Default(ct, 'x'); /* ㄌ */ chewing_handle_Default(ct, 'm'); /* ㄩ */ chewing_handle_Default(ct, '4'); /* ˋ */ chewing_handle_Default(ct, 't'); /* ㄔ */ chewing_handle_Default(ct, '8'); /* ㄚ */ chewing_handle_Default(ct, '6'); /* ˊ */ /* commit buffer to output area */ chewing_handle_Enter(ct); /* Copy stribf from output area */ buf = chewing_commit_String(ct); printf("%s\n", buf); free(buf); /* * Sequence 2:Input 'ㄓ' and select candidates */ chewing_handle_Default(ct, '5'); chewing_handle_Space(ct); /* * The expected key to enter candidate selection is 'Down'. * If 'Down' is not triggered, we can not use the further * chewing_cand_Enumerate() to get the detailed listing. */ chewing_handle_Down(ct); /* * Start the enumeration of candidate. It follows the typical iterator design. * (1) chewing_cand_Enumerate(): specify the iterator by ChewingContext * (2) chewing_cand_hasNext(): find out the next element in iterator * (3) chewing_cand_String(): get the current element and advance */ chewing_cand_Enumerate(ct); counter = 0; while (chewing_cand_hasNext(ct)) { counter += 1; char *s = chewing_cand_String(ct); printf("%s ", s); free(s); if (counter == 5) { counter = 0; printf("\n"); } } printf("\nSelecting 13rd:"); /* * 剛才按下了↓,目前正在選字。 * 我想選第13個字,那就必須換頁,然後選第二頁的第4個字(9+4=13) * 換頁的按鍵是空白鍵 * (一頁有多少候選字的設定,在 chewing_set_candPerPage(ct, 9); 這個呼叫中) */ chewing_handle_Space(ct); chewing_handle_Default(ct, '4'); chewing_handle_Enter(ct); buf = chewing_commit_String(ct); printf("%s\n", buf); free(buf); /* Finalize Chewing input method engine */ chewing_delete(ct); chewing_Terminate(); return 0; }
MainWindow::~MainWindow() { chewing_delete(this->_ct); chewing_Terminate(); }