annotate src/syntax.h @ 5475:248176c74e6b

Merge with trunk.
author Mats Lidell <matsl@xemacs.org>
date Sat, 23 Apr 2011 23:47:13 +0200
parents 308d34e9f07d
children dab422055bab
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Declarations having to do with XEmacs syntax tables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1985, 1992, 1993 Free Software Foundation, Inc.
1296
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
3 Copyright (C) 2002, 2003 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5127
diff changeset
7 XEmacs is free software: you can redistribute it and/or modify it
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5127
diff changeset
9 Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5127
diff changeset
10 option) any later version.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5127
diff changeset
18 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 /* Synched up with: FSF 19.28. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
22 #ifndef INCLUDED_syntax_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
23 #define INCLUDED_syntax_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 #include "chartab.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 /* A syntax table is a type of char table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 The low 7 bits of the integer is a code, as follows. The 8th bit is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 used as the prefix bit flag (see below).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 The values in a syntax table are either integers or conses of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 integers and chars. The lowest 7 bits of the integer are the syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 class. If this is Sinherit, then the actual syntax value needs to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 be retrieved from the standard syntax table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 Since the logic involved in finding the actual integer isn't very
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 complex, you'd think the time required to retrieve it is not a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 factor. If you thought that, however, you'd be wrong, due to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 high number of times (many per character) that the syntax value is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 accessed in functions such as scan_lists(). To speed this up,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 we maintain a mirror syntax table that contains the actual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 integers. We can do this successfully because syntax tables are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 now an abstract type, where we control all access.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 enum syntaxcode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 Swhitespace, /* whitespace character */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 Spunct, /* random punctuation character */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Sword, /* word constituent */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 Ssymbol, /* symbol constituent but not word constituent */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 Sopen, /* a beginning delimiter */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 Sclose, /* an ending delimiter */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Squote, /* a prefix character like Lisp ' */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 Sstring, /* a string-grouping character like Lisp " */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 Smath, /* delimiters like $ in TeX. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 Sescape, /* a character that begins a C-style escape */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 Scharquote, /* a character that quotes the following character */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 Scomment, /* a comment-starting character */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 Sendcomment, /* a comment-ending character */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 Sinherit, /* use the standard syntax table for this character */
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
63 Scomment_fence, /* Starts/ends comment which is delimited on the
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
64 other side by a char with the same syntaxcode. */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
65 Sstring_fence, /* Starts/ends string which is delimited on the
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
66 other side by a char with the same syntaxcode. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 Smax /* Upper bound on codes that are meaningful */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 enum syntaxcode charset_syntax (struct buffer *buf, Lisp_Object charset,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 int *multi_p_out);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72
1296
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
73 void update_syntax_table (Lisp_Object table);
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
74
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
75 DECLARE_INLINE_HEADER (
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
76 void
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
77 update_mirror_syntax_if_dirty (Lisp_Object table)
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
78 )
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
79 {
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
80 if (XCHAR_TABLE (table)->dirty)
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
81 update_syntax_table (table);
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
82 }
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
83
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 /* Return the syntax code for a particular character and mirror table. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85
1296
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
86 DECLARE_INLINE_HEADER (
1315
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
87 int
1296
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
88 SYNTAX_CODE (Lisp_Object table, Ichar c)
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
89 )
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
90 {
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
91 type_checking_assert (XCHAR_TABLE (table)->mirror_table_p);
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
92 update_mirror_syntax_if_dirty (table);
1315
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
93 return XINT (get_char_table_1 (c, table));
1296
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
94 }
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
95
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
96 #ifdef NOT_WORTH_THE_EFFORT
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
97
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
98 /* Same but skip the dirty check. */
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
99
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
100 DECLARE_INLINE_HEADER (
1315
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
101 int
1296
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
102 SYNTAX_CODE_1 (Lisp_Object table, Ichar c)
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
103 )
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
104 {
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
105 type_checking_assert (XCHAR_TABLE (table)->mirror_table_p);
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
106 return (enum syntaxcode) XINT (get_char_table_1 (c, table));
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
107 }
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
108
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
109 #endif /* NOT_WORTH_THE_EFFORT */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 #define SYNTAX_FROM_CODE(code) ((enum syntaxcode) ((code) & 0177))
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
112
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 #define SYNTAX(table, c) SYNTAX_FROM_CODE (SYNTAX_CODE (table, c))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
115 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
116 int
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
117 WORD_SYNTAX_P (Lisp_Object table, Ichar c)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
118 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 return SYNTAX (table, c) == Sword;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 /* OK, here's a graphic diagram of the format of the syntax values:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 Bit number:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 [ 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 ]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 [ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 ]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 <-----> <-----> <-------------> <-------------> ^ <----------->
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 ELisp unused |comment bits | unused | syntax code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 tag | | | | | | | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 stuff | | | | | | | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 | | | | | | | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 | | | | | | | | `--> prefix flag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 | | | | | | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 | | | | | | | `--> comment end style B, second char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 | | | | | | `----> comment end style A, second char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 | | | | | `------> comment end style B, first char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 | | | | `--------> comment end style A, first char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 | | | `----------> comment start style B, second char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 | | `------------> comment start style A, second char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 | `--------------> comment start style B, first char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 `----------------> comment start style A, first char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 In a 64-bit integer, there would be 32 more unused bits between
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 the tag and the comment bits.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 Clearly, such a scheme will not work for Mule, because the matching
3498
b03fc4eae965 [xemacs-hg @ 2006-07-08 16:15:54 by aidan]
aidan
parents: 3250
diff changeset
150 paren could be any character and as such requires 21 bits, which
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 we don't got.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 Remember that under Mule we use char tables instead of vectors.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 So what we do is use another char table for the matching paren
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 and store a pointer to it in the first char table. (This frees
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 code from having to worry about passing two tables around.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 /* The prefix flag bit for backward-prefix-chars is now put into bit 7. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 #define SYNTAX_PREFIX(table, c) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 ((SYNTAX_CODE (table, c) >> 7) & 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 /* Bits 23-16 are used to implement up to two comment styles
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 in a single buffer. They have the following meanings:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 1. first of a one or two character comment-start sequence of style a.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 2. first of a one or two character comment-start sequence of style b.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 3. second of a two-character comment-start sequence of style a.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 4. second of a two-character comment-start sequence of style b.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 5. first of a one or two character comment-end sequence of style a.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 6. first of a one or two character comment-end sequence of style b.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 7. second of a two-character comment-end sequence of style a.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 8. second of a two-character comment-end sequence of style b.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 #define SYNTAX_COMMENT_BITS(table, c) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 ((SYNTAX_CODE (table, c) >> 16) &0xff)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 #define SYNTAX_FIRST_OF_START_A 0x80
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 #define SYNTAX_FIRST_OF_START_B 0x40
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 #define SYNTAX_SECOND_OF_START_A 0x20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 #define SYNTAX_SECOND_OF_START_B 0x10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 #define SYNTAX_FIRST_OF_END_A 0x08
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 #define SYNTAX_FIRST_OF_END_B 0x04
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 #define SYNTAX_SECOND_OF_END_A 0x02
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 #define SYNTAX_SECOND_OF_END_B 0x01
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 #define SYNTAX_COMMENT_STYLE_A 0xaa
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 #define SYNTAX_COMMENT_STYLE_B 0x55
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 #define SYNTAX_FIRST_CHAR_START 0xc0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 #define SYNTAX_FIRST_CHAR_END 0x0c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 #define SYNTAX_FIRST_CHAR 0xcc
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 #define SYNTAX_SECOND_CHAR_START 0x30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 #define SYNTAX_SECOND_CHAR_END 0x03
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 #define SYNTAX_SECOND_CHAR 0x33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
199 #if 0
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
200
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
201 /* #### Entirely unused. Should they be deleted? */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
203 /* #### These are now more or less equivalent to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
204 SYNTAX_COMMENT_MATCH_START ...*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
205 /* a and b must be first and second start chars for a common type */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
206 #define SYNTAX_START_P(table, a, b) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
207 (((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_START) >> 2) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
208 & (SYNTAX_COMMENT_BITS (table, b) & SYNTAX_SECOND_CHAR_START))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
209
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
210 /* ... and SYNTAX_COMMENT_MATCH_END */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
211 /* a and b must be first and second end chars for a common type */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
212 #define SYNTAX_END_P(table, a, b) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
213 (((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_END) >> 2) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
214 & (SYNTAX_COMMENT_BITS (table, b) & SYNTAX_SECOND_CHAR_END))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 #define SYNTAX_STYLES_MATCH_START_P(table, a, b, mask) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 ((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_START & (mask)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 && (SYNTAX_COMMENT_BITS (table, b) & SYNTAX_SECOND_CHAR_START & (mask)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 #define SYNTAX_STYLES_MATCH_END_P(table, a, b, mask) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 ((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_END & (mask)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 && (SYNTAX_COMMENT_BITS (table, b) & SYNTAX_SECOND_CHAR_END & (mask)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 #define SYNTAX_STYLES_MATCH_1CHAR_P(table, a, mask) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 ((SYNTAX_COMMENT_BITS (table, a) & (mask)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 #define STYLE_FOUND_P(table, a, b, startp, style) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 ((SYNTAX_COMMENT_BITS (table, a) & \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 ((startp) ? SYNTAX_FIRST_CHAR_START : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 SYNTAX_FIRST_CHAR_END) & (style)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 && (SYNTAX_COMMENT_BITS (table, b) & \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 ((startp) ? SYNTAX_SECOND_CHAR_START : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 SYNTAX_SECOND_CHAR_END) & (style)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 #define SYNTAX_COMMENT_MASK_START(table, a, b) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 ((STYLE_FOUND_P (table, a, b, 1, SYNTAX_COMMENT_STYLE_A) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 ? SYNTAX_COMMENT_STYLE_A \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 : (STYLE_FOUND_P (table, a, b, 1, SYNTAX_COMMENT_STYLE_B) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 ? SYNTAX_COMMENT_STYLE_B \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 : 0)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 #define SYNTAX_COMMENT_MASK_END(table, a, b) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 ((STYLE_FOUND_P (table, a, b, 0, SYNTAX_COMMENT_STYLE_A) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 ? SYNTAX_COMMENT_STYLE_A \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 : (STYLE_FOUND_P (table, a, b, 0, SYNTAX_COMMENT_STYLE_B) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 ? SYNTAX_COMMENT_STYLE_B \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 : 0)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 #define STYLE_FOUND_1CHAR_P(table, a, style) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 ((SYNTAX_COMMENT_BITS (table, a) & (style)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 #define SYNTAX_COMMENT_1CHAR_MASK(table, a) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 ((STYLE_FOUND_1CHAR_P (table, a, SYNTAX_COMMENT_STYLE_A) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 ? SYNTAX_COMMENT_STYLE_A \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 : (STYLE_FOUND_1CHAR_P (table, a, SYNTAX_COMMENT_STYLE_B) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 ? SYNTAX_COMMENT_STYLE_B \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 : 0)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
259 #endif /* 0 */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 /* This array, indexed by a character, contains the syntax code which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 that character signifies (as a char).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 For example, (enum syntaxcode) syntax_spec_code['w'] is Sword. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
265 extern const unsigned char syntax_spec_code[0400];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 /* Indexed by syntax code, give the letter that describes it. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
269 extern const unsigned char syntax_code_spec[];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 460
diff changeset
271 Lisp_Object scan_lists (struct buffer *buf, Charbpos from, int count,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 int depth, int sexpflag, int no_error);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 460
diff changeset
273 int char_quoted (struct buffer *buf, Charbpos pos);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 /* NOTE: This does not refer to the mirror table, but to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 syntax table itself. */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
277 Lisp_Object syntax_match (Lisp_Object table, Ichar ch);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 extern int no_quit_in_re_search;
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
280
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
281
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
282 /****************************** syntax caches ********************************/
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
283
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
284 extern int lookup_syntax_properties;
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
285
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
286 /* Now that the `syntax-table' property exists, and can override the syntax
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
287 table or directly specify the syntax, we cache the last place we
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
288 retrieved the syntax-table property. This is because, when moving
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
289 linearly through text (e.g. in the regex routines or the scanning
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
290 routines in syntax.c), we only need to recalculate at the next place the
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
291 syntax-table property changes (i.e. not every position), and when we do
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
292 need to recalculate, we can update the info from the previous info
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
293 faster than if we did the whole calculation from scratch. */
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
294 struct syntax_cache
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
295 {
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
296 #ifdef NEW_GC
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5120
diff changeset
297 NORMAL_LISP_OBJECT_HEADER header;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
298 #endif /* NEW_GC */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
299 int use_code; /* Whether to use syntax_code or
1296
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
300 syntax_table. This is set
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
301 depending on whether the
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
302 syntax-table property is a
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
303 syntax table or a syntax
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
304 code. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
305 int no_syntax_table_prop; /* If non-zero, there was no
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
306 `syntax-table' property on the
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
307 current range, and so we're
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
308 using the buffer's syntax table.
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
309 This is important to note because
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
310 sometimes the buffer's syntax
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
311 table can be changed. */
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
312 Lisp_Object object; /* The buffer or string the current
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
313 syntax cache applies to, or
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
314 Qnil for a string of text not
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
315 coming from a buffer or string. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
316 struct buffer *buffer; /* The buffer that supplies the
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
317 syntax tables, or 0 for the
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
318 standard syntax table. If
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
319 OBJECT is a buffer, this will
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
320 always be the same buffer. */
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
321 int syntax_code; /* Syntax code of current char. */
1296
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
322 Lisp_Object syntax_table; /* Syntax table for current pos. */
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
323 Lisp_Object mirror_table; /* Mirror table for this table. */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
324 Lisp_Object start, end; /* Markers to keep track of the
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
325 known region in a buffer.
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
326 Formerly we used an internal
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
327 extent, but it seems that having
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
328 an extent over the entire buffer
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
329 causes serious slowdowns in
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
330 extent operations! Yuck! */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
331 Charxpos next_change; /* Position of the next extent
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
332 change. */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
333 Charxpos prev_change; /* Position of the previous extent
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
334 change. */
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
335 };
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
336
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
337 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
338 typedef struct syntax_cache Lisp_Syntax_Cache;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
339
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 3498
diff changeset
340 DECLARE_LISP_OBJECT (syntax_cache, Lisp_Syntax_Cache);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
341
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
342 #define XSYNTAX_CACHE(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
343 XRECORD (x, syntax_cache, Lisp_Syntax_Cache)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
344 #define wrap_syntax_cache(p) wrap_record (p, syntax_cache)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
345 #define SYNTAX_CACHE_P(x) RECORDP (x, syntax_cache)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
346 #define CHECK_SYNTAX_CACHE(x) CHECK_RECORD (x, syntax_cache)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
347 #define CONCHECK_SYNTAX_CACHE(x) CONCHECK_RECORD (x, syntax_cache)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
348 #endif /* NEW_GC */
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
349
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
350
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 1315
diff changeset
351
1296
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
352 extern const struct sized_memory_description syntax_cache_description;
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
353
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
354 /* Note that the external interface to the syntax-cache uses charpos's, but
3250
2b8bb4938bb4 [xemacs-hg @ 2006-02-21 11:33:41 by stephent]
stephent
parents: 3092
diff changeset
355 internally we use bytepos's, for speed. */
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
356
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
357 void update_syntax_cache (struct syntax_cache *cache, Charxpos pos, int count);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
358 struct syntax_cache *setup_syntax_cache (struct syntax_cache *cache,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
359 Lisp_Object object,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
360 struct buffer *buffer,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
361 Charxpos from, int count);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
362 struct syntax_cache *setup_buffer_syntax_cache (struct buffer *buffer,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
363 Charxpos from, int count);
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
364
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
365 /* Make syntax cache state good for CHARPOS, assuming it is
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
366 currently good for a position before CHARPOS. */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
367 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
368 void
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
369 UPDATE_SYNTAX_CACHE_FORWARD (struct syntax_cache *cache, Charxpos pos)
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
370 )
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
371 {
1315
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
372 /* #### Formerly this function, and the next one, had
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
373
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
374 if (pos < cache->prev_change || pos >= cache->next_change)
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
375
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
376 just like for plain UPDATE_SYNTAX_CACHE. However, sometimes the
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
377 value of POS may be invalid (particularly, it may be 0 for a buffer).
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
378 FSF has the check at only one end, so let's try the same. */
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
379 if (pos >= cache->next_change)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
380 update_syntax_cache (cache, pos, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
381 }
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
382
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
383 /* Make syntax cache state good for CHARPOS, assuming it is
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
384 currently good for a position after CHARPOS. */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
385 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
386 void
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
387 UPDATE_SYNTAX_CACHE_BACKWARD (struct syntax_cache *cache, Charxpos pos)
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
388 )
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
389 {
1315
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
390 if (pos < cache->prev_change)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
391 update_syntax_cache (cache, pos, -1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
392 }
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
393
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
394 /* Make syntax cache state good for CHARPOS */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
395 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
396 void
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
397 UPDATE_SYNTAX_CACHE (struct syntax_cache *cache, Charxpos pos)
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
398 )
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
399 {
1315
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1296
diff changeset
400 if (pos < cache->prev_change || pos >= cache->next_change)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
401 update_syntax_cache (cache, pos, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
402 }
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
403
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
404 #define SYNTAX_FROM_CACHE(cache, c) \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
405 SYNTAX_FROM_CODE (SYNTAX_CODE_FROM_CACHE (cache, c))
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
406
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
407 #define SYNTAX_CODE_FROM_CACHE(cache, c) \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
408 ((cache)->use_code ? (cache)->syntax_code \
1296
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
409 : SYNTAX_CODE ((cache)->mirror_table, c))
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
410
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
411 #ifdef NOT_WORTH_THE_EFFORT
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
412 /* If we really cared about the theoretical performance hit of the dirty
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
413 check in SYNTAX_CODE, we could use SYNTAX_CODE_1 and endeavor to always
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
414 keep the mirror table clean, e.g. by checking for dirtiness at the time
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
415 we set up the syntax cache. There are lots of potential problems, of
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
416 course -- incomplete understanding of the possible pathways into the
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
417 code, with some that are bypassing the setups, Lisp code being executed
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
418 in the meantime that could change things (e.g. QUIT is called in many
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
419 functions and could execute arbitrary Lisp very easily), etc. The QUIT
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
420 problem is the biggest one, probably, and one of the main reasons it's
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
421 probably just not worth it. */
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
422 #define SYNTAX_CODE_FROM_CACHE(cache, c) \
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
423 ((cache)->use_code ? (cache)->syntax_code \
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
424 : SYNTAX_CODE_1 ((cache)->mirror_table, c))
87084e8445a7 [xemacs-hg @ 2003-02-14 09:50:15 by ben]
ben
parents: 867
diff changeset
425 #endif
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
426
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
427
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 793
diff changeset
428 /***************************** syntax code macros ****************************/
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
429
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
430 #define SYNTAX_CODE_PREFIX(c) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
431 ((c >> 7) & 1)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
432
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
433 #define SYNTAX_CODE_COMMENT_BITS(c) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
434 ((c >> 16) &0xff)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
435
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
436 #define SYNTAX_CODES_START_P(a, b) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
437 (((SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_FIRST_CHAR_START) >> 2) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
438 & (SYNTAX_CODE_COMMENT_BITS (b) & SYNTAX_SECOND_CHAR_START))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
439
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
440 #define SYNTAX_CODES_END_P(a, b) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
441 (((SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_FIRST_CHAR_END) >> 2) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
442 & (SYNTAX_CODE_COMMENT_BITS (b) & SYNTAX_SECOND_CHAR_END))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
443
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
444 #define SYNTAX_CODES_COMMENT_MASK_START(a, b) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
445 (SYNTAX_CODES_MATCH_START_P (a, b, SYNTAX_COMMENT_STYLE_A) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
446 ? SYNTAX_COMMENT_STYLE_A \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
447 : (SYNTAX_CODES_MATCH_START_P (a, b, SYNTAX_COMMENT_STYLE_B) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
448 ? SYNTAX_COMMENT_STYLE_B \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
449 : 0))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
450 #define SYNTAX_CODES_COMMENT_MASK_END(a, b) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
451 (SYNTAX_CODES_MATCH_END_P (a, b, SYNTAX_COMMENT_STYLE_A) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
452 ? SYNTAX_COMMENT_STYLE_A \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
453 : (SYNTAX_CODES_MATCH_END_P (a, b, SYNTAX_COMMENT_STYLE_B) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
454 ? SYNTAX_COMMENT_STYLE_B \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
455 : 0))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
456
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
457 #define SYNTAX_CODE_START_FIRST_P(a) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
458 (SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_FIRST_CHAR_START)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
459
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
460 #define SYNTAX_CODE_START_SECOND_P(a) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
461 (SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_SECOND_CHAR_START)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
462
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
463 #define SYNTAX_CODE_END_FIRST_P(a) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
464 (SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_FIRST_CHAR_END)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
465
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
466 #define SYNTAX_CODE_END_SECOND_P(a) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
467 (SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_SECOND_CHAR_END)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
468
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
469
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
470 #define SYNTAX_CODES_MATCH_START_P(a, b, mask) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
471 ((SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_FIRST_CHAR_START & (mask)) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
472 && (SYNTAX_CODE_COMMENT_BITS (b) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
473 & SYNTAX_SECOND_CHAR_START & (mask)))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
474
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
475 #define SYNTAX_CODES_MATCH_END_P(a, b, mask) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
476 ((SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_FIRST_CHAR_END & (mask)) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
477 && (SYNTAX_CODE_COMMENT_BITS (b) & SYNTAX_SECOND_CHAR_END & (mask)))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
478
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
479 #define SYNTAX_CODE_MATCHES_1CHAR_P(a, mask) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
480 ((SYNTAX_CODE_COMMENT_BITS (a) & (mask)))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
481
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
482 #define SYNTAX_CODE_COMMENT_1CHAR_MASK(a) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
483 ((SYNTAX_CODE_MATCHES_1CHAR_P (a, SYNTAX_COMMENT_STYLE_A) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
484 ? SYNTAX_COMMENT_STYLE_A \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
485 : (SYNTAX_CODE_MATCHES_1CHAR_P (a, SYNTAX_COMMENT_STYLE_B) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
486 ? SYNTAX_COMMENT_STYLE_B \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
487 : 0)))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
488
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
489
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
490 #endif /* INCLUDED_syntax_h_ */