annotate src/syntax.h @ 516:8a4db099aa97

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