diff options
Diffstat (limited to 'nx-X11/lib/X11/imLcLkup.c')
-rw-r--r-- | nx-X11/lib/X11/imLcLkup.c | 208 |
1 files changed, 115 insertions, 93 deletions
diff --git a/nx-X11/lib/X11/imLcLkup.c b/nx-X11/lib/X11/imLcLkup.c index a23a72c54..fa65ed077 100644 --- a/nx-X11/lib/X11/imLcLkup.c +++ b/nx-X11/lib/X11/imLcLkup.c @@ -16,7 +16,7 @@ It is provided "as is" without express or implied warranty. FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER @@ -24,7 +24,7 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Kazunori Nishihara Fuji Xerox - Takashi Fujiwara FUJITSU LIMITED + Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ @@ -40,43 +40,59 @@ PERFORMANCE OF THIS SOFTWARE. #include <nx-X11/Xutil.h> #include "Xlibint.h" #include "Xlcint.h" +#include "XlcPubI.h" #include "Ximint.h" Public int -_XimLocalMbLookupString(xic, ev, buffer, bytes, keysym, status) - XIC xic; - XKeyEvent *ev; - char *buffer; - int bytes; - KeySym *keysym; - Status *status; +_XimLocalMbLookupString(XIC xic, XKeyEvent *ev, char *buffer, int bytes, + KeySym *keysym, Status *status) { Xic ic = (Xic)xic; int ret; + DefTree *b = ic->private.local.base.tree; + char *mb = ic->private.local.base.mb; if(ev->type != KeyPress) { if(status) *status = XLookupNone; return(0); } - if(ev->keycode == 0 && ic->private.local.composed != NULL) { /* Composed Event */ - ret = strlen(ic->private.local.composed->mb); - if(ret > bytes) { - if(status) *status = XBufferOverflow; - return(ret); - } - memcpy(buffer, ic->private.local.composed->mb, ret); - if(keysym) *keysym = ic->private.local.composed->ks; - if (ret > 0) { - if (keysym && *keysym != NoSymbol) { + if(ev->keycode == 0 && + ( (ic->private.local.composed != 0) + ||(ic->private.local.brl_committed != 0))) { + if (ic->private.local.brl_committed != 0) { /* Braille Event */ + unsigned char pattern = ic->private.local.brl_committed; + char mb[XLC_PUBLIC(ic->core.im->core.lcd, mb_cur_max)]; + ret = _Xlcwctomb(ic->core.im->core.lcd, mb, BRL_UC_ROW | pattern); + if(ret > bytes) { + if(status) *status = XBufferOverflow; + return(ret); + } + if(keysym) { + *keysym = XK_braille_blank | pattern; if(status) *status = XLookupBoth; - } else { + } else if(status) *status = XLookupChars; + memcpy(buffer, mb, ret); + } else { /* Composed Event */ + ret = strlen(&mb[b[ic->private.local.composed].mb]); + if(ret > bytes) { + if(status) *status = XBufferOverflow; + return(ret); } - } else { - if(keysym && *keysym != NoSymbol) { - if(status) *status = XLookupKeySym; + memcpy(buffer, &mb[b[ic->private.local.composed].mb], ret); + if(keysym) *keysym = b[ic->private.local.composed].ks; + if (ret > 0) { + if (keysym && *keysym != NoSymbol) { + if(status) *status = XLookupBoth; + } else { + if(status) *status = XLookupChars; + } } else { - if(status) *status = XLookupNone; + if(keysym && *keysym != NoSymbol) { + if(status) *status = XLookupKeySym; + } else { + if(status) *status = XLookupNone; + } } } return (ret); @@ -102,41 +118,53 @@ _XimLocalMbLookupString(xic, ev, buffer, bytes, keysym, status) } Public int -_XimLocalWcLookupString(xic, ev, buffer, wlen, keysym, status) - XIC xic; - XKeyEvent *ev; - wchar_t *buffer; - int wlen; - KeySym *keysym; - Status *status; +_XimLocalWcLookupString(XIC xic, XKeyEvent *ev, wchar_t *buffer, int wlen, + KeySym *keysym, Status *status) { Xic ic = (Xic)xic; int ret; + DefTree *b = ic->private.local.base.tree; + wchar_t *wc = ic->private.local.base.wc; if(ev->type != KeyPress) { if(status) *status = XLookupNone; return(0); } - if(ev->keycode == 0) { /* Composed Event */ - ret = _Xwcslen(ic->private.local.composed->wc); - if(ret > wlen) { - if(status) *status = XBufferOverflow; - return (ret); - } - memcpy((char *)buffer, (char *)ic->private.local.composed->wc, - ret * sizeof(wchar_t)); - if(keysym) *keysym = ic->private.local.composed->ks; - if (ret > 0) { - if (keysym && *keysym != NoSymbol) { + if(ev->keycode == 0) { + if (ic->private.local.brl_committed != 0) { /* Braille Event */ + unsigned char pattern = ic->private.local.brl_committed; + ret = 1; + if (ret > wlen) { + if(status) *status = XBufferOverflow; + return (ret); + } + *buffer = BRL_UC_ROW | pattern; + if(keysym) { + *keysym = XK_braille_blank | pattern; if(status) *status = XLookupBoth; - } else { + } else if(status) *status = XLookupChars; + } else { /* Composed Event */ + ret = _Xwcslen(&wc[b[ic->private.local.composed].wc]); + if(ret > wlen) { + if(status) *status = XBufferOverflow; + return (ret); } - } else { - if(keysym && *keysym != NoSymbol) { - if(status) *status = XLookupKeySym; + memcpy((char *)buffer, (char *)&wc[b[ic->private.local.composed].wc], + ret * sizeof(wchar_t)); + if(keysym) *keysym = b[ic->private.local.composed].ks; + if (ret > 0) { + if (keysym && *keysym != NoSymbol) { + if(status) *status = XLookupBoth; + } else { + if(status) *status = XLookupChars; + } } else { - if(status) *status = XLookupNone; + if(keysym && *keysym != NoSymbol) { + if(status) *status = XLookupKeySym; + } else { + if(status) *status = XLookupNone; + } } } return (ret); @@ -162,40 +190,49 @@ _XimLocalWcLookupString(xic, ev, buffer, wlen, keysym, status) } Public int -_XimLocalUtf8LookupString(xic, ev, buffer, bytes, keysym, status) - XIC xic; - XKeyEvent *ev; - char *buffer; - int bytes; - KeySym *keysym; - Status *status; +_XimLocalUtf8LookupString(XIC xic, XKeyEvent *ev, char *buffer, int bytes, + KeySym *keysym, Status *status) { Xic ic = (Xic)xic; int ret; + DefTree *b = ic->private.local.base.tree; + char *utf8 = ic->private.local.base.utf8; if(ev->type != KeyPress) { if(status) *status = XLookupNone; return(0); } - if(ev->keycode == 0) { /* Composed Event */ - ret = strlen(ic->private.local.composed->utf8); - if(ret > bytes) { - if(status) *status = XBufferOverflow; - return (ret); - } - memcpy(buffer, ic->private.local.composed->utf8, ret); - if(keysym) *keysym = ic->private.local.composed->ks; - if (ret > 0) { - if (keysym && *keysym != NoSymbol) { - if(status) *status = XLookupBoth; - } else { - if(status) *status = XLookupChars; + if(ev->keycode == 0) { + if (ic->private.local.brl_committed != 0) { /* Braille Event */ + unsigned char pattern = ic->private.local.brl_committed; + ret = 3; + if (ret > bytes) { + if(status) *status = XBufferOverflow; + return (ret); } - } else { - if(keysym && *keysym != NoSymbol) { - if(status) *status = XLookupKeySym; + buffer[0] = 0xe0 | ((BRL_UC_ROW >> 12) & 0x0f); + buffer[1] = 0x80 | ((BRL_UC_ROW >> 8) & 0x30) | (pattern >> 6); + buffer[2] = 0x80 | (pattern & 0x3f); + } else { /* Composed Event */ + ret = strlen(&utf8[b[ic->private.local.composed].utf8]); + if(ret > bytes) { + if(status) *status = XBufferOverflow; + return (ret); + } + memcpy(buffer, &utf8[b[ic->private.local.composed].utf8], ret); + if(keysym) *keysym = b[ic->private.local.composed].ks; + if (ret > 0) { + if (keysym && *keysym != NoSymbol) { + if(status) *status = XLookupBoth; + } else { + if(status) *status = XLookupChars; + } } else { - if(status) *status = XLookupNone; + if(keysym && *keysym != NoSymbol) { + if(status) *status = XLookupKeySym; + } else { + if(status) *status = XLookupNone; + } } } return (ret); @@ -287,26 +324,16 @@ _XimLcctsconvert( } Public int -_XimLcctstombs(xim, from, from_len, to, to_len, state) - XIM xim; - char *from; - int from_len; - char *to; - int to_len; - Status *state; +_XimLcctstombs(XIM xim, char *from, int from_len, + char *to, int to_len, Status *state) { return _XimLcctsconvert(((Xim)xim)->private.local.ctom_conv, from, from_len, to, to_len, state); } Public int -_XimLcctstowcs(xim, from, from_len, to, to_len, state) - XIM xim; - char *from; - int from_len; - wchar_t *to; - int to_len; - Status *state; +_XimLcctstowcs(XIM xim, char *from, int from_len, + wchar_t *to, int to_len, Status *state) { Xim im = (Xim)xim; XlcConv conv = im->private.local.ctow_conv; @@ -332,7 +359,7 @@ _XimLcctstowcs(xim, from, from_len, to, to_len, state) /* Reset the converter. The CompoundText at 'from' starts in initial state. */ _XlcResetConverter(conv); - + from_left = from_len; to_left = BUFSIZ; from_cnvlen = 0; @@ -368,13 +395,8 @@ _XimLcctstowcs(xim, from, from_len, to, to_len, state) } Public int -_XimLcctstoutf8(xim, from, from_len, to, to_len, state) - XIM xim; - char *from; - int from_len; - char *to; - int to_len; - Status *state; +_XimLcctstoutf8(XIM xim, char *from, int from_len, + char *to, int to_len, Status *state) { return _XimLcctsconvert(((Xim)xim)->private.local.ctoutf8_conv, from, from_len, to, to_len, state); |