changeset 98951:71becd1e9707

(detect_coding_charset): For iso-8859-* coding systems, check Vlatin_extra_code_table.
author Kenichi Handa <handa@m17n.org>
date Tue, 21 Oct 2008 02:25:49 +0000
parents d6f6dbaf9d02
children 1a8a1d7f0db7
files src/coding.c
diffstat 1 files changed, 13 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/coding.c	Mon Oct 20 23:14:36 2008 +0000
+++ b/src/coding.c	Tue Oct 21 02:25:49 2008 +0000
@@ -4975,16 +4975,20 @@
   const unsigned char *src_end = coding->source + coding->src_bytes;
   int multibytep = coding->src_multibyte;
   int consumed_chars = 0;
-  Lisp_Object attrs, valids;
+  Lisp_Object attrs, valids, name;
   int found = 0;
   int head_ascii = coding->head_ascii;
+  int check_latin_extra = 0;
 
   detect_info->checked |= CATEGORY_MASK_CHARSET;
 
   coding = &coding_categories[coding_category_charset];
   attrs = CODING_ID_ATTRS (coding->id);
   valids = AREF (attrs, coding_attr_charset_valids);
-
+  name = CODING_ID_NAME (coding->id);
+  if (VECTORP (Vlatin_extra_code_table)
+      && strcmp ((char *) SDATA (SYMBOL_NAME (name)), "iso-8859-"))
+    check_latin_extra = 1;
   if (! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
     src += head_ascii;
 
@@ -5003,7 +5007,13 @@
       if (NILP (val))
 	break;
       if (c >= 0x80)
-	found = CATEGORY_MASK_CHARSET;
+	{
+	  if (c < 0xA0
+	      && check_latin_extra
+	      && NILP (XVECTOR (Vlatin_extra_code_table)->contents[c]))
+	    break;
+	  found = CATEGORY_MASK_CHARSET;
+	}
       if (INTEGERP (val))
 	{
 	  charset = CHARSET_FROM_ID (XFASTINT (val));