diff -cr ../orig/kinput2-v3.1/Kinput2.conf kinput2-v3.1-canna/Kinput2.conf *** ../orig/kinput2-v3.1/Kinput2.conf 2002-10-03 18:35:26.000000000 +0900 --- kinput2-v3.1-canna/Kinput2.conf 2003-01-18 08:12:52.000000000 +0900 *************** *** 18,24 **** /* #define UseWnn */ /* define if you are going to use Wnn (v4, v6 or v7) */ /* #define UseWnn6 */ /* define if you are going to use Wnn6 or above */ #define UseCanna /* define if you are going to use Canna */ ! #define UseSj3 /* define if you are going to use Sj3 */ /* #define UseAtok */ /* define if you are going to use Atok */ --- 18,24 ---- /* #define UseWnn */ /* define if you are going to use Wnn (v4, v6 or v7) */ /* #define UseWnn6 */ /* define if you are going to use Wnn6 or above */ #define UseCanna /* define if you are going to use Canna */ ! /* #define UseSj3 */ /* define if you are going to use Sj3 */ /* #define UseAtok */ /* define if you are going to use Atok */ *************** *** 41,47 **** #define UseWnn #endif ! CCDEF_DIR = $(LIBDIR)/ccdef /* * If you have installed Wnn.. --- 41,47 ---- #define UseWnn #endif ! XCOMM CCDEF_DIR = $(LIBDIR)/ccdef /* * If you have installed Wnn.. *************** *** 60,68 **** * Or, use library in the source tree.. */ XCOMM use library in the source tree ! WNNSRC = $(CONTRIBSRC)/programs/Xsi/Wnn ! WNNINCDIR = $(WNNSRC)/include ! WNNLIB = $(WNNSRC)/jlib/libwnn.a XCOMM Canna configuration --- 60,68 ---- * Or, use library in the source tree.. */ XCOMM use library in the source tree ! XCOMM WNNSRC = $(CONTRIBSRC)/programs/Xsi/Wnn ! XCOMM WNNINCDIR = $(WNNSRC)/include ! XCOMM WNNLIB = $(WNNSRC)/jlib/libwnn.a XCOMM Canna configuration *************** *** 78,94 **** * If you have already installed Canna header files and libraries.. */ XCOMM use installed headers/libraries ! XCOMM CANNAINSTDIR = /usr/local/canna ! XCOMM CANNASRC = $(CANNAINSTDIR)/include ! XCOMM CANNALIB = -lcanna16 /* * If you have compiled Canna that came with X11R6 (contrib/programs/Canna), * but not installed yet.. */ XCOMM use headers/libraries in the source tree ! CANNASRC = $(CONTRIBSRC)/programs/Canna32 ! CANNALIB = -L$(CANNASRC)/lib/canna16 -lcanna16 XCOMM SJ3 configuration --- 78,94 ---- * If you have already installed Canna header files and libraries.. */ XCOMM use installed headers/libraries ! CANNAINSTDIR = /usr ! CANNASRC = $(CANNAINSTDIR)/include ! CANNALIB = -lcanna16 /* * If you have compiled Canna that came with X11R6 (contrib/programs/Canna), * but not installed yet.. */ XCOMM use headers/libraries in the source tree ! XCOMM CANNASRC = $(CONTRIBSRC)/programs/Canna32 ! XCOMM CANNALIB = -L$(CANNASRC)/lib/canna16 -lcanna16 XCOMM SJ3 configuration *************** *** 100,106 **** * definition files are to be installed */ ! SJ3DEF_DIR = $(LIBDIR)/sj3def /* * If you have installed SJ3 library and header file, --- 100,106 ---- * definition files are to be installed */ ! XCOMM SJ3DEF_DIR = $(LIBDIR)/sj3def /* * If you have installed SJ3 library and header file, *************** *** 117,124 **** * Use compiled library in the source tree.. */ XCOMM use library in the source tree ! SJ3SRC = $(CONTRIBSRC)/programs/sj3 ! SJ3LIB = $(SJ3SRC)/sj3lib/libsj3lib.a XCOMM Atok configuration --- 117,124 ---- * Use compiled library in the source tree.. */ XCOMM use library in the source tree ! XCOMM SJ3SRC = $(CONTRIBSRC)/programs/sj3 ! XCOMM SJ3LIB = $(SJ3SRC)/sj3lib/libsj3lib.a XCOMM Atok configuration *************** *** 134,140 **** XCOMM use installed headers/libraries XCOMM ATOKINCDIR = /usr/include/atok XCOMM ATOKLIBDIR = /usr/jp/lib ! ATOKLIB = -latok12n -latok12util /** --- 134,140 ---- XCOMM use installed headers/libraries XCOMM ATOKINCDIR = /usr/include/atok XCOMM ATOKLIBDIR = /usr/jp/lib ! XCOMM ATOKLIB = -latok12n -latok12util /** diff -cr ../orig/kinput2-v3.1/include/Canna.h kinput2-v3.1-canna/include/Canna.h *** ../orig/kinput2-v3.1/include/Canna.h 2002-10-03 18:35:26.000000000 +0900 --- kinput2-v3.1-canna/include/Canna.h 2003-01-30 00:22:21.000000000 +0900 *************** *** 63,68 **** --- 63,72 ---- #define XtCCannafile "Cannafile" #define XtNsendReturnByString "sendReturnByString" #define XtCSendReturnByString "SendReturnByString" + #define XtNkeyBackslashAlwaysShifted "keyBackslashAlwaysShifted" + #define XtCKeyBackslashAlwaysShifted "KeyBackslashAlwaysShifted" + #define XtNconversionEndKeys "conversionEndKeys" + #define XtCConversionEndKeys "ConversionEndKeys" typedef struct _CannaClassRec *CannaObjectClass; typedef struct _CannaRec *CannaObject; diff -cr ../orig/kinput2-v3.1/include/CannaP.h kinput2-v3.1-canna/include/CannaP.h *** ../orig/kinput2-v3.1/include/CannaP.h 2002-10-03 18:35:26.000000000 +0900 --- kinput2-v3.1-canna/include/CannaP.h 2003-01-30 00:07:24.000000000 +0900 *************** *** 82,93 **** --- 82,103 ---- #define CANNA_GLINE_End 2 #define CANNA_GLINE_Change 3 + typedef struct _cKeyList { + KeySym ksym; + long mods; + long chk_mods; + struct _cKeyList *next; + } cKeyList; + typedef struct { /* resources */ String cannahost; String cannafile; Boolean sendReturnByString; + Boolean keyBackslashAlwaysShifted; + String conversion_end_keys; /* private data */ + cKeyList *conv_end_key_list; iBuf *ibuf; Boolean textchanged; /* 変換テキストが変わったか */ Boolean selectionending;/* 選択モードを終了しようとしているか */ diff -cr ../orig/kinput2-v3.1/lib/Canna.c kinput2-v3.1-canna/lib/Canna.c *** ../orig/kinput2-v3.1/lib/Canna.c 2002-10-03 18:35:27.000000000 +0900 --- kinput2-v3.1-canna/lib/Canna.c 2004-12-16 16:34:12.000000000 +0900 *************** *** 59,64 **** --- 59,65 ---- #include #endif #include "CannaP.h" + #include "ParseKey.h" #include "DebugPrint.h" #define _WCHAR_T /* この定義は jrkanji.h で wcKanjiStatus などを定義するため */ *************** *** 75,80 **** --- 76,86 ---- { XtNsendReturnByString, XtCSendReturnByString, XtRBoolean, sizeof(Boolean), offset(sendReturnByString), XtRBoolean, False }, + { XtNkeyBackslashAlwaysShifted, XtCKeyBackslashAlwaysShifted, + XtRBoolean, sizeof(Boolean), + offset(keyBackslashAlwaysShifted), XtRBoolean, False }, + { XtNconversionEndKeys, XtCConversionEndKeys, XtRString, sizeof(String), + offset(conversion_end_keys), XtRImmediate, NULL } #undef offset }; *************** *** 207,222 **** static int XKanaLookup(event_struct, buffer_return, bytes_buffer, ! keysym, status_return) XKeyEvent *event_struct; char *buffer_return; int bytes_buffer; KeySym *keysym; XComposeStatus *status_return; { int res; res = XLookupString(event_struct, buffer_return, bytes_buffer, keysym, status_return); if (!res && XK_overline <= *keysym && *keysym <= XK_semivoicedsound) { buffer_return[0] = (unsigned long)(*keysym) & 0xff; res = 1; --- 213,238 ---- static int XKanaLookup(event_struct, buffer_return, bytes_buffer, ! keysym, status_return, bs_flag) XKeyEvent *event_struct; char *buffer_return; int bytes_buffer; KeySym *keysym; XComposeStatus *status_return; + int bs_flag; { int res; res = XLookupString(event_struct, buffer_return, bytes_buffer, keysym, status_return); + if ( res == 1 && bs_flag ) { + /* かな入力で「ー」が入力できるように */ + if ( *keysym == XK_backslash ) { + KeySym shifted_keysym; + shifted_keysym=XKeycodeToKeysym(event_struct->display,event_struct->keycode,1); + if( shifted_keysym == XK_underscore ) + buffer_return[0] = '_'; + } + } if (!res && XK_overline <= *keysym && *keysym <= XK_semivoicedsound) { buffer_return[0] = (unsigned long)(*keysym) & 0xff; res = 1; *************** *** 244,254 **** /* 取りあえず文字に直してしまう */ kanabuf[0] = '\0'; ! nbytes = XKanaLookup(event, kanabuf, 20, &ks, &compose_status); buf[0] = (wchar)kanabuf[0]; /* きたない */ ! if (ks == XK_space && (event->xkey.state & ShiftMask)) { void convend(); convend(obj); --- 260,282 ---- /* 取りあえず文字に直してしまう */ kanabuf[0] = '\0'; ! nbytes = XKanaLookup(event, kanabuf, 20, &ks, &compose_status, ! obj->canna.keyBackslashAlwaysShifted); buf[0] = (wchar)kanabuf[0]; /* きたない */ ! if ( obj->canna.conv_end_key_list != NULL ) { ! cKeyList *listelem; ! for ( listelem=obj->canna.conv_end_key_list; listelem!=NULL; listelem=listelem->next ) { ! if ( ks == listelem->ksym && ! (event->xkey.state & listelem->mods) == listelem->mods ) { ! void convend(); ! ! convend(obj); ! return 0; ! } ! } ! } else if (ks == XK_space && (event->xkey.state & ShiftMask)) { void convend(); convend(obj); *************** *** 617,622 **** --- 645,688 ---- obj->canna.candlistsize = 0; obj->canna.numcand = 0; obj->canna.lastTextLengthIsZero = False; + obj->canna.conv_end_key_list = NULL; + + if ( obj->canna.conversion_end_keys != NULL ) { + char *p = obj->canna.conversion_end_keys; + char *buf = NULL; + size_t buf_size = 0; + cKeyList *prev_key_listelem = NULL, *new_key_listelem; + + while ( *p != '\0' ) { + KeySym ksym; + long mods, chk_mods; + unsigned int comp_len; + + comp_len = strcspn( p, "\n" ) + 1; + if ( buf_size < comp_len ) { + buf = XtRealloc( buf, comp_len * sizeof(char) ); + buf_size = comp_len; + } + memcpy( buf, p, comp_len ); + buf[comp_len - 1] = '\0'; + + if ( ParseKeyEvent( buf, &ksym, &mods, &chk_mods ) ) { + new_key_listelem = (cKeyList *)XtMalloc( sizeof(cKeyList) ); + new_key_listelem->ksym = ksym; + new_key_listelem->mods = mods; + new_key_listelem->chk_mods = chk_mods; + new_key_listelem->next = NULL; + if ( prev_key_listelem == NULL ) { + obj->canna.conv_end_key_list = new_key_listelem; + } else { + prev_key_listelem->next = new_key_listelem; + } + prev_key_listelem = new_key_listelem; + } + p += comp_len; + } + if ( buf != NULL ) XtFree( (char *)buf ); + } ibufInitialize(obj); *************** *** 711,716 **** --- 777,790 ---- int i; /* バッファの解放 */ + if ( obj->canna.conv_end_key_list != NULL ) { + cKeyList *listelem = obj->canna.conv_end_key_list; + while ( listelem != NULL) { + cKeyList *next_elem = listelem->next; + XtFree( (char*)listelem ); + listelem = next_elem; + } + } freeIBuf(obj->canna.ibuf); *************** *** 1315,1329 **** *buffer_return = CANNA_KEY_Nfer; functionalChar = 1; break; ! case XK_Kanji: if (event_struct->state & 4 /* control-shifted */) *buffer_return = CANNA_KEY_Cntrl_Xfer; else if (event_struct->state & 1 /* shifted */) ! *buffer_return = CANNA_KEY_Shift_Xfer; else *buffer_return = CANNA_KEY_Xfer; functionalChar = 1; break; case XK_Up: if (event_struct->state & 4 /* control-shifted */) *buffer_return = CANNA_KEY_Cntrl_Up; --- 1389,1425 ---- *buffer_return = CANNA_KEY_Nfer; functionalChar = 1; break; ! case XK_Mode_switch: ! if (event_struct->state & 1 /* shifted */) ! *buffer_return = CANNA_KEY_Shift_Xfer; ! else ! break; ! functionalChar = 1; ! break; ! case XK_Henkan_Mode: if (event_struct->state & 4 /* control-shifted */) *buffer_return = CANNA_KEY_Cntrl_Xfer; else if (event_struct->state & 1 /* shifted */) ! break; else *buffer_return = CANNA_KEY_Xfer; functionalChar = 1; break; + case XK_Hiragana_Katakana: + if (event_struct->state & 1 /* shifted */) + *buffer_return = CANNA_KEY_KATAKANA; + else + *buffer_return = CANNA_KEY_HIRAGANA; + functionalChar = 1; + break; + case XK_Zenkaku_Hankaku: + *buffer_return = CANNA_KEY_HANKAKUZENKAKU; + functionalChar = 1; + break; + case XK_Kanji: + *buffer_return = CANNA_KEY_HANKAKUZENKAKU; + functionalChar = 1; + break; case XK_Up: if (event_struct->state & 4 /* control-shifted */) *buffer_return = CANNA_KEY_Cntrl_Up; *************** *** 1605,1611 **** {(unsigned char)'\024', XK_Scroll_Lock, 0}, {(unsigned char)'\e', XK_Escape, 0}, {(unsigned char)CANNA_KEY_Nfer, XK_Muhenkan, 0}, ! {(unsigned char)CANNA_KEY_Xfer, XK_Kanji, 0}, {(unsigned char)CANNA_KEY_Up, XK_Up, 0}, {(unsigned char)CANNA_KEY_Left, XK_Left, 0}, {(unsigned char)CANNA_KEY_Right, XK_Right, 0}, --- 1701,1707 ---- {(unsigned char)'\024', XK_Scroll_Lock, 0}, {(unsigned char)'\e', XK_Escape, 0}, {(unsigned char)CANNA_KEY_Nfer, XK_Muhenkan, 0}, ! {(unsigned char)CANNA_KEY_Xfer, XK_Henkan_Mode, 0}, {(unsigned char)CANNA_KEY_Up, XK_Up, 0}, {(unsigned char)CANNA_KEY_Left, XK_Left, 0}, {(unsigned char)CANNA_KEY_Right, XK_Right, 0}, *************** *** 1617,1629 **** {(unsigned char)CANNA_KEY_Help, XK_Help, 0}, {(unsigned char)CANNA_KEY_KP_Key, XK_KP_Space, 0}, /* ? */ {(unsigned char)CANNA_KEY_Shift_Nfer, XK_Muhenkan, ShiftMask}, ! {(unsigned char)CANNA_KEY_Shift_Xfer, XK_Kanji, ShiftMask}, {(unsigned char)CANNA_KEY_Shift_Up, XK_Up, ShiftMask}, {(unsigned char)CANNA_KEY_Shift_Left, XK_Left, ShiftMask}, {(unsigned char)CANNA_KEY_Shift_Right, XK_Right, ShiftMask}, {(unsigned char)CANNA_KEY_Shift_Down, XK_Down, ShiftMask}, {(unsigned char)CANNA_KEY_Cntrl_Nfer, XK_Muhenkan, ControlMask}, ! {(unsigned char)CANNA_KEY_Cntrl_Xfer, XK_Kanji, ControlMask}, {(unsigned char)CANNA_KEY_Cntrl_Up, XK_Up, ControlMask}, {(unsigned char)CANNA_KEY_Cntrl_Left, XK_Left, ControlMask}, {(unsigned char)CANNA_KEY_Cntrl_Right, XK_Right, ControlMask}, --- 1713,1725 ---- {(unsigned char)CANNA_KEY_Help, XK_Help, 0}, {(unsigned char)CANNA_KEY_KP_Key, XK_KP_Space, 0}, /* ? */ {(unsigned char)CANNA_KEY_Shift_Nfer, XK_Muhenkan, ShiftMask}, ! {(unsigned char)CANNA_KEY_Shift_Xfer, XK_Mode_switch, ShiftMask}, {(unsigned char)CANNA_KEY_Shift_Up, XK_Up, ShiftMask}, {(unsigned char)CANNA_KEY_Shift_Left, XK_Left, ShiftMask}, {(unsigned char)CANNA_KEY_Shift_Right, XK_Right, ShiftMask}, {(unsigned char)CANNA_KEY_Shift_Down, XK_Down, ShiftMask}, {(unsigned char)CANNA_KEY_Cntrl_Nfer, XK_Muhenkan, ControlMask}, ! {(unsigned char)CANNA_KEY_Cntrl_Xfer, XK_Henkan_Mode, ControlMask}, {(unsigned char)CANNA_KEY_Cntrl_Up, XK_Up, ControlMask}, {(unsigned char)CANNA_KEY_Cntrl_Left, XK_Left, ControlMask}, {(unsigned char)CANNA_KEY_Cntrl_Right, XK_Right, ControlMask}, *************** *** 1638,1643 **** --- 1734,1745 ---- {(unsigned char)CANNA_KEY_F8, XK_F8, 0}, {(unsigned char)CANNA_KEY_F9, XK_F9, 0}, {(unsigned char)CANNA_KEY_F10, XK_F10, 0}, + {(unsigned char)CANNA_KEY_F11, XK_F11, 0}, + {(unsigned char)CANNA_KEY_F12, XK_F12, 0}, + {(unsigned char)CANNA_KEY_F13, XK_F13, 0}, + {(unsigned char)CANNA_KEY_F14, XK_F14, 0}, + {(unsigned char)CANNA_KEY_F15, XK_F15, 0}, + {(unsigned char)CANNA_KEY_F16, XK_F16, 0}, {(unsigned char)CANNA_KEY_PF1, XK_KP_F1, 0}, {(unsigned char)CANNA_KEY_PF2, XK_KP_F2, 0}, {(unsigned char)CANNA_KEY_PF3, XK_KP_F3, 0}, *************** *** 1648,1653 **** --- 1750,1758 ---- {(unsigned char)CANNA_KEY_PF8, XK_F18, 0}, {(unsigned char)CANNA_KEY_PF9, XK_F19, 0}, {(unsigned char)CANNA_KEY_PF10, XK_F20, 0}, + {(unsigned char)CANNA_KEY_HIRAGANA, XK_Hiragana_Katakana, 0}, + {(unsigned char)CANNA_KEY_KATAKANA, XK_Hiragana_Katakana, ShiftMask}, + {(unsigned char)CANNA_KEY_HANKAKUZENKAKU, XK_Zenkaku_Hankaku, 0}, }; #define NCANNAKEYMAP (sizeof(cannakeymap) / sizeof(struct _keymap))