diff options
Diffstat (limited to 'src/coding.c')
| -rw-r--r-- | src/coding.c | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/src/coding.c b/src/coding.c index 798e5c533f6..f099605c774 100644 --- a/src/coding.c +++ b/src/coding.c | |||
| @@ -9023,14 +9023,15 @@ Return the corresponding character. */) | |||
| 9023 | { | 9023 | { |
| 9024 | Lisp_Object spec, attrs, val; | 9024 | Lisp_Object spec, attrs, val; |
| 9025 | struct charset *charset_roman, *charset_kanji, *charset_kana, *charset; | 9025 | struct charset *charset_roman, *charset_kanji, *charset_kana, *charset; |
| 9026 | EMACS_INT c; | 9026 | EMACS_INT ch; |
| 9027 | int c; | ||
| 9027 | 9028 | ||
| 9028 | CHECK_NATNUM (code); | 9029 | CHECK_NATNUM (code); |
| 9029 | c = XFASTINT (code); | 9030 | ch = XFASTINT (code); |
| 9030 | CHECK_CODING_SYSTEM_GET_SPEC (Vsjis_coding_system, spec); | 9031 | CHECK_CODING_SYSTEM_GET_SPEC (Vsjis_coding_system, spec); |
| 9031 | attrs = AREF (spec, 0); | 9032 | attrs = AREF (spec, 0); |
| 9032 | 9033 | ||
| 9033 | if (ASCII_BYTE_P (c) | 9034 | if (ASCII_BYTE_P (ch) |
| 9034 | && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs))) | 9035 | && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs))) |
| 9035 | return code; | 9036 | return code; |
| 9036 | 9037 | ||
| @@ -9039,27 +9040,31 @@ Return the corresponding character. */) | |||
| 9039 | charset_kana = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val); | 9040 | charset_kana = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val); |
| 9040 | charset_kanji = CHARSET_FROM_ID (XINT (XCAR (val))); | 9041 | charset_kanji = CHARSET_FROM_ID (XINT (XCAR (val))); |
| 9041 | 9042 | ||
| 9042 | if (c <= 0x7F) | 9043 | if (ch <= 0x7F) |
| 9043 | charset = charset_roman; | 9044 | { |
| 9044 | else if (c >= 0xA0 && c < 0xDF) | 9045 | c = ch; |
| 9046 | charset = charset_roman; | ||
| 9047 | } | ||
| 9048 | else if (ch >= 0xA0 && ch < 0xDF) | ||
| 9045 | { | 9049 | { |
| 9050 | c = ch - 0x80; | ||
| 9046 | charset = charset_kana; | 9051 | charset = charset_kana; |
| 9047 | c -= 0x80; | ||
| 9048 | } | 9052 | } |
| 9049 | else | 9053 | else |
| 9050 | { | 9054 | { |
| 9051 | EMACS_INT c1 = c >> 8; | 9055 | EMACS_INT c1 = ch >> 8; |
| 9052 | int c2 = c & 0xFF; | 9056 | int c2 = ch & 0xFF; |
| 9053 | 9057 | ||
| 9054 | if (c1 < 0x81 || (c1 > 0x9F && c1 < 0xE0) || c1 > 0xEF | 9058 | if (c1 < 0x81 || (c1 > 0x9F && c1 < 0xE0) || c1 > 0xEF |
| 9055 | || c2 < 0x40 || c2 == 0x7F || c2 > 0xFC) | 9059 | || c2 < 0x40 || c2 == 0x7F || c2 > 0xFC) |
| 9056 | error ("Invalid code: %d", code); | 9060 | error ("Invalid code: %"pEd, ch); |
| 9061 | c = ch; | ||
| 9057 | SJIS_TO_JIS (c); | 9062 | SJIS_TO_JIS (c); |
| 9058 | charset = charset_kanji; | 9063 | charset = charset_kanji; |
| 9059 | } | 9064 | } |
| 9060 | c = DECODE_CHAR (charset, c); | 9065 | c = DECODE_CHAR (charset, c); |
| 9061 | if (c < 0) | 9066 | if (c < 0) |
| 9062 | error ("Invalid code: %d", code); | 9067 | error ("Invalid code: %"pEd, ch); |
| 9063 | return make_number (c); | 9068 | return make_number (c); |
| 9064 | } | 9069 | } |
| 9065 | 9070 | ||
| @@ -9099,14 +9104,15 @@ Return the corresponding character. */) | |||
| 9099 | { | 9104 | { |
| 9100 | Lisp_Object spec, attrs, val; | 9105 | Lisp_Object spec, attrs, val; |
| 9101 | struct charset *charset_roman, *charset_big5, *charset; | 9106 | struct charset *charset_roman, *charset_big5, *charset; |
| 9107 | EMACS_INT ch; | ||
| 9102 | int c; | 9108 | int c; |
| 9103 | 9109 | ||
| 9104 | CHECK_NATNUM (code); | 9110 | CHECK_NATNUM (code); |
| 9105 | c = XFASTINT (code); | 9111 | ch = XFASTINT (code); |
| 9106 | CHECK_CODING_SYSTEM_GET_SPEC (Vbig5_coding_system, spec); | 9112 | CHECK_CODING_SYSTEM_GET_SPEC (Vbig5_coding_system, spec); |
| 9107 | attrs = AREF (spec, 0); | 9113 | attrs = AREF (spec, 0); |
| 9108 | 9114 | ||
| 9109 | if (ASCII_BYTE_P (c) | 9115 | if (ASCII_BYTE_P (ch) |
| 9110 | && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs))) | 9116 | && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs))) |
| 9111 | return code; | 9117 | return code; |
| 9112 | 9118 | ||
| @@ -9114,19 +9120,24 @@ Return the corresponding character. */) | |||
| 9114 | charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val); | 9120 | charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val); |
| 9115 | charset_big5 = CHARSET_FROM_ID (XINT (XCAR (val))); | 9121 | charset_big5 = CHARSET_FROM_ID (XINT (XCAR (val))); |
| 9116 | 9122 | ||
| 9117 | if (c <= 0x7F) | 9123 | if (ch <= 0x7F) |
| 9118 | charset = charset_roman; | 9124 | { |
| 9125 | c = ch; | ||
| 9126 | charset = charset_roman; | ||
| 9127 | } | ||
| 9119 | else | 9128 | else |
| 9120 | { | 9129 | { |
| 9121 | int b1 = c >> 8, b2 = c & 0x7F; | 9130 | EMACS_INT b1 = ch >> 8; |
| 9131 | int b2 = ch & 0x7F; | ||
| 9122 | if (b1 < 0xA1 || b1 > 0xFE | 9132 | if (b1 < 0xA1 || b1 > 0xFE |
| 9123 | || b2 < 0x40 || (b2 > 0x7E && b2 < 0xA1) || b2 > 0xFE) | 9133 | || b2 < 0x40 || (b2 > 0x7E && b2 < 0xA1) || b2 > 0xFE) |
| 9124 | error ("Invalid code: %d", code); | 9134 | error ("Invalid code: %"pEd, ch); |
| 9135 | c = ch; | ||
| 9125 | charset = charset_big5; | 9136 | charset = charset_big5; |
| 9126 | } | 9137 | } |
| 9127 | c = DECODE_CHAR (charset, (unsigned )c); | 9138 | c = DECODE_CHAR (charset, c); |
| 9128 | if (c < 0) | 9139 | if (c < 0) |
| 9129 | error ("Invalid code: %d", code); | 9140 | error ("Invalid code: %"pEd, ch); |
| 9130 | return make_number (c); | 9141 | return make_number (c); |
| 9131 | } | 9142 | } |
| 9132 | 9143 | ||
| @@ -9298,7 +9309,7 @@ usage: (find-operation-coding-system OPERATION ARGUMENTS...) */) | |||
| 9298 | || (EQ (operation, Qinsert_file_contents) && CONSP (target) | 9309 | || (EQ (operation, Qinsert_file_contents) && CONSP (target) |
| 9299 | && STRINGP (XCAR (target)) && BUFFERP (XCDR (target))) | 9310 | && STRINGP (XCAR (target)) && BUFFERP (XCDR (target))) |
| 9300 | || (EQ (operation, Qopen_network_stream) && INTEGERP (target)))) | 9311 | || (EQ (operation, Qopen_network_stream) && INTEGERP (target)))) |
| 9301 | error ("Invalid %dth argument", XFASTINT (target_idx) + 1); | 9312 | error ("Invalid %"pEd"th argument", XFASTINT (target_idx) + 1); |
| 9302 | if (CONSP (target)) | 9313 | if (CONSP (target)) |
| 9303 | target = XCAR (target); | 9314 | target = XCAR (target); |
| 9304 | 9315 | ||
| @@ -9774,7 +9785,7 @@ usage: (define-coding-system-internal ...) */) | |||
| 9774 | CHECK_CHARSET_GET_ID (tmp1, id); | 9785 | CHECK_CHARSET_GET_ID (tmp1, id); |
| 9775 | CHECK_NATNUM_CDR (val); | 9786 | CHECK_NATNUM_CDR (val); |
| 9776 | if (XINT (XCDR (val)) >= 4) | 9787 | if (XINT (XCDR (val)) >= 4) |
| 9777 | error ("Invalid graphic register number: %d", XINT (XCDR (val))); | 9788 | error ("Invalid graphic register number: %"pEd, XINT (XCDR (val))); |
| 9778 | XSETCAR (val, make_number (id)); | 9789 | XSETCAR (val, make_number (id)); |
| 9779 | } | 9790 | } |
| 9780 | 9791 | ||