annotate src/textprop.c @ 108450:de8a1b891175

Merge from mainline.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sun, 11 Apr 2010 10:53:01 +0000
parents 51a1add37c3f
children 2bc9a0c04c87 376148b31b5e
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.
64770
a0d1312ede66 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64576
diff changeset
2 Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106780
diff changeset
3 2004, 2005, 2006, 2007, 2008, 2009, 2010 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
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87649
diff changeset
7 GNU Emacs is free software: you can redistribute it and/or modify
1029
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
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87649
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87649
diff changeset
10 (at your option) any later version.
1029
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
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87649
diff changeset
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4649
diff changeset
20 #include <config.h>
105669
68dd71358159 * alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
21 #include <setjmp.h>
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
22 #include "lisp.h"
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
23 #include "intervals.h"
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
24 #include "buffer.h"
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
25 #include "window.h"
8962
722763fed8ce (Fget_char_property): Pass new arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 8907
diff changeset
26
722763fed8ce (Fget_char_property): Pass new arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 8907
diff changeset
27 #ifndef NULL
722763fed8ce (Fget_char_property): Pass new arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 8907
diff changeset
28 #define NULL (void *)0
722763fed8ce (Fget_char_property): Pass new arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 8907
diff changeset
29 #endif
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
30
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
31 /* 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
32 universal set. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
33
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
34 #define TMEM(sym, set) (CONSP (set) ? ! NILP (Fmemq (sym, set)) : ! NILP (set))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
35
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
36
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
37 /* NOTES: previous- and next- property change will have to skip
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
38 zero-length intervals if they are implemented. This could be done
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
39 inside next_interval and previous_interval.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
40
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
41 set_properties needs to deal with the interval property cache.
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
42
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
43 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
44 only once on the list. Although some code i.e., remove_properties,
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
45 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
46 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
47 is enforced by the subrs installing properties onto the intervals. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
48
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
49
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
50 /* Types of hooks. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
51 Lisp_Object Qmouse_left;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
52 Lisp_Object Qmouse_entered;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
53 Lisp_Object Qpoint_left;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
54 Lisp_Object Qpoint_entered;
2058
a43d0bb1b7d8 (Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2053
diff changeset
55 Lisp_Object Qcategory;
a43d0bb1b7d8 (Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2053
diff changeset
56 Lisp_Object Qlocal_map;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
57
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
58 /* Visual properties text (including strings) may have. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
59 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
60 Lisp_Object Qinvisible, Qread_only, Qintangible, Qmouse_face;
100688
8233f3e2beb4 * textprop.c (Qminibuffer_prompt): New variable.
Martin Rudalics <rudalics@gmx.at>
parents: 99343
diff changeset
61 Lisp_Object Qminibuffer_prompt;
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;
45680
c9e70e34b426 (Vchar_property_alias_alist): New variable.
Colin Walters <walters@gnu.org>
parents: 44976
diff changeset
73 Lisp_Object Vchar_property_alias_alist;
26872
ea588757e607 (Vtext_property_default_nonsticky): New variable
Kenichi Handa <handa@m17n.org>
parents: 26605
diff changeset
74 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
75
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
76 /* 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
77 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
78 Lisp_Object interval_insert_behind_hooks;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
79 Lisp_Object interval_insert_in_front_hooks;
33952
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
80
72005
da0099bc0ba4 * ebrowse.c (usage, version): Mark as NO_RETURN.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 71989
diff changeset
81 static void text_read_only P_ ((Lisp_Object)) NO_RETURN;
da0099bc0ba4 * ebrowse.c (usage, version): Mark as NO_RETURN.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 71989
diff changeset
82
33952
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 /* 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
85 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
86
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
87 static void
48840
b6981c46191d (text_read_only): New arg `propval'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46448
diff changeset
88 text_read_only (propval)
b6981c46191d (text_read_only): New arg `propval'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46448
diff changeset
89 Lisp_Object propval;
33952
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
90 {
71989
3a19c23d7c59 (text_read_only): Use xsignal0, xsignal1.
Kim F. Storm <storm@cua.dk>
parents: 71575
diff changeset
91 if (STRINGP (propval))
3a19c23d7c59 (text_read_only): Use xsignal0, xsignal1.
Kim F. Storm <storm@cua.dk>
parents: 71575
diff changeset
92 xsignal1 (Qtext_read_only, propval);
3a19c23d7c59 (text_read_only): Use xsignal0, xsignal1.
Kim F. Storm <storm@cua.dk>
parents: 71575
diff changeset
93
3a19c23d7c59 (text_read_only): Use xsignal0, xsignal1.
Kim F. Storm <storm@cua.dk>
parents: 71575
diff changeset
94 xsignal0 (Qtext_read_only);
33952
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
95 }
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
96
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
97
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
98
1055
7eb43ab890e0 entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents: 1029
diff changeset
99 /* Extract the interval at the position pointed to by BEGIN from
7eb43ab890e0 entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents: 1029
diff changeset
100 OBJECT, a string or buffer. Additionally, check that the positions
7eb43ab890e0 entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents: 1029
diff changeset
101 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
102 reverse them if *BEGIN is greater than *END. The objects pointed
7eb43ab890e0 entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents: 1029
diff changeset
103 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
104 are coerced to integers.
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
105
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
106 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
107 to make them origin-one.
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
108
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
109 Note that buffer points don't correspond to interval indices.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
110 For example, point-max is 1 greater than the index of the last
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
111 character. This difference is handled in the caller, which uses
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
112 the validated points to determine a length, and operates on that.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
113 Exceptions are Ftext_properties_at, Fnext_property_change, and
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
114 Fprevious_property_change which call this function with BEGIN == END.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
115 Handle this case specially.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
116
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
117 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
118 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
119 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
120 is no text, there can be no text properties. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
121
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
122 #define soft 0
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
123 #define hard 1
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
124
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
125 INTERVAL
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
126 validate_interval_range (object, begin, end, force)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
127 Lisp_Object object, *begin, *end;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
128 int force;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
129 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
130 register INTERVAL i;
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
131 int searchpos;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
132
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
133 CHECK_STRING_OR_BUFFER (object);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
134 CHECK_NUMBER_COERCE_MARKER (*begin);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
135 CHECK_NUMBER_COERCE_MARKER (*end);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
136
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
137 /* 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
138 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
139 if (EQ (*begin, *end) && begin != end)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
140 return NULL_INTERVAL;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
141
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
142 if (XINT (*begin) > XINT (*end))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
143 {
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
144 Lisp_Object n;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
145 n = *begin;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
146 *begin = *end;
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
147 *end = n;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
148 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
149
9109
6e44ddc40153 (validate_interval_range, add_properties, remove_properties,
Karl Heuer <kwzh@gnu.org>
parents: 9071
diff changeset
150 if (BUFFERP (object))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
151 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
152 register struct buffer *b = XBUFFER (object);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
153
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
154 if (!(BUF_BEGV (b) <= XINT (*begin) && XINT (*begin) <= XINT (*end)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
155 && XINT (*end) <= BUF_ZV (b)))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
156 args_out_of_range (*begin, *end);
10312
4bf079c613c6 (validate_interval_range): Use BUF_INTERVALS.
Richard M. Stallman <rms@gnu.org>
parents: 10159
diff changeset
157 i = BUF_INTERVALS (b);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
158
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
159 /* 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
160 if (BUF_BEGV (b) == BUF_ZV (b))
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
161 return NULL_INTERVAL;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
162
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
163 searchpos = XINT (*begin);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
164 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
165 else
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
166 {
46448
218b99308569 (validate_interval_range, interval_of): Use string macros instead of
Ken Raeburn <raeburn@raeburn.org>
parents: 46381
diff changeset
167 int len = SCHARS (object);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
168
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
169 if (! (0 <= XINT (*begin) && XINT (*begin) <= XINT (*end)
46448
218b99308569 (validate_interval_range, interval_of): Use string macros instead of
Ken Raeburn <raeburn@raeburn.org>
parents: 46381
diff changeset
170 && XINT (*end) <= len))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
171 args_out_of_range (*begin, *end);
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
172 XSETFASTINT (*begin, XFASTINT (*begin));
3996
b9bdcf862c67 * textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents: 3960
diff changeset
173 if (begin != end)
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
174 XSETFASTINT (*end, XFASTINT (*end));
46448
218b99308569 (validate_interval_range, interval_of): Use string macros instead of
Ken Raeburn <raeburn@raeburn.org>
parents: 46381
diff changeset
175 i = STRING_INTERVALS (object);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
176
46448
218b99308569 (validate_interval_range, interval_of): Use string macros instead of
Ken Raeburn <raeburn@raeburn.org>
parents: 46381
diff changeset
177 if (len == 0)
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
178 return NULL_INTERVAL;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
179
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
180 searchpos = XINT (*begin);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
181 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
182
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
183 if (NULL_INTERVAL_P (i))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
184 return (force ? create_root_interval (object) : i);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
185
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
186 return find_interval (i, searchpos);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
187 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
188
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
189 /* Validate LIST as a property list. If LIST is not a list, then
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
190 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
191 is even numbered and thus suitable as a plist. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
192
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
193 static Lisp_Object
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
194 validate_plist (list)
4797
4dd43e41207a (validate_plist): Add argument declaration for `list'.
Brian Fox <bfox@gnu.org>
parents: 4696
diff changeset
195 Lisp_Object list;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
196 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
197 if (NILP (list))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
198 return Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
199
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
200 if (CONSP (list))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
201 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
202 register int i;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
203 register Lisp_Object tail;
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
204 for (i = 0, tail = list; CONSP (tail); i++)
3996
b9bdcf862c67 * textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents: 3960
diff changeset
205 {
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
206 tail = XCDR (tail);
3996
b9bdcf862c67 * textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents: 3960
diff changeset
207 QUIT;
b9bdcf862c67 * textprop.c (validate_interval_range): Don't increment both
Jim Blandy <jimb@redhat.com>
parents: 3960
diff changeset
208 }
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
209 if (i & 1)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
210 error ("Odd length text property list");
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
211 return list;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
212 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
213
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
214 return Fcons (list, Fcons (Qnil, Qnil));
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
215 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
216
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
217 /* 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
218 with the same values, of list PLIST. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
219
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
220 static int
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
221 interval_has_all_properties (plist, i)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
222 Lisp_Object plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
223 INTERVAL i;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
224 {
25772
1902e7e63fa7 (Fset_text_properties): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
225 register Lisp_Object tail1, tail2, sym1;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
226 register int found;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
227
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
228 /* Go through each element of PLIST. */
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
229 for (tail1 = plist; CONSP (tail1); tail1 = Fcdr (XCDR (tail1)))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
230 {
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
231 sym1 = XCAR (tail1);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
232 found = 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
233
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
234 /* Go through I's plist, looking for sym1 */
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
235 for (tail2 = i->plist; CONSP (tail2); tail2 = Fcdr (XCDR (tail2)))
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
236 if (EQ (sym1, XCAR (tail2)))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
237 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
238 /* 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
239 values are unequal, return zero. */
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
240 if (! EQ (Fcar (XCDR (tail1)), Fcar (XCDR (tail2))))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
241 return 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
242
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
243 /* Property has same value on both lists; go to next one. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
244 found = 1;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
245 break;
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 if (! found)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
249 return 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
250 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
251
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
252 return 1;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
253 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
254
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
255 /* 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
256 properties of PLIST, regardless of their values. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
257
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
258 static INLINE int
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
259 interval_has_some_properties (plist, i)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
260 Lisp_Object plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
261 INTERVAL i;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
262 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
263 register Lisp_Object tail1, tail2, sym;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
264
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
265 /* Go through each element of PLIST. */
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
266 for (tail1 = plist; CONSP (tail1); tail1 = Fcdr (XCDR (tail1)))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
267 {
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
268 sym = XCAR (tail1);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
269
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
270 /* Go through i's plist, looking for tail1 */
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
271 for (tail2 = i->plist; CONSP (tail2); tail2 = Fcdr (XCDR (tail2)))
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
272 if (EQ (sym, XCAR (tail2)))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
273 return 1;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
274 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
275
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
276 return 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
277 }
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
278
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
279 /* Return nonzero if the plist of interval I has any of the
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
280 property names in LIST, regardless of their values. */
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
281
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
282 static INLINE int
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
283 interval_has_some_properties_list (list, i)
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
284 Lisp_Object list;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
285 INTERVAL i;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
286 {
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
287 register Lisp_Object tail1, tail2, sym;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
288
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
289 /* Go through each element of LIST. */
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
290 for (tail1 = list; CONSP (tail1); tail1 = XCDR (tail1))
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
291 {
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
292 sym = Fcar (tail1);
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
293
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
294 /* Go through i's plist, looking for tail1 */
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
295 for (tail2 = i->plist; CONSP (tail2); tail2 = XCDR (XCDR (tail2)))
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
296 if (EQ (sym, XCAR (tail2)))
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
297 return 1;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
298 }
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
299
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
300 return 0;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
301 }
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
302
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
303 /* 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
304
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
305 /* 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
306 has none. */
8907
f7de8b4cb1b8 (validate_interval_range, property_value, Fget_char_property,
Karl Heuer <kwzh@gnu.org>
parents: 8856
diff changeset
307 static Lisp_Object
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
308 property_value (plist, prop)
8856
7e9547af43e8 (property_value): Declare args plist, prop.
Richard M. Stallman <rms@gnu.org>
parents: 8762
diff changeset
309 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
310 {
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
311 Lisp_Object value;
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
312
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
313 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
314 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
315 return XCAR (value);
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
316 else
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
317 plist = XCDR (value);
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
318
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
319 return Qunbound;
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
320 }
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
321
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
322 /* Set the properties of INTERVAL to PROPERTIES,
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
323 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
324 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
325
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
326 static void
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
327 set_properties (properties, interval, object)
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
328 Lisp_Object properties, object;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
329 INTERVAL interval;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
330 {
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
331 Lisp_Object sym, value;
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
332
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
333 if (BUFFERP (object))
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
334 {
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
335 /* 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
336 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
337 for (sym = interval->plist;
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
338 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
339 sym = XCDR (value))
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
340 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
341 XCAR (value)))
4076
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
342 {
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
343 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
344 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
345 object);
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
346 }
3960
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
347
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
348 /* 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
349 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
350 for (sym = properties;
7be89f84a882 * textprop.c (set_properties): Add undo records to remove entirely
Jim Blandy <jimb@redhat.com>
parents: 3858
diff changeset
351 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
352 sym = XCDR (value))
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25000
diff changeset
353 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
354 {
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
355 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
356 XCAR (sym), Qnil,
4076
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
357 object);
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
358 }
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
359 }
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
360
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
361 /* Store new properties. */
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
362 interval->plist = Fcopy_sequence (properties);
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
363 }
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
364
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
365 /* Add the properties of PLIST to the interval I, or set
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
366 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
367 if they are different.
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
368
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
369 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
370
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
371 Return nonzero if this changes I (i.e., if any members of PLIST
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
372 are actually added to I's plist) */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
373
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
374 static int
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
375 add_properties (plist, i, object)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
376 Lisp_Object plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
377 INTERVAL i;
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
378 Lisp_Object object;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
379 {
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
380 Lisp_Object tail1, tail2, sym1, val1;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
381 register int changed = 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
382 register int found;
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
383 struct gcpro gcpro1, gcpro2, gcpro3;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
384
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
385 tail1 = plist;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
386 sym1 = Qnil;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
387 val1 = Qnil;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
388 /* 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
389 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
390 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
391 GCPRO3 (tail1, sym1, val1);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
392
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
393 /* Go through each element of PLIST. */
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
394 for (tail1 = plist; CONSP (tail1); tail1 = Fcdr (XCDR (tail1)))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
395 {
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
396 sym1 = XCAR (tail1);
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
397 val1 = Fcar (XCDR (tail1));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
398 found = 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
399
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
400 /* Go through I's plist, looking for sym1 */
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
401 for (tail2 = i->plist; CONSP (tail2); tail2 = Fcdr (XCDR (tail2)))
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
402 if (EQ (sym1, XCAR (tail2)))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
403 {
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
404 /* No need to gcpro, because tail2 protects this
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
405 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
406 register Lisp_Object this_cdr;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
407
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
408 this_cdr = XCDR (tail2);
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
409 /* Found the property. Now check its value. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
410 found = 1;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
411
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
412 /* 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
413 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
414 if (EQ (val1, Fcar (this_cdr)))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
415 break;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
416
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
417 /* 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
418 if (BUFFERP (object))
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
419 {
4076
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
420 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
421 sym1, Fcar (this_cdr), object);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
422 }
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
423
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
424 /* I's property has a different value -- change it */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
425 Fsetcar (this_cdr, val1);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
426 changed++;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
427 break;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
428 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
429
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
430 if (! found)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
431 {
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
432 /* 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
433 if (BUFFERP (object))
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
434 {
4076
9fd5ecacfbbb (Qinsert_in_front_hooks, Qinsert_behind_hooks): New vars.
Richard M. Stallman <rms@gnu.org>
parents: 4007
diff changeset
435 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
436 sym1, Qnil, object);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
437 }
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
438 i->plist = Fcons (sym1, Fcons (val1, i->plist));
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
439 changed++;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
440 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
441 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
442
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
443 UNGCPRO;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
444
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
445 return changed;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
446 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
447
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
448 /* For any members of PLIST, or LIST,
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
449 which are properties of I, remove them from I's plist.
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
450 (If PLIST is non-nil, use that, otherwise use LIST.)
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
451 OBJECT is the string or buffer containing I. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
452
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
453 static int
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
454 remove_properties (plist, list, i, object)
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
455 Lisp_Object plist, list;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
456 INTERVAL i;
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
457 Lisp_Object object;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
458 {
6516
8278049ee7a7 (add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6064
diff changeset
459 register Lisp_Object tail1, tail2, sym, current_plist;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
460 register int changed = 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
461
44748
e137c1849517 (remove_properties): Fixed trap for malformed plist.
Kim F. Storm <storm@cua.dk>
parents: 44673
diff changeset
462 /* Nonzero means tail1 is a plist, otherwise it is a list. */
e137c1849517 (remove_properties): Fixed trap for malformed plist.
Kim F. Storm <storm@cua.dk>
parents: 44673
diff changeset
463 int use_plist;
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
464
6516
8278049ee7a7 (add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6064
diff changeset
465 current_plist = i->plist;
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
466
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
467 if (! NILP (plist))
44748
e137c1849517 (remove_properties): Fixed trap for malformed plist.
Kim F. Storm <storm@cua.dk>
parents: 44673
diff changeset
468 tail1 = plist, use_plist = 1;
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
469 else
44748
e137c1849517 (remove_properties): Fixed trap for malformed plist.
Kim F. Storm <storm@cua.dk>
parents: 44673
diff changeset
470 tail1 = list, use_plist = 0;
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
471
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
472 /* Go through each element of LIST or PLIST. */
44976
b8a7a7d6e18a (remove_properties): Don't use XCAR without CONSP.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44748
diff changeset
473 while (CONSP (tail1))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
474 {
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
475 sym = XCAR (tail1);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
476
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
477 /* First, remove the symbol if it's at the head of the list */
44976
b8a7a7d6e18a (remove_properties): Don't use XCAR without CONSP.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44748
diff changeset
478 while (CONSP (current_plist) && EQ (sym, XCAR (current_plist)))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
479 {
9109
6e44ddc40153 (validate_interval_range, add_properties, remove_properties,
Karl Heuer <kwzh@gnu.org>
parents: 9071
diff changeset
480 if (BUFFERP (object))
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
481 record_property_change (i->position, LENGTH (i),
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
482 sym, XCAR (XCDR (current_plist)),
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
483 object);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
484
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
485 current_plist = XCDR (XCDR (current_plist));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
486 changed++;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
487 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
488
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
489 /* Go through I's plist, looking for SYM. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
490 tail2 = current_plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
491 while (! NILP (tail2))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
492 {
6516
8278049ee7a7 (add_properties, remove_properties): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6064
diff changeset
493 register Lisp_Object this;
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
494 this = XCDR (XCDR (tail2));
44976
b8a7a7d6e18a (remove_properties): Don't use XCAR without CONSP.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44748
diff changeset
495 if (CONSP (this) && EQ (sym, XCAR (this)))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
496 {
9109
6e44ddc40153 (validate_interval_range, add_properties, remove_properties,
Karl Heuer <kwzh@gnu.org>
parents: 9071
diff changeset
497 if (BUFFERP (object))
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
498 record_property_change (i->position, LENGTH (i),
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
499 sym, XCAR (XCDR (this)), object);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
500
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
501 Fsetcdr (XCDR (tail2), XCDR (XCDR (this)));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
502 changed++;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
503 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
504 tail2 = this;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
505 }
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
506
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
507 /* Advance thru TAIL1 one way or the other. */
44748
e137c1849517 (remove_properties): Fixed trap for malformed plist.
Kim F. Storm <storm@cua.dk>
parents: 44673
diff changeset
508 tail1 = XCDR (tail1);
e137c1849517 (remove_properties): Fixed trap for malformed plist.
Kim F. Storm <storm@cua.dk>
parents: 44673
diff changeset
509 if (use_plist && CONSP (tail1))
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
510 tail1 = XCDR (tail1);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
511 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
512
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
513 if (changed)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
514 i->plist = current_plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
515 return changed;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
516 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
517
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
518 #if 0
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
519 /* 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
520 if this changes the interval. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
521
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
522 static INLINE int
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
523 erase_properties (i)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
524 INTERVAL i;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
525 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
526 if (NILP (i->plist))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
527 return 0;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
528
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
529 i->plist = Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
530 return 1;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
531 }
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
532 #endif
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
533
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
534 /* Returns the interval of POSITION in OBJECT.
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
535 POSITION is BEG-based. */
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
536
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
537 INTERVAL
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
538 interval_of (position, object)
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
539 int position;
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
540 Lisp_Object object;
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
541 {
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
542 register INTERVAL i;
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
543 int beg, end;
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
544
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
545 if (NILP (object))
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
546 XSETBUFFER (object, current_buffer);
20955
0e9aa345d2f9 (interval_of): Handle Qt.
Karl Heuer <kwzh@gnu.org>
parents: 20522
diff changeset
547 else if (EQ (object, Qt))
0e9aa345d2f9 (interval_of): Handle Qt.
Karl Heuer <kwzh@gnu.org>
parents: 20522
diff changeset
548 return NULL_INTERVAL;
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
549
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
550 CHECK_STRING_OR_BUFFER (object);
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
551
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
552 if (BUFFERP (object))
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
553 {
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
554 register struct buffer *b = XBUFFER (object);
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
555
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
556 beg = BUF_BEGV (b);
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
557 end = BUF_ZV (b);
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
558 i = BUF_INTERVALS (b);
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
559 }
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
560 else
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
561 {
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
562 beg = 0;
46448
218b99308569 (validate_interval_range, interval_of): Use string macros instead of
Ken Raeburn <raeburn@raeburn.org>
parents: 46381
diff changeset
563 end = SCHARS (object);
218b99308569 (validate_interval_range, interval_of): Use string macros instead of
Ken Raeburn <raeburn@raeburn.org>
parents: 46381
diff changeset
564 i = STRING_INTERVALS (object);
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
565 }
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
566
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
567 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
568 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
569 if (beg == end || NULL_INTERVAL_P (i))
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
570 return NULL_INTERVAL;
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
571
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
572 return find_interval (i, position);
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
573 }
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
574
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
575 DEFUN ("text-properties-at", Ftext_properties_at,
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
576 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
577 doc: /* Return the list of properties of the character at POSITION in OBJECT.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
578 If the optional second argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
579 the current buffer), POSITION is a buffer position (integer or marker).
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
580 If OBJECT is a string, POSITION is a 0-based index into it.
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
581 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
582 (position, object)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
583 Lisp_Object position, object;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
584 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
585 register INTERVAL i;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
586
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
587 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
588 XSETBUFFER (object, current_buffer);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
589
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
590 i = validate_interval_range (object, &position, &position, soft);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
591 if (NULL_INTERVAL_P (i))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
592 return Qnil;
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
593 /* 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
594 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
595 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
596 since no character follows. */
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
597 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
598 return Qnil;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
599
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
600 return i->plist;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
601 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
602
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
603 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
604 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
605 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
606 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
607 (position, prop, object)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
608 Lisp_Object position, object;
8271
e8556db1b7f3 (Fget_text_property): Simplify using Ftext_properties_at.
Richard M. Stallman <rms@gnu.org>
parents: 7773
diff changeset
609 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
610 {
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
611 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
612 }
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
613
48840
b6981c46191d (text_read_only): New arg `propval'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46448
diff changeset
614 /* Return the value of char's property PROP, in OBJECT at POSITION.
32849
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
615 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
616 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
617 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
618 returned in *OVERLAY.
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
619 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
620 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
621 text properties.
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
622 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
623 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
624 with OBJECT. */
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
625 Lisp_Object
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
626 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
627 Lisp_Object position, object;
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
628 register Lisp_Object prop;
32849
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
629 Lisp_Object *overlay;
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
630 {
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
631 struct window *w = 0;
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
632
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
633 CHECK_NUMBER_COERCE_MARKER (position);
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
634
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
635 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
636 XSETBUFFER (object, current_buffer);
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
637
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
638 if (WINDOWP (object))
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
639 {
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
640 w = XWINDOW (object);
8907
f7de8b4cb1b8 (validate_interval_range, property_value, Fget_char_property,
Karl Heuer <kwzh@gnu.org>
parents: 8856
diff changeset
641 object = w->buffer;
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
642 }
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
643 if (BUFFERP (object))
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 int noverlays;
55652
2e649bd1c696 (get_char_property_and_overlay): Use GET_OVERLAYS_AT.
Kim F. Storm <storm@cua.dk>
parents: 53201
diff changeset
646 Lisp_Object *overlay_vec;
12641
aadec66110fd (Fget_char_property): If OBJECT is non-current buffer,
Richard M. Stallman <rms@gnu.org>
parents: 11131
diff changeset
647 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
648
87488
f53d1d3c813f (get_char_property_and_overlay):
Richard M. Stallman <rms@gnu.org>
parents: 85973
diff changeset
649 if (XINT (position) < BUF_BEGV (XBUFFER (object))
f53d1d3c813f (get_char_property_and_overlay):
Richard M. Stallman <rms@gnu.org>
parents: 85973
diff changeset
650 || XINT (position) > BUF_ZV (XBUFFER (object)))
f53d1d3c813f (get_char_property_and_overlay):
Richard M. Stallman <rms@gnu.org>
parents: 85973
diff changeset
651 xsignal1 (Qargs_out_of_range, position);
f53d1d3c813f (get_char_property_and_overlay):
Richard M. Stallman <rms@gnu.org>
parents: 85973
diff changeset
652
12641
aadec66110fd (Fget_char_property): If OBJECT is non-current buffer,
Richard M. Stallman <rms@gnu.org>
parents: 11131
diff changeset
653 set_buffer_temp (XBUFFER (object));
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
654
55652
2e649bd1c696 (get_char_property_and_overlay): Use GET_OVERLAYS_AT.
Kim F. Storm <storm@cua.dk>
parents: 53201
diff changeset
655 GET_OVERLAYS_AT (XINT (position), overlay_vec, noverlays, NULL, 0);
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
656 noverlays = sort_overlays (overlay_vec, noverlays, w);
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
657
12641
aadec66110fd (Fget_char_property): If OBJECT is non-current buffer,
Richard M. Stallman <rms@gnu.org>
parents: 11131
diff changeset
658 set_buffer_temp (obuf);
aadec66110fd (Fget_char_property): If OBJECT is non-current buffer,
Richard M. Stallman <rms@gnu.org>
parents: 11131
diff changeset
659
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
660 /* Now check the overlays in order of decreasing priority. */
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
661 while (--noverlays >= 0)
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
662 {
55652
2e649bd1c696 (get_char_property_and_overlay): Use GET_OVERLAYS_AT.
Kim F. Storm <storm@cua.dk>
parents: 53201
diff changeset
663 Lisp_Object tem = Foverlay_get (overlay_vec[noverlays], prop);
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
664 if (!NILP (tem))
32849
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
665 {
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
666 if (overlay)
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
667 /* 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
668 *overlay = overlay_vec[noverlays];
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
669 return tem;
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
670 }
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
671 }
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
672 }
32849
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
673
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
674 if (overlay)
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
675 /* 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
676 *overlay = Qnil;
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
677
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
678 /* 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
679 simpler case. */
32849
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
680 return Fget_text_property (position, prop, object);
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
681 }
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
682
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
683 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
684 doc: /* Return the value of POSITION's property PROP, in OBJECT.
40647
e673a8c97e47 (Fget_char_property): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 40123
diff changeset
685 Both overlay properties and text properties are checked.
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
686 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
687 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
688 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
689 text properties.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
690 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
691 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
692 (position, prop, object)
32849
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
693 Lisp_Object position, object;
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
694 register Lisp_Object prop;
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
695 {
e1dec7e5a57c (get_char_property_and_overlay): New function.
Miles Bader <miles@gnu.org>
parents: 30699
diff changeset
696 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
697 }
53201
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
698
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
699 DEFUN ("get-char-property-and-overlay", Fget_char_property_and_overlay,
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
700 Sget_char_property_and_overlay, 2, 3, 0,
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
701 doc: /* Like `get-char-property', but with extra overlay information.
71575
37f7b9440897 (Fget_char_property_and_overlay): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 71499
diff changeset
702 The value is a cons cell. Its car is the return value of `get-char-property'
37f7b9440897 (Fget_char_property_and_overlay): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 71499
diff changeset
703 with the same arguments--that is, the value of POSITION's property
37f7b9440897 (Fget_char_property_and_overlay): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 71499
diff changeset
704 PROP in OBJECT. Its cdr is the overlay in which the property was
53201
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
705 found, or nil, if it was found as a text property or not found at all.
71575
37f7b9440897 (Fget_char_property_and_overlay): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 71499
diff changeset
706
53201
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
707 OBJECT is optional and defaults to the current buffer. OBJECT may be
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
708 a string, a buffer or a window. For strings, the cdr of the return
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
709 value is always nil, since strings do not have overlays. If OBJECT is
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
710 a window, then that window's buffer is used, but window-specific
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
711 overlays are considered only if they are associated with OBJECT. If
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
712 POSITION is at the end of OBJECT, both car and cdr are nil. */)
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
713 (position, prop, object)
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
714 Lisp_Object position, object;
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
715 register Lisp_Object prop;
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
716 {
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
717 Lisp_Object overlay;
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
718 Lisp_Object val
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
719 = get_char_property_and_overlay (position, prop, object, &overlay);
79334
242947301003 Whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 78501
diff changeset
720 return Fcons (val, overlay);
53201
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
721 }
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
722
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
723
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
724 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
725 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
726 doc: /* Return the position of next text property or overlay change.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
727 This scans characters forward in the current buffer from POSITION till
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
728 it finds a change in some text property, or the beginning or end of an
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
729 overlay, and returns the position of that.
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
730 If none is found up to (point-max), the function returns (point-max).
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
731
64576
7a1c6e86c825 (Fnext_char_property_change, Fprevious_char_property_change): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 64084
diff changeset
732 If the optional second argument LIMIT is non-nil, don't search
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
733 past position LIMIT; return LIMIT if nothing is found before LIMIT.
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
734 LIMIT is a no-op if it is greater than (point-max). */)
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
735 (position, limit)
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
736 Lisp_Object position, limit;
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
737 {
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
738 Lisp_Object temp;
6063
233fffcfb6c8 (Fget_char_property): New function.
Karl Heuer <kwzh@gnu.org>
parents: 5646
diff changeset
739
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
740 temp = Fnext_overlay_change (position);
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
741 if (! NILP (limit))
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
742 {
60815
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
743 CHECK_NUMBER_COERCE_MARKER (limit);
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
744 if (XINT (limit) < XINT (temp))
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
745 temp = limit;
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
746 }
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
747 return Fnext_property_change (position, Qnil, temp);
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
748 }
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
749
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
750 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
751 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
752 doc: /* Return the position of previous text property or overlay change.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
753 Scans characters backward in the current buffer from POSITION till it
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
754 finds a change in some text property, or the beginning or end of an
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
755 overlay, and returns the position of that.
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
756 If none is found since (point-min), the function returns (point-min).
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
757
64576
7a1c6e86c825 (Fnext_char_property_change, Fprevious_char_property_change): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 64084
diff changeset
758 If the optional second argument LIMIT is non-nil, don't search
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
759 past position LIMIT; return LIMIT if nothing is found before LIMIT.
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
760 LIMIT is a no-op if it is less than (point-min). */)
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
761 (position, limit)
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
762 Lisp_Object position, limit;
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
763 {
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
764 Lisp_Object temp;
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
765
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
766 temp = Fprevious_overlay_change (position);
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
767 if (! NILP (limit))
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
768 {
60815
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
769 CHECK_NUMBER_COERCE_MARKER (limit);
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
770 if (XINT (limit) > XINT (temp))
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
771 temp = limit;
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
772 }
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
773 return Fprevious_property_change (position, Qnil, temp);
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
774 }
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
775
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
776
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
777 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
778 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
779 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
780 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
781 a change in the PROP property, then returns the position of the change.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
782 If the optional third argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
783 the current buffer), POSITION is a buffer position (integer or marker).
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
784 If OBJECT is a string, POSITION is a 0-based index into it.
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
785
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
786 In a string, scan runs to the end of the string.
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
787 In a buffer, it runs to (point-max), and the value cannot exceed that.
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
788
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
789 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
790 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
791 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
792 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
793 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
794 (position, prop, object, limit)
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
795 Lisp_Object prop, position, object, limit;
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
796 {
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
797 if (STRINGP (object))
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
798 {
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
799 position = Fnext_single_property_change (position, prop, object, limit);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
800 if (NILP (position))
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
801 {
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
802 if (NILP (limit))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
803 position = make_number (SCHARS (object));
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
804 else
60815
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
805 {
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
806 CHECK_NUMBER (limit);
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
807 position = limit;
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
808 }
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
809 }
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
810 }
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
811 else
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
812 {
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
813 Lisp_Object initial_value, value;
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45680
diff changeset
814 int count = SPECPDL_INDEX ();
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
815
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
816 if (! NILP (object))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
817 CHECK_BUFFER (object);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
818
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
819 if (BUFFERP (object) && current_buffer != XBUFFER (object))
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
820 {
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
821 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
822 Fset_buffer (object);
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
823 }
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
824
60815
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
825 CHECK_NUMBER_COERCE_MARKER (position);
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
826
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
827 initial_value = Fget_char_property (position, prop, object);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
828
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
829 if (NILP (limit))
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
830 XSETFASTINT (limit, ZV);
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
831 else
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
832 CHECK_NUMBER_COERCE_MARKER (limit);
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
833
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
834 if (XFASTINT (position) >= XFASTINT (limit))
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
835 {
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
836 position = limit;
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
837 if (XFASTINT (position) > ZV)
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
838 XSETFASTINT (position, ZV);
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
839 }
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
840 else
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
841 while (1)
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
842 {
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
843 position = Fnext_char_property_change (position, limit);
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
844 if (XFASTINT (position) >= XFASTINT (limit))
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
845 {
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
846 position = limit;
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
847 break;
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
848 }
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
849
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
850 value = Fget_char_property (position, prop, object);
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
851 if (!EQ (value, initial_value))
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
852 break;
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
853 }
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
854
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
855 unbind_to (count, Qnil);
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
856 }
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
857
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
858 return position;
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
859 }
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
860
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
861 DEFUN ("previous-single-char-property-change",
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
862 Fprevious_single_char_property_change,
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
863 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
864 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
865 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
866 a change in the PROP property, then returns the position of the change.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
867 If the optional third argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
868 the current buffer), POSITION is a buffer position (integer or marker).
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
869 If OBJECT is a string, POSITION is a 0-based index into it.
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
870
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
871 In a string, scan runs to the start of the string.
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
872 In a buffer, it runs to (point-min), and the value cannot be less than that.
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
873
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
874 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
875 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
876 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
877 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
878 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
879 (position, prop, object, limit)
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
880 Lisp_Object prop, position, object, limit;
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
881 {
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
882 if (STRINGP (object))
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
883 {
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
884 position = Fprevious_single_property_change (position, prop, object, limit);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
885 if (NILP (position))
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
886 {
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
887 if (NILP (limit))
99343
00ce595f8afc (Fprevious_single_char_property_change): Return 0
Martin Rudalics <rudalics@gmx.at>
parents: 95453
diff changeset
888 position = make_number (0);
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
889 else
60815
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
890 {
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
891 CHECK_NUMBER (limit);
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
892 position = limit;
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
893 }
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
894 }
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
895 }
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
896 else
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
897 {
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45680
diff changeset
898 int count = SPECPDL_INDEX ();
25819
c2163b0bac24 (next_single_char_property_change): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25772
diff changeset
899
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
900 if (! NILP (object))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
901 CHECK_BUFFER (object);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
902
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
903 if (BUFFERP (object) && current_buffer != XBUFFER (object))
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
904 {
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
905 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
906 Fset_buffer (object);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
907 }
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
908
60815
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
909 CHECK_NUMBER_COERCE_MARKER (position);
21c196c81d60 (Fnext_char_property_change)
David Kastrup <dak@gnu.org>
parents: 57477
diff changeset
910
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
911 if (NILP (limit))
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
912 XSETFASTINT (limit, BEGV);
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
913 else
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
914 CHECK_NUMBER_COERCE_MARKER (limit);
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
915
30379
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
916 if (XFASTINT (position) <= XFASTINT (limit))
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
917 {
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
918 position = limit;
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
919 if (XFASTINT (position) < BEGV)
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
920 XSETFASTINT (position, BEGV);
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
921 }
30379
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
922 else
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
923 {
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
924 Lisp_Object initial_value
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
925 = Fget_char_property (make_number (XFASTINT (position) - 1),
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
926 prop, object);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
927
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
928 while (1)
30379
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
929 {
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
930 position = Fprevious_char_property_change (position, limit);
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
931
30379
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
932 if (XFASTINT (position) <= XFASTINT (limit))
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
933 {
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
934 position = limit;
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
935 break;
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
936 }
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
937 else
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
938 {
70656
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
939 Lisp_Object value
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
940 = Fget_char_property (make_number (XFASTINT (position) - 1),
182680a57573 (Fnext_single_char_property_change)
Richard M. Stallman <rms@gnu.org>
parents: 70129
diff changeset
941 prop, object);
30379
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
942
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
943 if (!EQ (value, initial_value))
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
944 break;
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
945 }
836d2e058c70 (Fprevious_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 30242
diff changeset
946 }
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
947 }
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
948
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
949 unbind_to (count, Qnil);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
950 }
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
951
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
952 return position;
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
953 }
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
954
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
955 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
956 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
957 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
958 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
959 a change in some text property, then returns the position of the change.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
960 If the optional second argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
961 the current buffer), POSITION is a buffer position (integer or marker).
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
962 If OBJECT is a string, POSITION is a 0-based index into it.
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
963 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
964 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
965
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
966 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
967 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
968 (position, object, limit)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
969 Lisp_Object position, object, limit;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
970 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
971 register INTERVAL i, next;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
972
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
973 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
974 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
975
42967
51ac72369873 (Fnext_property_change, Fnext_single_property_change)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41589
diff changeset
976 if (!NILP (limit) && !EQ (limit, Qt))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
977 CHECK_NUMBER_COERCE_MARKER (limit);
7092
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
978
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
979 i = validate_interval_range (object, &position, &position, soft);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
980
10962
7f0bc7bcf1f3 (Fnext_property_change): Handle LIMIT = t.
Richard M. Stallman <rms@gnu.org>
parents: 10925
diff changeset
981 /* 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
982 bother checking further intervals. */
7f0bc7bcf1f3 (Fnext_property_change): Handle LIMIT = t.
Richard M. Stallman <rms@gnu.org>
parents: 10925
diff changeset
983 if (EQ (limit, Qt))
7f0bc7bcf1f3 (Fnext_property_change): Handle LIMIT = t.
Richard M. Stallman <rms@gnu.org>
parents: 10925
diff changeset
984 {
13265
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
985 if (NULL_INTERVAL_P (i))
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
986 next = i;
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
987 else
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
988 next = next_interval (i);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
989
11116
73b51ad289e3 (Fnext_property_change): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 10962
diff changeset
990 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
991 XSETFASTINT (position, (STRINGP (object)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
992 ? SCHARS (object)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
993 : BUF_ZV (XBUFFER (object))));
11116
73b51ad289e3 (Fnext_property_change): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 10962
diff changeset
994 else
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
995 XSETFASTINT (position, next->position);
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
996 return position;
10962
7f0bc7bcf1f3 (Fnext_property_change): Handle LIMIT = t.
Richard M. Stallman <rms@gnu.org>
parents: 10925
diff changeset
997 }
7f0bc7bcf1f3 (Fnext_property_change): Handle LIMIT = t.
Richard M. Stallman <rms@gnu.org>
parents: 10925
diff changeset
998
13265
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
999 if (NULL_INTERVAL_P (i))
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
1000 return limit;
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
1001
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
1002 next = next_interval (i);
dbc038e66ea6 (Fnext_single_property_change): Rearrange handling of
Richard M. Stallman <rms@gnu.org>
parents: 13027
diff changeset
1003
42967
51ac72369873 (Fnext_property_change, Fnext_single_property_change)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41589
diff changeset
1004 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
1005 && (NILP (limit) || next->position < XFASTINT (limit)))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1006 next = next_interval (next);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1007
72834
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1008 if (NULL_INTERVAL_P (next)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1009 || (next->position
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1010 >= (INTEGERP (limit)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1011 ? XFASTINT (limit)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1012 : (STRINGP (object)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1013 ? SCHARS (object)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1014 : BUF_ZV (XBUFFER (object))))))
5086
6e9634463e93 (Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents: 5020
diff changeset
1015 return limit;
72834
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1016 else
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1017 return make_number (next->position);
4381
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1018 }
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1019
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1020 /* 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
1021
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1022 int
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1023 property_change_between_p (beg, end)
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1024 int beg, end;
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1025 {
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1026 register INTERVAL i, next;
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1027 Lisp_Object object, pos;
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1028
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1029 XSETBUFFER (object, current_buffer);
9321
e6759002383c (Fnext_property_change, property_change_between_p,
Karl Heuer <kwzh@gnu.org>
parents: 9280
diff changeset
1030 XSETFASTINT (pos, beg);
4381
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1031
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1032 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
1033 if (NULL_INTERVAL_P (i))
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1034 return 0;
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1035
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1036 next = next_interval (i);
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1037 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
1038 {
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1039 next = next_interval (next);
4614
2c5557903994 (property_change_between_p): Test NULL_INTERVAL_P
Richard M. Stallman <rms@gnu.org>
parents: 4381
diff changeset
1040 if (NULL_INTERVAL_P (next))
2c5557903994 (property_change_between_p): Test NULL_INTERVAL_P
Richard M. Stallman <rms@gnu.org>
parents: 4381
diff changeset
1041 return 0;
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1042 if (next->position >= end)
4381
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1043 return 0;
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1044 }
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1045
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1046 if (NULL_INTERVAL_P (next))
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1047 return 0;
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1048
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
1049 return 1;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1050 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1051
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1052 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
1053 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
1054 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
1055 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
1056 a change in the PROP property, then returns the position of the change.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1057 If the optional third argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1058 the current buffer), POSITION is a buffer position (integer or marker).
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1059 If OBJECT is a string, POSITION is a 0-based index into it.
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1060 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
1061 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
1062 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
1063
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1064 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
1065 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
1066 (position, prop, object, limit)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1067 Lisp_Object position, prop, object, limit;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1068 {
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1069 register INTERVAL i, next;
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1070 register Lisp_Object here_val;
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1071
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1072 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1073 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
1074
7092
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
1075 if (!NILP (limit))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
1076 CHECK_NUMBER_COERCE_MARKER (limit);
7092
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
1077
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1078 i = validate_interval_range (object, &position, &position, soft);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1079 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
1080 return limit;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1081
2762
dd28ed1e1928 * textprop.c (Fnext_single_property_change,
Jim Blandy <jimb@redhat.com>
parents: 2124
diff changeset
1082 here_val = textget (i->plist, prop);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1083 next = next_interval (i);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1084 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
1085 && 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
1086 && (NILP (limit) || next->position < XFASTINT (limit)))
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1087 next = next_interval (next);
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1088
72834
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1089 if (NULL_INTERVAL_P (next)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1090 || (next->position
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1091 >= (INTEGERP (limit)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1092 ? XFASTINT (limit)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1093 : (STRINGP (object)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1094 ? SCHARS (object)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1095 : BUF_ZV (XBUFFER (object))))))
5086
6e9634463e93 (Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents: 5020
diff changeset
1096 return limit;
72834
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1097 else
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1098 return make_number (next->position);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1099 }
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1100
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1101 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
1102 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
1103 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
1104 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
1105 a change in some text property, then returns the position of the change.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1106 If the optional second argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1107 the current buffer), POSITION is a buffer position (integer or marker).
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1108 If OBJECT is a string, POSITION is a 0-based index into it.
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1109 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
1110 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
1111
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1112 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
1113 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
1114 (position, object, limit)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1115 Lisp_Object position, object, limit;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1116 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1117 register INTERVAL i, previous;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1118
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1119 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1120 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
1121
7092
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
1122 if (!NILP (limit))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
1123 CHECK_NUMBER_COERCE_MARKER (limit);
7092
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
1124
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1125 i = validate_interval_range (object, &position, &position, soft);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1126 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
1127 return limit;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1128
5644
2abe67658895 (Fprevious_property_change): Move back at least 1 char.
Richard M. Stallman <rms@gnu.org>
parents: 5114
diff changeset
1129 /* 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
1130 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
1131 i = previous_interval (i);
2abe67658895 (Fprevious_property_change): Move back at least 1 char.
Richard M. Stallman <rms@gnu.org>
parents: 5114
diff changeset
1132
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1133 previous = previous_interval (i);
42967
51ac72369873 (Fnext_property_change, Fnext_single_property_change)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41589
diff changeset
1134 while (!NULL_INTERVAL_P (previous) && intervals_equal (previous, i)
5086
6e9634463e93 (Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents: 5020
diff changeset
1135 && (NILP (limit)
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1136 || (previous->position + LENGTH (previous) > XFASTINT (limit))))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1137 previous = previous_interval (previous);
72834
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1138
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1139 if (NULL_INTERVAL_P (previous)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1140 || (previous->position + LENGTH (previous)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1141 <= (INTEGERP (limit)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1142 ? XFASTINT (limit)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1143 : (STRINGP (object) ? 0 : BUF_BEGV (XBUFFER (object))))))
5086
6e9634463e93 (Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents: 5020
diff changeset
1144 return limit;
72834
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1145 else
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1146 return make_number (previous->position + LENGTH (previous));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1147 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1148
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1149 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
1150 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
1151 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
1152 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
1153 a change in the PROP property, then returns the position of the change.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1154 If the optional third argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1155 the current buffer), POSITION is a buffer position (integer or marker).
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1156 If OBJECT is a string, POSITION is a 0-based index into it.
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1157 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
1158 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
1159 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
1160
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1161 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
1162 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
1163 (position, prop, object, limit)
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1164 Lisp_Object position, prop, object, limit;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1165 {
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1166 register INTERVAL i, previous;
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1167 register Lisp_Object here_val;
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1168
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1169 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1170 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
1171
7092
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
1172 if (!NILP (limit))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
1173 CHECK_NUMBER_COERCE_MARKER (limit);
7092
b6b93953cc83 (F*_property_change): Typecheck limit argument.
Karl Heuer <kwzh@gnu.org>
parents: 6755
diff changeset
1174
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1175 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
1176
2226c7efb3da (Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents: 7582
diff changeset
1177 /* Start with the interval containing the char before point. */
42967
51ac72369873 (Fnext_property_change, Fnext_single_property_change)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41589
diff changeset
1178 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
1179 i = previous_interval (i);
2226c7efb3da (Fprevious_single_property_change): Check for null interval after correcting
Karl Heuer <kwzh@gnu.org>
parents: 7582
diff changeset
1180
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1181 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
1182 return limit;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1183
2762
dd28ed1e1928 * textprop.c (Fnext_single_property_change,
Jim Blandy <jimb@redhat.com>
parents: 2124
diff changeset
1184 here_val = textget (i->plist, prop);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1185 previous = previous_interval (i);
42967
51ac72369873 (Fnext_property_change, Fnext_single_property_change)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41589
diff changeset
1186 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
1187 && 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
1188 && (NILP (limit)
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1189 || (previous->position + LENGTH (previous) > XFASTINT (limit))))
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1190 previous = previous_interval (previous);
72834
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1191
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1192 if (NULL_INTERVAL_P (previous)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1193 || (previous->position + LENGTH (previous)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1194 <= (INTEGERP (limit)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1195 ? XFASTINT (limit)
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1196 : (STRINGP (object) ? 0 : BUF_BEGV (XBUFFER (object))))))
5086
6e9634463e93 (Ftext_property_not_all): Swap t and nil values in
Richard M. Stallman <rms@gnu.org>
parents: 5020
diff changeset
1197 return limit;
72834
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1198 else
84ff2640fb2a * textprop.c (Fnext_property_change, Fnext_single_property_change)
Chong Yidong <cyd@stupidchicken.com>
parents: 72592
diff changeset
1199 return make_number (previous->position + LENGTH (previous));
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1200 }
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
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
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1204 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
1205 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
1206 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
1207 The third argument PROPERTIES is a property list
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1208 specifying the property values to add. If the optional fourth argument
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1209 OBJECT is a buffer (or nil, which means the current buffer),
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1210 START and END are buffer positions (integers or markers).
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1211 If OBJECT is a string, START and END are 0-based indices into it.
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1212 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
1213 (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
1214 Lisp_Object start, end, properties, object;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1215 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1216 register INTERVAL i, unchanged;
2124
54179ef9ce35 * textprop.c (Fadd_text_properties): Initialize the modified flag.
Jim Blandy <jimb@redhat.com>
parents: 2058
diff changeset
1217 register int s, len, modified = 0;
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1218 struct gcpro gcpro1;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1219
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1220 properties = validate_plist (properties);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1221 if (NILP (properties))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1222 return Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1223
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1224 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1225 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
1226
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1227 i = validate_interval_range (object, &start, &end, hard);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1228 if (NULL_INTERVAL_P (i))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1229 return Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1230
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1231 s = XINT (start);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1232 len = XINT (end) - s;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1233
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1234 /* 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
1235 and live buffers are always protected. */
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1236 GCPRO1 (properties);
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1237
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1238 /* 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
1239 split this interval. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1240 if (i->position != s)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1241 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1242 /* 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
1243 skip it. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1244 if (interval_has_all_properties (properties, i))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1245 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1246 int got = (LENGTH (i) - (s - i->position));
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1247 if (got >= len)
14538
a17752d2b0c0 (Fadd_text_properties): Don't return without ungcpro.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1248 RETURN_UNGCPRO (Qnil);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1249 len -= got;
3858
e07d474bdba9 (Fremove_text_properties, Fadd_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 3698
diff changeset
1250 i = next_interval (i);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1251 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1252 else
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1253 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1254 unchanged = i;
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1255 i = split_interval_right (unchanged, s - unchanged->position);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1256 copy_properties (unchanged, i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1257 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1258 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1259
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1260 if (BUFFERP (object))
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 72005
diff changeset
1261 modify_region (XBUFFER (object), XINT (start), XINT (end), 1);
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1262
3553
5f9688c0b704 (Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents: 2783
diff changeset
1263 /* 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
1264 for (;;)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1265 {
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1266 if (i == 0)
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1267 abort ();
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1268
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1269 if (LENGTH (i) >= len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1270 {
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1271 /* 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
1272 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
1273 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
1274 UNGCPRO;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1275
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1276 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
1277 {
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1278 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1279 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
1280 XINT (end) - XINT (start));
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1281
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1282 return modified ? Qt : Qnil;
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1283 }
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1284
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1285 if (LENGTH (i) == len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1286 {
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1287 add_properties (properties, i, object);
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1288 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1289 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
1290 XINT (end) - XINT (start));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1291 return Qt;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1292 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1293
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1294 /* i doesn't have the properties, and goes past the change limit */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1295 unchanged = i;
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1296 i = split_interval_left (unchanged, len);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1297 copy_properties (unchanged, i);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1298 add_properties (properties, i, object);
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1299 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1300 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
1301 XINT (end) - XINT (start));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1302 return Qt;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1303 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1304
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1305 len -= LENGTH (i);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1306 modified += add_properties (properties, i, object);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1307 i = next_interval (i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1308 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1309 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1310
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1311 /* 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
1312
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1313 DEFUN ("put-text-property", Fput_text_property,
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1314 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
1315 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
1316 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
1317 specify the property to add.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1318 If the optional fifth argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1319 the current buffer), START and END are buffer positions (integers or
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1320 markers). If OBJECT is a string, START and END are 0-based indices into it. */)
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1321 (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
1322 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
1323 {
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1324 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
1325 Fcons (property, Fcons (value, Qnil)),
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1326 object);
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1327 return Qnil;
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1328 }
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1329
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1330 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
1331 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
1332 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
1333 The third argument PROPERTIES is the new property list.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1334 If the optional fourth argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1335 the current buffer), START and END are buffer positions (integers or
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1336 markers). If OBJECT is a string, START and END are 0-based indices into it.
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1337 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
1338 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
1339 (start, end, properties, object)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1340 Lisp_Object start, end, properties, object;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1341 {
26605
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1342 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
1343 }
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1344
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1345
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1346 /* 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
1347 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
1348 the text. OBJECT nil means use the current buffer.
106904
943a92f3710b Fix spurious before-change-functions invocation from (insert ?\n).
Alan Mackenzie <acm@muc.de>
parents: 105877
diff changeset
1349 COHERENT_CHANGE_P nil means this is being called as an internal
943a92f3710b Fix spurious before-change-functions invocation from (insert ?\n).
Alan Mackenzie <acm@muc.de>
parents: 105877
diff changeset
1350 subroutine, rather than as a change primitive with checking of
943a92f3710b Fix spurious before-change-functions invocation from (insert ?\n).
Alan Mackenzie <acm@muc.de>
parents: 105877
diff changeset
1351 read-only, invoking change hooks, etc.. Value is nil if the
943a92f3710b Fix spurious before-change-functions invocation from (insert ?\n).
Alan Mackenzie <acm@muc.de>
parents: 105877
diff changeset
1352 function _detected_ that it did not replace any properties, non-nil
943a92f3710b Fix spurious before-change-functions invocation from (insert ?\n).
Alan Mackenzie <acm@muc.de>
parents: 105877
diff changeset
1353 otherwise. */
26605
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1354
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1355 Lisp_Object
106904
943a92f3710b Fix spurious before-change-functions invocation from (insert ?\n).
Alan Mackenzie <acm@muc.de>
parents: 105877
diff changeset
1356 set_text_properties (start, end, properties, object, coherent_change_p)
943a92f3710b Fix spurious before-change-functions invocation from (insert ?\n).
Alan Mackenzie <acm@muc.de>
parents: 105877
diff changeset
1357 Lisp_Object start, end, properties, object, coherent_change_p;
26605
46168cb41ba0 (set_text_properties): New function. Like
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
1358 {
41391
44d3d642d0c4 (Fset_text_properties): Remove unused variables `unchanged',
Pavel Janík <Pavel@Janik.cz>
parents: 40921
diff changeset
1359 register INTERVAL i;
9071
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1360 Lisp_Object ostart, oend;
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1361
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1362 ostart = start;
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1363 oend = end;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1364
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1365 properties = validate_plist (properties);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1366
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1367 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1368 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
1369
9541
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1370 /* 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
1371 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
1372 if (NILP (properties) && STRINGP (object)
9541
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1373 && XFASTINT (start) == 0
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1374 && XFASTINT (end) == SCHARS (object))
9541
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1375 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1376 if (! STRING_INTERVALS (object))
67947
7538cafcf9f7 (set_text_properties): Reword description of return value.
Luc Teirlinck <teirllm@auburn.edu>
parents: 64770
diff changeset
1377 return Qnil;
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1378
46381
ab2bd718aad6 * textprop.c (set_text_properties): Use STRING_SET_INTERVALS.
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
1379 STRING_SET_INTERVALS (object, NULL_INTERVAL);
9541
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1380 return Qt;
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1381 }
449e024f13be (Fset_text_properties): Special case for getting
Richard M. Stallman <rms@gnu.org>
parents: 9331
diff changeset
1382
8686
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1383 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
1384
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1385 if (NULL_INTERVAL_P (i))
8686
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1386 {
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1387 /* 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
1388 if (NILP (properties))
8686
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1389 return Qnil;
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1390
9071
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1391 /* Restore the original START and END values
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1392 because validate_interval_range increments them for strings. */
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1393 start = ostart;
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1394 end = oend;
2d4d0f6e7be0 (syms_of_textprop): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8962
diff changeset
1395
8686
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1396 i = validate_interval_range (object, &start, &end, hard);
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1397 /* This can return if start == end. */
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1398 if (NULL_INTERVAL_P (i))
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1399 return Qnil;
c468db944aa2 (Fset_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 8271
diff changeset
1400 }
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1401
106904
943a92f3710b Fix spurious before-change-functions invocation from (insert ?\n).
Alan Mackenzie <acm@muc.de>
parents: 105877
diff changeset
1402 if (BUFFERP (object) && !NILP (coherent_change_p))
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 72005
diff changeset
1403 modify_region (XBUFFER (object), XINT (start), XINT (end), 1);
40921
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1404
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1405 set_text_properties_1 (start, end, properties, object, i);
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1406
106904
943a92f3710b Fix spurious before-change-functions invocation from (insert ?\n).
Alan Mackenzie <acm@muc.de>
parents: 105877
diff changeset
1407 if (BUFFERP (object) && !NILP (coherent_change_p))
40921
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1408 signal_after_change (XINT (start), XINT (end) - XINT (start),
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1409 XINT (end) - XINT (start));
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1410 return Qt;
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1411 }
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1412
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1413 /* Replace properties of text from START to END with new list of
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1414 properties PROPERTIES. BUFFER is the buffer containing
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1415 the text. This does not obey any hooks.
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1416 You can provide the interval that START is located in as I,
41532
afe70a164d3b (set_text_properties_1): Clearly mark that the interval should not be empty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41391
diff changeset
1417 or pass NULL for I and this function will find it.
41589
67d2bb283076 (set_text_properties_1): Allow args in either order.
Richard M. Stallman <rms@gnu.org>
parents: 41532
diff changeset
1418 START and END can be in any order. */
40921
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1419
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1420 void
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1421 set_text_properties_1 (start, end, properties, buffer, i)
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1422 Lisp_Object start, end, properties, buffer;
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1423 INTERVAL i;
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1424 {
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1425 register INTERVAL prev_changed = NULL_INTERVAL;
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1426 register int s, len;
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1427 INTERVAL unchanged;
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1428
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1429 s = XINT (start);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1430 len = XINT (end) - s;
41589
67d2bb283076 (set_text_properties_1): Allow args in either order.
Richard M. Stallman <rms@gnu.org>
parents: 41532
diff changeset
1431 if (len == 0)
67d2bb283076 (set_text_properties_1): Allow args in either order.
Richard M. Stallman <rms@gnu.org>
parents: 41532
diff changeset
1432 return;
67d2bb283076 (set_text_properties_1): Allow args in either order.
Richard M. Stallman <rms@gnu.org>
parents: 41532
diff changeset
1433 if (len < 0)
67d2bb283076 (set_text_properties_1): Allow args in either order.
Richard M. Stallman <rms@gnu.org>
parents: 41532
diff changeset
1434 {
67d2bb283076 (set_text_properties_1): Allow args in either order.
Richard M. Stallman <rms@gnu.org>
parents: 41532
diff changeset
1435 s = s + len;
67d2bb283076 (set_text_properties_1): Allow args in either order.
Richard M. Stallman <rms@gnu.org>
parents: 41532
diff changeset
1436 len = - len;
67d2bb283076 (set_text_properties_1): Allow args in either order.
Richard M. Stallman <rms@gnu.org>
parents: 41532
diff changeset
1437 }
67d2bb283076 (set_text_properties_1): Allow args in either order.
Richard M. Stallman <rms@gnu.org>
parents: 41532
diff changeset
1438
40921
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1439 if (i == 0)
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1440 i = find_interval (BUF_INTERVALS (XBUFFER (buffer)), s);
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1441
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1442 if (i->position != s)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1443 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1444 unchanged = i;
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1445 i = split_interval_right (unchanged, s - unchanged->position);
1272
bfd04f61eb16 Mods to Ferase_text_properties
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
1446
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1447 if (LENGTH (i) > len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1448 {
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1449 copy_properties (unchanged, i);
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1450 i = split_interval_left (i, len);
40921
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1451 set_properties (properties, i, buffer);
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1452 return;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1453 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1454
40921
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1455 set_properties (properties, i, buffer);
3553
5f9688c0b704 (Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents: 2783
diff changeset
1456
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1457 if (LENGTH (i) == len)
40921
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1458 return;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1459
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1460 prev_changed = i;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1461 len -= LENGTH (i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1462 i = next_interval (i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1463 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1464
1283
6f4cbcc62eba Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents: 1272
diff changeset
1465 /* 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
1466 while (len > 0)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1467 {
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1468 if (i == 0)
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1469 abort ();
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1470
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1471 if (LENGTH (i) >= len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1472 {
1283
6f4cbcc62eba Minor optimizations of Fset_text_properties and Ferase_text_properties.
Joseph Arceneaux <jla@gnu.org>
parents: 1272
diff changeset
1473 if (LENGTH (i) > len)
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1474 i = split_interval_left (i, len);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1475
13585
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1476 /* 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
1477 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
1478 and cause redisplay to happen. */
40921
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1479 set_properties (properties, i, buffer);
13585
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1480 if (!NULL_INTERVAL_P (prev_changed))
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1481 merge_interval_left (i);
40921
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1482 return;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1483 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1484
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1485 len -= LENGTH (i);
13585
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1486
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1487 /* 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
1488 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
1489 and cause redisplay to happen. */
40921
95756d215716 (set_text_properties_1): New subroutine, broken out of set_text_properties.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
1490 set_properties (properties, i, buffer);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1491 if (NULL_INTERVAL_P (prev_changed))
13585
dc00b7be6593 (Fset_text_properties): Call set_properties
Richard M. Stallman <rms@gnu.org>
parents: 13265
diff changeset
1492 prev_changed = i;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1493 else
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1494 prev_changed = i = merge_interval_left (i);
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1495
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1496 i = next_interval (i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1497 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1498 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1499
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1500 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
1501 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
1502 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
1503 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
1504 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
1505 \(The values stored in PROPERTIES are ignored.)
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1506 If the optional fourth argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1507 the current buffer), START and END are buffer positions (integers or
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1508 markers). If OBJECT is a string, START and END are 0-based indices into it.
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1509 Return t if any property was actually removed, nil otherwise.
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1510
95453
ca950c418cdd (syms_of_textprop) <text-property-default-nonsticky>:
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
1511 Use `set-text-properties' if you want to remove all text properties. */)
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1512 (start, end, properties, object)
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1513 Lisp_Object start, end, properties, object;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1514 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1515 register INTERVAL i, unchanged;
2124
54179ef9ce35 * textprop.c (Fadd_text_properties): Initialize the modified flag.
Jim Blandy <jimb@redhat.com>
parents: 2058
diff changeset
1516 register int s, len, modified = 0;
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1517
1857
9d65dfc7bdb7 (Fadd_text_properties): Put OBJECT arg last. Make it optional.
Richard M. Stallman <rms@gnu.org>
parents: 1715
diff changeset
1518 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1519 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
1520
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1521 i = validate_interval_range (object, &start, &end, soft);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1522 if (NULL_INTERVAL_P (i))
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1523 return Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1524
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1525 s = XINT (start);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1526 len = XINT (end) - s;
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
1527
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1528 if (i->position != s)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1529 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1530 /* No properties on this first interval -- return if
17467
98c47e7857f3 Style of comments corrected.
Richard M. Stallman <rms@gnu.org>
parents: 16679
diff changeset
1531 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
1532 if (! interval_has_some_properties (properties, i))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1533 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1534 int got = (LENGTH (i) - (s - i->position));
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1535 if (got >= len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1536 return Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1537 len -= got;
3858
e07d474bdba9 (Fremove_text_properties, Fadd_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 3698
diff changeset
1538 i = next_interval (i);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1539 }
3553
5f9688c0b704 (Fadd_text_properties): Don't treat the initial
Richard M. Stallman <rms@gnu.org>
parents: 2783
diff changeset
1540 /* 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
1541 want to modify. */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1542 else
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1543 {
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1544 unchanged = i;
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1545 i = split_interval_right (unchanged, s - unchanged->position);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1546 copy_properties (unchanged, i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1547 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1548 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1549
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1550 if (BUFFERP (object))
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 72005
diff changeset
1551 modify_region (XBUFFER (object), XINT (start), XINT (end), 1);
16331
32a51f7ba384 (set_properties, add_properties, remove_properties):
Richard M. Stallman <rms@gnu.org>
parents: 16103
diff changeset
1552
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1553 /* 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
1554 for (;;)
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1555 {
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1556 if (i == 0)
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1557 abort ();
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
1558
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1559 if (LENGTH (i) >= len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1560 {
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1561 if (! interval_has_some_properties (properties, i))
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1562 return modified ? Qt : Qnil;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1563
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1564 if (LENGTH (i) == len)
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1565 {
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1566 remove_properties (properties, Qnil, i, object);
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1567 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1568 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
1569 XINT (end) - XINT (start));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1570 return Qt;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1571 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1572
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1573 /* 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
1574 unchanged = i;
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1575 i = split_interval_left (i, len);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1576 copy_properties (unchanged, i);
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1577 remove_properties (properties, Qnil, i, object);
16339
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1578 if (BUFFERP (object))
abcd50093b4e (Fset_text_properties, Fadd_text_properties)
Richard M. Stallman <rms@gnu.org>
parents: 16331
diff changeset
1579 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
1580 XINT (end) - XINT (start));
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1581 return Qt;
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1582 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1583
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1584 len -= LENGTH (i);
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1585 modified += remove_properties (properties, Qnil, i, object);
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1586 i = next_interval (i);
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1587 }
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1588 }
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1589
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1590 DEFUN ("remove-list-of-text-properties", Fremove_list_of_text_properties,
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1591 Sremove_list_of_text_properties, 3, 4, 0,
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1592 doc: /* Remove some properties from text from START to END.
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1593 The third argument LIST-OF-PROPERTIES is a list of property names to remove.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1594 If the optional fourth argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1595 the current buffer), START and END are buffer positions (integers or
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1596 markers). If OBJECT is a string, START and END are 0-based indices into it.
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1597 Return t if any property was actually removed, nil otherwise. */)
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1598 (start, end, list_of_properties, object)
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1599 Lisp_Object start, end, list_of_properties, object;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1600 {
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1601 register INTERVAL i, unchanged;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1602 register int s, len, modified = 0;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1603 Lisp_Object properties;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1604 properties = list_of_properties;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1605
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1606 if (NILP (object))
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1607 XSETBUFFER (object, current_buffer);
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1608
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1609 i = validate_interval_range (object, &start, &end, soft);
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1610 if (NULL_INTERVAL_P (i))
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1611 return Qnil;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1612
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1613 s = XINT (start);
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1614 len = XINT (end) - s;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1615
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1616 if (i->position != s)
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1617 {
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1618 /* No properties on this first interval -- return if
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1619 it covers the entire region. */
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1620 if (! interval_has_some_properties_list (properties, i))
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1621 {
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1622 int got = (LENGTH (i) - (s - i->position));
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1623 if (got >= len)
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1624 return Qnil;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1625 len -= got;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1626 i = next_interval (i);
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1627 }
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1628 /* Split away the beginning of this interval; what we don't
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1629 want to modify. */
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1630 else
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1631 {
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1632 unchanged = i;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1633 i = split_interval_right (unchanged, s - unchanged->position);
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1634 copy_properties (unchanged, i);
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1635 }
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1636 }
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1637
70129
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1638 /* We are at the beginning of an interval, with len to scan.
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1639 The flag `modified' records if changes have been made.
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1640 When object is a buffer, we must call modify_region before changes are
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1641 made and signal_after_change when we are done.
78501
1677cf1c2509 Replace `iff' in comments.
Glenn Morris <rgm@gnu.org>
parents: 78260
diff changeset
1642 We call modify_region before calling remove_properties if modified == 0,
1677cf1c2509 Replace `iff' in comments.
Glenn Morris <rgm@gnu.org>
parents: 78260
diff changeset
1643 and we call signal_after_change before returning if modified != 0. */
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1644 for (;;)
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1645 {
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1646 if (i == 0)
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1647 abort ();
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1648
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1649 if (LENGTH (i) >= len)
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1650 {
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1651 if (! interval_has_some_properties_list (properties, i))
70129
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1652 if (modified)
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1653 {
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1654 if (BUFFERP (object))
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1655 signal_after_change (XINT (start), XINT (end) - XINT (start),
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1656 XINT (end) - XINT (start));
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1657 return Qt;
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1658 }
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1659 else
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1660 return Qnil;
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1661
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1662 if (LENGTH (i) == len)
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1663 {
70129
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1664 if (!modified && BUFFERP (object))
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 72005
diff changeset
1665 modify_region (XBUFFER (object), XINT (start), XINT (end), 1);
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1666 remove_properties (Qnil, properties, i, object);
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1667 if (BUFFERP (object))
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1668 signal_after_change (XINT (start), XINT (end) - XINT (start),
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1669 XINT (end) - XINT (start));
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1670 return Qt;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1671 }
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1672
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1673 /* i has the properties, and goes past the change limit */
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1674 unchanged = i;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1675 i = split_interval_left (i, len);
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1676 copy_properties (unchanged, i);
70129
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1677 if (!modified && BUFFERP (object))
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 72005
diff changeset
1678 modify_region (XBUFFER (object), XINT (start), XINT (end), 1);
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1679 remove_properties (Qnil, properties, i, object);
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1680 if (BUFFERP (object))
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1681 signal_after_change (XINT (start), XINT (end) - XINT (start),
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1682 XINT (end) - XINT (start));
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1683 return Qt;
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1684 }
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1685
70129
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1686 if (interval_has_some_properties_list (properties, i))
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1687 {
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1688 if (!modified && BUFFERP (object))
72592
f6de516bbb4b * buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents: 72005
diff changeset
1689 modify_region (XBUFFER (object), XINT (start), XINT (end), 1);
70129
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1690 remove_properties (Qnil, properties, i, object);
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1691 modified = 1;
af8798ce814c (Fremove_list_of_text_properties): Ensure
Lars Hansen <larsh@soem.dk>
parents: 68651
diff changeset
1692 }
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
1693 len -= LENGTH (i);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1694 i = next_interval (i);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1695 }
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1696 }
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
1697
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1698 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
1699 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
1700 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
1701 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
1702 is `eq' to VALUE. Otherwise return nil.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1703 If the optional fifth argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1704 the current buffer), START and END are buffer positions (integers or
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1705 markers). If OBJECT is a string, START and END are 0-based indices into it. */)
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1706 (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
1707 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
1708 {
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1709 register INTERVAL i;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1710 register int e, pos;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1711
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1712 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1713 XSETBUFFER (object, current_buffer);
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1714 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
1715 if (NULL_INTERVAL_P (i))
701e7acfe885 (Ftext_property_any): Handle the trivial case specially.
Karl Heuer <kwzh@gnu.org>
parents: 10312
diff changeset
1716 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
1717 e = XINT (end);
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1718
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1719 while (! NULL_INTERVAL_P (i))
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1720 {
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1721 if (i->position >= e)
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1722 break;
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1723 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
1724 {
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1725 pos = i->position;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1726 if (pos < XINT (start))
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1727 pos = XINT (start);
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1728 return make_number (pos);
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1729 }
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1730 i = next_interval (i);
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1731 }
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1732 return Qnil;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1733 }
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1734
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1735 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
1736 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
1737 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
1738 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
1739 is not `eq' to VALUE. Otherwise, return nil.
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1740 If the optional fifth argument OBJECT is a buffer (or nil, which means
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1741 the current buffer), START and END are buffer positions (integers or
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1742 markers). If OBJECT is a string, START and END are 0-based indices into it. */)
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
1743 (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
1744 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
1745 {
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1746 register INTERVAL i;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1747 register int s, e;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1748
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1749 if (NILP (object))
9280
4b238c43e59f (Ftext_properties_at, Fget_char_property, Fnext_property_change,
Karl Heuer <kwzh@gnu.org>
parents: 9109
diff changeset
1750 XSETBUFFER (object, current_buffer);
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1751 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
1752 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
1753 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
1754 s = XINT (start);
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1755 e = XINT (end);
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1756
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1757 while (! NULL_INTERVAL_P (i))
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1758 {
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1759 if (i->position >= e)
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1760 break;
14088
dc754f92a2a4 (Ftext_properties_at, Fget_text_property, Fget_char_property,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
1761 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
1762 {
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1763 if (i->position > s)
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1764 s = i->position;
22344
2ec50b4767ed Handle the new convention that `position' values
Karl Heuer <kwzh@gnu.org>
parents: 22280
diff changeset
1765 return make_number (s);
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1766 }
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1767 i = next_interval (i);
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1768 }
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1769 return Qnil;
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
1770 }
43896
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1771
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1772
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1773 /* Return the direction from which the text-property PROP would be
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1774 inherited by any new text inserted at POS: 1 if it would be
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1775 inherited from the char after POS, -1 if it would be inherited from
51041
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49247
diff changeset
1776 the char before POS, and 0 if from neither.
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49247
diff changeset
1777 BUFFER can be either a buffer or nil (meaning current buffer). */
43896
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1778
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1779 int
51041
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49247
diff changeset
1780 text_property_stickiness (prop, pos, buffer)
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49247
diff changeset
1781 Lisp_Object prop, pos, buffer;
43896
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1782 {
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1783 Lisp_Object prev_pos, front_sticky;
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1784 int is_rear_sticky = 1, is_front_sticky = 0; /* defaults */
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1785
51041
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49247
diff changeset
1786 if (NILP (buffer))
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49247
diff changeset
1787 XSETBUFFER (buffer, current_buffer);
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49247
diff changeset
1788
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49247
diff changeset
1789 if (XINT (pos) > BUF_BEGV (XBUFFER (buffer)))
43896
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1790 /* Consider previous character. */
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1791 {
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1792 Lisp_Object rear_non_sticky;
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1793
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1794 prev_pos = make_number (XINT (pos) - 1);
51041
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49247
diff changeset
1795 rear_non_sticky = Fget_text_property (prev_pos, Qrear_nonsticky, buffer);
43896
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1796
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1797 if (!NILP (CONSP (rear_non_sticky)
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1798 ? Fmemq (prop, rear_non_sticky)
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1799 : rear_non_sticky))
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1800 /* PROP is rear-non-sticky. */
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1801 is_rear_sticky = 0;
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1802 }
71499
51f7fe4f6552 * textprop.c (text_property_stickiness): doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 70656
diff changeset
1803 else
51f7fe4f6552 * textprop.c (text_property_stickiness): doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 70656
diff changeset
1804 return 0;
43896
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1805
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1806 /* Consider following character. */
71499
51f7fe4f6552 * textprop.c (text_property_stickiness): doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 70656
diff changeset
1807 /* This signals an arg-out-of-range error if pos is outside the
51f7fe4f6552 * textprop.c (text_property_stickiness): doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 70656
diff changeset
1808 buffer's accessible range. */
51041
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49247
diff changeset
1809 front_sticky = Fget_text_property (pos, Qfront_sticky, buffer);
43896
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1810
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1811 if (EQ (front_sticky, Qt)
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1812 || (CONSP (front_sticky)
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1813 && !NILP (Fmemq (prop, front_sticky))))
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1814 /* PROP is inherited from after. */
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1815 is_front_sticky = 1;
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1816
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1817 /* Simple cases, where the properties are consistent. */
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1818 if (is_rear_sticky && !is_front_sticky)
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1819 return -1;
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1820 else if (!is_rear_sticky && is_front_sticky)
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1821 return 1;
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1822 else if (!is_rear_sticky && !is_front_sticky)
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1823 return 0;
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1824
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1825 /* The stickiness properties are inconsistent, so we have to
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1826 disambiguate. Basically, rear-sticky wins, _except_ if the
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1827 property that would be inherited has a value of nil, in which case
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1828 front-sticky wins. */
51041
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49247
diff changeset
1829 if (XINT (pos) == BUF_BEGV (XBUFFER (buffer))
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49247
diff changeset
1830 || NILP (Fget_text_property (prev_pos, prop, buffer)))
43896
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1831 return 1;
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1832 else
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1833 return -1;
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1834 }
fccc867cca64 (text_property_stickiness): Function moved here from `editfns.c'.
Miles Bader <miles@gnu.org>
parents: 42967
diff changeset
1835
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
1836
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1837 /* 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
1838 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
1839 around?
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1840
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1841 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
1842 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
1843 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
1844
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1845 /* 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
1846 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
1847 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
1848 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
1849 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
1850
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1851 /* 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
1852
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1853 Lisp_Object
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1854 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
1855 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
1856 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1857 INTERVAL i;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1858 Lisp_Object res;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1859 Lisp_Object stuff;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1860 Lisp_Object plist;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1861 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
1862 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
1863
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1864 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
1865 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
1866 return Qnil;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1867
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40647
diff changeset
1868 CHECK_NUMBER_COERCE_MARKER (pos);
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1869 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1870 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
1871
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1872 dest_start = pos;
9321
e6759002383c (Fnext_property_change, property_change_between_p,
Karl Heuer <kwzh@gnu.org>
parents: 9280
diff changeset
1873 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
1874 /* 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
1875 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
1876 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
1877 }
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1878
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1879 s = XINT (start);
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1880 e = XINT (end);
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1881 p = XINT (pos);
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1882
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1883 stuff = Qnil;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1884
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1885 while (s < e)
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1886 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1887 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
1888 if (e2 > e)
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1889 e2 = e;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1890 len = e2 - s;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1891
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1892 plist = i->plist;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1893 if (! NILP (prop))
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1894 while (! NILP (plist))
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1895 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1896 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
1897 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1898 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
1899 break;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1900 }
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1901 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
1902 }
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1903 if (! NILP (plist))
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1904 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1905 /* 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
1906 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
1907 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
1908 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
1909 Fcons (plist, Qnil))),
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1910 stuff);
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1911 }
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1912
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1913 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
1914 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
1915 break;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1916
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1917 p += len;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1918 s = i->position;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1919 }
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1920
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1921 GCPRO2 (stuff, dest);
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1922
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1923 while (! NILP (stuff))
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1924 {
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1925 res = Fcar (stuff);
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1926 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
1927 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
1928 if (! NILP (res))
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1929 modified++;
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1930 stuff = Fcdr (stuff);
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1931 }
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1932
10159
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1933 UNGCPRO;
1299d37b51bb (add_properties): Add gcpro's.
Richard M. Stallman <rms@gnu.org>
parents: 9945
diff changeset
1934
4007
55da23f04d01 * textprop.c (copy_text_properties): Pass a copy of POS to
Jim Blandy <jimb@redhat.com>
parents: 3998
diff changeset
1935 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
1936 }
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1937
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1938
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1939 /* Return a list representing the text properties of OBJECT between
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1940 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
1941 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
1942 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
1943 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
1944 doesn't contain text properties between START and END. */
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1945
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1946 Lisp_Object
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1947 text_property_list (object, start, end, prop)
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1948 Lisp_Object object, start, end, prop;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1949 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1950 struct interval *i;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1951 Lisp_Object result;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1952
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1953 result = Qnil;
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1954
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1955 i = validate_interval_range (object, &start, &end, soft);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1956 if (!NULL_INTERVAL_P (i))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1957 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1958 int s = XINT (start);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1959 int e = XINT (end);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1960
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1961 while (s < e)
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1962 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1963 int interval_end, len;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1964 Lisp_Object plist;
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1965
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1966 interval_end = i->position + LENGTH (i);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1967 if (interval_end > e)
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1968 interval_end = e;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1969 len = interval_end - s;
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1970
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1971 plist = i->plist;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1972
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1973 if (!NILP (prop))
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
1974 for (; CONSP (plist); plist = Fcdr (XCDR (plist)))
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
1975 if (EQ (XCAR (plist), prop))
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1976 {
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78501
diff changeset
1977 plist = Fcons (prop, Fcons (Fcar (XCDR (plist)), Qnil));
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1978 break;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1979 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1980
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1981 if (!NILP (plist))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1982 result = Fcons (Fcons (make_number (s),
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1983 Fcons (make_number (s + len),
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1984 Fcons (plist, Qnil))),
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1985 result);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1986
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1987 i = next_interval (i);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1988 if (NULL_INTERVAL_P (i))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1989 break;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1990 s = i->position;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1991 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1992 }
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
1993
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1994 return result;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1995 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1996
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1997
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
1998 /* 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
1999 (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
2000 property list containing the text properties to add. Adjust START
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2001 and END positions by DELTA before adding properties. Value is
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2002 non-zero if OBJECT was modified. */
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2003
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2004 int
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2005 add_text_properties_from_list (object, list, delta)
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2006 Lisp_Object object, list, delta;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2007 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2008 struct gcpro gcpro1, gcpro2;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2009 int modified_p = 0;
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
2010
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2011 GCPRO2 (list, object);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
2012
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2013 for (; CONSP (list); list = XCDR (list))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2014 {
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2015 Lisp_Object item, start, end, plist, tem;
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
2016
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2017 item = XCAR (list);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2018 start = make_number (XINT (XCAR (item)) + XINT (delta));
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2019 end = make_number (XINT (XCAR (XCDR (item))) + XINT (delta));
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2020 plist = XCAR (XCDR (XCDR (item)));
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
2021
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2022 tem = Fadd_text_properties (start, end, plist, object);
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2023 if (!NILP (tem))
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2024 modified_p = 1;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2025 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2026
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2027 UNGCPRO;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2028 return modified_p;
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2029 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2030
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2031
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2032
106780
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2033 /* Modify end-points of ranges in LIST destructively, and return the
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2034 new list. LIST is a list as returned from text_property_list.
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2035 Discard properties that begin at or after NEW_END, and limit
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2036 end-points to NEW_END. */
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2037
106780
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2038 Lisp_Object
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2039 extend_property_ranges (list, new_end)
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2040 Lisp_Object list, new_end;
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2041 {
106780
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2042 Lisp_Object prev = Qnil, head = list;
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2043 int max = XINT (new_end);
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2044
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2045 for (; CONSP (list); prev = list, list = XCDR (list))
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2046 {
106780
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2047 Lisp_Object item, beg, end;
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
2048
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2049 item = XCAR (list);
106780
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2050 beg = XCAR (item);
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2051 end = XCAR (XCDR (item));
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2052
106780
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2053 if (XINT (beg) >= max)
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2054 {
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2055 /* The start-point is past the end of the new string.
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2056 Discard this property. */
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2057 if (EQ (head, list))
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2058 head = XCDR (list);
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2059 else
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2060 XSETCDR (prev, XCDR (list));
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2061 }
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2062 else if (XINT (end) > max)
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2063 /* The end-point is past the end of the new string. */
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39527
diff changeset
2064 XSETCAR (XCDR (item), new_end);
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2065 }
106780
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2066
85fd976607be Fix bounds checking for text properties in `format' (Bug#5306).
Chong Yidong <cyd@stupidchicken.com>
parents: 105877
diff changeset
2067 return head;
25000
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2068 }
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2069
866dad44a275 (text_property_list): New.
Gerd Moellmann <gerd@gnu.org>
parents: 23729
diff changeset
2070
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2071
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2072 /* 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
2073
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2074 static void
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2075 call_mod_hooks (list, start, end)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2076 Lisp_Object list, start, end;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2077 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2078 struct gcpro gcpro1;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2079 GCPRO1 (list);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2080 while (!NILP (list))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2081 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2082 call2 (Fcar (list), start, end);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2083 list = Fcdr (list);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2084 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2085 UNGCPRO;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2086 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2087
20522
4409f95651d1 (Ftext_properties_at): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18736
diff changeset
2088 /* 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
2089 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
2090
4409f95651d1 (Ftext_properties_at): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18736
diff changeset
2091 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
2092 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
2093 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
2094 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
2095
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2096 void
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2097 verify_interval_modification (buf, start, end)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2098 struct buffer *buf;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2099 int start, end;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2100 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2101 register INTERVAL intervals = BUF_INTERVALS (buf);
25772
1902e7e63fa7 (Fset_text_properties): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
2102 register INTERVAL i;
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2103 Lisp_Object hooks;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2104 register Lisp_Object prev_mod_hooks;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2105 Lisp_Object mod_hooks;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2106 struct gcpro gcpro1;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2107
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2108 hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2109 prev_mod_hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2110 mod_hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2111
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2112 interval_insert_behind_hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2113 interval_insert_in_front_hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2114
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2115 if (NULL_INTERVAL_P (intervals))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2116 return;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2117
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2118 if (start > end)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2119 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2120 int temp = start;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2121 start = end;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2122 end = temp;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2123 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2124
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2125 /* 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
2126 if (start == end)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2127 {
33952
ca22422634ac (text_read_only): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 32849
diff changeset
2128 INTERVAL prev = NULL;
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2129 Lisp_Object before, after;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2130
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2131 /* 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
2132 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
2133 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
2134 i = find_interval (intervals, start);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2135
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2136 if (start == BUF_BEGV (buf))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2137 prev = 0;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2138 else if (i->position == start)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2139 prev = previous_interval (i);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2140 else if (i->position < start)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2141 prev = i;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2142 if (start == BUF_ZV (buf))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2143 i = 0;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2144
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2145 /* 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
2146 skip the read_only checks. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2147 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
2148 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2149 /* 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
2150 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
2151 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
2152 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
2153 indirectly defined via the category property. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2154 if (i != prev)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2155 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2156 if (! NULL_INTERVAL_P (i))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2157 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2158 after = textget (i->plist, Qread_only);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
2159
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2160 /* 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
2161 front-sticky, inhibit insertion.
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2162 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
2163 if (! NILP (after)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2164 && NILP (Fmemq (after, Vinhibit_read_only)))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2165 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2166 Lisp_Object tem;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2167
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2168 tem = textget (i->plist, Qfront_sticky);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2169 if (TMEM (Qread_only, tem)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2170 || (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
2171 && TMEM (Qcategory, tem)))
48840
b6981c46191d (text_read_only): New arg `propval'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46448
diff changeset
2172 text_read_only (after);
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2173 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2174 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2175
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2176 if (! NULL_INTERVAL_P (prev))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2177 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2178 before = textget (prev->plist, Qread_only);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
2179
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2180 /* 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
2181 rear-nonsticky, inhibit insertion.
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2182 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
2183 if (! NILP (before)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2184 && NILP (Fmemq (before, Vinhibit_read_only)))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2185 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2186 Lisp_Object tem;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2187
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2188 tem = textget (prev->plist, Qrear_nonsticky);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2189 if (! TMEM (Qread_only, tem)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2190 && (! 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
2191 || ! TMEM (Qcategory, tem)))
48840
b6981c46191d (text_read_only): New arg `propval'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46448
diff changeset
2192 text_read_only (before);
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2193 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2194 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2195 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2196 else if (! NULL_INTERVAL_P (i))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2197 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2198 after = textget (i->plist, Qread_only);
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
2199
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2200 /* 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
2201 front-sticky, inhibit insertion.
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2202 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
2203 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
2204 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2205 Lisp_Object tem;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2206
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2207 tem = textget (i->plist, Qfront_sticky);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2208 if (TMEM (Qread_only, tem)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2209 || (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
2210 && TMEM (Qcategory, tem)))
48840
b6981c46191d (text_read_only): New arg `propval'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46448
diff changeset
2211 text_read_only (after);
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2212
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2213 tem = textget (prev->plist, Qrear_nonsticky);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2214 if (! TMEM (Qread_only, tem)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2215 && (! 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
2216 || ! TMEM (Qcategory, tem)))
48840
b6981c46191d (text_read_only): New arg `propval'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46448
diff changeset
2217 text_read_only (after);
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2218 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2219 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2220 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2221
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2222 /* 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
2223 if (!NULL_INTERVAL_P (prev))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2224 interval_insert_behind_hooks
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2225 = textget (prev->plist, Qinsert_behind_hooks);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2226 if (!NULL_INTERVAL_P (i))
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2227 interval_insert_in_front_hooks
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2228 = 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
2229 }
39247
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2230 else
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2231 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2232 /* 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
2233 collecting their hooks. */
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2234
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2235 i = find_interval (intervals, start);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2236 do
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2237 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2238 if (! INTERVAL_WRITABLE_P (i))
48840
b6981c46191d (text_read_only): New arg `propval'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46448
diff changeset
2239 text_read_only (textget (i->plist, Qread_only));
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2240
39247
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2241 if (!inhibit_modification_hooks)
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2242 {
39247
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2243 mod_hooks = textget (i->plist, Qmodification_hooks);
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2244 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
2245 {
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2246 hooks = Fcons (mod_hooks, hooks);
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2247 prev_mod_hooks = mod_hooks;
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2248 }
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2249 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2250
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2251 i = next_interval (i);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2252 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2253 /* 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
2254 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
2255
39247
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2256 if (!inhibit_modification_hooks)
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2257 {
39247
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2258 GCPRO1 (hooks);
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2259 hooks = Fnreverse (hooks);
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2260 while (! EQ (hooks, Qnil))
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2261 {
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2262 call_mod_hooks (Fcar (hooks), make_number (start),
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2263 make_number (end));
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2264 hooks = Fcdr (hooks);
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2265 }
989367eb5ce1 (verify_interval_modification): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 39242
diff changeset
2266 UNGCPRO;
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2267 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2268 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2269 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2270
20522
4409f95651d1 (Ftext_properties_at): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 18736
diff changeset
2271 /* 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
2272 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
2273 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
2274 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
2275
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2276 void
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2277 report_interval_modification (start, end)
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2278 Lisp_Object start, end;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2279 {
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2280 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
2281 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
2282 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
2283 && ! EQ (interval_insert_in_front_hooks,
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2284 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
2285 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
2286 }
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2287
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2288 void
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2289 syms_of_textprop ()
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2290 {
11131
5db8a01b22cb (Vdefault_text_properties): name changed from Vdefault_properties.
Boris Goldowsky <boris@gnu.org>
parents: 11116
diff changeset
2291 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
2292 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
2293 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
2294 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
2295 Vdefault_text_properties = Qnil;
10925
0480d65be55d (Vdefault_properties): New vbl.
Boris Goldowsky <boris@gnu.org>
parents: 10488
diff changeset
2296
45680
c9e70e34b426 (Vchar_property_alias_alist): New variable.
Colin Walters <walters@gnu.org>
parents: 44976
diff changeset
2297 DEFVAR_LISP ("char-property-alias-alist", &Vchar_property_alias_alist,
c9e70e34b426 (Vchar_property_alias_alist): New variable.
Colin Walters <walters@gnu.org>
parents: 44976
diff changeset
2298 doc: /* Alist of alternative properties for properties without a value.
c9e70e34b426 (Vchar_property_alias_alist): New variable.
Colin Walters <walters@gnu.org>
parents: 44976
diff changeset
2299 Each element should look like (PROPERTY ALTERNATIVE1 ALTERNATIVE2...).
c9e70e34b426 (Vchar_property_alias_alist): New variable.
Colin Walters <walters@gnu.org>
parents: 44976
diff changeset
2300 If a piece of text has no direct value for a particular property, then
c9e70e34b426 (Vchar_property_alias_alist): New variable.
Colin Walters <walters@gnu.org>
parents: 44976
diff changeset
2301 this alist is consulted. If that property appears in the alist, then
c9e70e34b426 (Vchar_property_alias_alist): New variable.
Colin Walters <walters@gnu.org>
parents: 44976
diff changeset
2302 the first non-nil value from the associated alternative properties is
c9e70e34b426 (Vchar_property_alias_alist): New variable.
Colin Walters <walters@gnu.org>
parents: 44976
diff changeset
2303 returned. */);
c9e70e34b426 (Vchar_property_alias_alist): New variable.
Colin Walters <walters@gnu.org>
parents: 44976
diff changeset
2304 Vchar_property_alias_alist = Qnil;
c9e70e34b426 (Vchar_property_alias_alist): New variable.
Colin Walters <walters@gnu.org>
parents: 44976
diff changeset
2305
4242
49007dbbec4c (syms_of_textprop): Set up Lisp var Vinhibit_point_motion_hooks.
Richard M. Stallman <rms@gnu.org>
parents: 4214
diff changeset
2306 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
2307 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
2308 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
2309 Vinhibit_point_motion_hooks = Qnil;
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2310
26872
ea588757e607 (Vtext_property_default_nonsticky): New variable
Kenichi Handa <handa@m17n.org>
parents: 26605
diff changeset
2311 DEFVAR_LISP ("text-property-default-nonsticky",
ea588757e607 (Vtext_property_default_nonsticky): New variable
Kenichi Handa <handa@m17n.org>
parents: 26605
diff changeset
2312 &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
2313 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
2314 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
2315
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2316 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
2317 the character doesn't inherit PROPERTY if NONSTICKINESS is non-nil,
95453
ca950c418cdd (syms_of_textprop) <text-property-default-nonsticky>:
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
2318 inherits it if NONSTICKINESS is nil. The `front-sticky' and
ca950c418cdd (syms_of_textprop) <text-property-default-nonsticky>:
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
2319 `rear-nonsticky' properties of the character override NONSTICKINESS. */);
57477
c4f6faab46b0 (syms_of_textprop): Add `syntax-table' to the nonsticky props.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55652
diff changeset
2320 /* Text property `syntax-table' should be nonsticky by default. */
c4f6faab46b0 (syms_of_textprop): Add `syntax-table' to the nonsticky props.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55652
diff changeset
2321 Vtext_property_default_nonsticky
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2322 = Fcons (Fcons (intern_c_string ("syntax-table"), Qt), Qnil);
26872
ea588757e607 (Vtext_property_default_nonsticky): New variable
Kenichi Handa <handa@m17n.org>
parents: 26605
diff changeset
2323
13027
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2324 staticpro (&interval_insert_behind_hooks);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2325 staticpro (&interval_insert_in_front_hooks);
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2326 interval_insert_behind_hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2327 interval_insert_in_front_hooks = Qnil;
48358e0fa98e (call_mod_hooks): Moved from intevals.c
Richard M. Stallman <rms@gnu.org>
parents: 12641
diff changeset
2328
49247
5856f0179746 (Ftext_properties_at, Fnext_char_property_change)
Francesco Potortì <pot@gnu.org>
parents: 48840
diff changeset
2329
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2330 /* Common attributes one might give text */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2331
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2332 staticpro (&Qforeground);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2333 Qforeground = intern_c_string ("foreground");
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2334 staticpro (&Qbackground);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2335 Qbackground = intern_c_string ("background");
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2336 staticpro (&Qfont);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2337 Qfont = intern_c_string ("font");
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2338 staticpro (&Qstipple);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2339 Qstipple = intern_c_string ("stipple");
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2340 staticpro (&Qunderline);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2341 Qunderline = intern_c_string ("underline");
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2342 staticpro (&Qread_only);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2343 Qread_only = intern_c_string ("read-only");
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2344 staticpro (&Qinvisible);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2345 Qinvisible = intern_c_string ("invisible");
6755
a2bccbc870e6 (syms_of_textprop): Initialize Qintangible.
Karl Heuer <kwzh@gnu.org>
parents: 6681
diff changeset
2346 staticpro (&Qintangible);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2347 Qintangible = intern_c_string ("intangible");
2058
a43d0bb1b7d8 (Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2053
diff changeset
2348 staticpro (&Qcategory);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2349 Qcategory = intern_c_string ("category");
2058
a43d0bb1b7d8 (Fget_text_property): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2053
diff changeset
2350 staticpro (&Qlocal_map);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2351 Qlocal_map = intern_c_string ("local-map");
4381
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
2352 staticpro (&Qfront_sticky);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2353 Qfront_sticky = intern_c_string ("front-sticky");
4381
b0556af4d680 (Qfront_sticky, Qrear_nonsticky): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 4242
diff changeset
2354 staticpro (&Qrear_nonsticky);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2355 Qrear_nonsticky = intern_c_string ("rear-nonsticky");
23729
cf1cbb0e5d5b (Qmouse_face): Variable definition moved here.
Richard M. Stallman <rms@gnu.org>
parents: 22344
diff changeset
2356 staticpro (&Qmouse_face);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2357 Qmouse_face = intern_c_string ("mouse-face");
100688
8233f3e2beb4 * textprop.c (Qminibuffer_prompt): New variable.
Martin Rudalics <rudalics@gmx.at>
parents: 99343
diff changeset
2358 staticpro (&Qminibuffer_prompt);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2359 Qminibuffer_prompt = intern_c_string ("minibuffer-prompt");
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2360
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2361 /* Properties that text might use to specify certain actions */
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2362
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2363 staticpro (&Qmouse_left);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2364 Qmouse_left = intern_c_string ("mouse-left");
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2365 staticpro (&Qmouse_entered);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2366 Qmouse_entered = intern_c_string ("mouse-entered");
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2367 staticpro (&Qpoint_left);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2368 Qpoint_left = intern_c_string ("point-left");
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2369 staticpro (&Qpoint_entered);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2370 Qpoint_entered = intern_c_string ("point-entered");
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2371
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2372 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
2373 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
2374 defsubr (&Sget_char_property);
53201
c90162ba57c6 (Fget_char_property_and_overlay): New function.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
2375 defsubr (&Sget_char_property_and_overlay);
16679
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
2376 defsubr (&Snext_char_property_change);
38c158927e6f (Fnext_char_property_change): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16339
diff changeset
2377 defsubr (&Sprevious_char_property_change);
30242
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
2378 defsubr (&Snext_single_char_property_change);
6af73af0f1ef (Fnext_single_char_property_change):
Miles Bader <miles@gnu.org>
parents: 29342
diff changeset
2379 defsubr (&Sprevious_single_char_property_change);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2380 defsubr (&Snext_property_change);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
2381 defsubr (&Snext_single_property_change);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2382 defsubr (&Sprevious_property_change);
1211
9f50cccf5963 See ChangeLog
Joseph Arceneaux <jla@gnu.org>
parents: 1055
diff changeset
2383 defsubr (&Sprevious_single_property_change);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2384 defsubr (&Sadd_text_properties);
1965
2bdbd6ed2430 (Fadd_text_properties, Fremove_text_properties):
Richard M. Stallman <rms@gnu.org>
parents: 1930
diff changeset
2385 defsubr (&Sput_text_property);
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2386 defsubr (&Sset_text_properties);
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2387 defsubr (&Sremove_text_properties);
44673
01f74663f76e (remove_properties): New arg LIST allows scanning
Richard M. Stallman <rms@gnu.org>
parents: 43896
diff changeset
2388 defsubr (&Sremove_list_of_text_properties);
4144
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
2389 defsubr (&Stext_property_any);
8f5545cf9774 * intervals.c (split_interval_left, split_interval_right): Change
Jim Blandy <jimb@redhat.com>
parents: 4076
diff changeset
2390 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
2391 /* 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
2392 /* defsubr (&Scopy_text_properties); */
1029
425f62908a54 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2393 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51041
diff changeset
2394
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51041
diff changeset
2395 /* arch-tag: 454cdde8-5f86-4faa-a078-101e3625d479
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51041
diff changeset
2396 (do not change this comment) */