annotate src/insdel.c @ 21228:31a2889105f0

(del_range_2): Use adjust_markers_for_record_delete. (adjust_markers_for_delete): Delete unused local coming_gap_size. (adjust_markers_for_record_delete): New function. (insert_1_both, insert_from_string_1, insert_from_buffer_1) (adjust_after_replace, replace_range): Use adjust_markers_for_record_delete.
author Richard M. Stallman <rms@gnu.org>
date Fri, 20 Mar 1998 06:10:36 +0000
parents b4e925500a71
children 90e90245e679
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Buffer insertion/deletion and gap motion for GNU Emacs.
20708
ed9ed828415e Update copyright year.
Richard M. Stallman <rms@gnu.org>
parents: 20642
diff changeset
2 Copyright (C) 1985, 86, 93, 94, 95, 97, 1998 Free Software Foundation, Inc.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
12244
ac7375e60931 Update GPL to version 2.
Karl Heuer <kwzh@gnu.org>
parents: 11923
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
19 Boston, MA 02111-1307, USA. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4078
diff changeset
22 #include <config.h>
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include "lisp.h"
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
24 #include "intervals.h"
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include "buffer.h"
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
26 #include "charset.h"
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #include "window.h"
2480
6f4b9c548425 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
28 #include "blockinput.h"
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
30 #ifndef NULL
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
31 #define NULL 0
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
32 #endif
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
33
11703
3c5b974e1c10 (make_gap): Make this new error check also check exceeding VALBITS.
Richard M. Stallman <rms@gnu.org>
parents: 11691
diff changeset
34 #define min(x, y) ((x) < (y) ? (x) : (y))
3c5b974e1c10 (make_gap): Make this new error check also check exceeding VALBITS.
Richard M. Stallman <rms@gnu.org>
parents: 11691
diff changeset
35
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
36 static void insert_from_string_1 P_ ((Lisp_Object, int, int, int, int, int, int));
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
37 static void insert_from_buffer_1 ();
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
38 static void gap_left P_ ((int, int, int));
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
39 static void gap_right P_ ((int, int));
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
40 static void adjust_markers_gap_motion P_ ((int, int, int));
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
41 static void adjust_markers_for_insert P_ ((int, int, int, int, int, int, int));
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
42 static void adjust_markers_for_delete P_ ((int, int, int, int));
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
43 static void adjust_markers_for_record_delete P_ ((int, int, int, int));
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
44 static void adjust_point P_ ((int, int));
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
45
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
46 Lisp_Object Fcombine_after_change_execute ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
47
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
48 /* Non-nil means don't call the after-change-functions right away,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
49 just record an element in Vcombine_after_change_calls_list. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
50 Lisp_Object Vcombine_after_change_calls;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
51
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
52 /* List of elements of the form (BEG-UNCHANGED END-UNCHANGED CHANGE-AMOUNT)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
53 describing changes which happened while combine_after_change_calls
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
54 was nonzero. We use this to decide how to call them
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
55 once the deferral ends.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
56
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
57 In each element.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
58 BEG-UNCHANGED is the number of chars before the changed range.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
59 END-UNCHANGED is the number of chars after the changed range,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
60 and CHANGE-AMOUNT is the number of characters inserted by the change
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
61 (negative for a deletion). */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
62 Lisp_Object combine_after_change_list;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
63
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
64 /* Buffer which combine_after_change_list is about. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
65 Lisp_Object combine_after_change_buffer;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
66
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
67 /* Move gap to position CHARPOS.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
68 Note that this can quit! */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
69
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
70 void
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
71 move_gap (charpos)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
72 int charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
73 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
74 move_gap_both (charpos, charpos_to_bytepos (charpos));
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
75 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
76
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
77 /* Move gap to byte position BYTEPOS, which is also char position CHARPOS.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 Note that this can quit! */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
80 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
81 move_gap_both (charpos, bytepos)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
82 int charpos, bytepos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
84 if (bytepos < GPT_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
85 gap_left (charpos, bytepos, 0);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
86 else if (bytepos > GPT_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
87 gap_right (charpos, bytepos);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
90 /* Move the gap to a position less than the current GPT.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
91 BYTEPOS describes the new position as a byte position,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
92 and CHARPOS is the corresponding char position.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 If NEWGAP is nonzero, then don't update beg_unchanged and end_unchanged. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
95 static void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
96 gap_left (charpos, bytepos, newgap)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
97 register int charpos, bytepos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 int newgap;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 register unsigned char *to, *from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 register int i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 int new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 if (!newgap)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 {
16194
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
106 if (unchanged_modified == MODIFF
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
107 && overlay_unchanged_modified == OVERLAY_MODIFF)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
109 beg_unchanged = charpos - BEG;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
110 end_unchanged = Z - charpos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 if (Z - GPT < end_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 end_unchanged = Z - GPT;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
116 if (charpos < beg_unchanged)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
117 beg_unchanged = charpos - BEG;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
121 i = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 to = GAP_END_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 from = GPT_ADDR;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
124 new_s1 = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 /* Now copy the characters. To move the gap down,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 copy characters up. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 while (1)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 /* I gets number of characters left to copy. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
132 i = new_s1 - bytepos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 if (i == 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 /* If a quit is requested, stop copying now.
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
136 Change BYTEPOS to be where we have actually moved the gap to. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 if (QUITP)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
139 bytepos = new_s1;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
140 charpos = BYTE_TO_CHAR (bytepos);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 /* Move at most 32000 chars before checking again for a quit. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 if (i > 32000)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 i = 32000;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 #ifdef GAP_USE_BCOPY
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 if (i >= 128
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 /* bcopy is safe if the two areas of memory do not overlap
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 or on systems where bcopy is always safe for moving upward. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 && (BCOPY_UPWARD_SAFE
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 || to - from >= 128))
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 /* If overlap is not safe, avoid it by not moving too many
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 characters at once. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 if (!BCOPY_UPWARD_SAFE && i > to - from)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 i = to - from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 new_s1 -= i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 from -= i, to -= i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 bcopy (from, to, i);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 #endif
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 new_s1 -= i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 while (--i >= 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 *--to = *--from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
170 /* Adjust markers, and buffer data structure, to put the gap at BYTEPOS.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
171 BYTEPOS is where the loop above stopped, which may be what was specified
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 or may be where a quit was detected. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
173 adjust_markers_gap_motion (bytepos, GPT_BYTE, GAP_SIZE);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
174 GPT_BYTE = bytepos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
175 GPT = charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
176 if (bytepos < charpos)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
177 abort ();
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
178 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 QUIT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
182 /* Move the gap to a position greater than than the current GPT.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
183 BYTEPOS describes the new position as a byte position,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
184 and CHARPOS is the corresponding char position. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
185
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
186 static void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
187 gap_right (charpos, bytepos)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
188 register int charpos, bytepos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 register unsigned char *to, *from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 register int i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 int new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193
16194
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
194 if (unchanged_modified == MODIFF
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
195 && overlay_unchanged_modified == OVERLAY_MODIFF)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
197 beg_unchanged = charpos - BEG;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
198 end_unchanged = Z - charpos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
202 if (Z - charpos - 1 < end_unchanged)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
203 end_unchanged = Z - charpos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 if (GPT - BEG < beg_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 beg_unchanged = GPT - BEG;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
208 i = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 from = GAP_END_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 to = GPT_ADDR;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
211 new_s1 = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 /* Now copy the characters. To move the gap up,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 copy characters down. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 while (1)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 /* I gets number of characters left to copy. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
219 i = bytepos - new_s1;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 if (i == 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 /* If a quit is requested, stop copying now.
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
223 Change BYTEPOS to be where we have actually moved the gap to. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 if (QUITP)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
226 bytepos = new_s1;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
227 charpos = BYTE_TO_CHAR (bytepos);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 /* Move at most 32000 chars before checking again for a quit. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 if (i > 32000)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 i = 32000;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 #ifdef GAP_USE_BCOPY
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 if (i >= 128
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 /* bcopy is safe if the two areas of memory do not overlap
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 or on systems where bcopy is always safe for moving downward. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 && (BCOPY_DOWNWARD_SAFE
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 || from - to >= 128))
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 /* If overlap is not safe, avoid it by not moving too many
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 characters at once. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 if (!BCOPY_DOWNWARD_SAFE && i > from - to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 i = from - to;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 new_s1 += i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 bcopy (from, to, i);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 from += i, to += i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 #endif
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 new_s1 += i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 while (--i >= 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 *to++ = *from++;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
257 adjust_markers_gap_motion (GPT_BYTE + GAP_SIZE, bytepos + GAP_SIZE,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
258 - GAP_SIZE);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
259 GPT = charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
260 GPT_BYTE = bytepos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
261 if (bytepos < charpos)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
262 abort ();
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
263 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 QUIT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 }
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
266
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
267 /* Add AMOUNT to the byte position of every marker in the current buffer
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
268 whose current byte position is between FROM (exclusive) and TO (inclusive).
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
269
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 Also, any markers past the outside of that interval, in the direction
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 of adjustment, are first moved back to the near end of the interval
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
272 and then adjusted by AMOUNT.
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
273
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
274 When the latter adjustment is done, if AMOUNT is negative,
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
275 we record the adjustment for undo. (This case happens only for
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
276 deletion.)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
277
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
278 The markers' character positions are not altered,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
279 because gap motion does not affect character positions. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
280
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
281 int adjust_markers_test;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
283 static void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
284 adjust_markers_gap_motion (from, to, amount)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 register int from, to, amount;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 {
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
287 /* Now that a marker has a bytepos, not counting the gap,
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
288 nothing needs to be done here. */
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
289 #if 0
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 Lisp_Object marker;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 register struct Lisp_Marker *m;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 register int mpos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
294 marker = BUF_MARKERS (current_buffer);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
296 while (!NILP (marker))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 m = XMARKER (marker);
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
299 mpos = m->bytepos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 if (amount > 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 if (mpos > to && mpos < to + amount)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
303 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
304 if (adjust_markers_test)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
305 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
306 mpos = to + amount;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
307 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 {
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
311 /* Here's the case where a marker is inside text being deleted.
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
312 AMOUNT can be negative for gap motion, too,
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
313 but then this range contains no markers. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 if (mpos > from + amount && mpos <= from)
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
315 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
316 if (adjust_markers_test)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
317 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
318 mpos = from + amount;
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
319 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 if (mpos > from && mpos <= to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 mpos += amount;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 m->bufpos = mpos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 marker = m->chain;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 }
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
326 #endif
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 }
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
328
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
329 /* Adjust all markers for a deletion
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
330 whose range in bytes is FROM_BYTE to TO_BYTE.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
331 The range in charpos is FROM to TO.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
332
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
333 This function assumes that the gap is adjacent to
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
334 or inside of the range being deleted. */
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
335
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
336 static void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
337 adjust_markers_for_delete (from, from_byte, to, to_byte)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
338 register int from, from_byte, to, to_byte;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
339 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
340 Lisp_Object marker;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
341 register struct Lisp_Marker *m;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
342 register int charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
343
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
344 marker = BUF_MARKERS (current_buffer);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
345
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
346 while (!NILP (marker))
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
347 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
348 m = XMARKER (marker);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
349 charpos = m->charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
350
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
351 if (charpos > Z)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
352 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
353
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
354 /* If the marker is after the deletion,
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
355 relocate by number of chars / bytes deleted. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
356 if (charpos > to)
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
357 {
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
358 m->charpos -= to - from;
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
359 m->bytepos -= to_byte - from_byte;
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
360 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
361
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
362 /* Here's the case where a marker is inside text being deleted. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
363 else if (charpos > from)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
364 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
365 record_marker_adjustment (marker, from - charpos);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
366 m->charpos = from;
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
367 m->bytepos = from_byte;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
368 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
369
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
370 marker = m->chain;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
371 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
372 }
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
373
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
374 /* Adjust all markers for calling record_delete for combining bytes.
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
375 whose range in bytes is FROM_BYTE to TO_BYTE.
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
376 The range in charpos is FROM to TO. */
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
377
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
378 static void
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
379 adjust_markers_for_record_delete (from, from_byte, to, to_byte)
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
380 register int from, from_byte, to, to_byte;
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
381 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
382 Lisp_Object marker;
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
383 register struct Lisp_Marker *m;
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
384 register int charpos;
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
385
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
386 marker = BUF_MARKERS (current_buffer);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
387
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
388 while (!NILP (marker))
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
389 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
390 m = XMARKER (marker);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
391 charpos = m->charpos;
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
392
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
393 /* If the marker is after the deletion,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
394 relocate by number of chars / bytes deleted. */
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
395 if (charpos > to)
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
396 ;
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
397 /* Here's the case where a marker is inside text being deleted. */
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
398 else if (charpos > from)
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
399 record_marker_adjustment (marker, from - charpos);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
400
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
401 marker = m->chain;
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
402 }
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
403 }
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
404
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
405 /* Adjust markers for an insertion that stretches from FROM / FROM_BYTE
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
406 to TO / TO_BYTE. We have to relocate the charpos of every marker
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
407 that points after the insertion (but not their bytepos).
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
408
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
409 COMBINED_BEFORE_BYTES is the number of bytes at the start of the insertion
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
410 that combine into one character with the text before the insertion.
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
411 COMBINED_AFTER_BYTES is the number of bytes after the insertion
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
412 that combine into one character with the last inserted bytes.
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
413
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
414 When a marker points at the insertion point,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
415 we advance it if either its insertion-type is t
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
416 or BEFORE_MARKERS is true. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
417
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
418 static void
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
419 adjust_markers_for_insert (from, from_byte, to, to_byte,
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
420 combined_before_bytes, combined_after_bytes,
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
421 before_markers)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
422 register int from, from_byte, to, to_byte;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
423 int combined_before_bytes, combined_after_bytes, before_markers;
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
424 {
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
425 Lisp_Object marker;
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
426 int adjusted = 0;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
427 int nchars = to - from;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
428 int nbytes = to_byte - from_byte;
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
429
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
430 marker = BUF_MARKERS (current_buffer);
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
431
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
432 while (!NILP (marker))
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
433 {
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
434 register struct Lisp_Marker *m = XMARKER (marker);
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
435
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
436 /* In a single-byte buffer, a marker's two positions must be equal.
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
437 (If this insertion is going to combine characters, Z will
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
438 become different from Z_BYTE, but they might be the same now.
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
439 If so, the two OLD positions of the marker should be equal.) */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
440 if (Z == Z_BYTE)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
441 {
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
442 if (m->charpos != m->bytepos)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
443 abort ();
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
444 }
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
445
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
446 if (m->bytepos == from_byte)
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
447 {
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
448 if (m->insertion_type || before_markers)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
449 {
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
450 m->bytepos += nbytes + combined_after_bytes;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
451 m->charpos += nchars + !!combined_after_bytes;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
452 /* Point the marker before the combined character,
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
453 so that undoing the insertion puts it back where it was. */
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
454 if (combined_after_bytes)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
455 DEC_BOTH (m->charpos, m->bytepos);
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
456 if (m->insertion_type)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
457 adjusted = 1;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
458 }
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
459 else if (combined_before_bytes)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
460 {
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
461 /* This marker doesn't "need relocation",
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
462 but don't leave it pointing in the middle of a character.
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
463 Point the marker after the combined character,
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
464 so that undoing the insertion puts it back where it was. */
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
465
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
466 /* Here we depend on the fact that the gap is after
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
467 all of the combining bytes that we are going to skip over. */
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
468 DEC_BOTH (m->charpos, m->bytepos);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
469 INC_BOTH (m->charpos, m->bytepos);
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
470 }
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
471 }
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
472 /* If a marker was pointing into the combining bytes
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
473 after the insertion, don't leave it there
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
474 in the middle of a character. */
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
475 else if (combined_after_bytes && m->bytepos >= from_byte
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
476 && m->bytepos < from_byte + combined_after_bytes)
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
477 {
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
478 /* Put it after the combining bytes. */
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
479 m->bytepos = to_byte + combined_after_bytes;
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
480 m->charpos = to + 1;
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
481 /* Now move it back before the combined character,
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
482 so that undoing the insertion will put it where it was. */
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
483 DEC_BOTH (m->charpos, m->bytepos);
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
484 }
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
485 else if (m->bytepos > from_byte)
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
486 {
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
487 m->bytepos += nbytes;
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
488 m->charpos += nchars;
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
489 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
490
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
491 marker = m->chain;
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
492 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
493
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
494 /* Adjusting only markers whose insertion-type is t may result in
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
495 disordered overlays in the slot `overlays_before'. */
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
496 if (adjusted)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
497 fix_overlays_before (current_buffer, from, to);
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
498 }
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
499
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
500 /* Adjust point for an insertion of NBYTES bytes, which are NCHARS characters.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
501
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
502 This is used only when the value of point changes due to an insert
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
503 or delete; it does not represent a conceptual change in point as a
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
504 marker. In particular, point is not crossing any interval
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
505 boundaries, so there's no need to use the usual SET_PT macro. In
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
506 fact it would be incorrect to do so, because either the old or the
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
507 new value of point is out of sync with the current set of
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
508 intervals. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
509
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
510 static void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
511 adjust_point (nchars, nbytes)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
512 int nchars, nbytes;
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
513 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
514 BUF_PT (current_buffer) += nchars;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
515 BUF_PT_BYTE (current_buffer) += nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
516
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
517 /* In a single-byte buffer, the two positions must be equal. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
518 if (ZV == ZV_BYTE
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
519 && PT != PT_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
520 abort ();
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
521 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
523 /* Make the gap NBYTES_ADDED bytes longer. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
525 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
526 make_gap (nbytes_added)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
527 int nbytes_added;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 unsigned char *result;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 Lisp_Object tem;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 int real_gap_loc;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
532 int real_gap_loc_byte;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 int old_gap_size;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 /* If we have to get more space, get enough to last a while. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
536 nbytes_added += 2000;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537
11691
ca7058c74ef3 (make_gap): Don't allow buffer size that won't fit in int.
Richard M. Stallman <rms@gnu.org>
parents: 11657
diff changeset
538 /* Don't allow a buffer size that won't fit in an int
ca7058c74ef3 (make_gap): Don't allow buffer size that won't fit in int.
Richard M. Stallman <rms@gnu.org>
parents: 11657
diff changeset
539 even if it will fit in a Lisp integer.
ca7058c74ef3 (make_gap): Don't allow buffer size that won't fit in int.
Richard M. Stallman <rms@gnu.org>
parents: 11657
diff changeset
540 That won't work because so many places use `int'. */
ca7058c74ef3 (make_gap): Don't allow buffer size that won't fit in int.
Richard M. Stallman <rms@gnu.org>
parents: 11657
diff changeset
541
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
542 if (Z_BYTE - BEG_BYTE + GAP_SIZE + nbytes_added
13363
941c37982f37 (BITS_PER_SHORT, BITS_PER_INT, BITS_PER_LONG):
Karl Heuer <kwzh@gnu.org>
parents: 13026
diff changeset
543 >= ((unsigned) 1 << (min (BITS_PER_INT, VALBITS) - 1)))
11703
3c5b974e1c10 (make_gap): Make this new error check also check exceeding VALBITS.
Richard M. Stallman <rms@gnu.org>
parents: 11691
diff changeset
544 error ("Buffer exceeds maximum size");
11691
ca7058c74ef3 (make_gap): Don't allow buffer size that won't fit in int.
Richard M. Stallman <rms@gnu.org>
parents: 11657
diff changeset
545
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2050
diff changeset
546 BLOCK_INPUT;
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
547 /* We allocate extra 1-byte `\0' at the tail for anchoring a search. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
548 result = BUFFER_REALLOC (BEG_ADDR, (Z_BYTE - BEG_BYTE
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
549 + GAP_SIZE + nbytes_added + 1));
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2050
diff changeset
550
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 if (result == 0)
9391
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
552 {
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
553 UNBLOCK_INPUT;
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
554 memory_full ();
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
555 }
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
556
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
557 /* We can't unblock until the new address is properly stored. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 BEG_ADDR = result;
9391
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
559 UNBLOCK_INPUT;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 /* Prevent quitting in move_gap. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 tem = Vinhibit_quit;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 Vinhibit_quit = Qt;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 real_gap_loc = GPT;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
566 real_gap_loc_byte = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 old_gap_size = GAP_SIZE;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569 /* Call the newly allocated space a gap at the end of the whole space. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 GPT = Z + GAP_SIZE;
20574
928b9aff1e64 (make_gap): Set GPT_BYTE along with GPT.
Richard M. Stallman <rms@gnu.org>
parents: 20568
diff changeset
571 GPT_BYTE = Z_BYTE + GAP_SIZE;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
572 GAP_SIZE = nbytes_added;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 /* Move the new gap down to be consecutive with the end of the old one.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 This adjusts the markers properly too. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
576 gap_left (real_gap_loc + old_gap_size, real_gap_loc_byte + old_gap_size, 1);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 /* Now combine the two into one large gap. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 GAP_SIZE += old_gap_size;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 GPT = real_gap_loc;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
581 GPT_BYTE = real_gap_loc_byte;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
583 /* Put an anchor. */
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
584 *(Z_ADDR) = 0;
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
585
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 Vinhibit_quit = tem;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
589 /* Copy NBYTES bytes of text from FROM_ADDR to TO_ADDR.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
590 FROM_MULTIBYTE says whether the incoming text is multibyte.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
591 TO_MULTIBYTE says whether to store the text as multibyte.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
592 If FROM_MULTIBYTE != TO_MULTIBYTE, we convert.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
593
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
594 Return the number of bytes stored at TO_ADDR. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
595
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
596 int
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
597 copy_text (from_addr, to_addr, nbytes,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
598 from_multibyte, to_multibyte)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
599 unsigned char *from_addr;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
600 unsigned char *to_addr;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
601 int nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
602 int from_multibyte, to_multibyte;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
603 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
604 if (from_multibyte == to_multibyte)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
605 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
606 bcopy (from_addr, to_addr, nbytes);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
607 return nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
608 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
609 else if (from_multibyte)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
610 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
611 int nchars = 0;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
612 int bytes_left = nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
613
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
614 /* Convert multibyte to single byte. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
615 while (bytes_left > 0)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
616 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
617 int thislen, c;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
618 c = STRING_CHAR_AND_LENGTH (from_addr, bytes_left, thislen);
20835
f9fafa0336af (copy_text): When copying from multibyte to unibyte, do
Kenichi Handa <handa@m17n.org>
parents: 20725
diff changeset
619 *to_addr++ = SINGLE_BYTE_CHAR_P (c) ? c : (c & 0177) + 0200;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
620 from_addr += thislen;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
621 bytes_left--;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
622 nchars++;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
623 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
624 return nchars;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
625 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
626 else
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
627 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
628 unsigned char *initial_to_addr = to_addr;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
629
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
630 /* Convert single-byte to multibyte. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
631 while (nbytes > 0)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
632 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
633 int c = *from_addr++;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
634 unsigned char workbuf[4], *str;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
635 int len;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
636
21037
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
637 if (c >= 0240 && c < 0400)
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
638 {
21037
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
639 c = unibyte_char_to_multibyte (c);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
640 len = CHAR_STRING (c, workbuf, str);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
641 bcopy (str, to_addr, len);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
642 to_addr += len;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
643 nbytes--;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
644 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
645 else
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
646 /* Special case for speed. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
647 *to_addr++ = c, nbytes--;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
648 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
649 return to_addr - initial_to_addr;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
650 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
651 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
652
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
653 /* Return the number of bytes it would take
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
654 to convert some single-byte text to multibyte.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
655 The single-byte text consists of NBYTES bytes at PTR. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
656
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
657 int
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
658 count_size_as_multibyte (ptr, nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
659 unsigned char *ptr;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
660 int nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
661 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
662 int i;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
663 int outgoing_nbytes = 0;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
664
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
665 for (i = 0; i < nbytes; i++)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
666 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
667 unsigned int c = *ptr++;
21037
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
668
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
669 if (c < 0240)
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
670 outgoing_nbytes++;
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
671 else
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
672 {
21037
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
673 c = unibyte_char_to_multibyte (c);
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
674 outgoing_nbytes += XINT (Fchar_bytes (make_number (c)));
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
675 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
676 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
677
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
678 return outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
679 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
680
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681 /* Insert a string of specified length before point.
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
682 This function judges multibyteness based on
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
683 enable_multibyte_characters in the current buffer;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
684 it never converts between single-byte and multibyte.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
685
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
686 DO NOT use this for the contents of a Lisp string or a Lisp buffer!
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
687 prepare_to_modify_buffer could relocate the text. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
689 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
690 insert (string, nbytes)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 register unsigned char *string;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
692 register nbytes;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
694 if (nbytes > 0)
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
695 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
696 int opoint = PT;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
697 insert_1 (string, nbytes, 0, 1, 0);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
698 signal_after_change (opoint, 0, PT - opoint);
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
699 }
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
700 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
702 /* Likewise, but inherit text properties from neighboring characters. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
703
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
704 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
705 insert_and_inherit (string, nbytes)
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
706 register unsigned char *string;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
707 register nbytes;
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
708 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
709 if (nbytes > 0)
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
710 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
711 int opoint = PT;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
712 insert_1 (string, nbytes, 1, 1, 0);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
713 signal_after_change (opoint, 0, PT - opoint);
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
714 }
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
715 }
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
716
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
717 /* Insert the character C before point. Do not inherit text properties. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 void
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720 insert_char (c)
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
721 int c;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722 {
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
723 unsigned char workbuf[4], *str;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
724 int len;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
725
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
726 if (! NILP (current_buffer->enable_multibyte_characters))
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
727 len = CHAR_STRING (c, workbuf, str);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
728 else
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
729 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
730 len = 1;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
731 workbuf[0] = c;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
732 str = workbuf;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
733 }
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
734
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
735 insert (str, len);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
738 /* Insert the null-terminated string S before point. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 void
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 insert_string (s)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 char *s;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744 insert (s, strlen (s));
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 /* Like `insert' except that all markers pointing at the place where
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 the insertion happens are adjusted to point after it.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 Don't use this function to insert part of a Lisp string,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750 since gc could happen and relocate it. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
752 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
753 insert_before_markers (string, nbytes)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 unsigned char *string;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
755 register int nbytes;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
757 if (nbytes > 0)
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
758 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
759 int opoint = PT;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
760
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
761 insert_1 (string, nbytes, 0, 1, 1);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
762 signal_after_change (opoint, 0, PT - opoint);
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
763 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
764 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
765
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
766 /* Likewise, but inherit text properties from neighboring characters. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
767
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
768 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
769 insert_before_markers_and_inherit (string, nbytes)
8668
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
770 unsigned char *string;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
771 register int nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
772 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
773 if (nbytes > 0)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
774 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
775 int opoint = PT;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
776
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
777 insert_1 (string, nbytes, 1, 1, 1);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
778 signal_after_change (opoint, 0, PT - opoint);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
779 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
780 }
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
781
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
782 /* Subroutine used by the insert functions above. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
783
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
784 void
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
785 insert_1 (string, nbytes, inherit, prepare, before_markers)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
786 register unsigned char *string;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
787 register int nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
788 int inherit, prepare, before_markers;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
789 {
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
790 insert_1_both (string, chars_in_text (string, nbytes), nbytes,
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
791 inherit, prepare, before_markers);
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
792 }
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
793
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
794 /* See if the bytes before POS/POS_BYTE combine with bytes
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
795 at the start of STRING to form a single character.
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
796 If so, return the number of bytes at the start of STRING
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
797 which combine in this way. Otherwise, return 0. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
798
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
799 int
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
800 count_combining_before (string, length, pos, pos_byte)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
801 unsigned char *string;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
802 int length;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
803 int pos, pos_byte;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
804 {
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
805 int opos = pos, opos_byte = pos_byte;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
806 int c;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
807 unsigned char *p = string;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
808
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
809 if (NILP (current_buffer->enable_multibyte_characters))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
810 return 0;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
811 if (length == 0 || CHAR_HEAD_P (*string))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
812 return 0;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
813 if (pos == BEGV)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
814 return 0;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
815 c = FETCH_BYTE (pos_byte - 1);
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
816 if (ASCII_BYTE_P (c))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
817 return 0;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
818 DEC_BOTH (pos, pos_byte);
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
819 c = FETCH_BYTE (pos_byte);
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
820 if (! BASE_LEADING_CODE_P (c))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
821 return 0;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
822
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
823 /* We have a combination situation.
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
824 Count the bytes at STRING that will combine. */
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
825 while (!CHAR_HEAD_P (*p) && p < string + length)
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
826 p++;
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
827
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
828 return p - string;
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
829 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
830
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
831 /* See if the bytes after POS/POS_BYTE combine with bytes
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
832 at the end of STRING to form a single character.
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
833 If so, return the number of bytes after POS/POS_BYTE
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
834 which combine in this way. Otherwise, return 0. */
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
835
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
836 int
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
837 count_combining_after (string, length, pos, pos_byte)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
838 unsigned char *string;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
839 int length;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
840 int pos, pos_byte;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
841 {
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
842 int opos = pos, opos_byte = pos_byte;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
843 int i;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
844 int c;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
845
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
846 if (NILP (current_buffer->enable_multibyte_characters))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
847 return 0;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
848 if (length == 0 || ASCII_BYTE_P (string[length - 1]))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
849 return 0;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
850 i = length - 1;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
851 while (i > 0 && ! CHAR_HEAD_P (string[i]))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
852 {
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
853 i--;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
854 }
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
855 if (! BASE_LEADING_CODE_P (string[i]))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
856 return 0;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
857
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
858 if (pos == ZV)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
859 return 0;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
860 c = FETCH_BYTE (pos_byte);
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
861 if (CHAR_HEAD_P (c))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
862 return 0;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
863 while (pos_byte < ZV_BYTE)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
864 {
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
865 c = FETCH_BYTE (pos_byte);
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
866 if (CHAR_HEAD_P (c))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
867 break;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
868 pos_byte++;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
869 }
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
870
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
871 return pos_byte - opos_byte;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
872 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
873
21191
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
874 /* Adjust the position TARGET/TARGET_BYTE for the combining of NBYTES
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
875 following the position POS/POS_BYTE to the character preceding POS.
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
876 If TARGET is after POS+NBYTES, we only have to adjust the character
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
877 position TARGET, else, if TARGET is after POS, we have to adjust
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
878 both the character position TARGET and the byte position
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
879 TARGET_BYTE, else we don't have to do any adjustment. */
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
880
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
881 #define ADJUST_CHAR_POS(target, target_byte) \
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
882 do { \
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
883 if (target > pos + nbytes) \
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
884 target -= nbytes; \
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
885 else if (target >= pos) \
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
886 { \
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
887 target = pos; \
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
888 target_byte = pos_byte + nbytes; \
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
889 } \
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
890 } while (0)
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
891
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
892 /* Combine NBYTES stray trailing-codes, which were formerly separate
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
893 characters, with the preceding character. These bytes
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
894 are located after position POS / POS_BYTE, and the preceding character
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
895 is located just before that position. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
896
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
897 static void
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
898 combine_bytes (pos, pos_byte, nbytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
899 int pos, pos_byte, nbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
900 {
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
901 /* Adjust all markers. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
902 adjust_markers_for_delete (pos, pos_byte, pos + nbytes, pos_byte);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
903
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
904 adjust_overlays_for_delete (pos, nbytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
905
21191
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
906 ADJUST_CHAR_POS (BUF_PT (current_buffer), BUF_PT_BYTE (current_buffer));
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
907 ADJUST_CHAR_POS (GPT, GPT_BYTE);
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
908 ADJUST_CHAR_POS (Z, Z_BYTE);
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
909 ADJUST_CHAR_POS (ZV, ZV_BYTE);
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
910
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
911 if (BUF_INTERVALS (current_buffer) != 0)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
912 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
913 offset_intervals (current_buffer, pos, - nbytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
914 }
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
915
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
916 /* Insert a sequence of NCHARS chars which occupy NBYTES bytes
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
917 starting at STRING. INHERIT, PREPARE and BEFORE_MARKERS
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
918 are the same as in insert_1. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
919
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
920 void
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
921 insert_1_both (string, nchars, nbytes, inherit, prepare, before_markers)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
922 register unsigned char *string;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
923 register int nchars, nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
924 int inherit, prepare, before_markers;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
925 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
926 register Lisp_Object temp;
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
927 int combined_before_bytes, combined_after_bytes;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
928
21054
5d592343630f (insert_1_both): If enable-multibyte-characters is nil,
Kenichi Handa <handa@m17n.org>
parents: 21037
diff changeset
929 if (NILP (current_buffer->enable_multibyte_characters))
5d592343630f (insert_1_both): If enable-multibyte-characters is nil,
Kenichi Handa <handa@m17n.org>
parents: 21037
diff changeset
930 nchars = nbytes;
5d592343630f (insert_1_both): If enable-multibyte-characters is nil,
Kenichi Handa <handa@m17n.org>
parents: 21037
diff changeset
931
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
932 if (PT != GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
933 move_gap_both (PT, PT_BYTE);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
934 if (GAP_SIZE < nbytes)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
935 make_gap (nbytes - GAP_SIZE);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
936
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
937 if (prepare)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
938 prepare_to_modify_buffer (PT, PT, NULL);
21135
42badfae3618 (insert_1_both, insert_from_string_1, insert_from_buffer_1):
Richard M. Stallman <rms@gnu.org>
parents: 21126
diff changeset
939
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
940 combined_before_bytes
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
941 = count_combining_before (string, nbytes, PT, PT_BYTE);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
942 combined_after_bytes
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
943 = count_combining_after (string, nbytes, PT, PT_BYTE);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
944
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
945 /* Record deletion of the surrounding text that combines with
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
946 the insertion. This, together with recording the insertion,
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
947 will add up to the right stuff in the undo list.
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
948
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
949 But there is no need to actually delete the combining bytes
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
950 from the buffer and reinsert them. */
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
951
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
952 if (combined_after_bytes)
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
953 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
954 adjust_markers_for_record_delete (PT, PT_BYTE,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
955 PT + combined_after_bytes,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
956 PT_BYTE + combined_after_bytes);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
957 record_delete (PT, combined_after_bytes);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
958 }
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
959
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
960 if (combined_before_bytes)
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
961 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
962 adjust_markers_for_record_delete (PT - 1, CHAR_TO_BYTE (PT - 1),
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
963 PT, PT_BYTE);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
964 record_delete (PT - 1, 1);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
965 }
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
966
21185
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
967 record_insert (PT - !!combined_before_bytes,
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
968 nchars - combined_before_bytes + !!combined_before_bytes);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
969 MODIFF++;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
970
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
971 bcopy (string, GPT_ADDR, nbytes);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
972
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
973 GAP_SIZE -= nbytes;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
974 /* When we have combining at the end of the insertion,
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
975 this is the character position before the combined character. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
976 GPT += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
977 ZV += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
978 Z += nchars;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
979 GPT_BYTE += nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
980 ZV_BYTE += nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
981 Z_BYTE += nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
982 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
983
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
984 if (combined_after_bytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
985 move_gap_both (GPT + combined_after_bytes,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
986 GPT_BYTE + combined_after_bytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
987
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
988 if (GPT_BYTE < GPT)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
989 abort ();
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
990
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
991 adjust_overlays_for_insert (PT, nchars);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
992 adjust_markers_for_insert (PT, PT_BYTE,
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
993 PT + nchars, PT_BYTE + nbytes,
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
994 combined_before_bytes, combined_after_bytes,
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
995 before_markers);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
996
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
997 #ifdef USE_TEXT_PROPERTIES
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
998 if (BUF_INTERVALS (current_buffer) != 0)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
999 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1000 offset_intervals (current_buffer, PT, nchars);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1001
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1002 if (!inherit && BUF_INTERVALS (current_buffer) != 0)
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1003 Fset_text_properties (make_number (PT), make_number (PT + nchars),
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1004 Qnil, Qnil);
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1005 #endif
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1006
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1007 {
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1008 int pos = PT, pos_byte = PT_BYTE;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1009
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1010 adjust_point (nchars + combined_after_bytes,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1011 nbytes + combined_after_bytes);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1012
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1013 if (combined_after_bytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1014 combine_bytes (pos + nchars, pos_byte + nbytes, combined_after_bytes);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1015
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1016 if (combined_before_bytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1017 combine_bytes (pos, pos_byte, combined_before_bytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1018 }
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1019 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1020
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1021 /* Insert the part of the text of STRING, a Lisp object assumed to be
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1022 of type string, consisting of the LENGTH characters (LENGTH_BYTE bytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1023 starting at position POS / POS_BYTE. If the text of STRING has properties,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1024 copy them into the buffer.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1025
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1026 It does not work to use `insert' for this, because a GC could happen
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1027 before we bcopy the stuff into the buffer, and relocate the string
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1028 without insert noticing. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1029
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1030 void
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1031 insert_from_string (string, pos, pos_byte, length, length_byte, inherit)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1032 Lisp_Object string;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1033 register int pos, pos_byte, length, length_byte;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1034 int inherit;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1035 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1036 if (length > 0)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1037 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1038 int opoint = PT;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1039 insert_from_string_1 (string, pos, pos_byte, length, length_byte,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1040 inherit, 0);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1041 signal_after_change (opoint, 0, PT - opoint);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1042 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1043 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1044
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1045 /* Like `insert_from_string' except that all markers pointing
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1046 at the place where the insertion happens are adjusted to point after it. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1047
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1048 void
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1049 insert_from_string_before_markers (string, pos, pos_byte,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1050 length, length_byte, inherit)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1051 Lisp_Object string;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1052 register int pos, pos_byte, length, length_byte;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1053 int inherit;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1054 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1055 if (length > 0)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1056 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1057 int opoint = PT;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1058 insert_from_string_1 (string, pos, pos_byte, length, length_byte,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1059 inherit, 1);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1060 signal_after_change (opoint, 0, PT - opoint);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1061 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1062 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1063
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1064 /* Subroutine of the insertion functions above. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1065
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1066 static void
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1067 insert_from_string_1 (string, pos, pos_byte, nchars, nbytes,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1068 inherit, before_markers)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1069 Lisp_Object string;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1070 register int pos, pos_byte, nchars, nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1071 int inherit, before_markers;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1072 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1073 register Lisp_Object temp;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1074 struct gcpro gcpro1;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1075 int outgoing_nbytes = nbytes;
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1076 int combined_before_bytes, combined_after_bytes;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1077 int adjusted_nchars;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1078 INTERVAL intervals;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1079
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1080 /* Make OUTGOING_NBYTES describe the text
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1081 as it will be inserted in this buffer. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1082
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1083 if (NILP (current_buffer->enable_multibyte_characters))
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1084 outgoing_nbytes = nchars;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1085 else if (nchars == nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1086 outgoing_nbytes
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1087 = count_size_as_multibyte (&XSTRING (string)->data[pos_byte],
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1088 nbytes);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1089
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1090 /* Make sure point-max won't overflow after this insertion. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1091 XSETINT (temp, outgoing_nbytes + Z);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1092 if (outgoing_nbytes + Z != XINT (temp))
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1093 error ("Maximum buffer size exceeded");
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1094
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1095 GCPRO1 (string);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1096 prepare_to_modify_buffer (PT, PT, NULL);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1097
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1098 if (PT != GPT)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1099 move_gap_both (PT, PT_BYTE);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1100 if (GAP_SIZE < nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1101 make_gap (outgoing_nbytes - GAP_SIZE);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1102 UNGCPRO;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1103
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1104 /* Copy the string text into the buffer, perhaps converting
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1105 between single-byte and multibyte. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1106 copy_text (XSTRING (string)->data + pos_byte, GPT_ADDR, nbytes,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1107 /* If these are equal, it is a single-byte string.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1108 Its chars are either ASCII, in which case copy_text
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1109 won't change it, or single-byte non-ASCII chars,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1110 that need to be changed. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1111 nchars != nbytes,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1112 ! NILP (current_buffer->enable_multibyte_characters));
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1113
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1114 /* We have copied text into the gap, but we have not altered
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1115 PT or PT_BYTE yet. So we can pass PT and PT_BYTE
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1116 to these functions and get the same results as we would
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1117 have got earlier on. Meanwhile, PT_ADDR does point to
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1118 the text that has been stored by copy_text. */
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1119
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1120 combined_before_bytes
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1121 = count_combining_before (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1122 combined_after_bytes
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1123 = count_combining_after (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1124
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1125 /* Record deletion of the surrounding text that combines with
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1126 the insertion. This, together with recording the insertion,
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1127 will add up to the right stuff in the undo list.
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1128
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1129 But there is no need to actually delete the combining bytes
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1130 from the buffer and reinsert them. */
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1131
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1132 if (combined_after_bytes)
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1133 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1134 adjust_markers_for_record_delete (PT, PT_BYTE,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1135 PT + combined_after_bytes,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1136 PT_BYTE + combined_after_bytes);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1137 record_delete (PT, combined_after_bytes);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1138 }
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1139
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1140 if (combined_before_bytes)
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1141 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1142 adjust_markers_for_record_delete (PT - 1, CHAR_TO_BYTE (PT - 1),
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1143 PT, PT_BYTE);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1144 record_delete (PT - 1, 1);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1145 }
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1146
21185
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1147 record_insert (PT - !!combined_before_bytes,
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1148 nchars - combined_before_bytes + !!combined_before_bytes);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1149 MODIFF++;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1150
20642
818677afe7bc (insert_from_string_1): Decrement GAP_SIZE by
Kenichi Handa <handa@m17n.org>
parents: 20608
diff changeset
1151 GAP_SIZE -= outgoing_nbytes;
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1152 GPT += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1153 ZV += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1154 Z += nchars;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1155 GPT_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1156 ZV_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1157 Z_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1158 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1159
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1160 if (combined_after_bytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1161 move_gap_both (GPT + combined_after_bytes,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1162 GPT_BYTE + combined_after_bytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1163
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1164 if (GPT_BYTE < GPT)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1165 abort ();
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1166
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1167 adjust_overlays_for_insert (PT, nchars);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1168 adjust_markers_for_insert (PT, PT_BYTE, PT + nchars,
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1169 PT_BYTE + outgoing_nbytes,
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1170 combined_before_bytes, combined_after_bytes,
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1171 before_markers);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1172
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1173 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1174 offset_intervals (current_buffer, PT, nchars);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1175
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1176 intervals = XSTRING (string)->intervals;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1177 /* Get the intervals for the part of the string we are inserting--
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1178 not including the combined-before bytes. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1179 if (nbytes < XSTRING (string)->size_byte)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1180 intervals = copy_intervals (intervals, pos, nchars);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1181
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1182 /* Insert those intervals. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1183 graft_intervals_into_buffer (intervals, PT, nchars,
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1184 current_buffer, inherit);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1185
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1186 {
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1187 int pos = PT, pos_byte = PT_BYTE;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1188
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1189 adjust_point (nchars + combined_after_bytes,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1190 outgoing_nbytes + combined_after_bytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1191
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1192 if (combined_after_bytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1193 combine_bytes (pos + nchars, pos_byte + outgoing_nbytes,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1194 combined_after_bytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1195
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1196 if (combined_before_bytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1197 combine_bytes (pos, pos_byte, combined_before_bytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1198 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1199 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1201 /* Insert text from BUF, NCHARS characters starting at CHARPOS, into the
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1202 current buffer. If the text in BUF has properties, they are absorbed
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1203 into the current buffer.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1204
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1205 It does not work to use `insert' for this, because a malloc could happen
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1206 and relocate BUF's text before the bcopy happens. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1207
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1208 void
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1209 insert_from_buffer (buf, charpos, nchars, inherit)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1210 struct buffer *buf;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1211 int charpos, nchars;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1212 int inherit;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1213 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1214 if (nchars > 0)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1215 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1216 int opoint = PT;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1217
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1218 insert_from_buffer_1 (buf, charpos, nchars, inherit);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1219 signal_after_change (opoint, 0, PT - opoint);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1220 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1221 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1222
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1223 static void
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1224 insert_from_buffer_1 (buf, from, nchars, inherit)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1225 struct buffer *buf;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1226 int from, nchars;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1227 int inherit;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1228 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1229 register Lisp_Object temp;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1230 int chunk;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1231 int from_byte = buf_charpos_to_bytepos (buf, from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1232 int to_byte = buf_charpos_to_bytepos (buf, from + nchars);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1233 int incoming_nbytes = to_byte - from_byte;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1234 int outgoing_nbytes = incoming_nbytes;
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1235 int combined_before_bytes, combined_after_bytes;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1236 int adjusted_nchars;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1237 INTERVAL intervals;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1238
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1239 /* Make OUTGOING_NBYTES describe the text
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1240 as it will be inserted in this buffer. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1241
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1242 if (NILP (current_buffer->enable_multibyte_characters))
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1243 outgoing_nbytes = nchars;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1244 else if (NILP (buf->enable_multibyte_characters))
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1245 outgoing_nbytes
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1246 = count_size_as_multibyte (BUF_BYTE_ADDRESS (buf, from_byte),
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1247 incoming_nbytes);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1248
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1249 /* Make sure point-max won't overflow after this insertion. */
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1250 XSETINT (temp, outgoing_nbytes + Z);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1251 if (outgoing_nbytes + Z != XINT (temp))
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1252 error ("Maximum buffer size exceeded");
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1253
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1254 prepare_to_modify_buffer (PT, PT, NULL);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1255
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1256 if (PT != GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1257 move_gap_both (PT, PT_BYTE);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1258 if (GAP_SIZE < outgoing_nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1259 make_gap (outgoing_nbytes - GAP_SIZE);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1260
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1261 if (from < BUF_GPT (buf))
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1262 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1263 chunk = BUF_GPT_BYTE (buf) - from_byte;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1264 if (chunk > incoming_nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1265 chunk = incoming_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1266 copy_text (BUF_BYTE_ADDRESS (buf, from_byte),
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1267 GPT_ADDR, chunk,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1268 ! NILP (buf->enable_multibyte_characters),
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1269 ! NILP (current_buffer->enable_multibyte_characters));
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1270 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1271 else
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1272 chunk = 0;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1273 if (chunk < incoming_nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1274 copy_text (BUF_BYTE_ADDRESS (buf, from_byte + chunk),
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1275 GPT_ADDR + chunk, incoming_nbytes - chunk,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1276 ! NILP (buf->enable_multibyte_characters),
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1277 ! NILP (current_buffer->enable_multibyte_characters));
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1278
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1279 /* We have copied text into the gap, but we have not altered
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1280 PT or PT_BYTE yet. So we can pass PT and PT_BYTE
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1281 to these functions and get the same results as we would
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1282 have got earlier on. Meanwhile, GPT_ADDR does point to
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1283 the text that has been stored by copy_text. */
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1284 combined_before_bytes
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1285 = count_combining_before (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1286 combined_after_bytes
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1287 = count_combining_after (GPT_ADDR, outgoing_nbytes,
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1288 PT, PT_BYTE);
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1289
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1290 /* Record deletion of the surrounding text that combines with
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1291 the insertion. This, together with recording the insertion,
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1292 will add up to the right stuff in the undo list.
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1293
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1294 But there is no need to actually delete the combining bytes
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1295 from the buffer and reinsert them. */
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1296
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1297 if (combined_after_bytes)
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1298 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1299 adjust_markers_for_record_delete (PT, PT_BYTE,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1300 PT + combined_after_bytes,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1301 PT_BYTE + combined_after_bytes);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1302 record_delete (PT, combined_after_bytes);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1303 }
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1304
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1305 if (combined_before_bytes)
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1306 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1307 adjust_markers_for_record_delete (PT - 1, CHAR_TO_BYTE (PT - 1),
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1308 PT, PT_BYTE);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1309 record_delete (PT - 1, 1);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1310 }
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1311
21185
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1312 record_insert (PT - !!combined_before_bytes,
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1313 nchars - combined_before_bytes + !!combined_before_bytes);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1314 MODIFF++;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1315
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1316 GAP_SIZE -= outgoing_nbytes;
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1317 GPT += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1318 ZV += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1319 Z += nchars;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1320 GPT_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1321 ZV_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1322 Z_BYTE += outgoing_nbytes;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1323 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1324
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1325 if (combined_after_bytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1326 move_gap_both (GPT + combined_after_bytes,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1327 GPT_BYTE + combined_after_bytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1328
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1329 if (GPT_BYTE < GPT)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1330 abort ();
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1331
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1332 adjust_overlays_for_insert (PT, nchars);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1333 adjust_markers_for_insert (PT, PT_BYTE, PT + nchars,
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1334 PT_BYTE + outgoing_nbytes,
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1335 combined_before_bytes, combined_after_bytes, 0);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1336
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1337 #ifdef USE_TEXT_PROPERTIES
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1338 if (BUF_INTERVALS (current_buffer) != 0)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1339 offset_intervals (current_buffer, PT, nchars);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1340 #endif
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1341
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1342 /* Get the intervals for the part of the string we are inserting--
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1343 not including the combined-before bytes. */
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1344 intervals = BUF_INTERVALS (buf);
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1345 if (outgoing_nbytes < BUF_Z_BYTE (buf) - BUF_BEG_BYTE (buf))
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1346 intervals = copy_intervals (intervals, from, nchars);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1347
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1348 /* Insert those intervals. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1349 graft_intervals_into_buffer (intervals, PT, nchars, current_buffer, inherit);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1350
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1351 {
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1352 int pos = PT, pos_byte = PT_BYTE;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1353
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1354 adjust_point (nchars + combined_after_bytes,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1355 outgoing_nbytes + combined_after_bytes);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1356
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1357 if (combined_after_bytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1358 combine_bytes (pos + nchars, pos_byte + outgoing_nbytes,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1359 combined_after_bytes);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1360
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1361 if (combined_before_bytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1362 combine_bytes (pos, pos_byte, combined_before_bytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1363 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1364 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1365
20937
f77dcb2556c5 (adjust_before_replace): Comment added.
Kenichi Handa <handa@m17n.org>
parents: 20889
diff changeset
1366 /* This function should be called after moving gap to FROM and before
21037
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
1367 altering text between FROM and TO. This adjusts various position
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
1368 keepers and markers as if the text is deleted. Don't forget to
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
1369 call adjust_after_replace after you actually alter the text. */
20937
f77dcb2556c5 (adjust_before_replace): Comment added.
Kenichi Handa <handa@m17n.org>
parents: 20889
diff changeset
1370
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1371 void
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1372 adjust_before_replace (from, from_byte, to, to_byte)
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1373 int from, from_byte, to, to_byte;
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1374 {
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1375 adjust_markers_for_delete (from, from_byte, to, to_byte);
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1376 record_delete (from, to - from);
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1377 adjust_overlays_for_delete (from, to - from);
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1378 }
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1379
20937
f77dcb2556c5 (adjust_before_replace): Comment added.
Kenichi Handa <handa@m17n.org>
parents: 20889
diff changeset
1380 /* This function should be called after altering the text between FROM
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1381 and TO to a new text of LEN chars (LEN_BYTE bytes), but before
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1382 making the text a buffer contents. It exists just after GPT_ADDR. */
20937
f77dcb2556c5 (adjust_before_replace): Comment added.
Kenichi Handa <handa@m17n.org>
parents: 20889
diff changeset
1383
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1384 void
21191
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1385 adjust_after_replace (from, from_byte, to, to_byte, len, len_byte, replace)
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1386 int from, from_byte, to, to_byte, len, len_byte, replace;
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1387 {
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1388 int combined_before_bytes
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1389 = count_combining_before (GPT_ADDR, len_byte, from, from_byte);
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1390 int combined_after_bytes
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1391 = count_combining_after (GPT_ADDR, len_byte, from, from_byte);
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1392
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1393 if (combined_after_bytes)
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1394 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1395 adjust_markers_for_record_delete (from, from_byte,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1396 from + combined_after_bytes,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1397 from_byte + combined_after_bytes);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1398 record_delete (from, combined_after_bytes);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1399 }
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1400
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1401 if (combined_before_bytes)
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1402 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1403 adjust_markers_for_record_delete (from - 1, CHAR_TO_BYTE (from - 1),
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1404 from, from_byte);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1405 record_delete (from - 1, 1);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1406 }
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1407
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1408 /* Update various buffer positions for the new text. */
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1409 GAP_SIZE -= len_byte;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1410 ZV += len; Z+= len;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1411 ZV_BYTE += len_byte; Z_BYTE += len_byte;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1412 GPT += len; GPT_BYTE += len_byte;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1413 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1414
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1415 if (combined_after_bytes)
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1416 move_gap_both (GPT + combined_after_bytes,
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1417 GPT_BYTE + combined_after_bytes);
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1418
21185
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1419 record_insert (from - !!combined_before_bytes,
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1420 len - combined_before_bytes + !!combined_before_bytes);
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1421 adjust_overlays_for_insert (from, len);
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1422 adjust_markers_for_insert (from, from_byte,
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1423 from + len, from_byte + len_byte,
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1424 combined_before_bytes, combined_after_bytes, 0);
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1425 #ifdef USE_TEXT_PROPERTIES
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1426 if (BUF_INTERVALS (current_buffer) != 0)
21191
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1427 /* REPLACE zero means that we have not yet adjusted the interval
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1428 tree for the text between FROM and TO, thus, we must treat the
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1429 new text as a newly inserted text, not as a replacement of
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1430 something. */
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1431 offset_intervals (current_buffer, from, len - (replace ? to - from : 0));
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1432 #endif
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1433
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1434 {
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1435 int pos = PT, pos_byte = PT_BYTE;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1436
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1437 if (from < PT)
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1438 adjust_point (len - (to - from) + combined_after_bytes,
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1439 len_byte - (to_byte - from_byte) + combined_after_bytes);
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1440 else if (from == PT && combined_before_bytes)
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1441 adjust_point (0, combined_before_bytes);
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1442
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1443 if (combined_after_bytes)
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1444 combine_bytes (from + len, from_byte + len_byte, combined_after_bytes);
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1445
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1446 if (combined_before_bytes)
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1447 combine_bytes (from, from_byte, combined_before_bytes);
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1448 }
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1449
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1450 if (len == 0)
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1451 evaporate_overlays (from);
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1452 MODIFF++;
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1453 }
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1454
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1455 /* Replace the text from character positions FROM to TO with NEW,
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1456 If PREPARE is nonzero, call prepare_to_modify_buffer.
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1457 If INHERIT, the newly inserted text should inherit text properties
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1458 from the surrounding non-deleted text. */
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1459
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1460 /* Note that this does not yet handle markers quite right.
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1461 Also it needs to record a single undo-entry that does a replacement
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1462 rather than a separate delete and insert.
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1463 That way, undo will also handle markers properly. */
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1464
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1465 void
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1466 replace_range (from, to, new, prepare, inherit)
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1467 Lisp_Object new;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1468 int from, to, prepare, inherit;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1469 {
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1470 int inschars = XSTRING (new)->size;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1471 int insbytes = XSTRING (new)->size_byte;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1472 int from_byte, to_byte;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1473 int nbytes_del, nchars_del;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1474 register Lisp_Object temp;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1475 struct gcpro gcpro1;
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1476 int combined_before_bytes, combined_after_bytes;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1477 int adjusted_inschars;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1478 INTERVAL intervals;
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1479 int outgoing_insbytes = insbytes;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1480
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1481 GCPRO1 (new);
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1482
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1483 if (prepare)
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1484 {
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1485 int range_length = to - from;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1486 prepare_to_modify_buffer (from, to, &from);
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1487 to = from + range_length;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1488 }
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1489
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1490 UNGCPRO;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1491
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1492 /* Make args be valid */
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1493 if (from < BEGV)
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1494 from = BEGV;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1495 if (to > ZV)
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1496 to = ZV;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1497
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1498 from_byte = CHAR_TO_BYTE (from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1499 to_byte = CHAR_TO_BYTE (to);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1500
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1501 nchars_del = to - from;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1502 nbytes_del = to_byte - from_byte;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1503
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1504 if (nbytes_del <= 0 && insbytes == 0)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1505 return;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1506
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1507 /* Make OUTGOING_INSBYTES describe the text
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1508 as it will be inserted in this buffer. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1509
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1510 if (NILP (current_buffer->enable_multibyte_characters))
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1511 outgoing_insbytes = inschars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1512 else if (inschars == insbytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1513 outgoing_insbytes
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1514 = count_size_as_multibyte (XSTRING (new)->data, insbytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1515
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1516 /* Make sure point-max won't overflow after this insertion. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1517 XSETINT (temp, Z_BYTE - nbytes_del + insbytes);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1518 if (Z_BYTE - nbytes_del + insbytes != XINT (temp))
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1519 error ("Maximum buffer size exceeded");
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1520
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1521 GCPRO1 (new);
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1522
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1523 /* Make sure the gap is somewhere in or next to what we are deleting. */
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1524 if (from > GPT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1525 gap_right (from, from_byte);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1526 if (to < GPT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1527 gap_left (to, to_byte, 0);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1528
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1529 /* Relocate all markers pointing into the new, larger gap
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1530 to point at the end of the text before the gap.
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1531 Do this before recording the deletion,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1532 so that undo handles this after reinserting the text. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1533 adjust_markers_for_delete (from, from_byte, to, to_byte);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1534
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1535 record_delete (from, nchars_del);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1536
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1537 GAP_SIZE += nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1538 ZV -= nchars_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1539 Z -= nchars_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1540 ZV_BYTE -= nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1541 Z_BYTE -= nbytes_del;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1542 GPT = from;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1543 GPT_BYTE = from_byte;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1544 *(GPT_ADDR) = 0; /* Put an anchor. */
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1545
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1546 if (GPT_BYTE < GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1547 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1548
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1549 if (GPT - BEG < beg_unchanged)
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1550 beg_unchanged = GPT - BEG;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1551 if (Z - GPT < end_unchanged)
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1552 end_unchanged = Z - GPT;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1553
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1554 if (GAP_SIZE < insbytes)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1555 make_gap (insbytes - GAP_SIZE);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1556
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1557 /* Copy the string text into the buffer, perhaps converting
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1558 between single-byte and multibyte. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1559 copy_text (XSTRING (new)->data, GPT_ADDR, insbytes,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1560 /* If these are equal, it is a single-byte string.
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1561 Its chars are either ASCII, in which case copy_text
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1562 won't change it, or single-byte non-ASCII chars,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1563 that need to be changed. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1564 inschars != insbytes,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1565 ! NILP (current_buffer->enable_multibyte_characters));
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1566
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1567 /* We have copied text into the gap, but we have not altered
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1568 PT or PT_BYTE yet. So we can pass PT and PT_BYTE
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1569 to these functions and get the same results as we would
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1570 have got earlier on. Meanwhile, GPT_ADDR does point to
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1571 the text that has been stored by copy_text. */
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1572
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1573 combined_before_bytes
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1574 = count_combining_before (GPT_ADDR, outgoing_insbytes, PT, PT_BYTE);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1575 combined_after_bytes
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1576 = count_combining_after (GPT_ADDR, outgoing_insbytes, PT, PT_BYTE);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1577
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1578 /* Record deletion of the surrounding text that combines with
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1579 the insertion. This, together with recording the insertion,
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1580 will add up to the right stuff in the undo list.
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1581
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1582 But there is no need to actually delete the combining bytes
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1583 from the buffer and reinsert them. */
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1584
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1585 if (combined_after_bytes)
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1586 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1587 adjust_markers_for_record_delete (PT, PT_BYTE,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1588 PT + combined_after_bytes,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1589 PT_BYTE + combined_after_bytes);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1590 record_delete (PT, combined_after_bytes);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1591 }
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1592
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1593 if (combined_before_bytes)
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1594 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1595 adjust_markers_for_record_delete (PT - 1, CHAR_TO_BYTE (PT - 1),
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1596 PT, PT_BYTE);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1597 record_delete (PT - 1, 1);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1598 }
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1599
21185
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1600 record_insert (PT - !!combined_before_bytes,
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1601 inschars - combined_before_bytes + !!combined_before_bytes);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1602
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1603 GAP_SIZE -= outgoing_insbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1604 GPT += inschars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1605 ZV += inschars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1606 Z += inschars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1607 GPT_BYTE += outgoing_insbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1608 ZV_BYTE += outgoing_insbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1609 Z_BYTE += outgoing_insbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1610 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1611
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1612 if (combined_after_bytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1613 move_gap_both (GPT + combined_after_bytes,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1614 GPT_BYTE + combined_after_bytes);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1615
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1616 if (GPT_BYTE < GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1617 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1618
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1619 /* Adjust the overlay center as needed. This must be done after
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1620 adjusting the markers that bound the overlays. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1621 adjust_overlays_for_delete (from, nchars_del);
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1622 adjust_overlays_for_insert (from, inschars);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1623 adjust_markers_for_insert (from, from_byte,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1624 from + inschars, from_byte + outgoing_insbytes,
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1625 combined_before_bytes, combined_after_bytes, 0);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1626
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1627 #ifdef USE_TEXT_PROPERTIES
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1628 offset_intervals (current_buffer, PT, inschars - nchars_del);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1629
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1630 /* Get the intervals for the part of the string we are inserting--
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1631 not including the combined-before bytes. */
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1632 intervals = XSTRING (new)->intervals;
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1633 /* Insert those intervals. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1634 graft_intervals_into_buffer (intervals, from, inschars,
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1635 current_buffer, inherit);
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1636 #endif
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1637
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1638 /* Relocate point as if it were a marker. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1639 if (from < PT)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1640 adjust_point ((from + inschars - (PT < to ? PT : to)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1641 + combined_after_bytes),
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1642 (from_byte + outgoing_insbytes
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1643 - (PT_BYTE < to_byte ? PT_BYTE : to_byte)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1644 + combined_after_bytes));
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1645
21135
42badfae3618 (insert_1_both, insert_from_string_1, insert_from_buffer_1):
Richard M. Stallman <rms@gnu.org>
parents: 21126
diff changeset
1646 if (combined_after_bytes)
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1647 combine_bytes (from + inschars, from_byte + outgoing_insbytes,
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1648 combined_after_bytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1649
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1650 if (combined_before_bytes)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1651 combine_bytes (from, from_byte, combined_before_bytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1652
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1653 if (outgoing_insbytes == 0)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1654 evaporate_overlays (from);
21135
42badfae3618 (insert_1_both, insert_from_string_1, insert_from_buffer_1):
Richard M. Stallman <rms@gnu.org>
parents: 21126
diff changeset
1655
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1656 MODIFF++;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1657 UNGCPRO;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1658
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1659 signal_after_change (from, nchars_del, PT - from);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1660 }
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1661
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1662 /* Delete characters in current buffer
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1663 from FROM up to (but not including) TO.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1664 If TO comes before FROM, we delete nothing. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1665
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1666 void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1667 del_range (from, to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1668 register int from, to;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1669 {
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1670 del_range_1 (from, to, 1);
6126
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
1671 }
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
1672
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
1673 /* Like del_range; PREPARE says whether to call prepare_to_modify_buffer. */
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
1674
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1675 void
6126
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
1676 del_range_1 (from, to, prepare)
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1677 int from, to, prepare;
6126
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
1678 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1679 int from_byte, to_byte;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1680
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1681 /* Make args be valid */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1682 if (from < BEGV)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1683 from = BEGV;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1684 if (to > ZV)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1685 to = ZV;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1686
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1687 if (to <= from)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1688 return;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1689
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1690 if (prepare)
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1691 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1692 int range_length = to - from;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1693 prepare_to_modify_buffer (from, to, &from);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1694 to = from + range_length;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1695 }
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1696
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1697 from_byte = CHAR_TO_BYTE (from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1698 to_byte = CHAR_TO_BYTE (to);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1699
20998
1e0b48e0e84f (del_range_2): Reorder args. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 20983
diff changeset
1700 del_range_2 (from, from_byte, to, to_byte);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1701 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1702
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1703 /* Like del_range_1 but args are byte positions, not char positions. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1704
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1705 void
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1706 del_range_byte (from_byte, to_byte, prepare)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1707 int from_byte, to_byte, prepare;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1708 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1709 int from, to;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1710
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711 /* Make args be valid */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1712 if (from_byte < BEGV_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1713 from_byte = BEGV_BYTE;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1714 if (to_byte > ZV_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1715 to_byte = ZV_BYTE;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1716
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1717 if (to_byte <= from_byte)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1718 return;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1719
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1720 from = BYTE_TO_CHAR (from_byte);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1721 to = BYTE_TO_CHAR (to_byte);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1722
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1723 if (prepare)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1724 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1725 int old_from = from, old_to = Z - to;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1726 int range_length = to - from;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1727 prepare_to_modify_buffer (from, to, &from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1728 to = from + range_length;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1729
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1730 if (old_from != from)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1731 from_byte = CHAR_TO_BYTE (from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1732 if (old_to == Z - to)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1733 to_byte = CHAR_TO_BYTE (to);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1734 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1735
20998
1e0b48e0e84f (del_range_2): Reorder args. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 20983
diff changeset
1736 del_range_2 (from, from_byte, to, to_byte);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1737 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1738
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1739 /* Like del_range_1, but positions are specified both as charpos
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1740 and bytepos. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1741
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1742 void
20983
288cf06bf65c (del_range_both): Reorder args. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 20937
diff changeset
1743 del_range_both (from, from_byte, to, to_byte, prepare)
288cf06bf65c (del_range_both): Reorder args. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 20937
diff changeset
1744 int from, from_byte, to, to_byte, prepare;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1745 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1746 /* Make args be valid */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1747 if (from_byte < BEGV_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1748 from_byte = BEGV_BYTE;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1749 if (to_byte > ZV_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1750 to_byte = ZV_BYTE;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1751
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1752 if (to_byte <= from_byte)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1753 return;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1754
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1755 if (from < BEGV)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1756 from = BEGV;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 if (to > ZV)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1758 to = ZV;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1760 if (prepare)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1761 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1762 int old_from = from, old_to = Z - to;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1763 int range_length = to - from;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1764 prepare_to_modify_buffer (from, to, &from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1765 to = from + range_length;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1766
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1767 if (old_from != from)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1768 from_byte = CHAR_TO_BYTE (from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1769 if (old_to == Z - to)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1770 to_byte = CHAR_TO_BYTE (to);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1771 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1772
20998
1e0b48e0e84f (del_range_2): Reorder args. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 20983
diff changeset
1773 del_range_2 (from, from_byte, to, to_byte);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1774 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1775
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1776 /* Delete a range of text, specified both as character positions
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1777 and byte positions. FROM and TO are character positions,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1778 while FROM_BYTE and TO_BYTE are byte positions. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1779
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1780 void
20998
1e0b48e0e84f (del_range_2): Reorder args. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 20983
diff changeset
1781 del_range_2 (from, from_byte, to, to_byte)
1e0b48e0e84f (del_range_2): Reorder args. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 20983
diff changeset
1782 int from, from_byte, to, to_byte;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1783 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1784 register int nbytes_del, nchars_del;
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1785 int combined_after_bytes;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1786
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1787 nchars_del = to - from;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1788 nbytes_del = to_byte - from_byte;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 /* Make sure the gap is somewhere in or next to what we are deleting. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1791 if (from > GPT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1792 gap_right (from, from_byte);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1793 if (to < GPT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1794 gap_left (to, to_byte, 0);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1795
21185
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1796 combined_after_bytes
21191
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1797 = count_combining_before (BUF_BYTE_ADDRESS (current_buffer, to_byte),
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1798 ZV_BYTE - to_byte, from, from_byte);
21185
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1799
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1800 /* Relocate all markers pointing into the new, larger gap
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1801 to point at the end of the text before the gap.
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1802 Do this before recording the deletion,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1803 so that undo handles this after reinserting the text. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1804 adjust_markers_for_delete (from, from_byte, to, to_byte);
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1805 if (combined_after_bytes)
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1806 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1807 int from_byte_1 = from_byte;
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1808 DEC_POS (from_byte_1);
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1809
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1810 /* Adjust markers for the phony deletion
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1811 that we are about to call record_undo for. */
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1812
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1813 /* Here we delete the markers that formerly
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1814 pointed at TO ... TO + COMBINED_AFTER_BYTES.
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1815 But because of the call to adjust_markers_for_delete, above,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1816 they now point at FROM ... FROM + COMBINED_AFTER_BYTES. */
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1817 adjust_markers_for_record_delete (from, from_byte,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1818 from + combined_after_bytes,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1819 from_byte + combined_after_bytes);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1820
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1821 adjust_markers_for_record_delete (from - 1, from_byte_1,
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1822 from, from_byte);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1823 }
21185
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1824 record_delete (from - !!combined_after_bytes,
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1825 nchars_del + combined_after_bytes + !!combined_after_bytes);
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1826
21191
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1827 if (combined_after_bytes)
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1828 /* COMBINED_AFTER_BYTES nonzero means that the above record_delete
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1829 moved the gap by calling Fbuffer_substring. We must move the
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1830 gap again to a proper place. */
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1831 move_gap_both (from, from_byte);
1247
8dce1588f37f (del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents: 484
diff changeset
1832 MODIFF++;
8dce1588f37f (del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents: 484
diff changeset
1833
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1834 /* Relocate point as if it were a marker. */
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
1835 if (from < PT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1836 adjust_point (from - (PT < to ? PT : to),
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1837 from_byte - (PT_BYTE < to_byte ? PT_BYTE : to_byte));
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1838
1963
05dd60327cc4 (del_range): Update point before offset_intervals.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
1839 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1840 offset_intervals (current_buffer, from, - nchars_del);
1963
05dd60327cc4 (del_range): Update point before offset_intervals.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
1841
11474
510885be2758 (insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
1842 /* Adjust the overlay center as needed. This must be done after
12617
2a4a6e89558d Comment change.
Karl Heuer <kwzh@gnu.org>
parents: 12244
diff changeset
1843 adjusting the markers that bound the overlays. */
21191
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1844 adjust_overlays_for_delete (from, nchars_del);
11474
510885be2758 (insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
1845
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1846 GAP_SIZE += nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1847 ZV_BYTE -= nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1848 Z_BYTE -= nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1849 ZV -= nchars_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1850 Z -= nchars_del;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1851 GPT = from;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1852 GPT_BYTE = from_byte;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1853
21185
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1854 if (combined_after_bytes)
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1855 move_gap_both (GPT + combined_after_bytes,
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1856 GPT_BYTE + combined_after_bytes);
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1857
21191
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1858 *(GPT_ADDR) = 0; /* Put an anchor. */
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1859
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1860 if (GPT_BYTE < GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1861 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1862
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1863 if (GPT - BEG < beg_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1864 beg_unchanged = GPT - BEG;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1865 if (Z - GPT < end_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866 end_unchanged = Z - GPT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1867
21185
15d4310cb9e7 (insert_1_both, insert_from_string_1, insert_from_buffer_1)
Richard M. Stallman <rms@gnu.org>
parents: 21139
diff changeset
1868 if (combined_after_bytes)
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1869 {
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1870 combine_bytes (from, from_byte, combined_after_bytes);
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1871
21228
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1872 record_insert (GPT - 1, 1);
31a2889105f0 (del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents: 21191
diff changeset
1873 }
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1874
8840
7242936baf4e (del_range_1): Call evaporate_overlays after deleting text.
Karl Heuer <kwzh@gnu.org>
parents: 8687
diff changeset
1875 evaporate_overlays (from);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1876 signal_after_change (from, nchars_del, 0);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1877 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1878
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1879 /* Call this if you're about to change the region of BUFFER from
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1880 character positions START to END. This checks the read-only
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1881 properties of the region, calls the necessary modification hooks,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1882 and warns the next redisplay that it should pay attention to that
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1883 area. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1884
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1885 void
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1886 modify_region (buffer, start, end)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1887 struct buffer *buffer;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1888 int start, end;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1889 {
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1890 struct buffer *old_buffer = current_buffer;
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1891
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1892 if (buffer != old_buffer)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1893 set_buffer_internal (buffer);
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1894
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1895 prepare_to_modify_buffer (start, end, NULL);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896
16194
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
1897 if (start - 1 < beg_unchanged
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
1898 || (unchanged_modified == MODIFF
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
1899 && overlay_unchanged_modified == OVERLAY_MODIFF))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1900 beg_unchanged = start - 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1901 if (Z - end < end_unchanged
16194
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
1902 || (unchanged_modified == MODIFF
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
1903 && overlay_unchanged_modified == OVERLAY_MODIFF))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1904 end_unchanged = Z - end;
5237
378540cf056f (del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents: 5168
diff changeset
1905
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
1906 if (MODIFF <= SAVE_MODIFF)
5237
378540cf056f (del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents: 5168
diff changeset
1907 record_first_change ();
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1908 MODIFF++;
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1909
10564
69cae342dde5 (modify_region): Clear point_before_scroll field.
Richard M. Stallman <rms@gnu.org>
parents: 10391
diff changeset
1910 buffer->point_before_scroll = Qnil;
69cae342dde5 (modify_region): Clear point_before_scroll field.
Richard M. Stallman <rms@gnu.org>
parents: 10391
diff changeset
1911
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1912 if (buffer != old_buffer)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1913 set_buffer_internal (old_buffer);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1914 }
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1915
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1916 /* Check that it is okay to modify the buffer between START and END,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1917 which are char positions.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1918
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
1919 Run the before-change-function, if any. If intervals are in use,
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
1920 verify that the text to be modified is not read-only, and call
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1921 any modification properties the text may have.
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1922
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1923 If PRESERVE_PTR is nonzero, we relocate *PRESERVE_PTR
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1924 by holding its value temporarily in a marker. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1925
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1926 void
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1927 prepare_to_modify_buffer (start, end, preserve_ptr)
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
1928 int start, end;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1929 int *preserve_ptr;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1930 {
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
1931 if (!NILP (current_buffer->read_only))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1932 Fbarf_if_buffer_read_only ();
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1933
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
1934 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
1935 if (BUF_INTERVALS (current_buffer) != 0)
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1936 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1937 if (preserve_ptr)
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1938 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1939 Lisp_Object preserve_marker;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1940 struct gcpro gcpro1;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1941 preserve_marker = Fcopy_marker (make_number (*preserve_ptr), Qnil);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1942 GCPRO1 (preserve_marker);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1943 verify_interval_modification (current_buffer, start, end);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1944 *preserve_ptr = marker_position (preserve_marker);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1945 unchain_marker (preserve_marker);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1946 UNGCPRO;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1947 }
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1948 else
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1949 verify_interval_modification (current_buffer, start, end);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1950 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1951
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1952 #ifdef CLASH_DETECTION
11657
ab5f12280452 (prepare_to_modify_buffer): Use file_truename for locking.
Richard M. Stallman <rms@gnu.org>
parents: 11474
diff changeset
1953 if (!NILP (current_buffer->file_truename)
12621
e71c530e5ae5 (prepare_to_modify_buffer): Don't lock the file
Richard M. Stallman <rms@gnu.org>
parents: 12617
diff changeset
1954 /* Make binding buffer-file-name to nil effective. */
e71c530e5ae5 (prepare_to_modify_buffer): Don't lock the file
Richard M. Stallman <rms@gnu.org>
parents: 12617
diff changeset
1955 && !NILP (current_buffer->filename)
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
1956 && SAVE_MODIFF >= MODIFF)
11657
ab5f12280452 (prepare_to_modify_buffer): Use file_truename for locking.
Richard M. Stallman <rms@gnu.org>
parents: 11474
diff changeset
1957 lock_file (current_buffer->file_truename);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1958 #else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1959 /* At least warn if this file has changed on disk since it was visited. */
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
1960 if (!NILP (current_buffer->filename)
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
1961 && SAVE_MODIFF >= MODIFF
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
1962 && NILP (Fverify_visited_file_modtime (Fcurrent_buffer ()))
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
1963 && !NILP (Ffile_exists_p (current_buffer->filename)))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1964 call1 (intern ("ask-user-about-supersession-threat"),
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1965 current_buffer->filename);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1966 #endif /* not CLASH_DETECTION */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1967
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1968 signal_before_change (start, end, preserve_ptr);
2050
3ffbf2314074 (prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 2019
diff changeset
1969
9409
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1970 if (current_buffer->newline_cache)
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1971 invalidate_region_cache (current_buffer,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1972 current_buffer->newline_cache,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1973 start - BEG, Z - end);
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1974 if (current_buffer->width_run_cache)
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1975 invalidate_region_cache (current_buffer,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1976 current_buffer->width_run_cache,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1977 start - BEG, Z - end);
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1978
2050
3ffbf2314074 (prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 2019
diff changeset
1979 Vdeactivate_mark = Qt;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1980 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1981
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1982 /* These macros work with an argument named `preserve_ptr'
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1983 and a local variable named `preserve_marker'. */
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1984
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1985 #define PRESERVE_VALUE \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1986 if (preserve_ptr && NILP (preserve_marker)) \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1987 preserve_marker = Fcopy_marker (make_number (*preserve_ptr), Qnil)
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1988
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1989 #define RESTORE_VALUE \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1990 if (! NILP (preserve_marker)) \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1991 { \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1992 *preserve_ptr = marker_position (preserve_marker); \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1993 unchain_marker (preserve_marker); \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1994 }
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1995
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1996 #define PRESERVE_START_END \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1997 if (NILP (start_marker)) \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1998 start_marker = Fcopy_marker (start, Qnil); \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1999 if (NILP (end_marker)) \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2000 end_marker = Fcopy_marker (end, Qnil);
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2001
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2002 #define FETCH_START \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2003 (! NILP (start_marker) ? Fmarker_position (start_marker) : start)
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2004
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2005 #define FETCH_END \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2006 (! NILP (end_marker) ? Fmarker_position (end_marker) : end)
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2007
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
2008 /* Signal a change to the buffer immediately before it happens.
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2009 START_INT and END_INT are the bounds of the text to be changed.
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2010
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2011 If PRESERVE_PTR is nonzero, we relocate *PRESERVE_PTR
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2012 by holding its value temporarily in a marker. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2013
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
2014 void
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2015 signal_before_change (start_int, end_int, preserve_ptr)
16153
6c9c298680da (signal_before_change): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 16102
diff changeset
2016 int start_int, end_int;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2017 int *preserve_ptr;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2018 {
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
2019 Lisp_Object start, end;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2020 Lisp_Object start_marker, end_marker;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2021 Lisp_Object preserve_marker;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2022 struct gcpro gcpro1, gcpro2, gcpro3;
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
2023
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
2024 start = make_number (start_int);
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
2025 end = make_number (end_int);
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2026 preserve_marker = Qnil;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2027 start_marker = Qnil;
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2028 end_marker = Qnil;
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2029 GCPRO3 (preserve_marker, start_marker, end_marker);
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
2030
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2031 /* If buffer is unmodified, run a special hook for that case. */
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
2032 if (SAVE_MODIFF >= MODIFF
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
2033 && !NILP (Vfirst_change_hook)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
2034 && !NILP (Vrun_hooks))
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2035 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2036 PRESERVE_VALUE;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2037 PRESERVE_START_END;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2038 call1 (Vrun_hooks, Qfirst_change_hook);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2039 }
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
2040
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2041 /* Run the before-change-function if any.
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2042 We don't bother "binding" this variable to nil
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2043 because it is obsolete anyway and new code should not use it. */
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
2044 if (!NILP (Vbefore_change_function))
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2045 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2046 PRESERVE_VALUE;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2047 PRESERVE_START_END;
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2048 call2 (Vbefore_change_function, FETCH_START, FETCH_END);
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2049 }
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2050
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2051 /* Now run the before-change-functions if any. */
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2052 if (!NILP (Vbefore_change_functions))
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2053 {
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2054 Lisp_Object args[3];
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2055 Lisp_Object before_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2056 Lisp_Object after_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2057 struct gcpro gcpro1, gcpro2;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2058
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2059 PRESERVE_VALUE;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2060 PRESERVE_START_END;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2061
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2062 /* "Bind" before-change-functions and after-change-functions
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2063 to nil--but in a way that errors don't know about.
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2064 That way, if there's an error in them, they will stay nil. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2065 before_change_functions = Vbefore_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2066 after_change_functions = Vafter_change_functions;
12798
9ac61661054b (signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents: 12784
diff changeset
2067 Vbefore_change_functions = Qnil;
9ac61661054b (signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents: 12784
diff changeset
2068 Vafter_change_functions = Qnil;
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2069 GCPRO2 (before_change_functions, after_change_functions);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2070
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2071 /* Actually run the hook functions. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2072 args[0] = Qbefore_change_functions;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2073 args[1] = FETCH_START;
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2074 args[2] = FETCH_END;
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2075 run_hook_list_with_args (before_change_functions, 3, args);
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2076
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2077 /* "Unbind" the variables we "bound" to nil. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2078 Vbefore_change_functions = before_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2079 Vafter_change_functions = after_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2080 UNGCPRO;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2081 }
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
2082
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
2083 if (!NILP (current_buffer->overlays_before)
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
2084 || !NILP (current_buffer->overlays_after))
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2085 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2086 PRESERVE_VALUE;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2087 report_overlay_modification (FETCH_START, FETCH_END, 0,
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2088 FETCH_START, FETCH_END, Qnil);
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2089 }
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2090
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2091 if (! NILP (start_marker))
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2092 free_marker (start_marker);
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2093 if (! NILP (end_marker))
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
2094 free_marker (end_marker);
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2095 RESTORE_VALUE;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
2096 UNGCPRO;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2097 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2098
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
2099 /* Signal a change immediately after it happens.
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2100 CHARPOS is the character position of the start of the changed text.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2101 LENDEL is the number of characters of the text before the change.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2102 (Not the whole buffer; just the part that was changed.)
15123
d6106d651a71 (signal_after_change): Correct the arg to report_overlay_modification.
Richard M. Stallman <rms@gnu.org>
parents: 14479
diff changeset
2103 LENINS is the number of characters in that part of the text
d6106d651a71 (signal_after_change): Correct the arg to report_overlay_modification.
Richard M. Stallman <rms@gnu.org>
parents: 14479
diff changeset
2104 after the change. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2105
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
2106 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2107 signal_after_change (charpos, lendel, lenins)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2108 int charpos, lendel, lenins;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2109 {
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2110 /* If we are deferring calls to the after-change functions
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2111 and there are no before-change functions,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2112 just record the args that we were going to use. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2113 if (! NILP (Vcombine_after_change_calls)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2114 && NILP (Vbefore_change_function) && NILP (Vbefore_change_functions)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2115 && NILP (current_buffer->overlays_before)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2116 && NILP (current_buffer->overlays_after))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2117 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2118 Lisp_Object elt;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2119
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2120 if (!NILP (combine_after_change_list)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2121 && current_buffer != XBUFFER (combine_after_change_buffer))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2122 Fcombine_after_change_execute ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2123
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2124 elt = Fcons (make_number (charpos - BEG),
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2125 Fcons (make_number (Z - (charpos - lendel + lenins)),
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2126 Fcons (make_number (lenins - lendel), Qnil)));
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2127 combine_after_change_list
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2128 = Fcons (elt, combine_after_change_list);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2129 combine_after_change_buffer = Fcurrent_buffer ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2130
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2131 return;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2132 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2133
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2134 if (!NILP (combine_after_change_list))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2135 Fcombine_after_change_execute ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2136
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2137 /* Run the after-change-function if any.
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2138 We don't bother "binding" this variable to nil
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2139 because it is obsolete anyway and new code should not use it. */
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
2140 if (!NILP (Vafter_change_function))
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2141 call3 (Vafter_change_function,
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2142 make_number (charpos), make_number (charpos + lenins),
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2143 make_number (lendel));
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2144
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2145 if (!NILP (Vafter_change_functions))
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2146 {
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2147 Lisp_Object args[4];
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2148 Lisp_Object before_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2149 Lisp_Object after_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2150 struct gcpro gcpro1, gcpro2;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2151
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2152 /* "Bind" before-change-functions and after-change-functions
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2153 to nil--but in a way that errors don't know about.
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2154 That way, if there's an error in them, they will stay nil. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2155 before_change_functions = Vbefore_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2156 after_change_functions = Vafter_change_functions;
12798
9ac61661054b (signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents: 12784
diff changeset
2157 Vbefore_change_functions = Qnil;
9ac61661054b (signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents: 12784
diff changeset
2158 Vafter_change_functions = Qnil;
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2159 GCPRO2 (before_change_functions, after_change_functions);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2160
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2161 /* Actually run the hook functions. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2162 args[0] = Qafter_change_functions;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2163 XSETFASTINT (args[1], charpos);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2164 XSETFASTINT (args[2], charpos + lenins);
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2165 XSETFASTINT (args[3], lendel);
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2166 run_hook_list_with_args (after_change_functions,
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2167 4, args);
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2168
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2169 /* "Unbind" the variables we "bound" to nil. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2170 Vbefore_change_functions = before_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2171 Vafter_change_functions = after_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
2172 UNGCPRO;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2173 }
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
2174
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
2175 if (!NILP (current_buffer->overlays_before)
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
2176 || !NILP (current_buffer->overlays_after))
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2177 report_overlay_modification (make_number (charpos),
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2178 make_number (charpos + lenins),
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
2179 1,
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2180 make_number (charpos),
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2181 make_number (charpos + lenins),
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
2182 make_number (lendel));
13026
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
2183
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
2184 /* After an insertion, call the text properties
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
2185 insert-behind-hooks or insert-in-front-hooks. */
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
2186 if (lendel == 0)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
2187 report_interval_modification (charpos, charpos + lenins);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2188 }
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2189
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2190 Lisp_Object
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2191 Fcombine_after_change_execute_1 (val)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2192 Lisp_Object val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2193 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2194 Vcombine_after_change_calls = val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2195 return val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2196 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2197
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2198 DEFUN ("combine-after-change-execute", Fcombine_after_change_execute,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2199 Scombine_after_change_execute, 0, 0, 0,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2200 "This function is for use internally in `combine-after-change-calls'.")
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2201 ()
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2202 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2203 register Lisp_Object val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2204 int count = specpdl_ptr - specpdl;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2205 int beg, end, change;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2206 int begpos, endpos;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2207 Lisp_Object tail;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2208
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2209 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2210
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2211 Fset_buffer (combine_after_change_buffer);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2212
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2213 /* # chars unchanged at beginning of buffer. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2214 beg = Z - BEG;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2215 /* # chars unchanged at end of buffer. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2216 end = beg;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2217 /* Total amount of insertion (negative for deletion). */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2218 change = 0;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2219
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2220 /* Scan the various individual changes,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2221 accumulating the range info in BEG, END and CHANGE. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2222 for (tail = combine_after_change_list; CONSP (tail);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2223 tail = XCONS (tail)->cdr)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2224 {
17373
4f931fa4c0be (Fcombine_after_change_execute): Fix Lisp_Object/integer confusion.
Karl Heuer <kwzh@gnu.org>
parents: 17034
diff changeset
2225 Lisp_Object elt;
4f931fa4c0be (Fcombine_after_change_execute): Fix Lisp_Object/integer confusion.
Karl Heuer <kwzh@gnu.org>
parents: 17034
diff changeset
2226 int thisbeg, thisend, thischange;
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2227
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2228 /* Extract the info from the next element. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2229 elt = XCONS (tail)->car;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2230 if (! CONSP (elt))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2231 continue;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2232 thisbeg = XINT (XCONS (elt)->car);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2233
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2234 elt = XCONS (elt)->cdr;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2235 if (! CONSP (elt))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2236 continue;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2237 thisend = XINT (XCONS (elt)->car);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2238
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2239 elt = XCONS (elt)->cdr;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2240 if (! CONSP (elt))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2241 continue;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2242 thischange = XINT (XCONS (elt)->car);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2243
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2244 /* Merge this range into the accumulated range. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2245 change += thischange;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2246 if (thisbeg < beg)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2247 beg = thisbeg;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2248 if (thisend < end)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2249 end = thisend;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2250 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2251
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2252 /* Get the current start and end positions of the range
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2253 that was changed. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2254 begpos = BEG + beg;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2255 endpos = Z - end;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2256
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2257 /* We are about to handle these, so discard them. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2258 combine_after_change_list = Qnil;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2259
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2260 /* Now run the after-change functions for real.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2261 Turn off the flag that defers them. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2262 record_unwind_protect (Fcombine_after_change_execute_1,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2263 Vcombine_after_change_calls);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2264 signal_after_change (begpos, endpos - begpos - change, endpos - begpos);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2265
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2266 return unbind_to (count, val);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2267 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2268
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2269 syms_of_insdel ()
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2270 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2271 staticpro (&combine_after_change_list);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2272 combine_after_change_list = Qnil;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2273
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2274 DEFVAR_LISP ("combine-after-change-calls", &Vcombine_after_change_calls,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2275 "Used internally by the `combine-after-change-calls' macro.");
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2276 Vcombine_after_change_calls = Qnil;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2277
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2278 defsubr (&Scombine_after_change_execute);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2279 }