*** empty log message ***
[bpt/emacs.git] / src / category.c
index 182cfd2..e77d6f3 100644 (file)
@@ -110,8 +110,6 @@ DEFUN ("category-docstring", Fcategory_docstring, Scategory_docstring, 1, 2, 0,
   (category, table)
      Lisp_Object category, table;
 {
   (category, table)
      Lisp_Object category, table;
 {
-  Lisp_Object doc;
-
   CHECK_CATEGORY (category, 0);
   table = check_category_table (table);
 
   CHECK_CATEGORY (category, 0);
   table = check_category_table (table);
 
@@ -128,7 +126,6 @@ to modify; it defaults to the current buffer's category table.")
      Lisp_Object table;
 {
   int i;
      Lisp_Object table;
 {
   int i;
-  Lisp_Object docstring_vector;
 
   table = check_category_table (table);
 
 
   table = check_category_table (table);
 
@@ -253,16 +250,31 @@ It is a copy of the TABLE, which defaults to the standard category table.")
   return copy_category_table (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)
      Lisp_Object table;
 {
 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.  */
   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;
 }
 
   return table;
 }
 
@@ -272,10 +284,6 @@ DEFUN ("char-category-set", Fchar_category_set, Schar_category_set, 1, 1, 0,
   (ch)
      Lisp_Object ch;
 {
   (ch)
      Lisp_Object ch;
 {
-  Lisp_Object val;
-  int charset;
-  unsigned char c1, c2;
-
   CHECK_NUMBER (ch, 0);
   return CATEGORY_SET (XFASTINT (ch));
 }
   CHECK_NUMBER (ch, 0);
   return CATEGORY_SET (XFASTINT (ch));
 }
@@ -314,12 +322,11 @@ modify_lower_category_set (table, category, set_value)
   Lisp_Object val;
   int i;
 
   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++)
     {
 
   for (i = 32; i < SUB_CHAR_TABLE_ORDINARY_SLOTS; i++)
     {
@@ -380,7 +387,7 @@ If optional fourth argument RESET is non-nil,\n\
       return Qnil;
     }
 
       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];
 
   /* The top level table.  */
   val = XCHAR_TABLE (table)->contents[charset + 128];
@@ -586,15 +593,15 @@ word_boundary_p (c1, c2)
   if (NILP (category_set2))
     return default_result;
 
   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)
 
       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;
        return !default_result;
     }
   return default_result;
@@ -641,7 +648,7 @@ Emacs treats a sequence of word constituent characters as a single\n\
 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\
 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\
 by the variable `word-combining-categories'.\n\
 \n\
 Emacs finds no word boundary between characters of different charsets\n\
@@ -655,7 +662,7 @@ For instance, to tell that ASCII characters and Latin-1 characters can\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\
 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\
 the variable `word-separating-categories'.\n\
 \n\
 Emacs find a word boundary between characters of the same charset\n\
@@ -685,6 +692,7 @@ See the documentation of the variable `word-combining-categories'.");
   defsubr (&Scategory_table);
   defsubr (&Sstandard_category_table);
   defsubr (&Scopy_category_table);
   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);
   defsubr (&Sset_category_table);
   defsubr (&Schar_category_set);
   defsubr (&Scategory_set_mnemonics);