Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 121 lines (89 sloc) 4.831 kb
29ce360 Initial revision
Karl Heuer authored
1 /* Declarations having to do with Emacs category tables.
38d99f2 Update AIST copyright years.
Kenichi Handa authored
2 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
9caf530 @rgmorris Add 2011 to FSF/AIST copyright years.
rgmorris authored
3 2005, 2006, 2007, 2008, 2009, 2010, 2011
0ead724 Copyright fixed
Kenichi Handa authored
4 National Institute of Advanced Industrial Science and Technology (AIST)
5 Registration Number H14PRO021
6582fff *** empty log message ***
Kenichi Handa authored
6 Copyright (C) 2003
8d5afcd (CATEGORY_SET): Just call char_category_set.
Kenichi Handa authored
7 National Institute of Advanced Industrial Science and Technology (AIST)
8 Registration Number H13PRO009
29ce360 Initial revision
Karl Heuer authored
9
10 This file is part of GNU Emacs.
11
d7db995 @rgmorris Switch to recommended form of GPLv3 permissions notice.
rgmorris authored
12 GNU Emacs is free software: you can redistribute it and/or modify
29ce360 Initial revision
Karl Heuer authored
13 it under the terms of the GNU General Public License as published by
d7db995 @rgmorris Switch to recommended form of GPLv3 permissions notice.
rgmorris authored
14 the Free Software Foundation, either version 3 of the License, or
15 (at your option) any later version.
29ce360 Initial revision
Karl Heuer authored
16
17 GNU Emacs is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
21
22 You should have received a copy of the GNU General Public License
d7db995 @rgmorris Switch to recommended form of GPLv3 permissions notice.
rgmorris authored
23 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
29ce360 Initial revision
Karl Heuer authored
24
25
26 /* We introduce here three types of object: category, category set,
27 and category table.
28
29 A category is like syntax but differs in the following points:
30
31 o A category is represented by a mnemonic character of the range
32 ` '(32)..`~'(126) (printable ASCII characters).
33
34 o A category is not exclusive, i.e. a character has multiple
35 categories (category set). Of course, there's a case that a
36 category set is empty, i.e. the character has no category.
37
38 o In addition to the predefined categories, a user can define new
39 categories. Total number of categories is limited to 95.
40
41 A category set is a set of categories represented by Lisp
9aff3f4 Adjusted for the change of CHAR_TABLE_ORDINARY_SLOTS.
Kenichi Handa authored
42 bool-vector of length 128 (only elements of 31th through 126th
29ce360 Initial revision
Karl Heuer authored
43 are used).
44
45 A category table is like syntax-table, represented by a Lisp
46 char-table. The contents are category sets or nil. It has two
9aff3f4 Adjusted for the change of CHAR_TABLE_ORDINARY_SLOTS.
Kenichi Handa authored
47 extra slots, for a vector of doc string of each category and a
29ce360 Initial revision
Karl Heuer authored
48 version number.
49
50 The first extra slot is a vector of doc strings of categories, the
51 length is 95. The Nth element corresponding to the category N+32.
52
53 The second extra slot is a version number of the category table.
54 But, for the moment, we are not using this slot. */
55
56 #define CATEGORYP(x) \
57 (INTEGERP ((x)) && XFASTINT ((x)) >= 0x20 && XFASTINT ((x)) <= 0x7E)
58
c633de7 (CHECK_CATEGORY, CHECK_CATEGORY_SET): Use CHECK_TYPE.
Kim F. Storm authored
59 #define CHECK_CATEGORY(x) \
60 CHECK_TYPE (CATEGORYP (x), Qcategoryp, x)
29ce360 Initial revision
Karl Heuer authored
61
62 #define XCATEGORY_SET XBOOL_VECTOR
63
64 #define CATEGORY_SET_P(x) \
65 (BOOL_VECTOR_P ((x)) && (EMACS_INT) (XBOOL_VECTOR ((x))->size) == 128)
66
67 /* Return a new empty category set. */
68 #define MAKE_CATEGORY_SET (Fmake_bool_vector (make_number (128), Qnil))
69
70 /* Make CATEGORY_SET includes (if VAL is t) or excludes (if VAL is
71 nil) CATEGORY. */
72 #define SET_CATEGORY_SET(category_set, category, val) \
10fce15 (SET_CATEGORY_SET): Call set_category_set.
Kenichi Handa authored
73 (set_category_set (category_set, category, val))
29ce360 Initial revision
Karl Heuer authored
74
c633de7 (CHECK_CATEGORY, CHECK_CATEGORY_SET): Use CHECK_TYPE.
Kim F. Storm authored
75 #define CHECK_CATEGORY_SET(x) \
76 CHECK_TYPE (CATEGORY_SET_P (x), Qcategorysetp, x)
29ce360 Initial revision
Karl Heuer authored
77
78 /* Return 1 if CATEGORY_SET contains CATEGORY, else return 0.
79 The faster version of `!NILP (Faref (category_set, category))'. */
80 #define CATEGORY_MEMBER(category, category_set) \
52e8dfd @Corg-kun Fix bugs with inappropriate mixing of Lisp_Object with int.
Corg-kun authored
81 (XCATEGORY_SET (category_set)->data[(category) / 8] \
82 & (1 << ((category) % 8)))
29ce360 Initial revision
Karl Heuer authored
83
84 /* Temporary internal variable used in macro CHAR_HAS_CATEGORY. */
85 extern Lisp_Object _temp_category_set;
86
87 /* Return 1 if category set of CH contains CATEGORY, elt return 0. */
88 #define CHAR_HAS_CATEGORY(ch, category) \
89 (_temp_category_set = CATEGORY_SET (ch), \
90 CATEGORY_MEMBER (category, _temp_category_set))
91
92 /* The standard category table is stored where it will automatically
93 be used in all new buffers. */
94 #define Vstandard_category_table buffer_defaults.category_table
95
96 /* Return the category set of character C in the current category table. */
8d5afcd (CATEGORY_SET): Just call char_category_set.
Kenichi Handa authored
97 #define CATEGORY_SET(c) char_category_set (c)
29ce360 Initial revision
Karl Heuer authored
98
99 /* Return the doc string of CATEGORY in category table TABLE. */
100 #define CATEGORY_DOCSTRING(table, category) \
039fee8 @Corg-kun (CATEGORY_DOCSTRING): Convert Fchar_table_extra_slot
Corg-kun authored
101 XVECTOR (Fchar_table_extra_slot (table, make_number (0)))->contents[(category) - ' ']
29ce360 Initial revision
Karl Heuer authored
102
103 /* Return the version number of category table TABLE. Not used for
104 the moment. */
105 #define CATEGORY_TABLE_VERSION (table) \
039fee8 @Corg-kun (CATEGORY_DOCSTRING): Convert Fchar_table_extra_slot
Corg-kun authored
106 Fchar_table_extra_slot (table, make_number (1))
29ce360 Initial revision
Karl Heuer authored
107
108 /* Return 1 if there is a word boundary between two word-constituent
109 characters C1 and C2 if they appear in this order, else return 0.
72285a2 *** empty log message ***
Kenichi Handa authored
110 There is no word boundary between two word-constituent ASCII and
111 Latin-1 characters. */
29ce360 Initial revision
Karl Heuer authored
112 #define WORD_BOUNDARY_P(c1, c2) \
113 (!(SINGLE_BYTE_CHAR_P (c1) && SINGLE_BYTE_CHAR_P (c2)) \
114 && word_boundary_p (c1, c2))
4082ec5 Add declaration of word_boundary_p.
Andreas Schwab authored
115
116 extern int word_boundary_p P_ ((int, int));
10fce15 (SET_CATEGORY_SET): Call set_category_set.
Kenichi Handa authored
117 extern void set_category_set P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
bbe535d Sync to HEAD.
Kenichi Handa authored
118
119 /* arch-tag: 309dfe83-c3e2-4d22-8e81-faae5aece0ff
120 (do not change this comment) */
Something went wrong with that request. Please try again.