X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Ftext-coding.c;h=fd1dc8fd8c89f36c2e1199c072b987625a7e4ad6;hb=6797bde39c52203650064ef8e079af5a9c5f124a;hp=05bf7d1009ce87acf0214ceefde18ff5432887c3;hpb=e8399be9819462e4a72526af6eaa9b4ec5d3127d;p=chise%2Fxemacs-chise.git- diff --git a/src/text-coding.c b/src/text-coding.c index 05bf7d1..fd1dc8f 100644 --- a/src/text-coding.c +++ b/src/text-coding.c @@ -2980,16 +2980,16 @@ char_encode_shift_jis (struct encoding_stream *str, Emchar ch, } else { - Lisp_Object charset, value; + Lisp_Object charset; unsigned int c1, c2, s1, s2; - #ifdef UTF2000 - if (INTP (value = - get_char_code_table - (ch, XCHARSET_ENCODING_TABLE (Vcharset_latin_jisx0201)))) + Lisp_Object value = charset_code_point (Vcharset_latin_jisx0201, ch); + Lisp_Object ret = Fcar (value); + + if (INTP (ret)) { charset = Vcharset_latin_jisx0201; - c1 = XINT (value); + c1 = XINT (ret); c2 = 0; } else @@ -4792,20 +4792,55 @@ char_encode_iso2022 (struct encoding_stream *str, Emchar ch, reg = -1; for (i = 0; i < 4; i++) { + Lisp_Object code_point; + if ((CHARSETP (charset = str->iso2022.charset[i]) - && (byte1 = charset_get_byte1 (charset, ch))) || + && !EQ (code_point = charset_code_point (charset, ch), Qnil)) + || (CHARSETP (charset = CODING_SYSTEM_ISO2022_INITIAL_CHARSET (codesys, i)) - && (byte1 = charset_get_byte1 (charset, ch)))) + && !EQ (code_point = charset_code_point (charset, ch), Qnil))) { + Lisp_Object ret = Fcar (code_point); + + if (INTP (ret)) + { + byte1 = XINT (ret); + ret = Fcar (Fcdr (code_point)); + if (INTP (ret)) + byte2 = XINT (ret); + else + byte2 = 0; + } + else + { + byte1 = 0; + byte2 = 0; + } reg = i; - byte2 = charset_get_byte2 (charset, ch); break; } } if (reg == -1) - BREAKUP_CHAR (ch, charset, byte1, byte2); + { + Lisp_Object original_default_coded_charset_priority_list + = Vdefault_coded_charset_priority_list; + + while (!EQ (Vdefault_coded_charset_priority_list, Qnil)) + { + BREAKUP_CHAR (ch, charset, byte1, byte2); + if (XCHARSET_FINAL (charset)) + goto found; + Vdefault_coded_charset_priority_list + = Fcdr (Fmemq (XCHARSET_NAME (charset), + Vdefault_coded_charset_priority_list)); + } + BREAKUP_CHAR (ch, charset, byte1, byte2); + found: + Vdefault_coded_charset_priority_list + = original_default_coded_charset_priority_list; + } ensure_correct_direction (XCHARSET_DIRECTION (charset), codesys, dst, flags, 0);