3 Copyright (C) 1995 Free Software Foundation, Inc.
4 Copyright (C) 1995 Sun Microsystems, Inc.
6 This file is part of XEmacs.
8 XEmacs is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 2, or (at your option) any
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with XEmacs; see the file COPYING. If not, write to
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
23 /* Synched up with: Mule 2.3. Not in FSF. */
25 /* #### The comments in this file are mostly in EUC-formatted Japanese.
26 It would be ***soooo*** much nicer if someone could translate
31 Authors: Akira Kon (kon@uxd.fc.nec.co.jp)
32 Ichiro Hirakura (hirakura@uxd.fc.nec.co.jp)
34 Functions defined in this file are
39 Length of converted string if no error occurs.
40 Error string if error occurs.
42 Convert a key input to a set of strings. The
43 strings contain both well-formed string and a
44 intermediate result to show the translation
45 information to a user. converted strings are
46 stored in specific variables.
50 List of the following things:
51 - list of keys to toggle Japanese-mode
53 - list of warning messages
55 Initialize ``canna'', which is a kana-to-kanji
56 converter for GNU Emacs. The first arg
57 specifies if inserting space character between
58 BUNSETSU when candidates are displayed. The
59 second arg specifies server. The third arg
60 specifies a file which will be used as a
61 customization description. If nil is
62 specified for each arg, the default value will
67 list of warning messages
69 finalize ``canna'', which is a kana-to-kanji
70 converter for GNU Emacs. This cause to write
71 miscellaneous informations to kana-to-kanji
74 (canna-touroku-string string)
76 String to register to a dictionary.
78 The same thing returns as canna-key-proc does.
80 Register Kanji words into kana-to-kanji
81 conversion dictionary.
83 (canna-set-width width)
85 Column width of the place where the candidates
86 of kana-to-kanji conversion will be shown.
90 Set status-line width information, which is
91 used to display kanji candidates.
93 (canna-change-mode num)
95 The mode number of Canna.
97 The same thing returns as canna-key-proc does.
99 Change Japanese pre-edit mode.
101 (canna-store-yomi yomi roma)
103 ``Yomi'' to be stored.
105 ``Romaji'' which corresponds to the ``Yomi''.
107 The same thing returns as canna-key-proc does.
109 Store yomi characters as a YOMI of
110 kana-to-kanji conversion.
112 (canna-do-function num ch)
114 A function number to be called.
116 A character will be specified in order to feed
117 the character to the function if the function
118 needs a input character.
120 The same thing returns as canna-key-proc does.
122 Do specified function at current mode.
128 List of warning messages.
130 Parse customize string.
134 A string which indicate the current mode.
136 Get current mode string.
138 Functions below are used for KKCP compatible library. These
139 functions provides a base kana-to-kanji conversion system for EGG.
140 These functions may be used when users want to change the engine
141 from Wnn to Canna without changing user interface of Japanese input.
145 (canna-bunsetu-henkou)
146 (canna-henkan-kakutei)
156 #include "file-coding.h"
160 #include "canna/jrkanji.h"
161 #include "canna/RK.h"
163 #include "iroha/jrkanji.h"
164 #include "iroha/RK.h"
166 extern char *jrKanjiError;
168 #define KEYTOSTRSIZE 2048
169 static unsigned char buf[KEYTOSTRSIZE];
170 static char **warning;
172 static int canna_empty_info, canna_through_info;
173 static int canna_underline;
174 static int canna_inhibit_hankakukana;
176 static Lisp_Object Vcanna_kakutei_string;
177 static Lisp_Object Vcanna_kakutei_yomi;
178 static Lisp_Object Vcanna_kakutei_romaji;
179 static Lisp_Object Vcanna_henkan_string;
180 static int canna_henkan_length;
181 static int canna_henkan_revPos;
182 static int canna_henkan_revLen;
183 static Lisp_Object Vcanna_ichiran_string;
184 static int canna_ichiran_length;
185 static int canna_ichiran_revPos;
186 static int canna_ichiran_revLen;
187 static Lisp_Object Vcanna_mode_string;
189 static int IRCP_context;
191 static Lisp_Object storeResults (unsigned char *, int, jrKanjiStatus *);
192 static Lisp_Object kanjiYomiList (int, int);
195 static void m2c (unsigned char *, int, unsigned char *);
196 static Lisp_Object mule_make_string (unsigned char *, int);
197 static int mule_strlen (unsigned char *, int);
198 static void count_char (unsigned char *,int, int, int, int *, int *, int *);
199 #define make_string mule_make_string
202 /* Lisp functions definition */
204 DEFUN ("canna-key-proc", Fcanna_key_proc, 1, 1, 0, /*
205 Translate a key input to a set of strings. The strings contain both
206 well-formed string and intermediate result to show the translation
207 information to a user. Converted strings are stored in specific
215 CHECK_CHAR_COERCE_INT (ch);
216 len = jrKanjiString (0, XCHAR (ch), buf, KEYTOSTRSIZE, &ks);
217 return storeResults (buf, len, &ks);
221 storeResults (unsigned char *buf, int len, jrKanjiStatus *ks)
223 Lisp_Object val = Qnil;
226 { /* Error detected */
227 val = make_string ((unsigned char*) jrKanjiError, strlen (jrKanjiError));
232 Vcanna_kakutei_string = make_string (buf, len);
233 val = make_int (len);
234 /* ³ÎÄꤷ¤¿Ê¸»úÎó¤ÎÆɤߤξðÊó... */
235 Vcanna_kakutei_yomi = Vcanna_kakutei_romaji = Qnil;
236 if (ks->info & KanjiYomiInfo)
238 unsigned char *p = buf + len + 1;
239 int yomilen = strlen (p);
241 if (len + yomilen + 1 < KEYTOSTRSIZE)
245 Vcanna_kakutei_yomi = make_string (p, yomilen); /* ÆÉ¤ß */
247 yomilen2 = strlen (p);
248 if (len + yomilen + yomilen2 + 2 < KEYTOSTRSIZE)
250 Vcanna_kakutei_romaji = make_string (p, yomilen2); /* ¥í¡¼¥Þ»ú */
256 /* ¸õÊäɽ¼¨¤Îʸ»úÎó¤Ç¤¹¡£*/
257 Vcanna_henkan_string = Qnil;
260 Vcanna_henkan_string = make_string (ks->echoStr, ks->length);
262 canna_henkan_length = ks->length;
263 canna_henkan_revPos = ks->revPos;
264 canna_henkan_revLen = ks->revLen;
265 #else /* CANNA_MULE */
268 canna_henkan_length = mule_strlen (ks->echoStr,ks->length);
269 canna_henkan_revPos = mule_strlen (ks->echoStr,ks->revPos);
270 canna_henkan_revLen = mule_strlen (ks->echoStr+ks->revPos,ks->revLen);
274 count_char (ks->echoStr, ks->length, ks->revPos, ks->revLen,
275 &canna_henkan_length, &canna_henkan_revPos,
276 &canna_henkan_revLen);
278 #endif /* CANNA_MULE */
282 Vcanna_ichiran_string = Qnil;
283 if (ks->info & KanjiGLineInfo && ks->gline.length >= 0)
285 Vcanna_ichiran_string = make_string (ks->gline.line, ks->gline.length);
287 canna_ichiran_length = ks->gline.length;
288 canna_ichiran_revPos = ks->gline.revPos;
289 canna_ichiran_revLen = ks->gline.revLen;
290 #else /* CANNA_MULE */
291 count_char (ks->gline.line, ks->gline.length,
292 ks->gline.revPos, ks->gline.revLen, &canna_ichiran_length,
293 &canna_ichiran_revPos, &canna_ichiran_revLen);
294 #endif /* CANNA_MULE */
298 Vcanna_mode_string = Qnil;
299 if (ks->info & KanjiModeInfo)
301 Vcanna_mode_string = make_string (ks->mode, strlen (ks->mode));
305 canna_empty_info = (ks->info & KanjiEmptyInfo) ? 1 : 0;
306 canna_through_info = (ks->info & KanjiThroughInfo) ? 1 : 0;
312 DEFUN ("canna-set-bunsetsu-kugiri", Fcanna_set_bunsetsu, 0, 1, 0, /*
313 This function sets the clause separator.
314 If non-nil value is specified, the white space separator will be used.
315 No separator will be used otherwise.
319 int kugiri; /* ʸÀá¶èÀÚ¤ê¤ò¤¹¤ë¤«¡© */
321 kugiri = NILP (num) ? 0 : 1;
323 jrKanjiControl (0, KC_SETBUNSETSUKUGIRI, (char *) kugiri);
328 /* For whatever reason, calling Fding directly from libCanna loses */
329 static void call_Fding()
331 extern Lisp_Object Fding();
333 Fding (Qnil, Qnil, Qnil);
336 DEFUN ("canna-initialize", Fcanna_initialize, 0, 3, 0, /*
337 Initialize ``canna'', which is a kana-to-kanji converter for GNU Emacs.
338 The first arg specifies if inserting space character between BUNSETSU when
339 candidates are displayed.
340 The second arg specifies server.
341 The third arg specifies a file which will be used as a customization
343 If nil is specified for each arg, the default value will be used.
345 (num, server, rcfile))
349 unsigned char **p, **q;
351 int kugiri; /* ʸÀá¶èÀÚ¤ê¤ò¤¹¤ë¤«¡© */
363 kugiri = (kugiri == 1) ? 1 : 0;
368 jrKanjiControl (0, KC_SETSERVERNAME, (char *) 0);
372 char servername[256];
374 CHECK_STRING (server);
375 strncpy (servername, XSTRING_DATA (server), XSTRING_LENGTH (server));
376 servername[XSTRING_LENGTH (server)] = '\0';
377 jrKanjiControl (0, KC_SETSERVERNAME, servername);
382 jrKanjiControl (0, KC_SETINITFILENAME, (char *) 0);
388 CHECK_STRING (rcfile);
389 strncpy (rcname, XSTRING_DATA (rcfile), XSTRING_LENGTH (rcfile));
390 rcname[XSTRING_LENGTH (rcfile)] = '\0';
391 jrKanjiControl (0, KC_SETINITFILENAME, rcname);
394 warning = (char **) 0;
397 #endif /* nec_ews_svr4 */
398 res = jrKanjiControl (0, KC_INITIALIZE, (char *)&warning);
401 #endif /* nec_ews_svr4 */
405 for (p = q = (unsigned char **) warning ; *q ; q++)
410 val = Fcons (make_string (*q, strlen (*q)), val);
413 val = Fcons (val, Qnil);
417 val = Fcons (make_string ((unsigned char*) jrKanjiError,
418 strlen (jrKanjiError)), val);
419 /* ¥¤¥Ë¥·¥ã¥é¥¤¥º¤Ç¼ºÇÔ¤·¤¿¾ì¹ç¡£ */
420 return Fcons (Qnil, val);
424 extern void (*jrBeepFunc)();
425 Lisp_Object CANNA_mode_keys ();
427 jrBeepFunc = call_Fding;
431 wcKanjiControl (0, KC_SETAPPNAME, "nemacs");
432 #else /* CANNA_MULE */
433 wcKanjiControl (0, KC_SETAPPNAME, "mule");
434 #endif /* CANNA_MULE */
435 #endif /* KC_SETAPPNAME */
437 jrKanjiControl (0, KC_SETBUNSETSUKUGIRI, (char *) kugiri);
438 jrKanjiControl (0, KC_SETWIDTH, (char *) 78);
440 jrKanjiControl (0, KC_INHIBITHANKAKUKANA, (char *) 1);
442 /* mule ¤À¤Ã¤¿¤éȾ³Ñ¥«¥¿¥«¥Ê¤â»È¤¨¤ë */
443 if (canna_inhibit_hankakukana)
444 jrKanjiControl (0, KC_INHIBITHANKAKUKANA, (char *) 1);
446 jrKanjiControl (0, KC_YOMIINFO, (char *) 2); /* ¢¨£²: ¥í¡¼¥Þ»ú¤Þ¤ÇÊÖ¤¹ */
447 val = Fcons (Qnil, val);
448 return Fcons (CANNA_mode_keys (), val);
452 DEFUN ("canna-finalize", Fcanna_finalize, 0, 0, 0, /*
453 finalize ``canna'', which is a kana-to-kanji converter for GNU Emacs.
454 This cause to write miscellaneous informations to kana-to-kanji dictionary.
461 jrKanjiControl (0, KC_FINALIZE, (char *)&warning);
466 for (p = (unsigned char**) warning ; *p ; p++)
468 val = Fcons (make_string (*p, strlen (*p)), val);
471 val = Fcons (val, Qnil);
476 DEFUN ("canna-touroku-string", Fcanna_touroku_string, 1, 1, 0, /*
477 Register Kanji words into kana-to-kanji conversion dictionary.
481 jrKanjiStatusWithValue ksv;
486 unsigned char cbuf[4096];
490 ksv.buffer = (unsigned char *) buf;
491 ksv.bytes_buffer = KEYTOSTRSIZE;
493 ks.echoStr = XSTRING_DATA (str);
494 ks.length = XSTRING_LENGTH (str);
495 #else /* CANNA_MULE */
496 m2c (XSTRING_DATA (str), XSTRING_LENGTH (str), cbuf);
498 ks.length = strlen (cbuf);
499 #endif /* CANNA_MULE */
501 len = jrKanjiControl (0, KC_DEFINEKANJI, (char *)&ksv);
502 val = storeResults (buf, ksv.val, ksv.ks);
506 DEFUN ("canna-set-width", Fcanna_set_width, 1, 1, 0, /*
507 Set status-line width information, which is used to display
514 jrKanjiControl (0, KC_SETWIDTH, (char *) XINT (num));
518 DEFUN ("canna-change-mode", Fcanna_change_mode, 1, 1, 0, /*
519 Change Japanese pre-edit mode.
523 jrKanjiStatusWithValue ksv;
529 ksv.buffer = (unsigned char *) buf;
530 ksv.bytes_buffer = KEYTOSTRSIZE;
532 ksv.val = XINT (num);
533 jrKanjiControl (0, KC_CHANGEMODE, (char *)&ksv);
534 val = storeResults (buf, ksv.val, ksv.ks);
539 CANNA_mode_keys (void)
541 #define CANNAWORKBUFSIZE 32
542 char xxx[CANNAWORKBUFSIZE];
546 n = jrKanjiControl (0, KC_MODEKEYS, xxx);
548 for (i = n ; i > 0 ;)
551 /* !!#### something fucked here */
552 val = Fcons (make_char ((int)(0xFF & (unsigned char) xxx[i])), val);
557 DEFUN ("canna-store-yomi", Fcanna_store_yomi, 1, 2, 0, /*
558 Store yomi characters as a YOMI of kana-to-kanji conversion.
562 jrKanjiStatusWithValue ksv;
567 strncpy (buf, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi));
568 ks.length = XSTRING_LENGTH (yomi);
569 buf[ks.length] = '\0';
570 #else /* CANNA_MULE */
571 m2c (XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), buf);
572 ks.length = strlen (buf);
573 #endif /* CANNA_MULE */
584 strncpy (buf + XSTRING_LENGTH (yomi) + 1, XSTRING_DATA (roma),
585 XSTRING_LENGTH (roma));
586 buf[XSTRING_LENGTH (yomi) + 1 + XSTRING_LENGTH (roma)] = '\0';
587 ks.mode = (unsigned char *)(buf + XSTRING_LENGTH (yomi) + 1);
588 #else /* CANNA_MULE */
589 ks.mode = (unsigned char *)(buf + ks.length + 1);
590 m2c (XSTRING_DATA (roma), XSTRING_LENGTH (roma), ks.mode);
591 #endif /* CANNA_MULE */
594 ks.echoStr = (unsigned char *) buf;
595 ksv.buffer = (unsigned char *) buf; /* ÊÖÃÍÍÑ */
596 ksv.bytes_buffer = KEYTOSTRSIZE;
599 jrKanjiControl (0, KC_STOREYOMI, (char *)&ksv);
601 return storeResults (buf, ksv.val, ksv.ks);
604 DEFUN ("canna-do-function", Fcanna_do_function, 1, 2, 0, /*
605 Do specified function at current mode.
609 jrKanjiStatusWithValue ksv;
625 ksv.buffer = (unsigned char *) buf;
626 ksv.bytes_buffer = KEYTOSTRSIZE;
628 ksv.val = XINT (num);
629 jrKanjiControl (0, KC_DO, (char *) &ksv);
630 val = storeResults (buf, ksv.val, ksv.ks);
634 DEFUN ("canna-parse", Fcanna_parse, 1, 1, 0, /*
635 Parse customize string.
646 strncpy (buf, XSTRING_DATA (str), XSTRING_LENGTH (str));
647 buf[XSTRING_LENGTH (str)] = '\0';
648 #else /* CANNA_MULE */
649 m2c (XSTRING_DATA (str), XSTRING_LENGTH (str), buf);
650 #endif /* CANNA_MULE */
651 p = (unsigned char**) buf;
652 n = jrKanjiControl (0, KC_PARSE, (char *) &p);
657 val = Fcons (make_string (p[n], strlen (p[n])), val);
662 DEFUN ("canna-query-mode", Fcanna_query_mode, 0, 0, 0, /*
663 Get current mode string.
667 unsigned char buf[256];
669 jrKanjiControl (0, KC_QUERYMODE, buf);
670 return make_string (buf, strlen (buf));
674 * Functions following this line are for KKCP interface compatible
675 * library. These functions may be used by MILK system.
678 #define RKBUFSIZE 1024
680 static unsigned char yomibuf[RKBUFSIZE];
681 static short kugiri[RKBUFSIZE / 2];
684 confirmContext (void)
686 if (IRCP_context < 0)
690 if ((context = jrKanjiControl (0, KC_GETCONTEXT, (char *) 0)) == -1)
694 IRCP_context = context;
700 byteLen (int bun, int len)
702 int i = 0, offset = 0, ch;
704 if (0 <= bun && bun < RKBUFSIZE)
706 offset = kugiri[bun];
709 while (len-- > 0 && (ch = (int) yomibuf[offset + i]))
720 DEFUN ("canna-henkan-begin", Fcanna_henkan_begin, 1, 1, 0, /*
721 ¤«¤Ê´Á»úÊÑ´¹¤·¤¿·ë²Ì¤òÊÖ´Ô¤¹¤ë¡£Ê¸ÀáÀڤ꤬¤·¤Æ¤¢¤ë¡£
728 if (confirmContext () == 0)
733 strncpy (yomibuf, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi));
734 yomibuf[XSTRING_LENGTH (yomi)] = '\0';
735 nbun = RkBgnBun (IRCP_context, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi),
736 (RK_XFER << RK_XFERBITS) | RK_KFER);
737 #else /* CANNA_MULE */
738 m2c (XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), yomibuf);
739 nbun = RkBgnBun (IRCP_context, (char *) yomibuf, strlen (yomibuf),
740 (RK_XFER << RK_XFERBITS) | RK_KFER);
741 #endif /* CANNA_MULE */
743 return kanjiYomiList (IRCP_context, nbun);
747 kanjiYomiList (int context, int nbun)
749 Lisp_Object val, res = Qnil;
750 unsigned char RkBuf[RKBUFSIZE];
753 for (i = nbun ; i > 0 ; )
757 len = RkGetKanji (context, RkBuf, RKBUFSIZE);
758 val = make_string (RkBuf, len);
759 len = RkGetYomi (context, RkBuf, RKBUFSIZE);
760 res = Fcons (Fcons (val, make_string (RkBuf, len)), res);
761 if (i < RKBUFSIZE / 2)
766 for (i = 0, total = 0 ; i < nbun ; i++)
768 int temp = kugiri[i];
775 DEFUN ("canna-henkan-next", Fcanna_henkan_next, 1, 1, 0, /*
781 unsigned char *p, RkBuf[RKBUFSIZE];
782 Lisp_Object res = Qnil, endp;
784 CHECK_INT (bunsetsu);
785 if (confirmContext () == 0)
789 RkGoTo (IRCP_context, XINT (bunsetsu));
790 len = RkGetKanjiList (IRCP_context, RkBuf, RKBUFSIZE);
792 for (i = 0 ; i < len ; i++)
797 endp = res = Fcons (make_string (p, slen), Qnil);
801 endp = XCDR (endp) = Fcons (make_string (p, slen), Qnil);
808 DEFUN ("canna-bunsetu-henkou", Fcanna_bunsetu_henkou, 2, 2, 0, /*
809 ʸÀá¤ÎŤµ¤ò»ØÄꤹ¤ë¡£
815 CHECK_INT (bunsetsu);
818 nbun = XINT (bunsetsu);
819 if (confirmContext () == 0)
823 RkGoTo (IRCP_context, nbun);
824 len = byteLen (nbun, XINT (bunlen));
825 return kanjiYomiList (IRCP_context, RkResize (IRCP_context, len));
828 DEFUN ("canna-henkan-kakutei", Fcanna_henkan_kakutei, 2, 2, 0, /*
835 if (confirmContext () == 0)
840 RkGoTo (IRCP_context, nbun);
842 nkouho = XINT(kouho);
843 RkXfer (IRCP_context, nkouho);
847 DEFUN ("canna-henkan-end", Fcanna_henkan_end, 0, 0, 0, /*
852 if (confirmContext () == 0)
856 RkEndBun (IRCP_context, 1); /* ³Ø½¬¤Ï¤¤¤Ä¤Ç¤â¹Ô¤Ã¤ÆÎɤ¤¤â¤Î¤Ê¤Î¤«¡© */
860 DEFUN ("canna-henkan-quit", Fcanna_henkan_quit, 0, 0, 0, /*
865 if (confirmContext () == 0)
869 RkEndBun (IRCP_context, 0);
873 /* variables below this line is constants of Canna */
875 static int canna_mode_AlphaMode;
876 static int canna_mode_EmptyMode;
877 static int canna_mode_KigoMode;
878 static int canna_mode_YomiMode;
879 static int canna_mode_JishuMode;
880 static int canna_mode_TankouhoMode;
881 static int canna_mode_IchiranMode;
882 static int canna_mode_YesNoMode;
883 static int canna_mode_OnOffMode;
884 #ifdef CANNA_MODE_AdjustBunsetsuMode
885 static int canna_mode_AdjustBunsetsuMode;
887 #ifdef CANNA_MODE_ChikujiYomiMode
888 static int canna_mode_ChikujiYomiMode;
889 static int canna_mode_ChikujiTanMode;
892 static int canna_mode_HenkanMode;
893 #ifdef CANNA_MODE_HenkanNyuryokuMode
894 static int canna_mode_HenkanNyuryokuMode;
896 #ifdef CANNA_MODE_ZenHiraHenkanMode
897 static int canna_mode_ZenHiraHenkanMode;
898 #ifdef CANNA_MODE_HanHiraHenkanMode
899 static int canna_mode_HanHiraHenkanMode;
901 static int canna_mode_ZenKataHenkanMode;
902 static int canna_mode_HanKataHenkanMode;
903 static int canna_mode_ZenAlphaHenkanMode;
904 static int canna_mode_HanAlphaHenkanMode;
906 static int canna_mode_ZenHiraKakuteiMode;
907 #ifdef CANNA_MODE_HanHiraKakuteiMode
908 static int canna_mode_HanHiraKakuteiMode;
910 static int canna_mode_ZenKataKakuteiMode;
911 static int canna_mode_HanKataKakuteiMode;
912 static int canna_mode_ZenAlphaKakuteiMode;
913 static int canna_mode_HanAlphaKakuteiMode;
914 static int canna_mode_HexMode;
915 static int canna_mode_BushuMode;
916 static int canna_mode_ExtendMode;
917 static int canna_mode_RussianMode;
918 static int canna_mode_GreekMode;
919 static int canna_mode_LineMode;
920 static int canna_mode_ChangingServerMode;
921 static int canna_mode_HenkanMethodMode;
922 static int canna_mode_DeleteDicMode;
923 static int canna_mode_TourokuMode;
924 static int canna_mode_TourokuEmptyMode;
925 static int canna_mode_TourokuHinshiMode;
926 static int canna_mode_TourokuDicMode;
927 static int canna_mode_QuotedInsertMode;
928 static int canna_mode_BubunMuhenkanMode;
929 static int canna_mode_MountDicMode;
931 static int canna_fn_SelfInsert;
932 static int canna_fn_FunctionalInsert;
933 static int canna_fn_QuotedInsert;
934 static int canna_fn_JapaneseMode;
935 static int canna_fn_AlphaMode;
936 static int canna_fn_HenkanNyuryokuMode;
937 static int canna_fn_Forward;
938 static int canna_fn_Backward;
939 static int canna_fn_Next;
940 static int canna_fn_Prev;
941 static int canna_fn_BeginningOfLine;
942 static int canna_fn_EndOfLine;
943 static int canna_fn_DeleteNext;
944 static int canna_fn_DeletePrevious;
945 static int canna_fn_KillToEndOfLine;
946 static int canna_fn_Henkan;
947 static int canna_fn_Kakutei;
948 static int canna_fn_Extend;
949 static int canna_fn_Shrink;
950 #ifdef CANNA_FN_AdjustBunsetsu
951 static int canna_fn_AdjustBunsetsu;
953 static int canna_fn_Quit;
954 static int canna_fn_ConvertAsHex;
955 static int canna_fn_ConvertAsBushu;
956 static int canna_fn_KouhoIchiran;
957 static int canna_fn_BubunMuhenkan;
958 static int canna_fn_Zenkaku;
959 static int canna_fn_Hankaku;
960 static int canna_fn_ToUpper;
961 static int canna_fn_Capitalize;
962 static int canna_fn_ToLower;
963 static int canna_fn_Hiragana;
964 static int canna_fn_Katakana;
965 static int canna_fn_Romaji;
966 #ifdef CANNA_FN_BaseHiragana
967 static int canna_fn_BaseHiragana;
968 static int canna_fn_BaseKatakana;
969 static int canna_fn_BaseEisu;
970 static int canna_fn_BaseZenkaku;
971 static int canna_fn_BaseHankaku;
972 static int canna_fn_BaseKana;
973 static int canna_fn_BaseKakutei;
974 static int canna_fn_BaseHenkan;
975 static int canna_fn_BaseHiraKataToggle;
976 static int canna_fn_BaseZenHanToggle;
977 static int canna_fn_BaseKanaEisuToggle;
978 static int canna_fn_BaseKakuteiHenkanToggle;
979 static int canna_fn_BaseRotateForward;
980 static int canna_fn_BaseRotateBackward;
982 static int canna_fn_ExtendMode;
983 static int canna_fn_Touroku;
984 static int canna_fn_HexMode;
985 static int canna_fn_BushuMode;
986 static int canna_fn_KigouMode;
988 static int canna_fn_Mark;
990 #ifdef CANNA_FN_TemporalMode
991 static int canna_fn_TemporalMode;
994 static int canna_key_Nfer;
995 static int canna_key_Xfer;
996 static int canna_key_Up;
997 static int canna_key_Left;
998 static int canna_key_Right;
999 static int canna_key_Down;
1000 static int canna_key_Insert;
1001 static int canna_key_Rollup;
1002 static int canna_key_Rolldown;
1003 static int canna_key_Home;
1004 static int canna_key_Help;
1005 static int canna_key_KP_Key;
1006 static int canna_key_Shift_Nfer;
1007 static int canna_key_Shift_Xfer;
1008 static int canna_key_Shift_Up;
1009 static int canna_key_Shift_Left;
1010 static int canna_key_Shift_Right;
1011 static int canna_key_Shift_Down;
1012 static int canna_key_Cntrl_Nfer;
1013 static int canna_key_Cntrl_Xfer;
1014 static int canna_key_Cntrl_Up;
1015 static int canna_key_Cntrl_Left;
1016 static int canna_key_Cntrl_Right;
1017 static int canna_key_Cntrl_Down;
1019 Lisp_Object VCANNA; /* by MORIOKA Tomohiko <morioka@jaist.ac.jp>
1023 syms_of_mule_canna (void)
1025 DEFVAR_LISP ("CANNA", &VCANNA); /* hir@nec, 1992.5.21 */
1026 VCANNA = Qt; /* hir@nec, 1992.5.21 */
1028 DEFSUBR (Fcanna_key_proc);
1029 DEFSUBR (Fcanna_initialize);
1030 DEFSUBR (Fcanna_finalize);
1031 DEFSUBR (Fcanna_touroku_string);
1032 DEFSUBR (Fcanna_set_width);
1033 DEFSUBR (Fcanna_change_mode);
1034 DEFSUBR (Fcanna_store_yomi);
1035 DEFSUBR (Fcanna_do_function);
1036 DEFSUBR (Fcanna_parse);
1037 DEFSUBR (Fcanna_query_mode);
1038 DEFSUBR (Fcanna_set_bunsetsu);
1040 DEFSUBR (Fcanna_henkan_begin);
1041 DEFSUBR (Fcanna_henkan_next);
1042 DEFSUBR (Fcanna_bunsetu_henkou);
1043 DEFSUBR (Fcanna_henkan_kakutei);
1044 DEFSUBR (Fcanna_henkan_end);
1045 DEFSUBR (Fcanna_henkan_quit);
1049 vars_of_mule_canna (void)
1051 DEFVAR_LISP ("canna-kakutei-string", &Vcanna_kakutei_string /*
1054 Vcanna_kakutei_string = Qnil;
1056 DEFVAR_LISP ("canna-kakutei-yomi", &Vcanna_kakutei_yomi /*
1059 Vcanna_kakutei_yomi = Qnil;
1061 DEFVAR_LISP ("canna-kakutei-romaji", &Vcanna_kakutei_romaji /*
1064 Vcanna_kakutei_romaji = Qnil;
1066 DEFVAR_LISP ("canna-henkan-string", &Vcanna_henkan_string /*
1069 Vcanna_henkan_string = Qnil;
1071 DEFVAR_INT ("canna-henkan-length", &canna_henkan_length /*
1074 canna_henkan_length = 0;
1076 DEFVAR_INT ("canna-henkan-revpos", &canna_henkan_revPos /*
1079 canna_henkan_revPos = 0;
1081 DEFVAR_INT ("canna-henkan-revlen", &canna_henkan_revLen /*
1084 canna_henkan_revLen = 0;
1086 DEFVAR_LISP ("canna-ichiran-string", &Vcanna_ichiran_string /*
1089 Vcanna_ichiran_string = Qnil;
1091 DEFVAR_INT ("canna-ichiran-length", &canna_ichiran_length /*
1094 canna_ichiran_length = 0;
1096 DEFVAR_INT ("canna-ichiran-revpos", &canna_ichiran_revPos /*
1099 canna_ichiran_revPos = 0;
1101 DEFVAR_INT ("canna-ichiran-revlen", &canna_ichiran_revLen /*
1104 canna_ichiran_revLen = 0;
1106 DEFVAR_LISP ("canna-mode-string", &Vcanna_mode_string /*
1109 Vcanna_mode_string = Qnil;
1111 DEFVAR_BOOL ("canna-empty-info", &canna_empty_info /*
1114 canna_empty_info = 0;
1116 DEFVAR_BOOL ("canna-through-info", &canna_through_info /*
1119 canna_through_info = 0;
1121 DEFVAR_BOOL ("canna-underline", &canna_underline /*
1124 canna_underline = 0;
1126 DEFVAR_BOOL ("canna-inhibit-hankakukana", &canna_inhibit_hankakukana /*
1129 canna_inhibit_hankakukana = 0;
1131 DEFVAR_INT ("canna-mode-alpha-mode", &canna_mode_AlphaMode /*
1134 canna_mode_AlphaMode = IROHA_MODE_AlphaMode;
1136 DEFVAR_INT ("canna-mode-empty-mode", &canna_mode_EmptyMode /*
1139 canna_mode_EmptyMode = IROHA_MODE_EmptyMode;
1141 DEFVAR_INT ("canna-mode-kigo-mode", &canna_mode_KigoMode /*
1144 canna_mode_KigoMode = IROHA_MODE_KigoMode;
1146 DEFVAR_INT ("canna-mode-yomi-mode", &canna_mode_YomiMode /*
1149 canna_mode_YomiMode = IROHA_MODE_YomiMode;
1151 DEFVAR_INT ("canna-mode-jishu-mode", &canna_mode_JishuMode /*
1154 canna_mode_JishuMode = IROHA_MODE_JishuMode;
1156 DEFVAR_INT ("canna-mode-tankouho-mode", &canna_mode_TankouhoMode /*
1159 canna_mode_TankouhoMode = IROHA_MODE_TankouhoMode;
1161 DEFVAR_INT ("canna-mode-ichiran-mode", &canna_mode_IchiranMode /*
1164 canna_mode_IchiranMode = IROHA_MODE_IchiranMode;
1166 DEFVAR_INT ("canna-mode-yes-no-mode", &canna_mode_YesNoMode /*
1169 canna_mode_YesNoMode = IROHA_MODE_YesNoMode;
1171 DEFVAR_INT ("canna-mode-on-off-mode", &canna_mode_OnOffMode /*
1174 canna_mode_OnOffMode = IROHA_MODE_OnOffMode;
1176 #ifdef CANNA_MODE_AdjustBunsetsuMode
1177 DEFVAR_INT ("canna-mode-adjust-bunsetsu-mode",
1178 &canna_mode_AdjustBunsetsuMode /*
1181 canna_mode_AdjustBunsetsuMode = CANNA_MODE_AdjustBunsetsuMode;
1183 #ifdef CANNA_MODE_ChikujiYomiMode
1184 DEFVAR_INT ("canna-mode-chikuji-yomi-mode", &canna_mode_ChikujiYomiMode /*
1187 canna_mode_ChikujiYomiMode = CANNA_MODE_ChikujiYomiMode;
1189 DEFVAR_INT ("canna-mode-chikuji-bunsetsu-mode",
1190 &canna_mode_ChikujiTanMode /*
1193 canna_mode_ChikujiTanMode = CANNA_MODE_ChikujiTanMode;
1196 DEFVAR_INT ("canna-mode-henkan-mode", &canna_mode_HenkanMode /*
1199 canna_mode_HenkanMode = IROHA_MODE_HenkanMode;
1201 #ifdef CANNA_MODE_HenkanNyuryokuMode
1202 DEFVAR_INT ("canna-mode-henkan-nyuuryoku-mode",
1203 &canna_mode_HenkanNyuryokuMode /*
1206 canna_mode_HenkanNyuryokuMode = CANNA_MODE_HenkanNyuryokuMode;
1208 #ifdef CANNA_MODE_ZenHiraHenkanMode
1209 DEFVAR_INT ("canna-mode-zen-hira-henkan-mode",
1210 &canna_mode_ZenHiraHenkanMode /*
1213 canna_mode_ZenHiraHenkanMode = CANNA_MODE_ZenHiraHenkanMode;
1214 #ifdef CANNA_MODE_HanHiraHenkanMode
1215 DEFVAR_INT ("canna-mode-han-hira-henkan-mode",
1216 &canna_mode_HanHiraHenkanMode /*
1219 canna_mode_HanHiraHenkanMode = CANNA_MODE_HanHiraHenkanMode;
1221 DEFVAR_INT ("canna-mode-zen-kata-henkan-mode",
1222 &canna_mode_ZenKataHenkanMode /*
1225 canna_mode_ZenKataHenkanMode = CANNA_MODE_ZenKataHenkanMode;
1227 DEFVAR_INT ("canna-mode-han-kata-henkan-mode",
1228 &canna_mode_HanKataHenkanMode /*
1231 canna_mode_HanKataHenkanMode = CANNA_MODE_HanKataHenkanMode;
1233 DEFVAR_INT ("canna-mode-zen-alpha-henkan-mode",
1234 &canna_mode_ZenAlphaHenkanMode /*
1237 canna_mode_ZenAlphaHenkanMode = CANNA_MODE_ZenAlphaHenkanMode;
1239 DEFVAR_INT ("canna-mode-han-alpha-henkan-mode",
1240 &canna_mode_HanAlphaHenkanMode /*
1243 canna_mode_HanAlphaHenkanMode = CANNA_MODE_HanAlphaHenkanMode;
1245 DEFVAR_INT ("canna-mode-zen-hira-kakutei-mode",
1246 &canna_mode_ZenHiraKakuteiMode /*
1249 canna_mode_ZenHiraKakuteiMode = IROHA_MODE_ZenHiraKakuteiMode;
1250 #ifdef CANNA_MODE_HanHiraKakuteiMode
1251 DEFVAR_INT ("canna-mode-han-hira-kakutei-mode",
1252 &canna_mode_HanHiraKakuteiMode /*
1255 canna_mode_HanHiraKakuteiMode = CANNA_MODE_HanHiraKakuteiMode;
1257 DEFVAR_INT ("canna-mode-zen-kata-kakutei-mode",
1258 &canna_mode_ZenKataKakuteiMode /*
1261 canna_mode_ZenKataKakuteiMode = IROHA_MODE_ZenKataKakuteiMode;
1263 DEFVAR_INT ("canna-mode-han-kata-kakutei-mode",
1264 &canna_mode_HanKataKakuteiMode /*
1267 canna_mode_HanKataKakuteiMode = IROHA_MODE_HanKataKakuteiMode;
1269 DEFVAR_INT ("canna-mode-zen-alpha-kakutei-mode",
1270 &canna_mode_ZenAlphaKakuteiMode /*
1273 canna_mode_ZenAlphaKakuteiMode = IROHA_MODE_ZenAlphaKakuteiMode;
1275 DEFVAR_INT ("canna-mode-han-alpha-kakutei-mode",
1276 &canna_mode_HanAlphaKakuteiMode /*
1279 canna_mode_HanAlphaKakuteiMode = IROHA_MODE_HanAlphaKakuteiMode;
1281 DEFVAR_INT ("canna-mode-hex-mode", &canna_mode_HexMode /*
1284 canna_mode_HexMode = IROHA_MODE_HexMode;
1286 DEFVAR_INT ("canna-mode-bushu-mode", &canna_mode_BushuMode /*
1289 canna_mode_BushuMode = IROHA_MODE_BushuMode;
1291 DEFVAR_INT ("canna-mode-extend-mode", &canna_mode_ExtendMode /*
1294 canna_mode_ExtendMode = IROHA_MODE_ExtendMode;
1296 DEFVAR_INT ("canna-mode-russian-mode", &canna_mode_RussianMode /*
1299 canna_mode_RussianMode = IROHA_MODE_RussianMode;
1301 DEFVAR_INT ("canna-mode-greek-mode", &canna_mode_GreekMode /*
1304 canna_mode_GreekMode = IROHA_MODE_GreekMode;
1306 DEFVAR_INT ("canna-mode-line-mode", &canna_mode_LineMode /*
1309 canna_mode_LineMode = IROHA_MODE_LineMode;
1311 DEFVAR_INT ("canna-mode-changing-server-mode",
1312 &canna_mode_ChangingServerMode /*
1315 canna_mode_ChangingServerMode = IROHA_MODE_ChangingServerMode;
1317 DEFVAR_INT ("canna-mode-henkan-method-mode",
1318 &canna_mode_HenkanMethodMode /*
1321 canna_mode_HenkanMethodMode = IROHA_MODE_HenkanMethodMode;
1323 DEFVAR_INT ("canna-mode-delete-dic-mode", &canna_mode_DeleteDicMode /*
1326 canna_mode_DeleteDicMode = IROHA_MODE_DeleteDicMode;
1328 DEFVAR_INT ("canna-mode-touroku-mode", &canna_mode_TourokuMode /*
1331 canna_mode_TourokuMode = IROHA_MODE_TourokuMode;
1333 DEFVAR_INT ("canna-mode-touroku-empty-mode",
1334 &canna_mode_TourokuEmptyMode /*
1337 canna_mode_TourokuEmptyMode = IROHA_MODE_TourokuEmptyMode;
1339 DEFVAR_INT ("canna-mode-touroku-hinshi-mode",
1340 &canna_mode_TourokuHinshiMode /*
1343 canna_mode_TourokuHinshiMode = IROHA_MODE_TourokuHinshiMode;
1345 DEFVAR_INT ("canna-mode-touroku-dic-mode", &canna_mode_TourokuDicMode /*
1348 canna_mode_TourokuDicMode = IROHA_MODE_TourokuDicMode;
1350 DEFVAR_INT ("canna-mode-quoted-insert-mode",
1351 &canna_mode_QuotedInsertMode /*
1354 canna_mode_QuotedInsertMode = IROHA_MODE_QuotedInsertMode;
1356 DEFVAR_INT ("canna-mode-bubun-muhenkan-mode",
1357 &canna_mode_BubunMuhenkanMode /*
1360 canna_mode_BubunMuhenkanMode = IROHA_MODE_BubunMuhenkanMode;
1362 DEFVAR_INT ("canna-mode-mount-dic-mode", &canna_mode_MountDicMode /*
1365 canna_mode_MountDicMode = IROHA_MODE_MountDicMode;
1367 DEFVAR_INT ("canna-func-self-insert", &canna_fn_SelfInsert /*
1370 canna_fn_SelfInsert = IROHA_FN_SelfInsert;
1372 DEFVAR_INT ("canna-func-functional-insert", &canna_fn_FunctionalInsert /*
1375 canna_fn_FunctionalInsert = IROHA_FN_FunctionalInsert;
1377 DEFVAR_INT ("canna-func-quoted-insert", &canna_fn_QuotedInsert /*
1380 canna_fn_QuotedInsert = IROHA_FN_QuotedInsert;
1382 DEFVAR_INT ("canna-func-japanese-mode", &canna_fn_JapaneseMode /*
1385 canna_fn_JapaneseMode = IROHA_FN_JapaneseMode;
1387 DEFVAR_INT ("canna-func-alpha-mode", &canna_fn_AlphaMode /*
1390 canna_fn_AlphaMode = IROHA_FN_AlphaMode;
1392 DEFVAR_INT ("canna-func-henkan-nyuryoku-mode",
1393 &canna_fn_HenkanNyuryokuMode /*
1396 canna_fn_HenkanNyuryokuMode = IROHA_FN_HenkanNyuryokuMode;
1398 DEFVAR_INT ("canna-func-forward", &canna_fn_Forward /*
1401 canna_fn_Forward = IROHA_FN_Forward;
1403 DEFVAR_INT ("canna-func-backward", &canna_fn_Backward /*
1406 canna_fn_Backward = IROHA_FN_Backward;
1408 DEFVAR_INT ("canna-func-next", &canna_fn_Next /*
1411 canna_fn_Next = IROHA_FN_Next;
1413 DEFVAR_INT ("canna-func-previous", &canna_fn_Prev /*
1416 canna_fn_Prev = IROHA_FN_Prev;
1418 DEFVAR_INT ("canna-func-beginning-of-line", &canna_fn_BeginningOfLine /*
1421 canna_fn_BeginningOfLine = IROHA_FN_BeginningOfLine;
1423 DEFVAR_INT ("canna-func-end-of-line", &canna_fn_EndOfLine /*
1426 canna_fn_EndOfLine = IROHA_FN_EndOfLine;
1428 DEFVAR_INT ("canna-func-delete-next", &canna_fn_DeleteNext /*
1431 canna_fn_DeleteNext = IROHA_FN_DeleteNext;
1433 DEFVAR_INT ("canna-func-delete_previous", &canna_fn_DeletePrevious /*
1436 canna_fn_DeletePrevious = IROHA_FN_DeletePrevious;
1438 DEFVAR_INT ("canna-func-kill-to-end-of-line", &canna_fn_KillToEndOfLine /*
1441 canna_fn_KillToEndOfLine = IROHA_FN_KillToEndOfLine;
1443 DEFVAR_INT ("canna-func-henkan", &canna_fn_Henkan /*
1446 canna_fn_Henkan = IROHA_FN_Henkan;
1448 DEFVAR_INT ("canna-func-kakutei", &canna_fn_Kakutei /*
1451 canna_fn_Kakutei = IROHA_FN_Kakutei;
1453 DEFVAR_INT ("canna-func-extend", &canna_fn_Extend /*
1456 canna_fn_Extend = IROHA_FN_Extend;
1458 DEFVAR_INT ("canna-func-shrink", &canna_fn_Shrink /*
1461 canna_fn_Shrink = IROHA_FN_Shrink;
1463 #ifdef CANNA_FN_AdjustBunsetsu
1464 DEFVAR_INT ("canna-func-adjust-bunsetsu", &canna_fn_AdjustBunsetsu /*
1467 canna_fn_AdjustBunsetsu = CANNA_FN_AdjustBunsetsu;
1469 DEFVAR_INT ("canna-func-quit", &canna_fn_Quit /*
1472 canna_fn_Quit = IROHA_FN_Quit;
1474 DEFVAR_INT ("canna-func-convert-as-hex", &canna_fn_ConvertAsHex /*
1477 canna_fn_ConvertAsHex = IROHA_FN_ConvertAsHex;
1479 DEFVAR_INT ("canna-func-convert-as-bushu", &canna_fn_ConvertAsBushu /*
1482 canna_fn_ConvertAsBushu = IROHA_FN_ConvertAsBushu;
1484 DEFVAR_INT ("canna-func-kouho-ichiran", &canna_fn_KouhoIchiran /*
1487 canna_fn_KouhoIchiran = IROHA_FN_KouhoIchiran;
1489 DEFVAR_INT ("canna-func-bubun-muhenkan", &canna_fn_BubunMuhenkan /*
1492 canna_fn_BubunMuhenkan = IROHA_FN_BubunMuhenkan;
1494 DEFVAR_INT ("canna-func-zenkaku", &canna_fn_Zenkaku /*
1497 canna_fn_Zenkaku = IROHA_FN_Zenkaku;
1499 DEFVAR_INT ("canna-func-hankaku", &canna_fn_Hankaku /*
1502 canna_fn_Hankaku = IROHA_FN_Hankaku;
1504 DEFVAR_INT ("canna-func-to-upper", &canna_fn_ToUpper /*
1507 canna_fn_ToUpper = IROHA_FN_ToUpper;
1509 DEFVAR_INT ("canna-func-capitalize", &canna_fn_Capitalize /*
1512 canna_fn_Capitalize = IROHA_FN_Capitalize;
1514 DEFVAR_INT ("canna-func-to-lower", &canna_fn_ToLower /*
1517 canna_fn_ToLower = IROHA_FN_ToLower;
1519 DEFVAR_INT ("canna-func-hiragana", &canna_fn_Hiragana /*
1522 canna_fn_Hiragana = IROHA_FN_Hiragana;
1524 DEFVAR_INT ("canna-func-katakana", &canna_fn_Katakana /*
1527 canna_fn_Katakana = IROHA_FN_Katakana;
1529 DEFVAR_INT ("canna-func-romaji", &canna_fn_Romaji /*
1532 canna_fn_Romaji = IROHA_FN_Romaji;
1534 #ifdef CANNA_FN_BaseHiragana
1535 DEFVAR_INT ("canna-func-base-hiragana", &canna_fn_BaseHiragana /*
1538 canna_fn_BaseHiragana = CANNA_FN_BaseHiragana;
1540 DEFVAR_INT ("canna-func-base-katakana", &canna_fn_BaseKatakana /*
1543 canna_fn_BaseKatakana = CANNA_FN_BaseKatakana;
1545 DEFVAR_INT ("canna-func-base-eisu", &canna_fn_BaseEisu /*
1548 canna_fn_BaseEisu = CANNA_FN_BaseEisu;
1550 DEFVAR_INT ("canna-func-base-zenkaku", &canna_fn_BaseZenkaku /*
1553 canna_fn_BaseZenkaku = CANNA_FN_BaseZenkaku;
1555 DEFVAR_INT ("canna-func-base-hankaku", &canna_fn_BaseHankaku /*
1558 canna_fn_BaseHankaku = CANNA_FN_BaseHankaku;
1560 DEFVAR_INT ("canna-func-base-kana", &canna_fn_BaseKana /*
1563 canna_fn_BaseKana = CANNA_FN_BaseKana;
1565 DEFVAR_INT ("canna-func-base-kakutei", &canna_fn_BaseKakutei /*
1568 canna_fn_BaseKakutei = CANNA_FN_BaseKakutei;
1570 DEFVAR_INT ("canna-func-base-henkan", &canna_fn_BaseHenkan /*
1573 canna_fn_BaseHenkan = CANNA_FN_BaseHenkan;
1575 DEFVAR_INT ("canna-func-base-hiragana-katakana-toggle",
1576 &canna_fn_BaseHiraKataToggle /*
1579 canna_fn_BaseHiraKataToggle = CANNA_FN_BaseHiraKataToggle;
1581 DEFVAR_INT ("canna-func-base-zenkaku-hankaku-toggle",
1582 &canna_fn_BaseZenHanToggle /*
1585 canna_fn_BaseZenHanToggle = CANNA_FN_BaseZenHanToggle;
1587 DEFVAR_INT ("canna-func-base-kana-eisu-toggle",
1588 &canna_fn_BaseKanaEisuToggle /*
1591 canna_fn_BaseKanaEisuToggle = CANNA_FN_BaseKanaEisuToggle;
1593 DEFVAR_INT ("canna-func-base-kakutei-henkan-toggle",
1594 &canna_fn_BaseKakuteiHenkanToggle /*
1597 canna_fn_BaseKakuteiHenkanToggle = CANNA_FN_BaseKakuteiHenkanToggle;
1599 DEFVAR_INT ("canna-func-base-rotate-forward",
1600 &canna_fn_BaseRotateForward /*
1603 canna_fn_BaseRotateForward = CANNA_FN_BaseRotateForward;
1605 DEFVAR_INT ("canna-func-base-rotate-backward",
1606 &canna_fn_BaseRotateBackward /*
1609 canna_fn_BaseRotateBackward = CANNA_FN_BaseRotateBackward;
1612 DEFVAR_INT ("canna-func-extend-mode", &canna_fn_ExtendMode /*
1615 canna_fn_ExtendMode = IROHA_FN_ExtendMode;
1617 DEFVAR_INT ("canna-func-touroku", &canna_fn_Touroku /*
1620 canna_fn_Touroku = IROHA_FN_Touroku;
1622 DEFVAR_INT ("canna-func-hex-mode", &canna_fn_HexMode /*
1625 canna_fn_HexMode = IROHA_FN_HexMode;
1627 DEFVAR_INT ("canna-func-bushu-mode", &canna_fn_BushuMode /*
1630 canna_fn_BushuMode = IROHA_FN_BushuMode;
1632 DEFVAR_INT ("canna-func-kigo-mode", &canna_fn_KigouMode /*
1635 canna_fn_KigouMode = IROHA_FN_KigouMode;
1637 #ifdef CANNA_FN_Mark
1638 DEFVAR_INT ("canna-func-mark", &canna_fn_Mark /*
1641 canna_fn_Mark = CANNA_FN_Mark;
1643 #ifdef CANNA_FN_TemporalMode
1644 DEFVAR_INT ("canna-func-temporal-mode", &canna_fn_TemporalMode /*
1647 canna_fn_TemporalMode = CANNA_FN_TemporalMode;
1650 DEFVAR_INT ("canna-key-nfer", &canna_key_Nfer /*
1653 canna_key_Nfer = IROHA_KEY_Nfer;
1655 DEFVAR_INT ("canna-key-xfer", &canna_key_Xfer /*
1658 canna_key_Xfer = IROHA_KEY_Xfer;
1660 DEFVAR_INT ("canna-key-up", &canna_key_Up /*
1663 canna_key_Up = IROHA_KEY_Up;
1665 DEFVAR_INT ("canna-key-left", &canna_key_Left /*
1668 canna_key_Left = IROHA_KEY_Left;
1670 DEFVAR_INT ("canna-key-right", &canna_key_Right /*
1673 canna_key_Right = IROHA_KEY_Right;
1675 DEFVAR_INT ("canna-key-down", &canna_key_Down /*
1678 canna_key_Down = IROHA_KEY_Down;
1680 DEFVAR_INT ("canna-key-insert", &canna_key_Insert /*
1683 canna_key_Insert = IROHA_KEY_Insert;
1685 DEFVAR_INT ("canna-key-rollup", &canna_key_Rollup /*
1688 canna_key_Rollup = IROHA_KEY_Rollup;
1690 DEFVAR_INT ("canna-key-rolldown", &canna_key_Rolldown /*
1693 canna_key_Rolldown = IROHA_KEY_Rolldown;
1695 DEFVAR_INT ("canna-key-home", &canna_key_Home /*
1698 canna_key_Home = IROHA_KEY_Home;
1700 DEFVAR_INT ("canna-key-help", &canna_key_Help /*
1703 canna_key_Help = IROHA_KEY_Help;
1705 DEFVAR_INT ("canna-key-kp-key", &canna_key_KP_Key /*
1708 canna_key_KP_Key = IROHA_KEY_KP_Key;
1710 DEFVAR_INT ("canna-key-shift-nfer", &canna_key_Shift_Nfer /*
1713 canna_key_Shift_Nfer = IROHA_KEY_Shift_Nfer;
1715 DEFVAR_INT ("canna-key-shift-xfer", &canna_key_Shift_Xfer /*
1718 canna_key_Shift_Xfer = IROHA_KEY_Shift_Xfer;
1720 DEFVAR_INT ("canna-key-shift-up", &canna_key_Shift_Up /*
1723 canna_key_Shift_Up = IROHA_KEY_Shift_Up;
1725 DEFVAR_INT ("canna-key-shift-left", &canna_key_Shift_Left /*
1728 canna_key_Shift_Left = IROHA_KEY_Shift_Left;
1730 DEFVAR_INT ("canna-key-shift-right", &canna_key_Shift_Right /*
1733 canna_key_Shift_Right = IROHA_KEY_Shift_Right;
1735 DEFVAR_INT ("canna-key-shift-down", &canna_key_Shift_Down /*
1738 canna_key_Shift_Down = IROHA_KEY_Shift_Down;
1740 DEFVAR_INT ("canna-key-control-nfer", &canna_key_Cntrl_Nfer /*
1743 canna_key_Cntrl_Nfer = IROHA_KEY_Cntrl_Nfer;
1745 DEFVAR_INT ("canna-key-control-xfer", &canna_key_Cntrl_Xfer /*
1748 canna_key_Cntrl_Xfer = IROHA_KEY_Cntrl_Xfer;
1750 DEFVAR_INT ("canna-key-control-up", &canna_key_Cntrl_Up /*
1753 canna_key_Cntrl_Up = IROHA_KEY_Cntrl_Up;
1755 DEFVAR_INT ("canna-key-control-left", &canna_key_Cntrl_Left /*
1758 canna_key_Cntrl_Left = IROHA_KEY_Cntrl_Left;
1760 DEFVAR_INT ("canna-key-control-right", &canna_key_Cntrl_Right /*
1763 canna_key_Cntrl_Right = IROHA_KEY_Cntrl_Right;
1765 DEFVAR_INT ("canna-key-control-down", &canna_key_Cntrl_Down /*
1768 canna_key_Cntrl_Down = IROHA_KEY_Cntrl_Down;
1770 Fprovide(intern("CANNA"));
1774 /* To handle MULE internal code and EUC.
1775 I assume CANNA can handle only Japanese EUC. */
1777 /* EUC multibyte string to MULE internal string */
1780 c2mu (char *cp, int l, char *mp)
1782 char ch, *ep = cp+l;
1784 while ((cp < ep) && (ch = *cp))
1786 if ((unsigned char) ch == ISO_CODE_SS2)
1788 *mp++ = LEADING_BYTE_KATAKANA_JISX0201;
1791 else if ((unsigned char) ch == ISO_CODE_SS3)
1793 *mp++ = LEADING_BYTE_JAPANESE_JISX0212;
1799 *mp++ = LEADING_BYTE_JAPANESE_JISX0208;
1807 /* MULE internal string to EUC multibyte string */
1810 m2c (unsigned char *mp, int l, unsigned char *cp)
1812 unsigned char ch, *ep = mp + l;
1814 while ((mp < ep) && (ch = *mp++))
1818 case LEADING_BYTE_KATAKANA_JISX0201:
1819 *cp++ = ISO_CODE_SS2;
1822 case LEADING_BYTE_JAPANESE_JISX0212:
1823 *cp++ = ISO_CODE_SS3;
1824 case LEADING_BYTE_JAPANESE_JISX0208:
1838 /* make_string after converting EUC string to MULE internal string */
1840 mule_make_string (unsigned char *p, int l)
1842 unsigned char cbuf[4096];
1845 return (make_string (cbuf,strlen (cbuf)));
1848 /* return the MULE internal string length of EUC string */
1849 /* Modified by sb to return a character count not byte count. */
1851 mule_strlen (unsigned char *p, int l)
1853 unsigned char ch, *cp = p;
1856 while ((cp < p + l) && (ch = *cp))
1858 if ((unsigned char) ch == ISO_CODE_SS2)
1863 else if ((unsigned char) ch == ISO_CODE_SS3)
1882 /* count number of characters */
1884 count_char (unsigned char *p, int len, int pos, int rev, int *clen, int *cpos,
1887 unsigned char *q = p;
1889 *clen = *cpos = *crev = 0;
1890 if (len == 0) return;
1895 if (*q++ & 0x80) q++;
1897 while (q < p + pos + rev)
1901 if (*q++ & 0x80) q++;
1906 if (*q++ & 0x80) q++;
1909 #endif /* CANNA_MULE */