annotate src/category.c @ 24841:d2d412758428

(clear_cached_bitmap_slots): Remove. (get_bitmap_with_cache): Check if CreateBitmap failed. Adjust cache size dynamically so cache is never larger than the system limit of GDI resources. Do cache clearing inline. Move global variables to local scope.
author Jason Rumney <jasonr@gnu.org>
date Sun, 13 Jun 1999 17:49:12 +0000
parents 63628f8fe648
children 0a7261c1d487
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1 /* GNU Emacs routines to deal with category tables.
18341
33e78cc7f058 Change copyright notices.
Richard M. Stallman <rms@gnu.org>
parents: 17787
diff changeset
2 Copyright (C) 1995, 1997 Electrotechnical Laboratory, JAPAN.
33e78cc7f058 Change copyright notices.
Richard M. Stallman <rms@gnu.org>
parents: 17787
diff changeset
3 Licensed to the Free Software Foundation.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5 This file is part of GNU Emacs.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10 any later version.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
11
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
15 GNU General Public License for more details.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
16
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
17071
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
20 Boston, MA 02111-1307, USA. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
21
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
22
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
23 /* Here we handle three objects: category, category set, and category
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
24 table. Read comments in the file category.h to understand them. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
25
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
26 #include <config.h>
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
27 #include <ctype.h>
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
28 #include "lisp.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
29 #include "buffer.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
30 #include "charset.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
31 #include "category.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
32
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
33 /* The version number of the latest category table. Each category
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
34 table has a unique version number. It is assigned a new number
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
35 also when it is modified. When a regular expression is compiled
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
36 into the struct re_pattern_buffer, the version number of the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
37 category table (of the current buffer) at that moment is also
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
38 embedded in the structure.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
39
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
40 For the moment, we are not using this feature. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
41 static int category_table_version;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
42
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
43 Lisp_Object Qcategory_table, Qcategoryp, Qcategorysetp, Qcategory_table_p;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
44
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
45 /* Variables to determine word boundary. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
46 Lisp_Object Vword_combining_categories, Vword_separating_categories;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
47
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
48 /* Temporary internal variable used in macro CHAR_HAS_CATEGORY. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
49 Lisp_Object _temp_category_set;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
50
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
51
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
52 /* Category set staff. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
53
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
54 DEFUN ("make-category-set", Fmake_category_set, Smake_category_set, 1, 1, 0,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
55 "Return a newly created category-set which contains CATEGORIES.\n\
20825
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
56 CATEGORIES is a string of category mnemonics.\n\
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
57 The value is a bool-vector which has t at the indices corresponding to\n\
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
58 those categories.")
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
59 (categories)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
60 Lisp_Object categories;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
61 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
62 Lisp_Object val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
63 int len;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
64
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
65 CHECK_STRING (categories, 0);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
66 val = MAKE_CATEGORY_SET;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
67
20612
5a0922f8c841 (Fmake_category_set): Don't allow multibyte string.
Richard M. Stallman <rms@gnu.org>
parents: 20189
diff changeset
68 if (STRING_MULTIBYTE (categories))
5a0922f8c841 (Fmake_category_set): Don't allow multibyte string.
Richard M. Stallman <rms@gnu.org>
parents: 20189
diff changeset
69 error ("Multibyte string in make-category-set");
5a0922f8c841 (Fmake_category_set): Don't allow multibyte string.
Richard M. Stallman <rms@gnu.org>
parents: 20189
diff changeset
70
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
71 len = XSTRING (categories)->size;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
72 while (--len >= 0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
73 {
17369
566b26e1930e (Fmake_category_set): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 17324
diff changeset
74 Lisp_Object category;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
75
17369
566b26e1930e (Fmake_category_set): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 17324
diff changeset
76 XSETFASTINT (category, XSTRING (categories)->data[len]);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
77 CHECK_CATEGORY (category, 0);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
78 SET_CATEGORY_SET (val, category, Qt);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
79 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
80 return val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
81 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
82
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
83
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
84 /* Category staff. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
85
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
86 Lisp_Object check_category_table ();
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
87
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
88 DEFUN ("define-category", Fdefine_category, Sdefine_category, 2, 3, 0,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
89 "Define CHAR as a category which is described by DOCSTRING.\n\
20825
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
90 CHAR should be an ASCII printing character in the range ` ' to `~'.\n\
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
91 DOCSTRING is a documentation string of the category.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
92 The category is defined only in category table TABLE, which defaults to\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
93 the current buffer's category table.")
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
94 (category, docstring, table)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
95 Lisp_Object category, docstring, table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
96 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
97 CHECK_CATEGORY (category, 0);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
98 CHECK_STRING (docstring, 1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
99 table = check_category_table (table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
100
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
101 if (!NILP (CATEGORY_DOCSTRING (table, XFASTINT (category))))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
102 error ("Category `%c' is already defined", XFASTINT (category));
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
103 CATEGORY_DOCSTRING (table, XFASTINT (category)) = docstring;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
104
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
105 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
106 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
107
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
108 DEFUN ("category-docstring", Fcategory_docstring, Scategory_docstring, 1, 2, 0,
20825
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
109 "Return the documentation string of CATEGORY, as defined in CATEGORY-TABLE.")
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
110 (category, table)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
111 Lisp_Object category, table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
112 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
113 Lisp_Object doc;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
114
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
115 CHECK_CATEGORY (category, 0);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
116 table = check_category_table (table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
117
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
118 return CATEGORY_DOCSTRING (table, XFASTINT (category));
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
119 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
120
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
121 DEFUN ("get-unused-category", Fget_unused_category, Sget_unused_category,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
122 0, 1, 0,
20825
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
123 "Return a category which is not yet defined in CATEGORY-TABLE.\n\
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
124 If no category remains available, return nil.\n\
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
125 The optional argument CATEGORY-TABLE specifies which category table\n\
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
126 to modify; it defaults to the current buffer's category table.")
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
127 (table)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
128 Lisp_Object table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
129 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
130 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
131 Lisp_Object docstring_vector;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
132
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
133 table = check_category_table (table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
134
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
135 for (i = ' '; i <= '~'; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
136 if (NILP (CATEGORY_DOCSTRING (table, i)))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
137 return make_number (i);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
138
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
139 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
140 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
141
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
142
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
143 /* Category-table staff. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
144
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
145 DEFUN ("category-table-p", Fcategory_table_p, Scategory_table_p, 1, 1, 0,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
146 "Return t if ARG is a category table.")
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
147 (arg)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
148 Lisp_Object arg;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
149 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
150 if (CHAR_TABLE_P (arg)
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
151 && EQ (XCHAR_TABLE (arg)->purpose, Qcategory_table))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
152 return Qt;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
153 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
154 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
155
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
156 /* If TABLE is nil, return the current category table. If TABLE is
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
157 not nil, check the validity of TABLE as a category table. If
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
158 valid, return TABLE itself, but if not valid, signal an error of
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
159 wrong-type-argument. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
160
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
161 Lisp_Object
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
162 check_category_table (table)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
163 Lisp_Object table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
164 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
165 register Lisp_Object tem;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
166 if (NILP (table))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
167 return current_buffer->category_table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
168 while (tem = Fcategory_table_p (table), NILP (tem))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
169 table = wrong_type_argument (Qcategory_table_p, table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
170 return table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
171 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
172
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
173 DEFUN ("category-table", Fcategory_table, Scategory_table, 0, 0, 0,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
174 "Return the current category table.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
175 This is the one specified by the current buffer.")
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
176 ()
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
177 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
178 return current_buffer->category_table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
179 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
180
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
181 DEFUN ("standard-category-table", Fstandard_category_table,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
182 Sstandard_category_table, 0, 0, 0,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
183 "Return the standard category table.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
184 This is the one used for new buffers.")
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
185 ()
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
186 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
187 return Vstandard_category_table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
188 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
189
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
190 /* Return a copy of category table TABLE. We can't simply use the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
191 function copy-sequence because no contents should be shared between
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
192 the original and the copy. This function is called recursively by
20189
16f5b56c2f68 (copy_category_table): Copy also the first extra slot
Kenichi Handa <handa@m17n.org>
parents: 19659
diff changeset
193 binding TABLE to a sub char table. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
194
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
195 Lisp_Object
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
196 copy_category_table (table)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
197 Lisp_Object table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
198 {
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
199 Lisp_Object tmp;
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
200 int i, to;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
201
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
202 if (!NILP (XCHAR_TABLE (table)->top))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
203 {
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
204 /* TABLE is a top level char table.
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
205 At first, make a copy of tree structure of the table. */
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
206 table = Fcopy_sequence (table);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
207
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
208 /* Then, copy elements for single byte characters one by one. */
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
209 for (i = 0; i < CHAR_TABLE_SINGLE_BYTE_SLOTS; i++)
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
210 if (!NILP (tmp = XCHAR_TABLE (table)->contents[i]))
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
211 XCHAR_TABLE (table)->contents[i] = Fcopy_sequence (tmp);
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
212 to = CHAR_TABLE_ORDINARY_SLOTS;
20189
16f5b56c2f68 (copy_category_table): Copy also the first extra slot
Kenichi Handa <handa@m17n.org>
parents: 19659
diff changeset
213
16f5b56c2f68 (copy_category_table): Copy also the first extra slot
Kenichi Handa <handa@m17n.org>
parents: 19659
diff changeset
214 /* Also copy the first (and sole) extra slot. It is a vector
16f5b56c2f68 (copy_category_table): Copy also the first extra slot
Kenichi Handa <handa@m17n.org>
parents: 19659
diff changeset
215 containing docstring of each category. */
16f5b56c2f68 (copy_category_table): Copy also the first extra slot
Kenichi Handa <handa@m17n.org>
parents: 19659
diff changeset
216 Fset_char_table_extra_slot
16f5b56c2f68 (copy_category_table): Copy also the first extra slot
Kenichi Handa <handa@m17n.org>
parents: 19659
diff changeset
217 (table, make_number (0),
16f5b56c2f68 (copy_category_table): Copy also the first extra slot
Kenichi Handa <handa@m17n.org>
parents: 19659
diff changeset
218 Fcopy_sequence (Fchar_table_extra_slot (table, make_number (0))));
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
219 }
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
220 else
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
221 {
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
222 i = 32;
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
223 to = SUB_CHAR_TABLE_ORDINARY_SLOTS;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
224 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
225
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
226 /* If the table has non-nil default value, copy it. */
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
227 if (!NILP (tmp = XCHAR_TABLE (table)->defalt))
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
228 XCHAR_TABLE (table)->defalt = Fcopy_sequence (tmp);
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
229
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
230 /* At last, copy the remaining elements while paying attention to a
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
231 sub char table. */
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
232 for (; i < to; i++)
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
233 if (!NILP (tmp = XCHAR_TABLE (table)->contents[i]))
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
234 XCHAR_TABLE (table)->contents[i]
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
235 = (SUB_CHAR_TABLE_P (tmp)
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
236 ? copy_category_table (tmp) : Fcopy_sequence (tmp));
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
237
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
238 return table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
239 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
240
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
241 DEFUN ("copy-category-table", Fcopy_category_table, Scopy_category_table,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
242 0, 1, 0,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
243 "Construct a new category table and return it.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
244 It is a copy of the TABLE, which defaults to the standard category table.")
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
245 (table)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
246 Lisp_Object table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
247 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
248 if (!NILP (table))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
249 check_category_table (table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
250 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
251 table = Vstandard_category_table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
252
20189
16f5b56c2f68 (copy_category_table): Copy also the first extra slot
Kenichi Handa <handa@m17n.org>
parents: 19659
diff changeset
253 return copy_category_table (table);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
254 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
255
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
256 DEFUN ("set-category-table", Fset_category_table, Sset_category_table, 1, 1, 0,
20825
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
257 "Specify TABLE as the category table for the current buffer.")
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
258 (table)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
259 Lisp_Object table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
260 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
261 table = check_category_table (table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
262 current_buffer->category_table = table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
263 /* Indicate that this buffer now has a specified category table. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
264 current_buffer->local_var_flags
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
265 |= XFASTINT (buffer_local_flags.category_table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
266 return table;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
267 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
268
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
269
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
270 DEFUN ("char-category-set", Fchar_category_set, Schar_category_set, 1, 1, 0,
20825
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
271 "Return the category set of CHAR.")
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
272 (ch)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
273 Lisp_Object ch;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
274 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
275 Lisp_Object val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
276 int charset;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
277 unsigned char c1, c2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
278
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
279 CHECK_NUMBER (ch, 0);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
280 return CATEGORY_SET (XFASTINT (ch));
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
281 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
282
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
283 DEFUN ("category-set-mnemonics", Fcategory_set_mnemonics,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
284 Scategory_set_mnemonics, 1, 1, 0,
20825
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
285 "Return a string containing mnemonics of the categories in CATEGORY-SET.\n\
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
286 CATEGORY-SET is a bool-vector, and the categories \"in\" it are those\n\
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
287 that are indexes where t occurs the bool-vector.\n\
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
288 The return value is a string containing those same categories.")
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
289 (category_set)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
290 Lisp_Object category_set;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
291 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
292 int i, j;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
293 char str[96];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
294
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
295 CHECK_CATEGORY_SET (category_set, 0);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
296
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
297 j = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
298 for (i = 32; i < 127; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
299 if (CATEGORY_MEMBER (i, category_set))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
300 str[j++] = i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
301 str[j] = '\0';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
302
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
303 return build_string (str);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
304 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
305
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
306 /* Modify all category sets stored under sub char-table TABLE so that
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
307 they contain (SET_VALUE is t) or don't contain (SET_VALUE is nil)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
308 CATEGORY. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
309
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
310 void
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
311 modify_lower_category_set (table, category, set_value)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
312 Lisp_Object table, category, set_value;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
313 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
314 Lisp_Object val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
315 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
316
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
317 if (NILP (XCHAR_TABLE (table)->defalt))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
318 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
319 val = MAKE_CATEGORY_SET;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
320 SET_CATEGORY_SET (val, category, set_value);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
321 XCHAR_TABLE (table)->defalt = val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
322 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
323
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
324 for (i = 32; i < SUB_CHAR_TABLE_ORDINARY_SLOTS; i++)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
325 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
326 val = XCHAR_TABLE (table)->contents[i];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
327
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
328 if (CATEGORY_SET_P (val))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
329 SET_CATEGORY_SET (val, category, set_value);
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
330 else if (SUB_CHAR_TABLE_P (val))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
331 modify_lower_category_set (val, category, set_value);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
332 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
333 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
334
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
335 void
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
336 set_category_set (category_set, category, val)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
337 Lisp_Object category_set, category, val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
338 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
339 do {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
340 int idx = XINT (category) / 8;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
341 unsigned char bits = 1 << (XINT (category) % 8);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
342
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
343 if (NILP (val))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
344 XCATEGORY_SET (category_set)->data[idx] &= ~bits;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
345 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
346 XCATEGORY_SET (category_set)->data[idx] |= bits;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
347 } while (0);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
348 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
349
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
350 DEFUN ("modify-category-entry", Fmodify_category_entry,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
351 Smodify_category_entry, 2, 4, 0,
20825
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
352 "Modify the category set of CHARACTER by adding CATEGORY to it.\n\
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
353 The category is changed only for table TABLE, which defaults to\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
354 the current buffer's category table.\n\
20825
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
355 If optional fourth argument RESET is non-nil,\n\
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
356 then delete CATEGORY from the category set instead of adding it.")
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
357 (character, category, table, reset)
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
358 Lisp_Object character, category, table, reset;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
359 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
360 int c, charset, c1, c2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
361 Lisp_Object set_value; /* Actual value to be set in category sets. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
362 Lisp_Object val, category_set;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
363
20825
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
364 CHECK_NUMBER (character, 0);
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
365 c = XINT (character);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
366 CHECK_CATEGORY (category, 1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
367 table = check_category_table (table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
368
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
369 if (NILP (CATEGORY_DOCSTRING (table, XFASTINT (category))))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
370 error ("Undefined category: %c", XFASTINT (category));
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
371
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
372 set_value = NILP (reset) ? Qt : Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
373
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
374 if (c < CHAR_TABLE_SINGLE_BYTE_SLOTS)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
375 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
376 val = XCHAR_TABLE (table)->contents[c];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
377 if (!CATEGORY_SET_P (val))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
378 XCHAR_TABLE (table)->contents[c] = (val = MAKE_CATEGORY_SET);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
379 SET_CATEGORY_SET (val, category, set_value);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
380 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
381 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
382
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
383 SPLIT_NON_ASCII_CHAR (c, charset, c1, c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
384
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
385 /* The top level table. */
17187
9ab0c08a3359 Adjusted for the change of CHAR_TABLE_ORDINARY_SLOTS.
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
386 val = XCHAR_TABLE (table)->contents[charset + 128];
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
387 if (CATEGORY_SET_P (val))
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
388 category_set = val;
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
389 else if (!SUB_CHAR_TABLE_P (val))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
390 {
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
391 category_set = val = MAKE_CATEGORY_SET;
17187
9ab0c08a3359 Adjusted for the change of CHAR_TABLE_ORDINARY_SLOTS.
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
392 XCHAR_TABLE (table)->contents[charset + 128] = category_set;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
393 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
394
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
395 if (c1 <= 0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
396 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
397 /* Only a charset is specified. */
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
398 if (SUB_CHAR_TABLE_P (val))
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
399 /* All characters in CHARSET should be the same as for having
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
400 CATEGORY or not. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
401 modify_lower_category_set (val, category, set_value);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
402 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
403 SET_CATEGORY_SET (category_set, category, set_value);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
404 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
405 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
406
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
407 /* The second level table. */
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
408 if (!SUB_CHAR_TABLE_P (val))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
409 {
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
410 val = make_sub_char_table (Qnil);
17187
9ab0c08a3359 Adjusted for the change of CHAR_TABLE_ORDINARY_SLOTS.
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
411 XCHAR_TABLE (table)->contents[charset + 128] = val;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
412 /* We must set default category set of CHARSET in `defalt' slot. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
413 XCHAR_TABLE (val)->defalt = category_set;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
414 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
415 table = val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
416
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
417 val = XCHAR_TABLE (table)->contents[c1];
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
418 if (CATEGORY_SET_P (val))
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
419 category_set = val;
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
420 else if (!SUB_CHAR_TABLE_P (val))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
421 {
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
422 category_set = val = Fcopy_sequence (XCHAR_TABLE (table)->defalt);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
423 XCHAR_TABLE (table)->contents[c1] = category_set;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
424 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
425
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
426 if (c2 <= 0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
427 {
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
428 if (SUB_CHAR_TABLE_P (val))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
429 /* All characters in C1 group of CHARSET should be the same as
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
430 for CATEGORY. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
431 modify_lower_category_set (val, category, set_value);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
432 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
433 SET_CATEGORY_SET (category_set, category, set_value);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
434 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
435 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
436
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
437 /* The third (bottom) level table. */
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
438 if (!SUB_CHAR_TABLE_P (val))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
439 {
17459
22fc94ab9e79 (Fmodify_category_entry): Delete second arg in call to make_sub_char_table.
Karl Heuer <kwzh@gnu.org>
parents: 17369
diff changeset
440 val = make_sub_char_table (Qnil);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
441 XCHAR_TABLE (table)->contents[c1] = val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
442 /* We must set default category set of CHARSET and C1 in
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
443 `defalt' slot. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
444 XCHAR_TABLE (val)->defalt = category_set;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
445 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
446 table = val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
447
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
448 val = XCHAR_TABLE (table)->contents[c2];
17324
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
449 if (CATEGORY_SET_P (val))
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
450 category_set = val;
ed53084a1655 (category-table-p): Check only type and purpose.
Kenichi Handa <handa@m17n.org>
parents: 17187
diff changeset
451 else if (!SUB_CHAR_TABLE_P (val))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
452 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
453 category_set = Fcopy_sequence (XCHAR_TABLE (table)->defalt);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
454 XCHAR_TABLE (table)->contents[c2] = category_set;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
455 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
456 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
457 /* This should never happen. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
458 error ("Invalid category table");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
459
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
460 SET_CATEGORY_SET (category_set, category, set_value);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
461
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
462 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
463 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
464
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
465 /* Dump category table to buffer in human-readable format */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
466
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
467 static void
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
468 describe_category (value)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
469 Lisp_Object value;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
470 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
471 Lisp_Object mnemonics;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
472
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
473 Findent_to (make_number (16), make_number (1));
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
474
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
475 if (NILP (value))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
476 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
477 insert_string ("default\n");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
478 return;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
479 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
480
19659
315acc2627fe (describe_category): Handle a sub-chartable.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
481 if (CHAR_TABLE_P (value))
315acc2627fe (describe_category): Handle a sub-chartable.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
482 {
315acc2627fe (describe_category): Handle a sub-chartable.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
483 insert_string ("deeper char-table ...\n");
315acc2627fe (describe_category): Handle a sub-chartable.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
484 return;
315acc2627fe (describe_category): Handle a sub-chartable.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
485 }
315acc2627fe (describe_category): Handle a sub-chartable.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
486
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
487 if (!CATEGORY_SET_P (value))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
488 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
489 insert_string ("invalid\n");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
490 return;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
491 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
492
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
493 mnemonics = Fcategory_set_mnemonics (value);
20612
5a0922f8c841 (Fmake_category_set): Don't allow multibyte string.
Richard M. Stallman <rms@gnu.org>
parents: 20189
diff changeset
494 insert_from_string (mnemonics, 0, 0, XSTRING (mnemonics)->size,
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20825
diff changeset
495 STRING_BYTES (XSTRING (mnemonics)), 0);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
496 insert_string ("\n");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
497 return;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
498 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
499
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
500 static Lisp_Object
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
501 describe_category_1 (vector)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
502 Lisp_Object vector;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
503 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
504 struct buffer *old = current_buffer;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
505 set_buffer_internal (XBUFFER (Vstandard_output));
17787
eacf563a6d0d (describe_category_1): Pass new args to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 17459
diff changeset
506 describe_vector (vector, Qnil, describe_category, 0, Qnil, Qnil,
eacf563a6d0d (describe_category_1): Pass new args to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 17459
diff changeset
507 (int *)0, 0);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
508 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
509 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
510 Lisp_Object docs = XCHAR_TABLE (vector)->extras[0];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
511 Lisp_Object elt;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
512
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
513 if (!VECTORP (docs) || XVECTOR (docs)->size != 95)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
514 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
515 insert_string ("Invalid first extra slot in this char table\n");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
516 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
517 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
518
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
519 insert_string ("Meanings of mnemonice characters are:\n");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
520 for (i = 0; i < 95; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
521 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
522 elt = XVECTOR (docs)->contents[i];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
523 if (NILP (elt))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
524 continue;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
525
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
526 insert_char (i + 32);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
527 insert (": ", 2);
20612
5a0922f8c841 (Fmake_category_set): Don't allow multibyte string.
Richard M. Stallman <rms@gnu.org>
parents: 20189
diff changeset
528 insert_from_string (elt, 0, 0, XSTRING (elt)->size,
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20825
diff changeset
529 STRING_BYTES (XSTRING (elt)), 0);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
530 insert ("\n", 1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
531 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
532 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
533
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
534 while (! NILP (XCHAR_TABLE (vector)->parent))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
535 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
536 vector = XCHAR_TABLE (vector)->parent;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
537 insert_string ("\nThe parent category table is:");
17787
eacf563a6d0d (describe_category_1): Pass new args to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 17459
diff changeset
538 describe_vector (vector, Qnil, describe_category, 0, Qnil, Qnil,
eacf563a6d0d (describe_category_1): Pass new args to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 17459
diff changeset
539 (int *) 0, 0);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
540 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
541
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
542 call0 (intern ("help-mode"));
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
543 set_buffer_internal (old);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
544 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
545 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
546
20825
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
547 DEFUN ("describe-categories", Fdescribe_categories, Sdescribe_categories, 0, 0, "",
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
548 "Describe the category specifications in the current category table.\n\
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
549 The descriptions are inserted in a buffer, which is then displayed.")
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
550 ()
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
551 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
552 internal_with_output_to_temp_buffer
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
553 ("*Help*", describe_category_1, current_buffer->category_table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
554
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
555 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
556 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
557
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
558 /* Return 1 if there is a word boundary between two word-constituent
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
559 characters C1 and C2 if they appear in this order, else return 0.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
560 Use the macro WORD_BOUNDARY_P instead of calling this function
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
561 directly. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
562
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
563 int
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
564 word_boundary_p (c1, c2)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
565 int c1, c2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
566 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
567 Lisp_Object category_set1, category_set2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
568 Lisp_Object tail;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
569 int default_result;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
570
23755
63628f8fe648 (word_boundary_p): If C1 or C2 are composite
Kenichi Handa <handa@m17n.org>
parents: 23543
diff changeset
571 if (COMPOSITE_CHAR_P (c1))
63628f8fe648 (word_boundary_p): If C1 or C2 are composite
Kenichi Handa <handa@m17n.org>
parents: 23543
diff changeset
572 c1 = cmpchar_component (c1, 0, 1);
63628f8fe648 (word_boundary_p): If C1 or C2 are composite
Kenichi Handa <handa@m17n.org>
parents: 23543
diff changeset
573 if (COMPOSITE_CHAR_P (c2))
63628f8fe648 (word_boundary_p): If C1 or C2 are composite
Kenichi Handa <handa@m17n.org>
parents: 23543
diff changeset
574 c2 = cmpchar_component (c2, 0, 1);
63628f8fe648 (word_boundary_p): If C1 or C2 are composite
Kenichi Handa <handa@m17n.org>
parents: 23543
diff changeset
575
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
576 if (CHAR_CHARSET (c1) == CHAR_CHARSET (c2))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
577 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
578 tail = Vword_separating_categories;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
579 default_result = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
580 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
581 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
582 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
583 tail = Vword_combining_categories;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
584 default_result = 1;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
585 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
586
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
587 category_set1 = CATEGORY_SET (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
588 if (NILP (category_set1))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
589 return default_result;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
590 category_set2 = CATEGORY_SET (c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
591 if (NILP (category_set2))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
592 return default_result;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
593
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
594 for (; CONSP (tail); tail = XCONS (tail)->cdr)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
595 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
596 Lisp_Object elt = XCONS(tail)->car;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
597
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
598 if (CONSP (elt)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
599 && CATEGORYP (XCONS (elt)->car)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
600 && CATEGORYP (XCONS (elt)->cdr)
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18341
diff changeset
601 && CATEGORY_MEMBER (XFASTINT (XCONS (elt)->car), category_set1)
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18341
diff changeset
602 && CATEGORY_MEMBER (XFASTINT (XCONS (elt)->cdr), category_set2))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
603 return !default_result;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
604 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
605 return default_result;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
606 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
607
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
608
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
609 void
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
610 init_category_once ()
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
611 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
612 /* This has to be done here, before we call Fmake_char_table. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
613 Qcategory_table = intern ("category-table");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
614 staticpro (&Qcategory_table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
615
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
616 /* Intern this now in case it isn't already done.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
617 Setting this variable twice is harmless.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
618 But don't staticpro it here--that is done in alloc.c. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
619 Qchar_table_extra_slots = intern ("char-table-extra-slots");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
620
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
621 /* Now we are ready to set up this property, so we can
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
622 create category tables. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
623 Fput (Qcategory_table, Qchar_table_extra_slots, make_number (2));
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
624
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
625 Vstandard_category_table = Fmake_char_table (Qcategory_table, Qnil);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
626 /* Set a category set which contains nothing to the default. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
627 XCHAR_TABLE (Vstandard_category_table)->defalt = MAKE_CATEGORY_SET;
20189
16f5b56c2f68 (copy_category_table): Copy also the first extra slot
Kenichi Handa <handa@m17n.org>
parents: 19659
diff changeset
628 Fset_char_table_extra_slot (Vstandard_category_table, make_number (0),
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
629 Fmake_vector (make_number (95), Qnil));
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
630 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
631
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
632 void
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
633 syms_of_category ()
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
634 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
635 Qcategoryp = intern ("categoryp");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
636 staticpro (&Qcategoryp);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
637 Qcategorysetp = intern ("categorysetp");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
638 staticpro (&Qcategorysetp);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
639 Qcategory_table_p = intern ("category-table-p");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
640 staticpro (&Qcategory_table_p);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
641
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
642 DEFVAR_LISP ("word-combining-categories", &Vword_combining_categories,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
643 "List of pair (cons) of categories to determine word boundary.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
644 \n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
645 Emacs treats a sequence of word constituent characters as a single\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
646 word (i.e. finds no word boundary between them) iff they belongs to\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
647 the same charset. But, exceptions are allowed in the following cases.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
648 \n\
23543
6f3b920860e5 (syms_of_category): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
649 \(1) The case that characters are in different charsets is controlled\n\
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
650 by the variable `word-combining-categories'.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
651 \n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
652 Emacs finds no word boundary between characters of different charsets\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
653 if they have categories matching some element of this list.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
654 \n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
655 More precisely, if an element of this list is a cons of category CAT1\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
656 and CAT2, and a multibyte character C1 which has CAT1 is followed by\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
657 C2 which has CAT2, there's no word boundary between C1 and C2.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
658 \n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
659 For instance, to tell that ASCII characters and Latin-1 characters can\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
660 form a single word, the element `(?l . ?l)' should be in this list\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
661 because both characters have the category `l' (Latin characters).\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
662 \n\
23543
6f3b920860e5 (syms_of_category): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
663 \(2) The case that character are in the same charset is controlled by\n\
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
664 the variable `word-separating-categories'.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
665 \n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
666 Emacs find a word boundary between characters of the same charset\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
667 if they have categories matching some element of this list.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
668 \n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
669 More precisely, if an element of this list is a cons of category CAT1\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
670 and CAT2, and a multibyte character C1 which has CAT1 is followed by\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
671 C2 which has CAT2, there's a word boundary between C1 and C2.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
672 \n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
673 For instance, to tell that there's a word boundary between Japanese\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
674 Hiragana and Japanese Kanji (both are in the same charset), the\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
675 element `(?H . ?C) should be in this list.");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
676
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
677 Vword_combining_categories = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
678
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
679 DEFVAR_LISP ("word-separating-categories", &Vword_separating_categories,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
680 "List of pair (cons) of categories to determine word boundary.\n\
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
681 See the documentation of the variable `word-combining-categories'.");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
682
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
683 Vword_separating_categories = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
684
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
685 defsubr (&Smake_category_set);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
686 defsubr (&Sdefine_category);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
687 defsubr (&Scategory_docstring);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
688 defsubr (&Sget_unused_category);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
689 defsubr (&Scategory_table_p);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
690 defsubr (&Scategory_table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
691 defsubr (&Sstandard_category_table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
692 defsubr (&Scopy_category_table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
693 defsubr (&Sset_category_table);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
694 defsubr (&Schar_category_set);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
695 defsubr (&Scategory_set_mnemonics);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
696 defsubr (&Smodify_category_entry);
20825
1b98a0ab1bee (Fmodify_category_entry): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20612
diff changeset
697 defsubr (&Sdescribe_categories);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
698
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
699 category_table_version = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
700 }