428
+ − 1 /* Copyright (c) 1994, 1995 Free Software Foundation.
872
+ − 2 Copyright (c) 1995, 1996, 2002 Ben Wing.
428
+ − 3
+ − 4 This file is part of XEmacs.
+ − 5
+ − 6 XEmacs is free software; you can redistribute it and/or modify it
+ − 7 under the terms of the GNU General Public License as published by the
+ − 8 Free Software Foundation; either version 2, or (at your option) any
+ − 9 later version.
+ − 10
+ − 11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
+ − 12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ − 13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ − 14 for more details.
+ − 15
+ − 16 You should have received a copy of the GNU General Public License
+ − 17 along with XEmacs; see the file COPYING. If not, write to
+ − 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ − 19 Boston, MA 02111-1307, USA. */
+ − 20
+ − 21 /* Synched up with: Not in FSF. */
+ − 22
440
+ − 23 #ifndef INCLUDED_extents_h_
+ − 24 #define INCLUDED_extents_h_
428
+ − 25
+ − 26 DECLARE_LRECORD (extent, struct extent);
+ − 27 #define XEXTENT(x) XRECORD (x, extent, struct extent)
617
+ − 28 #define wrap_extent(p) wrap_record (p, extent)
428
+ − 29 #define EXTENTP(x) RECORDP (x, extent)
+ − 30 #define CHECK_EXTENT(x) CHECK_RECORD (x, extent)
+ − 31 #define CONCHECK_EXTENT(x) CONCHECK_RECORD (x, extent)
+ − 32
872
+ − 33 struct extent_auxiliary;
428
+ − 34
+ − 35 DECLARE_LRECORD (extent_auxiliary, struct extent_auxiliary);
+ − 36 #define XEXTENT_AUXILIARY(x) \
+ − 37 XRECORD (x, extent_auxiliary, struct extent_auxiliary)
617
+ − 38 #define wrap_extent_auxiliary(p) wrap_record (p, extent_auxiliary)
428
+ − 39 #define EXTENT_AUXILIARYP(x) RECORDP (x, extent_auxiliary)
+ − 40 #define CHECK_EXTENT_AUXILIARY(x) CHECK_RECORD (x, extent_auxiliary)
+ − 41 #define CONCHECK_EXTENT_AUXILIARY(x) CONCHECK_RECORD (x, extent_auxiliary)
+ − 42
872
+ − 43 struct extent_info;
428
+ − 44
+ − 45 DECLARE_LRECORD (extent_info, struct extent_info);
+ − 46 #define XEXTENT_INFO(x) XRECORD (x, extent_info, struct extent_info)
617
+ − 47 #define wrap_extent_info(p) wrap_record (p, extent_info)
428
+ − 48 #define EXTENT_INFOP(x) RECORDP (x, extent_info)
+ − 49 #define CHECK_EXTENT_INFO(x) CHECK_RECORD (x, extent_info)
+ − 50 #define CONCHECK_EXTENT_INFO(x) CONCHECK_RECORD (x, extent_info)
+ − 51
3092
+ − 52 #ifdef NEW_GC
+ − 53 struct gap_array_marker;
+ − 54
+ − 55 DECLARE_LRECORD (gap_array_marker, struct gap_array_marker);
+ − 56 #define XGAP_ARRAY_MARKER(x) \
+ − 57 XRECORD (x, gap_array_marker, struct gap_array_marker)
+ − 58 #define wrap_gap_array_marker(p) wrap_record (p, gap_array_marker)
+ − 59 #define GAP_ARRAY_MARKERP(x) RECORDP (x, gap_array_marker)
+ − 60 #define CHECK_GAP_ARRAY_MARKER(x) CHECK_RECORD (x, gap_array_marker)
+ − 61 #define CONCHECK_GAP_ARRAY_MARKER(x) CONCHECK_RECORD (x, gap_array_marker)
+ − 62
+ − 63 struct gap_array;
+ − 64
+ − 65 DECLARE_LRECORD (gap_array, struct gap_array);
+ − 66 #define XGAP_ARRAY(x) XRECORD (x, gap_array, struct gap_array)
+ − 67 #define wrap_gap_array(p) wrap_record (p, gap_array)
+ − 68 #define GAP_ARRAYP(x) RECORDP (x, gap_array)
+ − 69 #define CHECK_GAP_ARRAY(x) CHECK_RECORD (x, gap_array)
+ − 70 #define CONCHECK_GAP_ARRAY(x) CONCHECK_RECORD (x, gap_array)
+ − 71
+ − 72 struct extent_list_marker;
+ − 73
+ − 74 DECLARE_LRECORD (extent_list_marker, struct extent_list_marker);
+ − 75 #define XEXTENT_LIST_MARKER(x) \
+ − 76 XRECORD (x, extent_list_marker, struct extent_list_marker)
+ − 77 #define wrap_extent_list_marker(p) wrap_record (p, extent_list_marker)
+ − 78 #define EXTENT_LIST_MARKERP(x) RECORDP (x, extent_list_marker)
+ − 79 #define CHECK_EXTENT_LIST_MARKER(x) CHECK_RECORD (x, extent_list_marker)
+ − 80 #define CONCHECK_EXTENT_LIST_MARKER(x) CONCHECK_RECORD (x, extent_list_marker)
+ − 81
+ − 82 struct extent_list;
+ − 83
+ − 84 DECLARE_LRECORD (extent_list, struct extent_list);
+ − 85 #define XEXTENT_LIST(x) XRECORD (x, extent_list, struct extent_list)
+ − 86 #define wrap_extent_list(p) wrap_record (p, extent_list)
+ − 87 #define EXTENT_LISTP(x) RECORDP (x, extent_list)
+ − 88 #define CHECK_EXTENT_LIST(x) CHECK_RECORD (x, extent_list)
+ − 89 #define CONCHECK_EXTENT_LIST(x) CONCHECK_RECORD (x, extent_list)
+ − 90
+ − 91 struct stack_of_extents;
+ − 92
+ − 93 DECLARE_LRECORD (stack_of_extents, struct stack_of_extents);
+ − 94 #define XSTACK_OF_EXTENTS(x) \
+ − 95 XRECORD (x, stack_of_extents, struct stack_of_extents)
+ − 96 #define wrap_stack_of_extents(p) wrap_record (p, stack_of_extents)
+ − 97 #define STACK_OF_EXTENTSP(x) RECORDP (x, stack_of_extents)
+ − 98 #define CHECK_STACK_OF_EXTENTS(x) CHECK_RECORD (x, stack_of_extents)
+ − 99 #define CONCHECK_STACK_OF_EXTENTS(x) CONCHECK_RECORD (x, stack_of_extents)
+ − 100 #endif /* NEW_GC */
+ − 101
872
+ − 102 /* the layouts for glyphs (extent->flags.glyph_layout). Must fit in 2 bits. */
+ − 103 typedef enum glyph_layout
826
+ − 104 {
872
+ − 105 GL_TEXT,
+ − 106 GL_OUTSIDE_MARGIN,
+ − 107 GL_INSIDE_MARGIN,
+ − 108 GL_WHITESPACE
+ − 109 } glyph_layout;
428
+ − 110
872
+ − 111 struct extent;
428
+ − 112
872
+ − 113 void set_extent_endpoints (EXTENT extent, Bytexpos s, Bytexpos e,
+ − 114 Lisp_Object object);
428
+ − 115
872
+ − 116
+ − 117 void flush_cached_extent_info (Lisp_Object extent_info);
647
+ − 118
826
+ − 119 void set_extent_glyph (EXTENT extent, Lisp_Object glyph, int endp,
+ − 120 glyph_layout layout);
+ − 121
428
+ − 122
+ − 123 /* flags for map_extents() and friends */
+ − 124 #define ME_END_CLOSED (1 << 0)
+ − 125 #define ME_START_OPEN (1 << 1)
+ − 126 #define ME_ALL_EXTENTS_CLOSED (1 << 2)
+ − 127 #define ME_ALL_EXTENTS_OPEN (2 << 2)
+ − 128 #define ME_ALL_EXTENTS_CLOSED_OPEN (3 << 2)
+ − 129 #define ME_ALL_EXTENTS_OPEN_CLOSED (4 << 2)
+ − 130 #define ME_ALL_EXTENTS_MASK (7 << 2)
+ − 131 #define ME_START_IN_REGION (1 << 5)
+ − 132 #define ME_END_IN_REGION (2 << 5)
+ − 133 #define ME_START_AND_END_IN_REGION (3 << 5)
+ − 134 #define ME_START_OR_END_IN_REGION (4 << 5)
+ − 135 #define ME_IN_REGION_MASK (7 << 5)
+ − 136 #define ME_NEGATE_IN_REGION (1 << 8)
+ − 137 /* the following flags are internal-only */
+ − 138 #define ME_INCLUDE_INTERNAL (1 << 9)
+ − 139 #define ME_MIGHT_THROW (1 << 10)
+ − 140 #define ME_MIGHT_MODIFY_TEXT (1 << 11)
+ − 141 #define ME_MIGHT_MODIFY_EXTENTS (1 << 12)
+ − 142 #define ME_MIGHT_MOVE_SOE (1 << 13)
+ − 143 #define ME_MIGHT_CALL_ELISP (ME_MIGHT_THROW | ME_MIGHT_MODIFY_TEXT | \
+ − 144 ME_MIGHT_MODIFY_EXTENTS | ME_MIGHT_MOVE_SOE)
+ − 145
+ − 146
+ − 147 extern int inside_undo;
442
+ − 148 extern int in_modeline_generation;
428
+ − 149
872
+ − 150 EXFUN (Fextent_at, 5);
+ − 151 EXFUN (Fextent_property, 3);
+ − 152 EXFUN (Fput_text_property, 5);
+ − 153
+ − 154 EXFUN (Fdetach_extent, 1);
+ − 155 EXFUN (Fextent_end_position, 1);
+ − 156 EXFUN (Fextent_object, 1);
+ − 157 EXFUN (Fextent_properties, 1);
+ − 158 EXFUN (Fextent_start_position, 1);
+ − 159 EXFUN (Fget_char_property, 4);
+ − 160 EXFUN (Fmake_extent, 3);
+ − 161 EXFUN (Fnext_extent_change, 2);
+ − 162 EXFUN (Fprevious_extent_change, 2);
2506
+ − 163 EXFUN (Fprevious_single_char_property_change, 4);
872
+ − 164 EXFUN (Fset_extent_endpoints, 4);
+ − 165 EXFUN (Fset_extent_parent, 2);
+ − 166 EXFUN (Fset_extent_property, 3);
+ − 167
+ − 168 enum extent_at_flag
+ − 169 {
+ − 170 EXTENT_AT_DEFAULT = 0,
+ − 171 EXTENT_AT_AFTER = 0,
+ − 172 EXTENT_AT_BEFORE,
+ − 173 EXTENT_AT_AT
+ − 174 };
+ − 175
+ − 176 Bytexpos extent_endpoint_byte (EXTENT extent, int endp);
+ − 177 Charxpos extent_endpoint_char (EXTENT extent, int endp);
2506
+ − 178 Bytexpos next_previous_single_property_change (Bytexpos pos, Lisp_Object prop,
+ − 179 Lisp_Object object,
+ − 180 Bytexpos limit,
+ − 181 Boolint next,
+ − 182 Boolint text_props_only);
872
+ − 183 Lisp_Object get_char_property (Bytexpos position, Lisp_Object prop,
+ − 184 Lisp_Object object, enum extent_at_flag fl,
+ − 185 int text_props_only);
+ − 186 void adjust_extents (Lisp_Object object, Memxpos from,
+ − 187 Memxpos to, int amount);
+ − 188 void adjust_extents_for_deletion (Lisp_Object object, Bytexpos from,
+ − 189 Bytexpos to, int gapsize,
+ − 190 int numdel, int movegapsize);
+ − 191 void verify_extent_modification (Lisp_Object object, Bytexpos from,
+ − 192 Bytexpos to,
+ − 193 Lisp_Object inhibit_read_only_value);
+ − 194 void process_extents_for_insertion (Lisp_Object object,
+ − 195 Bytexpos opoint, Bytecount length);
+ − 196 void process_extents_for_deletion (Lisp_Object object, Bytexpos from,
+ − 197 Bytexpos to, int destroy_them);
+ − 198 /* Note the following function is in Charbpos's */
+ − 199 void report_extent_modification (Lisp_Object buffer, Charbpos start,
+ − 200 Charbpos end, int afterp);
+ − 201 void add_string_extents (Lisp_Object string, struct buffer *buf,
+ − 202 Bytexpos opoint, Bytecount length);
+ − 203 void splice_in_string_extents (Lisp_Object string, struct buffer *buf,
+ − 204 Bytexpos opoint, Bytecount length,
+ − 205 Bytecount pos);
+ − 206 void copy_string_extents (Lisp_Object new_string,
+ − 207 Lisp_Object old_string,
+ − 208 Bytecount new_pos, Bytecount old_pos,
+ − 209 Bytecount length);
+ − 210 void detach_all_extents (Lisp_Object object);
+ − 211 Lisp_Object extent_at (Bytexpos position, Lisp_Object object,
+ − 212 Lisp_Object property, EXTENT before,
+ − 213 enum extent_at_flag at_flag, int all_extents);
+ − 214
+ − 215
428
+ − 216 struct extent_fragment *extent_fragment_new (Lisp_Object buffer_or_string,
+ − 217 struct frame *frm);
+ − 218 face_index extent_fragment_update (struct window *w,
+ − 219 struct extent_fragment *ef,
826
+ − 220 Bytexpos pos, Lisp_Object last_glyph);
428
+ − 221 void extent_fragment_delete (struct extent_fragment *ef);
+ − 222
+ − 223 /* from alloc.c */
+ − 224 struct extent *allocate_extent (void);
+ − 225
+ − 226 void allocate_extent_auxiliary (EXTENT ext);
+ − 227 void init_buffer_extents (struct buffer *b);
+ − 228 void uninit_buffer_extents (struct buffer *b);
+ − 229
+ − 230 #ifdef ERROR_CHECK_EXTENTS
+ − 231 void sledgehammer_extent_check (Lisp_Object obj);
+ − 232 #endif
+ − 233
+ − 234 #ifdef MEMORY_USAGE_STATS
+ − 235 int compute_buffer_extent_usage (struct buffer *b,
+ − 236 struct overhead_stats *ovstats);
+ − 237 #endif
+ − 238
440
+ − 239 #endif /* INCLUDED_extents_h_ */