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)
Lisp_Object table;
{
+ int idx;
table = check_category_table (table);
current_buffer->category_table = table;
/* Indicate that this buffer now has a specified category table. */
- current_buffer->local_var_flags
- |= XFASTINT (buffer_local_flags.category_table);
+ idx = PER_BUFFER_VAR_IDX (category_table);
+ SET_PER_BUFFER_VALUE_P (current_buffer, idx, 1);
return table;
}
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++)
{
return Qnil;
}
- SPLIT_NON_ASCII_CHAR (c, charset, c1, c2);
+ SPLIT_CHAR (c, charset, c1, c2);
/* The top level table. */
val = XCHAR_TABLE (table)->contents[charset + 128];
mnemonics = Fcategory_set_mnemonics (value);
insert_from_string (mnemonics, 0, 0, XSTRING (mnemonics)->size,
- XSTRING (mnemonics)->size_byte, 0);
+ STRING_BYTES (XSTRING (mnemonics)), 0);
insert_string ("\n");
return;
}
insert_char (i + 32);
insert (": ", 2);
insert_from_string (elt, 0, 0, XSTRING (elt)->size,
- XSTRING (elt)->size_byte, 0);
+ STRING_BYTES (XSTRING (elt)), 0);
insert ("\n", 1);
}
}
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;
}
\f
+void
init_category_once ()
{
/* This has to be done here, before we call Fmake_char_table. */
Fmake_vector (make_number (95), Qnil));
}
+void
syms_of_category ()
{
Qcategoryp = intern ("categoryp");
word (i.e. finds no word boundary between them) iff they belongs to\n\
the same charset. But, exceptions are allowed in the following cases.\n\
\n\
-(1) The case that characters are in different charsets is controlled\n\
+\(1) The case that characters are in different charsets is controlled\n\
by the variable `word-combining-categories'.\n\
\n\
Emacs finds no word boundary between characters of different charsets\n\
form a single word, the element `(?l . ?l)' should be in this list\n\
because both characters have the category `l' (Latin characters).\n\
\n\
-(2) The case that character are in the same charset is controlled by\n\
+\(2) The case that character are in the same charset is controlled by\n\
the variable `word-separating-categories'.\n\
\n\
Emacs find a word boundary between characters of the same charset\n\
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);