Mercurial > emacs
annotate src/textprop.c @ 1990:c7d6c746fea6
Use the term `scroll bar', instead of `scrollbar'.
* alloc.c, frame.c, frame.h, indent.c, keyboard.c, keyboard.h,
lisp.h, term.c, termhooks.h, window.c, window.h, xdisp.c, xfns.c,
xterm.c, xterm.h: Terminology changed.
* xterm.c (x_window_to_scrollbar, x_scrollbar_expose,
x_scrollbar_handle_click, x_scrollbar_note_movement): Remember
that these can be called during GC; we have to ignore mark bits.
* lisp.h (GC_NILP, GC_EQ): New macros to help with that.
* lisp.h (RETURN_UNGCPRO): Remove "do ... while (0)" wrapper
around macro.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Tue, 02 Mar 1993 08:16:00 +0000 |
parents | 2bdbd6ed2430 |
children | 8bdcc55ebd8f |
rev | line source |
---|---|
1029 | 1 /* Interface code for dealing with text properties. |
2 Copyright (C) 1992 Free Software Foundation, Inc. | |
3 | |
4 This file is part of GNU Emacs. | |
5 | |
6 GNU Emacs is free software; you can redistribute it and/or modify | |
7 it under the terms of the GNU General Public License as published by | |
8 the Free Software Foundation; either version 1, or (at your option) | |
9 any later version. | |
10 | |
11 GNU Emacs is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GNU Emacs; see the file COPYING. If not, write to | |
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |
19 | |
20 #include "config.h" | |
21 #include "lisp.h" | |
22 #include "intervals.h" | |
23 #include "buffer.h" | |
24 | |
25 | |
26 /* NOTES: previous- and next- property change will have to skip | |
27 zero-length intervals if they are implemented. This could be done | |
28 inside next_interval and previous_interval. | |
29 | |
1211 | 30 set_properties needs to deal with the interval property cache. |
31 | |
1029 | 32 It is assumed that for any interval plist, a property appears |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
33 only once on the list. Although some code i.e., remove_properties, |
1029 | 34 handles the more general case, the uniqueness of properties is |
35 neccessary for the system to remain consistent. This requirement | |
36 is enforced by the subrs installing properties onto the intervals. */ | |
37 | |
1302
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
38 /* The rest of the file is within this conditional */ |
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
39 #ifdef USE_TEXT_PROPERTIES |
1029 | 40 |
41 /* Types of hooks. */ | |
42 Lisp_Object Qmouse_left; | |
43 Lisp_Object Qmouse_entered; | |
44 Lisp_Object Qpoint_left; | |
45 Lisp_Object Qpoint_entered; | |
46 Lisp_Object Qmodification; | |
47 | |
48 /* Visual properties text (including strings) may have. */ | |
49 Lisp_Object Qforeground, Qbackground, Qfont, Qunderline, Qstipple; | |
50 Lisp_Object Qinvisible, Qread_only; | |
51 | |
1055 | 52 /* Extract the interval at the position pointed to by BEGIN from |
53 OBJECT, a string or buffer. Additionally, check that the positions | |
54 pointed to by BEGIN and END are within the bounds of OBJECT, and | |
55 reverse them if *BEGIN is greater than *END. The objects pointed | |
56 to by BEGIN and END may be integers or markers; if the latter, they | |
57 are coerced to integers. | |
1029 | 58 |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
59 When OBJECT is a string, we increment *BEGIN and *END |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
60 to make them origin-one. |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
61 |
1029 | 62 Note that buffer points don't correspond to interval indices. |
63 For example, point-max is 1 greater than the index of the last | |
64 character. This difference is handled in the caller, which uses | |
65 the validated points to determine a length, and operates on that. | |
66 Exceptions are Ftext_properties_at, Fnext_property_change, and | |
67 Fprevious_property_change which call this function with BEGIN == END. | |
68 Handle this case specially. | |
69 | |
70 If FORCE is soft (0), it's OK to return NULL_INTERVAL. Otherwise, | |
1055 | 71 create an interval tree for OBJECT if one doesn't exist, provided |
72 the object actually contains text. In the current design, if there | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
73 is no text, there can be no text properties. */ |
1029 | 74 |
75 #define soft 0 | |
76 #define hard 1 | |
77 | |
78 static INTERVAL | |
79 validate_interval_range (object, begin, end, force) | |
80 Lisp_Object object, *begin, *end; | |
81 int force; | |
82 { | |
83 register INTERVAL i; | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
84 int searchpos; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
85 |
1029 | 86 CHECK_STRING_OR_BUFFER (object, 0); |
87 CHECK_NUMBER_COERCE_MARKER (*begin, 0); | |
88 CHECK_NUMBER_COERCE_MARKER (*end, 0); | |
89 | |
90 /* If we are asked for a point, but from a subr which operates | |
91 on a range, then return nothing. */ | |
92 if (*begin == *end && begin != end) | |
93 return NULL_INTERVAL; | |
94 | |
95 if (XINT (*begin) > XINT (*end)) | |
96 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
97 Lisp_Object n; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
98 n = *begin; |
1029 | 99 *begin = *end; |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
100 *end = n; |
1029 | 101 } |
102 | |
103 if (XTYPE (object) == Lisp_Buffer) | |
104 { | |
105 register struct buffer *b = XBUFFER (object); | |
106 | |
107 if (!(BUF_BEGV (b) <= XINT (*begin) && XINT (*begin) <= XINT (*end) | |
108 && XINT (*end) <= BUF_ZV (b))) | |
109 args_out_of_range (*begin, *end); | |
110 i = b->intervals; | |
111 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
112 /* If there's no text, there are no properties. */ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
113 if (BUF_BEGV (b) == BUF_ZV (b)) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
114 return NULL_INTERVAL; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
115 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
116 searchpos = XINT (*begin); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
117 if (searchpos == BUF_Z (b)) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
118 searchpos--; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
119 #if 0 |
1029 | 120 /* Special case for point-max: return the interval for the |
121 last character. */ | |
122 if (*begin == *end && *begin == BUF_Z (b)) | |
123 *begin -= 1; | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
124 #endif |
1029 | 125 } |
126 else | |
127 { | |
128 register struct Lisp_String *s = XSTRING (object); | |
129 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
130 if (! (0 <= XINT (*begin) && XINT (*begin) <= XINT (*end) |
1029 | 131 && XINT (*end) <= s->size)) |
132 args_out_of_range (*begin, *end); | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
133 /* User-level Positions in strings start with 0, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
134 but the interval code always wants positions starting with 1. */ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
135 XFASTINT (*begin) += 1; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
136 XFASTINT (*end) += 1; |
1029 | 137 i = s->intervals; |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
138 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
139 if (s->size == 0) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
140 return NULL_INTERVAL; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
141 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
142 searchpos = XINT (*begin); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
143 if (searchpos > s->size) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
144 searchpos--; |
1029 | 145 } |
146 | |
147 if (NULL_INTERVAL_P (i)) | |
148 return (force ? create_root_interval (object) : i); | |
149 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
150 return find_interval (i, searchpos); |
1029 | 151 } |
152 | |
153 /* Validate LIST as a property list. If LIST is not a list, then | |
154 make one consisting of (LIST nil). Otherwise, verify that LIST | |
155 is even numbered and thus suitable as a plist. */ | |
156 | |
157 static Lisp_Object | |
158 validate_plist (list) | |
159 { | |
160 if (NILP (list)) | |
161 return Qnil; | |
162 | |
163 if (CONSP (list)) | |
164 { | |
165 register int i; | |
166 register Lisp_Object tail; | |
167 for (i = 0, tail = list; !NILP (tail); i++) | |
168 tail = Fcdr (tail); | |
169 if (i & 1) | |
170 error ("Odd length text property list"); | |
171 return list; | |
172 } | |
173 | |
174 return Fcons (list, Fcons (Qnil, Qnil)); | |
175 } | |
176 | |
177 /* Return nonzero if interval I has all the properties, | |
178 with the same values, of list PLIST. */ | |
179 | |
180 static int | |
181 interval_has_all_properties (plist, i) | |
182 Lisp_Object plist; | |
183 INTERVAL i; | |
184 { | |
185 register Lisp_Object tail1, tail2, sym1, sym2; | |
186 register int found; | |
187 | |
188 /* Go through each element of PLIST. */ | |
189 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1))) | |
190 { | |
191 sym1 = Fcar (tail1); | |
192 found = 0; | |
193 | |
194 /* Go through I's plist, looking for sym1 */ | |
195 for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2))) | |
196 if (EQ (sym1, Fcar (tail2))) | |
197 { | |
198 /* Found the same property on both lists. If the | |
199 values are unequal, return zero. */ | |
200 if (! EQ (Fequal (Fcar (Fcdr (tail1)), Fcar (Fcdr (tail2))), | |
201 Qt)) | |
202 return 0; | |
203 | |
204 /* Property has same value on both lists; go to next one. */ | |
205 found = 1; | |
206 break; | |
207 } | |
208 | |
209 if (! found) | |
210 return 0; | |
211 } | |
212 | |
213 return 1; | |
214 } | |
215 | |
216 /* Return nonzero if the plist of interval I has any of the | |
217 properties of PLIST, regardless of their values. */ | |
218 | |
219 static INLINE int | |
220 interval_has_some_properties (plist, i) | |
221 Lisp_Object plist; | |
222 INTERVAL i; | |
223 { | |
224 register Lisp_Object tail1, tail2, sym; | |
225 | |
226 /* Go through each element of PLIST. */ | |
227 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1))) | |
228 { | |
229 sym = Fcar (tail1); | |
230 | |
231 /* Go through i's plist, looking for tail1 */ | |
232 for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2))) | |
233 if (EQ (sym, Fcar (tail2))) | |
234 return 1; | |
235 } | |
236 | |
237 return 0; | |
238 } | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
239 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
240 /* Set the properties of INTERVAL to PROPERTIES, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
241 and record undo info for the previous values. |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
242 OBJECT is the string or buffer that INTERVAL belongs to. */ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
243 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
244 static void |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
245 set_properties (properties, interval, object) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
246 Lisp_Object properties, object; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
247 INTERVAL interval; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
248 { |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
249 Lisp_Object oldprops; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
250 oldprops = interval->plist; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
251 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
252 /* Record undo for old properties. */ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
253 while (XTYPE (oldprops) == Lisp_Cons) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
254 { |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
255 Lisp_Object sym; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
256 sym = Fcar (oldprops); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
257 record_property_change (interval->position, LENGTH (interval), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
258 sym, Fcar_safe (Fcdr (oldprops)), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
259 object); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
260 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
261 oldprops = Fcdr_safe (Fcdr (oldprops)); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
262 } |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
263 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
264 /* Store new properties. */ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
265 interval->plist = Fcopy_sequence (properties); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
266 } |
1029 | 267 |
268 /* Add the properties of PLIST to the interval I, or set | |
269 the value of I's property to the value of the property on PLIST | |
270 if they are different. | |
271 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
272 OBJECT should be the string or buffer the interval is in. |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
273 |
1029 | 274 Return nonzero if this changes I (i.e., if any members of PLIST |
275 are actually added to I's plist) */ | |
276 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
277 static int |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
278 add_properties (plist, i, object) |
1029 | 279 Lisp_Object plist; |
280 INTERVAL i; | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
281 Lisp_Object object; |
1029 | 282 { |
283 register Lisp_Object tail1, tail2, sym1, val1; | |
284 register int changed = 0; | |
285 register int found; | |
286 | |
287 /* Go through each element of PLIST. */ | |
288 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1))) | |
289 { | |
290 sym1 = Fcar (tail1); | |
291 val1 = Fcar (Fcdr (tail1)); | |
292 found = 0; | |
293 | |
294 /* Go through I's plist, looking for sym1 */ | |
295 for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2))) | |
296 if (EQ (sym1, Fcar (tail2))) | |
297 { | |
298 register Lisp_Object this_cdr = Fcdr (tail2); | |
299 | |
300 /* Found the property. Now check its value. */ | |
301 found = 1; | |
302 | |
303 /* The properties have the same value on both lists. | |
304 Continue to the next property. */ | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
305 if (!NILP (Fequal (val1, Fcar (this_cdr)))) |
1029 | 306 break; |
307 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
308 /* Record this change in the buffer, for undo purposes. */ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
309 if (XTYPE (object) == Lisp_Buffer) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
310 { |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
311 record_property_change (i->position, LENGTH (i), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
312 sym1, Fcar (this_cdr), object); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
313 modify_region (make_number (i->position), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
314 make_number (i->position + LENGTH (i))); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
315 } |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
316 |
1029 | 317 /* I's property has a different value -- change it */ |
318 Fsetcar (this_cdr, val1); | |
319 changed++; | |
320 break; | |
321 } | |
322 | |
323 if (! found) | |
324 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
325 /* Record this change in the buffer, for undo purposes. */ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
326 if (XTYPE (object) == Lisp_Buffer) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
327 { |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
328 record_property_change (i->position, LENGTH (i), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
329 sym1, Qnil, object); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
330 modify_region (make_number (i->position), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
331 make_number (i->position + LENGTH (i))); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
332 } |
1029 | 333 i->plist = Fcons (sym1, Fcons (val1, i->plist)); |
334 changed++; | |
335 } | |
336 } | |
337 | |
338 return changed; | |
339 } | |
340 | |
341 /* For any members of PLIST which are properties of I, remove them | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
342 from I's plist. |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
343 OBJECT is the string or buffer containing I. */ |
1029 | 344 |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
345 static int |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
346 remove_properties (plist, i, object) |
1029 | 347 Lisp_Object plist; |
348 INTERVAL i; | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
349 Lisp_Object object; |
1029 | 350 { |
351 register Lisp_Object tail1, tail2, sym; | |
352 register Lisp_Object current_plist = i->plist; | |
353 register int changed = 0; | |
354 | |
355 /* Go through each element of plist. */ | |
356 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1))) | |
357 { | |
358 sym = Fcar (tail1); | |
359 | |
360 /* First, remove the symbol if its at the head of the list */ | |
361 while (! NILP (current_plist) && EQ (sym, Fcar (current_plist))) | |
362 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
363 if (XTYPE (object) == Lisp_Buffer) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
364 { |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
365 record_property_change (i->position, LENGTH (i), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
366 sym, Fcar (Fcdr (current_plist)), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
367 object); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
368 modify_region (make_number (i->position), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
369 make_number (i->position + LENGTH (i))); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
370 } |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
371 |
1029 | 372 current_plist = Fcdr (Fcdr (current_plist)); |
373 changed++; | |
374 } | |
375 | |
376 /* Go through i's plist, looking for sym */ | |
377 tail2 = current_plist; | |
378 while (! NILP (tail2)) | |
379 { | |
380 register Lisp_Object this = Fcdr (Fcdr (tail2)); | |
381 if (EQ (sym, Fcar (this))) | |
382 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
383 if (XTYPE (object) == Lisp_Buffer) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
384 { |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
385 record_property_change (i->position, LENGTH (i), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
386 sym, Fcar (Fcdr (this)), object); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
387 modify_region (make_number (i->position), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
388 make_number (i->position + LENGTH (i))); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
389 } |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
390 |
1029 | 391 Fsetcdr (Fcdr (tail2), Fcdr (Fcdr (this))); |
392 changed++; | |
393 } | |
394 tail2 = this; | |
395 } | |
396 } | |
397 | |
398 if (changed) | |
399 i->plist = current_plist; | |
400 return changed; | |
401 } | |
402 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
403 #if 0 |
1029 | 404 /* Remove all properties from interval I. Return non-zero |
405 if this changes the interval. */ | |
406 | |
407 static INLINE int | |
408 erase_properties (i) | |
409 INTERVAL i; | |
410 { | |
411 if (NILP (i->plist)) | |
412 return 0; | |
413 | |
414 i->plist = Qnil; | |
415 return 1; | |
416 } | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
417 #endif |
1029 | 418 |
419 DEFUN ("text-properties-at", Ftext_properties_at, | |
420 Stext_properties_at, 1, 2, 0, | |
421 "Return the list of properties held by the character at POSITION\n\ | |
422 in optional argument OBJECT, a string or buffer. If nil, OBJECT\n\ | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
423 defaults to the current buffer.\n\ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
424 If POSITION is at the end of OBJECT, the value is nil.") |
1029 | 425 (pos, object) |
426 Lisp_Object pos, object; | |
427 { | |
428 register INTERVAL i; | |
429 | |
430 if (NILP (object)) | |
431 XSET (object, Lisp_Buffer, current_buffer); | |
432 | |
433 i = validate_interval_range (object, &pos, &pos, soft); | |
434 if (NULL_INTERVAL_P (i)) | |
435 return Qnil; | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
436 /* If POS is at the end of the interval, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
437 it means it's the end of OBJECT. |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
438 There are no properties at the very end, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
439 since no character follows. */ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
440 if (XINT (pos) == LENGTH (i) + i->position) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
441 return Qnil; |
1029 | 442 |
443 return i->plist; | |
444 } | |
445 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
446 DEFUN ("get-text-property", Fget_text_property, Sget_text_property, 2, 3, 0, |
1930
1cdbdbe2f70a
* textprop.c (Fget_text_property): Fix typo in function's declaration.
Jim Blandy <jimb@redhat.com>
parents:
1857
diff
changeset
|
447 "Return the value of position POS's property PROP, in OBJECT.\n\ |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
448 OBJECT is optional and defaults to the current buffer.\n\ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
449 If POSITION is at the end of OBJECT, the value is nil.") |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
450 (pos, prop, object) |
1930
1cdbdbe2f70a
* textprop.c (Fget_text_property): Fix typo in function's declaration.
Jim Blandy <jimb@redhat.com>
parents:
1857
diff
changeset
|
451 Lisp_Object pos, object; |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
452 register Lisp_Object prop; |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
453 { |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
454 register INTERVAL i; |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
455 register Lisp_Object tail; |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
456 |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
457 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
458 XSET (object, Lisp_Buffer, current_buffer); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
459 i = validate_interval_range (object, &pos, &pos, soft); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
460 if (NULL_INTERVAL_P (i)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
461 return Qnil; |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
462 |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
463 /* If POS is at the end of the interval, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
464 it means it's the end of OBJECT. |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
465 There are no properties at the very end, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
466 since no character follows. */ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
467 if (XINT (pos) == LENGTH (i) + i->position) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
468 return Qnil; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
469 |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
470 for (tail = i->plist; !NILP (tail); tail = Fcdr (Fcdr (tail))) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
471 { |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
472 register Lisp_Object tem; |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
473 tem = Fcar (tail); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
474 if (EQ (prop, tem)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
475 return Fcar (Fcdr (tail)); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
476 } |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
477 return Qnil; |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
478 } |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
479 |
1029 | 480 DEFUN ("next-property-change", Fnext_property_change, |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
481 Snext_property_change, 1, 2, 0, |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
482 "Return the position of next property change.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
483 Scans characters forward from POS in OBJECT till it finds\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
484 a change in some text property, then returns the position of the change.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
485 The optional second argument OBJECT is the string or buffer to scan.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
486 Return nil if the property is constant all the way to the end of OBJECT.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
487 If the value is non-nil, it is a position greater than POS, never equal.") |
1029 | 488 (pos, object) |
489 Lisp_Object pos, object; | |
490 { | |
491 register INTERVAL i, next; | |
492 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
493 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
494 XSET (object, Lisp_Buffer, current_buffer); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
495 |
1029 | 496 i = validate_interval_range (object, &pos, &pos, soft); |
497 if (NULL_INTERVAL_P (i)) | |
498 return Qnil; | |
499 | |
500 next = next_interval (i); | |
501 while (! NULL_INTERVAL_P (next) && intervals_equal (i, next)) | |
502 next = next_interval (next); | |
503 | |
504 if (NULL_INTERVAL_P (next)) | |
505 return Qnil; | |
506 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
507 return next->position - (XTYPE (object) == Lisp_String); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
508 ; |
1029 | 509 } |
510 | |
1211 | 511 DEFUN ("next-single-property-change", Fnext_single_property_change, |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
512 Snext_single_property_change, 1, 3, 0, |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
513 "Return the position of next property change for a specific property.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
514 Scans characters forward from POS till it finds\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
515 a change in the PROP property, then returns the position of the change.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
516 The optional third argument OBJECT is the string or buffer to scan.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
517 Return nil if the property is constant all the way to the end of OBJECT.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
518 If the value is non-nil, it is a position greater than POS, never equal.") |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
519 (pos, prop, object) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
520 Lisp_Object pos, prop, object; |
1211 | 521 { |
522 register INTERVAL i, next; | |
523 register Lisp_Object here_val; | |
524 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
525 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
526 XSET (object, Lisp_Buffer, current_buffer); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
527 |
1211 | 528 i = validate_interval_range (object, &pos, &pos, soft); |
529 if (NULL_INTERVAL_P (i)) | |
530 return Qnil; | |
531 | |
532 here_val = Fget (prop, i->plist); | |
533 next = next_interval (i); | |
534 while (! NULL_INTERVAL_P (next) && EQ (here_val, Fget (prop, next->plist))) | |
535 next = next_interval (next); | |
536 | |
537 if (NULL_INTERVAL_P (next)) | |
538 return Qnil; | |
539 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
540 return next->position - (XTYPE (object) == Lisp_String); |
1211 | 541 } |
542 | |
1029 | 543 DEFUN ("previous-property-change", Fprevious_property_change, |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
544 Sprevious_property_change, 1, 2, 0, |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
545 "Return the position of previous property change.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
546 Scans characters backwards from POS in OBJECT till it finds\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
547 a change in some text property, then returns the position of the change.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
548 The optional second argument OBJECT is the string or buffer to scan.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
549 Return nil if the property is constant all the way to the start of OBJECT.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
550 If the value is non-nil, it is a position less than POS, never equal.") |
1029 | 551 (pos, object) |
552 Lisp_Object pos, object; | |
553 { | |
554 register INTERVAL i, previous; | |
555 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
556 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
557 XSET (object, Lisp_Buffer, current_buffer); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
558 |
1029 | 559 i = validate_interval_range (object, &pos, &pos, soft); |
560 if (NULL_INTERVAL_P (i)) | |
561 return Qnil; | |
562 | |
563 previous = previous_interval (i); | |
564 while (! NULL_INTERVAL_P (previous) && intervals_equal (previous, i)) | |
565 previous = previous_interval (previous); | |
566 if (NULL_INTERVAL_P (previous)) | |
567 return Qnil; | |
568 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
569 return (previous->position + LENGTH (previous) - 1 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
570 - (XTYPE (object) == Lisp_String)); |
1029 | 571 } |
572 | |
1211 | 573 DEFUN ("previous-single-property-change", Fprevious_single_property_change, |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
574 Sprevious_single_property_change, 2, 3, 0, |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
575 "Return the position of previous property change for a specific property.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
576 Scans characters backward from POS till it finds\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
577 a change in the PROP property, then returns the position of the change.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
578 The optional third argument OBJECT is the string or buffer to scan.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
579 Return nil if the property is constant all the way to the start of OBJECT.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
580 If the value is non-nil, it is a position less than POS, never equal.") |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
581 (pos, prop, object) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
582 Lisp_Object pos, prop, object; |
1211 | 583 { |
584 register INTERVAL i, previous; | |
585 register Lisp_Object here_val; | |
586 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
587 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
588 XSET (object, Lisp_Buffer, current_buffer); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
589 |
1211 | 590 i = validate_interval_range (object, &pos, &pos, soft); |
591 if (NULL_INTERVAL_P (i)) | |
592 return Qnil; | |
593 | |
594 here_val = Fget (prop, i->plist); | |
595 previous = previous_interval (i); | |
596 while (! NULL_INTERVAL_P (previous) | |
597 && EQ (here_val, Fget (prop, previous->plist))) | |
598 previous = previous_interval (previous); | |
599 if (NULL_INTERVAL_P (previous)) | |
600 return Qnil; | |
601 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
602 return (previous->position + LENGTH (previous) - 1 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
603 - (XTYPE (object) == Lisp_String)); |
1211 | 604 } |
605 | |
1029 | 606 DEFUN ("add-text-properties", Fadd_text_properties, |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
607 Sadd_text_properties, 3, 4, 0, |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
608 "Add properties to the text from START to END.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
609 The third argument PROPS is a property list\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
610 specifying the property values to add.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
611 The optional fourth argument, OBJECT,\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
612 is the string or buffer containing the text.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
613 Return t if any property value actually changed, nil otherwise.") |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
614 (start, end, properties, object) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
615 Lisp_Object start, end, properties, object; |
1029 | 616 { |
617 register INTERVAL i, unchanged; | |
618 register int s, len, modified; | |
619 | |
620 properties = validate_plist (properties); | |
621 if (NILP (properties)) | |
622 return Qnil; | |
623 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
624 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
625 XSET (object, Lisp_Buffer, current_buffer); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
626 |
1029 | 627 i = validate_interval_range (object, &start, &end, hard); |
628 if (NULL_INTERVAL_P (i)) | |
629 return Qnil; | |
630 | |
631 s = XINT (start); | |
632 len = XINT (end) - s; | |
633 | |
634 /* If we're not starting on an interval boundary, we have to | |
635 split this interval. */ | |
636 if (i->position != s) | |
637 { | |
638 /* If this interval already has the properties, we can | |
639 skip it. */ | |
640 if (interval_has_all_properties (properties, i)) | |
641 { | |
642 int got = (LENGTH (i) - (s - i->position)); | |
643 if (got >= len) | |
644 return Qnil; | |
645 len -= got; | |
646 } | |
647 else | |
648 { | |
649 unchanged = i; | |
650 i = split_interval_right (unchanged, s - unchanged->position + 1); | |
651 copy_properties (unchanged, i); | |
652 if (LENGTH (i) > len) | |
653 { | |
654 i = split_interval_left (i, len + 1); | |
655 copy_properties (unchanged, i); | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
656 add_properties (properties, i, object); |
1029 | 657 return Qt; |
658 } | |
659 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
660 add_properties (properties, i, object); |
1029 | 661 modified = 1; |
662 len -= LENGTH (i); | |
663 i = next_interval (i); | |
664 } | |
665 } | |
666 | |
667 /* We are at the beginning of an interval, with len to scan */ | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
668 while (len > 0) |
1029 | 669 { |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
670 if (i == 0) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
671 abort (); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
672 |
1029 | 673 if (LENGTH (i) >= len) |
674 { | |
675 if (interval_has_all_properties (properties, i)) | |
676 return modified ? Qt : Qnil; | |
677 | |
678 if (LENGTH (i) == len) | |
679 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
680 add_properties (properties, i, object); |
1029 | 681 return Qt; |
682 } | |
683 | |
684 /* i doesn't have the properties, and goes past the change limit */ | |
685 unchanged = i; | |
686 i = split_interval_left (unchanged, len + 1); | |
687 copy_properties (unchanged, i); | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
688 add_properties (properties, i, object); |
1029 | 689 return Qt; |
690 } | |
691 | |
692 len -= LENGTH (i); | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
693 modified += add_properties (properties, i, object); |
1029 | 694 i = next_interval (i); |
695 } | |
696 } | |
697 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
698 DEFUN ("put-text-property", Fput_text_property, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
699 Sput_text_property, 4, 5, 0, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
700 "Set one property of the text from START to END.\n\ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
701 The third and fourth arguments PROP and VALUE\n\ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
702 specify the property to add.\n\ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
703 The optional fifth argument, OBJECT,\n\ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
704 is the string or buffer containing the text.") |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
705 (start, end, prop, value, object) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
706 Lisp_Object start, end, prop, value, object; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
707 { |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
708 Fadd_text_properties (start, end, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
709 Fcons (prop, Fcons (value, Qnil)), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
710 object); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
711 return Qnil; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
712 } |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
713 |
1029 | 714 DEFUN ("set-text-properties", Fset_text_properties, |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
715 Sset_text_properties, 3, 4, 0, |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
716 "Completely replace properties of text from START to END.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
717 The third argument PROPS is the new property list.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
718 The optional fourth argument, OBJECT,\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
719 is the string or buffer containing the text.") |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
720 (start, end, props, object) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
721 Lisp_Object start, end, props, object; |
1029 | 722 { |
723 register INTERVAL i, unchanged; | |
1211 | 724 register INTERVAL prev_changed = NULL_INTERVAL; |
1029 | 725 register int s, len; |
726 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
727 props = validate_plist (props); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
728 if (NILP (props)) |
1029 | 729 return Qnil; |
730 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
731 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
732 XSET (object, Lisp_Buffer, current_buffer); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
733 |
1029 | 734 i = validate_interval_range (object, &start, &end, hard); |
735 if (NULL_INTERVAL_P (i)) | |
736 return Qnil; | |
737 | |
738 s = XINT (start); | |
739 len = XINT (end) - s; | |
740 | |
741 if (i->position != s) | |
742 { | |
743 unchanged = i; | |
744 i = split_interval_right (unchanged, s - unchanged->position + 1); | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
745 set_properties (props, i, object); |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
746 |
1029 | 747 if (LENGTH (i) > len) |
748 { | |
1211 | 749 i = split_interval_right (i, len); |
750 copy_properties (unchanged, i); | |
1029 | 751 return Qt; |
752 } | |
753 | |
1211 | 754 if (LENGTH (i) == len) |
755 return Qt; | |
756 | |
757 prev_changed = i; | |
1029 | 758 len -= LENGTH (i); |
759 i = next_interval (i); | |
760 } | |
761 | |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
762 /* We are starting at the beginning of an interval, I */ |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
763 while (len > 0) |
1029 | 764 { |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
765 if (i == 0) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
766 abort (); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
767 |
1029 | 768 if (LENGTH (i) >= len) |
769 { | |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
770 if (LENGTH (i) > len) |
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
771 i = split_interval_left (i, len + 1); |
1029 | 772 |
1211 | 773 if (NULL_INTERVAL_P (prev_changed)) |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
774 set_properties (props, i, object); |
1211 | 775 else |
776 merge_interval_left (i); | |
1029 | 777 return Qt; |
778 } | |
779 | |
780 len -= LENGTH (i); | |
1211 | 781 if (NULL_INTERVAL_P (prev_changed)) |
782 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
783 set_properties (props, i, object); |
1211 | 784 prev_changed = i; |
785 } | |
786 else | |
787 prev_changed = i = merge_interval_left (i); | |
788 | |
1029 | 789 i = next_interval (i); |
790 } | |
791 | |
792 return Qt; | |
793 } | |
794 | |
795 DEFUN ("remove-text-properties", Fremove_text_properties, | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
796 Sremove_text_properties, 3, 4, 0, |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
797 "Remove some properties from text from START to END.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
798 The third argument PROPS is a property list\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
799 whose property names specify the properties to remove.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
800 \(The values stored in PROPS are ignored.)\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
801 The optional fourth argument, OBJECT,\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
802 is the string or buffer containing the text.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
803 Return t if any property was actually removed, nil otherwise.") |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
804 (start, end, props, object) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
805 Lisp_Object start, end, props, object; |
1029 | 806 { |
807 register INTERVAL i, unchanged; | |
808 register int s, len, modified; | |
809 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
810 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
811 XSET (object, Lisp_Buffer, current_buffer); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
812 |
1029 | 813 i = validate_interval_range (object, &start, &end, soft); |
814 if (NULL_INTERVAL_P (i)) | |
815 return Qnil; | |
816 | |
817 s = XINT (start); | |
818 len = XINT (end) - s; | |
1211 | 819 |
1029 | 820 if (i->position != s) |
821 { | |
822 /* No properties on this first interval -- return if | |
823 it covers the entire region. */ | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
824 if (! interval_has_some_properties (props, i)) |
1029 | 825 { |
826 int got = (LENGTH (i) - (s - i->position)); | |
827 if (got >= len) | |
828 return Qnil; | |
829 len -= got; | |
830 } | |
831 /* Remove the properties from this interval. If it's short | |
832 enough, return, splitting it if it's too short. */ | |
833 else | |
834 { | |
835 unchanged = i; | |
836 i = split_interval_right (unchanged, s - unchanged->position + 1); | |
837 copy_properties (unchanged, i); | |
838 if (LENGTH (i) > len) | |
839 { | |
840 i = split_interval_left (i, len + 1); | |
841 copy_properties (unchanged, i); | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
842 remove_properties (props, i, object); |
1029 | 843 return Qt; |
844 } | |
845 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
846 remove_properties (props, i, object); |
1029 | 847 modified = 1; |
848 len -= LENGTH (i); | |
849 i = next_interval (i); | |
850 } | |
851 } | |
852 | |
853 /* We are at the beginning of an interval, with len to scan */ | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
854 while (len > 0) |
1029 | 855 { |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
856 if (i == 0) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
857 abort (); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
858 |
1029 | 859 if (LENGTH (i) >= len) |
860 { | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
861 if (! interval_has_some_properties (props, i)) |
1029 | 862 return modified ? Qt : Qnil; |
863 | |
864 if (LENGTH (i) == len) | |
865 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
866 remove_properties (props, i, object); |
1029 | 867 return Qt; |
868 } | |
869 | |
870 /* i has the properties, and goes past the change limit */ | |
871 unchanged = split_interval_right (i, len + 1); | |
872 copy_properties (unchanged, i); | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
873 remove_properties (props, i, object); |
1029 | 874 return Qt; |
875 } | |
876 | |
877 len -= LENGTH (i); | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
878 modified += remove_properties (props, i, object); |
1029 | 879 i = next_interval (i); |
880 } | |
881 } | |
882 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
883 #if 0 /* You can use set-text-properties for this. */ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
884 |
1029 | 885 DEFUN ("erase-text-properties", Ferase_text_properties, |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
886 Serase_text_properties, 2, 3, 0, |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
887 "Remove all properties from the text from START to END.\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
888 The optional third argument, OBJECT,\n\ |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
889 is the string or buffer containing the text.") |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
890 (start, end, object) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
891 Lisp_Object start, end, object; |
1029 | 892 { |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
893 register INTERVAL i; |
1305 | 894 register INTERVAL prev_changed = NULL_INTERVAL; |
1029 | 895 register int s, len, modified; |
896 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
897 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
898 XSET (object, Lisp_Buffer, current_buffer); |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
899 |
1029 | 900 i = validate_interval_range (object, &start, &end, soft); |
901 if (NULL_INTERVAL_P (i)) | |
902 return Qnil; | |
903 | |
904 s = XINT (start); | |
905 len = XINT (end) - s; | |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
906 |
1029 | 907 if (i->position != s) |
908 { | |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
909 register int got; |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
910 register INTERVAL unchanged = i; |
1029 | 911 |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
912 /* If there are properties here, then this text will be modified. */ |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
913 if (! NILP (i->plist)) |
1029 | 914 { |
915 i = split_interval_right (unchanged, s - unchanged->position + 1); | |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
916 i->plist = Qnil; |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
917 modified++; |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
918 |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
919 if (LENGTH (i) > len) |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
920 { |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
921 i = split_interval_right (i, len + 1); |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
922 copy_properties (unchanged, i); |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
923 return Qt; |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
924 } |
1029 | 925 |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
926 if (LENGTH (i) == len) |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
927 return Qt; |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
928 |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
929 got = LENGTH (i); |
1029 | 930 } |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
931 /* If the text of I is without any properties, and contains |
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
932 LEN or more characters, then we may return without changing |
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
933 anything.*/ |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
934 else if (LENGTH (i) - (s - i->position) <= len) |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
935 return Qnil; |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
936 /* The amount of text to change extends past I, so just note |
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
937 how much we've gotten. */ |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
938 else |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
939 got = LENGTH (i) - (s - i->position); |
1029 | 940 |
941 len -= got; | |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
942 prev_changed = i; |
1029 | 943 i = next_interval (i); |
944 } | |
945 | |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
946 /* We are starting at the beginning of an interval, I. */ |
1029 | 947 while (len > 0) |
948 { | |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
949 if (LENGTH (i) >= len) |
1029 | 950 { |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
951 /* If I has no properties, simply merge it if possible. */ |
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
952 if (NILP (i->plist)) |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
953 { |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
954 if (! NULL_INTERVAL_P (prev_changed)) |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
955 merge_interval_left (i); |
1029 | 956 |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
957 return modified ? Qt : Qnil; |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
958 } |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
959 |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
960 if (LENGTH (i) > len) |
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
961 i = split_interval_left (i, len + 1); |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
962 if (! NULL_INTERVAL_P (prev_changed)) |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
963 merge_interval_left (i); |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
964 else |
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
965 i->plist = Qnil; |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
966 |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
967 return Qt; |
1029 | 968 } |
969 | |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
970 /* Here if we still need to erase past the end of I */ |
1029 | 971 len -= LENGTH (i); |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
972 if (NULL_INTERVAL_P (prev_changed)) |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
973 { |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
974 modified += erase_properties (i); |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
975 prev_changed = i; |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
976 } |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
977 else |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
978 { |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
979 modified += ! NILP (i->plist); |
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
980 /* Merging I will give it the properties of PREV_CHANGED. */ |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
981 prev_changed = i = merge_interval_left (i); |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
982 } |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
983 |
1029 | 984 i = next_interval (i); |
985 } | |
986 | |
987 return modified ? Qt : Qnil; | |
988 } | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
989 #endif /* 0 */ |
1029 | 990 |
991 void | |
992 syms_of_textprop () | |
993 { | |
994 DEFVAR_INT ("interval-balance-threshold", &interval_balance_threshold, | |
1715
cd23f7ef1bd0
* floatfns.c (Flog): Fix unescaped newline in string.
Jim Blandy <jimb@redhat.com>
parents:
1305
diff
changeset
|
995 "Threshold for rebalancing interval trees, expressed as the\n\ |
1029 | 996 percentage by which the left interval tree should not differ from the right."); |
997 interval_balance_threshold = 8; | |
998 | |
999 /* Common attributes one might give text */ | |
1000 | |
1001 staticpro (&Qforeground); | |
1002 Qforeground = intern ("foreground"); | |
1003 staticpro (&Qbackground); | |
1004 Qbackground = intern ("background"); | |
1005 staticpro (&Qfont); | |
1006 Qfont = intern ("font"); | |
1007 staticpro (&Qstipple); | |
1008 Qstipple = intern ("stipple"); | |
1009 staticpro (&Qunderline); | |
1010 Qunderline = intern ("underline"); | |
1011 staticpro (&Qread_only); | |
1012 Qread_only = intern ("read-only"); | |
1013 staticpro (&Qinvisible); | |
1014 Qinvisible = intern ("invisible"); | |
1015 | |
1016 /* Properties that text might use to specify certain actions */ | |
1017 | |
1018 staticpro (&Qmouse_left); | |
1019 Qmouse_left = intern ("mouse-left"); | |
1020 staticpro (&Qmouse_entered); | |
1021 Qmouse_entered = intern ("mouse-entered"); | |
1022 staticpro (&Qpoint_left); | |
1023 Qpoint_left = intern ("point-left"); | |
1024 staticpro (&Qpoint_entered); | |
1025 Qpoint_entered = intern ("point-entered"); | |
1026 staticpro (&Qmodification); | |
1027 Qmodification = intern ("modification"); | |
1028 | |
1029 defsubr (&Stext_properties_at); | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1030 defsubr (&Sget_text_property); |
1029 | 1031 defsubr (&Snext_property_change); |
1211 | 1032 defsubr (&Snext_single_property_change); |
1029 | 1033 defsubr (&Sprevious_property_change); |
1211 | 1034 defsubr (&Sprevious_single_property_change); |
1029 | 1035 defsubr (&Sadd_text_properties); |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1036 defsubr (&Sput_text_property); |
1029 | 1037 defsubr (&Sset_text_properties); |
1038 defsubr (&Sremove_text_properties); | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1039 /* defsubr (&Serase_text_properties); */ |
1029 | 1040 } |
1302
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1041 |
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1042 #else |
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1043 |
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1044 lose -- this shouldn't be compiled if USE_TEXT_PROPERTIES isn't defined |
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1045 |
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1046 #endif /* USE_TEXT_PROPERTIES */ |