*/ );
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;
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)
}
*mp++ = *cp++;
}
+#endif
*mp = 0;
}
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:
*cp++ = ch;
break;
}
+#endif
}
*cp = 0;
}