]> code.delx.au - gnu-emacs/commitdiff
(non_ascii_char_to_string): If C has modifier bits,
authorKenichi Handa <handa@m17n.org>
Thu, 26 Nov 1998 08:12:12 +0000 (08:12 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 26 Nov 1998 08:12:12 +0000 (08:12 +0000)
make an appropriate one byte string.
(char_bytes): Handle the case that C is a single byte char or has
modifier bits.

src/charset.c

index 054b2848894412d1928c95b1d53474b05b8c590e..bf3944d47fa952358756d9358a75b04a0e734aab 100644 (file)
@@ -141,6 +141,20 @@ non_ascii_char_to_string (c, workbuf, str)
 {
   int charset, c1, c2;
 
+  if (c & ~GLYPH_MASK_CHAR)
+    {
+      if (c & CHAR_META)
+       /* Move the meta bit to the right place for a string.  */
+       c |= 0x80;
+      if (c & CHAR_CTL)
+       c &= 0x9F;
+      else if (c & CHAR_SHIFT && (c & 0x7F) >= 'a' && (c & 0x7F) <= 'z')
+       c -= 'a' - 'A';
+      *str = workbuf;
+      *workbuf = c;
+      return 1;
+    }
+
   if (c < 0)
     invalid_character (c);
 
@@ -1078,6 +1092,9 @@ char_bytes (c)
 {
   int bytes;
 
+  if (SINGLE_BYTE_CHAR_P (c) || (c & ~GLYPH_MASK_CHAR))
+    return 1;
+
   if (COMPOSITE_CHAR_P (c))
     {
       unsigned int id = COMPOSITE_CHAR_ID (c);