Mercurial > emacs
diff src/fns.c @ 13236:c9af99bb26d4
(Fchar_table_subtype): New function.
(syms_of_fns): defsube it.
(map_char_table): When possible, use a number to describe the range.
(Fchar_table_range): New function.
(syms_of_fns): defsubr it.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 18 Oct 1995 23:29:38 +0000 |
parents | 04170e19b3d4 |
children | 0701fab73d81 |
line wrap: on
line diff
--- a/src/fns.c Wed Oct 18 23:27:11 1995 +0000 +++ b/src/fns.c Wed Oct 18 23:29:38 1995 +0000 @@ -1176,6 +1176,17 @@ return array; } +DEFUN ("char-table-subtype", Fchar_table_subtype, Schar_table_subtype, + 1, 1, 0, + "Return the subtype of char-table CHAR-TABLE. The value is a symbol.") + (chartable) + Lisp_Object chartable; +{ + CHECK_CHAR_TABLE (chartable, 0); + + return XCHAR_TABLE (chartable)->purpose; +} + DEFUN ("char-table-parent", Fchar_table_parent, Schar_table_parent, 1, 1, 0, "Return the parent char-table of CHAR-TABLE.\n\ @@ -1247,6 +1258,37 @@ return XCHAR_TABLE (chartable)->extras[XINT (n)] = value; } +DEFUN ("char-table-range", Fchar_table_range, Schar_table_range, + 2, 2, 0, + "Return the value in CHARTABLE for a range of characters RANGE.\n\ +RANGE should be t (for all characters), nil (for the default value)\n\ +a vector which identifies a character set or a row of a character set,\n\ +or a character code.") + (chartable, range) + Lisp_Object chartable, range; +{ + int i; + + CHECK_CHAR_TABLE (chartable, 0); + + if (EQ (range, Qnil)) + return XCHAR_TABLE (chartable)->defalt; + else if (INTEGERP (range)) + return Faref (chartable, range); + else if (VECTORP (range)) + { + for (i = 0; i < XVECTOR (range)->size - 1; i++) + chartable = Faref (chartable, XVECTOR (range)->contents[i]); + + if (EQ (XVECTOR (range)->contents[i], Qnil)) + return XCHAR_TABLE (chartable)->defalt; + else + return Faref (chartable, XVECTOR (range)->contents[i]); + } + else + error ("Invalid RANGE argument to `char-table-range'"); +} + DEFUN ("set-char-table-range", Fset_char_table_range, Sset_char_table_range, 3, 3, 0, "Set the value in CHARTABLE for a range of characters RANGE to VALUE.\n\ @@ -1314,6 +1356,11 @@ map_char_table (chartable, c_function, function, depth + 1, indices); else if (c_function) (*c_function) (depth + 1, indices, elt); + /* Here we should handle all cases where the range is a single character + by passing that character as a number. Currently, that is + all the time, but with the MULE code this will have to be changed. */ + else if (depth == 0) + call2 (function, make_number (i), elt); else call2 (function, Fvector (depth + 1, indices), elt); } @@ -1816,10 +1863,12 @@ defsubr (&Sput); defsubr (&Sequal); defsubr (&Sfillarray); + defsubr (&Schar_table_subtype); defsubr (&Schar_table_parent); defsubr (&Sset_char_table_parent); defsubr (&Schar_table_extra_slot); defsubr (&Sset_char_table_extra_slot); + defsubr (&Schar_table_range); defsubr (&Sset_char_table_range); defsubr (&Smap_char_table); defsubr (&Snconc);