From 7de6cd0aee512d54a8758a632afa0bd7ea97fcc0 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 8 Apr 2003 11:27:28 +0000 Subject: [PATCH] (coding_system_accept_latin_extra_p): New function. (find_safe_codings): Pay attention to characters registered in latin-extra-code-table. --- src/coding.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/coding.c b/src/coding.c index 85072d63b8f..9d1298ffff2 100644 --- a/src/coding.c +++ b/src/coding.c @@ -6397,6 +6397,26 @@ highest priority. */) STRING_MULTIBYTE (string)); } +static int coding_system_accept_latin_extra_p P_ ((Lisp_Object)); + +static int +coding_system_accept_latin_extra_p (coding_system) + Lisp_Object coding_system; +{ + Lisp_Object coding_spec, coding_type, flags; + + coding_spec = Fget (coding_system, Qcoding_system); + if (! VECTORP (coding_spec) + || ASIZE (coding_spec) != 5) + return 0; + coding_type = AREF (coding_spec, 0); + if (! EQ (coding_type, make_number (2))) + return 0; + flags = AREF (coding_spec, 4); + return (VECTORP (flags) + && ! NILP (AREF (flags, CODING_FLAG_ISO_LATIN_EXTRA))); +} + /* Subroutine for Fsafe_coding_systems_region_internal. Return a list of coding systems that safely encode the multibyte @@ -6444,7 +6464,11 @@ find_safe_codings (p, pend, safe_codings, work_table, single_byte_char_found) for (prev = tail = safe_codings; CONSP (tail); tail = XCDR (tail)) { val = XCAR (tail); - if (NILP (Faref (XCDR (val), ch))) + if (NILP (Faref (XCDR (val), ch)) + && !(SINGLE_BYTE_CHAR_P (c) + && VECTORP (Vlatin_extra_code_table) + && ! NILP (AREF (Vlatin_extra_code_table, c)) + && coding_system_accept_latin_extra_p (XCAR (val)))) { /* Exclued this coding system from SAFE_CODINGS. */ if (EQ (tail, safe_codings)) -- 2.39.2