]> git.eshelyaron.com Git - emacs.git/commitdiff
(detect_coding_sjis): Handle shift_jis-2004 correctly.
authorKenichi Handa <handa@m17n.org>
Wed, 8 Jul 2009 02:22:05 +0000 (02:22 +0000)
committerKenichi Handa <handa@m17n.org>
Wed, 8 Jul 2009 02:22:05 +0000 (02:22 +0000)
(encode_coding_sjis): Fix the code range check.

src/coding.c

index 20583a388d182fffbb3eee5283cd699d4350d54f..a8f84378e665b80bee23f601ccb495f22dfd377a 100644 (file)
@@ -4671,6 +4671,12 @@ detect_coding_sjis (coding, detect_info)
   int consumed_chars = 0;
   int found = 0;
   int c;
+  Lisp_Object attrs, charset_list;
+  int max_first_byte_of_2_byte_code;
+
+  CODING_GET_INFO (coding, attrs, charset_list);
+  max_first_byte_of_2_byte_code
+    = (XINT (Flength (charset_list)) > 3 ? 0xFC : 0xEF);
 
   detect_info->checked |= CATEGORY_MASK_SJIS;
   /* A coding system of this category is always ASCII compatible.  */
@@ -4682,7 +4688,8 @@ detect_coding_sjis (coding, detect_info)
       ONE_MORE_BYTE (c);
       if (c < 0x80)
        continue;
-      if ((c >= 0x81 && c <= 0x9F) || (c >= 0xE0 && c <= 0xEF))
+      if ((c >= 0x81 && c <= 0x9F)
+         || (c >= 0xE0 && c <= max_first_byte_of_2_byte_code))
        {
          ONE_MORE_BYTE (c);
          if (c < 0x40 || c == 0x7F || c > 0xFC)
@@ -5055,7 +5062,8 @@ encode_coding_sjis (coding)
              int c1, c2;
 
              c1 = code >> 8;
-             if (c1 == 0x21 || (c1 >= 0x23 && c1 < 0x25)
+             if (c1 == 0x21 || (c1 >= 0x23 && c1 <= 0x25)
+                 || c1 == 0x28
                  || (c1 >= 0x2C && c1 <= 0x2F) || c1 >= 0x6E)
                {
                  JIS_TO_SJIS2 (code);