]> code.delx.au - gnu-emacs/commitdiff
(Fformat): Convert an unibyte char argument that is
authorKenichi Handa <handa@m17n.org>
Fri, 17 Jan 2003 00:47:58 +0000 (00:47 +0000)
committerKenichi Handa <handa@m17n.org>
Fri, 17 Jan 2003 00:47:58 +0000 (00:47 +0000)
formatted by "%c" to multibyte if the total result must be a
multibyte string.

src/editfns.c

index 6539cd11d45635f88cf8adc682d7f4e8e17352a7..28c97c11a6b59bb6c78873b34f208cdf41048f91 100644 (file)
@@ -3359,17 +3359,25 @@ usage: (format STRING &rest OBJECTS)  */)
                error ("Invalid format operation %%%c", *format);
 
            thissize = 30;
-           if (*format == 'c'
-               && (! SINGLE_BYTE_CHAR_P (XINT (args[n]))
-                   || XINT (args[n]) == 0))
+           if (*format == 'c')
              {
-               if (! multibyte)
+               if (! SINGLE_BYTE_CHAR_P (XINT (args[n]))
+                   || XINT (args[n]) == 0)
                  {
-                   multibyte = 1;
-                   goto retry;
+                   if (! multibyte)
+                     {
+                       multibyte = 1;
+                       goto retry;
+                     }
+                   args[n] = Fchar_to_string (args[n]);
+                   thissize = SBYTES (args[n]);
+                 }
+               else if (! ASCII_BYTE_P (XINT (args[n])) && multibyte)
+                 {
+                   args[n]
+                     = Fchar_to_string (Funibyte_char_to_multibyte (args[n]));
+                   thissize = SBYTES (args[n]);
                  }
-               args[n] = Fchar_to_string (args[n]);
-               thissize = SBYTES (args[n]);
              }
          }
        else if (FLOATP (args[n]) && *format != 's')