*** skg.c.orig Thu Nov 16 23:31:13 2000 --- skg.c Fri Feb 21 21:03:04 2003 *************** *** 22,27 **** --- 22,32 ---- * */ + /* + * EGG_CANNA_LIKE_HACK 2003/02/20 by Dai ISHIJIMA + */ + #define EGG_CANNA_LIKE_HACK + #include "config.h" /* 93.10.25 by H.Konishi */ #ifdef INCLUDE_SKG #include "def.h" *************** *** 417,422 **** --- 422,486 ---- update(); } + #ifdef EGG_CANNA_LIKE_HACK + /* かな・カタカナ変換 */ + static void convert_hira_kata(unsigned char *s) + { + int i; + unsigned char buf[KEY_BUFFER_SIZE]; + + /* ローマ字表記である変換文字列の大文字・小文字変換をすればかなカナ変換 */ + for (i = 0; i < strlen(s); i++) { + if (('A' <= s[i]) && (s[i] <= 'Z')) { + buf[i] = s[i] - 'A' + 'a'; + } + else if (('a' <= s[i]) && (s[i] <= 'z')) { + buf[i] = s[i] - 'a' + 'A'; + } + else { + buf[i] = s[i]; + } + } + buf[i] = 0; + strcpy(s, buf); + } + + + /* 入力バッファの最後はnか? */ + int last_char_is_n(char *istr) + { + int len; + + if ((len = strlen(istr)) <= 0) { + return(0); + } + if (istr[len - 1] == 'n') { + if (len <= 1) { /* single 'n' */ + return(1); + } + else { + if (istr[len - 2] != 'n') { + return(1); + } + return(0); /* "...nn" */ + } + } + else if (istr[len - 1] == 'N') { + if (len <= 1) { /* single 'N' */ + return(1); + } + else { + if (istr[len - 2] != 'N') { + return(1); + } + return(0); /* "...NN" */ + } + } + return(0); + } + #endif + + static int skg_input_string( flg, mode, istr ) int *flg; *************** *** 442,453 **** --- 506,527 ---- #endif switch(c) { + #ifdef EGG_CANNA_LIKE_HACK + case CCHR('P'): + case CCHR('N'): + convert_hira_kata(istr); + break; + #endif /* Ret-Key, Insert String without Kanji-Converting */ case CCHR('M'): *flg = 1; return 0; /* C-g, Abort. If istr NULL,then quit skg-mode. */ case CCHR('G'): + #ifdef EGG_CANNA_LIKE_HACK + /* C-\, *ALSO* Abort. If istr NULL,then quit skg-mode. */ + case CCHR('\\'): + #endif if ( strlen( istr ) == 0 ) { clear_string( istr ); *************** *** 465,475 **** --- 539,561 ---- } else { + #ifdef EGG_CANNA_LIKE_HACK + /* convert single 'n' as 'n.' */ + if (last_char_is_n(istr)) { + sprintf( insert_c , "%c",'.' ); + strcat( istr , insert_c ); + } + #endif *flg = 0; return 0; } break; + #ifdef EGG_CANNA_LIKE_HACK + /* C-\ is used for toggle SKG mode, so remap C-o */ + case CCHR('O'): + #else case CCHR('\\'): + #endif *mode = 1 - *mode; break; *************** *** 505,511 **** --- 591,601 ---- else { ttbeep(); + #ifdef EGG_CANNA_LIKE_HACK + ewprintf("Help: RET = Insert, SPC = Convert, ^\\ = Quit, ^O = Mode"); + #else ewprintf("Help: RET = Insert, SPC = Convert, ^G = Quit, ^\\ = Mode"); + #endif ttwait(); } }