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