Mercurial > emacs
changeset 53799:9ddd570ce8c7
(Fset_char_table_range): Handle charsets ascii,
eight-bit-control, and eight-bit-graphic correctly.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Wed, 04 Feb 2004 01:18:45 +0000 |
parents | ad0a7541533d |
children | 251e31909e96 |
files | src/fns.c |
diffstat | 1 files changed, 18 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fns.c Tue Feb 03 23:44:47 2004 +0000 +++ b/src/fns.c Wed Feb 04 01:18:45 2004 +0000 @@ -2512,14 +2512,26 @@ 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);