annotate src/textprop.c @ 40175:ba769a5fb855

(Which Function): Add a cindex entry.
author Eli Zaretskii <eliz@gnu.org>
date Mon, 22 Oct 2001 09:33:59 +0000
parents e528f2adeed4
children e673a8c97e47
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1 /* Interface code for dealing with text properties.
39242
ba9a0646b0a5 (verify_interval_modification): Don't run
Gerd Moellmann <gerd@gnu.org>
parents: 38976
diff changeset
2 Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2001
ba9a0646b0a5 (verify_interval_modification): Don't run
Gerd Moellmann <gerd@gnu.org>
parents: 38976
diff changeset
3 Free Software Foundation, Inc.
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
4
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
5 This file is part of GNU Emacs.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
6
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
3698
e748df7e6e74 Refer to GPL version two.
Jim Blandy <jimb@redhat.com>
parents: 3641
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10 any later version.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
11
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15 GNU General Public License for more details.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14088
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14088
diff changeset
20 Boston, MA 02111-1307, USA. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
21
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4649
diff changeset
22 #include <config.h>
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
23 #include "lisp.h"
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
24 #include "intervals.h"
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
25 #include "buffer.h"
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
26 #include "window.h"
8962
722763fed8ce (Fget_char_property): Pass new arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 8907
diff changeset
27
722763fed8ce (Fget_char_property): Pass new arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 8907
diff changeset
28 #ifndef NULL
722763fed8ce (Fget_char_property): Pass new arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 8907
diff changeset
29 #define NULL (void *)0
722763fed8ce (Fget_char_property): Pass new arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 8907
diff changeset
30 #endif
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
31
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
32 /* Test for membership, allowing for t (actually any non-cons) to mean the
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
33 universal set. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
34
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
35 #define TMEM(sym, set) (CONSP (set) ? ! NILP (Fmemq (sym, set)) : ! NILP (set))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
36
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
37
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
38 /* NOTES: previous- and next- property change will have to skip
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
39 zero-length intervals if they are implemented. This could be done
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
40 inside next_interval and previous_interval.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
41
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
42 set_properties needs to deal with the interval property cache.
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
43
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
44 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
45 only once on the list. Although some code i.e., remove_properties,
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
46 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
47 necessary for the system to remain consistent. This requirement
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
48 is enforced by the subrs installing properties onto the intervals. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
49
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
50
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
51 /* Types of hooks. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
52 Lisp_Object Qmouse_left;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
53 Lisp_Object Qmouse_entered;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
54 Lisp_Object Qpoint_left;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
55 Lisp_Object Qpoint_entered;
2058
a43d0bb1b7d8 (Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2053
diff changeset
56 Lisp_Object Qcategory;
a43d0bb1b7d8 (Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2053
diff changeset
57 Lisp_Object Qlocal_map;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
58
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
59 /* Visual properties text (including strings) may have. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
60 Lisp_Object Qforeground, Qbackground, Qfont, Qunderline, Qstipple;
23729
cf1cbb0e5d5b (Qmouse_face): Variable definition moved here.
Richard M. Stallman <rms@gnu.org>
parents: 22344
diff changeset
61 Lisp_Object Qinvisible, Qread_only, Qintangible, Qmouse_face;
4381
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
62
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
63 /* Sticky properties */
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
64 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
65
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
66 /* 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
67 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
68 traversing plists. */
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
69 #define PLIST_ELT_P(o1, o2) (CONSP (o1) && ((o2)=XCDR (o1), CONSP (o2)))
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
70
4242
49007dbbec4c (syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents: 4214
diff changeset
71 Lisp_Object Vinhibit_point_motion_hooks;
11131
5db8a01b22cb (Vdefault_text_properties): name changed from Vdefault_properties.
Boris Goldowsky <boris@gnu.org>
parents: 11116
diff changeset
72 Lisp_Object Vdefault_text_properties;
26872
ea588757e607 (Vtext_property_default_nonsticky): New variable
Kenichi Handa <handa@m17n.org>
parents: 26605
diff changeset
73 Lisp_Object Vtext_property_default_nonsticky;
4242
49007dbbec4c (syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents: 4214
diff changeset
74
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
75 /* verify_interval_modification saves insertion hooks here
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
76 to be run later by report_interval_modification. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
77 Lisp_Object interval_insert_behind_hooks;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
78 Lisp_Object interval_insert_in_front_hooks;
33952
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
79
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
80
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
81 /* Signal a `text-read-only' error. This function makes it easier
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
82 to capture that error in GDB by putting a breakpoint on it. */
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
83
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
84 static void
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
85 text_read_only ()
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
86 {
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
87 Fsignal (Qtext_read_only, Qnil);
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
88 }
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
89
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
90
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
91
1055
7eb43ab890e0 entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents: 1029
diff changeset
92 /* Extract the interval at the position pointed to by BEGIN from
7eb43ab890e0 entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents: 1029
diff changeset
93 OBJECT, a string or buffer. Additionally, check that the positions
7eb43ab890e0 entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents: 1029
diff changeset
94 pointed to by BEGIN and END are within the bounds of OBJECT, and
7eb43ab890e0 entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents: 1029
diff changeset
95 reverse them if *BEGIN is greater than *END. The objects pointed
7eb43ab890e0 entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents: 1029
diff changeset
96 to by BEGIN and END may be integers or markers; if the latter, they
7eb43ab890e0 entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents: 1029
diff changeset
97 are coerced to integers.
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
98
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
99 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
100 to make them origin-one.
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
101
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
102 Note that buffer points don't correspond to interval indices.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
103 For example, point-max is 1 greater than the index of the last
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
104 character. This difference is handled in the caller, which uses
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
105 the validated points to determine a length, and operates on that.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
106 Exceptions are Ftext_properties_at, Fnext_property_change, and
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
107 Fprevious_property_change which call this function with BEGIN == END.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
108 Handle this case specially.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
109
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
110 If FORCE is soft (0), it's OK to return NULL_INTERVAL. Otherwise,
1055
7eb43ab890e0 entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents: 1029
diff changeset
111 create an interval tree for OBJECT if one doesn't exist, provided
7eb43ab890e0 entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents: 1029
diff changeset
112 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
113 is no text, there can be no text properties. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
114
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
115 #define soft 0
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
116 #define hard 1
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
117
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
118 INTERVAL
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
119 validate_interval_range (object, begin, end, force)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
120 Lisp_Object object, *begin, *end;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
121 int force;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
122 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
123 register INTERVAL i;
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
124 int searchpos;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
125
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
126 CHECK_STRING_OR_BUFFER (object, 0);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
127 CHECK_NUMBER_COERCE_MARKER (*begin, 0);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
128 CHECK_NUMBER_COERCE_MARKER (*end, 0);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
129
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
130 /* If we are asked for a point, but from a subr which operates
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
131 on a range, then return nothing. */
8907
f7de8b4cb1b8 (validate_interval_range, property_value, Fget_char_property,
Karl Heuer <kwzh@gnu.org>
parents: 8856
diff changeset
132 if (EQ (*begin, *end) && begin != end)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
133 return NULL_INTERVAL;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
134
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
135 if (XINT (*begin) > XINT (*end))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
136 {
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
137 Lisp_Object n;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
138 n = *begin;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
139 *begin = *end;
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
140 *end = n;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
141 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
142
9109
6e44ddc40153 (validate_interval_range, add_properties, remove_properties,
Karl Heuer <kwzh@gnu.org>
parents: 9071
diff changeset
143 if (BUFFERP (object))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
144 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
145 register struct buffer *b = XBUFFER (object);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
146
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
147 if (!(BUF_BEGV (b) <= XINT (*begin) && XINT (*begin) <= XINT (*end)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
148 && XINT (*end) <= BUF_ZV (b)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
149 args_out_of_range (*begin, *end);
10312
4bf079c613c6 (validate_interval_range): Use BUF_INTERVALS.
Richard M. Stallman <rms@gnu.org>
parents: 10159
diff changeset
150 i = BUF_INTERVALS (b);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
151
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
152 /* If there's no text, there are no properties. */
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
153 if (BUF_BEGV (b) == BUF_ZV (b))
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
154 return NULL_INTERVAL;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
155
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
156 searchpos = XINT (*begin);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
157 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
158 else
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
159 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
160 register struct Lisp_String *s = XSTRING (object);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
161
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
162 if (! (0 <= XINT (*begin) && XINT (*begin) <= XINT (*end)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
163 && XINT (*end) <= s->size))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
164 args_out_of_range (*begin, *end);
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
165 XSETFASTINT (*begin, XFASTINT (*begin));
3996
b9bdcf862c67 * textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents: 3960
diff changeset
166 if (begin != end)
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
167 XSETFASTINT (*end, XFASTINT (*end));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
168 i = s->intervals;
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
169
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
170 if (s->size == 0)
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
171 return NULL_INTERVAL;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
172
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
173 searchpos = XINT (*begin);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
174 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
175
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
176 if (NULL_INTERVAL_P (i))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
177 return (force ? create_root_interval (object) : i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
178
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
179 return find_interval (i, searchpos);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
180 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
181
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
182 /* Validate LIST as a property list. If LIST is not a list, then
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
183 make one consisting of (LIST nil). Otherwise, verify that LIST
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
184 is even numbered and thus suitable as a plist. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
185
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
186 static Lisp_Object
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
187 validate_plist (list)
4797
4dd43e41207a (validate_plist): Add argument declaration for `list'.
Brian Fox <bfox@gnu.org>
parents: 4696
diff changeset
188 Lisp_Object list;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
189 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
190 if (NILP (list))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
191 return Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
192
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
193 if (CONSP (list))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
194 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
195 register int i;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
196 register Lisp_Object tail;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
197 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
198 {
b9bdcf862c67 * textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents: 3960
diff changeset
199 tail = Fcdr (tail);
b9bdcf862c67 * textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents: 3960
diff changeset
200 QUIT;
b9bdcf862c67 * textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents: 3960
diff changeset
201 }
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
202 if (i & 1)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
203 error ("Odd length text property list");
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
204 return list;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
205 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
206
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
207 return Fcons (list, Fcons (Qnil, Qnil));
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
208 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
209
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
210 /* Return nonzero if interval I has all the properties,
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
211 with the same values, of list PLIST. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
212
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
213 static int
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
214 interval_has_all_properties (plist, i)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
215 Lisp_Object plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
216 INTERVAL i;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
217 {
25772
1902e7e63fa7 (Fset_text_properties): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
218 register Lisp_Object tail1, tail2, sym1;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
219 register int found;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
220
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
221 /* Go through each element of PLIST. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
222 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
223 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
224 sym1 = Fcar (tail1);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
225 found = 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
226
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
227 /* Go through I's plist, looking for sym1 */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
228 for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
229 if (EQ (sym1, Fcar (tail2)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
230 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
231 /* Found the same property on both lists. If the
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
232 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
233 if (! EQ (Fcar (Fcdr (tail1)), Fcar (Fcdr (tail2))))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
234 return 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
235
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
236 /* Property has same value on both lists; go to next one. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
237 found = 1;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
238 break;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
239 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
240
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
241 if (! found)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
242 return 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
243 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
244
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
245 return 1;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
246 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
247
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
248 /* Return nonzero if the plist of interval I has any of the
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
249 properties of PLIST, regardless of their values. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
250
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
251 static INLINE int
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
252 interval_has_some_properties (plist, i)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
253 Lisp_Object plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
254 INTERVAL i;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
255 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
256 register Lisp_Object tail1, tail2, sym;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
257
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
258 /* Go through each element of PLIST. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
259 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
260 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
261 sym = Fcar (tail1);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
262
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
263 /* Go through i's plist, looking for tail1 */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
264 for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
265 if (EQ (sym, Fcar (tail2)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
266 return 1;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
267 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
268
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
269 return 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
270 }
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
271
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
272 /* 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
273
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
274 /* 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
275 has none. */
8907
f7de8b4cb1b8 (validate_interval_range, property_value, Fget_char_property,
Karl Heuer <kwzh@gnu.org>
parents: 8856
diff changeset
276 static Lisp_Object
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
277 property_value (plist, prop)
8856
7e9547af43e8 (property_value): Declare args plist, prop.
Richard M. Stallman <rms@gnu.org>
parents: 8762
diff changeset
278 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
279 {
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
280 Lisp_Object value;
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
281
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
282 while (PLIST_ELT_P (plist, value))
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
283 if (EQ (XCAR (plist), prop))
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
284 return XCAR (value);
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
285 else
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
286 plist = XCDR (value);
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
287
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
288 return Qunbound;
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
289 }
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
290
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
291 /* Set the properties of INTERVAL to PROPERTIES,
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
292 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
293 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
294
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
295 static void
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
296 set_properties (properties, interval, object)
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
297 Lisp_Object properties, object;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
298 INTERVAL interval;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
299 {
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
300 Lisp_Object sym, value;
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
301
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
302 if (BUFFERP (object))
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
303 {
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
304 /* 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
305 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
306 for (sym = interval->plist;
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
307 PLIST_ELT_P (sym, value);
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
308 sym = XCDR (value))
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
309 if (! EQ (property_value (properties, XCAR (sym)),
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
310 XCAR (value)))
4076
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
311 {
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
312 record_property_change (interval->position, LENGTH (interval),
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
313 XCAR (sym), XCAR (value),
4076
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
314 object);
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
315 }
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
316
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
317 /* 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
318 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
319 for (sym = properties;
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
320 PLIST_ELT_P (sym, value);
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
321 sym = XCDR (value))
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
322 if (EQ (property_value (interval->plist, XCAR (sym)), Qunbound))
4076
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
323 {
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
324 record_property_change (interval->position, LENGTH (interval),
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
325 XCAR (sym), Qnil,
4076
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
326 object);
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
327 }
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
328 }
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
329
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
330 /* Store new properties. */
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
331 interval->plist = Fcopy_sequence (properties);
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
332 }
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
333
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
334 /* Add the properties of PLIST to the interval I, or set
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
335 the value of I's property to the value of the property on PLIST
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
336 if they are different.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
337
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
338 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
339
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
340 Return nonzero if this changes I (i.e., if any members of PLIST
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
341 are actually added to I's plist) */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
342
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
343 static int
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
344 add_properties (plist, i, object)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
345 Lisp_Object plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
346 INTERVAL i;
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
347 Lisp_Object object;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
348 {
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
349 Lisp_Object tail1, tail2, sym1, val1;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
350 register int changed = 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
351 register int found;
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
352 struct gcpro gcpro1, gcpro2, gcpro3;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
353
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
354 tail1 = plist;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
355 sym1 = Qnil;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
356 val1 = Qnil;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
357 /* No need to protect OBJECT, because we can GC only in the case
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
358 where it is a buffer, and live buffers are always protected.
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
359 I and its plist are also protected, via OBJECT. */
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
360 GCPRO3 (tail1, sym1, val1);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
361
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
362 /* Go through each element of PLIST. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
363 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
364 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
365 sym1 = Fcar (tail1);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
366 val1 = Fcar (Fcdr (tail1));
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
367 found = 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
368
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
369 /* Go through I's plist, looking for sym1 */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
370 for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
371 if (EQ (sym1, Fcar (tail2)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
372 {
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
373 /* No need to gcpro, because tail2 protects this
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
374 and it must be a cons cell (we get an error otherwise). */
6516
8278049ee7a7 (add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6064
diff changeset
375 register Lisp_Object this_cdr;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
376
6516
8278049ee7a7 (add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6064
diff changeset
377 this_cdr = Fcdr (tail2);
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
378 /* Found the property. Now check its value. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
379 found = 1;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
380
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
381 /* The properties have the same value on both lists.
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
382 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
383 if (EQ (val1, Fcar (this_cdr)))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
384 break;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
385
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
386 /* Record this change in the buffer, for undo purposes. */
9109
6e44ddc40153 (validate_interval_range, add_properties, remove_properties,
Karl Heuer <kwzh@gnu.org>
parents: 9071
diff changeset
387 if (BUFFERP (object))
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
388 {
4076
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
389 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
390 sym1, Fcar (this_cdr), object);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
391 }
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
392
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
393 /* I's property has a different value -- change it */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
394 Fsetcar (this_cdr, val1);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
395 changed++;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
396 break;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
397 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
398
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
399 if (! found)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
400 {
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
401 /* Record this change in the buffer, for undo purposes. */
9109
6e44ddc40153 (validate_interval_range, add_properties, remove_properties,
Karl Heuer <kwzh@gnu.org>
parents: 9071
diff changeset
402 if (BUFFERP (object))
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
403 {
4076
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
404 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
405 sym1, Qnil, object);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
406 }
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
407 i->plist = Fcons (sym1, Fcons (val1, i->plist));
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
408 changed++;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
409 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
410 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
411
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
412 UNGCPRO;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
413
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
414 return changed;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
415 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
416
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
417 /* 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
418 from I's plist.
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
419 OBJECT is the string or buffer containing I. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
420
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
421 static int
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
422 remove_properties (plist, i, object)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
423 Lisp_Object plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
424 INTERVAL i;
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
425 Lisp_Object object;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
426 {
6516
8278049ee7a7 (add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6064
diff changeset
427 register Lisp_Object tail1, tail2, sym, current_plist;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
428 register int changed = 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
429
6516
8278049ee7a7 (add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6064
diff changeset
430 current_plist = i->plist;
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
431 /* Go through each element of plist. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
432 for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
433 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
434 sym = Fcar (tail1);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
435
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
436 /* First, remove the symbol if its at the head of the list */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
437 while (! NILP (current_plist) && EQ (sym, Fcar (current_plist)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
438 {
9109
6e44ddc40153 (validate_interval_range, add_properties, remove_properties,
Karl Heuer <kwzh@gnu.org>
parents: 9071
diff changeset
439 if (BUFFERP (object))
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
440 {
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
441 record_property_change (i->position, LENGTH (i),
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
442 sym, Fcar (Fcdr (current_plist)),
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
443 object);
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
444 }
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
445
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
446 current_plist = Fcdr (Fcdr (current_plist));
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
447 changed++;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
448 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
449
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
450 /* Go through i's plist, looking for sym */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
451 tail2 = current_plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
452 while (! NILP (tail2))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
453 {
6516
8278049ee7a7 (add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6064
diff changeset
454 register Lisp_Object this;
8278049ee7a7 (add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6064
diff changeset
455 this = Fcdr (Fcdr (tail2));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
456 if (EQ (sym, Fcar (this)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
457 {
9109
6e44ddc40153 (validate_interval_range, add_properties, remove_properties,
Karl Heuer <kwzh@gnu.org>
parents: 9071
diff changeset
458 if (BUFFERP (object))
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
459 {
4076
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
460 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
461 sym, Fcar (Fcdr (this)), object);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
462 }
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
463
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
464 Fsetcdr (Fcdr (tail2), Fcdr (Fcdr (this)));
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
465 changed++;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
466 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
467 tail2 = this;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
468 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
469 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
470
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
471 if (changed)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
472 i->plist = current_plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
473 return changed;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
474 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
475
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
476 #if 0
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
477 /* Remove all properties from interval I. Return non-zero
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
478 if this changes the interval. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
479
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
480 static INLINE int
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
481 erase_properties (i)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
482 INTERVAL i;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
483 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
484 if (NILP (i->plist))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
485 return 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
486
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
487 i->plist = Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
488 return 1;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
489 }
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
490 #endif
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
491
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
492 /* Returns the interval of POSITION in OBJECT.
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
493 POSITION is BEG-based. */
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
494
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
495 INTERVAL
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
496 interval_of (position, object)
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
497 int position;
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
498 Lisp_Object object;
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
499 {
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
500 register INTERVAL i;
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
501 int beg, end;
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
502
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
503 if (NILP (object))
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
504 XSETBUFFER (object, current_buffer);
20955
0e9aa345d2f9 (interval_of): Handle Qt.
Karl Heuer <kwzh@gnu.org>
parents: 20522
diff changeset
505 else if (EQ (object, Qt))
0e9aa345d2f9 (interval_of): Handle Qt.
Karl Heuer <kwzh@gnu.org>
parents: 20522
diff changeset
506 return NULL_INTERVAL;
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
507
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
508 CHECK_STRING_OR_BUFFER (object, 0);
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
509
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
510 if (BUFFERP (object))
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
511 {
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
512 register struct buffer *b = XBUFFER (object);
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
513
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
514 beg = BUF_BEGV (b);
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
515 end = BUF_ZV (b);
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
516 i = BUF_INTERVALS (b);
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
517 }
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
518 else
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
519 {
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
520 register struct Lisp_String *s = XSTRING (object);
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
521
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
522 beg = 0;
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
523 end = s->size;
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
524 i = s->intervals;
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
525 }
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
526
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
527 if (!(beg <= position && position <= end))
18736
e5e6647d4883 (interval_of): Convert args_out_of_range arguments to Lisp_Integer.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
528 args_out_of_range (make_number (position), make_number (position));
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
529 if (beg == end || NULL_INTERVAL_P (i))
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
530 return NULL_INTERVAL;
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
531
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
532 return find_interval (i, position);
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
533 }
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
534
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
535 DEFUN ("text-properties-at", Ftext_properties_at,
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
536 Stext_properties_at, 1, 2, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
537 doc: /* Return the list of properties of the character at POSITION in OBJECT.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
538 OBJECT is the string or buffer to look for the properties in;
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
539 nil means the current buffer.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
540 If POSITION is at the end of OBJECT, the value is nil. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
541 (position, object)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
542 Lisp_Object position, object;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
543 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
544 register INTERVAL i;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
545
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
546 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
547 XSETBUFFER (object, current_buffer);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
548
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
549 i = validate_interval_range (object, &position, &position, soft);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
550 if (NULL_INTERVAL_P (i))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
551 return Qnil;
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
552 /* If POSITION is at the end of the interval,
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
553 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
554 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
555 since no character follows. */
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
556 if (XINT (position) == LENGTH (i) + i->position)
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
557 return Qnil;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
558
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
559 return i->plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
560 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
561
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
562 DEFUN ("get-text-property", Fget_text_property, Sget_text_property, 2, 3, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
563 doc: /* Return the value of POSITION's property PROP, in OBJECT.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
564 OBJECT is optional and defaults to the current buffer.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
565 If POSITION is at the end of OBJECT, the value is nil. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
566 (position, prop, object)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
567 Lisp_Object position, object;
8271
e8556db1b7f3 (Fget_text_property): Simplify using Ftext_properties_at.
Richard M. Stallman <rms@gnu.org>
parents: 7773
diff changeset
568 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
569 {
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
570 return textget (Ftext_properties_at (position, object), prop);
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
571 }
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
572
32849
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
573 /* Return the value of POSITION's property PROP, in OBJECT.
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
574 OBJECT is optional and defaults to the current buffer.
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
575 If OVERLAY is non-0, then in the case that the returned property is from
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
576 an overlay, the overlay found is returned in *OVERLAY, otherwise nil is
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
577 returned in *OVERLAY.
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
578 If POSITION is at the end of OBJECT, the value is nil.
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
579 If OBJECT is a buffer, then overlay properties are considered as well as
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
580 text properties.
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
581 If OBJECT is a window, then that window's buffer is used, but
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
582 window-specific overlays are considered only if they are associated
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
583 with OBJECT. */
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
584 Lisp_Object
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
585 get_char_property_and_overlay (position, prop, object, overlay)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
586 Lisp_Object position, object;
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
587 register Lisp_Object prop;
32849
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
588 Lisp_Object *overlay;
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
589 {
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
590 struct window *w = 0;
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
591
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
592 CHECK_NUMBER_COERCE_MARKER (position, 0);
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
593
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
594 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
595 XSETBUFFER (object, current_buffer);
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
596
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
597 if (WINDOWP (object))
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
598 {
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
599 w = XWINDOW (object);
8907
f7de8b4cb1b8 (validate_interval_range, property_value, Fget_char_property,
Karl Heuer <kwzh@gnu.org>
parents: 8856
diff changeset
600 object = w->buffer;
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
601 }
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
602 if (BUFFERP (object))
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
603 {
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
604 int posn = XINT (position);
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
605 int noverlays;
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
606 Lisp_Object *overlay_vec, tem;
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
607 int next_overlay;
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
608 int len;
12641
aadec66110fd (Fget_char_property): If OBJECT is non-current buffer,
Richard M. Stallman <rms@gnu.org>
parents: 11131
diff changeset
609 struct buffer *obuf = current_buffer;
aadec66110fd (Fget_char_property): If OBJECT is non-current buffer,
Richard M. Stallman <rms@gnu.org>
parents: 11131
diff changeset
610
aadec66110fd (Fget_char_property): If OBJECT is non-current buffer,
Richard M. Stallman <rms@gnu.org>
parents: 11131
diff changeset
611 set_buffer_temp (XBUFFER (object));
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
612
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
613 /* First try with room for 40 overlays. */
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
614 len = 40;
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
615 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
616
8962
722763fed8ce (Fget_char_property): Pass new arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 8907
diff changeset
617 noverlays = overlays_at (posn, 0, &overlay_vec, &len,
30699
f886557e4b2a (Fget_char_property): Update call to overlays_at.
Miles Bader <miles@gnu.org>
parents: 30678
diff changeset
618 &next_overlay, NULL, 0);
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
619
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
620 /* If there are more than 40,
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
621 make enough space for all, and try again. */
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
622 if (noverlays > len)
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
623 {
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
624 len = noverlays;
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
625 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
8962
722763fed8ce (Fget_char_property): Pass new arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 8907
diff changeset
626 noverlays = overlays_at (posn, 0, &overlay_vec, &len,
30699
f886557e4b2a (Fget_char_property): Update call to overlays_at.
Miles Bader <miles@gnu.org>
parents: 30678
diff changeset
627 &next_overlay, NULL, 0);
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
628 }
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
629 noverlays = sort_overlays (overlay_vec, noverlays, w);
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
630
12641
aadec66110fd (Fget_char_property): If OBJECT is non-current buffer,
Richard M. Stallman <rms@gnu.org>
parents: 11131
diff changeset
631 set_buffer_temp (obuf);
aadec66110fd (Fget_char_property): If OBJECT is non-current buffer,
Richard M. Stallman <rms@gnu.org>
parents: 11131
diff changeset
632
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
633 /* Now check the overlays in order of decreasing priority. */
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
634 while (--noverlays >= 0)
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
635 {
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
636 tem = Foverlay_get (overlay_vec[noverlays], prop);
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
637 if (!NILP (tem))
32849
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
638 {
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
639 if (overlay)
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
640 /* Return the overlay we got the property from. */
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
641 *overlay = overlay_vec[noverlays];
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
642 return tem;
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
643 }
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
644 }
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
645 }
32849
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
646
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
647 if (overlay)
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
648 /* Indicate that the return value is not from an overlay. */
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
649 *overlay = Qnil;
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
650
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
651 /* 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
652 simpler case. */
32849
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
653 return Fget_text_property (position, prop, object);
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
654 }
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
655
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
656 DEFUN ("get-char-property", Fget_char_property, Sget_char_property, 2, 3, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
657 doc: /* Return the value of POSITION's property PROP, in OBJECT.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
658 OBJECT is optional and defaults to the current buffer.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
659 If POSITION is at the end of OBJECT, the value is nil.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
660 If OBJECT is a buffer, then overlay properties are considered as well as
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
661 text properties.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
662 If OBJECT is a window, then that window's buffer is used, but window-specific
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
663 overlays are considered only if they are associated with OBJECT. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
664 (position, prop, object)
32849
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
665 Lisp_Object position, object;
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
666 register Lisp_Object prop;
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
667 {
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
668 return get_char_property_and_overlay (position, prop, object, 0);
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
669 }
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
670
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
671 DEFUN ("next-char-property-change", Fnext_char_property_change,
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
672 Snext_char_property_change, 1, 2, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
673 doc: /* Return the position of next text property or overlay change.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
674 This scans characters forward from POSITION till it finds a change in
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
675 some text property, or the beginning or end of an overlay, and returns
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
676 the position of that.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
677 If none is found, the function returns (point-max).
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
678
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
679 If the optional third argument LIMIT is non-nil, don't search
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
680 past position LIMIT; return LIMIT if nothing is found before LIMIT. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
681 (position, limit)
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
682 Lisp_Object position, limit;
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
683 {
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
684 Lisp_Object temp;
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
685
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
686 temp = Fnext_overlay_change (position);
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
687 if (! NILP (limit))
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
688 {
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
689 CHECK_NUMBER (limit, 2);
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
690 if (XINT (limit) < XINT (temp))
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
691 temp = limit;
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
692 }
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
693 return Fnext_property_change (position, Qnil, temp);
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
694 }
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
695
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
696 DEFUN ("previous-char-property-change", Fprevious_char_property_change,
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
697 Sprevious_char_property_change, 1, 2, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
698 doc: /* Return the position of previous text property or overlay change.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
699 Scans characters backward from POSITION till it finds a change in some
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
700 text property, or the beginning or end of an overlay, and returns the
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
701 position of that.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
702 If none is found, the function returns (point-max).
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
703
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
704 If the optional third argument LIMIT is non-nil, don't search
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
705 past position LIMIT; return LIMIT if nothing is found before LIMIT. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
706 (position, limit)
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
707 Lisp_Object position, limit;
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
708 {
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
709 Lisp_Object temp;
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
710
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
711 temp = Fprevious_overlay_change (position);
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
712 if (! NILP (limit))
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
713 {
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
714 CHECK_NUMBER (limit, 2);
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
715 if (XINT (limit) > XINT (temp))
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
716 temp = limit;
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
717 }
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
718 return Fprevious_property_change (position, Qnil, temp);
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
719 }
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
720
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
721
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
722 DEFUN ("next-single-char-property-change", Fnext_single_char_property_change,
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
723 Snext_single_char_property_change, 2, 4, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
724 doc: /* Return the position of next text property or overlay change for a specific property.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
725 Scans characters forward from POSITION till it finds
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
726 a change in the PROP property, then returns the position of the change.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
727 The optional third argument OBJECT is the string or buffer to scan.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
728 The property values are compared with `eq'.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
729 If the property is constant all the way to the end of OBJECT, return the
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
730 last valid position in OBJECT.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
731 If the optional fourth argument LIMIT is non-nil, don't search
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
732 past position LIMIT; return LIMIT if nothing is found before LIMIT. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
733 (position, prop, object, limit)
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
734 Lisp_Object prop, position, object, limit;
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
735 {
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
736 if (STRINGP (object))
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
737 {
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
738 position = Fnext_single_property_change (position, prop, object, limit);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
739 if (NILP (position))
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
740 {
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
741 if (NILP (limit))
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
742 position = make_number (XSTRING (object)->size);
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
743 else
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
744 position = limit;
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
745 }
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
746 }
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
747 else
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
748 {
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
749 Lisp_Object initial_value, value;
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
750 int count = specpdl_ptr - specpdl;
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
751
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
752 if (! NILP (object))
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
753 CHECK_BUFFER (object, 0);
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
754
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
755 if (BUFFERP (object) && current_buffer != XBUFFER (object))
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
756 {
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
757 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
758 Fset_buffer (object);
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
759 }
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
760
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
761 initial_value = Fget_char_property (position, prop, object);
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
762
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
763 if (NILP (limit))
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
764 XSETFASTINT (limit, BUF_ZV (current_buffer));
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
765 else
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
766 CHECK_NUMBER_COERCE_MARKER (limit, 0);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
767
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
768 for (;;)
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
769 {
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
770 position = Fnext_char_property_change (position, limit);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
771 if (XFASTINT (position) >= XFASTINT (limit)) {
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
772 position = limit;
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
773 break;
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
774 }
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
775
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
776 value = Fget_char_property (position, prop, object);
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
777 if (!EQ (value, initial_value))
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
778 break;
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
779 }
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
780
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
781 unbind_to (count, Qnil);
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
782 }
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
783
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
784 return position;
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
785 }
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
786
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
787 DEFUN ("previous-single-char-property-change",
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
788 Fprevious_single_char_property_change,
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
789 Sprevious_single_char_property_change, 2, 4, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
790 doc: /* Return the position of previous text property or overlay change for a specific property.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
791 Scans characters backward from POSITION till it finds
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
792 a change in the PROP property, then returns the position of the change.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
793 The optional third argument OBJECT is the string or buffer to scan.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
794 The property values are compared with `eq'.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
795 If the property is constant all the way to the start of OBJECT, return the
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
796 first valid position in OBJECT.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
797 If the optional fourth argument LIMIT is non-nil, don't search
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
798 back past position LIMIT; return LIMIT if nothing is found before LIMIT. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
799 (position, prop, object, limit)
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
800 Lisp_Object prop, position, object, limit;
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
801 {
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
802 if (STRINGP (object))
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
803 {
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
804 position = Fprevious_single_property_change (position, prop, object, limit);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
805 if (NILP (position))
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
806 {
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
807 if (NILP (limit))
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
808 position = make_number (XSTRING (object)->size);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
809 else
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
810 position = limit;
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
811 }
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
812 }
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
813 else
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
814 {
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
815 int count = specpdl_ptr - specpdl;
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
816
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
817 if (! NILP (object))
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
818 CHECK_BUFFER (object, 0);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
819
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
820 if (BUFFERP (object) && current_buffer != XBUFFER (object))
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
821 {
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
822 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
823 Fset_buffer (object);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
824 }
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
825
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
826 if (NILP (limit))
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
827 XSETFASTINT (limit, BUF_BEGV (current_buffer));
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
828 else
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
829 CHECK_NUMBER_COERCE_MARKER (limit, 0);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
830
30379
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
831 if (XFASTINT (position) <= XFASTINT (limit))
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
832 position = limit;
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
833 else
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
834 {
30379
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
835 Lisp_Object initial_value =
30678
1137a24ee515 (Fprevious_single_char_property_change): Don't do arithmetic directly on lisp
Ken Raeburn <raeburn@raeburn.org>
parents: 30379
diff changeset
836 Fget_char_property (make_number (XFASTINT (position) - 1),
1137a24ee515 (Fprevious_single_char_property_change): Don't do arithmetic directly on lisp
Ken Raeburn <raeburn@raeburn.org>
parents: 30379
diff changeset
837 prop, object);
30379
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
838
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
839 for (;;)
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
840 {
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
841 position = Fprevious_char_property_change (position, limit);
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
842
30379
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
843 if (XFASTINT (position) <= XFASTINT (limit))
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
844 {
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
845 position = limit;
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
846 break;
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
847 }
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
848 else
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
849 {
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
850 Lisp_Object value =
30678
1137a24ee515 (Fprevious_single_char_property_change): Don't do arithmetic directly on lisp
Ken Raeburn <raeburn@raeburn.org>
parents: 30379
diff changeset
851 Fget_char_property (make_number (XFASTINT (position) - 1),
1137a24ee515 (Fprevious_single_char_property_change): Don't do arithmetic directly on lisp
Ken Raeburn <raeburn@raeburn.org>
parents: 30379
diff changeset
852 prop, object);
30379
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
853
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
854 if (!EQ (value, initial_value))
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
855 break;
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
856 }
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
857 }
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
858 }
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
859
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
860 unbind_to (count, Qnil);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
861 }
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
862
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
863 return position;
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
864 }
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
865
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
866 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
867 Snext_property_change, 1, 3, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
868 doc: /* Return the position of next property change.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
869 Scans characters forward from POSITION in OBJECT till it finds
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
870 a change in some text property, then returns the position of the change.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
871 The optional second argument OBJECT is the string or buffer to scan.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
872 Return nil if the property is constant all the way to the end of OBJECT.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
873 If the value is non-nil, it is a position greater than POSITION, never equal.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
874
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
875 If the optional third argument LIMIT is non-nil, don't search
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
876 past position LIMIT; return LIMIT if nothing is found before LIMIT. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
877 (position, object, limit)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
878 Lisp_Object position, object, limit;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
879 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
880 register INTERVAL i, next;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
881
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
882 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
883 XSETBUFFER (object, current_buffer);
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
884
10962
7f0bc7bcf1f3 (Fnext_property_change): Handle LIMIT = t.
Richard M. Stallman <rms@gnu.org>
parents: 10925
diff changeset
885 if (! NILP (limit) && ! EQ (limit, Qt))
7092
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
886 CHECK_NUMBER_COERCE_MARKER (limit, 0);
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
887
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
888 i = validate_interval_range (object, &position, &position, soft);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
889
10962
7f0bc7bcf1f3 (Fnext_property_change): Handle LIMIT = t.
Richard M. Stallman <rms@gnu.org>
parents: 10925
diff changeset
890 /* If LIMIT is t, return start of next interval--don't
7f0bc7bcf1f3 (Fnext_property_change): Handle LIMIT = t.
Richard M. Stallman <rms@gnu.org>
parents: 10925
diff changeset
891 bother checking further intervals. */
7f0bc7bcf1f3 (Fnext_property_change): Handle LIMIT = t.
Richard M. Stallman <rms@gnu.org>
parents: 10925
diff changeset
892 if (EQ (limit, Qt))
7f0bc7bcf1f3 (Fnext_property_change): Handle LIMIT = t.
Richard M. Stallman <rms@gnu.org>
parents: 10925
diff changeset
893 {
13265
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
894 if (NULL_INTERVAL_P (i))
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
895 next = i;
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
896 else
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
897 next = next_interval (i);
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
898
11116
73b51ad289e3 (Fnext_property_change): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 10962
diff changeset
899 if (NULL_INTERVAL_P (next))
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
900 XSETFASTINT (position, (STRINGP (object)
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
901 ? XSTRING (object)->size
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
902 : BUF_ZV (XBUFFER (object))));
11116
73b51ad289e3 (Fnext_property_change): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 10962
diff changeset
903 else
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
904 XSETFASTINT (position, next->position);
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
905 return position;
10962
7f0bc7bcf1f3 (Fnext_property_change): Handle LIMIT = t.
Richard M. Stallman <rms@gnu.org>
parents: 10925
diff changeset
906 }
7f0bc7bcf1f3 (Fnext_property_change): Handle LIMIT = t.
Richard M. Stallman <rms@gnu.org>
parents: 10925
diff changeset
907
13265
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
908 if (NULL_INTERVAL_P (i))
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
909 return limit;
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
910
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
911 next = next_interval (i);
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
912
5086
6e9634463e93 (Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents: 5020
diff changeset
913 while (! NULL_INTERVAL_P (next) && intervals_equal (i, next)
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
914 && (NILP (limit) || next->position < XFASTINT (limit)))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
915 next = next_interval (next);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
916
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
917 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
918 return limit;
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
919 if (! NILP (limit) && !(next->position < XFASTINT (limit)))
5086
6e9634463e93 (Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents: 5020
diff changeset
920 return limit;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
921
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
922 XSETFASTINT (position, next->position);
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
923 return position;
4381
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
924 }
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
925
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
926 /* 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
927
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
928 int
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
929 property_change_between_p (beg, end)
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
930 int beg, end;
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
931 {
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
932 register INTERVAL i, next;
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
933 Lisp_Object object, pos;
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
934
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
935 XSETBUFFER (object, current_buffer);
9321
e6759002383c (Fnext_property_change, property_change_between_p,
Karl Heuer <kwzh@gnu.org>
parents: 9280
diff changeset
936 XSETFASTINT (pos, beg);
4381
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
937
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
938 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
939 if (NULL_INTERVAL_P (i))
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
940 return 0;
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
941
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
942 next = next_interval (i);
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
943 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
944 {
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
945 next = next_interval (next);
4614
2c5557903994 (property_change_between_p): Test NULL_INTERVAL_P
Richard M. Stallman <rms@gnu.org>
parents: 4381
diff changeset
946 if (NULL_INTERVAL_P (next))
2c5557903994 (property_change_between_p): Test NULL_INTERVAL_P
Richard M. Stallman <rms@gnu.org>
parents: 4381
diff changeset
947 return 0;
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
948 if (next->position >= end)
4381
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
949 return 0;
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
950 }
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
951
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
952 if (NULL_INTERVAL_P (next))
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
953 return 0;
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
954
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
955 return 1;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
956 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
957
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
958 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
959 Snext_single_property_change, 2, 4, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
960 doc: /* Return the position of next property change for a specific property.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
961 Scans characters forward from POSITION till it finds
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
962 a change in the PROP property, then returns the position of the change.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
963 The optional third argument OBJECT is the string or buffer to scan.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
964 The property values are compared with `eq'.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
965 Return nil if the property is constant all the way to the end of OBJECT.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
966 If the value is non-nil, it is a position greater than POSITION, never equal.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
967
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
968 If the optional fourth argument LIMIT is non-nil, don't search
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
969 past position LIMIT; return LIMIT if nothing is found before LIMIT. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
970 (position, prop, object, limit)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
971 Lisp_Object position, prop, object, limit;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
972 {
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
973 register INTERVAL i, next;
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
974 register Lisp_Object here_val;
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
975
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
976 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
977 XSETBUFFER (object, current_buffer);
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
978
7092
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
979 if (!NILP (limit))
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
980 CHECK_NUMBER_COERCE_MARKER (limit, 0);
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
981
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
982 i = validate_interval_range (object, &position, &position, soft);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
983 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
984 return limit;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
985
2762
dd28ed1e1928 * textprop.c (Fnext_single_property_change,
Jim Blandy <jimb@redhat.com>
parents: 2124
diff changeset
986 here_val = textget (i->plist, prop);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
987 next = next_interval (i);
2762
dd28ed1e1928 * textprop.c (Fnext_single_property_change,
Jim Blandy <jimb@redhat.com>
parents: 2124
diff changeset
988 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
989 && EQ (here_val, textget (next->plist, prop))
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
990 && (NILP (limit) || next->position < XFASTINT (limit)))
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
991 next = next_interval (next);
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
992
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
993 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
994 return limit;
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
995 if (! NILP (limit) && !(next->position < XFASTINT (limit)))
5086
6e9634463e93 (Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents: 5020
diff changeset
996 return limit;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
997
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
998 return make_number (next->position);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
999 }
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1000
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1001 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
1002 Sprevious_property_change, 1, 3, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1003 doc: /* Return the position of previous property change.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1004 Scans characters backwards from POSITION in OBJECT till it finds
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1005 a change in some text property, then returns the position of the change.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1006 The optional second argument OBJECT is the string or buffer to scan.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1007 Return nil if the property is constant all the way to the start of OBJECT.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1008 If the value is non-nil, it is a position less than POSITION, never equal.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1009
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1010 If the optional third argument LIMIT is non-nil, don't search
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1011 back past position LIMIT; return LIMIT if nothing is found until LIMIT. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1012 (position, object, limit)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1013 Lisp_Object position, object, limit;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1014 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1015 register INTERVAL i, previous;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1016
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1017 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1018 XSETBUFFER (object, current_buffer);
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1019
7092
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
1020 if (!NILP (limit))
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
1021 CHECK_NUMBER_COERCE_MARKER (limit, 0);
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
1022
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1023 i = validate_interval_range (object, &position, &position, soft);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1024 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
1025 return limit;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1026
5644
2abe67658895 (Fprevious_property_change): Move back at least 1 char.
Richard M. Stallman <rms@gnu.org>
parents: 5114
diff changeset
1027 /* Start with the interval containing the char before point. */
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1028 if (i->position == XFASTINT (position))
5644
2abe67658895 (Fprevious_property_change): Move back at least 1 char.
Richard M. Stallman <rms@gnu.org>
parents: 5114
diff changeset
1029 i = previous_interval (i);
2abe67658895 (Fprevious_property_change): Move back at least 1 char.
Richard M. Stallman <rms@gnu.org>
parents: 5114
diff changeset
1030
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1031 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
1032 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
1033 && (NILP (limit)
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1034 || (previous->position + LENGTH (previous) > XFASTINT (limit))))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1035 previous = previous_interval (previous);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1036 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
1037 return limit;
6e9634463e93 (Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents: 5020
diff changeset
1038 if (!NILP (limit)
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1039 && !(previous->position + LENGTH (previous) > XFASTINT (limit)))
5086
6e9634463e93 (Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents: 5020
diff changeset
1040 return limit;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1041
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1042 return make_number (previous->position + LENGTH (previous));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1043 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1044
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1045 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
1046 Sprevious_single_property_change, 2, 4, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1047 doc: /* Return the position of previous property change for a specific property.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1048 Scans characters backward from POSITION till it finds
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1049 a change in the PROP property, then returns the position of the change.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1050 The optional third argument OBJECT is the string or buffer to scan.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1051 The property values are compared with `eq'.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1052 Return nil if the property is constant all the way to the start of OBJECT.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1053 If the value is non-nil, it is a position less than POSITION, never equal.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1054
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1055 If the optional fourth argument LIMIT is non-nil, don't search
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1056 back past position LIMIT; return LIMIT if nothing is found until LIMIT. */)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1057 (position, prop, object, limit)
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1058 Lisp_Object position, prop, object, limit;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1059 {
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1060 register INTERVAL i, previous;
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1061 register Lisp_Object here_val;
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1062
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1063 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1064 XSETBUFFER (object, current_buffer);
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1065
7092
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
1066 if (!NILP (limit))
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
1067 CHECK_NUMBER_COERCE_MARKER (limit, 0);
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
1068
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1069 i = validate_interval_range (object, &position, &position, soft);
7773
2226c7efb3da (Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents: 7582
diff changeset
1070
2226c7efb3da (Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents: 7582
diff changeset
1071 /* Start with the interval containing the char before point. */
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1072 if (! NULL_INTERVAL_P (i) && i->position == XFASTINT (position))
7773
2226c7efb3da (Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents: 7582
diff changeset
1073 i = previous_interval (i);
2226c7efb3da (Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents: 7582
diff changeset
1074
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1075 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
1076 return limit;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1077
2762
dd28ed1e1928 * textprop.c (Fnext_single_property_change,
Jim Blandy <jimb@redhat.com>
parents: 2124
diff changeset
1078 here_val = textget (i->plist, prop);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1079 previous = previous_interval (i);
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1080 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
1081 && 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
1082 && (NILP (limit)
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1083 || (previous->position + LENGTH (previous) > XFASTINT (limit))))
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1084 previous = previous_interval (previous);
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1085 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
1086 return limit;
6e9634463e93 (Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents: 5020
diff changeset
1087 if (!NILP (limit)
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1088 && !(previous->position + LENGTH (previous) > XFASTINT (limit)))
5086
6e9634463e93 (Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents: 5020
diff changeset
1089 return limit;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1090
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1091 return make_number (previous->position + LENGTH (previous));
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1092 }
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
1093
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1094 /* Callers note, this can GC when OBJECT is a buffer (or nil). */
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1095
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1096 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
1097 Sadd_text_properties, 3, 4, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1098 doc: /* Add properties to the text from START to END.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1099 The third argument PROPERTIES is a property list
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1100 specifying the property values to add.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1101 The optional fourth argument, OBJECT,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1102 is the string or buffer containing the text.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1103 Return t if any property value actually changed, nil otherwise. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1104 (start, end, properties, object)
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1105 Lisp_Object start, end, properties, object;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1106 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1107 register INTERVAL i, unchanged;
2124
54179ef9ce35 * textprop.c (Fadd_text_properties): Initialize the modified flag.
Jim Blandy <jimb@redhat.com>
parents: 2058
diff changeset
1108 register int s, len, modified = 0;
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1109 struct gcpro gcpro1;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1110
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1111 properties = validate_plist (properties);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1112 if (NILP (properties))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1113 return Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1114
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1115 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1116 XSETBUFFER (object, current_buffer);
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1117
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1118 i = validate_interval_range (object, &start, &end, hard);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1119 if (NULL_INTERVAL_P (i))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1120 return Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1121
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1122 s = XINT (start);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1123 len = XINT (end) - s;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1124
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1125 /* No need to protect OBJECT, because we GC only if it's a buffer,
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1126 and live buffers are always protected. */
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1127 GCPRO1 (properties);
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1128
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1129 /* If we're not starting on an interval boundary, we have to
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
1130 split this interval. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1131 if (i->position != s)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1132 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1133 /* If this interval already has the properties, we can
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
1134 skip it. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1135 if (interval_has_all_properties (properties, i))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1136 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1137 int got = (LENGTH (i) - (s - i->position));
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1138 if (got >= len)
14538
a17752d2b0c0 (Fadd_text_properties): Don't return without ungcpro.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1139 RETURN_UNGCPRO (Qnil);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1140 len -= got;
3858
e07d474bdba9 (Fremove_text_properties, Fadd_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 3698
diff changeset
1141 i = next_interval (i);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1142 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1143 else
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1144 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1145 unchanged = i;
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1146 i = split_interval_right (unchanged, s - unchanged->position);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1147 copy_properties (unchanged, i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1148 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1149 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1150
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1151 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1152 modify_region (XBUFFER (object), XINT (start), XINT (end));
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1153
3553
5f9688c0b704 (Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents: 2783
diff changeset
1154 /* 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
1155 for (;;)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1156 {
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1157 if (i == 0)
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1158 abort ();
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1159
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1160 if (LENGTH (i) >= len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1161 {
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1162 /* We can UNGCPRO safely here, because there will be just
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1163 one more chance to gc, in the next call to add_properties,
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1164 and after that we will not need PROPERTIES or OBJECT again. */
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1165 UNGCPRO;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1166
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1167 if (interval_has_all_properties (properties, i))
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1168 {
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1169 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1170 signal_after_change (XINT (start), XINT (end) - XINT (start),
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1171 XINT (end) - XINT (start));
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1172
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1173 return modified ? Qt : Qnil;
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1174 }
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1175
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1176 if (LENGTH (i) == len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1177 {
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1178 add_properties (properties, i, object);
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1179 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1180 signal_after_change (XINT (start), XINT (end) - XINT (start),
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1181 XINT (end) - XINT (start));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1182 return Qt;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1183 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1184
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1185 /* i doesn't have the properties, and goes past the change limit */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1186 unchanged = i;
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1187 i = split_interval_left (unchanged, len);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1188 copy_properties (unchanged, i);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1189 add_properties (properties, i, object);
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1190 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1191 signal_after_change (XINT (start), XINT (end) - XINT (start),
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1192 XINT (end) - XINT (start));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1193 return Qt;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1194 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1195
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1196 len -= LENGTH (i);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1197 modified += add_properties (properties, i, object);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1198 i = next_interval (i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1199 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1200 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1201
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1202 /* Callers note, this can GC when OBJECT is a buffer (or nil). */
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1203
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1204 DEFUN ("put-text-property", Fput_text_property,
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1205 Sput_text_property, 4, 5, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1206 doc: /* Set one property of the text from START to END.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1207 The third and fourth arguments PROPERTY and VALUE
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1208 specify the property to add.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1209 The optional fifth argument, OBJECT,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1210 is the string or buffer containing the text. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1211 (start, end, property, value, object)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1212 Lisp_Object start, end, property, value, object;
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1213 {
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1214 Fadd_text_properties (start, end,
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1215 Fcons (property, Fcons (value, Qnil)),
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1216 object);
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1217 return Qnil;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1218 }
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1219
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1220 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
1221 Sset_text_properties, 3, 4, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1222 doc: /* Completely replace properties of text from START to END.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1223 The third argument PROPERTIES is the new property list.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1224 The optional fourth argument, OBJECT,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1225 is the string or buffer containing the text.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1226 If OBJECT is omitted or nil, it defaults to the current buffer.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1227 If PROPERTIES is nil, the effect is to remove all properties from
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1228 the designated part of OBJECT. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1229 (start, end, properties, object)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1230 Lisp_Object start, end, properties, object;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1231 {
26605
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1232 return set_text_properties (start, end, properties, object, Qt);
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1233 }
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1234
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1235
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1236 /* Replace properties of text from START to END with new list of
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1237 properties PROPERTIES. OBJECT is the buffer or string containing
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1238 the text. OBJECT nil means use the current buffer.
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1239 SIGNAL_AFTER_CHANGE_P nil means don't signal after changes. Value
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1240 is non-nil if properties were replaced; it is nil if there weren't
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1241 any properties to replace. */
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1242
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1243 Lisp_Object
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1244 set_text_properties (start, end, properties, object, signal_after_change_p)
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1245 Lisp_Object start, end, properties, object, signal_after_change_p;
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1246 {
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1247 register INTERVAL i, unchanged;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1248 register INTERVAL prev_changed = NULL_INTERVAL;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1249 register int s, len;
9071
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1250 Lisp_Object ostart, oend;
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1251
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1252 ostart = start;
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1253 oend = end;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1254
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1255 properties = validate_plist (properties);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1256
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1257 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1258 XSETBUFFER (object, current_buffer);
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1259
9541
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1260 /* If we want no properties for a whole string,
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1261 get rid of its intervals. */
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1262 if (NILP (properties) && STRINGP (object)
9541
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1263 && XFASTINT (start) == 0
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1264 && XFASTINT (end) == XSTRING (object)->size)
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1265 {
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1266 if (! XSTRING (object)->intervals)
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1267 return Qt;
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1268
9541
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1269 XSTRING (object)->intervals = 0;
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1270 return Qt;
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1271 }
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1272
8686
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1273 i = validate_interval_range (object, &start, &end, soft);
9541
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1274
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1275 if (NULL_INTERVAL_P (i))
8686
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1276 {
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1277 /* If buffer has no properties, and we want none, return now. */
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1278 if (NILP (properties))
8686
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1279 return Qnil;
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1280
9071
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1281 /* Restore the original START and END values
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1282 because validate_interval_range increments them for strings. */
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1283 start = ostart;
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1284 end = oend;
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1285
8686
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1286 i = validate_interval_range (object, &start, &end, hard);
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1287 /* This can return if start == end. */
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1288 if (NULL_INTERVAL_P (i))
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1289 return Qnil;
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1290 }
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1291
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1292 s = XINT (start);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1293 len = XINT (end) - s;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1294
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1295 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1296 modify_region (XBUFFER (object), XINT (start), XINT (end));
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1297
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1298 if (i->position != s)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1299 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1300 unchanged = i;
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1301 i = split_interval_right (unchanged, s - unchanged->position);
1272
bfd04f61eb16 Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
1302
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1303 if (LENGTH (i) > len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1304 {
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1305 copy_properties (unchanged, i);
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1306 i = split_interval_left (i, len);
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1307 set_properties (properties, i, object);
26605
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1308 if (BUFFERP (object) && !NILP (signal_after_change_p))
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1309 signal_after_change (XINT (start), XINT (end) - XINT (start),
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1310 XINT (end) - XINT (start));
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1311
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1312 return Qt;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1313 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1314
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1315 set_properties (properties, i, object);
3553
5f9688c0b704 (Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents: 2783
diff changeset
1316
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1317 if (LENGTH (i) == len)
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1318 {
26605
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1319 if (BUFFERP (object) && !NILP (signal_after_change_p))
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1320 signal_after_change (XINT (start), XINT (end) - XINT (start),
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1321 XINT (end) - XINT (start));
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1322
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1323 return Qt;
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1324 }
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1325
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1326 prev_changed = i;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1327 len -= LENGTH (i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1328 i = next_interval (i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1329 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1330
1283
6f4cbcc62eba Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents: 1272
diff changeset
1331 /* 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
1332 while (len > 0)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1333 {
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1334 if (i == 0)
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1335 abort ();
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1336
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1337 if (LENGTH (i) >= len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1338 {
1283
6f4cbcc62eba Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents: 1272
diff changeset
1339 if (LENGTH (i) > len)
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1340 i = split_interval_left (i, len);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1341
13585
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1342 /* We have to call set_properties even if we are going to
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1343 merge the intervals, so as to make the undo records
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1344 and cause redisplay to happen. */
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1345 set_properties (properties, i, object);
13585
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1346 if (!NULL_INTERVAL_P (prev_changed))
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1347 merge_interval_left (i);
26605
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1348 if (BUFFERP (object) && !NILP (signal_after_change_p))
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1349 signal_after_change (XINT (start), XINT (end) - XINT (start),
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1350 XINT (end) - XINT (start));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1351 return Qt;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1352 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1353
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1354 len -= LENGTH (i);
13585
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1355
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1356 /* We have to call set_properties even if we are going to
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1357 merge the intervals, so as to make the undo records
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1358 and cause redisplay to happen. */
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1359 set_properties (properties, i, object);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1360 if (NULL_INTERVAL_P (prev_changed))
13585
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1361 prev_changed = i;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1362 else
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1363 prev_changed = i = merge_interval_left (i);
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1364
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1365 i = next_interval (i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1366 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1367
26605
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1368 if (BUFFERP (object) && !NILP (signal_after_change_p))
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1369 signal_after_change (XINT (start), XINT (end) - XINT (start),
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1370 XINT (end) - XINT (start));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1371 return Qt;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1372 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1373
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1374 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
1375 Sremove_text_properties, 3, 4, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1376 doc: /* Remove some properties from text from START to END.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1377 The third argument PROPERTIES is a property list
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1378 whose property names specify the properties to remove.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1379 \(The values stored in PROPERTIES are ignored.)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1380 The optional fourth argument, OBJECT,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1381 is the string or buffer containing the text.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1382 Return t if any property was actually removed, nil otherwise. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1383 (start, end, properties, object)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1384 Lisp_Object start, end, properties, object;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1385 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1386 register INTERVAL i, unchanged;
2124
54179ef9ce35 * textprop.c (Fadd_text_properties): Initialize the modified flag.
Jim Blandy <jimb@redhat.com>
parents: 2058
diff changeset
1387 register int s, len, modified = 0;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1388
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1389 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1390 XSETBUFFER (object, current_buffer);
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1391
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1392 i = validate_interval_range (object, &start, &end, soft);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1393 if (NULL_INTERVAL_P (i))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1394 return Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1395
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1396 s = XINT (start);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1397 len = XINT (end) - s;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1398
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1399 if (i->position != s)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1400 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1401 /* No properties on this first interval -- return if
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
1402 it covers the entire region. */
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1403 if (! interval_has_some_properties (properties, i))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1404 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1405 int got = (LENGTH (i) - (s - i->position));
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1406 if (got >= len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1407 return Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1408 len -= got;
3858
e07d474bdba9 (Fremove_text_properties, Fadd_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 3698
diff changeset
1409 i = next_interval (i);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1410 }
3553
5f9688c0b704 (Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents: 2783
diff changeset
1411 /* 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
1412 want to modify. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1413 else
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1414 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1415 unchanged = i;
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1416 i = split_interval_right (unchanged, s - unchanged->position);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1417 copy_properties (unchanged, i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1418 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1419 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1420
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1421 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1422 modify_region (XBUFFER (object), XINT (start), XINT (end));
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1423
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1424 /* 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
1425 for (;;)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1426 {
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1427 if (i == 0)
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1428 abort ();
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1429
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1430 if (LENGTH (i) >= len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1431 {
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1432 if (! interval_has_some_properties (properties, i))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1433 return modified ? Qt : Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1434
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1435 if (LENGTH (i) == len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1436 {
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1437 remove_properties (properties, i, object);
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1438 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1439 signal_after_change (XINT (start), XINT (end) - XINT (start),
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1440 XINT (end) - XINT (start));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1441 return Qt;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1442 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1443
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1444 /* 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
1445 unchanged = i;
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1446 i = split_interval_left (i, len);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1447 copy_properties (unchanged, i);
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1448 remove_properties (properties, i, object);
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1449 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1450 signal_after_change (XINT (start), XINT (end) - XINT (start),
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1451 XINT (end) - XINT (start));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1452 return Qt;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1453 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1454
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1455 len -= LENGTH (i);
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1456 modified += remove_properties (properties, i, object);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1457 i = next_interval (i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1458 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1459 }
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
1460
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1461 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
1462 Stext_property_any, 4, 5, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1463 doc: /* Check text from START to END for property PROPERTY equalling VALUE.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1464 If so, return the position of the first character whose property PROPERTY
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1465 is `eq' to VALUE. Otherwise return nil.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1466 The optional fifth argument, OBJECT, is the string or buffer
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1467 containing the text. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1468 (start, end, property, value, object)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1469 Lisp_Object start, end, property, value, object;
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1470 {
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1471 register INTERVAL i;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1472 register int e, pos;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1473
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1474 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1475 XSETBUFFER (object, current_buffer);
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1476 i = validate_interval_range (object, &start, &end, soft);
10488
701e7acfe885 (Ftext_property_any): Handle the trivial case specially.
Karl Heuer <kwzh@gnu.org>
parents: 10312
diff changeset
1477 if (NULL_INTERVAL_P (i))
701e7acfe885 (Ftext_property_any): Handle the trivial case specially.
Karl Heuer <kwzh@gnu.org>
parents: 10312
diff changeset
1478 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
1479 e = XINT (end);
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1480
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1481 while (! NULL_INTERVAL_P (i))
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1482 {
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1483 if (i->position >= e)
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1484 break;
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1485 if (EQ (textget (i->plist, property), value))
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1486 {
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1487 pos = i->position;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1488 if (pos < XINT (start))
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1489 pos = XINT (start);
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1490 return make_number (pos);
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1491 }
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1492 i = next_interval (i);
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1493 }
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1494 return Qnil;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1495 }
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1496
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1497 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
1498 Stext_property_not_all, 4, 5, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1499 doc: /* Check text from START to END for property PROPERTY not equalling VALUE.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1500 If so, return the position of the first character whose property PROPERTY
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1501 is not `eq' to VALUE. Otherwise, return nil.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1502 The optional fifth argument, OBJECT, is the string or buffer
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1503 containing the text. */)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1504 (start, end, property, value, object)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1505 Lisp_Object start, end, property, value, object;
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1506 {
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1507 register INTERVAL i;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1508 register int s, e;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1509
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1510 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1511 XSETBUFFER (object, current_buffer);
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1512 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
1513 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
1514 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
1515 s = XINT (start);
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1516 e = XINT (end);
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1517
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1518 while (! NULL_INTERVAL_P (i))
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1519 {
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1520 if (i->position >= e)
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1521 break;
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1522 if (! EQ (textget (i->plist, property), value))
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1523 {
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1524 if (i->position > s)
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1525 s = i->position;
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1526 return make_number (s);
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1527 }
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1528 i = next_interval (i);
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1529 }
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1530 return Qnil;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1531 }
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
1532
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1533 /* 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
1534 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
1535 around?
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1536
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1537 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
1538 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
1539 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
1540
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1541 /* Add properties from SRC to SRC of SRC, starting at POS in DEST.
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1542 SRC and DEST may each refer to strings or buffers.
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1543 Optional sixth argument PROP causes only that property to be copied.
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1544 Properties are copied to DEST as if by `add-text-properties'.
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1545 Return t if any property value actually changed, nil otherwise. */
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1546
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1547 /* Note this can GC when DEST is a buffer. */
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1548
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1549 Lisp_Object
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1550 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
1551 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
1552 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1553 INTERVAL i;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1554 Lisp_Object res;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1555 Lisp_Object stuff;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1556 Lisp_Object plist;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1557 int s, e, e2, p, len, modified = 0;
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1558 struct gcpro gcpro1, gcpro2;
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1559
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1560 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
1561 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
1562 return Qnil;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1563
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1564 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
1565 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1566 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
1567
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1568 dest_start = pos;
9321
e6759002383c (Fnext_property_change, property_change_between_p,
Karl Heuer <kwzh@gnu.org>
parents: 9280
diff changeset
1569 XSETFASTINT (dest_end, XINT (dest_start) + (XINT (end) - XINT (start)));
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1570 /* 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
1571 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
1572 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
1573 }
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1574
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1575 s = XINT (start);
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1576 e = XINT (end);
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1577 p = XINT (pos);
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1578
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1579 stuff = Qnil;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1580
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1581 while (s < e)
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1582 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1583 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
1584 if (e2 > e)
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1585 e2 = e;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1586 len = e2 - s;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1587
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1588 plist = i->plist;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1589 if (! NILP (prop))
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1590 while (! NILP (plist))
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1591 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1592 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
1593 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1594 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
1595 break;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1596 }
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1597 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
1598 }
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1599 if (! NILP (plist))
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1600 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1601 /* Must defer modifications to the interval tree in case src
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
1602 and dest refer to the same string or buffer. */
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1603 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
1604 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
1605 Fcons (plist, Qnil))),
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1606 stuff);
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1607 }
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1608
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1609 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
1610 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
1611 break;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1612
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1613 p += len;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1614 s = i->position;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1615 }
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1616
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1617 GCPRO2 (stuff, dest);
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1618
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1619 while (! NILP (stuff))
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1620 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1621 res = Fcar (stuff);
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1622 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
1623 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
1624 if (! NILP (res))
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1625 modified++;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1626 stuff = Fcdr (stuff);
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1627 }
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1628
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1629 UNGCPRO;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1630
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1631 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
1632 }
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1633
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1634
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1635 /* Return a list representing the text properties of OBJECT between
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1636 START and END. if PROP is non-nil, report only on that property.
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1637 Each result list element has the form (S E PLIST), where S and E
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1638 are positions in OBJECT and PLIST is a property list containing the
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1639 text properties of OBJECT between S and E. Value is nil if OBJECT
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1640 doesn't contain text properties between START and END. */
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1641
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1642 Lisp_Object
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1643 text_property_list (object, start, end, prop)
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1644 Lisp_Object object, start, end, prop;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1645 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1646 struct interval *i;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1647 Lisp_Object result;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1648
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1649 result = Qnil;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1650
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1651 i = validate_interval_range (object, &start, &end, soft);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1652 if (!NULL_INTERVAL_P (i))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1653 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1654 int s = XINT (start);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1655 int e = XINT (end);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1656
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1657 while (s < e)
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1658 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1659 int interval_end, len;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1660 Lisp_Object plist;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1661
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1662 interval_end = i->position + LENGTH (i);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1663 if (interval_end > e)
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1664 interval_end = e;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1665 len = interval_end - s;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1666
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1667 plist = i->plist;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1668
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1669 if (!NILP (prop))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1670 for (; !NILP (plist); plist = Fcdr (Fcdr (plist)))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1671 if (EQ (Fcar (plist), prop))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1672 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1673 plist = Fcons (prop, Fcons (Fcar (Fcdr (plist)), Qnil));
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1674 break;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1675 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1676
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1677 if (!NILP (plist))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1678 result = Fcons (Fcons (make_number (s),
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1679 Fcons (make_number (s + len),
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1680 Fcons (plist, Qnil))),
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1681 result);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1682
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1683 i = next_interval (i);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1684 if (NULL_INTERVAL_P (i))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1685 break;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1686 s = i->position;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1687 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1688 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1689
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1690 return result;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1691 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1692
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1693
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1694 /* Add text properties to OBJECT from LIST. LIST is a list of triples
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1695 (START END PLIST), where START and END are positions and PLIST is a
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1696 property list containing the text properties to add. Adjust START
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1697 and END positions by DELTA before adding properties. Value is
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1698 non-zero if OBJECT was modified. */
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1699
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1700 int
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1701 add_text_properties_from_list (object, list, delta)
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1702 Lisp_Object object, list, delta;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1703 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1704 struct gcpro gcpro1, gcpro2;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1705 int modified_p = 0;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1706
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1707 GCPRO2 (list, object);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1708
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1709 for (; CONSP (list); list = XCDR (list))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1710 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1711 Lisp_Object item, start, end, plist, tem;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1712
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1713 item = XCAR (list);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1714 start = make_number (XINT (XCAR (item)) + XINT (delta));
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1715 end = make_number (XINT (XCAR (XCDR (item))) + XINT (delta));
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1716 plist = XCAR (XCDR (XCDR (item)));
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1717
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1718 tem = Fadd_text_properties (start, end, plist, object);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1719 if (!NILP (tem))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1720 modified_p = 1;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1721 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1722
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1723 UNGCPRO;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1724 return modified_p;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1725 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1726
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1727
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1728
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1729 /* Modify end-points of ranges in LIST destructively. LIST is a list
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1730 as returned from text_property_list. Change end-points equal to
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1731 OLD_END to NEW_END. */
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1732
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1733 void
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1734 extend_property_ranges (list, old_end, new_end)
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1735 Lisp_Object list, old_end, new_end;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1736 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1737 for (; CONSP (list); list = XCDR (list))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1738 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1739 Lisp_Object item, end;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1740
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1741 item = XCAR (list);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1742 end = XCAR (XCDR (item));
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1743
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1744 if (EQ (end, old_end))
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39527
diff changeset
1745 XSETCAR (XCDR (item), new_end);
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1746 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1747 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1748
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1749
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1750
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1751 /* Call the modification hook functions in LIST, each with START and END. */
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1752
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1753 static void
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1754 call_mod_hooks (list, start, end)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1755 Lisp_Object list, start, end;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1756 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1757 struct gcpro gcpro1;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1758 GCPRO1 (list);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1759 while (!NILP (list))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1760 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1761 call2 (Fcar (list), start, end);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1762 list = Fcdr (list);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1763 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1764 UNGCPRO;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1765 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1766
20522
4409f95651d1 (Ftext_properties_at): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18736
diff changeset
1767 /* Check for read-only intervals between character positions START ... END,
4409f95651d1 (Ftext_properties_at): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18736
diff changeset
1768 in BUF, and signal an error if we find one.
4409f95651d1 (Ftext_properties_at): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18736
diff changeset
1769
4409f95651d1 (Ftext_properties_at): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18736
diff changeset
1770 Then check for any modification hooks in the range.
4409f95651d1 (Ftext_properties_at): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18736
diff changeset
1771 Create a list of all these hooks in lexicographic order,
4409f95651d1 (Ftext_properties_at): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18736
diff changeset
1772 eliminating consecutive extra copies of the same hook. Then call
4409f95651d1 (Ftext_properties_at): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18736
diff changeset
1773 those hooks in order, with START and END - 1 as arguments. */
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1774
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1775 void
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1776 verify_interval_modification (buf, start, end)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1777 struct buffer *buf;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1778 int start, end;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1779 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1780 register INTERVAL intervals = BUF_INTERVALS (buf);
25772
1902e7e63fa7 (Fset_text_properties): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
1781 register INTERVAL i;
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1782 Lisp_Object hooks;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1783 register Lisp_Object prev_mod_hooks;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1784 Lisp_Object mod_hooks;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1785 struct gcpro gcpro1;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1786
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1787 hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1788 prev_mod_hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1789 mod_hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1790
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1791 interval_insert_behind_hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1792 interval_insert_in_front_hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1793
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1794 if (NULL_INTERVAL_P (intervals))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1795 return;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1796
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1797 if (start > end)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1798 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1799 int temp = start;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1800 start = end;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1801 end = temp;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1802 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1803
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1804 /* For an insert operation, check the two chars around the position. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1805 if (start == end)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1806 {
33952
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
1807 INTERVAL prev = NULL;
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1808 Lisp_Object before, after;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1809
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1810 /* Set I to the interval containing the char after START,
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1811 and PREV to the interval containing the char before START.
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1812 Either one may be null. They may be equal. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1813 i = find_interval (intervals, start);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1814
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1815 if (start == BUF_BEGV (buf))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1816 prev = 0;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1817 else if (i->position == start)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1818 prev = previous_interval (i);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1819 else if (i->position < start)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1820 prev = i;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1821 if (start == BUF_ZV (buf))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1822 i = 0;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1823
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1824 /* If Vinhibit_read_only is set and is not a list, we can
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1825 skip the read_only checks. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1826 if (NILP (Vinhibit_read_only) || CONSP (Vinhibit_read_only))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1827 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1828 /* If I and PREV differ we need to check for the read-only
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
1829 property together with its stickiness. If either I or
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1830 PREV are 0, this check is all we need.
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1831 We have to take special care, since read-only may be
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1832 indirectly defined via the category property. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1833 if (i != prev)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1834 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1835 if (! NULL_INTERVAL_P (i))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1836 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1837 after = textget (i->plist, Qread_only);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1838
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1839 /* If interval I is read-only and read-only is
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1840 front-sticky, inhibit insertion.
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1841 Check for read-only as well as category. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1842 if (! NILP (after)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1843 && NILP (Fmemq (after, Vinhibit_read_only)))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1844 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1845 Lisp_Object tem;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1846
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1847 tem = textget (i->plist, Qfront_sticky);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1848 if (TMEM (Qread_only, tem)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1849 || (NILP (Fplist_get (i->plist, Qread_only))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1850 && TMEM (Qcategory, tem)))
33952
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
1851 text_read_only ();
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1852 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1853 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1854
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1855 if (! NULL_INTERVAL_P (prev))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1856 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1857 before = textget (prev->plist, Qread_only);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1858
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1859 /* If interval PREV is read-only and read-only isn't
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1860 rear-nonsticky, inhibit insertion.
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1861 Check for read-only as well as category. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1862 if (! NILP (before)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1863 && NILP (Fmemq (before, Vinhibit_read_only)))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1864 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1865 Lisp_Object tem;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1866
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1867 tem = textget (prev->plist, Qrear_nonsticky);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1868 if (! TMEM (Qread_only, tem)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1869 && (! NILP (Fplist_get (prev->plist,Qread_only))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1870 || ! TMEM (Qcategory, tem)))
33952
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
1871 text_read_only ();
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1872 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1873 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1874 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1875 else if (! NULL_INTERVAL_P (i))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1876 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1877 after = textget (i->plist, Qread_only);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1878
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1879 /* If interval I is read-only and read-only is
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1880 front-sticky, inhibit insertion.
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1881 Check for read-only as well as category. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1882 if (! NILP (after) && NILP (Fmemq (after, Vinhibit_read_only)))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1883 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1884 Lisp_Object tem;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1885
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1886 tem = textget (i->plist, Qfront_sticky);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1887 if (TMEM (Qread_only, tem)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1888 || (NILP (Fplist_get (i->plist, Qread_only))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1889 && TMEM (Qcategory, tem)))
33952
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
1890 text_read_only ();
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1891
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1892 tem = textget (prev->plist, Qrear_nonsticky);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1893 if (! TMEM (Qread_only, tem)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1894 && (! NILP (Fplist_get (prev->plist, Qread_only))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1895 || ! TMEM (Qcategory, tem)))
33952
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
1896 text_read_only ();
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1897 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1898 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1899 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1900
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1901 /* Run both insert hooks (just once if they're the same). */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1902 if (!NULL_INTERVAL_P (prev))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1903 interval_insert_behind_hooks
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1904 = textget (prev->plist, Qinsert_behind_hooks);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1905 if (!NULL_INTERVAL_P (i))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1906 interval_insert_in_front_hooks
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1907 = textget (i->plist, Qinsert_in_front_hooks);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1908 }
39247
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1909 else
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1910 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1911 /* Loop over intervals on or next to START...END,
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1912 collecting their hooks. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1913
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1914 i = find_interval (intervals, start);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1915 do
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1916 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1917 if (! INTERVAL_WRITABLE_P (i))
33952
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
1918 text_read_only ();
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1919
39247
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1920 if (!inhibit_modification_hooks)
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1921 {
39247
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1922 mod_hooks = textget (i->plist, Qmodification_hooks);
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1923 if (! NILP (mod_hooks) && ! EQ (mod_hooks, prev_mod_hooks))
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1924 {
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1925 hooks = Fcons (mod_hooks, hooks);
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1926 prev_mod_hooks = mod_hooks;
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1927 }
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1928 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1929
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1930 i = next_interval (i);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1931 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1932 /* Keep going thru the interval containing the char before END. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1933 while (! NULL_INTERVAL_P (i) && i->position < end);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1934
39247
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1935 if (!inhibit_modification_hooks)
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1936 {
39247
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1937 GCPRO1 (hooks);
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1938 hooks = Fnreverse (hooks);
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1939 while (! EQ (hooks, Qnil))
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1940 {
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1941 call_mod_hooks (Fcar (hooks), make_number (start),
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1942 make_number (end));
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1943 hooks = Fcdr (hooks);
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1944 }
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
1945 UNGCPRO;
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1946 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1947 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1948 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1949
20522
4409f95651d1 (Ftext_properties_at): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18736
diff changeset
1950 /* Run the interval hooks for an insertion on character range START ... END.
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1951 verify_interval_modification chose which hooks to run;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1952 this function is called after the insertion happens
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1953 so it can indicate the range of inserted text. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1954
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1955 void
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1956 report_interval_modification (start, end)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1957 Lisp_Object start, end;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1958 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1959 if (! NILP (interval_insert_behind_hooks))
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 17467
diff changeset
1960 call_mod_hooks (interval_insert_behind_hooks, start, end);
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1961 if (! NILP (interval_insert_in_front_hooks)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1962 && ! EQ (interval_insert_in_front_hooks,
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1963 interval_insert_behind_hooks))
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 17467
diff changeset
1964 call_mod_hooks (interval_insert_in_front_hooks, start, end);
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1965 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1966
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1967 void
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1968 syms_of_textprop ()
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1969 {
11131
5db8a01b22cb (Vdefault_text_properties): name changed from Vdefault_properties.
Boris Goldowsky <boris@gnu.org>
parents: 11116
diff changeset
1970 DEFVAR_LISP ("default-text-properties", &Vdefault_text_properties,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1971 doc: /* Property-list used as default values.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1972 The value of a property in this list is seen as the value for every
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1973 character that does not have its own value for that property. */);
11131
5db8a01b22cb (Vdefault_text_properties): name changed from Vdefault_properties.
Boris Goldowsky <boris@gnu.org>
parents: 11116
diff changeset
1974 Vdefault_text_properties = Qnil;
10925
0480d65be55d (Vdefault_properties): New vbl.
Boris Goldowsky <boris@gnu.org>
parents: 10488
diff changeset
1975
4242
49007dbbec4c (syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents: 4214
diff changeset
1976 DEFVAR_LISP ("inhibit-point-motion-hooks", &Vinhibit_point_motion_hooks,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1977 doc: /* If non-nil, don't run `point-left' and `point-entered' text properties.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1978 This also inhibits the use of the `intangible' text property. */);
4242
49007dbbec4c (syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents: 4214
diff changeset
1979 Vinhibit_point_motion_hooks = Qnil;
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1980
26872
ea588757e607 (Vtext_property_default_nonsticky): New variable
Kenichi Handa <handa@m17n.org>
parents: 26605
diff changeset
1981 DEFVAR_LISP ("text-property-default-nonsticky",
ea588757e607 (Vtext_property_default_nonsticky): New variable
Kenichi Handa <handa@m17n.org>
parents: 26605
diff changeset
1982 &Vtext_property_default_nonsticky,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1983 doc: /* Alist of properties vs the corresponding non-stickinesses.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1984 Each element has the form (PROPERTY . NONSTICKINESS).
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1985
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1986 If a character in a buffer has PROPERTY, new text inserted adjacent to
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1987 the character doesn't inherit PROPERTY if NONSTICKINESS is non-nil,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1988 inherits it if NONSTICKINESS is nil. The front-sticky and
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1989 rear-nonsticky properties of the character overrides NONSTICKINESS. */);
26872
ea588757e607 (Vtext_property_default_nonsticky): New variable
Kenichi Handa <handa@m17n.org>
parents: 26605
diff changeset
1990 Vtext_property_default_nonsticky = Qnil;
ea588757e607 (Vtext_property_default_nonsticky): New variable
Kenichi Handa <handa@m17n.org>
parents: 26605
diff changeset
1991
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1992 staticpro (&interval_insert_behind_hooks);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1993 staticpro (&interval_insert_in_front_hooks);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1994 interval_insert_behind_hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1995 interval_insert_in_front_hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
1996
4242
49007dbbec4c (syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents: 4214
diff changeset
1997
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1998 /* Common attributes one might give text */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1999
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2000 staticpro (&Qforeground);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2001 Qforeground = intern ("foreground");
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2002 staticpro (&Qbackground);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2003 Qbackground = intern ("background");
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2004 staticpro (&Qfont);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2005 Qfont = intern ("font");
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2006 staticpro (&Qstipple);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2007 Qstipple = intern ("stipple");
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2008 staticpro (&Qunderline);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2009 Qunderline = intern ("underline");
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2010 staticpro (&Qread_only);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2011 Qread_only = intern ("read-only");
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2012 staticpro (&Qinvisible);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2013 Qinvisible = intern ("invisible");
6755
a2bccbc870e6 (syms_of_textprop): Initialize Qintangible.
Karl Heuer <kwzh@gnu.org>
parents: 6681
diff changeset
2014 staticpro (&Qintangible);
a2bccbc870e6 (syms_of_textprop): Initialize Qintangible.
Karl Heuer <kwzh@gnu.org>
parents: 6681
diff changeset
2015 Qintangible = intern ("intangible");
2058
a43d0bb1b7d8 (Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2053
diff changeset
2016 staticpro (&Qcategory);
a43d0bb1b7d8 (Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2053
diff changeset
2017 Qcategory = intern ("category");
a43d0bb1b7d8 (Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2053
diff changeset
2018 staticpro (&Qlocal_map);
a43d0bb1b7d8 (Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2053
diff changeset
2019 Qlocal_map = intern ("local-map");
4381
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
2020 staticpro (&Qfront_sticky);
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
2021 Qfront_sticky = intern ("front-sticky");
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
2022 staticpro (&Qrear_nonsticky);
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
2023 Qrear_nonsticky = intern ("rear-nonsticky");
23729
cf1cbb0e5d5b (Qmouse_face): Variable definition moved here.
Richard M. Stallman <rms@gnu.org>
parents: 22344
diff changeset
2024 staticpro (&Qmouse_face);
cf1cbb0e5d5b (Qmouse_face): Variable definition moved here.
Richard M. Stallman <rms@gnu.org>
parents: 22344
diff changeset
2025 Qmouse_face = intern ("mouse-face");
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2026
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2027 /* Properties that text might use to specify certain actions */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2028
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2029 staticpro (&Qmouse_left);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2030 Qmouse_left = intern ("mouse-left");
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2031 staticpro (&Qmouse_entered);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2032 Qmouse_entered = intern ("mouse-entered");
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2033 staticpro (&Qpoint_left);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2034 Qpoint_left = intern ("point-left");
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2035 staticpro (&Qpoint_entered);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2036 Qpoint_entered = intern ("point-entered");
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2037
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2038 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
2039 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
2040 defsubr (&Sget_char_property);
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
2041 defsubr (&Snext_char_property_change);
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
2042 defsubr (&Sprevious_char_property_change);
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
2043 defsubr (&Snext_single_char_property_change);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
2044 defsubr (&Sprevious_single_char_property_change);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2045 defsubr (&Snext_property_change);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
2046 defsubr (&Snext_single_property_change);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2047 defsubr (&Sprevious_property_change);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
2048 defsubr (&Sprevious_single_property_change);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2049 defsubr (&Sadd_text_properties);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
2050 defsubr (&Sput_text_property);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2051 defsubr (&Sset_text_properties);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2052 defsubr (&Sremove_text_properties);
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
2053 defsubr (&Stext_property_any);
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
2054 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
2055 /* 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
2056 /* defsubr (&Scopy_text_properties); */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2057 }
1302
538cc0cd6d83 * textprop.c: Conditionalize all functions on
Joseph Arceneaux <jla@gnu.org>
parents: 1283
diff changeset
2058