X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fmule-canna.c;h=c2eb8d301c04d51c7070b4d29fbd8d8c1e2fa2a9;hb=43832d21823b1480b4d0d5ddd10ed70cf37ea91c;hp=5b692ff208aeef049386194c6b29cd3569d9755d;hpb=762383636a99307282c2d93d26c35c046ec24da1;p=chise%2Fxemacs-chise.git.1 diff --git a/src/mule-canna.c b/src/mule-canna.c index 5b692ff..c2eb8d3 100644 --- a/src/mule-canna.c +++ b/src/mule-canna.c @@ -22,9 +22,11 @@ Boston, MA 02111-1307, USA. */ /* Synched up with: Mule 2.3. Not in FSF. */ -/* #### The comments in this file are mostly in EUC-formatted Japanese. - It would be ***soooo*** much nicer if someone could translate - them ... */ +/* Japanese comments were translated 2000-12-06 by Stephen Turnbull + . I haven't verified that the Japanese comments + were correct. YMMV, NO WARRANTY, not even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. (^^;;; as the + Japanese say. */ /* @@ -165,8 +167,9 @@ Boston, MA 02111-1307, USA. */ #endif /* !CANNA2 */ extern char *jrKanjiError; +/* #### is this global really necessary? */ #define KEYTOSTRSIZE 2048 -static unsigned char buf[KEYTOSTRSIZE]; +static unsigned char key_buffer[KEYTOSTRSIZE]; static char **warning; static int canna_empty_info, canna_through_info; @@ -177,13 +180,13 @@ static Lisp_Object Vcanna_kakutei_string; static Lisp_Object Vcanna_kakutei_yomi; static Lisp_Object Vcanna_kakutei_romaji; static Lisp_Object Vcanna_henkan_string; -static int canna_henkan_length; -static int canna_henkan_revPos; -static int canna_henkan_revLen; +static Fixnum canna_henkan_length; +static Fixnum canna_henkan_revPos; +static Fixnum canna_henkan_revLen; static Lisp_Object Vcanna_ichiran_string; -static int canna_ichiran_length; -static int canna_ichiran_revPos; -static int canna_ichiran_revLen; +static Fixnum canna_ichiran_length; +static Fixnum canna_ichiran_revPos; +static Fixnum canna_ichiran_revLen; static Lisp_Object Vcanna_mode_string; static int IRCP_context; @@ -196,7 +199,7 @@ static Lisp_Object CANNA_mode_keys (void); static void m2c (unsigned char *, int, unsigned char *); static Lisp_Object mule_make_string (unsigned char *, int); static int mule_strlen (unsigned char *, int); -static void count_char (unsigned char *,int, int, int, int *, int *, int *); +static void count_char (unsigned char *,int, int, int, Fixnum *, Fixnum *, Fixnum *); #define make_string mule_make_string #endif @@ -214,8 +217,8 @@ variables. int len; CHECK_CHAR_COERCE_INT (ch); - len = jrKanjiString (0, XCHAR (ch), buf, KEYTOSTRSIZE, &ks); - return storeResults (buf, len, &ks); + len = jrKanjiString (0, XCHAR (ch), key_buffer, KEYTOSTRSIZE, &ks); + return storeResults (key_buffer, len, &ks); } static Lisp_Object @@ -229,10 +232,11 @@ storeResults (unsigned char *buf, int len, jrKanjiStatus *ks) } else { - /* ³ÎÄꤷ¤¿Ê¸»úÎó */ + /* ³ÎÄꤷ¤¿Ê¸»úÎó (the confirmed string) */ Vcanna_kakutei_string = make_string (buf, len); val = make_int (len); - /* ³ÎÄꤷ¤¿Ê¸»úÎó¤ÎÆɤߤξðÊó... */ + /* ³ÎÄꤷ¤¿Ê¸»úÎó¤ÎÆɤߤξðÊó... + (info about the reading of the confirmed string) */ Vcanna_kakutei_yomi = Vcanna_kakutei_romaji = Qnil; if (ks->info & KanjiYomiInfo) { @@ -243,18 +247,21 @@ storeResults (unsigned char *buf, int len, jrKanjiStatus *ks) { int yomilen2; - Vcanna_kakutei_yomi = make_string (p, yomilen); /* ÆÉ¤ß */ + Vcanna_kakutei_yomi = make_string (p, yomilen); /* ÆÉ¤ß + (reading) */ p += yomilen + 1; yomilen2 = strlen (p); if (len + yomilen + yomilen2 + 2 < KEYTOSTRSIZE) { - Vcanna_kakutei_romaji = make_string (p, yomilen2); /* ¥í¡¼¥Þ»ú */ + Vcanna_kakutei_romaji = make_string (p, yomilen2); + /* ¥í¡¼¥Þ»ú (romanization) */ } } } - /* ¸õÊäɽ¼¨¤Îʸ»úÎó¤Ç¤¹¡£*/ + /* ¸õÊäɽ¼¨¤Îʸ»úÎó¤Ç¤¹¡£ + (string for displaying candidate translations) */ Vcanna_henkan_string = Qnil; if (ks->length >= 0) { @@ -268,7 +275,8 @@ storeResults (unsigned char *buf, int len, jrKanjiStatus *ks) { canna_henkan_length = mule_strlen (ks->echoStr,ks->length); canna_henkan_revPos = mule_strlen (ks->echoStr,ks->revPos); - canna_henkan_revLen = mule_strlen (ks->echoStr+ks->revPos,ks->revLen); + canna_henkan_revLen = mule_strlen (ks->echoStr+ks->revPos, + ks->revLen); } else { @@ -279,30 +287,32 @@ storeResults (unsigned char *buf, int len, jrKanjiStatus *ks) #endif /* CANNA_MULE */ } - /* °ìÍ÷¤Î¾ðÊó */ + /* °ìÍ÷¤Î¾ðÊó (information about the echo area menu) */ Vcanna_ichiran_string = Qnil; if (ks->info & KanjiGLineInfo && ks->gline.length >= 0) { - Vcanna_ichiran_string = make_string (ks->gline.line, ks->gline.length); + Vcanna_ichiran_string = make_string (ks->gline.line, + ks->gline.length); #ifndef CANNA_MULE canna_ichiran_length = ks->gline.length; canna_ichiran_revPos = ks->gline.revPos; canna_ichiran_revLen = ks->gline.revLen; #else /* CANNA_MULE */ count_char (ks->gline.line, ks->gline.length, - ks->gline.revPos, ks->gline.revLen, &canna_ichiran_length, + ks->gline.revPos, ks->gline.revLen, + &canna_ichiran_length, &canna_ichiran_revPos, &canna_ichiran_revLen); #endif /* CANNA_MULE */ } - /* ¥â¡¼¥É¤Î¾ðÊó */ + /* ¥â¡¼¥É¤Î¾ðÊó (mode information) */ Vcanna_mode_string = Qnil; if (ks->info & KanjiModeInfo) { Vcanna_mode_string = make_string (ks->mode, strlen (ks->mode)); } - /* ¤½¤Î¾¤Î¾ðÊó */ + /* ¤½¤Î¾¤Î¾ðÊó (other information) */ canna_empty_info = (ks->info & KanjiEmptyInfo) ? 1 : 0; canna_through_info = (ks->info & KanjiThroughInfo) ? 1 : 0; } @@ -317,7 +327,7 @@ No separator will be used otherwise. */ (num)) { - int kugiri; /* ʸÀá¶èÀÚ¤ê¤ò¤¹¤ë¤«¡© */ + int kugiri; /* ʸÀá¶èÀÚ¤ê¤ò¤¹¤ë¤«¡© (display clause separator?) */ kugiri = NILP (num) ? 0 : 1; @@ -348,7 +358,7 @@ If nil is specified for each arg, the default value will be used. int res; unsigned char **p, **q; - int kugiri; /* ʸÀá¶èÀÚ¤ê¤ò¤¹¤ë¤«¡© */ + int kugiri; /* ʸÀá¶èÀÚ¤ê¤ò¤¹¤ë¤«¡© (display clause separator?) */ IRCP_context = -1; @@ -416,7 +426,7 @@ If nil is specified for each arg, the default value will be used. { val = Fcons (make_string ((unsigned char*) jrKanjiError, strlen (jrKanjiError)), val); - /* ¥¤¥Ë¥·¥ã¥é¥¤¥º¤Ç¼ºÇÔ¤·¤¿¾ì¹ç¡£ */ + /* ¥¤¥Ë¥·¥ã¥é¥¤¥º¤Ç¼ºÇÔ¤·¤¿¾ì¹ç¡£ (on initialization failure) */ return Fcons (Qnil, val); } else @@ -438,11 +448,14 @@ If nil is specified for each arg, the default value will be used. #ifndef CANNA_MULE jrKanjiControl (0, KC_INHIBITHANKAKUKANA, (char *) 1); #else - /* mule ¤À¤Ã¤¿¤éȾ³Ñ¥«¥¿¥«¥Ê¤â»È¤¨¤ë */ + /* mule ¤À¤Ã¤¿¤éȾ³Ñ¥«¥¿¥«¥Ê¤â»È¤¨¤ë + (Mule can use half-width katakana) */ if (canna_inhibit_hankakukana) jrKanjiControl (0, KC_INHIBITHANKAKUKANA, (char *) 1); #endif - jrKanjiControl (0, KC_YOMIINFO, (char *) 2); /* ¢¨£²: ¥í¡¼¥Þ»ú¤Þ¤ÇÊÖ¤¹ */ + jrKanjiControl (0, KC_YOMIINFO, (char *) 2); /* ¢¨£²: ¥í¡¼¥Þ»ú¤Þ¤ÇÊÖ¤¹ + (*2: return to + romanized form) */ val = Fcons (Qnil, val); return Fcons (CANNA_mode_keys (), val); } @@ -486,7 +499,7 @@ Register Kanji words into kana-to-kanji conversion dictionary. #endif CHECK_STRING (str); - ksv.buffer = (unsigned char *) buf; + ksv.buffer = (unsigned char *) key_buffer; ksv.bytes_buffer = KEYTOSTRSIZE; #ifndef CANNA_MULE ks.echoStr = XSTRING_DATA (str); @@ -498,7 +511,7 @@ Register Kanji words into kana-to-kanji conversion dictionary. #endif /* CANNA_MULE */ ksv.ks = &ks; len = jrKanjiControl (0, KC_DEFINEKANJI, (char *)&ksv); - val = storeResults (buf, ksv.val, ksv.ks); + val = storeResults (key_buffer, ksv.val, ksv.ks); return val; } @@ -525,12 +538,12 @@ Change Japanese pre-edit mode. CHECK_INT (num); - ksv.buffer = (unsigned char *) buf; + ksv.buffer = (unsigned char *) key_buffer; ksv.bytes_buffer = KEYTOSTRSIZE; ksv.ks = &ks; ksv.val = XINT (num); jrKanjiControl (0, KC_CHANGEMODE, (char *)&ksv); - val = storeResults (buf, ksv.val, ksv.ks); + val = storeResults (key_buffer, ksv.val, ksv.ks); return val; } @@ -563,12 +576,12 @@ Store yomi characters as a YOMI of kana-to-kanji conversion. CHECK_STRING (yomi); #ifndef CANNA_MULE - strncpy (buf, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi)); + strncpy (key_buffer, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi)); ks.length = XSTRING_LENGTH (yomi); - buf[ks.length] = '\0'; + key_buffer[ks.length] = '\0'; #else /* CANNA_MULE */ - m2c (XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), buf); - ks.length = strlen (buf); + m2c (XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), key_buffer); + ks.length = strlen (key_buffer); #endif /* CANNA_MULE */ if (NILP (roma)) @@ -580,24 +593,24 @@ Store yomi characters as a YOMI of kana-to-kanji conversion. CHECK_STRING (roma); #ifndef CANNA_MULE - strncpy (buf + XSTRING_LENGTH (yomi) + 1, XSTRING_DATA (roma), + strncpy (key_buffer + XSTRING_LENGTH (yomi) + 1, XSTRING_DATA (roma), XSTRING_LENGTH (roma)); - buf[XSTRING_LENGTH (yomi) + 1 + XSTRING_LENGTH (roma)] = '\0'; - ks.mode = (unsigned char *)(buf + XSTRING_LENGTH (yomi) + 1); + key_buffer[XSTRING_LENGTH (yomi) + 1 + XSTRING_LENGTH (roma)] = '\0'; + ks.mode = (unsigned char *)(key_buffer + XSTRING_LENGTH (yomi) + 1); #else /* CANNA_MULE */ - ks.mode = (unsigned char *)(buf + ks.length + 1); + ks.mode = (unsigned char *)(key_buffer + ks.length + 1); m2c (XSTRING_DATA (roma), XSTRING_LENGTH (roma), ks.mode); #endif /* CANNA_MULE */ } - ks.echoStr = (unsigned char *) buf; - ksv.buffer = (unsigned char *) buf; /* ÊÖÃÍÍÑ */ + ks.echoStr = (unsigned char *) key_buffer; + ksv.buffer = (unsigned char *) key_buffer; /* ÊÖÃÍÍÑ (return value) */ ksv.bytes_buffer = KEYTOSTRSIZE; ksv.ks = &ks; jrKanjiControl (0, KC_STOREYOMI, (char *)&ksv); - return storeResults (buf, ksv.val, ksv.ks); + return storeResults (key_buffer, ksv.val, ksv.ks); } DEFUN ("canna-do-function", Fcanna_do_function, 1, 2, 0, /* @@ -613,20 +626,20 @@ Do specified function at current mode. if (NILP (ch)) { - *buf = '@'; + *key_buffer = '@'; } else { CHECK_CHAR (ch); - *buf = XCHAR (ch); + *key_buffer = XCHAR (ch); } - ksv.buffer = (unsigned char *) buf; + ksv.buffer = (unsigned char *) key_buffer; ksv.bytes_buffer = KEYTOSTRSIZE; ksv.ks = &ks; ksv.val = XINT (num); jrKanjiControl (0, KC_DO, (char *) &ksv); - val = storeResults (buf, ksv.val, ksv.ks); + val = storeResults (key_buffer, ksv.val, ksv.ks); return val; } @@ -642,12 +655,12 @@ Parse customize string. CHECK_STRING (str); #ifndef CANNA_MULE - strncpy (buf, XSTRING_DATA (str), XSTRING_LENGTH (str)); - buf[XSTRING_LENGTH (str)] = '\0'; + strncpy (key_buffer, XSTRING_DATA (str), XSTRING_LENGTH (str)); + key_buffer[XSTRING_LENGTH (str)] = '\0'; #else /* CANNA_MULE */ - m2c (XSTRING_DATA (str), XSTRING_LENGTH (str), buf); + m2c (XSTRING_DATA (str), XSTRING_LENGTH (str), key_buffer); #endif /* CANNA_MULE */ - p = (unsigned char**) buf; + p = (unsigned char**) key_buffer; n = jrKanjiControl (0, KC_PARSE, (char *) &p); val = Qnil; while (n > 0) @@ -853,7 +866,9 @@ End conversion. { return Qnil; } - RkEndBun (IRCP_context, 1); /* ³Ø½¬¤Ï¤¤¤Ä¤Ç¤â¹Ô¤Ã¤ÆÎɤ¤¤â¤Î¤Ê¤Î¤«¡© */ + RkEndBun (IRCP_context, 1); /* ³Ø½¬¤Ï¤¤¤Ä¤Ç¤â¹Ô¤Ã¤ÆÎɤ¤¤â¤Î¤Ê¤Î¤«¡© + (is it OK to invoke learning function + at arbitrary times?) */ return Qt; } @@ -872,149 +887,149 @@ Quit conversion. /* variables below this line is constants of Canna */ -static int canna_mode_AlphaMode; -static int canna_mode_EmptyMode; -static int canna_mode_KigoMode; -static int canna_mode_YomiMode; -static int canna_mode_JishuMode; -static int canna_mode_TankouhoMode; -static int canna_mode_IchiranMode; -static int canna_mode_YesNoMode; -static int canna_mode_OnOffMode; +static Fixnum canna_mode_AlphaMode; +static Fixnum canna_mode_EmptyMode; +static Fixnum canna_mode_KigoMode; +static Fixnum canna_mode_YomiMode; +static Fixnum canna_mode_JishuMode; +static Fixnum canna_mode_TankouhoMode; +static Fixnum canna_mode_IchiranMode; +static Fixnum canna_mode_YesNoMode; +static Fixnum canna_mode_OnOffMode; #ifdef CANNA_MODE_AdjustBunsetsuMode -static int canna_mode_AdjustBunsetsuMode; +static Fixnum canna_mode_AdjustBunsetsuMode; #endif #ifdef CANNA_MODE_ChikujiYomiMode -static int canna_mode_ChikujiYomiMode; -static int canna_mode_ChikujiTanMode; +static Fixnum canna_mode_ChikujiYomiMode; +static Fixnum canna_mode_ChikujiTanMode; #endif -static int canna_mode_HenkanMode; +static Fixnum canna_mode_HenkanMode; #ifdef CANNA_MODE_HenkanNyuryokuMode -static int canna_mode_HenkanNyuryokuMode; +static Fixnum canna_mode_HenkanNyuryokuMode; #endif #ifdef CANNA_MODE_ZenHiraHenkanMode -static int canna_mode_ZenHiraHenkanMode; +static Fixnum canna_mode_ZenHiraHenkanMode; #ifdef CANNA_MODE_HanHiraHenkanMode -static int canna_mode_HanHiraHenkanMode; +static Fixnum canna_mode_HanHiraHenkanMode; #endif -static int canna_mode_ZenKataHenkanMode; -static int canna_mode_HanKataHenkanMode; -static int canna_mode_ZenAlphaHenkanMode; -static int canna_mode_HanAlphaHenkanMode; +static Fixnum canna_mode_ZenKataHenkanMode; +static Fixnum canna_mode_HanKataHenkanMode; +static Fixnum canna_mode_ZenAlphaHenkanMode; +static Fixnum canna_mode_HanAlphaHenkanMode; #endif -static int canna_mode_ZenHiraKakuteiMode; +static Fixnum canna_mode_ZenHiraKakuteiMode; #ifdef CANNA_MODE_HanHiraKakuteiMode -static int canna_mode_HanHiraKakuteiMode; +static Fixnum canna_mode_HanHiraKakuteiMode; #endif -static int canna_mode_ZenKataKakuteiMode; -static int canna_mode_HanKataKakuteiMode; -static int canna_mode_ZenAlphaKakuteiMode; -static int canna_mode_HanAlphaKakuteiMode; -static int canna_mode_HexMode; -static int canna_mode_BushuMode; -static int canna_mode_ExtendMode; -static int canna_mode_RussianMode; -static int canna_mode_GreekMode; -static int canna_mode_LineMode; -static int canna_mode_ChangingServerMode; -static int canna_mode_HenkanMethodMode; -static int canna_mode_DeleteDicMode; -static int canna_mode_TourokuMode; -static int canna_mode_TourokuEmptyMode; -static int canna_mode_TourokuHinshiMode; -static int canna_mode_TourokuDicMode; -static int canna_mode_QuotedInsertMode; -static int canna_mode_BubunMuhenkanMode; -static int canna_mode_MountDicMode; - -static int canna_fn_SelfInsert; -static int canna_fn_FunctionalInsert; -static int canna_fn_QuotedInsert; -static int canna_fn_JapaneseMode; -static int canna_fn_AlphaMode; -static int canna_fn_HenkanNyuryokuMode; -static int canna_fn_Forward; -static int canna_fn_Backward; -static int canna_fn_Next; -static int canna_fn_Prev; -static int canna_fn_BeginningOfLine; -static int canna_fn_EndOfLine; -static int canna_fn_DeleteNext; -static int canna_fn_DeletePrevious; -static int canna_fn_KillToEndOfLine; -static int canna_fn_Henkan; -static int canna_fn_Kakutei; -static int canna_fn_Extend; -static int canna_fn_Shrink; +static Fixnum canna_mode_ZenKataKakuteiMode; +static Fixnum canna_mode_HanKataKakuteiMode; +static Fixnum canna_mode_ZenAlphaKakuteiMode; +static Fixnum canna_mode_HanAlphaKakuteiMode; +static Fixnum canna_mode_HexMode; +static Fixnum canna_mode_BushuMode; +static Fixnum canna_mode_ExtendMode; +static Fixnum canna_mode_RussianMode; +static Fixnum canna_mode_GreekMode; +static Fixnum canna_mode_LineMode; +static Fixnum canna_mode_ChangingServerMode; +static Fixnum canna_mode_HenkanMethodMode; +static Fixnum canna_mode_DeleteDicMode; +static Fixnum canna_mode_TourokuMode; +static Fixnum canna_mode_TourokuEmptyMode; +static Fixnum canna_mode_TourokuHinshiMode; +static Fixnum canna_mode_TourokuDicMode; +static Fixnum canna_mode_QuotedInsertMode; +static Fixnum canna_mode_BubunMuhenkanMode; +static Fixnum canna_mode_MountDicMode; + +static Fixnum canna_fn_SelfInsert; +static Fixnum canna_fn_FunctionalInsert; +static Fixnum canna_fn_QuotedInsert; +static Fixnum canna_fn_JapaneseMode; +static Fixnum canna_fn_AlphaMode; +static Fixnum canna_fn_HenkanNyuryokuMode; +static Fixnum canna_fn_Forward; +static Fixnum canna_fn_Backward; +static Fixnum canna_fn_Next; +static Fixnum canna_fn_Prev; +static Fixnum canna_fn_BeginningOfLine; +static Fixnum canna_fn_EndOfLine; +static Fixnum canna_fn_DeleteNext; +static Fixnum canna_fn_DeletePrevious; +static Fixnum canna_fn_KillToEndOfLine; +static Fixnum canna_fn_Henkan; +static Fixnum canna_fn_Kakutei; +static Fixnum canna_fn_Extend; +static Fixnum canna_fn_Shrink; #ifdef CANNA_FN_AdjustBunsetsu -static int canna_fn_AdjustBunsetsu; +static Fixnum canna_fn_AdjustBunsetsu; #endif -static int canna_fn_Quit; -static int canna_fn_ConvertAsHex; -static int canna_fn_ConvertAsBushu; -static int canna_fn_KouhoIchiran; -static int canna_fn_BubunMuhenkan; -static int canna_fn_Zenkaku; -static int canna_fn_Hankaku; -static int canna_fn_ToUpper; -static int canna_fn_Capitalize; -static int canna_fn_ToLower; -static int canna_fn_Hiragana; -static int canna_fn_Katakana; -static int canna_fn_Romaji; +static Fixnum canna_fn_Quit; +static Fixnum canna_fn_ConvertAsHex; +static Fixnum canna_fn_ConvertAsBushu; +static Fixnum canna_fn_KouhoIchiran; +static Fixnum canna_fn_BubunMuhenkan; +static Fixnum canna_fn_Zenkaku; +static Fixnum canna_fn_Hankaku; +static Fixnum canna_fn_ToUpper; +static Fixnum canna_fn_Capitalize; +static Fixnum canna_fn_ToLower; +static Fixnum canna_fn_Hiragana; +static Fixnum canna_fn_Katakana; +static Fixnum canna_fn_Romaji; #ifdef CANNA_FN_BaseHiragana -static int canna_fn_BaseHiragana; -static int canna_fn_BaseKatakana; -static int canna_fn_BaseEisu; -static int canna_fn_BaseZenkaku; -static int canna_fn_BaseHankaku; -static int canna_fn_BaseKana; -static int canna_fn_BaseKakutei; -static int canna_fn_BaseHenkan; -static int canna_fn_BaseHiraKataToggle; -static int canna_fn_BaseZenHanToggle; -static int canna_fn_BaseKanaEisuToggle; -static int canna_fn_BaseKakuteiHenkanToggle; -static int canna_fn_BaseRotateForward; -static int canna_fn_BaseRotateBackward; +static Fixnum canna_fn_BaseHiragana; +static Fixnum canna_fn_BaseKatakana; +static Fixnum canna_fn_BaseEisu; +static Fixnum canna_fn_BaseZenkaku; +static Fixnum canna_fn_BaseHankaku; +static Fixnum canna_fn_BaseKana; +static Fixnum canna_fn_BaseKakutei; +static Fixnum canna_fn_BaseHenkan; +static Fixnum canna_fn_BaseHiraKataToggle; +static Fixnum canna_fn_BaseZenHanToggle; +static Fixnum canna_fn_BaseKanaEisuToggle; +static Fixnum canna_fn_BaseKakuteiHenkanToggle; +static Fixnum canna_fn_BaseRotateForward; +static Fixnum canna_fn_BaseRotateBackward; #endif -static int canna_fn_ExtendMode; -static int canna_fn_Touroku; -static int canna_fn_HexMode; -static int canna_fn_BushuMode; -static int canna_fn_KigouMode; +static Fixnum canna_fn_ExtendMode; +static Fixnum canna_fn_Touroku; +static Fixnum canna_fn_HexMode; +static Fixnum canna_fn_BushuMode; +static Fixnum canna_fn_KigouMode; #ifdef CANNA_FN_Mark -static int canna_fn_Mark; +static Fixnum canna_fn_Mark; #endif #ifdef CANNA_FN_TemporalMode -static int canna_fn_TemporalMode; +static Fixnum canna_fn_TemporalMode; #endif -static int canna_key_Nfer; -static int canna_key_Xfer; -static int canna_key_Up; -static int canna_key_Left; -static int canna_key_Right; -static int canna_key_Down; -static int canna_key_Insert; -static int canna_key_Rollup; -static int canna_key_Rolldown; -static int canna_key_Home; -static int canna_key_Help; -static int canna_key_KP_Key; -static int canna_key_Shift_Nfer; -static int canna_key_Shift_Xfer; -static int canna_key_Shift_Up; -static int canna_key_Shift_Left; -static int canna_key_Shift_Right; -static int canna_key_Shift_Down; -static int canna_key_Cntrl_Nfer; -static int canna_key_Cntrl_Xfer; -static int canna_key_Cntrl_Up; -static int canna_key_Cntrl_Left; -static int canna_key_Cntrl_Right; -static int canna_key_Cntrl_Down; +static Fixnum canna_key_Nfer; +static Fixnum canna_key_Xfer; +static Fixnum canna_key_Up; +static Fixnum canna_key_Left; +static Fixnum canna_key_Right; +static Fixnum canna_key_Down; +static Fixnum canna_key_Insert; +static Fixnum canna_key_Rollup; +static Fixnum canna_key_Rolldown; +static Fixnum canna_key_Home; +static Fixnum canna_key_Help; +static Fixnum canna_key_KP_Key; +static Fixnum canna_key_Shift_Nfer; +static Fixnum canna_key_Shift_Xfer; +static Fixnum canna_key_Shift_Up; +static Fixnum canna_key_Shift_Left; +static Fixnum canna_key_Shift_Right; +static Fixnum canna_key_Shift_Down; +static Fixnum canna_key_Cntrl_Nfer; +static Fixnum canna_key_Cntrl_Xfer; +static Fixnum canna_key_Cntrl_Up; +static Fixnum canna_key_Cntrl_Left; +static Fixnum canna_key_Cntrl_Right; +static Fixnum canna_key_Cntrl_Down; Lisp_Object VCANNA; /* by MORIOKA Tomohiko 1996/6/7 */ @@ -1430,7 +1445,7 @@ For canna */ ); canna_fn_DeleteNext = IROHA_FN_DeleteNext; - DEFVAR_INT ("canna-func-delete_previous", &canna_fn_DeletePrevious /* + DEFVAR_INT ("canna-func-delete-previous", &canna_fn_DeletePrevious /* */ ); canna_fn_DeletePrevious = IROHA_FN_DeletePrevious; @@ -1779,8 +1794,72 @@ For canna static void c2mu (unsigned char *cp, int l, unsigned char *mp) { - unsigned char ch, *ep = cp+l; + unsigned char ch, *ep = cp+l; +#ifdef UTF2000 + Emchar chr; + while ((cp < ep) && (ch = *cp++)) + { + if (ch == ISO_CODE_SS2) + { + chr = (*cp++) + MIN_CHAR_HALFWIDTH_KATAKANA - 0x20; + } + else if (ch == ISO_CODE_SS3) + { + ch = *cp++; + chr = MAKE_CHAR (Vcharset_japanese_jisx0212, + ch & 0x7f, (*cp++) & 0x7f); + } + else if (ch & 0x80) + { + chr = MAKE_CHAR (Vcharset_japanese_jisx0208, + ch & 0x7f, (*cp++) & 0x7f); + } + else + { + chr = ch; + } + if ( chr <= 0x7f ) + { + *mp++ = chr; + } + else if ( chr <= 0x7ff ) + { + *mp++ = (chr >> 6) | 0xc0; + *mp++ = (chr & 0x3f) | 0x80; + } + else if ( chr <= 0xffff ) + { + *mp++ = (chr >> 12) | 0xe0; + *mp++ = ((chr >> 6) & 0x3f) | 0x80; + *mp++ = (chr & 0x3f) | 0x80; + } + else if ( chr <= 0x1fffff ) + { + *mp++ = (chr >> 18) | 0xf0; + *mp++ = ((chr >> 12) & 0x3f) | 0x80; + *mp++ = ((chr >> 6) & 0x3f) | 0x80; + *mp++ = (chr & 0x3f) | 0x80; + } + else if ( chr <= 0x3ffffff ) + { + *mp++ = (chr >> 24) | 0xf8; + *mp++ = ((chr >> 18) & 0x3f) | 0x80; + *mp++ = ((chr >> 12) & 0x3f) | 0x80; + *mp++ = ((chr >> 6) & 0x3f) | 0x80; + *mp++ = (chr & 0x3f) | 0x80; + } + else + { + *mp++ = (chr >> 30) | 0xfc; + *mp++ = ((chr >> 24) & 0x3f) | 0x80; + *mp++ = ((chr >> 18) & 0x3f) | 0x80; + *mp++ = ((chr >> 12) & 0x3f) | 0x80; + *mp++ = ((chr >> 6) & 0x3f) | 0x80; + *mp++ = (chr & 0x3f) | 0x80; + } + } +#else while ((cp < ep) && (ch = *cp)) { if ((unsigned char) ch == ISO_CODE_SS2) @@ -1801,6 +1880,7 @@ c2mu (unsigned char *cp, int l, unsigned char *mp) } *mp++ = *cp++; } +#endif *mp = 0; } @@ -1810,9 +1890,79 @@ static void m2c (unsigned char *mp, int l, unsigned char *cp) { unsigned char ch, *ep = mp + l; +#ifdef UTF2000 + int len; + Emchar chr; +#endif while ((mp < ep) && (ch = *mp++)) { +#ifdef UTF2000 + if ( ch >= 0xfc ) + { + chr = (ch & 0x01); + len = 5; + } + else if ( ch >= 0xf8 ) + { + chr = ch & 0x03; + len = 4; + } + else if ( ch >= 0xf0 ) + { + chr = ch & 0x07; + len = 3; + } + else if ( ch >= 0xe0 ) + { + chr = ch & 0x0f; + len = 2; + } + else if ( ch >= 0xc0 ) + { + chr = ch & 0x1f; + len = 1; + } + else + { + chr = ch; + len = 0; + } + for( ; len > 0; len-- ) + { + ch = *mp++; + chr = ( chr << 6 ) | ( ch & 0x3f ); + } + if ( chr <= 0x7f ) + *cp++ = chr; + else + { + int code; + + if ( (code + = charset_code_point (Vcharset_japanese_jisx0208, + chr, 0)) >= 0 ) + { + *cp++ = (code >> 8) | 0x80; + *cp++ = (code & 0xFF) | 0x80; + } + else if ( (code + = charset_code_point (Vcharset_katakana_jisx0201, + chr, 0)) >= 0 ) + { + *cp++ = ISO_CODE_SS2; + *cp++ = code | 0x80; + } + else if ( (code + = charset_code_point (Vcharset_japanese_jisx0212, + chr, 0)) >= 0 ) + { + *cp++ = ISO_CODE_SS3; + *cp++ = (code >> 8) | 0x80; + *cp++ = (code & 0xFF) | 0x80; + } + } +#else switch (ch) { case LEADING_BYTE_KATAKANA_JISX0201: @@ -1829,6 +1979,7 @@ m2c (unsigned char *mp, int l, unsigned char *cp) *cp++ = ch; break; } +#endif } *cp = 0; } @@ -1881,8 +2032,8 @@ mule_strlen (unsigned char *p, int l) /* count number of characters */ static void -count_char (unsigned char *p, int len, int pos, int rev, int *clen, int *cpos, - int *crev) +count_char (unsigned char *p, int len, int pos, int rev, + Fixnum *clen, Fixnum *cpos, Fixnum *crev) { unsigned char *q = p;