annotate src/extents.h @ 185:3d6bfa290dbd r20-3b19

Import from CVS: tag r20-3b19
author cvs
date Mon, 13 Aug 2007 09:55:28 +0200
parents 0d2f883870bc
children 489f57a838ef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 /* Copyright (c) 1994, 1995 Free Software Foundation.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 Copyright (c) 1995 Ben Wing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 This file is part of XEmacs.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 Free Software Foundation; either version 2, or (at your option) any
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 later version.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 for more details.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 /* Synched up with: Not in FSF. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 #ifndef _XEMACS_EXTENTS_H_
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 #define _XEMACS_EXTENTS_H_
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 DECLARE_LRECORD (extent, struct extent);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 #define XEXTENT(x) XRECORD (x, extent, struct extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 #define XSETEXTENT(x, p) XSETRECORD (x, p, extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 #define EXTENTP(x) RECORDP (x, extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 #define GC_EXTENTP(x) GC_RECORDP (x, extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31 #define CHECK_EXTENT(x) CHECK_RECORD (x, extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 #define CONCHECK_EXTENT(x) CONCHECK_RECORD (x, extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 struct extent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 struct lrecord_header lheader;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 Memind start;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 Memind end;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 Lisp_Object object; /* A buffer, string, Qnil (extent detached from no
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 buffer), Qt (destroyed extent) */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43 /* Extent properties are conceptually a plist, but the most common
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 props are implemented as bits instead of conses.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 struct
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 Lisp_Object face;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 /* These flags are simply an optimization for common boolean properties
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 which go onto the extent's property list. Any of them would work if
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 done in the normal way, but the space savings of doing these in this
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 way is significant. Note that if you add a flag, there are numerous
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 places in extents.c that need to know about it.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 Another consideration is that some of these properties are accessed
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 during redisplay, so it's good for access to them to be fast (a bit
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 reference instead of a search down a plist).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 `begin_glyph_layout' and `end_glyph_layout' are unusual in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 that they have 4 states instead of 2.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 Other special extent properties are stored in an auxiliary
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 structure that sits at the beginning of the plist. The has_aux
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 flag indicates whether this structure exists. The has_parent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 flag is an optimization indicating whether the extent has a parent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 (this could also be determined by looking in the aux structure). */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 unsigned int begin_glyph_layout :2; /* 2 text, margins, or whitespace */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 unsigned int end_glyph_layout :2; /* 4 text, margins, or whitespace */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 unsigned int has_parent : 1; /* 5 extent has a parent */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 unsigned int has_aux : 1; /* 6 extent has an aux. structure */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 unsigned int start_open : 1; /* 7 insertion behavior at start */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 unsigned int end_open : 1; /* 8 insertion behavior at end */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 unsigned int unused9 : 1; /* 9 unused */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 unsigned int unique : 1; /* 10 there may be only one attached */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77 unsigned int duplicable : 1; /* 11 copied to strings by kill/undo */
96
dbb370e3c29e Import from CVS: tag r20-0final
cvs
parents: 70
diff changeset
78 unsigned int REPLICATING : 1; /* 12 invoke old extent-replica behav.*/
dbb370e3c29e Import from CVS: tag r20-0final
cvs
parents: 70
diff changeset
79 /* Not used any more */
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 unsigned int detachable : 1; /* 13 extent detaches if text deleted */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 unsigned int internal : 1; /* 14 used by map-extents etc. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 unsigned int unused15 : 1; /* 15 unused */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83 unsigned int unused16 : 1; /* 16 unused */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 /* --- Adding more flags will cause the extent struct grow by another
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 word. It's not clear that this would make a difference, however,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 because on 32-bit machines things tend to get allocated in chunks
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 of 4 bytes. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 } flags;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 /* The plist may have an auxiliary structure as its first element */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90 Lisp_Object plist;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 /* Basic properties of an extent (not affected by the extent's parent) */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 #define extent_object(e) ((e)->object)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 #define extent_start(e) ((e)->start + 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 #define extent_end(e) ((e)->end + 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97 #define set_extent_start(e, val) ((e)->start = (val))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 #define set_extent_end(e, val) ((e)->end = (val))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 #define extent_endpoint(e, endp) ((endp) ? extent_end (e) : extent_start (e))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 #define set_extent_endpoint(e, val, endp) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101 ((endp) ? set_extent_end (e, val) : set_extent_start (e, val))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 #define extent_detached_p(e) (extent_start (e) < 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104 /* the layouts for glyphs (extent->flags.glyph_layout). Must fit in 2 bits. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 #define GL_TEXT 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 #define GL_OUTSIDE_MARGIN 1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107 #define GL_INSIDE_MARGIN 2
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108 #define GL_WHITESPACE 3
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110 /* Additional information that may be present in an extent. The idea is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 that fast access is provided to this information, but since (hopefully)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 most extents won't have this set on them, we usually don't need to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113 have this structure around and thus the size of an extent is smaller. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 98
diff changeset
115 typedef struct extent_auxiliary extent_auxiliary;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 struct extent_auxiliary
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118 struct lcrecord_header header;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120 Lisp_Object begin_glyph;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121 Lisp_Object end_glyph;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122 Lisp_Object parent;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 /* We use a weak list here. Originally I didn't do this and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 depended on having the extent's finalization method remove
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125 itself from its parent's children list. This runs into
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 lots and lots of problems though because everything is in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127 a really really bizarre state when an extent's finalization
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 method is called (it happens in sweep_extents() by way of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129 ADDITIONAL_FREE_extent()) and it's extremely difficult to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130 avoid getting hosed by just-freed objects. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
131 Lisp_Object children;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132 Lisp_Object invisible;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 Lisp_Object read_only;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 Lisp_Object mouse_face;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135 #ifdef ENERGIZE
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 Energize_Extent_Data *energize_data;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138 int priority;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 extern struct extent_auxiliary extent_auxiliary_defaults;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 DECLARE_LRECORD (extent_auxiliary, struct extent_auxiliary);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 #define XEXTENT_AUXILIARY(x) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 XRECORD (x, extent_auxiliary, struct extent_auxiliary)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 #define XSETEXTENT_AUXILIARY(x, p) XSETRECORD (x, p, extent_auxiliary)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 #define EXTENT_AUXILIARYP(x) RECORDP (x, extent_auxiliary)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 #define GC_EXTENT_AUXILIARYP(x) GC_RECORDP (x, extent_auxiliary)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149 #define CHECK_EXTENT_AUXILIARY(x) CHECK_RECORD (x, extent_auxiliary)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 #define CONCHECK_EXTENT_AUXILIARY(x) CONCHECK_RECORD (x, extent_auxiliary)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 struct extent_info
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154 struct lcrecord_header header;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 struct extent_list *extents;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 struct stack_of_extents *soe;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158 };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 DECLARE_LRECORD (extent_info, struct extent_info);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161 #define XEXTENT_INFO(x) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 XRECORD (x, extent_info, struct extent_info)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163 #define XSETEXTENT_INFO(x, p) XSETRECORD (x, p, extent_info)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164 #define EXTENT_INFOP(x) RECORDP (x, extent_info)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 #define GC_EXTENT_INFOP(x) GC_RECORDP (x, extent_info)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 #define CHECK_EXTENT_INFO(x) CHECK_RECORD (x, extent_info)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 #define CONCHECK_EXTENT_INFO(x) CONCHECK_RECORD (x, extent_info)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 void flush_cached_extent_info (Lisp_Object extent_info);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171 /* Note that we take pains in all the macros below never to evaluate
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172 the extent argument more than once. This may not be necessary
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 but is much less likely to introduce subtle bugs. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 MAC_DECLARE_EXTERN (EXTENT, MTancestor_extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 MAC_DECLARE_EXTERN (EXTENT, MTaux_extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 MAC_DECLARE_EXTERN (EXTENT, MTplist_extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 MAC_DECLARE_EXTERN (EXTENT, MTensure_extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 MAC_DECLARE_EXTERN (EXTENT, MTset_extent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181 /* extent_ancestor() chases all the parent links until there aren't any
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 more. extent_ancestor_1() does the same thing but it a function;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 the following macro optimizes the most common case. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 #define extent_ancestor(e) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 MAC_BEGIN \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 MAC_DECLARE (EXTENT, MTancestor_extent, e) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 (MTancestor_extent->flags.has_parent ? \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 extent_ancestor_1 (MTancestor_extent) : \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 MTancestor_extent) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 MAC_END
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 /* a "normal" field is one that is stored in the `struct flags' structure
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194 in an extent. an "aux" field is one that is stored in the extent's
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 auxiliary structure.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197 The functions below that have `extent_no_chase' in their name operate
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 on an extent directly (ignoring its parent), and should normally
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 only be used on extents known not to have a parent. The other
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 versions chase down any parent links. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202 #define extent_no_chase_normal_field(e, field) ((e)->flags.field)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 #define extent_no_chase_aux_field(e, field) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205 MAC_BEGIN \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 MAC_DECLARE (EXTENT, MTaux_extent, e) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
207 (MTaux_extent->flags.has_aux ? \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 XEXTENT_AUXILIARY (XCONS (MTaux_extent->plist)->car)->field \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209 : extent_auxiliary_defaults.field) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210 MAC_END
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 #define extent_normal_field(e, field) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 extent_no_chase_normal_field (extent_ancestor (e), field)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215 #define extent_aux_field(e, field) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216 extent_no_chase_aux_field (extent_ancestor (e), field)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 #define ensure_extent_has_auxiliary(e) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219 MAC_BEGIN \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220 MAC_DECLARE (EXTENT, MTensure_extent, e) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221 (MTensure_extent->flags.has_aux ? (void) 0 : \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222 allocate_extent_auxiliary (MTensure_extent)) \
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 98
diff changeset
223 MAC_END
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225 #define set_extent_no_chase_aux_field(e, field, value) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226 MAC_BEGIN \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
227 MAC_DECLARE (EXTENT, MTset_extent, e) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228 ensure_extent_has_auxiliary (MTset_extent) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
229 MAC_SEP \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
230 XEXTENT_AUXILIARY (XCONS (MTset_extent->plist)->car)->field = \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
231 (value) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
232 MAC_END
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
233
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
234 #define set_extent_no_chase_normal_field(e, field, value) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
235 extent_no_chase_normal_field (e, field) = (value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
236
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
237 #define set_extent_aux_field(e, field, value) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
238 set_extent_no_chase_aux_field (extent_ancestor (e), field, value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
239
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
240 #define set_extent_normal_field(e, field, value) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
241 set_extent_ancestor_normal_field (extent_no_chase (e), field, value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
242
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
243 /* The `parent' and `children' fields are not affected by any
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
244 parent links. We don't provide any settors for these fields
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
245 because they need special handling and it's cleaner just to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
246 do this in the particular functions that need to do this. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
247
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
248 #define extent_parent(e) extent_no_chase_aux_field (e, parent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
249 #define extent_children(e) extent_no_chase_aux_field (e, children)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
250
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
251 #define extent_begin_glyph(e) extent_aux_field (e, begin_glyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
252 #define extent_end_glyph(e) extent_aux_field (e, end_glyph)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
253 #define extent_priority(e) extent_aux_field (e, priority)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
254 #define extent_invisible(e) extent_aux_field (e, invisible)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
255 #define extent_read_only(e) extent_aux_field (e, read_only)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
256 #define extent_mouse_face(e) extent_aux_field (e, mouse_face)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
257 #ifdef ENERGIZE
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
258 #define extent_energize_data(e) extent_aux_field (e, energize_data)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
259 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
260
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
261 #define set_extent_begin_glyph(e, value) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
262 set_extent_aux_field (e, begin_glyph, value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
263 #define set_extent_end_glyph(e, value) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
264 set_extent_aux_field (e, end_glyph, value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
265 #define set_extent_priority(e, value) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
266 set_extent_aux_field (e, priority, value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
267 #define set_extent_invisible_1(e, value) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
268 set_extent_aux_field (e, invisible, value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
269 #define set_extent_read_only(e, value) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
270 set_extent_aux_field (e, read_only, value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
271 #define set_extent_mouse_face(e, value) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
272 set_extent_aux_field (e, mouse_face, value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
273 #ifdef ENERGIZE
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
274 #define set_extent_energize_data(e, value) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
275 set_extent_aux_field (e, energize_data, value)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
276 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
277
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
278 #define extent_face(e) extent_normal_field (e, face)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
279 #define extent_begin_glyph_layout(e) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
280 extent_normal_field (e, begin_glyph_layout)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
281 #define extent_end_glyph_layout(e) extent_normal_field (e, end_glyph_layout)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
282 #define extent_start_open_p(e) extent_normal_field (e, start_open)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
283 #define extent_end_open_p(e) extent_normal_field (e, end_open)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
284 #define extent_unique_p(e) extent_normal_field (e, unique)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
285 #define extent_duplicable_p(e) extent_normal_field (e, duplicable)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
286 #define extent_detachable_p(e) extent_normal_field (e, detachable)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
287 #define extent_internal_p(e) extent_normal_field (e, internal)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
288
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
289 #define extent_no_chase_plist_addr(e) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
290 MAC_BEGIN \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
291 MAC_DECLARE (EXTENT, MTplist_extent, e) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
292 (MTplist_extent->flags.has_aux ? \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
293 &XCONS (MTplist_extent->plist)->cdr : \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
294 &MTplist_extent->plist) \
185
3d6bfa290dbd Import from CVS: tag r20-3b19
cvs
parents: 98
diff changeset
295 MAC_END
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
296 #define extent_no_chase_plist(e) (*extent_no_chase_plist_addr (e))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
297
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
298 #define extent_plist_addr(e) extent_no_chase_plist_addr (extent_ancestor (e))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
299 #define extent_plist_slot(e) extent_no_chase_plist (extent_ancestor (e))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
300
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
301 /* flags for map_extents() and friends */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
302 #define ME_END_CLOSED (1 << 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
303 #define ME_START_OPEN (1 << 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
304 #define ME_ALL_EXTENTS_CLOSED (1 << 2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
305 #define ME_ALL_EXTENTS_OPEN (2 << 2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
306 #define ME_ALL_EXTENTS_CLOSED_OPEN (3 << 2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
307 #define ME_ALL_EXTENTS_OPEN_CLOSED (4 << 2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
308 #define ME_ALL_EXTENTS_MASK (7 << 2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
309 #define ME_START_IN_REGION (1 << 5)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
310 #define ME_END_IN_REGION (2 << 5)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
311 #define ME_START_AND_END_IN_REGION (3 << 5)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
312 #define ME_START_OR_END_IN_REGION (4 << 5)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
313 #define ME_IN_REGION_MASK (7 << 5)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
314 #define ME_NEGATE_IN_REGION (1 << 8)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
315 /* the following flags are internal-only */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
316 #define ME_INCLUDE_INTERNAL (1 << 9)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
317 #define ME_MIGHT_THROW (1 << 10)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
318 #define ME_MIGHT_MODIFY_TEXT (1 << 11)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
319 #define ME_MIGHT_MODIFY_EXTENTS (1 << 12)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
320 #define ME_MIGHT_MOVE_SOE (1 << 13)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
321 #define ME_MIGHT_CALL_ELISP (ME_MIGHT_THROW | ME_MIGHT_MODIFY_TEXT | \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
322 ME_MIGHT_MODIFY_EXTENTS | ME_MIGHT_MOVE_SOE)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
323
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
324
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
325 #define EXTENT_LIVE_P(e) (!EQ (extent_object (e), Qt))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
326
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
327 #define CHECK_LIVE_EXTENT(x) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
328 do { CHECK_EXTENT (x); \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
329 if (!EXTENT_LIVE_P (XEXTENT (x))) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
330 dead_wrong_type_argument (Qextent_live_p, (x)); } while (0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
331 #define CONCHECK_LIVE_EXTENT(x) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
332 do { CONCHECK_EXTENT (x); \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
333 if (!EXTENT_LIVE_P (XEXTENT (x))) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
334 x = wrong_type_argument (Qextent_live_p, (x)); } while (0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
335
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
336 extern Lisp_Object Qextent_live_p;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
337
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
338 extern int inside_undo;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
339
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
340 struct extent_fragment *extent_fragment_new (Lisp_Object buffer_or_string,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
341 struct frame *frm);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
342 face_index extent_fragment_update (struct window *w,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
343 struct extent_fragment *ef,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
344 /* Note this is in Bytinds */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
345 Bytind pos);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
346 void extent_fragment_delete (struct extent_fragment *ef);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
347
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
348 extern Lisp_Object Vlast_highlighted_extent;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
349
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
350
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
351 #ifdef emacs /* things other than emacs want the structs */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
352
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
353 /* from alloc.c */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
354 struct extent *allocate_extent (void);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
355
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
356 /* from extents.c */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
357 EXTENT extent_ancestor_1 (EXTENT e);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
358 void allocate_extent_auxiliary (EXTENT ext);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
359 void init_buffer_extents (struct buffer *b);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
360 void uninit_buffer_extents (struct buffer *b);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
361 void map_extents (Bufpos from, Bufpos to, int (*fn) (EXTENT extent,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
362 void * arg),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
363 void *arg, Lisp_Object obj, EXTENT after,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
364 unsigned int flags);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
365
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
366 /* Note the following five functions are NOT in Bufpos's */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
367 void adjust_extents (Lisp_Object object, Memind from,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
368 Memind to, int amount);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
369 void adjust_extents_for_deletion (Lisp_Object object, Bytind from,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
370 Bytind to, int gapsize,
98
0d2f883870bc Import from CVS: tag r20-1b1
cvs
parents: 96
diff changeset
371 int numdel, int movegapsize);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
372 void verify_extent_modification (Lisp_Object object, Bytind from,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
373 Bytind to,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
374 Lisp_Object inhibit_read_only_value);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
375 void process_extents_for_insertion (Lisp_Object object,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
376 Bytind opoint, Bytecount length);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
377 void process_extents_for_deletion (Lisp_Object object, Bytind from,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
378 Bytind to, int destroy_them);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
379
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
380 void set_extent_glyph (EXTENT extent, Lisp_Object glyph, int endp,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
381 unsigned int layout);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
382
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
383 void add_string_extents (Lisp_Object string, struct buffer *buf,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
384 Bytind opoint, Bytecount length);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
385 void splice_in_string_extents (Lisp_Object string, struct buffer *buf,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
386 Bytind opoint, Bytecount length,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
387 Bytecount pos);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
388 void copy_string_extents (Lisp_Object new_string,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
389 Lisp_Object old_string,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
390 Bytecount new_pos, Bytecount old_pos,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
391 Bytecount length);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
392
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
393 void detach_all_extents (Lisp_Object object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
394 void set_extent_endpoints (EXTENT extent, Bytind s, Bytind e,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
395 Lisp_Object object);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
396
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
397 #ifdef ERROR_CHECK_EXTENTS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
398 void sledgehammer_extent_check (Lisp_Object obj);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
399 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
400
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
401 #ifdef MEMORY_USAGE_STATS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
402 int compute_buffer_extent_usage (struct buffer *b,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
403 struct overhead_stats *ovstats);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
404 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
405
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
406 #endif /* emacs */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
407
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
408 #endif /* _XEMACS_EXTENTS_H_ */