This source file includes following definitions.
- syntax_property_entry
- SYNTAX_ENTRY
- syntax_property_with_flags
- SYNTAX_WITH_FLAGS
- syntax_property
- SYNTAX
- SYNTAX_TABLE_BYTE_TO_CHAR
- UPDATE_SYNTAX_TABLE_FORWARD
- UPDATE_SYNTAX_TABLE_BACKWARD
- UPDATE_SYNTAX_TABLE
- SETUP_BUFFER_SYNTAX_TABLE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #ifndef EMACS_SYNTAX_H
22 #define EMACS_SYNTAX_H
23
24 #include "buffer.h"
25 #include "lisp.h"
26
27 INLINE_HEADER_BEGIN
28
29 extern void update_syntax_table (ptrdiff_t, EMACS_INT, bool, Lisp_Object);
30 extern void update_syntax_table_forward (ptrdiff_t, bool, Lisp_Object);
31
32
33
34 #define Vstandard_syntax_table BVAR (&buffer_defaults, syntax_table)
35
36
37
38
39
40
41
42 enum syntaxcode
43 {
44 Swhitespace,
45 Spunct,
46 Sword,
47 Ssymbol,
48 Sopen,
49 Sclose,
50 Squote,
51 Sstring,
52 Smath,
53 Sescape,
54 Scharquote,
55 Scomment,
56 Sendcomment,
57 Sinherit,
58 Scomment_fence,
59
60 Sstring_fence,
61
62 Smax
63 };
64
65
66 struct gl_state_s
67 {
68 Lisp_Object object;
69 ptrdiff_t start;
70 ptrdiff_t stop;
71 bool use_global;
72
73 Lisp_Object global_code;
74 Lisp_Object current_syntax_table;
75 Lisp_Object old_prop;
76 ptrdiff_t b_property;
77 ptrdiff_t e_property;
78
79 bool e_property_truncated;
80
81 INTERVAL forward_i;
82 INTERVAL backward_i;
83
84
85
86
87
88
89 ptrdiff_t offset;
90 };
91
92 extern struct gl_state_s gl_state;
93
94
95
96
97
98
99 INLINE Lisp_Object
100 syntax_property_entry (int c, bool via_property)
101 {
102 if (via_property)
103 return (gl_state.use_global
104 ? gl_state.global_code
105 : CHAR_TABLE_REF (gl_state.current_syntax_table, c));
106 return CHAR_TABLE_REF (BVAR (current_buffer, syntax_table), c);
107 }
108 INLINE Lisp_Object
109 SYNTAX_ENTRY (int c)
110 {
111 return syntax_property_entry (c, false);
112 }
113
114
115
116
117 INLINE int
118 syntax_property_with_flags (int c, bool via_property)
119 {
120 Lisp_Object ent = syntax_property_entry (c, via_property);
121 return CONSP (ent) ? XFIXNUM (XCAR (ent)) : Swhitespace;
122 }
123 INLINE int
124 SYNTAX_WITH_FLAGS (int c)
125 {
126 return syntax_property_with_flags (c, false);
127 }
128
129 INLINE enum syntaxcode
130 syntax_property (int c, bool via_property)
131 {
132 return syntax_property_with_flags (c, via_property) & 0xff;
133 }
134 INLINE enum syntaxcode
135 SYNTAX (int c)
136 {
137 return syntax_property (c, false);
138 }
139
140
141
142 extern bool syntax_prefix_flag_p (int c);
143
144
145
146
147
148 extern unsigned char const syntax_spec_code[0400];
149
150
151
152
153
154
155
156
157 INLINE ptrdiff_t
158 SYNTAX_TABLE_BYTE_TO_CHAR (ptrdiff_t bytepos)
159 {
160 return (! parse_sexp_lookup_properties
161 ? 0
162 : STRINGP (gl_state.object)
163 ? string_byte_to_char (gl_state.object, bytepos)
164 : BUFFERP (gl_state.object)
165 ? ((buf_bytepos_to_charpos
166 (XBUFFER (gl_state.object),
167 (bytepos + BUF_BEGV_BYTE (XBUFFER (gl_state.object)) - 1)))
168 - BUF_BEGV (XBUFFER (gl_state.object)) + 1)
169 : NILP (gl_state.object)
170 ? BYTE_TO_CHAR (bytepos + BEGV_BYTE - 1) - BEGV + 1
171 : bytepos);
172 }
173
174
175
176
177 INLINE void
178 UPDATE_SYNTAX_TABLE_FORWARD (ptrdiff_t charpos)
179 {
180 if (parse_sexp_lookup_properties && charpos >= gl_state.e_property)
181 update_syntax_table_forward (charpos + gl_state.offset,
182 false, gl_state.object);
183 }
184
185
186
187
188 INLINE void
189 UPDATE_SYNTAX_TABLE_BACKWARD (ptrdiff_t charpos)
190 {
191 if (parse_sexp_lookup_properties && charpos < gl_state.b_property)
192 update_syntax_table (charpos + gl_state.offset, -1, false, gl_state.object);
193 }
194
195
196
197 INLINE void
198 UPDATE_SYNTAX_TABLE (ptrdiff_t charpos)
199 {
200 UPDATE_SYNTAX_TABLE_BACKWARD (charpos);
201 UPDATE_SYNTAX_TABLE_FORWARD (charpos);
202 }
203
204
205
206 INLINE void
207 SETUP_BUFFER_SYNTAX_TABLE (void)
208 {
209 gl_state.use_global = false;
210 gl_state.e_property_truncated = false;
211 gl_state.current_syntax_table = BVAR (current_buffer, syntax_table);
212 }
213
214 extern ptrdiff_t scan_words (ptrdiff_t, EMACS_INT);
215 extern void SETUP_SYNTAX_TABLE_FOR_OBJECT (Lisp_Object, ptrdiff_t, ptrdiff_t);
216
217 INLINE_HEADER_END
218
219 #endif