]> git.eshelyaron.com Git - emacs.git/commitdiff
(find_charset_in_str): Return also charsets in
authorKenichi Handa <handa@m17n.org>
Thu, 25 Sep 1997 12:25:01 +0000 (12:25 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 25 Sep 1997 12:25:01 +0000 (12:25 +0000)
composite characters.

src/charset.c

index edfab0575493fb92fed777e94a5d7d46b1834e03..c8665b49130bbcc7d1ef847334969f7fbcf88f4d 100644 (file)
@@ -546,23 +546,53 @@ find_charset_in_str (str, len, charsets, table)
      Lisp_Object table;
 {
   int num = 0;
+  int cmpcharp = 0;
+  unsigned char str_work[4], *str_tmp;
 
   if (! CHAR_TABLE_P (table))
     table = Qnil;
 
   while (len > 0)
     {
-      int bytes = BYTES_BY_CHAR_HEAD (*str);
-      int charset;
+      int bytes, charset;
       
+      if (*str == LEADING_CODE_COMPOSITION)
+       {
+         str++;
+         len--;
+         cmpcharp = 1;
+       }
+      else if (CHAR_HEAD_P (str))
+       cmpcharp = 0;
+
+      if (cmpcharp)
+       {
+         if (*str == 0xA0)
+           {
+             str++;
+             len--;
+             str_work[0] = *str & 0x7F;
+           }
+         else
+           {
+             bcopy (str, str_work, min (4, len));
+             str_work[0] -= 0x20;
+           }
+         str_tmp = str_work;
+       }
+      else
+       str_tmp = str;
+         
+      bytes = BYTES_BY_CHAR_HEAD (*str_tmp);
+
       if (NILP (table))
-       charset = CHARSET_AT (str);
+       charset = CHARSET_AT (str_tmp);
       else
        {
-         int c, charset;
+         int c;
          unsigned char c1, c2;
 
-         SPLIT_STRING(str, bytes, charset, c1, c2);
+         SPLIT_STRING(str_tmp, bytes, charset, c1, c2);
          if ((c = unify_char (table, -1, charset, c1, c2)) >= 0)
            charset = CHAR_CHARSET (c);
        }