changeset 50487:db1e3303096f

(coding_system_accept_latin_extra_p): New function. (find_safe_codings): Pay attention to characters registered in latin-extra-code-table.
author Kenichi Handa <handa@m17n.org>
date Tue, 08 Apr 2003 11:27:28 +0000
parents b67e5e5b8fc4
children a23ddd4b5a0b
files src/coding.c
diffstat 1 files changed, 25 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/coding.c	Tue Apr 08 10:46:31 2003 +0000
+++ b/src/coding.c	Tue Apr 08 11:27:28 2003 +0000
@@ -6397,6 +6397,26 @@
 			       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 @@
       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))