Mercurial > emacs
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));