annotate src/syntax.h @ 5518:3cc7470ea71c

gnuclient: if TMPDIR was set and connect failed, try again with /tmp 2011-06-03 Aidan Kehoe <kehoea@parhasard.net> * gnuslib.c (connect_to_unix_server): Retry with /tmp as a directory in which to search for Unix sockets if an attempt to connect with some other directory failed (which may be because gnuclient and gnuserv don't share an environment value for TMPDIR, or because gnuserv was compiled with USE_TMPDIR turned off).
author Aidan Kehoe <kehoea@parhasard.net>
date Fri, 03 Jun 2011 18:40:57 +0100
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_ */