(find_char_feature_in_family): New function.
[chise/xemacs-chise.git.1] / src / text-coding.c
index 970a7bf..3c19e20 100644 (file)
@@ -1,7 +1,7 @@
 /* Code conversion functions.
    Copyright (C) 1991, 1995 Free Software Foundation, Inc.
    Copyright (C) 1995 Sun Microsystems, Inc.
-   Copyright (C) 1999,2000,2001,2002,2003 MORIOKA Tomohiko
+   Copyright (C) 1999,2000,2001,2002,2003,2004 MORIOKA Tomohiko
 
 This file is part of XEmacs.
 
@@ -3375,7 +3375,7 @@ char_encode_as_entity_reference (Emchar ch, char* buf)
   Lisp_Object ccs;
   Lisp_Object char_type;
   int format_columns, idx;
-  char format[18];
+  char format[20];
 
   while (!NILP (rest))
     {
@@ -3400,14 +3400,14 @@ char_encode_as_entity_reference (Emchar ch, char* buf)
 
              cell = Fcdr (cell);
              ret = Fcar (cell);
-             if (STRINGP (ret) && ((idx = XSTRING_LENGTH (ret)) <= 6))
+             if (STRINGP (ret) && ( (idx = XSTRING_LENGTH (ret)) <= 8 ))
                {
                  format[0] = '&';
                  strncpy (&format[1], XSTRING_DATA (ret), idx);
                  idx++;
                }
              else
-               continue;
+               goto try_next;
 
              cell = Fcdr (cell);
              ret = Fcar (cell);
@@ -3431,7 +3431,7 @@ char_encode_as_entity_reference (Emchar ch, char* buf)
              else if (EQ (ret, QX))
                format [idx++] = 'X';
              else
-               continue;
+               goto try_next;
              format [idx++] = ';';
              format [idx++] = 0;
 
@@ -3439,6 +3439,7 @@ char_encode_as_entity_reference (Emchar ch, char* buf)
              return;
            }
        }
+    try_next:
       rest = Fcdr (rest);
     }
   sprintf (buf, "&MCS-%08X;", ch);
@@ -3474,7 +3475,8 @@ COMPOSE_ADD_CHAR (struct decoding_stream *str,
   else if (!CONSP (str->combining_table))
     {
       Lisp_Object ret
-       = Fget_char_attribute (make_char (character), Qcomposition, Qnil);
+       = Fchar_feature (make_char (character), Qcomposition, Qnil,
+                        Qnil, Qnil);
 
       if (NILP (ret))
        decode_add_er_char (str, character, dst);
@@ -3493,7 +3495,8 @@ COMPOSE_ADD_CHAR (struct decoding_stream *str,
       if (CHARP (ret))
        {
          Emchar char2 = XCHARVAL (ret);
-         Lisp_Object ret2 = Fget_char_attribute (ret, Qcomposition, Qnil);
+         Lisp_Object ret2 = Fchar_feature (ret, Qcomposition, Qnil,
+                                           Qnil, Qnil);
 
          if (NILP (ret2))
            {
@@ -3510,8 +3513,8 @@ COMPOSE_ADD_CHAR (struct decoding_stream *str,
        }
       else
        {
-         ret = Fget_char_attribute (make_char (character), Qcomposition,
-                                    Qnil);
+         ret = Fchar_feature (make_char (character), Qcomposition, Qnil,
+                              Qnil, Qnil);
 
          COMPOSE_FLUSH_CHARS (str, dst);
          if (NILP (ret))
@@ -4607,14 +4610,16 @@ char_encode_utf8 (struct encoding_stream *str, Emchar ch,
          Lisp_Object ret;
 
          if ( !NILP (map)
-              && INTP (ret = Fget_char_attribute (make_char (ch),
-                                                  map, Qnil)) )
+              && INTP (ret = Fchar_feature (make_char (ch),
+                                            map, Qnil,
+                                            Qnil, Qnil)) )
            code_point = XINT (ret);
          else if ( !NILP (map =
                           CODING_SYSTEM_ISO2022_INITIAL_CHARSET
                           (str->codesys, 2))
-                   && INTP (ret = Fget_char_attribute (make_char (ch),
-                                                       map, Qnil)) )
+                   && INTP (ret = Fchar_feature (make_char (ch),
+                                                 map, Qnil,
+                                                 Qnil, Qnil)) )
            code_point = XINT (ret);
          else if (CODING_SYSTEM_USE_ENTITY_REFERENCE (str->codesys))
            {