annotate src/syntax.h @ 823:4f043f6069e3

[xemacs-hg @ 2002-04-30 15:33:37 by stephent] update Hrvoje's image <87pu0hyziq.fsf@tleepslib.sk.tsukuba.ac.jp>
author stephent
date Tue, 30 Apr 2002 15:33:42 +0000
parents e38acbeb1cae
children 6728e641994e
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.
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
3 Copyright (C) 2002 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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 later version.
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 /* Synched up with: FSF 19.28. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
24 #ifndef INCLUDED_syntax_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
25 #define INCLUDED_syntax_h_
428
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 #include "chartab.h"
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 /* A syntax table is a type of char table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 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
32 used as the prefix bit flag (see below).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 The values in a syntax table are either integers or conses of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 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
36 class. If this is Sinherit, then the actual syntax value needs to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 be retrieved from the standard syntax table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 Since the logic involved in finding the actual integer isn't very
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 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
41 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
42 high number of times (many per character) that the syntax value is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 accessed in functions such as scan_lists(). To speed this up,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 we maintain a mirror syntax table that contains the actual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 integers. We can do this successfully because syntax tables are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 now an abstract type, where we control all access.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 */
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 enum syntaxcode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Swhitespace, /* whitespace character */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 Spunct, /* random punctuation character */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 Sword, /* word constituent */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 Ssymbol, /* symbol constituent but not word constituent */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Sopen, /* a beginning delimiter */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 Sclose, /* an ending delimiter */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 Squote, /* a prefix character like Lisp ' */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 Sstring, /* a string-grouping character like Lisp " */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 Smath, /* delimiters like $ in TeX. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 Sescape, /* a character that begins a C-style escape */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 Scharquote, /* a character that quotes the following character */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 Scomment, /* a comment-starting character */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 Sendcomment, /* a comment-ending character */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 Sinherit, /* use the standard syntax table for this character */
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
65 Scomment_fence, /* Starts/ends comment 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. */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
67 Sstring_fence, /* Starts/ends string which is delimited on the
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
68 other side by a char with the same syntaxcode. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 Smax /* Upper bound on codes that are meaningful */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 enum syntaxcode charset_syntax (struct buffer *buf, Lisp_Object charset,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 int *multi_p_out);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 /* Return the syntax code for a particular character and mirror table. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 #define SYNTAX_CODE_UNSAFE(table, c) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 XINT (CHAR_TABLE_VALUE_UNSAFE (table, c))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
80 INLINE_HEADER int SYNTAX_CODE (Lisp_Char_Table *table, Emchar c);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
81 INLINE_HEADER int
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
82 SYNTAX_CODE (Lisp_Char_Table *table, Emchar c)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 return SYNTAX_CODE_UNSAFE (table, c);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 #define SYNTAX_UNSAFE(table, c) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 ((enum syntaxcode) (SYNTAX_CODE_UNSAFE (table, c) & 0177))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 #define SYNTAX_FROM_CODE(code) ((enum syntaxcode) ((code) & 0177))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 #define SYNTAX(table, c) SYNTAX_FROM_CODE (SYNTAX_CODE (table, c))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
93 INLINE_HEADER int WORD_SYNTAX_P (Lisp_Char_Table *table, Emchar c);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
94 INLINE_HEADER int
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
95 WORD_SYNTAX_P (Lisp_Char_Table *table, Emchar c)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 return SYNTAX (table, c) == Sword;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 /* 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
101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 Bit number:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 [ 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
105 [ 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
106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 <-----> <-----> <-------------> <-------------> ^ <----------->
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 ELisp unused |comment bits | unused | syntax code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 tag | | | | | | | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 stuff | | | | | | | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 | | | | | | | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 | | | | | | | | `--> prefix flag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 | | | | | | | |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 | | | | | | | `--> comment end style B, second char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 | | | | | | `----> comment end style A, second char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 | | | | | `------> comment end style B, first char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 | | | | `--------> comment end style A, first char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 | | | `----------> comment start style B, second char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 | | `------------> comment start style A, second char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 | `--------------> comment start style B, first char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 `----------------> comment start style A, first char
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 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
124 the tag and the comment bits.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 Clearly, such a scheme will not work for Mule, because the matching
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 paren could be any character and as such requires 19 bits, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 we don't got.
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 Remember that under Mule we use char tables instead of vectors.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 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
132 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
133 code from having to worry about passing two tables around.)
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
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 /* 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
138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 #define SYNTAX_PREFIX_UNSAFE(table, c) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 ((SYNTAX_CODE_UNSAFE (table, c) >> 7) & 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 #define SYNTAX_PREFIX(table, c) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 ((SYNTAX_CODE (table, c) >> 7) & 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 /* Bits 23-16 are used to implement up to two comment styles
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 in a single buffer. They have the following meanings:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 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
148 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
149 3. second of a two-character comment-start sequence of style a.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 4. second of a two-character comment-start sequence of style b.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 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
152 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
153 7. second of a two-character comment-end sequence of style a.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 8. second of a two-character comment-end sequence of style b.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 #define SYNTAX_COMMENT_BITS(table, c) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 ((SYNTAX_CODE (table, c) >> 16) &0xff)
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 #define SYNTAX_FIRST_OF_START_A 0x80
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 #define SYNTAX_FIRST_OF_START_B 0x40
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 #define SYNTAX_SECOND_OF_START_A 0x20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 #define SYNTAX_SECOND_OF_START_B 0x10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 #define SYNTAX_FIRST_OF_END_A 0x08
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 #define SYNTAX_FIRST_OF_END_B 0x04
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 #define SYNTAX_SECOND_OF_END_A 0x02
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 #define SYNTAX_SECOND_OF_END_B 0x01
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 #define SYNTAX_COMMENT_STYLE_A 0xaa
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 #define SYNTAX_COMMENT_STYLE_B 0x55
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 #define SYNTAX_FIRST_CHAR_START 0xc0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 #define SYNTAX_FIRST_CHAR_END 0x0c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 #define SYNTAX_FIRST_CHAR 0xcc
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 #define SYNTAX_SECOND_CHAR_START 0x30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 #define SYNTAX_SECOND_CHAR_END 0x03
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 #define SYNTAX_SECOND_CHAR 0x33
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
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
179 /* #### These are now more or less equivalent to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
180 SYNTAX_COMMENT_MATCH_START ...*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
181 /* 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
182 #define SYNTAX_START_P(table, a, b) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
183 (((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_START) >> 2) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
184 & (SYNTAX_COMMENT_BITS (table, b) & SYNTAX_SECOND_CHAR_START))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
185
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
186 /* ... and SYNTAX_COMMENT_MATCH_END */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
187 /* 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
188 #define SYNTAX_END_P(table, a, b) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
189 (((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_END) >> 2) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
190 & (SYNTAX_COMMENT_BITS (table, b) & SYNTAX_SECOND_CHAR_END))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 #define SYNTAX_STYLES_MATCH_START_P(table, a, b, mask) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 ((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_START & (mask)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 && (SYNTAX_COMMENT_BITS (table, b) & SYNTAX_SECOND_CHAR_START & (mask)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 #define SYNTAX_STYLES_MATCH_END_P(table, a, b, mask) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 ((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_END & (mask)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 && (SYNTAX_COMMENT_BITS (table, b) & SYNTAX_SECOND_CHAR_END & (mask)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 #define SYNTAX_STYLES_MATCH_1CHAR_P(table, a, mask) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 ((SYNTAX_COMMENT_BITS (table, a) & (mask)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 #define STYLE_FOUND_P(table, a, b, startp, style) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 ((SYNTAX_COMMENT_BITS (table, a) & \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 ((startp) ? SYNTAX_FIRST_CHAR_START : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 SYNTAX_FIRST_CHAR_END) & (style)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 && (SYNTAX_COMMENT_BITS (table, b) & \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 ((startp) ? SYNTAX_SECOND_CHAR_START : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 SYNTAX_SECOND_CHAR_END) & (style)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 #define SYNTAX_COMMENT_MASK_START(table, a, b) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 ((STYLE_FOUND_P (table, a, b, 1, SYNTAX_COMMENT_STYLE_A) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 ? SYNTAX_COMMENT_STYLE_A \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 : (STYLE_FOUND_P (table, a, b, 1, SYNTAX_COMMENT_STYLE_B) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 ? SYNTAX_COMMENT_STYLE_B \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 : 0)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 #define SYNTAX_COMMENT_MASK_END(table, a, b) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 ((STYLE_FOUND_P (table, a, b, 0, SYNTAX_COMMENT_STYLE_A) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 ? SYNTAX_COMMENT_STYLE_A \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 : (STYLE_FOUND_P (table, a, b, 0, SYNTAX_COMMENT_STYLE_B) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 ? SYNTAX_COMMENT_STYLE_B \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 : 0)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 #define STYLE_FOUND_1CHAR_P(table, a, style) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 ((SYNTAX_COMMENT_BITS (table, a) & (style)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 #define SYNTAX_COMMENT_1CHAR_MASK(table, a) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 ((STYLE_FOUND_1CHAR_P (table, a, SYNTAX_COMMENT_STYLE_A) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 ? SYNTAX_COMMENT_STYLE_A \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 : (STYLE_FOUND_1CHAR_P (table, a, SYNTAX_COMMENT_STYLE_B) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 ? SYNTAX_COMMENT_STYLE_B \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 : 0)))
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 EXFUN (Fchar_syntax, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 EXFUN (Fforward_word, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 /* The standard syntax table is stored where it will automatically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 be used in all new buffers. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 extern Lisp_Object Vstandard_syntax_table;
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 /* This array, indexed by a character, contains the syntax code which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 that character signifies (as a char).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 For example, (enum syntaxcode) syntax_spec_code['w'] is Sword. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
246 extern const unsigned char syntax_spec_code[0400];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 /* Indexed by syntax code, give the letter that describes it. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
250 extern const unsigned char syntax_code_spec[];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 460
diff changeset
252 Lisp_Object scan_lists (struct buffer *buf, Charbpos from, int count,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 int depth, int sexpflag, int no_error);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 460
diff changeset
254 int char_quoted (struct buffer *buf, Charbpos pos);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 /* NOTE: This does not refer to the mirror table, but to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 syntax table itself. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 Lisp_Object syntax_match (Lisp_Object table, Emchar ch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 extern int no_quit_in_re_search;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 extern struct buffer *regex_emacs_buffer;
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
262
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
263 /* This is the string or buffer in which we are matching. It is used
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
264 for looking up syntax properties. */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
265 extern Lisp_Object regex_match_object;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
267 void update_syntax_table (Lisp_Char_Table *ct);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
269 #ifdef emacs
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
270
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
271 extern int lookup_syntax_properties;
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
272
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
273 struct syntax_cache
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
274 {
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
275 int use_code; /* Whether to use syntax_code
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
276 or current_syntax_table. */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
277 struct buffer* buffer; /* The buffer the current syntax cache
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
278 applies to. */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
279 Lisp_Object object; /* The buffer or string the current
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
280 syntax cache applies to. */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
281 int syntax_code; /* Syntax code of current char. */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
282 Lisp_Object current_syntax_table; /* Syntax table for current pos. */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
283 Lisp_Object old_prop; /* Syntax-table prop at prev pos. */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
284
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 460
diff changeset
285 Charbpos next_change; /* Position of the next extent
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
286 change. */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 460
diff changeset
287 Charbpos prev_change; /* Position of the previous
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
288 extent change. */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
289 };
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
290 extern struct syntax_cache syntax_cache;
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
291
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
292 void update_syntax_cache (int pos, int count, int init);
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
293
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
294 /* Make syntax cache state good for CHARPOS, assuming it is
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
295 currently good for a position before CHARPOS. */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
296 #define UPDATE_SYNTAX_CACHE_FORWARD(pos) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
297 (lookup_syntax_properties \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
298 ? (update_syntax_cache ((pos), 1, 0), 1) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
299 : 0)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
300
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
301 /* Make syntax cache state good for CHARPOS, assuming it is
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
302 currently good for a position after CHARPOS. */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
303 #define UPDATE_SYNTAX_CACHE_BACKWARD(pos) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
304 (lookup_syntax_properties \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
305 ? (update_syntax_cache ((pos), -1, 0), 1) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
306 : 0)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
307
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
308 /* Make syntax cache state good for CHARPOS */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
309 #define UPDATE_SYNTAX_CACHE(pos) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
310 (lookup_syntax_properties \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
311 ? (update_syntax_cache ((pos), 0, 0), 1) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
312 : 0)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
313
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
314 #define SYNTAX_FROM_CACHE(table, c) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
315 SYNTAX_FROM_CODE (SYNTAX_CODE_FROM_CACHE (table, c))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
316
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
317 #define SYNTAX_CODE_FROM_CACHE(table, c) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
318 ( syntax_cache.use_code \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
319 ? syntax_cache.syntax_code \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
320 : SYNTAX_CODE (XCHAR_TABLE (syntax_cache.current_syntax_table), \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
321 c) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
322 )
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
323
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
324 /* Convert the byte offset BYTEPOS into a character position,
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
325 for the object recorded in syntax_cache with SETUP_SYNTAX_TABLE_FOR_OBJECT.
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
326
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
327 The value is meant for use in the UPDATE_SYNTAX_TABLE... macros.
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
328 These macros do nothing when parse_sexp_lookup_properties is 0,
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
329 so we return 0 in that case, for speed. */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
330 #define SYNTAX_CACHE_BYTE_TO_CHAR(bytepos) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
331 (! lookup_syntax_properties \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
332 ? 0 \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
333 : STRINGP (syntax_cache.object) \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
334 ? string_index_byte_to_char (syntax_cache.object, bytepos) \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
335 : (BUFFERP (syntax_cache.object) || NILP (syntax_cache.object)) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
336 ? bytebpos_to_charbpos (syntax_cache.buffer, \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
337 bytepos + BI_BUF_BEGV (syntax_cache.buffer)) \
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
338 : (bytepos))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
339
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
340 #define SYNTAX_CACHE_OBJECT_BYTE_TO_CHAR(obj, buf, bytepos) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
341 (! lookup_syntax_properties \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
342 ? 0 \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
343 : STRINGP (obj) \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
344 ? string_index_byte_to_char (obj, bytepos) \
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
345 : (BUFFERP (obj) || NILP (obj)) \
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 460
diff changeset
346 ? bytebpos_to_charbpos (buf, bytepos + BI_BUF_BEGV (buf)) \
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
347 : (bytepos))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
348
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
349 #else /* not emacs */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
350
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
351 #define update_syntax_cache(pos, count, init)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
352 #define UPDATE_SYNTAX_CACHE_FORWARD(pos)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
353 #define UPDATE_SYNTAX_CACHE_BACKWARD(pos)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
354 #define UPDATE_SYNTAX_CACHE(pos)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
355 #define SYNTAX_FROM_CACHE SYNTAX
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
356 #define SYNTAX_CODE_FROM_CACHE SYNTAX_CODE
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
357
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
358 #endif /* emacs */
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
359
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
360 #define SETUP_SYNTAX_CACHE(FROM, COUNT) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
361 do { \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
362 syntax_cache.buffer = current_buffer; \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
363 syntax_cache.object = Qnil; \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
364 syntax_cache.current_syntax_table \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
365 = current_buffer->mirror_syntax_table; \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
366 syntax_cache.use_code = 0; \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
367 if (lookup_syntax_properties) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
368 update_syntax_cache ((COUNT) > 0 ? (FROM) : (FROM) - 1, \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
369 (COUNT), 1); \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
370 } while (0)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
371
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
372 #define SETUP_SYNTAX_CACHE_FOR_BUFFER(BUFFER, FROM, COUNT) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
373 do { \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
374 syntax_cache.buffer = (BUFFER); \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
375 syntax_cache.object = Qnil; \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
376 syntax_cache.current_syntax_table = \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
377 syntax_cache.buffer->mirror_syntax_table; \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
378 syntax_cache.use_code = 0; \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
379 if (lookup_syntax_properties) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
380 update_syntax_cache ((FROM) + ((COUNT) > 0 ? 0 : -1), \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
381 (COUNT), 1); \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
382 } while (0)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
383
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
384 #define SETUP_SYNTAX_CACHE_FOR_OBJECT(OBJECT, BUFFER, FROM, COUNT) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
385 do { \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
386 syntax_cache.buffer = (BUFFER); \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
387 syntax_cache.object = (OBJECT); \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
388 if (NILP (syntax_cache.object)) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
389 { \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
390 /* do nothing */; \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
391 } \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
392 else if (EQ (syntax_cache.object, Qt)) \
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 /* do nothing */; \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
395 } \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
396 else if (STRINGP (syntax_cache.object)) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
397 { \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
398 /* do nothing */; \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
399 } \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
400 else if (BUFFERP (syntax_cache.object)) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
401 { \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
402 syntax_cache.buffer = XBUFFER (syntax_cache.object); \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
403 } \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
404 else \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
405 { \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
406 /* OBJECT must be buffer/string/t/nil */ \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
407 assert(0); \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
408 } \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
409 syntax_cache.current_syntax_table \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
410 = syntax_cache.buffer->mirror_syntax_table; \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
411 syntax_cache.use_code = 0; \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
412 if (lookup_syntax_properties) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
413 update_syntax_cache ((FROM) + ((COUNT) > 0 ? 0 : -1), \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
414 (COUNT), 1); \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
415 } while (0)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
416
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
417 #define SYNTAX_CODE_PREFIX(c) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
418 ((c >> 7) & 1)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
419
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
420 #define SYNTAX_CODE_COMMENT_BITS(c) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
421 ((c >> 16) &0xff)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
422
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
423 #define SYNTAX_CODES_START_P(a, b) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
424 (((SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_FIRST_CHAR_START) >> 2) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
425 & (SYNTAX_CODE_COMMENT_BITS (b) & SYNTAX_SECOND_CHAR_START))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
426
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
427 #define SYNTAX_CODES_END_P(a, b) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
428 (((SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_FIRST_CHAR_END) >> 2) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
429 & (SYNTAX_CODE_COMMENT_BITS (b) & SYNTAX_SECOND_CHAR_END))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
430
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
431 #define SYNTAX_CODES_COMMENT_MASK_START(a, b) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
432 (SYNTAX_CODES_MATCH_START_P (a, b, SYNTAX_COMMENT_STYLE_A) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
433 ? SYNTAX_COMMENT_STYLE_A \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
434 : (SYNTAX_CODES_MATCH_START_P (a, b, SYNTAX_COMMENT_STYLE_B) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
435 ? SYNTAX_COMMENT_STYLE_B \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
436 : 0))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
437 #define SYNTAX_CODES_COMMENT_MASK_END(a, b) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
438 (SYNTAX_CODES_MATCH_END_P (a, b, SYNTAX_COMMENT_STYLE_A) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
439 ? SYNTAX_COMMENT_STYLE_A \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
440 : (SYNTAX_CODES_MATCH_END_P (a, b, SYNTAX_COMMENT_STYLE_B) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
441 ? SYNTAX_COMMENT_STYLE_B \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
442 : 0))
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_CODE_START_FIRST_P(a) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
445 (SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_FIRST_CHAR_START)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
446
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
447 #define SYNTAX_CODE_START_SECOND_P(a) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
448 (SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_SECOND_CHAR_START)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
449
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
450 #define SYNTAX_CODE_END_FIRST_P(a) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
451 (SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_FIRST_CHAR_END)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
452
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
453 #define SYNTAX_CODE_END_SECOND_P(a) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
454 (SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_SECOND_CHAR_END)
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
455
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_CODES_MATCH_START_P(a, b, mask) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
458 ((SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_FIRST_CHAR_START & (mask)) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
459 && (SYNTAX_CODE_COMMENT_BITS (b) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
460 & SYNTAX_SECOND_CHAR_START & (mask)))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
461
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
462 #define SYNTAX_CODES_MATCH_END_P(a, b, mask) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
463 ((SYNTAX_CODE_COMMENT_BITS (a) & SYNTAX_FIRST_CHAR_END & (mask)) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
464 && (SYNTAX_CODE_COMMENT_BITS (b) & SYNTAX_SECOND_CHAR_END & (mask)))
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_MATCHES_1CHAR_P(a, mask) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
467 ((SYNTAX_CODE_COMMENT_BITS (a) & (mask)))
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 #define SYNTAX_CODE_COMMENT_1CHAR_MASK(a) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
470 ((SYNTAX_CODE_MATCHES_1CHAR_P (a, SYNTAX_COMMENT_STYLE_A) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
471 ? SYNTAX_COMMENT_STYLE_A \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
472 : (SYNTAX_CODE_MATCHES_1CHAR_P (a, SYNTAX_COMMENT_STYLE_B) \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
473 ? SYNTAX_COMMENT_STYLE_B \
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
474 : 0)))
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
475
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
476
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
477 #endif /* INCLUDED_syntax_h_ */