]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fset_char_table_range): Handle charsets ascii,
authorKenichi Handa <handa@m17n.org>
Wed, 4 Feb 2004 01:20:27 +0000 (01:20 +0000)
committerKenichi Handa <handa@m17n.org>
Wed, 4 Feb 2004 01:20:27 +0000 (01:20 +0000)
eight-bit-control, and eight-bit-graphic correctly.

src/ChangeLog
src/fns.c

index 1e44a98d42dd77b83cc98371ad3ae2b0b393f6b7..f96f7740548e2b6ac3a324369b2b6b094653b74c 100644 (file)
@@ -1,3 +1,8 @@
+2004-02-04  Kenichi Handa  <handa@m17n.org>
+
+       * fns.c (Fset_char_table_range): Handle charsets ascii,
+       eight-bit-control, and eight-bit-graphic correctly.
+
 2004-02-03  Jason Rumney  <jasonr@gnu.org>
 
        * w32select.c (Fw32_set_clipboard_data): Make coding iso2022 safe.
index 493d7ba289706f0226f88585791234f3d0ebb95d..c9e25ecf547462fcc5eb9ba954b4b84822176ebe 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -2512,14 +2512,26 @@ character set, or a character code.  Return VALUE.  */)
   else if (SYMBOLP (range))
     {
       Lisp_Object charset_info;
+      int charset_id;
 
       charset_info = Fget (range, Qcharset);
-      CHECK_VECTOR (charset_info);
-
-      return Faset (char_table,
-                   make_number (XINT (XVECTOR (charset_info)->contents[0])
-                                + 128),
-                   value);
+      if (! VECTORP (charset_info)
+         || ! NATNUMP (AREF (charset_info, 0))
+         || (charset_id = XINT (AREF (charset_info, 0)),
+             ! CHARSET_DEFINED_P (charset_id)))
+       error ("Invalid charset: %s", SYMBOL_NAME (range));
+
+      if (charset_id == CHARSET_ASCII)
+       for (i = 0; i < 128; i++)
+         XCHAR_TABLE (char_table)->contents[i] = value;
+      else if (charset_id == CHARSET_8_BIT_CONTROL)
+       for (i = 128; i < 160; i++)
+         XCHAR_TABLE (char_table)->contents[i] = value;
+      else if (charset_id == CHARSET_8_BIT_GRAPHIC)
+       for (i = 160; i < 256; i++)
+         XCHAR_TABLE (char_table)->contents[i] = value;
+      else
+       XCHAR_TABLE (char_table)->contents[charset_id + 128] = value;
     }
   else if (INTEGERP (range))
     Faset (char_table, range, value);