changeset 89429:3c978149859b

(Fdefine_coding_system_internal): Fix for the case that coding_type is Qcharset.
author Kenichi Handa <handa@m17n.org>
date Tue, 20 May 2003 13:05:14 +0000
parents eed327e0bad3
children 28939d6dacea
files src/coding.c
diffstat 1 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/coding.c	Tue May 20 13:04:49 2003 +0000
+++ b/src/coding.c	Tue May 20 13:05:14 2003 +0000
@@ -7835,6 +7835,7 @@
 
   if (EQ (coding_type, Qcharset))
     {
+      Lisp_Object list;
       /* Generate a lisp vector of 256 elements.  Each element is nil,
 	 integer, or a list of charset IDs.
 
@@ -7848,9 +7849,23 @@
 	 of one of them.  The list is sorted by dimensions of the
 	 charsets.  A charset of smaller dimension comes firtst.
       */
+      for (list = Qnil, tail = charset_list; CONSP (tail); tail = XCDR (tail))
+	{
+	  struct charset *charset = CHARSET_FROM_ID (XFASTINT (XCAR (tail)));
+
+	  if (charset->method == CHARSET_METHOD_SUPERSET)
+	    {
+	      val = CHARSET_SUPERSET (charset);
+	      for (; CONSP (val); val = XCDR (val))
+		list = Fcons (XCAR (XCAR (val)), list); 
+	    }
+	  else
+	    list = Fcons (XCAR (tail), list);
+	}
+
       val = Fmake_vector (make_number (256), Qnil);
 
-      for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
+      for (tail = Fnreverse (list); CONSP (tail); tail = XCDR (tail))
 	{
 	  struct charset *charset = CHARSET_FROM_ID (XFASTINT (XCAR (tail)));
 	  int dim = CHARSET_DIMENSION (charset);