Mercurial > emacs
annotate src/textprop.c @ 8534:a446d13c46ea
(mouse-set-mark): Select the window before saving point.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 13 Aug 1994 20:29:54 +0000 |
parents | e8556db1b7f3 |
children | c468db944aa2 |
rev | line source |
---|---|
1029 | 1 /* Interface code for dealing with text properties. |
7307 | 2 Copyright (C) 1993, 1994 Free Software Foundation, Inc. |
1029 | 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 | |
3698 | 8 the Free Software Foundation; either version 2, or (at your option) |
1029 | 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 | |
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
4649
diff
changeset
|
20 #include <config.h> |
1029 | 21 #include "lisp.h" |
22 #include "intervals.h" | |
23 #include "buffer.h" | |
6063
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
24 #include "window.h" |
1029 | 25 |
26 | |
27 /* NOTES: previous- and next- property change will have to skip | |
28 zero-length intervals if they are implemented. This could be done | |
29 inside next_interval and previous_interval. | |
30 | |
1211 | 31 set_properties needs to deal with the interval property cache. |
32 | |
1029 | 33 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
|
34 only once on the list. Although some code i.e., remove_properties, |
1029 | 35 handles the more general case, the uniqueness of properties is |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3553
diff
changeset
|
36 necessary for the system to remain consistent. This requirement |
1029 | 37 is enforced by the subrs installing properties onto the intervals. */ |
38 | |
1302
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
39 /* 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
|
40 #ifdef USE_TEXT_PROPERTIES |
1029 | 41 |
42 /* Types of hooks. */ | |
43 Lisp_Object Qmouse_left; | |
44 Lisp_Object Qmouse_entered; | |
45 Lisp_Object Qpoint_left; | |
46 Lisp_Object Qpoint_entered; | |
2058
a43d0bb1b7d8
(Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents:
2053
diff
changeset
|
47 Lisp_Object Qcategory; |
a43d0bb1b7d8
(Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents:
2053
diff
changeset
|
48 Lisp_Object Qlocal_map; |
1029 | 49 |
50 /* Visual properties text (including strings) may have. */ | |
51 Lisp_Object Qforeground, Qbackground, Qfont, Qunderline, Qstipple; | |
6755
a2bccbc870e6
(syms_of_textprop): Initialize Qintangible.
Karl Heuer <kwzh@gnu.org>
parents:
6681
diff
changeset
|
52 Lisp_Object Qinvisible, Qread_only, Qintangible; |
4381
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
53 |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
54 /* Sticky properties */ |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
55 Lisp_Object Qfront_sticky, Qrear_nonsticky; |
3960
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
56 |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
57 /* If o1 is a cons whose cdr is a cons, return non-zero and set o2 to |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
58 the o1's cdr. Otherwise, return zero. This is handy for |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
59 traversing plists. */ |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
60 #define PLIST_ELT_P(o1, o2) (CONSP (o1) && CONSP ((o2) = XCONS (o1)->cdr)) |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
61 |
4242
49007dbbec4c
(syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents:
4214
diff
changeset
|
62 Lisp_Object Vinhibit_point_motion_hooks; |
49007dbbec4c
(syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents:
4214
diff
changeset
|
63 |
1029 | 64 |
1055 | 65 /* Extract the interval at the position pointed to by BEGIN from |
66 OBJECT, a string or buffer. Additionally, check that the positions | |
67 pointed to by BEGIN and END are within the bounds of OBJECT, and | |
68 reverse them if *BEGIN is greater than *END. The objects pointed | |
69 to by BEGIN and END may be integers or markers; if the latter, they | |
70 are coerced to integers. | |
1029 | 71 |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
72 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
|
73 to make them origin-one. |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
74 |
1029 | 75 Note that buffer points don't correspond to interval indices. |
76 For example, point-max is 1 greater than the index of the last | |
77 character. This difference is handled in the caller, which uses | |
78 the validated points to determine a length, and operates on that. | |
79 Exceptions are Ftext_properties_at, Fnext_property_change, and | |
80 Fprevious_property_change which call this function with BEGIN == END. | |
81 Handle this case specially. | |
82 | |
83 If FORCE is soft (0), it's OK to return NULL_INTERVAL. Otherwise, | |
1055 | 84 create an interval tree for OBJECT if one doesn't exist, provided |
85 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
|
86 is no text, there can be no text properties. */ |
1029 | 87 |
88 #define soft 0 | |
89 #define hard 1 | |
90 | |
91 static INTERVAL | |
92 validate_interval_range (object, begin, end, force) | |
93 Lisp_Object object, *begin, *end; | |
94 int force; | |
95 { | |
96 register INTERVAL i; | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
97 int searchpos; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
98 |
1029 | 99 CHECK_STRING_OR_BUFFER (object, 0); |
100 CHECK_NUMBER_COERCE_MARKER (*begin, 0); | |
101 CHECK_NUMBER_COERCE_MARKER (*end, 0); | |
102 | |
103 /* If we are asked for a point, but from a subr which operates | |
104 on a range, then return nothing. */ | |
105 if (*begin == *end && begin != end) | |
106 return NULL_INTERVAL; | |
107 | |
108 if (XINT (*begin) > XINT (*end)) | |
109 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
110 Lisp_Object n; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
111 n = *begin; |
1029 | 112 *begin = *end; |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
113 *end = n; |
1029 | 114 } |
115 | |
116 if (XTYPE (object) == Lisp_Buffer) | |
117 { | |
118 register struct buffer *b = XBUFFER (object); | |
119 | |
120 if (!(BUF_BEGV (b) <= XINT (*begin) && XINT (*begin) <= XINT (*end) | |
121 && XINT (*end) <= BUF_ZV (b))) | |
122 args_out_of_range (*begin, *end); | |
123 i = b->intervals; | |
124 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
125 /* 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
|
126 if (BUF_BEGV (b) == BUF_ZV (b)) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
127 return NULL_INTERVAL; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
128 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
129 searchpos = XINT (*begin); |
1029 | 130 } |
131 else | |
132 { | |
133 register struct Lisp_String *s = XSTRING (object); | |
134 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
135 if (! (0 <= XINT (*begin) && XINT (*begin) <= XINT (*end) |
1029 | 136 && XINT (*end) <= s->size)) |
137 args_out_of_range (*begin, *end); | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
138 /* 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
|
139 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
|
140 XFASTINT (*begin) += 1; |
3996
b9bdcf862c67
* textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents:
3960
diff
changeset
|
141 if (begin != end) |
b9bdcf862c67
* textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents:
3960
diff
changeset
|
142 XFASTINT (*end) += 1; |
1029 | 143 i = s->intervals; |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
144 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
145 if (s->size == 0) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
146 return NULL_INTERVAL; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
147 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
148 searchpos = XINT (*begin); |
1029 | 149 } |
150 | |
151 if (NULL_INTERVAL_P (i)) | |
152 return (force ? create_root_interval (object) : i); | |
153 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
154 return find_interval (i, searchpos); |
1029 | 155 } |
156 | |
157 /* Validate LIST as a property list. If LIST is not a list, then | |
158 make one consisting of (LIST nil). Otherwise, verify that LIST | |
159 is even numbered and thus suitable as a plist. */ | |
160 | |
161 static Lisp_Object | |
162 validate_plist (list) | |
4797
4dd43e41207a
(validate_plist): Add argument declaration for `list'.
Brian Fox <bfox@gnu.org>
parents:
4696
diff
changeset
|
163 Lisp_Object list; |
1029 | 164 { |
165 if (NILP (list)) | |
166 return Qnil; | |
167 | |
168 if (CONSP (list)) | |
169 { | |
170 register int i; | |
171 register Lisp_Object tail; | |
172 for (i = 0, tail = list; !NILP (tail); i++) | |
3996
b9bdcf862c67
* textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents:
3960
diff
changeset
|
173 { |
b9bdcf862c67
* textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents:
3960
diff
changeset
|
174 tail = Fcdr (tail); |
b9bdcf862c67
* textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents:
3960
diff
changeset
|
175 QUIT; |
b9bdcf862c67
* textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents:
3960
diff
changeset
|
176 } |
1029 | 177 if (i & 1) |
178 error ("Odd length text property list"); | |
179 return list; | |
180 } | |
181 | |
182 return Fcons (list, Fcons (Qnil, Qnil)); | |
183 } | |
184 | |
185 /* Return nonzero if interval I has all the properties, | |
186 with the same values, of list PLIST. */ | |
187 | |
188 static int | |
189 interval_has_all_properties (plist, i) | |
190 Lisp_Object plist; | |
191 INTERVAL i; | |
192 { | |
193 register Lisp_Object tail1, tail2, sym1, sym2; | |
194 register int found; | |
195 | |
196 /* Go through each element of PLIST. */ | |
197 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1))) | |
198 { | |
199 sym1 = Fcar (tail1); | |
200 found = 0; | |
201 | |
202 /* Go through I's plist, looking for sym1 */ | |
203 for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2))) | |
204 if (EQ (sym1, Fcar (tail2))) | |
205 { | |
206 /* Found the same property on both lists. If the | |
207 values are unequal, return zero. */ | |
3998
c0560357c84e
Compare the values of text properties using EQ, not Fequal.
Jim Blandy <jimb@redhat.com>
parents:
3996
diff
changeset
|
208 if (! EQ (Fcar (Fcdr (tail1)), Fcar (Fcdr (tail2)))) |
1029 | 209 return 0; |
210 | |
211 /* Property has same value on both lists; go to next one. */ | |
212 found = 1; | |
213 break; | |
214 } | |
215 | |
216 if (! found) | |
217 return 0; | |
218 } | |
219 | |
220 return 1; | |
221 } | |
222 | |
223 /* Return nonzero if the plist of interval I has any of the | |
224 properties of PLIST, regardless of their values. */ | |
225 | |
226 static INLINE int | |
227 interval_has_some_properties (plist, i) | |
228 Lisp_Object plist; | |
229 INTERVAL i; | |
230 { | |
231 register Lisp_Object tail1, tail2, sym; | |
232 | |
233 /* Go through each element of PLIST. */ | |
234 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1))) | |
235 { | |
236 sym = Fcar (tail1); | |
237 | |
238 /* Go through i's plist, looking for tail1 */ | |
239 for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2))) | |
240 if (EQ (sym, Fcar (tail2))) | |
241 return 1; | |
242 } | |
243 | |
244 return 0; | |
245 } | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
246 |
3960
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
247 /* Changing the plists of individual intervals. */ |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
248 |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
249 /* Return the value of PROP in property-list PLIST, or Qunbound if it |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
250 has none. */ |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
251 static int |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
252 property_value (plist, prop) |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
253 { |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
254 Lisp_Object value; |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
255 |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
256 while (PLIST_ELT_P (plist, value)) |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
257 if (EQ (XCONS (plist)->car, prop)) |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
258 return XCONS (value)->car; |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
259 else |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
260 plist = XCONS (value)->cdr; |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
261 |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
262 return Qunbound; |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
263 } |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
264 |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
265 /* Set the properties of INTERVAL to PROPERTIES, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
266 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
|
267 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
|
268 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
269 static void |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
270 set_properties (properties, interval, object) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
271 Lisp_Object properties, object; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
272 INTERVAL interval; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
273 { |
3960
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
274 Lisp_Object sym, value; |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
275 |
3960
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
276 if (BUFFERP (object)) |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
277 { |
3960
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
278 /* For each property in the old plist which is missing from PROPERTIES, |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
279 or has a different value in PROPERTIES, make an undo record. */ |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
280 for (sym = interval->plist; |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
281 PLIST_ELT_P (sym, value); |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
282 sym = XCONS (value)->cdr) |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
283 if (! EQ (property_value (properties, XCONS (sym)->car), |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
284 XCONS (value)->car)) |
4076
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
285 { |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
286 modify_region (XBUFFER (object), |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
287 make_number (interval->position), |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
288 make_number (interval->position + LENGTH (interval))); |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
289 record_property_change (interval->position, LENGTH (interval), |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
290 XCONS (sym)->car, XCONS (value)->car, |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
291 object); |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
292 } |
3960
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
293 |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
294 /* For each new property that has no value at all in the old plist, |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
295 make an undo record binding it to nil, so it will be removed. */ |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
296 for (sym = properties; |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
297 PLIST_ELT_P (sym, value); |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
298 sym = XCONS (value)->cdr) |
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
299 if (EQ (property_value (interval->plist, XCONS (sym)->car), Qunbound)) |
4076
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
300 { |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
301 modify_region (XBUFFER (object), |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
302 make_number (interval->position), |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
303 make_number (interval->position + LENGTH (interval))); |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
304 record_property_change (interval->position, LENGTH (interval), |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
305 XCONS (sym)->car, Qnil, |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
306 object); |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
307 } |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
308 } |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
309 |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
310 /* Store new properties. */ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
311 interval->plist = Fcopy_sequence (properties); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
312 } |
1029 | 313 |
314 /* Add the properties of PLIST to the interval I, or set | |
315 the value of I's property to the value of the property on PLIST | |
316 if they are different. | |
317 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
318 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
|
319 |
1029 | 320 Return nonzero if this changes I (i.e., if any members of PLIST |
321 are actually added to I's plist) */ | |
322 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
323 static int |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
324 add_properties (plist, i, object) |
1029 | 325 Lisp_Object plist; |
326 INTERVAL i; | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
327 Lisp_Object object; |
1029 | 328 { |
329 register Lisp_Object tail1, tail2, sym1, val1; | |
330 register int changed = 0; | |
331 register int found; | |
332 | |
333 /* Go through each element of PLIST. */ | |
334 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1))) | |
335 { | |
336 sym1 = Fcar (tail1); | |
337 val1 = Fcar (Fcdr (tail1)); | |
338 found = 0; | |
339 | |
340 /* Go through I's plist, looking for sym1 */ | |
341 for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2))) | |
342 if (EQ (sym1, Fcar (tail2))) | |
343 { | |
6516
8278049ee7a7
(add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6064
diff
changeset
|
344 register Lisp_Object this_cdr; |
1029 | 345 |
6516
8278049ee7a7
(add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6064
diff
changeset
|
346 this_cdr = Fcdr (tail2); |
1029 | 347 /* Found the property. Now check its value. */ |
348 found = 1; | |
349 | |
350 /* The properties have the same value on both lists. | |
351 Continue to the next property. */ | |
3998
c0560357c84e
Compare the values of text properties using EQ, not Fequal.
Jim Blandy <jimb@redhat.com>
parents:
3996
diff
changeset
|
352 if (EQ (val1, Fcar (this_cdr))) |
1029 | 353 break; |
354 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
355 /* 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
|
356 if (XTYPE (object) == Lisp_Buffer) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
357 { |
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2762
diff
changeset
|
358 modify_region (XBUFFER (object), |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2762
diff
changeset
|
359 make_number (i->position), |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
360 make_number (i->position + LENGTH (i))); |
4076
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
361 record_property_change (i->position, LENGTH (i), |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
362 sym1, Fcar (this_cdr), object); |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
363 } |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
364 |
1029 | 365 /* I's property has a different value -- change it */ |
366 Fsetcar (this_cdr, val1); | |
367 changed++; | |
368 break; | |
369 } | |
370 | |
371 if (! found) | |
372 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
373 /* 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
|
374 if (XTYPE (object) == Lisp_Buffer) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
375 { |
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2762
diff
changeset
|
376 modify_region (XBUFFER (object), |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2762
diff
changeset
|
377 make_number (i->position), |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
378 make_number (i->position + LENGTH (i))); |
4076
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
379 record_property_change (i->position, LENGTH (i), |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
380 sym1, Qnil, object); |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
381 } |
1029 | 382 i->plist = Fcons (sym1, Fcons (val1, i->plist)); |
383 changed++; | |
384 } | |
385 } | |
386 | |
387 return changed; | |
388 } | |
389 | |
390 /* 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
|
391 from I's plist. |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
392 OBJECT is the string or buffer containing I. */ |
1029 | 393 |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
394 static int |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
395 remove_properties (plist, i, object) |
1029 | 396 Lisp_Object plist; |
397 INTERVAL i; | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
398 Lisp_Object object; |
1029 | 399 { |
6516
8278049ee7a7
(add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6064
diff
changeset
|
400 register Lisp_Object tail1, tail2, sym, current_plist; |
1029 | 401 register int changed = 0; |
402 | |
6516
8278049ee7a7
(add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6064
diff
changeset
|
403 current_plist = i->plist; |
1029 | 404 /* Go through each element of plist. */ |
405 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1))) | |
406 { | |
407 sym = Fcar (tail1); | |
408 | |
409 /* First, remove the symbol if its at the head of the list */ | |
410 while (! NILP (current_plist) && EQ (sym, Fcar (current_plist))) | |
411 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
412 if (XTYPE (object) == Lisp_Buffer) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
413 { |
4076
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
414 modify_region (XBUFFER (object), |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
415 make_number (i->position), |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
416 make_number (i->position + LENGTH (i))); |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
417 record_property_change (i->position, LENGTH (i), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
418 sym, Fcar (Fcdr (current_plist)), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
419 object); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
420 } |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
421 |
1029 | 422 current_plist = Fcdr (Fcdr (current_plist)); |
423 changed++; | |
424 } | |
425 | |
426 /* Go through i's plist, looking for sym */ | |
427 tail2 = current_plist; | |
428 while (! NILP (tail2)) | |
429 { | |
6516
8278049ee7a7
(add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6064
diff
changeset
|
430 register Lisp_Object this; |
8278049ee7a7
(add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6064
diff
changeset
|
431 this = Fcdr (Fcdr (tail2)); |
1029 | 432 if (EQ (sym, Fcar (this))) |
433 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
434 if (XTYPE (object) == Lisp_Buffer) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
435 { |
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2762
diff
changeset
|
436 modify_region (XBUFFER (object), |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2762
diff
changeset
|
437 make_number (i->position), |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
438 make_number (i->position + LENGTH (i))); |
4076
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
439 record_property_change (i->position, LENGTH (i), |
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
440 sym, Fcar (Fcdr (this)), object); |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
441 } |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
442 |
1029 | 443 Fsetcdr (Fcdr (tail2), Fcdr (Fcdr (this))); |
444 changed++; | |
445 } | |
446 tail2 = this; | |
447 } | |
448 } | |
449 | |
450 if (changed) | |
451 i->plist = current_plist; | |
452 return changed; | |
453 } | |
454 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
455 #if 0 |
1029 | 456 /* Remove all properties from interval I. Return non-zero |
457 if this changes the interval. */ | |
458 | |
459 static INLINE int | |
460 erase_properties (i) | |
461 INTERVAL i; | |
462 { | |
463 if (NILP (i->plist)) | |
464 return 0; | |
465 | |
466 i->plist = Qnil; | |
467 return 1; | |
468 } | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
469 #endif |
1029 | 470 |
471 DEFUN ("text-properties-at", Ftext_properties_at, | |
472 Stext_properties_at, 1, 2, 0, | |
473 "Return the list of properties held by the character at POSITION\n\ | |
474 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
|
475 defaults to the current buffer.\n\ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
476 If POSITION is at the end of OBJECT, the value is nil.") |
1029 | 477 (pos, object) |
478 Lisp_Object pos, object; | |
479 { | |
480 register INTERVAL i; | |
481 | |
482 if (NILP (object)) | |
483 XSET (object, Lisp_Buffer, current_buffer); | |
484 | |
485 i = validate_interval_range (object, &pos, &pos, soft); | |
486 if (NULL_INTERVAL_P (i)) | |
487 return Qnil; | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
488 /* 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
|
489 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
|
490 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
|
491 since no character follows. */ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
492 if (XINT (pos) == LENGTH (i) + i->position) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
493 return Qnil; |
1029 | 494 |
495 return i->plist; | |
496 } | |
497 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
498 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
|
499 "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
|
500 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
|
501 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
|
502 (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
|
503 Lisp_Object pos, object; |
8271
e8556db1b7f3
(Fget_text_property): Simplify using Ftext_properties_at.
Richard M. Stallman <rms@gnu.org>
parents:
7773
diff
changeset
|
504 Lisp_Object prop; |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
505 { |
8271
e8556db1b7f3
(Fget_text_property): Simplify using Ftext_properties_at.
Richard M. Stallman <rms@gnu.org>
parents:
7773
diff
changeset
|
506 return textget (Ftext_properties_at (pos, object), prop); |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
507 } |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
508 |
6063
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
509 DEFUN ("get-char-property", Fget_char_property, Sget_char_property, 2, 3, 0, |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
510 "Return the value of position POS's property PROP, in OBJECT.\n\ |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
511 OBJECT is optional and defaults to the current buffer.\n\ |
6681 | 512 If POS is at the end of OBJECT, the value is nil.\n\ |
6063
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
513 If OBJECT is a buffer, then overlay properties are considered as well as\n\ |
6064
bdfff039f6e3
(Fget_char_property): Fix docstring.
Karl Heuer <kwzh@gnu.org>
parents:
6063
diff
changeset
|
514 text properties.\n\ |
bdfff039f6e3
(Fget_char_property): Fix docstring.
Karl Heuer <kwzh@gnu.org>
parents:
6063
diff
changeset
|
515 If OBJECT is a window, then that window's buffer is used, but window-specific\n\ |
6063
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
516 overlays are considered only if they are associated with OBJECT.") |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
517 (pos, prop, object) |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
518 Lisp_Object pos, object; |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
519 register Lisp_Object prop; |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
520 { |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
521 struct window *w = 0; |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
522 |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
523 CHECK_NUMBER_COERCE_MARKER (pos, 0); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
524 |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
525 if (NILP (object)) |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
526 XSET (object, Lisp_Buffer, current_buffer); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
527 |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
528 if (WINDOWP (object)) |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
529 { |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
530 w = XWINDOW (object); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
531 XSET (object, Lisp_Buffer, w->buffer); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
532 } |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
533 if (BUFFERP (object)) |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
534 { |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
535 int posn = XINT (pos); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
536 int noverlays; |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
537 Lisp_Object *overlay_vec, tem; |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
538 int next_overlay; |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
539 int len; |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
540 |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
541 /* First try with room for 40 overlays. */ |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
542 len = 40; |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
543 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
544 |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
545 noverlays = overlays_at (posn, 0, &overlay_vec, &len, &next_overlay); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
546 |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
547 /* If there are more than 40, |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
548 make enough space for all, and try again. */ |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
549 if (noverlays > len) |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
550 { |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
551 len = noverlays; |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
552 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
553 noverlays = overlays_at (posn, 0, &overlay_vec, &len, &next_overlay); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
554 } |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
555 noverlays = sort_overlays (overlay_vec, noverlays, w); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
556 |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
557 /* Now check the overlays in order of decreasing priority. */ |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
558 while (--noverlays >= 0) |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
559 { |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
560 tem = Foverlay_get (overlay_vec[noverlays], prop); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
561 if (!NILP (tem)) |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
562 return (tem); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
563 } |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
564 } |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
565 /* Not a buffer, or no appropriate overlay, so fall through to the |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
566 simpler case. */ |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
567 return (Fget_text_property (pos, prop, object)); |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
568 } |
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
569 |
1029 | 570 DEFUN ("next-property-change", Fnext_property_change, |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
571 Snext_property_change, 1, 3, 0, |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
572 "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
|
573 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
|
574 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
|
575 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
|
576 Return nil if the property is constant all the way to the end of OBJECT.\n\ |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
577 If the value is non-nil, it is a position greater than POS, never equal.\n\n\ |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
578 If the optional third argument LIMIT is non-nil, don't search\n\ |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
579 past position LIMIT; return LIMIT if nothing is found before LIMIT.") |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
580 (pos, object, limit) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
581 Lisp_Object pos, object, limit; |
1029 | 582 { |
583 register INTERVAL i, next; | |
584 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
585 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
586 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
|
587 |
7092
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
588 if (!NILP (limit)) |
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
589 CHECK_NUMBER_COERCE_MARKER (limit, 0); |
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
590 |
1029 | 591 i = validate_interval_range (object, &pos, &pos, soft); |
592 if (NULL_INTERVAL_P (i)) | |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
593 return limit; |
1029 | 594 |
595 next = next_interval (i); | |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
596 while (! NULL_INTERVAL_P (next) && intervals_equal (i, next) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
597 && (NILP (limit) || next->position < XFASTINT (limit))) |
1029 | 598 next = next_interval (next); |
599 | |
600 if (NULL_INTERVAL_P (next)) | |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
601 return limit; |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
602 if (! NILP (limit) && !(next->position < XFASTINT (limit))) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
603 return limit; |
1029 | 604 |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
605 return next->position - (XTYPE (object) == Lisp_String); |
4381
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
606 } |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
607 |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
608 /* Return 1 if there's a change in some property between BEG and END. */ |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
609 |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
610 int |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
611 property_change_between_p (beg, end) |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
612 int beg, end; |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
613 { |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
614 register INTERVAL i, next; |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
615 Lisp_Object object, pos; |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
616 |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
617 XSET (object, Lisp_Buffer, current_buffer); |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
618 XFASTINT (pos) = beg; |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
619 |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
620 i = validate_interval_range (object, &pos, &pos, soft); |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
621 if (NULL_INTERVAL_P (i)) |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
622 return 0; |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
623 |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
624 next = next_interval (i); |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
625 while (! NULL_INTERVAL_P (next) && intervals_equal (i, next)) |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
626 { |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
627 next = next_interval (next); |
4614
2c5557903994
(property_change_between_p): Test NULL_INTERVAL_P
Richard M. Stallman <rms@gnu.org>
parents:
4381
diff
changeset
|
628 if (NULL_INTERVAL_P (next)) |
2c5557903994
(property_change_between_p): Test NULL_INTERVAL_P
Richard M. Stallman <rms@gnu.org>
parents:
4381
diff
changeset
|
629 return 0; |
4381
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
630 if (next->position >= end) |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
631 return 0; |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
632 } |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
633 |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
634 if (NULL_INTERVAL_P (next)) |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
635 return 0; |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
636 |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
637 return 1; |
1029 | 638 } |
639 | |
1211 | 640 DEFUN ("next-single-property-change", Fnext_single_property_change, |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
641 Snext_single_property_change, 2, 4, 0, |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
642 "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
|
643 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
|
644 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
|
645 The optional third argument OBJECT is the string or buffer to scan.\n\ |
5020
94de08fd8a7c
(Fnext_single_property_change): Fix missing \n\.
Richard M. Stallman <rms@gnu.org>
parents:
4986
diff
changeset
|
646 The property values are compared with `eq'.\n\ |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
647 Return nil if the property is constant all the way to the end of OBJECT.\n\ |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
648 If the value is non-nil, it is a position greater than POS, never equal.\n\n\ |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
649 If the optional fourth argument LIMIT is non-nil, don't search\n\ |
5645 | 650 past position LIMIT; return LIMIT if nothing is found before LIMIT.") |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
651 (pos, prop, object, limit) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
652 Lisp_Object pos, prop, object, limit; |
1211 | 653 { |
654 register INTERVAL i, next; | |
655 register Lisp_Object here_val; | |
656 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
657 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
658 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
|
659 |
7092
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
660 if (!NILP (limit)) |
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
661 CHECK_NUMBER_COERCE_MARKER (limit, 0); |
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
662 |
1211 | 663 i = validate_interval_range (object, &pos, &pos, soft); |
664 if (NULL_INTERVAL_P (i)) | |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
665 return limit; |
1211 | 666 |
2762
dd28ed1e1928
* textprop.c (Fnext_single_property_change,
Jim Blandy <jimb@redhat.com>
parents:
2124
diff
changeset
|
667 here_val = textget (i->plist, prop); |
1211 | 668 next = next_interval (i); |
2762
dd28ed1e1928
* textprop.c (Fnext_single_property_change,
Jim Blandy <jimb@redhat.com>
parents:
2124
diff
changeset
|
669 while (! NULL_INTERVAL_P (next) |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
670 && EQ (here_val, textget (next->plist, prop)) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
671 && (NILP (limit) || next->position < XFASTINT (limit))) |
1211 | 672 next = next_interval (next); |
673 | |
674 if (NULL_INTERVAL_P (next)) | |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
675 return limit; |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
676 if (! NILP (limit) && !(next->position < XFASTINT (limit))) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
677 return limit; |
1211 | 678 |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
679 return next->position - (XTYPE (object) == Lisp_String); |
1211 | 680 } |
681 | |
1029 | 682 DEFUN ("previous-property-change", Fprevious_property_change, |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
683 Sprevious_property_change, 1, 3, 0, |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
684 "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
|
685 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
|
686 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
|
687 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
|
688 Return nil if the property is constant all the way to the start of OBJECT.\n\ |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
689 If the value is non-nil, it is a position less than POS, never equal.\n\n\ |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
690 If the optional third argument LIMIT is non-nil, don't search\n\ |
5645 | 691 back past position LIMIT; return LIMIT if nothing is found until LIMIT.") |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
692 (pos, object, limit) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
693 Lisp_Object pos, object, limit; |
1029 | 694 { |
695 register INTERVAL i, previous; | |
696 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
697 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
698 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
|
699 |
7092
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
700 if (!NILP (limit)) |
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
701 CHECK_NUMBER_COERCE_MARKER (limit, 0); |
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
702 |
1029 | 703 i = validate_interval_range (object, &pos, &pos, soft); |
704 if (NULL_INTERVAL_P (i)) | |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
705 return limit; |
1029 | 706 |
5644
2abe67658895
(Fprevious_property_change): Move back at least 1 char.
Richard M. Stallman <rms@gnu.org>
parents:
5114
diff
changeset
|
707 /* Start with the interval containing the char before point. */ |
2abe67658895
(Fprevious_property_change): Move back at least 1 char.
Richard M. Stallman <rms@gnu.org>
parents:
5114
diff
changeset
|
708 if (i->position == XFASTINT (pos)) |
2abe67658895
(Fprevious_property_change): Move back at least 1 char.
Richard M. Stallman <rms@gnu.org>
parents:
5114
diff
changeset
|
709 i = previous_interval (i); |
2abe67658895
(Fprevious_property_change): Move back at least 1 char.
Richard M. Stallman <rms@gnu.org>
parents:
5114
diff
changeset
|
710 |
1029 | 711 previous = previous_interval (i); |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
712 while (! NULL_INTERVAL_P (previous) && intervals_equal (previous, i) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
713 && (NILP (limit) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
714 || previous->position + LENGTH (previous) > XFASTINT (limit))) |
1029 | 715 previous = previous_interval (previous); |
716 if (NULL_INTERVAL_P (previous)) | |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
717 return limit; |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
718 if (!NILP (limit) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
719 && !(previous->position + LENGTH (previous) > XFASTINT (limit))) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
720 return limit; |
1029 | 721 |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
722 return (previous->position + LENGTH (previous) |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
723 - (XTYPE (object) == Lisp_String)); |
1029 | 724 } |
725 | |
1211 | 726 DEFUN ("previous-single-property-change", Fprevious_single_property_change, |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
727 Sprevious_single_property_change, 2, 4, 0, |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
728 "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
|
729 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
|
730 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
|
731 The optional third argument OBJECT is the string or buffer to scan.\n\ |
4986
31b1545319dc
(Fprevious_single_property_change): Fix missing \n\.
Richard M. Stallman <rms@gnu.org>
parents:
4797
diff
changeset
|
732 The property values are compared with `eq'.\n\ |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
733 Return nil if the property is constant all the way to the start of OBJECT.\n\ |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
734 If the value is non-nil, it is a position less than POS, never equal.\n\n\ |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
735 If the optional fourth argument LIMIT is non-nil, don't search\n\ |
5645 | 736 back past position LIMIT; return LIMIT if nothing is found until LIMIT.") |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
737 (pos, prop, object, limit) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
738 Lisp_Object pos, prop, object, limit; |
1211 | 739 { |
740 register INTERVAL i, previous; | |
741 register Lisp_Object here_val; | |
742 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
743 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
744 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
|
745 |
7092
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
746 if (!NILP (limit)) |
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
747 CHECK_NUMBER_COERCE_MARKER (limit, 0); |
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
748 |
1211 | 749 i = validate_interval_range (object, &pos, &pos, soft); |
7773
2226c7efb3da
(Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents:
7582
diff
changeset
|
750 |
2226c7efb3da
(Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents:
7582
diff
changeset
|
751 /* Start with the interval containing the char before point. */ |
2226c7efb3da
(Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents:
7582
diff
changeset
|
752 if (! NULL_INTERVAL_P (i) && i->position == XFASTINT (pos)) |
2226c7efb3da
(Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents:
7582
diff
changeset
|
753 i = previous_interval (i); |
2226c7efb3da
(Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents:
7582
diff
changeset
|
754 |
1211 | 755 if (NULL_INTERVAL_P (i)) |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
756 return limit; |
1211 | 757 |
2762
dd28ed1e1928
* textprop.c (Fnext_single_property_change,
Jim Blandy <jimb@redhat.com>
parents:
2124
diff
changeset
|
758 here_val = textget (i->plist, prop); |
1211 | 759 previous = previous_interval (i); |
760 while (! NULL_INTERVAL_P (previous) | |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
761 && EQ (here_val, textget (previous->plist, prop)) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
762 && (NILP (limit) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
763 || previous->position + LENGTH (previous) > XFASTINT (limit))) |
1211 | 764 previous = previous_interval (previous); |
765 if (NULL_INTERVAL_P (previous)) | |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
766 return limit; |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
767 if (!NILP (limit) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
768 && !(previous->position + LENGTH (previous) > XFASTINT (limit))) |
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
769 return limit; |
1211 | 770 |
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
771 return (previous->position + LENGTH (previous) |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
772 - (XTYPE (object) == Lisp_String)); |
1211 | 773 } |
774 | |
1029 | 775 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
|
776 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
|
777 "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
|
778 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
|
779 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
|
780 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
|
781 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
|
782 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
|
783 (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
|
784 Lisp_Object start, end, properties, object; |
1029 | 785 { |
786 register INTERVAL i, unchanged; | |
2124
54179ef9ce35
* textprop.c (Fadd_text_properties): Initialize the modified flag.
Jim Blandy <jimb@redhat.com>
parents:
2058
diff
changeset
|
787 register int s, len, modified = 0; |
1029 | 788 |
789 properties = validate_plist (properties); | |
790 if (NILP (properties)) | |
791 return Qnil; | |
792 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
793 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
794 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
|
795 |
1029 | 796 i = validate_interval_range (object, &start, &end, hard); |
797 if (NULL_INTERVAL_P (i)) | |
798 return Qnil; | |
799 | |
800 s = XINT (start); | |
801 len = XINT (end) - s; | |
802 | |
803 /* If we're not starting on an interval boundary, we have to | |
804 split this interval. */ | |
805 if (i->position != s) | |
806 { | |
807 /* If this interval already has the properties, we can | |
808 skip it. */ | |
809 if (interval_has_all_properties (properties, i)) | |
810 { | |
811 int got = (LENGTH (i) - (s - i->position)); | |
812 if (got >= len) | |
813 return Qnil; | |
814 len -= got; | |
3858
e07d474bdba9
(Fremove_text_properties, Fadd_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
3698
diff
changeset
|
815 i = next_interval (i); |
1029 | 816 } |
817 else | |
818 { | |
819 unchanged = i; | |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
820 i = split_interval_right (unchanged, s - unchanged->position); |
1029 | 821 copy_properties (unchanged, i); |
822 } | |
823 } | |
824 | |
3553
5f9688c0b704
(Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents:
2783
diff
changeset
|
825 /* We are at the beginning of interval I, with LEN chars to scan. */ |
2124
54179ef9ce35
* textprop.c (Fadd_text_properties): Initialize the modified flag.
Jim Blandy <jimb@redhat.com>
parents:
2058
diff
changeset
|
826 for (;;) |
1029 | 827 { |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
828 if (i == 0) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
829 abort (); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
830 |
1029 | 831 if (LENGTH (i) >= len) |
832 { | |
833 if (interval_has_all_properties (properties, i)) | |
834 return modified ? Qt : Qnil; | |
835 | |
836 if (LENGTH (i) == len) | |
837 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
838 add_properties (properties, i, object); |
1029 | 839 return Qt; |
840 } | |
841 | |
842 /* i doesn't have the properties, and goes past the change limit */ | |
843 unchanged = i; | |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
844 i = split_interval_left (unchanged, len); |
1029 | 845 copy_properties (unchanged, i); |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
846 add_properties (properties, i, object); |
1029 | 847 return Qt; |
848 } | |
849 | |
850 len -= LENGTH (i); | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
851 modified += add_properties (properties, i, object); |
1029 | 852 i = next_interval (i); |
853 } | |
854 } | |
855 | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
856 DEFUN ("put-text-property", Fput_text_property, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
857 Sput_text_property, 4, 5, 0, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
858 "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
|
859 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
|
860 specify the property to add.\n\ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
861 The optional fifth argument, OBJECT,\n\ |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
862 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
|
863 (start, end, prop, value, object) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
864 Lisp_Object start, end, prop, value, object; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
865 { |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
866 Fadd_text_properties (start, end, |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
867 Fcons (prop, Fcons (value, Qnil)), |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
868 object); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
869 return Qnil; |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
870 } |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
871 |
1029 | 872 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
|
873 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
|
874 "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
|
875 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
|
876 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
|
877 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
|
878 (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
|
879 Lisp_Object start, end, props, object; |
1029 | 880 { |
881 register INTERVAL i, unchanged; | |
1211 | 882 register INTERVAL prev_changed = NULL_INTERVAL; |
1029 | 883 register int s, len; |
884 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
885 props = validate_plist (props); |
1029 | 886 |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
887 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
888 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
|
889 |
1029 | 890 i = validate_interval_range (object, &start, &end, hard); |
891 if (NULL_INTERVAL_P (i)) | |
892 return Qnil; | |
893 | |
894 s = XINT (start); | |
895 len = XINT (end) - s; | |
896 | |
897 if (i->position != s) | |
898 { | |
899 unchanged = i; | |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
900 i = split_interval_right (unchanged, s - unchanged->position); |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
901 |
1029 | 902 if (LENGTH (i) > len) |
903 { | |
1211 | 904 copy_properties (unchanged, i); |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
905 i = split_interval_left (i, len); |
3553
5f9688c0b704
(Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents:
2783
diff
changeset
|
906 set_properties (props, i, object); |
1029 | 907 return Qt; |
908 } | |
909 | |
3553
5f9688c0b704
(Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents:
2783
diff
changeset
|
910 set_properties (props, i, object); |
5f9688c0b704
(Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents:
2783
diff
changeset
|
911 |
1211 | 912 if (LENGTH (i) == len) |
913 return Qt; | |
914 | |
915 prev_changed = i; | |
1029 | 916 len -= LENGTH (i); |
917 i = next_interval (i); | |
918 } | |
919 | |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
920 /* 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
|
921 while (len > 0) |
1029 | 922 { |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
923 if (i == 0) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
924 abort (); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
925 |
1029 | 926 if (LENGTH (i) >= len) |
927 { | |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
928 if (LENGTH (i) > len) |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
929 i = split_interval_left (i, len); |
1029 | 930 |
1211 | 931 if (NULL_INTERVAL_P (prev_changed)) |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
932 set_properties (props, i, object); |
1211 | 933 else |
934 merge_interval_left (i); | |
1029 | 935 return Qt; |
936 } | |
937 | |
938 len -= LENGTH (i); | |
1211 | 939 if (NULL_INTERVAL_P (prev_changed)) |
940 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
941 set_properties (props, i, object); |
1211 | 942 prev_changed = i; |
943 } | |
944 else | |
945 prev_changed = i = merge_interval_left (i); | |
946 | |
1029 | 947 i = next_interval (i); |
948 } | |
949 | |
950 return Qt; | |
951 } | |
952 | |
953 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
|
954 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
|
955 "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
|
956 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
|
957 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
|
958 \(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
|
959 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
|
960 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
|
961 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
|
962 (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
|
963 Lisp_Object start, end, props, object; |
1029 | 964 { |
965 register INTERVAL i, unchanged; | |
2124
54179ef9ce35
* textprop.c (Fadd_text_properties): Initialize the modified flag.
Jim Blandy <jimb@redhat.com>
parents:
2058
diff
changeset
|
966 register int s, len, modified = 0; |
1029 | 967 |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
968 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
969 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
|
970 |
1029 | 971 i = validate_interval_range (object, &start, &end, soft); |
972 if (NULL_INTERVAL_P (i)) | |
973 return Qnil; | |
974 | |
975 s = XINT (start); | |
976 len = XINT (end) - s; | |
1211 | 977 |
1029 | 978 if (i->position != s) |
979 { | |
980 /* No properties on this first interval -- return if | |
981 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
|
982 if (! interval_has_some_properties (props, i)) |
1029 | 983 { |
984 int got = (LENGTH (i) - (s - i->position)); | |
985 if (got >= len) | |
986 return Qnil; | |
987 len -= got; | |
3858
e07d474bdba9
(Fremove_text_properties, Fadd_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
3698
diff
changeset
|
988 i = next_interval (i); |
1029 | 989 } |
3553
5f9688c0b704
(Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents:
2783
diff
changeset
|
990 /* Split away the beginning of this interval; what we don't |
5f9688c0b704
(Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents:
2783
diff
changeset
|
991 want to modify. */ |
1029 | 992 else |
993 { | |
994 unchanged = i; | |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
995 i = split_interval_right (unchanged, s - unchanged->position); |
1029 | 996 copy_properties (unchanged, i); |
997 } | |
998 } | |
999 | |
1000 /* We are at the beginning of an interval, with len to scan */ | |
2124
54179ef9ce35
* textprop.c (Fadd_text_properties): Initialize the modified flag.
Jim Blandy <jimb@redhat.com>
parents:
2058
diff
changeset
|
1001 for (;;) |
1029 | 1002 { |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1003 if (i == 0) |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1004 abort (); |
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1005 |
1029 | 1006 if (LENGTH (i) >= len) |
1007 { | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1008 if (! interval_has_some_properties (props, i)) |
1029 | 1009 return modified ? Qt : Qnil; |
1010 | |
1011 if (LENGTH (i) == len) | |
1012 { | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1013 remove_properties (props, i, object); |
1029 | 1014 return Qt; |
1015 } | |
1016 | |
1017 /* i has the properties, and goes past the change limit */ | |
3553
5f9688c0b704
(Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents:
2783
diff
changeset
|
1018 unchanged = i; |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1019 i = split_interval_left (i, len); |
1029 | 1020 copy_properties (unchanged, i); |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1021 remove_properties (props, i, object); |
1029 | 1022 return Qt; |
1023 } | |
1024 | |
1025 len -= LENGTH (i); | |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1026 modified += remove_properties (props, i, object); |
1029 | 1027 i = next_interval (i); |
1028 } | |
1029 } | |
1030 | |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1031 DEFUN ("text-property-any", Ftext_property_any, |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1032 Stext_property_any, 4, 5, 0, |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1033 "Check text from START to END to see if PROP is ever `eq' to VALUE.\n\ |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1034 If so, return the position of the first character whose PROP is `eq'\n\ |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1035 to VALUE. Otherwise return nil.\n\ |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1036 The optional fifth argument, OBJECT, is the string or buffer\n\ |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1037 containing the text.") |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1038 (start, end, prop, value, object) |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1039 Lisp_Object start, end, prop, value, object; |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1040 { |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1041 register INTERVAL i; |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1042 register int e, pos; |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1043 |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1044 if (NILP (object)) |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1045 XSET (object, Lisp_Buffer, current_buffer); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1046 i = validate_interval_range (object, &start, &end, soft); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1047 e = XINT (end); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1048 |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1049 while (! NULL_INTERVAL_P (i)) |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1050 { |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1051 if (i->position >= e) |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1052 break; |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1053 if (EQ (textget (i->plist, prop), value)) |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1054 { |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1055 pos = i->position; |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1056 if (pos < XINT (start)) |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1057 pos = XINT (start); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1058 return make_number (pos - (XTYPE (object) == Lisp_String)); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1059 } |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1060 i = next_interval (i); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1061 } |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1062 return Qnil; |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1063 } |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1064 |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1065 DEFUN ("text-property-not-all", Ftext_property_not_all, |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1066 Stext_property_not_all, 4, 5, 0, |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1067 "Check text from START to END to see if PROP is ever not `eq' to VALUE.\n\ |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1068 If so, return the position of the first character whose PROP is not\n\ |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1069 `eq' to VALUE. Otherwise, return nil.\n\ |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1070 The optional fifth argument, OBJECT, is the string or buffer\n\ |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1071 containing the text.") |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1072 (start, end, prop, value, object) |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1073 Lisp_Object start, end, prop, value, object; |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1074 { |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1075 register INTERVAL i; |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1076 register int s, e; |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1077 |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1078 if (NILP (object)) |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1079 XSET (object, Lisp_Buffer, current_buffer); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1080 i = validate_interval_range (object, &start, &end, soft); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1081 if (NULL_INTERVAL_P (i)) |
5114
b37f62d72049
(Ftext_property_not_all): For trivial yes, return start, not Qt.
Richard M. Stallman <rms@gnu.org>
parents:
5086
diff
changeset
|
1082 return (NILP (value) || EQ (start, end)) ? Qnil : start; |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1083 s = XINT (start); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1084 e = XINT (end); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1085 |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1086 while (! NULL_INTERVAL_P (i)) |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1087 { |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1088 if (i->position >= e) |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1089 break; |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1090 if (! EQ (textget (i->plist, prop), value)) |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1091 { |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1092 if (i->position > s) |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1093 s = i->position; |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1094 return make_number (s - (XTYPE (object) == Lisp_String)); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1095 } |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1096 i = next_interval (i); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1097 } |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1098 return Qnil; |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1099 } |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1100 |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1101 #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
|
1102 |
1029 | 1103 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
|
1104 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
|
1105 "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
|
1106 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
|
1107 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
|
1108 (start, end, object) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1109 Lisp_Object start, end, object; |
1029 | 1110 { |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1111 register INTERVAL i; |
1305 | 1112 register INTERVAL prev_changed = NULL_INTERVAL; |
1029 | 1113 register int s, len, modified; |
1114 | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1115 if (NILP (object)) |
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1116 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
|
1117 |
1029 | 1118 i = validate_interval_range (object, &start, &end, soft); |
1119 if (NULL_INTERVAL_P (i)) | |
1120 return Qnil; | |
1121 | |
1122 s = XINT (start); | |
1123 len = XINT (end) - s; | |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1124 |
1029 | 1125 if (i->position != s) |
1126 { | |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1127 register int got; |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1128 register INTERVAL unchanged = i; |
1029 | 1129 |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1130 /* 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
|
1131 if (! NILP (i->plist)) |
1029 | 1132 { |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1133 i = split_interval_right (unchanged, s - unchanged->position); |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1134 i->plist = Qnil; |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1135 modified++; |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1136 |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1137 if (LENGTH (i) > len) |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1138 { |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1139 i = split_interval_right (i, len); |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1140 copy_properties (unchanged, i); |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1141 return Qt; |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1142 } |
1029 | 1143 |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1144 if (LENGTH (i) == len) |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1145 return Qt; |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1146 |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1147 got = LENGTH (i); |
1029 | 1148 } |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1149 /* 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
|
1150 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
|
1151 anything.*/ |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1152 else if (LENGTH (i) - (s - i->position) <= len) |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1153 return Qnil; |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1154 /* 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
|
1155 how much we've gotten. */ |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1156 else |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1157 got = LENGTH (i) - (s - i->position); |
1029 | 1158 |
1159 len -= got; | |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1160 prev_changed = i; |
1029 | 1161 i = next_interval (i); |
1162 } | |
1163 | |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1164 /* We are starting at the beginning of an interval, I. */ |
1029 | 1165 while (len > 0) |
1166 { | |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1167 if (LENGTH (i) >= len) |
1029 | 1168 { |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1169 /* 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
|
1170 if (NILP (i->plist)) |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1171 { |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1172 if (! NULL_INTERVAL_P (prev_changed)) |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1173 merge_interval_left (i); |
1029 | 1174 |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1175 return modified ? Qt : Qnil; |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1176 } |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1177 |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1178 if (LENGTH (i) > len) |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1179 i = split_interval_left (i, len); |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1180 if (! NULL_INTERVAL_P (prev_changed)) |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1181 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
|
1182 else |
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1183 i->plist = Qnil; |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1184 |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1185 return Qt; |
1029 | 1186 } |
1187 | |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1188 /* Here if we still need to erase past the end of I */ |
1029 | 1189 len -= LENGTH (i); |
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1190 if (NULL_INTERVAL_P (prev_changed)) |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1191 { |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1192 modified += erase_properties (i); |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1193 prev_changed = i; |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1194 } |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1195 else |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1196 { |
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1197 modified += ! NILP (i->plist); |
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1198 /* 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
|
1199 prev_changed = i = merge_interval_left (i); |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1200 } |
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1201 |
1029 | 1202 i = next_interval (i); |
1203 } | |
1204 | |
1205 return modified ? Qt : Qnil; | |
1206 } | |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1207 #endif /* 0 */ |
1029 | 1208 |
4007
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1209 /* I don't think this is the right interface to export; how often do you |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1210 want to do something like this, other than when you're copying objects |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1211 around? |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1212 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1213 I think it would be better to have a pair of functions, one which |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1214 returns the text properties of a region as a list of ranges and |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1215 plists, and another which applies such a list to another object. */ |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1216 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1217 /* DEFUN ("copy-text-properties", Fcopy_text_properties, |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1218 Scopy_text_properties, 5, 6, 0, |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1219 "Add properties from SRC-START to SRC-END of SRC at DEST-POS of DEST.\n\ |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1220 SRC and DEST may each refer to strings or buffers.\n\ |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1221 Optional sixth argument PROP causes only that property to be copied.\n\ |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1222 Properties are copied to DEST as if by `add-text-properties'.\n\ |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1223 Return t if any property value actually changed, nil otherwise.") */ |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1224 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1225 Lisp_Object |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1226 copy_text_properties (start, end, src, pos, dest, prop) |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1227 Lisp_Object start, end, src, pos, dest, prop; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1228 { |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1229 INTERVAL i; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1230 Lisp_Object res; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1231 Lisp_Object stuff; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1232 Lisp_Object plist; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1233 int s, e, e2, p, len, modified = 0; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1234 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1235 i = validate_interval_range (src, &start, &end, soft); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1236 if (NULL_INTERVAL_P (i)) |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1237 return Qnil; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1238 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1239 CHECK_NUMBER_COERCE_MARKER (pos, 0); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1240 { |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1241 Lisp_Object dest_start, dest_end; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1242 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1243 dest_start = pos; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1244 XFASTINT (dest_end) = XINT (dest_start) + (XINT (end) - XINT (start)); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1245 /* Apply this to a copy of pos; it will try to increment its arguments, |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1246 which we don't want. */ |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1247 validate_interval_range (dest, &dest_start, &dest_end, soft); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1248 } |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1249 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1250 s = XINT (start); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1251 e = XINT (end); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1252 p = XINT (pos); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1253 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1254 stuff = Qnil; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1255 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1256 while (s < e) |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1257 { |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1258 e2 = i->position + LENGTH (i); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1259 if (e2 > e) |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1260 e2 = e; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1261 len = e2 - s; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1262 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1263 plist = i->plist; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1264 if (! NILP (prop)) |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1265 while (! NILP (plist)) |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1266 { |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1267 if (EQ (Fcar (plist), prop)) |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1268 { |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1269 plist = Fcons (prop, Fcons (Fcar (Fcdr (plist)), Qnil)); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1270 break; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1271 } |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1272 plist = Fcdr (Fcdr (plist)); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1273 } |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1274 if (! NILP (plist)) |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1275 { |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1276 /* Must defer modifications to the interval tree in case src |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1277 and dest refer to the same string or buffer. */ |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1278 stuff = Fcons (Fcons (make_number (p), |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1279 Fcons (make_number (p + len), |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1280 Fcons (plist, Qnil))), |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1281 stuff); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1282 } |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1283 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1284 i = next_interval (i); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1285 if (NULL_INTERVAL_P (i)) |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1286 break; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1287 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1288 p += len; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1289 s = i->position; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1290 } |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1291 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1292 while (! NILP (stuff)) |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1293 { |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1294 res = Fcar (stuff); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1295 res = Fadd_text_properties (Fcar (res), Fcar (Fcdr (res)), |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1296 Fcar (Fcdr (Fcdr (res))), dest); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1297 if (! NILP (res)) |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1298 modified++; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1299 stuff = Fcdr (stuff); |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1300 } |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1301 |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1302 return modified ? Qt : Qnil; |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1303 } |
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1304 |
1029 | 1305 void |
1306 syms_of_textprop () | |
1307 { | |
1308 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
|
1309 "Threshold for rebalancing interval trees, expressed as the\n\ |
1029 | 1310 percentage by which the left interval tree should not differ from the right."); |
1311 interval_balance_threshold = 8; | |
1312 | |
4242
49007dbbec4c
(syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents:
4214
diff
changeset
|
1313 DEFVAR_LISP ("inhibit-point-motion-hooks", &Vinhibit_point_motion_hooks, |
5646 | 1314 "If non-nil, don't call the text property values of\n\ |
4242
49007dbbec4c
(syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents:
4214
diff
changeset
|
1315 `point-left' and `point-entered'."); |
49007dbbec4c
(syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents:
4214
diff
changeset
|
1316 Vinhibit_point_motion_hooks = Qnil; |
49007dbbec4c
(syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents:
4214
diff
changeset
|
1317 |
1029 | 1318 /* Common attributes one might give text */ |
1319 | |
1320 staticpro (&Qforeground); | |
1321 Qforeground = intern ("foreground"); | |
1322 staticpro (&Qbackground); | |
1323 Qbackground = intern ("background"); | |
1324 staticpro (&Qfont); | |
1325 Qfont = intern ("font"); | |
1326 staticpro (&Qstipple); | |
1327 Qstipple = intern ("stipple"); | |
1328 staticpro (&Qunderline); | |
1329 Qunderline = intern ("underline"); | |
1330 staticpro (&Qread_only); | |
1331 Qread_only = intern ("read-only"); | |
1332 staticpro (&Qinvisible); | |
1333 Qinvisible = intern ("invisible"); | |
6755
a2bccbc870e6
(syms_of_textprop): Initialize Qintangible.
Karl Heuer <kwzh@gnu.org>
parents:
6681
diff
changeset
|
1334 staticpro (&Qintangible); |
a2bccbc870e6
(syms_of_textprop): Initialize Qintangible.
Karl Heuer <kwzh@gnu.org>
parents:
6681
diff
changeset
|
1335 Qintangible = intern ("intangible"); |
2058
a43d0bb1b7d8
(Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents:
2053
diff
changeset
|
1336 staticpro (&Qcategory); |
a43d0bb1b7d8
(Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents:
2053
diff
changeset
|
1337 Qcategory = intern ("category"); |
a43d0bb1b7d8
(Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents:
2053
diff
changeset
|
1338 staticpro (&Qlocal_map); |
a43d0bb1b7d8
(Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents:
2053
diff
changeset
|
1339 Qlocal_map = intern ("local-map"); |
4381
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
1340 staticpro (&Qfront_sticky); |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
1341 Qfront_sticky = intern ("front-sticky"); |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
1342 staticpro (&Qrear_nonsticky); |
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
1343 Qrear_nonsticky = intern ("rear-nonsticky"); |
1029 | 1344 |
1345 /* Properties that text might use to specify certain actions */ | |
1346 | |
1347 staticpro (&Qmouse_left); | |
1348 Qmouse_left = intern ("mouse-left"); | |
1349 staticpro (&Qmouse_entered); | |
1350 Qmouse_entered = intern ("mouse-entered"); | |
1351 staticpro (&Qpoint_left); | |
1352 Qpoint_left = intern ("point-left"); | |
1353 staticpro (&Qpoint_entered); | |
1354 Qpoint_entered = intern ("point-entered"); | |
1355 | |
1356 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
|
1357 defsubr (&Sget_text_property); |
7582
454c279b6d18
(syms_of_textprop): Set up Lisp fn get-char-property.
Richard M. Stallman <rms@gnu.org>
parents:
7307
diff
changeset
|
1358 defsubr (&Sget_char_property); |
1029 | 1359 defsubr (&Snext_property_change); |
1211 | 1360 defsubr (&Snext_single_property_change); |
1029 | 1361 defsubr (&Sprevious_property_change); |
1211 | 1362 defsubr (&Sprevious_single_property_change); |
1029 | 1363 defsubr (&Sadd_text_properties); |
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1364 defsubr (&Sput_text_property); |
1029 | 1365 defsubr (&Sset_text_properties); |
1366 defsubr (&Sremove_text_properties); | |
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1367 defsubr (&Stext_property_any); |
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1368 defsubr (&Stext_property_not_all); |
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1369 /* defsubr (&Serase_text_properties); */ |
4007
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1370 /* defsubr (&Scopy_text_properties); */ |
1029 | 1371 } |
1302
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1372 |
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1373 #else |
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1374 |
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1375 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
|
1376 |
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1377 #endif /* USE_TEXT_PROPERTIES */ |