Mercurial > emacs
annotate src/textprop.c @ 8897:69cdecdaebf7
Add #include "keyboard.h"
| author | Karl Heuer <kwzh@gnu.org> |
|---|---|
| date | Mon, 19 Sep 1994 00:12:39 +0000 |
| parents | 7e9547af43e8 |
| children | f7de8b4cb1b8 |
| 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) |
|
8856
7e9547af43e8
(property_value): Declare args plist, prop.
Richard M. Stallman <rms@gnu.org>
parents:
8762
diff
changeset
|
253 Lisp_Object plist, prop; |
|
3960
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
254 { |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
255 Lisp_Object value; |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
256 |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
257 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
|
258 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
|
259 return XCONS (value)->car; |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
260 else |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
261 plist = XCONS (value)->cdr; |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
262 |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
263 return Qunbound; |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
264 } |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
265 |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
266 /* Set the properties of INTERVAL to PROPERTIES, |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
267 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
|
268 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
|
269 |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
270 static void |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
271 set_properties (properties, interval, object) |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
272 Lisp_Object properties, object; |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
273 INTERVAL interval; |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
274 { |
|
3960
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
275 Lisp_Object sym, value; |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
276 |
|
3960
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
277 if (BUFFERP (object)) |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
278 { |
|
3960
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
279 /* 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
|
280 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
|
281 for (sym = interval->plist; |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
282 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
|
283 sym = XCONS (value)->cdr) |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
284 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
|
285 XCONS (value)->car)) |
|
4076
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
286 { |
|
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
287 modify_region (XBUFFER (object), |
|
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), |
|
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
289 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
|
290 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
|
291 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
|
292 object); |
|
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
293 } |
|
3960
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
294 |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
295 /* 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
|
296 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
|
297 for (sym = properties; |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
298 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
|
299 sym = XCONS (value)->cdr) |
|
7be89f84a882
* textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents:
3858
diff
changeset
|
300 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
|
301 { |
|
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
302 modify_region (XBUFFER (object), |
|
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), |
|
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
304 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
|
305 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
|
306 XCONS (sym)->car, Qnil, |
|
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
307 object); |
|
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
308 } |
|
1965
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 |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
311 /* Store new properties. */ |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
312 interval->plist = Fcopy_sequence (properties); |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
313 } |
| 1029 | 314 |
| 315 /* Add the properties of PLIST to the interval I, or set | |
| 316 the value of I's property to the value of the property on PLIST | |
| 317 if they are different. | |
| 318 | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
319 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
|
320 |
| 1029 | 321 Return nonzero if this changes I (i.e., if any members of PLIST |
| 322 are actually added to I's plist) */ | |
| 323 | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
324 static int |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
325 add_properties (plist, i, object) |
| 1029 | 326 Lisp_Object plist; |
| 327 INTERVAL i; | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
328 Lisp_Object object; |
| 1029 | 329 { |
| 330 register Lisp_Object tail1, tail2, sym1, val1; | |
| 331 register int changed = 0; | |
| 332 register int found; | |
| 333 | |
| 334 /* Go through each element of PLIST. */ | |
| 335 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1))) | |
| 336 { | |
| 337 sym1 = Fcar (tail1); | |
| 338 val1 = Fcar (Fcdr (tail1)); | |
| 339 found = 0; | |
| 340 | |
| 341 /* Go through I's plist, looking for sym1 */ | |
| 342 for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2))) | |
| 343 if (EQ (sym1, Fcar (tail2))) | |
| 344 { | |
|
6516
8278049ee7a7
(add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6064
diff
changeset
|
345 register Lisp_Object this_cdr; |
| 1029 | 346 |
|
6516
8278049ee7a7
(add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6064
diff
changeset
|
347 this_cdr = Fcdr (tail2); |
| 1029 | 348 /* Found the property. Now check its value. */ |
| 349 found = 1; | |
| 350 | |
| 351 /* The properties have the same value on both lists. | |
| 352 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
|
353 if (EQ (val1, Fcar (this_cdr))) |
| 1029 | 354 break; |
| 355 | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
356 /* 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
|
357 if (XTYPE (object) == Lisp_Buffer) |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
358 { |
|
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2762
diff
changeset
|
359 modify_region (XBUFFER (object), |
|
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2762
diff
changeset
|
360 make_number (i->position), |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
361 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
|
362 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
|
363 sym1, Fcar (this_cdr), object); |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
364 } |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
365 |
| 1029 | 366 /* I's property has a different value -- change it */ |
| 367 Fsetcar (this_cdr, val1); | |
| 368 changed++; | |
| 369 break; | |
| 370 } | |
| 371 | |
| 372 if (! found) | |
| 373 { | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
374 /* 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
|
375 if (XTYPE (object) == Lisp_Buffer) |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
376 { |
|
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2762
diff
changeset
|
377 modify_region (XBUFFER (object), |
|
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2762
diff
changeset
|
378 make_number (i->position), |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
379 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
|
380 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
|
381 sym1, Qnil, object); |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
382 } |
| 1029 | 383 i->plist = Fcons (sym1, Fcons (val1, i->plist)); |
| 384 changed++; | |
| 385 } | |
| 386 } | |
| 387 | |
| 388 return changed; | |
| 389 } | |
| 390 | |
| 391 /* 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
|
392 from I's plist. |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
393 OBJECT is the string or buffer containing I. */ |
| 1029 | 394 |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
395 static int |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
396 remove_properties (plist, i, object) |
| 1029 | 397 Lisp_Object plist; |
| 398 INTERVAL i; | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
399 Lisp_Object object; |
| 1029 | 400 { |
|
6516
8278049ee7a7
(add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6064
diff
changeset
|
401 register Lisp_Object tail1, tail2, sym, current_plist; |
| 1029 | 402 register int changed = 0; |
| 403 | |
|
6516
8278049ee7a7
(add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6064
diff
changeset
|
404 current_plist = i->plist; |
| 1029 | 405 /* Go through each element of plist. */ |
| 406 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1))) | |
| 407 { | |
| 408 sym = Fcar (tail1); | |
| 409 | |
| 410 /* First, remove the symbol if its at the head of the list */ | |
| 411 while (! NILP (current_plist) && EQ (sym, Fcar (current_plist))) | |
| 412 { | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
413 if (XTYPE (object) == Lisp_Buffer) |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
414 { |
|
4076
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
415 modify_region (XBUFFER (object), |
|
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), |
|
9fd5ecacfbbb
(Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents:
4007
diff
changeset
|
417 make_number (i->position + LENGTH (i))); |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
418 record_property_change (i->position, LENGTH (i), |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
419 sym, Fcar (Fcdr (current_plist)), |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
420 object); |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
421 } |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
422 |
| 1029 | 423 current_plist = Fcdr (Fcdr (current_plist)); |
| 424 changed++; | |
| 425 } | |
| 426 | |
| 427 /* Go through i's plist, looking for sym */ | |
| 428 tail2 = current_plist; | |
| 429 while (! NILP (tail2)) | |
| 430 { | |
|
6516
8278049ee7a7
(add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6064
diff
changeset
|
431 register Lisp_Object this; |
|
8278049ee7a7
(add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6064
diff
changeset
|
432 this = Fcdr (Fcdr (tail2)); |
| 1029 | 433 if (EQ (sym, Fcar (this))) |
| 434 { | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
435 if (XTYPE (object) == Lisp_Buffer) |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
436 { |
|
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2762
diff
changeset
|
437 modify_region (XBUFFER (object), |
|
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2762
diff
changeset
|
438 make_number (i->position), |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
439 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
|
440 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
|
441 sym, Fcar (Fcdr (this)), object); |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
442 } |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
443 |
| 1029 | 444 Fsetcdr (Fcdr (tail2), Fcdr (Fcdr (this))); |
| 445 changed++; | |
| 446 } | |
| 447 tail2 = this; | |
| 448 } | |
| 449 } | |
| 450 | |
| 451 if (changed) | |
| 452 i->plist = current_plist; | |
| 453 return changed; | |
| 454 } | |
| 455 | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
456 #if 0 |
| 1029 | 457 /* Remove all properties from interval I. Return non-zero |
| 458 if this changes the interval. */ | |
| 459 | |
| 460 static INLINE int | |
| 461 erase_properties (i) | |
| 462 INTERVAL i; | |
| 463 { | |
| 464 if (NILP (i->plist)) | |
| 465 return 0; | |
| 466 | |
| 467 i->plist = Qnil; | |
| 468 return 1; | |
| 469 } | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
470 #endif |
| 1029 | 471 |
| 472 DEFUN ("text-properties-at", Ftext_properties_at, | |
| 473 Stext_properties_at, 1, 2, 0, | |
| 474 "Return the list of properties held by the character at POSITION\n\ | |
| 475 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
|
476 defaults to the current buffer.\n\ |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
477 If POSITION is at the end of OBJECT, the value is nil.") |
| 1029 | 478 (pos, object) |
| 479 Lisp_Object pos, object; | |
| 480 { | |
| 481 register INTERVAL i; | |
| 482 | |
| 483 if (NILP (object)) | |
| 484 XSET (object, Lisp_Buffer, current_buffer); | |
| 485 | |
| 486 i = validate_interval_range (object, &pos, &pos, soft); | |
| 487 if (NULL_INTERVAL_P (i)) | |
| 488 return Qnil; | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
489 /* 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
|
490 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
|
491 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
|
492 since no character follows. */ |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
493 if (XINT (pos) == LENGTH (i) + i->position) |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
494 return Qnil; |
| 1029 | 495 |
| 496 return i->plist; | |
| 497 } | |
| 498 | |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
499 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
|
500 "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
|
501 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
|
502 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
|
503 (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
|
504 Lisp_Object pos, object; |
|
8271
e8556db1b7f3
(Fget_text_property): Simplify using Ftext_properties_at.
Richard M. Stallman <rms@gnu.org>
parents:
7773
diff
changeset
|
505 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
|
506 { |
|
8271
e8556db1b7f3
(Fget_text_property): Simplify using Ftext_properties_at.
Richard M. Stallman <rms@gnu.org>
parents:
7773
diff
changeset
|
507 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
|
508 } |
|
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
509 |
|
6063
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
510 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
|
511 "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
|
512 OBJECT is optional and defaults to the current buffer.\n\ |
| 6681 | 513 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
|
514 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
|
515 text properties.\n\ |
|
bdfff039f6e3
(Fget_char_property): Fix docstring.
Karl Heuer <kwzh@gnu.org>
parents:
6063
diff
changeset
|
516 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
|
517 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
|
518 (pos, prop, object) |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
519 Lisp_Object pos, object; |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
520 register Lisp_Object prop; |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
521 { |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
522 struct window *w = 0; |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
523 |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
524 CHECK_NUMBER_COERCE_MARKER (pos, 0); |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
525 |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
526 if (NILP (object)) |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
527 XSET (object, Lisp_Buffer, current_buffer); |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
528 |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
529 if (WINDOWP (object)) |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
530 { |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
531 w = XWINDOW (object); |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
532 XSET (object, Lisp_Buffer, w->buffer); |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
533 } |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
534 if (BUFFERP (object)) |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
535 { |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
536 int posn = XINT (pos); |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
537 int noverlays; |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
538 Lisp_Object *overlay_vec, tem; |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
539 int next_overlay; |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
540 int len; |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
541 |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
542 /* First try with room for 40 overlays. */ |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
543 len = 40; |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
544 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
545 |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
546 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
|
547 |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
548 /* If there are more than 40, |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
549 make enough space for all, and try again. */ |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
550 if (noverlays > len) |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
551 { |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
552 len = noverlays; |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
553 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
554 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
|
555 } |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
556 noverlays = sort_overlays (overlay_vec, noverlays, w); |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
557 |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
558 /* Now check the overlays in order of decreasing priority. */ |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
559 while (--noverlays >= 0) |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
560 { |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
561 tem = Foverlay_get (overlay_vec[noverlays], prop); |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
562 if (!NILP (tem)) |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
563 return (tem); |
|
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 } |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
566 /* 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
|
567 simpler case. */ |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
568 return (Fget_text_property (pos, prop, object)); |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
569 } |
|
233fffcfb6c8
(Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents:
5646
diff
changeset
|
570 |
| 1029 | 571 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
|
572 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
|
573 "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
|
574 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
|
575 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
|
576 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
|
577 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
|
578 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
|
579 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
|
580 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
|
581 (pos, object, limit) |
|
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
582 Lisp_Object pos, object, limit; |
| 1029 | 583 { |
| 584 register INTERVAL i, next; | |
| 585 | |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
586 if (NILP (object)) |
|
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
587 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
|
588 |
|
7092
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
589 if (!NILP (limit)) |
|
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
590 CHECK_NUMBER_COERCE_MARKER (limit, 0); |
|
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
591 |
| 1029 | 592 i = validate_interval_range (object, &pos, &pos, soft); |
| 593 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
|
594 return limit; |
| 1029 | 595 |
| 596 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
|
597 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
|
598 && (NILP (limit) || next->position < XFASTINT (limit))) |
| 1029 | 599 next = next_interval (next); |
| 600 | |
| 601 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
|
602 return limit; |
|
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
603 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
|
604 return limit; |
| 1029 | 605 |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
606 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
|
607 } |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
608 |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
609 /* 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
|
610 |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
611 int |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
612 property_change_between_p (beg, end) |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
613 int beg, end; |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
614 { |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
615 register INTERVAL i, next; |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
616 Lisp_Object object, pos; |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
617 |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
618 XSET (object, Lisp_Buffer, current_buffer); |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
619 XFASTINT (pos) = beg; |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
620 |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
621 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
|
622 if (NULL_INTERVAL_P (i)) |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
623 return 0; |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
624 |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
625 next = next_interval (i); |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
626 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
|
627 { |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
628 next = next_interval (next); |
|
4614
2c5557903994
(property_change_between_p): Test NULL_INTERVAL_P
Richard M. Stallman <rms@gnu.org>
parents:
4381
diff
changeset
|
629 if (NULL_INTERVAL_P (next)) |
|
2c5557903994
(property_change_between_p): Test NULL_INTERVAL_P
Richard M. Stallman <rms@gnu.org>
parents:
4381
diff
changeset
|
630 return 0; |
|
4381
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
631 if (next->position >= end) |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
632 return 0; |
|
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 |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
635 if (NULL_INTERVAL_P (next)) |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
636 return 0; |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
637 |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
638 return 1; |
| 1029 | 639 } |
| 640 | |
| 1211 | 641 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
|
642 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
|
643 "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
|
644 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
|
645 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
|
646 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
|
647 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
|
648 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
|
649 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
|
650 If the optional fourth argument LIMIT is non-nil, don't search\n\ |
| 5645 | 651 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
|
652 (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
|
653 Lisp_Object pos, prop, object, limit; |
| 1211 | 654 { |
| 655 register INTERVAL i, next; | |
| 656 register Lisp_Object here_val; | |
| 657 | |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
658 if (NILP (object)) |
|
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
659 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
|
660 |
|
7092
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
661 if (!NILP (limit)) |
|
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
662 CHECK_NUMBER_COERCE_MARKER (limit, 0); |
|
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
663 |
| 1211 | 664 i = validate_interval_range (object, &pos, &pos, soft); |
| 665 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
|
666 return limit; |
| 1211 | 667 |
|
2762
dd28ed1e1928
* textprop.c (Fnext_single_property_change,
Jim Blandy <jimb@redhat.com>
parents:
2124
diff
changeset
|
668 here_val = textget (i->plist, prop); |
| 1211 | 669 next = next_interval (i); |
|
2762
dd28ed1e1928
* textprop.c (Fnext_single_property_change,
Jim Blandy <jimb@redhat.com>
parents:
2124
diff
changeset
|
670 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
|
671 && 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
|
672 && (NILP (limit) || next->position < XFASTINT (limit))) |
| 1211 | 673 next = next_interval (next); |
| 674 | |
| 675 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
|
676 return limit; |
|
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
677 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
|
678 return limit; |
| 1211 | 679 |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
680 return next->position - (XTYPE (object) == Lisp_String); |
| 1211 | 681 } |
| 682 | |
| 1029 | 683 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
|
684 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
|
685 "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
|
686 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
|
687 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
|
688 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
|
689 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
|
690 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
|
691 If the optional third argument LIMIT is non-nil, don't search\n\ |
| 5645 | 692 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
|
693 (pos, object, limit) |
|
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
694 Lisp_Object pos, object, limit; |
| 1029 | 695 { |
| 696 register INTERVAL i, previous; | |
| 697 | |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
698 if (NILP (object)) |
|
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
699 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
|
700 |
|
7092
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
701 if (!NILP (limit)) |
|
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
702 CHECK_NUMBER_COERCE_MARKER (limit, 0); |
|
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
703 |
| 1029 | 704 i = validate_interval_range (object, &pos, &pos, soft); |
| 705 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
|
706 return limit; |
| 1029 | 707 |
|
5644
2abe67658895
(Fprevious_property_change): Move back at least 1 char.
Richard M. Stallman <rms@gnu.org>
parents:
5114
diff
changeset
|
708 /* 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
|
709 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
|
710 i = previous_interval (i); |
|
2abe67658895
(Fprevious_property_change): Move back at least 1 char.
Richard M. Stallman <rms@gnu.org>
parents:
5114
diff
changeset
|
711 |
| 1029 | 712 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
|
713 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
|
714 && (NILP (limit) |
|
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
715 || previous->position + LENGTH (previous) > XFASTINT (limit))) |
| 1029 | 716 previous = previous_interval (previous); |
| 717 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
|
718 return limit; |
|
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
719 if (!NILP (limit) |
|
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
720 && !(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
|
721 return limit; |
| 1029 | 722 |
|
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
723 return (previous->position + LENGTH (previous) |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
724 - (XTYPE (object) == Lisp_String)); |
| 1029 | 725 } |
| 726 | |
| 1211 | 727 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
|
728 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
|
729 "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
|
730 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
|
731 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
|
732 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
|
733 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
|
734 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
|
735 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
|
736 If the optional fourth argument LIMIT is non-nil, don't search\n\ |
| 5645 | 737 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
|
738 (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
|
739 Lisp_Object pos, prop, object, limit; |
| 1211 | 740 { |
| 741 register INTERVAL i, previous; | |
| 742 register Lisp_Object here_val; | |
| 743 | |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
744 if (NILP (object)) |
|
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
745 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
|
746 |
|
7092
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
747 if (!NILP (limit)) |
|
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
748 CHECK_NUMBER_COERCE_MARKER (limit, 0); |
|
b6b93953cc83
(F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents:
6755
diff
changeset
|
749 |
| 1211 | 750 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
|
751 |
|
2226c7efb3da
(Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents:
7582
diff
changeset
|
752 /* 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
|
753 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
|
754 i = previous_interval (i); |
|
2226c7efb3da
(Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents:
7582
diff
changeset
|
755 |
| 1211 | 756 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
|
757 return limit; |
| 1211 | 758 |
|
2762
dd28ed1e1928
* textprop.c (Fnext_single_property_change,
Jim Blandy <jimb@redhat.com>
parents:
2124
diff
changeset
|
759 here_val = textget (i->plist, prop); |
| 1211 | 760 previous = previous_interval (i); |
| 761 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
|
762 && 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
|
763 && (NILP (limit) |
|
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
764 || previous->position + LENGTH (previous) > XFASTINT (limit))) |
| 1211 | 765 previous = previous_interval (previous); |
| 766 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
|
767 return limit; |
|
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
768 if (!NILP (limit) |
|
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
769 && !(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
|
770 return limit; |
| 1211 | 771 |
|
5086
6e9634463e93
(Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents:
5020
diff
changeset
|
772 return (previous->position + LENGTH (previous) |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
773 - (XTYPE (object) == Lisp_String)); |
| 1211 | 774 } |
| 775 | |
| 1029 | 776 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
|
777 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
|
778 "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
|
779 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
|
780 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
|
781 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
|
782 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
|
783 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
|
784 (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
|
785 Lisp_Object start, end, properties, object; |
| 1029 | 786 { |
| 787 register INTERVAL i, unchanged; | |
|
2124
54179ef9ce35
* textprop.c (Fadd_text_properties): Initialize the modified flag.
Jim Blandy <jimb@redhat.com>
parents:
2058
diff
changeset
|
788 register int s, len, modified = 0; |
| 1029 | 789 |
| 790 properties = validate_plist (properties); | |
| 791 if (NILP (properties)) | |
| 792 return Qnil; | |
| 793 | |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
794 if (NILP (object)) |
|
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
795 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
|
796 |
| 1029 | 797 i = validate_interval_range (object, &start, &end, hard); |
| 798 if (NULL_INTERVAL_P (i)) | |
| 799 return Qnil; | |
| 800 | |
| 801 s = XINT (start); | |
| 802 len = XINT (end) - s; | |
| 803 | |
| 804 /* If we're not starting on an interval boundary, we have to | |
| 805 split this interval. */ | |
| 806 if (i->position != s) | |
| 807 { | |
| 808 /* If this interval already has the properties, we can | |
| 809 skip it. */ | |
| 810 if (interval_has_all_properties (properties, i)) | |
| 811 { | |
| 812 int got = (LENGTH (i) - (s - i->position)); | |
| 813 if (got >= len) | |
| 814 return Qnil; | |
| 815 len -= got; | |
|
3858
e07d474bdba9
(Fremove_text_properties, Fadd_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
3698
diff
changeset
|
816 i = next_interval (i); |
| 1029 | 817 } |
| 818 else | |
| 819 { | |
| 820 unchanged = i; | |
|
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
821 i = split_interval_right (unchanged, s - unchanged->position); |
| 1029 | 822 copy_properties (unchanged, i); |
| 823 } | |
| 824 } | |
| 825 | |
|
3553
5f9688c0b704
(Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents:
2783
diff
changeset
|
826 /* 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
|
827 for (;;) |
| 1029 | 828 { |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
829 if (i == 0) |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
830 abort (); |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
831 |
| 1029 | 832 if (LENGTH (i) >= len) |
| 833 { | |
| 834 if (interval_has_all_properties (properties, i)) | |
| 835 return modified ? Qt : Qnil; | |
| 836 | |
| 837 if (LENGTH (i) == len) | |
| 838 { | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
839 add_properties (properties, i, object); |
| 1029 | 840 return Qt; |
| 841 } | |
| 842 | |
| 843 /* i doesn't have the properties, and goes past the change limit */ | |
| 844 unchanged = i; | |
|
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
845 i = split_interval_left (unchanged, len); |
| 1029 | 846 copy_properties (unchanged, i); |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
847 add_properties (properties, i, object); |
| 1029 | 848 return Qt; |
| 849 } | |
| 850 | |
| 851 len -= LENGTH (i); | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
852 modified += add_properties (properties, i, object); |
| 1029 | 853 i = next_interval (i); |
| 854 } | |
| 855 } | |
| 856 | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
857 DEFUN ("put-text-property", Fput_text_property, |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
858 Sput_text_property, 4, 5, 0, |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
859 "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
|
860 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
|
861 specify the property to add.\n\ |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
862 The optional fifth argument, OBJECT,\n\ |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
863 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
|
864 (start, end, prop, value, object) |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
865 Lisp_Object start, end, prop, value, object; |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
866 { |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
867 Fadd_text_properties (start, end, |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
868 Fcons (prop, Fcons (value, Qnil)), |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
869 object); |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
870 return Qnil; |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
871 } |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
872 |
| 1029 | 873 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
|
874 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
|
875 "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
|
876 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
|
877 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
|
878 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
|
879 (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
|
880 Lisp_Object start, end, props, object; |
| 1029 | 881 { |
| 882 register INTERVAL i, unchanged; | |
| 1211 | 883 register INTERVAL prev_changed = NULL_INTERVAL; |
| 1029 | 884 register int s, len; |
| 885 | |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
886 props = validate_plist (props); |
| 1029 | 887 |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
888 if (NILP (object)) |
|
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
889 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
|
890 |
| 8686 | 891 i = validate_interval_range (object, &start, &end, soft); |
| 1029 | 892 if (NULL_INTERVAL_P (i)) |
| 8686 | 893 { |
| 894 /* If buffer has no props, and we want none, return now. */ | |
| 895 if (NILP (props)) | |
| 896 return Qnil; | |
| 897 | |
| 898 i = validate_interval_range (object, &start, &end, hard); | |
| 899 /* This can return if start == end. */ | |
| 900 if (NULL_INTERVAL_P (i)) | |
| 901 return Qnil; | |
| 902 } | |
| 1029 | 903 |
| 904 s = XINT (start); | |
| 905 len = XINT (end) - s; | |
| 906 | |
| 907 if (i->position != s) | |
| 908 { | |
| 909 unchanged = i; | |
|
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
910 i = split_interval_right (unchanged, s - unchanged->position); |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
911 |
| 1029 | 912 if (LENGTH (i) > len) |
| 913 { | |
| 1211 | 914 copy_properties (unchanged, i); |
|
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
915 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
|
916 set_properties (props, i, object); |
| 1029 | 917 return Qt; |
| 918 } | |
| 919 | |
|
3553
5f9688c0b704
(Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents:
2783
diff
changeset
|
920 set_properties (props, i, object); |
|
5f9688c0b704
(Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents:
2783
diff
changeset
|
921 |
| 1211 | 922 if (LENGTH (i) == len) |
| 923 return Qt; | |
| 924 | |
| 925 prev_changed = i; | |
| 1029 | 926 len -= LENGTH (i); |
| 927 i = next_interval (i); | |
| 928 } | |
| 929 | |
|
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
930 /* 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
|
931 while (len > 0) |
| 1029 | 932 { |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
933 if (i == 0) |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
934 abort (); |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
935 |
| 1029 | 936 if (LENGTH (i) >= len) |
| 937 { | |
|
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
938 if (LENGTH (i) > len) |
|
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
939 i = split_interval_left (i, len); |
| 1029 | 940 |
| 1211 | 941 if (NULL_INTERVAL_P (prev_changed)) |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
942 set_properties (props, i, object); |
| 1211 | 943 else |
| 944 merge_interval_left (i); | |
| 1029 | 945 return Qt; |
| 946 } | |
| 947 | |
| 948 len -= LENGTH (i); | |
| 1211 | 949 if (NULL_INTERVAL_P (prev_changed)) |
| 950 { | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
951 set_properties (props, i, object); |
| 1211 | 952 prev_changed = i; |
| 953 } | |
| 954 else | |
| 955 prev_changed = i = merge_interval_left (i); | |
| 956 | |
| 1029 | 957 i = next_interval (i); |
| 958 } | |
| 959 | |
| 960 return Qt; | |
| 961 } | |
| 962 | |
| 963 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
|
964 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
|
965 "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
|
966 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
|
967 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
|
968 \(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
|
969 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
|
970 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
|
971 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
|
972 (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
|
973 Lisp_Object start, end, props, object; |
| 1029 | 974 { |
| 975 register INTERVAL i, unchanged; | |
|
2124
54179ef9ce35
* textprop.c (Fadd_text_properties): Initialize the modified flag.
Jim Blandy <jimb@redhat.com>
parents:
2058
diff
changeset
|
976 register int s, len, modified = 0; |
| 1029 | 977 |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
978 if (NILP (object)) |
|
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
979 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
|
980 |
| 1029 | 981 i = validate_interval_range (object, &start, &end, soft); |
| 982 if (NULL_INTERVAL_P (i)) | |
| 983 return Qnil; | |
| 984 | |
| 985 s = XINT (start); | |
| 986 len = XINT (end) - s; | |
| 1211 | 987 |
| 1029 | 988 if (i->position != s) |
| 989 { | |
| 990 /* No properties on this first interval -- return if | |
| 991 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
|
992 if (! interval_has_some_properties (props, i)) |
| 1029 | 993 { |
| 994 int got = (LENGTH (i) - (s - i->position)); | |
| 995 if (got >= len) | |
| 996 return Qnil; | |
| 997 len -= got; | |
|
3858
e07d474bdba9
(Fremove_text_properties, Fadd_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
3698
diff
changeset
|
998 i = next_interval (i); |
| 1029 | 999 } |
|
3553
5f9688c0b704
(Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents:
2783
diff
changeset
|
1000 /* 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
|
1001 want to modify. */ |
| 1029 | 1002 else |
| 1003 { | |
| 1004 unchanged = i; | |
|
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1005 i = split_interval_right (unchanged, s - unchanged->position); |
| 1029 | 1006 copy_properties (unchanged, i); |
| 1007 } | |
| 1008 } | |
| 1009 | |
| 1010 /* 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
|
1011 for (;;) |
| 1029 | 1012 { |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1013 if (i == 0) |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1014 abort (); |
|
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1015 |
| 1029 | 1016 if (LENGTH (i) >= len) |
| 1017 { | |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1018 if (! interval_has_some_properties (props, i)) |
| 1029 | 1019 return modified ? Qt : Qnil; |
| 1020 | |
| 1021 if (LENGTH (i) == len) | |
| 1022 { | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1023 remove_properties (props, i, object); |
| 1029 | 1024 return Qt; |
| 1025 } | |
| 1026 | |
| 1027 /* 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
|
1028 unchanged = i; |
|
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1029 i = split_interval_left (i, len); |
| 1029 | 1030 copy_properties (unchanged, i); |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1031 remove_properties (props, i, object); |
| 1029 | 1032 return Qt; |
| 1033 } | |
| 1034 | |
| 1035 len -= LENGTH (i); | |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1036 modified += remove_properties (props, i, object); |
| 1029 | 1037 i = next_interval (i); |
| 1038 } | |
| 1039 } | |
| 1040 | |
|
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1041 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
|
1042 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
|
1043 "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
|
1044 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
|
1045 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
|
1046 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
|
1047 containing the text.") |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1048 (start, end, prop, value, object) |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1049 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
|
1050 { |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1051 register INTERVAL i; |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1052 register int e, pos; |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1053 |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1054 if (NILP (object)) |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1055 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
|
1056 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
|
1057 e = XINT (end); |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1058 |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1059 while (! NULL_INTERVAL_P (i)) |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1060 { |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1061 if (i->position >= e) |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1062 break; |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1063 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
|
1064 { |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1065 pos = i->position; |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1066 if (pos < XINT (start)) |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1067 pos = XINT (start); |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1068 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
|
1069 } |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1070 i = next_interval (i); |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1071 } |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1072 return Qnil; |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1073 } |
|
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 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
|
1076 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
|
1077 "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
|
1078 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
|
1079 `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
|
1080 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
|
1081 containing the text.") |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1082 (start, end, prop, value, object) |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1083 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
|
1084 { |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1085 register INTERVAL i; |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1086 register int s, e; |
|
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 (NILP (object)) |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1089 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
|
1090 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
|
1091 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
|
1092 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
|
1093 s = XINT (start); |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1094 e = XINT (end); |
|
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 while (! NULL_INTERVAL_P (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 if (i->position >= e) |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1099 break; |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1100 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
|
1101 { |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1102 if (i->position > s) |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1103 s = i->position; |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1104 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
|
1105 } |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1106 i = next_interval (i); |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1107 } |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1108 return Qnil; |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1109 } |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1110 |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1111 #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
|
1112 |
| 1029 | 1113 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
|
1114 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
|
1115 "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
|
1116 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
|
1117 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
|
1118 (start, end, object) |
|
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1119 Lisp_Object start, end, object; |
| 1029 | 1120 { |
|
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1121 register INTERVAL i; |
| 1305 | 1122 register INTERVAL prev_changed = NULL_INTERVAL; |
| 1029 | 1123 register int s, len, modified; |
| 1124 | |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1125 if (NILP (object)) |
|
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1126 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
|
1127 |
| 1029 | 1128 i = validate_interval_range (object, &start, &end, soft); |
| 1129 if (NULL_INTERVAL_P (i)) | |
| 1130 return Qnil; | |
| 1131 | |
| 1132 s = XINT (start); | |
| 1133 len = XINT (end) - s; | |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1134 |
| 1029 | 1135 if (i->position != s) |
| 1136 { | |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1137 register int got; |
|
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1138 register INTERVAL unchanged = i; |
| 1029 | 1139 |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1140 /* 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
|
1141 if (! NILP (i->plist)) |
| 1029 | 1142 { |
|
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1143 i = split_interval_right (unchanged, s - unchanged->position); |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1144 i->plist = Qnil; |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1145 modified++; |
|
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 if (LENGTH (i) > len) |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1148 { |
|
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1149 i = split_interval_right (i, len); |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1150 copy_properties (unchanged, i); |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1151 return Qt; |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1152 } |
| 1029 | 1153 |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1154 if (LENGTH (i) == len) |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1155 return Qt; |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1156 |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1157 got = LENGTH (i); |
| 1029 | 1158 } |
|
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1159 /* 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
|
1160 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
|
1161 anything.*/ |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1162 else if (LENGTH (i) - (s - i->position) <= len) |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1163 return Qnil; |
|
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1164 /* 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
|
1165 how much we've gotten. */ |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1166 else |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1167 got = LENGTH (i) - (s - i->position); |
| 1029 | 1168 |
| 1169 len -= got; | |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1170 prev_changed = i; |
| 1029 | 1171 i = next_interval (i); |
| 1172 } | |
| 1173 | |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1174 /* We are starting at the beginning of an interval, I. */ |
| 1029 | 1175 while (len > 0) |
| 1176 { | |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1177 if (LENGTH (i) >= len) |
| 1029 | 1178 { |
|
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1179 /* 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
|
1180 if (NILP (i->plist)) |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1181 { |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1182 if (! NULL_INTERVAL_P (prev_changed)) |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1183 merge_interval_left (i); |
| 1029 | 1184 |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1185 return modified ? Qt : Qnil; |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1186 } |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1187 |
|
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1188 if (LENGTH (i) > len) |
|
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1189 i = split_interval_left (i, len); |
|
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 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
|
1192 else |
|
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1193 i->plist = Qnil; |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1194 |
|
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1195 return Qt; |
| 1029 | 1196 } |
| 1197 | |
|
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1198 /* Here if we still need to erase past the end of I */ |
| 1029 | 1199 len -= LENGTH (i); |
|
1272
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1200 if (NULL_INTERVAL_P (prev_changed)) |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1201 { |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1202 modified += erase_properties (i); |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1203 prev_changed = i; |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1204 } |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1205 else |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1206 { |
|
1283
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1207 modified += ! NILP (i->plist); |
|
6f4cbcc62eba
Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents:
1272
diff
changeset
|
1208 /* 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
|
1209 prev_changed = i = merge_interval_left (i); |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1210 } |
|
bfd04f61eb16
Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents:
1211
diff
changeset
|
1211 |
| 1029 | 1212 i = next_interval (i); |
| 1213 } | |
| 1214 | |
| 1215 return modified ? Qt : Qnil; | |
| 1216 } | |
|
1857
9d65dfc7bdb7
(Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents:
1715
diff
changeset
|
1217 #endif /* 0 */ |
| 1029 | 1218 |
|
4007
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1219 /* 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
|
1220 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
|
1221 around? |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1222 |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1223 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
|
1224 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
|
1225 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
|
1226 |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1227 /* 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
|
1228 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
|
1229 "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
|
1230 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
|
1231 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
|
1232 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
|
1233 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
|
1234 |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1235 Lisp_Object |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1236 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
|
1237 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
|
1238 { |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1239 INTERVAL i; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1240 Lisp_Object res; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1241 Lisp_Object stuff; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1242 Lisp_Object plist; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1243 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
|
1244 |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1245 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
|
1246 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
|
1247 return Qnil; |
|
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 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
|
1250 { |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1251 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
|
1252 |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1253 dest_start = pos; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1254 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
|
1255 /* 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
|
1256 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
|
1257 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
|
1258 } |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1259 |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1260 s = XINT (start); |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1261 e = XINT (end); |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1262 p = XINT (pos); |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1263 |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1264 stuff = Qnil; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1265 |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1266 while (s < e) |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1267 { |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1268 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
|
1269 if (e2 > e) |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1270 e2 = e; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1271 len = e2 - s; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1272 |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1273 plist = i->plist; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1274 if (! NILP (prop)) |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1275 while (! NILP (plist)) |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1276 { |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1277 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
|
1278 { |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1279 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
|
1280 break; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1281 } |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1282 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
|
1283 } |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1284 if (! NILP (plist)) |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1285 { |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1286 /* 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
|
1287 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
|
1288 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
|
1289 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
|
1290 Fcons (plist, Qnil))), |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1291 stuff); |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1292 } |
|
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 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
|
1295 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
|
1296 break; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1297 |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1298 p += len; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1299 s = i->position; |
|
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 while (! NILP (stuff)) |
|
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 res = Fcar (stuff); |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1305 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
|
1306 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
|
1307 if (! NILP (res)) |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1308 modified++; |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1309 stuff = Fcdr (stuff); |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1310 } |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1311 |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1312 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
|
1313 } |
|
55da23f04d01
* textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents:
3998
diff
changeset
|
1314 |
| 1029 | 1315 void |
| 1316 syms_of_textprop () | |
| 1317 { | |
|
4242
49007dbbec4c
(syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents:
4214
diff
changeset
|
1318 DEFVAR_LISP ("inhibit-point-motion-hooks", &Vinhibit_point_motion_hooks, |
| 5646 | 1319 "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
|
1320 `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
|
1321 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
|
1322 |
| 1029 | 1323 /* Common attributes one might give text */ |
| 1324 | |
| 1325 staticpro (&Qforeground); | |
| 1326 Qforeground = intern ("foreground"); | |
| 1327 staticpro (&Qbackground); | |
| 1328 Qbackground = intern ("background"); | |
| 1329 staticpro (&Qfont); | |
| 1330 Qfont = intern ("font"); | |
| 1331 staticpro (&Qstipple); | |
| 1332 Qstipple = intern ("stipple"); | |
| 1333 staticpro (&Qunderline); | |
| 1334 Qunderline = intern ("underline"); | |
| 1335 staticpro (&Qread_only); | |
| 1336 Qread_only = intern ("read-only"); | |
| 1337 staticpro (&Qinvisible); | |
| 1338 Qinvisible = intern ("invisible"); | |
|
6755
a2bccbc870e6
(syms_of_textprop): Initialize Qintangible.
Karl Heuer <kwzh@gnu.org>
parents:
6681
diff
changeset
|
1339 staticpro (&Qintangible); |
|
a2bccbc870e6
(syms_of_textprop): Initialize Qintangible.
Karl Heuer <kwzh@gnu.org>
parents:
6681
diff
changeset
|
1340 Qintangible = intern ("intangible"); |
|
2058
a43d0bb1b7d8
(Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents:
2053
diff
changeset
|
1341 staticpro (&Qcategory); |
|
a43d0bb1b7d8
(Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents:
2053
diff
changeset
|
1342 Qcategory = intern ("category"); |
|
a43d0bb1b7d8
(Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents:
2053
diff
changeset
|
1343 staticpro (&Qlocal_map); |
|
a43d0bb1b7d8
(Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents:
2053
diff
changeset
|
1344 Qlocal_map = intern ("local-map"); |
|
4381
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
1345 staticpro (&Qfront_sticky); |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
1346 Qfront_sticky = intern ("front-sticky"); |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
1347 staticpro (&Qrear_nonsticky); |
|
b0556af4d680
(Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
4242
diff
changeset
|
1348 Qrear_nonsticky = intern ("rear-nonsticky"); |
| 1029 | 1349 |
| 1350 /* Properties that text might use to specify certain actions */ | |
| 1351 | |
| 1352 staticpro (&Qmouse_left); | |
| 1353 Qmouse_left = intern ("mouse-left"); | |
| 1354 staticpro (&Qmouse_entered); | |
| 1355 Qmouse_entered = intern ("mouse-entered"); | |
| 1356 staticpro (&Qpoint_left); | |
| 1357 Qpoint_left = intern ("point-left"); | |
| 1358 staticpro (&Qpoint_entered); | |
| 1359 Qpoint_entered = intern ("point-entered"); | |
| 1360 | |
| 1361 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
|
1362 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
|
1363 defsubr (&Sget_char_property); |
| 1029 | 1364 defsubr (&Snext_property_change); |
| 1211 | 1365 defsubr (&Snext_single_property_change); |
| 1029 | 1366 defsubr (&Sprevious_property_change); |
| 1211 | 1367 defsubr (&Sprevious_single_property_change); |
| 1029 | 1368 defsubr (&Sadd_text_properties); |
|
1965
2bdbd6ed2430
(Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents:
1930
diff
changeset
|
1369 defsubr (&Sput_text_property); |
| 1029 | 1370 defsubr (&Sset_text_properties); |
| 1371 defsubr (&Sremove_text_properties); | |
|
4144
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1372 defsubr (&Stext_property_any); |
|
8f5545cf9774
* intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents:
4076
diff
changeset
|
1373 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
|
1374 /* 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
|
1375 /* defsubr (&Scopy_text_properties); */ |
| 1029 | 1376 } |
|
1302
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1377 |
|
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1378 #else |
|
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1379 |
|
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1380 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
|
1381 |
|
538cc0cd6d83
* textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents:
1283
diff
changeset
|
1382 #endif /* USE_TEXT_PROPERTIES */ |
