X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/9a64297c6762d5950c453914e7f67347d79b0bb0..0c4f97d011de61455c9895b1fa7a5011acd8edcd:/src/category.c diff --git a/src/category.c b/src/category.c index 734634bd6a..728b3a8e91 100644 --- a/src/category.c +++ b/src/category.c @@ -253,6 +253,20 @@ It is a copy of the TABLE, which defaults to the standard category table.") return copy_category_table (table); } +DEFUN ("make-category-table", Fmake_category_table, Smake_category_table, + 0, 0, 0, + "Construct a new and empty category table and return it.") + () +{ + Lisp_Object val; + + val = Fmake_char_table (Qcategory_table, Qnil); + XCHAR_TABLE (val)->defalt = MAKE_CATEGORY_SET; + Fset_char_table_extra_slot (val, make_number (0), + Fmake_vector (make_number (95), Qnil)); + return val; +} + DEFUN ("set-category-table", Fset_category_table, Sset_category_table, 1, 1, 0, "Specify TABLE as the category table for the current buffer.") (table) @@ -314,12 +328,11 @@ modify_lower_category_set (table, category, set_value) Lisp_Object val; int i; - if (NILP (XCHAR_TABLE (table)->defalt)) - { - val = MAKE_CATEGORY_SET; - SET_CATEGORY_SET (val, category, set_value); - XCHAR_TABLE (table)->defalt = val; - } + val = XCHAR_TABLE (table)->defalt; + if (!CATEGORY_SET_P (val)) + val = MAKE_CATEGORY_SET; + SET_CATEGORY_SET (val, category, set_value); + XCHAR_TABLE (table)->defalt = val; for (i = 32; i < SUB_CHAR_TABLE_ORDINARY_SLOTS; i++) { @@ -568,11 +581,6 @@ word_boundary_p (c1, c2) Lisp_Object tail; int default_result; - if (COMPOSITE_CHAR_P (c1)) - c1 = cmpchar_component (c1, 0, 1); - if (COMPOSITE_CHAR_P (c2)) - c2 = cmpchar_component (c2, 0, 1); - if (CHAR_CHARSET (c1) == CHAR_CHARSET (c2)) { tail = Vword_separating_categories; @@ -591,15 +599,15 @@ word_boundary_p (c1, c2) if (NILP (category_set2)) return default_result; - for (; CONSP (tail); tail = XCONS (tail)->cdr) + for (; CONSP (tail); tail = XCDR (tail)) { - Lisp_Object elt = XCONS(tail)->car; + Lisp_Object elt = XCAR (tail); if (CONSP (elt) - && CATEGORYP (XCONS (elt)->car) - && CATEGORYP (XCONS (elt)->cdr) - && CATEGORY_MEMBER (XFASTINT (XCONS (elt)->car), category_set1) - && CATEGORY_MEMBER (XFASTINT (XCONS (elt)->cdr), category_set2)) + && CATEGORYP (XCAR (elt)) + && CATEGORYP (XCDR (elt)) + && CATEGORY_MEMBER (XFASTINT (XCAR (elt)), category_set1) + && CATEGORY_MEMBER (XFASTINT (XCDR (elt)), category_set2)) return !default_result; } return default_result; @@ -690,6 +698,7 @@ See the documentation of the variable `word-combining-categories'."); defsubr (&Scategory_table); defsubr (&Sstandard_category_table); defsubr (&Scopy_category_table); + defsubr (&Smake_category_table); defsubr (&Sset_category_table); defsubr (&Schar_category_set); defsubr (&Scategory_set_mnemonics);