annotate src/insdel.c @ 32174:13415f4f854a

(Frecursive_edit): Make sure redisplay can happen. (show_help_echo): Use safe_call instead of call_function; use safe_eval instead of eval_form.
author Gerd Moellmann <gerd@gnu.org>
date Thu, 05 Oct 2000 19:27:17 +0000
parents 43566b0aec59
children f9b498650e20
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.
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25764
diff changeset
2 Copyright (C) 1985, 86,93,94,95,97,98, 1999 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"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21323
diff changeset
29 #include "region-cache.h"
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
31 #ifndef NULL
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
32 #define NULL 0
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
33 #endif
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
34
11703
3c5b974e1c10 (make_gap): Make this new error check also check exceeding VALBITS.
Richard M. Stallman <rms@gnu.org>
parents: 11691
diff changeset
35 #define min(x, y) ((x) < (y) ? (x) : (y))
25025
be2881684382 (prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents: 24342
diff changeset
36 #define max(x, y) ((x) > (y) ? (x) : (y))
11703
3c5b974e1c10 (make_gap): Make this new error check also check exceeding VALBITS.
Richard M. Stallman <rms@gnu.org>
parents: 11691
diff changeset
37
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
38 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
39 static void insert_from_buffer_1 ();
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
40 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
41 static void gap_right P_ ((int, int));
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
42 static void adjust_markers_gap_motion P_ ((int, int, int));
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
43 static void adjust_markers_for_insert P_ ((int, int, int, int, int));
26731
9b7d48762152 (adjust_markers_for_delete): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 26715
diff changeset
44 void adjust_markers_for_delete P_ ((int, int, int, int));
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
45 static void adjust_markers_for_replace P_ ((int, int, int, int, int, int));
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
46 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
47
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
48 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
49
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
50 /* 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
51 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
52 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
53
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
54 /* 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
55 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
56 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
57 once the deferral ends.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
58
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
59 In each element.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
60 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
61 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
62 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
63 (negative for a deletion). */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
64 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
65
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
66 /* 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
67 Lisp_Object combine_after_change_buffer;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
68
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
69 /* Check all markers in the current buffer, looking for something invalid. */
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
70
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
71 static int check_markers_debug_flag;
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
72
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
73 #define CHECK_MARKERS() \
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
74 if (check_markers_debug_flag) \
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
75 check_markers (); \
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
76 else
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
77
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
78 void
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
79 check_markers ()
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
80 {
25764
72f00825a576 (copy_text): Removed unused variables.
Gerd Moellmann <gerd@gnu.org>
parents: 25662
diff changeset
81 register Lisp_Object tail;
23566
25baa4bda79d (check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents: 23555
diff changeset
82 int multibyte = ! NILP (current_buffer->enable_multibyte_characters);
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
83
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
84 tail = BUF_MARKERS (current_buffer);
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
85
28417
4b675266db04 * lisp.h (XCONS, XSTRING, XSYMBOL, XFLOAT, XPROCESS, XWINDOW, XSUBR, XBUFFER):
Ken Raeburn <raeburn@raeburn.org>
parents: 27664
diff changeset
86 while (! NILP (tail))
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
87 {
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
88 if (XMARKER (tail)->buffer->text != current_buffer->text)
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
89 abort ();
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
90 if (XMARKER (tail)->charpos > Z)
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
91 abort ();
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
92 if (XMARKER (tail)->bytepos > Z_BYTE)
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
93 abort ();
23566
25baa4bda79d (check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents: 23555
diff changeset
94 if (multibyte && ! CHAR_HEAD_P (FETCH_BYTE (XMARKER (tail)->bytepos)))
25baa4bda79d (check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents: 23555
diff changeset
95 abort ();
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
96
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
97 tail = XMARKER (tail)->chain;
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
98 }
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
99 }
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
100
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
101 /* Move gap to position CHARPOS.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
102 Note that this can quit! */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
103
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
104 void
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
105 move_gap (charpos)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
106 int charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
107 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
108 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
109 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
110
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
111 /* Move gap to byte position BYTEPOS, which is also char position CHARPOS.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 Note that this can quit! */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
114 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
115 move_gap_both (charpos, bytepos)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
116 int charpos, bytepos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
118 if (bytepos < GPT_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
119 gap_left (charpos, bytepos, 0);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
120 else if (bytepos > GPT_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
121 gap_right (charpos, bytepos);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
124 /* 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
125 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
126 and CHARPOS is the corresponding char position.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 If NEWGAP is nonzero, then don't update beg_unchanged and end_unchanged. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
129 static void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
130 gap_left (charpos, bytepos, newgap)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
131 register int charpos, bytepos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 int newgap;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 register unsigned char *to, *from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 register int i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 int new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 if (!newgap)
25373
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
139 BUF_COMPUTE_UNCHANGED (current_buffer, charpos, GPT);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
141 i = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 to = GAP_END_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 from = GPT_ADDR;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
144 new_s1 = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 /* Now copy the characters. To move the gap down,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 copy characters up. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 while (1)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 /* 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
152 i = new_s1 - bytepos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 if (i == 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 /* 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
156 Change BYTEPOS to be where we have actually moved the gap to. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 if (QUITP)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
159 bytepos = new_s1;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
160 charpos = BYTE_TO_CHAR (bytepos);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 /* Move at most 32000 chars before checking again for a quit. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 if (i > 32000)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 i = 32000;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 #ifdef GAP_USE_BCOPY
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 if (i >= 128
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 /* bcopy is safe if the two areas of memory do not overlap
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 or on systems where bcopy is always safe for moving upward. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 && (BCOPY_UPWARD_SAFE
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 || to - from >= 128))
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 /* If overlap is not safe, avoid it by not moving too many
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 characters at once. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 if (!BCOPY_UPWARD_SAFE && i > to - from)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 i = to - from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 new_s1 -= i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 from -= i, to -= i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 bcopy (from, to, i);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 #endif
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 new_s1 -= i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 while (--i >= 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 *--to = *--from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
190 /* 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
191 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
192 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
193 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
194 GPT_BYTE = bytepos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
195 GPT = charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
196 if (bytepos < charpos)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
197 abort ();
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
198 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 QUIT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 }
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 /* 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
203 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
204 and CHARPOS is the corresponding char position. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
205
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
206 static void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
207 gap_right (charpos, bytepos)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
208 register int charpos, bytepos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 register unsigned char *to, *from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 register int i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 int new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213
25373
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
214 BUF_COMPUTE_UNCHANGED (current_buffer, charpos, GPT);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
216 i = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 from = GAP_END_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 to = GPT_ADDR;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
219 new_s1 = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 /* Now copy the characters. To move the gap up,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 copy characters down. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 while (1)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 /* 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
227 i = bytepos - new_s1;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 if (i == 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 /* 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
231 Change BYTEPOS to be where we have actually moved the gap to. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 if (QUITP)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
234 bytepos = new_s1;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
235 charpos = BYTE_TO_CHAR (bytepos);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 /* Move at most 32000 chars before checking again for a quit. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 if (i > 32000)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 i = 32000;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 #ifdef GAP_USE_BCOPY
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 if (i >= 128
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 /* bcopy is safe if the two areas of memory do not overlap
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 or on systems where bcopy is always safe for moving downward. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 && (BCOPY_DOWNWARD_SAFE
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 || from - to >= 128))
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 /* If overlap is not safe, avoid it by not moving too many
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 characters at once. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 if (!BCOPY_DOWNWARD_SAFE && i > from - to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 i = from - to;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 new_s1 += i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 bcopy (from, to, i);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 from += i, to += i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 #endif
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 new_s1 += i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 while (--i >= 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 *to++ = *from++;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
265 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
266 - GAP_SIZE);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
267 GPT = charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
268 GPT_BYTE = bytepos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
269 if (bytepos < charpos)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
270 abort ();
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
271 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 QUIT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 }
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
274
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
275 /* 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
276 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
277
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 Also, any markers past the outside of that interval, in the direction
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 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
280 and then adjusted by AMOUNT.
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
281
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
282 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
283 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
284 deletion.)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
285
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
286 The markers' character positions are not altered,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
287 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
288
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
289 int adjust_markers_test;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
291 static void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
292 adjust_markers_gap_motion (from, to, amount)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 register int from, to, amount;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 {
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
295 /* 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
296 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
297 #if 0
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 Lisp_Object marker;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 register struct Lisp_Marker *m;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 register int mpos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
302 marker = BUF_MARKERS (current_buffer);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
304 while (!NILP (marker))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 m = XMARKER (marker);
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
307 mpos = m->bytepos;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 if (amount > 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 if (mpos > to && mpos < to + amount)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
311 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
312 if (adjust_markers_test)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
313 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
314 mpos = to + amount;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
315 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 {
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
319 /* 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
320 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
321 but then this range contains no markers. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 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
323 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
324 if (adjust_markers_test)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
325 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
326 mpos = from + amount;
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
327 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 if (mpos > from && mpos <= to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 mpos += amount;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 m->bufpos = mpos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 marker = m->chain;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 }
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
334 #endif
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 }
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
336
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
337 /* Adjust all markers for a deletion
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
338 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
339 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
340
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
341 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
342 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
343
26731
9b7d48762152 (adjust_markers_for_delete): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 26715
diff changeset
344 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
345 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
346 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
347 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
348 Lisp_Object marker;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
349 register struct Lisp_Marker *m;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
350 register int charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
351
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
352 marker = BUF_MARKERS (current_buffer);
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 while (!NILP (marker))
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
355 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
356 m = XMARKER (marker);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
357 charpos = m->charpos;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
358
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
359 if (charpos > Z)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
360 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
361
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
362 /* 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
363 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
364 if (charpos > to)
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
365 {
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
366 m->charpos -= to - from;
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
367 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
368 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
369
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
370 /* 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
371 else if (charpos > from)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
372 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
373 record_marker_adjustment (marker, from - charpos);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
374 m->charpos = from;
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
375 m->bytepos = from_byte;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
376 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
377
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
378 marker = m->chain;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
379 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
380 }
23259
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
381
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
382
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
383 /* 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
384 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
385 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
386
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
387 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
388 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
389 or BEFORE_MARKERS is true. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
390
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
391 static void
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
392 adjust_markers_for_insert (from, from_byte, to, to_byte, before_markers)
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
393 register int from, from_byte, to, to_byte;
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
394 int before_markers;
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
395 {
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
396 Lisp_Object marker;
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
397 int adjusted = 0;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
398 int nchars = to - from;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
399 int nbytes = to_byte - from_byte;
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
400
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
401 marker = BUF_MARKERS (current_buffer);
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
402
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
403 while (!NILP (marker))
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
404 {
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
405 register struct Lisp_Marker *m = XMARKER (marker);
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
406
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
407 /* In a single-byte buffer, a marker's two positions must be
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
408 equal. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
409 if (Z == Z_BYTE)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
410 {
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
411 if (m->charpos != m->bytepos)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
412 abort ();
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
413 }
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
414
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
415 if (m->bytepos == from_byte)
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
416 {
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
417 if (m->insertion_type || before_markers)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
418 {
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
419 m->bytepos = to_byte;
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
420 m->charpos = to;
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
421 if (m->insertion_type)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
422 adjusted = 1;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
423 }
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
424 }
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
425 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
426 {
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
427 m->bytepos += nbytes;
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
428 m->charpos += nchars;
20568
f0bacfbd9d47 (adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents: 20555
diff changeset
429 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
430
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
431 marker = m->chain;
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
432 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
433
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
434 /* 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
435 disordered overlays in the slot `overlays_before'. */
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
436 if (adjusted)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
437 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
438 }
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
439
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
440 /* 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
441
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
442 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
443 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
444 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
445 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
446 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
447 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
448 intervals. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
449
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
450 static void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
451 adjust_point (nchars, nbytes)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
452 int nchars, nbytes;
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
453 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
454 BUF_PT (current_buffer) += nchars;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
455 BUF_PT_BYTE (current_buffer) += nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
456
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
457 /* 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
458 if (ZV == ZV_BYTE
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
459 && PT != PT_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
460 abort ();
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
461 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
463 /* Adjust markers for a replacement of a text at FROM (FROM_BYTE) of
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
464 length OLD_CHARS (OLD_BYTES) to a new text of length NEW_CHARS
29065
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
465 (NEW_BYTES). It is assumed that OLD_CHARS > 0, i.e., this is not
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
466 an insertion. */
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
467
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
468 static void
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
469 adjust_markers_for_replace (from, from_byte, old_chars, old_bytes,
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
470 new_chars, new_bytes)
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
471 int from, from_byte, old_chars, old_bytes, new_chars, new_bytes;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
472 {
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
473 Lisp_Object marker = BUF_MARKERS (current_buffer);
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
474 int prev_to_byte = from_byte + old_bytes;
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
475 int diff_chars = new_chars - old_chars;
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
476 int diff_bytes = new_bytes - old_bytes;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
477
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
478 while (!NILP (marker))
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
479 {
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
480 register struct Lisp_Marker *m = XMARKER (marker);
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
481
29065
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
482 if (m->bytepos >= prev_to_byte)
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
483 {
29065
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
484 m->charpos += diff_chars;
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
485 m->bytepos += diff_bytes;
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
486 }
29065
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
487 else if (m->bytepos > from_byte)
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
488 {
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
489 m->charpos = from;
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
490 m->bytepos = from_byte;
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
491 }
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
492
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
493 marker = m->chain;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
494 }
23455
84276318b663 (adjust_markers_for_combining): This function deleted.
Kenichi Handa <handa@m17n.org>
parents: 23400
diff changeset
495
84276318b663 (adjust_markers_for_combining): This function deleted.
Kenichi Handa <handa@m17n.org>
parents: 23400
diff changeset
496 CHECK_MARKERS ();
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
497 }
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
498
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
499
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
500 /* Make the gap NBYTES_ADDED bytes longer. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
502 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
503 make_gap (nbytes_added)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
504 int nbytes_added;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 unsigned char *result;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 Lisp_Object tem;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 int real_gap_loc;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
509 int real_gap_loc_byte;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 int old_gap_size;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 /* 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
513 nbytes_added += 2000;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514
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
515 /* 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
516 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
517 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
518
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
519 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
520 >= ((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
521 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
522
31603
04e50cacc23f (make_gap): Use enlarge_buffer_text.
Gerd Moellmann <gerd@gnu.org>
parents: 29379
diff changeset
523 enlarge_buffer_text (current_buffer, nbytes_added);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 /* Prevent quitting in move_gap. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 tem = Vinhibit_quit;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 Vinhibit_quit = Qt;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 real_gap_loc = GPT;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
530 real_gap_loc_byte = GPT_BYTE;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 old_gap_size = GAP_SIZE;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 /* 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
534 GPT = Z + GAP_SIZE;
20574
928b9aff1e64 (make_gap): Set GPT_BYTE along with GPT.
Richard M. Stallman <rms@gnu.org>
parents: 20568
diff changeset
535 GPT_BYTE = Z_BYTE + GAP_SIZE;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
536 GAP_SIZE = nbytes_added;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 /* 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
539 This adjusts the markers properly too. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
540 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
541
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 /* Now combine the two into one large gap. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 GAP_SIZE += old_gap_size;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544 GPT = real_gap_loc;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
545 GPT_BYTE = real_gap_loc_byte;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
547 /* Put an anchor. */
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
548 *(Z_ADDR) = 0;
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
549
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 Vinhibit_quit = tem;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
553 /* 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
554 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
555 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
556 If FROM_MULTIBYTE != TO_MULTIBYTE, we convert.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
557
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
558 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
559
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
560 int
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
561 copy_text (from_addr, to_addr, nbytes,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
562 from_multibyte, to_multibyte)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
563 unsigned char *from_addr;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
564 unsigned char *to_addr;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
565 int nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
566 int from_multibyte, to_multibyte;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
567 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
568 if (from_multibyte == to_multibyte)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
569 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
570 bcopy (from_addr, to_addr, nbytes);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
571 return nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
572 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
573 else if (from_multibyte)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
574 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
575 int nchars = 0;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
576 int bytes_left = nbytes;
25764
72f00825a576 (copy_text): Removed unused variables.
Gerd Moellmann <gerd@gnu.org>
parents: 25662
diff changeset
577 Lisp_Object tbl = Qnil;
22876
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
578
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
579 /* We set the variable tbl to the reverse table of
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
580 Vnonascii_translation_table in advance. */
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
581 if (CHAR_TABLE_P (Vnonascii_translation_table))
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
582 {
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
583 tbl = Fchar_table_extra_slot (Vnonascii_translation_table,
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
584 make_number (0));
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
585 if (!CHAR_TABLE_P (tbl))
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
586 tbl = Qnil;
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
587 }
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
588
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
589 /* Convert multibyte to single byte. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
590 while (bytes_left > 0)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
591 {
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
592 int thislen, c;
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
593 c = STRING_CHAR_AND_LENGTH (from_addr, bytes_left, thislen);
22876
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
594 if (!SINGLE_BYTE_CHAR_P (c))
23028
2e93e3302328 (copy_text): Fix previous change, call
Kenichi Handa <handa@m17n.org>
parents: 22896
diff changeset
595 c = multibyte_char_to_unibyte (c, tbl);
22876
8c063663a19d (copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents: 22107
diff changeset
596 *to_addr++ = c;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
597 from_addr += thislen;
21676
81bbd2c2724a (copy_text): Count down bytes_left properly
Richard M. Stallman <rms@gnu.org>
parents: 21526
diff changeset
598 bytes_left -= thislen;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
599 nchars++;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
600 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
601 return nchars;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
602 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
603 else
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
604 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
605 unsigned char *initial_to_addr = to_addr;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
606
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
607 /* Convert single-byte to multibyte. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
608 while (nbytes > 0)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
609 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
610 int c = *from_addr++;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
611
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
612 if (c >= 0200)
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
613 {
21037
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
614 c = unibyte_char_to_multibyte (c);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
615 to_addr += CHAR_STRING (c, to_addr);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
616 nbytes--;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
617 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
618 else
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
619 /* Special case for speed. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
620 *to_addr++ = c, nbytes--;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
621 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
622 return to_addr - initial_to_addr;
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 }
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 /* 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
627 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
628 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
629
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
630 int
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
631 count_size_as_multibyte (ptr, nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
632 unsigned char *ptr;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
633 int nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
634 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
635 int i;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
636 int outgoing_nbytes = 0;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
637
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
638 for (i = 0; i < nbytes; i++)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
639 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
640 unsigned int c = *ptr++;
21037
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
641
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
642 if (c < 0200)
21037
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
643 outgoing_nbytes++;
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
644 else
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
645 {
21037
1290ba9ccec8 (DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents: 20998
diff changeset
646 c = unibyte_char_to_multibyte (c);
23133
48fb93ba8b10 (count_size_as_multibyte): Use macro CHAR_BYTES instead of Fchar_bytes.
Kenichi Handa <handa@m17n.org>
parents: 23053
diff changeset
647 outgoing_nbytes += CHAR_BYTES (c);
20608
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 }
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 return outgoing_nbytes;
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
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 /* 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
655 This function judges multibyteness based on
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
656 enable_multibyte_characters in the current buffer;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
657 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
658
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
659 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
660 prepare_to_modify_buffer could relocate the text. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
662 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
663 insert (string, nbytes)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 register unsigned char *string;
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21323
diff changeset
665 register int nbytes;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
667 if (nbytes > 0)
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
668 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
669 int opoint = PT;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
670 insert_1 (string, nbytes, 0, 1, 0);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
671 signal_after_change (opoint, 0, PT - opoint);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
672 update_compositions (opoint, PT, CHECK_BORDER);
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
673 }
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
674 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
676 /* 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
677
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
678 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
679 insert_and_inherit (string, nbytes)
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
680 register unsigned char *string;
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21323
diff changeset
681 register int nbytes;
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
682 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
683 if (nbytes > 0)
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
684 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
685 int opoint = PT;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
686 insert_1 (string, nbytes, 1, 1, 0);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
687 signal_after_change (opoint, 0, PT - opoint);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
688 update_compositions (opoint, PT, CHECK_BORDER);
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
689 }
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
690 }
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
691
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
692 /* Insert the character C before point. Do not inherit text properties. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 void
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 insert_char (c)
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
696 int c;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697 {
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
698 unsigned char str[MAX_MULTIBYTE_LENGTH];
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
699 int len;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
700
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
701 if (! NILP (current_buffer->enable_multibyte_characters))
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
702 len = CHAR_STRING (c, str);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
703 else
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
704 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
705 len = 1;
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
706 str[0] = c;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
707 }
17034
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
708
02f6d66c3a4b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16547
diff changeset
709 insert (str, len);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
712 /* Insert the null-terminated string S before point. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
714 void
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 insert_string (s)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 char *s;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 insert (s, strlen (s));
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 /* Like `insert' except that all markers pointing at the place where
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722 the insertion happens are adjusted to point after it.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 Don't use this function to insert part of a Lisp string,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 since gc could happen and relocate it. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
726 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
727 insert_before_markers (string, nbytes)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 unsigned char *string;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
729 register int nbytes;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
731 if (nbytes > 0)
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
732 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
733 int opoint = PT;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
734
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
735 insert_1 (string, nbytes, 0, 1, 1);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
736 signal_after_change (opoint, 0, PT - opoint);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
737 update_compositions (opoint, PT, CHECK_BORDER);
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
738 }
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
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
741 /* 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
742
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
743 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
744 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
745 unsigned char *string;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
746 register int nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
747 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
748 if (nbytes > 0)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
749 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
750 int opoint = PT;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
751
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
752 insert_1 (string, nbytes, 1, 1, 1);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
753 signal_after_change (opoint, 0, PT - opoint);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
754 update_compositions (opoint, PT, CHECK_BORDER);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
755 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
756 }
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
757
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
758 /* Subroutine used by the insert functions above. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
759
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
760 void
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
761 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
762 register unsigned char *string;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
763 register int nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
764 int inherit, prepare, before_markers;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
765 {
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
766 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
767 inherit, prepare, before_markers);
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
768 }
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
769
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
770
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
771 #ifdef BYTE_COMBINING_DEBUG
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
772
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
773 /* 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
774 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
775 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
776 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
777
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
778 int
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
779 count_combining_before (string, length, pos, pos_byte)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
780 unsigned char *string;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
781 int length;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
782 int pos, pos_byte;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
783 {
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
784 int len, combining_bytes;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
785 unsigned char *p;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
786
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
787 if (NILP (current_buffer->enable_multibyte_characters))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
788 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
789
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
790 /* At first, we can exclude the following cases:
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
791 (1) STRING[0] can't be a following byte of multibyte sequence.
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
792 (2) POS is the start of the current buffer.
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
793 (3) A character before POS is not a multibyte character. */
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
794 if (length == 0 || CHAR_HEAD_P (*string)) /* case (1) */
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
795 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
796 if (pos_byte == BEG_BYTE) /* case (2) */
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
797 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
798 len = 1;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
799 p = BYTE_POS_ADDR (pos_byte - 1);
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
800 while (! CHAR_HEAD_P (*p)) p--, len++;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
801 if (! BASE_LEADING_CODE_P (*p)) /* case (3) */
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
802 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
803
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
804 combining_bytes = BYTES_BY_CHAR_HEAD (*p) - len;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
805 if (combining_bytes <= 0)
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
806 /* The character preceding POS is, complete and no room for
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
807 combining bytes (combining_bytes == 0), or an independent 8-bit
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
808 character (combining_bytes < 0). */
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
809 return 0;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
810
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
811 /* We have a combination situation. Count the bytes at STRING that
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
812 may combine. */
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
813 p = string + 1;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
814 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
815 p++;
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
816
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
817 return (combining_bytes < p - string ? combining_bytes : p - string);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
818 }
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
819
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
820 /* 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
821 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
822 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
823 which combine in this way. Otherwise, return 0. */
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
824
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
825 int
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
826 count_combining_after (string, length, pos, pos_byte)
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
827 unsigned char *string;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
828 int length;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
829 int pos, pos_byte;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
830 {
25764
72f00825a576 (copy_text): Removed unused variables.
Gerd Moellmann <gerd@gnu.org>
parents: 25662
diff changeset
831 int opos_byte = pos_byte;
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
832 int i;
25764
72f00825a576 (copy_text): Removed unused variables.
Gerd Moellmann <gerd@gnu.org>
parents: 25662
diff changeset
833 int bytes;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
834 unsigned char *bufp;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
835
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
836 if (NILP (current_buffer->enable_multibyte_characters))
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
837 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
838
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
839 /* At first, we can exclude the following cases:
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
840 (1) The last byte of STRING is an ASCII.
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
841 (2) POS is the last of the current buffer.
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
842 (3) A character at POS can't be a following byte of multibyte
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
843 character. */
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
844 if (length > 0 && ASCII_BYTE_P (string[length - 1])) /* case (1) */
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
845 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
846 if (pos_byte == Z_BYTE) /* case (2) */
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
847 return 0;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
848 bufp = BYTE_POS_ADDR (pos_byte);
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
849 if (CHAR_HEAD_P (*bufp)) /* case (3) */
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
850 return 0;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
851
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
852 i = length - 1;
23203
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
853 while (i >= 0 && ! CHAR_HEAD_P (string[i]))
21126
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 i--;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
856 }
23203
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
857 if (i < 0)
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
858 {
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
859 /* All characters in STRING are not character head. We must
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
860 check also preceding bytes at POS. We are sure that the gap
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
861 is at POS. */
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
862 unsigned char *p = BEG_ADDR;
23203
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
863 i = pos_byte - 2;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
864 while (i >= 0 && ! CHAR_HEAD_P (p[i]))
23203
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
865 i--;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
866 if (i < 0 || !BASE_LEADING_CODE_P (p[i]))
23203
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
867 return 0;
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
868
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
869 bytes = BYTES_BY_CHAR_HEAD (p[i]);
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
870 return (bytes <= pos_byte - 1 - i + length
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
871 ? 0
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
872 : bytes - (pos_byte - 1 - i + length));
23203
a4e688757109 (count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents: 23155
diff changeset
873 }
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
874 if (!BASE_LEADING_CODE_P (string[i]))
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
875 return 0;
25509
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
876
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
877 bytes = BYTES_BY_CHAR_HEAD (string[i]) - (length - i);
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
878 bufp++, pos_byte++;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
879 while (!CHAR_HEAD_P (*bufp)) bufp++, pos_byte++;
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
880
d1fbe67c3f69 (count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents: 25373
diff changeset
881 return (bytes <= pos_byte - opos_byte ? bytes : pos_byte - opos_byte);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
882 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
883
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
884 #endif
23566
25baa4bda79d (check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents: 23555
diff changeset
885
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
886
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
887 /* 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
888 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
889 are the same as in insert_1. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
891 void
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
892 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
893 register unsigned char *string;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
894 register int nchars, nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
895 int inherit, prepare, before_markers;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
896 {
21054
5d592343630f (insert_1_both): If enable-multibyte-characters is nil,
Kenichi Handa <handa@m17n.org>
parents: 21037
diff changeset
897 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
898 nchars = nbytes;
5d592343630f (insert_1_both): If enable-multibyte-characters is nil,
Kenichi Handa <handa@m17n.org>
parents: 21037
diff changeset
899
21817
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
900 if (prepare)
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
901 /* Do this before moving and increasing the gap,
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
902 because the before-change hooks might move the gap
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
903 or make it smaller. */
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
904 prepare_to_modify_buffer (PT, PT, NULL);
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
905
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
906 if (PT != GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
907 move_gap_both (PT, PT_BYTE);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
908 if (GAP_SIZE < nbytes)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
909 make_gap (nbytes - GAP_SIZE);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
910
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
911 #ifdef BYTE_COMBINING_DEBUG
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
912 if (count_combining_before (string, nbytes, PT, PT_BYTE)
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
913 || count_combining_after (string, nbytes, PT, PT_BYTE))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
914 abort ();
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
915 #endif
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
916
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
917 /* Record deletion of the surrounding text that combines with
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
918 the insertion. This, together with recording the insertion,
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
919 will add up to the right stuff in the undo list. */
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
920 record_insert (PT, nchars);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
921 MODIFF++;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
922
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
923 bcopy (string, GPT_ADDR, nbytes);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
924
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
925 GAP_SIZE -= nbytes;
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
926 GPT += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
927 ZV += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
928 Z += nchars;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
929 GPT_BYTE += nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
930 ZV_BYTE += nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
931 Z_BYTE += nbytes;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
932 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
933
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
934 if (GPT_BYTE < GPT)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
935 abort ();
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
936
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
937 adjust_overlays_for_insert (PT, nchars);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
938 adjust_markers_for_insert (PT, PT_BYTE,
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
939 PT + nchars, PT_BYTE + nbytes,
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
940 before_markers);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
941
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
942 if (BUF_INTERVALS (current_buffer) != 0)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
943 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
944
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
945 if (!inherit && BUF_INTERVALS (current_buffer) != 0)
26604
381c4e70f9fb (insert_1_both): Call set_text_properties with last
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
946 set_text_properties (make_number (PT), make_number (PT + nchars),
381c4e70f9fb (insert_1_both): Call set_text_properties with last
Gerd Moellmann <gerd@gnu.org>
parents: 26404
diff changeset
947 Qnil, Qnil, Qnil);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
948
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
949 adjust_point (nchars, nbytes);
23538
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
950
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
951 CHECK_MARKERS ();
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
952 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
953
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
954 /* 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
955 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
956 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
957 copy them into the buffer.
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
958
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
959 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
960 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
961 without insert noticing. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
962
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
963 void
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
964 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
965 Lisp_Object string;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
966 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
967 int inherit;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
968 {
21765
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
969 int opoint = PT;
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
970 insert_from_string_1 (string, pos, pos_byte, length, length_byte,
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
971 inherit, 0);
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
972 signal_after_change (opoint, 0, PT - opoint);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
973 update_compositions (opoint, PT, CHECK_BORDER);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
974 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
975
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
976 /* 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
977 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
978
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
979 void
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
980 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
981 length, length_byte, inherit)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
982 Lisp_Object string;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
983 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
984 int inherit;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
985 {
21765
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
986 int opoint = PT;
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
987 insert_from_string_1 (string, pos, pos_byte, length, length_byte,
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
988 inherit, 1);
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
989 signal_after_change (opoint, 0, PT - opoint);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
990 update_compositions (opoint, PT, CHECK_BORDER);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
991 }
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
992
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
993 /* Subroutine of the insertion functions above. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
994
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
995 static void
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
996 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
997 inherit, before_markers)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
998 Lisp_Object string;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
999 register int pos, pos_byte, nchars, nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1000 int inherit, before_markers;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1001 {
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1002 struct gcpro gcpro1;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1003 int outgoing_nbytes = nbytes;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1004 INTERVAL intervals;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1005
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1006 /* Make OUTGOING_NBYTES describe the text
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1007 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
1008
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1009 if (NILP (current_buffer->enable_multibyte_characters))
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1010 outgoing_nbytes = nchars;
21246
6c16216d0e69 (insert_from_string_1, replace_range):
Richard M. Stallman <rms@gnu.org>
parents: 21244
diff changeset
1011 else if (! STRING_MULTIBYTE (string))
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1012 outgoing_nbytes
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1013 = 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
1014 nbytes);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1015
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1016 GCPRO1 (string);
21817
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
1017 /* Do this before moving and increasing the gap,
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
1018 because the before-change hooks might move the gap
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
1019 or make it smaller. */
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1020 prepare_to_modify_buffer (PT, PT, NULL);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1021
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1022 if (PT != GPT)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1023 move_gap_both (PT, PT_BYTE);
25170
dbc159883883 (insert_from_string_1): Check gap size against number
Andreas Schwab <schwab@suse.de>
parents: 25025
diff changeset
1024 if (GAP_SIZE < outgoing_nbytes)
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1025 make_gap (outgoing_nbytes - GAP_SIZE);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1026 UNGCPRO;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1027
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1028 /* 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
1029 between single-byte and multibyte. */
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1030 copy_text (XSTRING (string)->data + pos_byte, GPT_ADDR, nbytes,
21246
6c16216d0e69 (insert_from_string_1, replace_range):
Richard M. Stallman <rms@gnu.org>
parents: 21244
diff changeset
1031 STRING_MULTIBYTE (string),
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1032 ! NILP (current_buffer->enable_multibyte_characters));
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1033
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1034 #ifdef BYTE_COMBINING_DEBUG
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1035 /* 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
1036 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
1037 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
1038 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
1039 the text that has been stored by copy_text. */
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1040 if (count_combining_before (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE)
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1041 || count_combining_after (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1042 abort ();
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1043 #endif
22107
5507c26908af (insert_1_both, insert_from_string_1, replace_range)
Richard M. Stallman <rms@gnu.org>
parents: 21817
diff changeset
1044
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1045 record_insert (PT, nchars);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1046 MODIFF++;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1047
20642
818677afe7bc (insert_from_string_1): Decrement GAP_SIZE by
Kenichi Handa <handa@m17n.org>
parents: 20608
diff changeset
1048 GAP_SIZE -= outgoing_nbytes;
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1049 GPT += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1050 ZV += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1051 Z += nchars;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1052 GPT_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1053 ZV_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1054 Z_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1055 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
1056
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1057 if (GPT_BYTE < GPT)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1058 abort ();
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1059
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1060 adjust_overlays_for_insert (PT, nchars);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1061 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
1062 PT_BYTE + outgoing_nbytes,
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1063 before_markers);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1064
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1065 offset_intervals (current_buffer, PT, nchars);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1066
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1067 intervals = XSTRING (string)->intervals;
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1068 /* Get the intervals for the part of the string we are inserting. */
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21239
diff changeset
1069 if (nbytes < STRING_BYTES (XSTRING (string)))
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1070 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
1071
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1072 /* Insert those intervals. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1073 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
1074 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
1075
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1076 adjust_point (nchars, outgoing_nbytes);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1077 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1079 /* 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
1080 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
1081 into the current buffer.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1082
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1083 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
1084 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
1085
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1086 void
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1087 insert_from_buffer (buf, charpos, nchars, inherit)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1088 struct buffer *buf;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1089 int charpos, nchars;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1090 int inherit;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1091 {
21765
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
1092 int opoint = PT;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1093
21765
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
1094 insert_from_buffer_1 (buf, charpos, nchars, inherit);
747446245094 (insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents: 21676
diff changeset
1095 signal_after_change (opoint, 0, PT - opoint);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1096 update_compositions (opoint, PT, CHECK_BORDER);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1097 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1098
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1099 static void
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1100 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
1101 struct buffer *buf;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1102 int from, nchars;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1103 int inherit;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1104 {
22107
5507c26908af (insert_1_both, insert_from_string_1, replace_range)
Richard M. Stallman <rms@gnu.org>
parents: 21817
diff changeset
1105 register Lisp_Object temp;
23850
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1106 int chunk, chunk_expanded;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1107 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
1108 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
1109 int incoming_nbytes = to_byte - from_byte;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1110 int outgoing_nbytes = incoming_nbytes;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1111 INTERVAL intervals;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1112
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1113 /* Make OUTGOING_NBYTES describe the text
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1114 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
1115
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1116 if (NILP (current_buffer->enable_multibyte_characters))
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1117 outgoing_nbytes = nchars;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1118 else if (NILP (buf->enable_multibyte_characters))
23850
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1119 {
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1120 int outgoing_before_gap = 0;
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1121 int outgoing_after_gap = 0;
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1122
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1123 if (from < BUF_GPT (buf))
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1124 {
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1125 chunk = BUF_GPT_BYTE (buf) - from_byte;
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1126 if (chunk > incoming_nbytes)
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1127 chunk = incoming_nbytes;
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1128 outgoing_before_gap
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1129 = count_size_as_multibyte (BUF_BYTE_ADDRESS (buf, from_byte),
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1130 chunk);
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1131 }
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1132 else
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1133 chunk = 0;
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1134
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1135 if (chunk < incoming_nbytes)
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1136 outgoing_after_gap
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1137 = count_size_as_multibyte (BUF_BYTE_ADDRESS (buf,
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1138 from_byte + chunk),
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1139 incoming_nbytes - chunk);
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1140
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1141 outgoing_nbytes = outgoing_before_gap + outgoing_after_gap;
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1142 }
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1143
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1144 /* 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
1145 XSETINT (temp, outgoing_nbytes + Z);
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1146 if (outgoing_nbytes + Z != XINT (temp))
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1147 error ("Maximum buffer size exceeded");
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1148
21817
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
1149 /* Do this before moving and increasing the gap,
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
1150 because the before-change hooks might move the gap
4dbf2af94988 (insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents: 21765
diff changeset
1151 or make it smaller. */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1152 prepare_to_modify_buffer (PT, PT, NULL);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1153
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1154 if (PT != GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1155 move_gap_both (PT, PT_BYTE);
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1156 if (GAP_SIZE < outgoing_nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1157 make_gap (outgoing_nbytes - GAP_SIZE);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1158
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1159 if (from < BUF_GPT (buf))
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1160 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1161 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
1162 if (chunk > incoming_nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1163 chunk = incoming_nbytes;
23850
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1164 /* Record number of output bytes, so we know where
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1165 to put the output from the second copy_text. */
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1166 chunk_expanded
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1167 = copy_text (BUF_BYTE_ADDRESS (buf, from_byte),
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1168 GPT_ADDR, chunk,
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1169 ! NILP (buf->enable_multibyte_characters),
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1170 ! NILP (current_buffer->enable_multibyte_characters));
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1171 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1172 else
23850
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1173 chunk_expanded = chunk = 0;
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1174
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1175 if (chunk < incoming_nbytes)
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1176 copy_text (BUF_BYTE_ADDRESS (buf, from_byte + chunk),
23850
1a0fa0377fb3 (insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents: 23689
diff changeset
1177 GPT_ADDR + chunk_expanded, incoming_nbytes - chunk,
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1178 ! NILP (buf->enable_multibyte_characters),
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1179 ! NILP (current_buffer->enable_multibyte_characters));
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1180
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1181 #ifdef BYTE_COMBINING_DEBUG
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1182 /* 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
1183 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
1184 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
1185 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
1186 the text that has been stored by copy_text. */
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1187 if (count_combining_before (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE)
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1188 || count_combining_after (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1189 abort ();
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1190 #endif
22107
5507c26908af (insert_1_both, insert_from_string_1, replace_range)
Richard M. Stallman <rms@gnu.org>
parents: 21817
diff changeset
1191
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1192 record_insert (PT, nchars);
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1193 MODIFF++;
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1194
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1195 GAP_SIZE -= outgoing_nbytes;
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1196 GPT += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1197 ZV += nchars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1198 Z += nchars;
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1199 GPT_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1200 ZV_BYTE += outgoing_nbytes;
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1201 Z_BYTE += outgoing_nbytes;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1202 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
1203
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1204 if (GPT_BYTE < GPT)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1205 abort ();
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1206
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1207 adjust_overlays_for_insert (PT, nchars);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1208 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
1209 PT_BYTE + outgoing_nbytes,
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1210 0);
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1211
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1212 if (BUF_INTERVALS (current_buffer) != 0)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1213 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
1214
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1215 /* Get the intervals for the part of the string we are inserting. */
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1216 intervals = BUF_INTERVALS (buf);
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1217 if (outgoing_nbytes < BUF_Z_BYTE (buf) - BUF_BEG_BYTE (buf))
28813
12946e495506 (insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1218 {
12946e495506 (insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1219 if (buf == current_buffer && PT <= from)
12946e495506 (insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1220 from += nchars;
12946e495506 (insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1221 intervals = copy_intervals (intervals, from, nchars);
12946e495506 (insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
1222 }
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1223
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1224 /* Insert those intervals. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1225 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
1226
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1227 adjust_point (nchars, outgoing_nbytes);
20555
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
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1230 /* Record undo information and adjust markers and position keepers for
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1231 a replacement of a text PREV_TEXT at FROM to a new text of LEN
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1232 chars (LEN_BYTE bytes) which resides in the gap just after
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1233 GPT_ADDR.
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1234
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1235 PREV_TEXT nil means the new text was just inserted. */
20937
f77dcb2556c5 (adjust_before_replace): Comment added.
Kenichi Handa <handa@m17n.org>
parents: 20889
diff changeset
1236
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1237 void
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1238 adjust_after_replace (from, from_byte, prev_text, len, len_byte)
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1239 int from, from_byte, len, len_byte;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1240 Lisp_Object prev_text;
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1241 {
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1242 int nchars_del = 0, nbytes_del = 0;
23597
fda73fa21974 (byte_combining_error): New function.
Kenichi Handa <handa@m17n.org>
parents: 23566
diff changeset
1243
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1244 #ifdef BYTE_COMBINING_DEBUG
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1245 if (count_combining_before (GPT_ADDR, len_byte, from, from_byte)
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1246 || count_combining_after (GPT_ADDR, len_byte, from, from_byte))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1247 abort ();
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1248 #endif
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1249
23538
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1250 if (STRINGP (prev_text))
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1251 {
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1252 nchars_del = XSTRING (prev_text)->size;
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1253 nbytes_del = STRING_BYTES (XSTRING (prev_text));
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1254 }
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1255
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1256 /* Update various buffer positions for the new text. */
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1257 GAP_SIZE -= len_byte;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1258 ZV += len; Z+= len;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1259 ZV_BYTE += len_byte; Z_BYTE += len_byte;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1260 GPT += len; GPT_BYTE += len_byte;
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1261 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1262
29065
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
1263 if (nchars_del > 0)
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
1264 adjust_markers_for_replace (from, from_byte, nchars_del, nbytes_del,
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
1265 len, len_byte);
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
1266 else
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
1267 adjust_markers_for_insert (from, from_byte,
e8d5eb064973 (adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 29012
diff changeset
1268 from + len, from_byte + len_byte, 0);
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1269
23538
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1270 if (! EQ (current_buffer->undo_list, Qt))
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1271 {
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1272 if (nchars_del > 0)
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1273 record_delete (from, prev_text);
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1274 record_insert (from, len);
23538
84ad9e201361 (adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents: 23455
diff changeset
1275 }
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1276
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1277 if (len > nchars_del)
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1278 adjust_overlays_for_insert (from, len - nchars_del);
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1279 else if (len < nchars_del)
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1280 adjust_overlays_for_delete (from, nchars_del - len);
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1281 if (BUF_INTERVALS (current_buffer) != 0)
23137
fed2ba47003f (adjust_after_replace): Fix the code to recode undo
Kenichi Handa <handa@m17n.org>
parents: 23133
diff changeset
1282 {
fed2ba47003f (adjust_after_replace): Fix the code to recode undo
Kenichi Handa <handa@m17n.org>
parents: 23133
diff changeset
1283 offset_intervals (current_buffer, from, len - nchars_del);
fed2ba47003f (adjust_after_replace): Fix the code to recode undo
Kenichi Handa <handa@m17n.org>
parents: 23133
diff changeset
1284 }
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1285
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1286 if (from < PT)
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1287 adjust_point (len - nchars_del, len_byte - nbytes_del);
21139
48b83e612b06 (adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents: 21137
diff changeset
1288
23566
25baa4bda79d (check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents: 23555
diff changeset
1289 /* As byte combining will decrease Z, we must check this again. */
25373
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1290 if (Z - GPT < END_UNCHANGED)
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1291 END_UNCHANGED = Z - GPT;
23566
25baa4bda79d (check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents: 23555
diff changeset
1292
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1293 CHECK_MARKERS ();
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1294
20725
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1295 if (len == 0)
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1296 evaporate_overlays (from);
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1297 MODIFF++;
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1298 }
bd592c9c3ef6 (adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1299
21323
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1300 /* Record undo information, adjust markers and position keepers for an
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1301 insertion of a text from FROM (FROM_BYTE) to TO (TO_BYTE). The
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1302 text already exists in the current buffer but character length (TO
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1303 - FROM) may be incorrect, the correct length is NEWLEN. */
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1304
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1305 void
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1306 adjust_after_insert (from, from_byte, to, to_byte, newlen)
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1307 int from, from_byte, to, to_byte, newlen;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1308 {
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1309 int len = to - from, len_byte = to_byte - from_byte;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1310
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1311 if (GPT != to)
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1312 move_gap_both (to, to_byte);
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1313 GAP_SIZE += len_byte;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1314 GPT -= len; GPT_BYTE -= len_byte;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1315 ZV -= len; ZV_BYTE -= len_byte;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1316 Z -= len; Z_BYTE -= len_byte;
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1317 adjust_after_replace (from, from_byte, Qnil, newlen, len_byte);
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1318 }
6fe4f59fab8c (adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents: 21307
diff changeset
1319
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1320 /* 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
1321 If PREPARE is nonzero, call prepare_to_modify_buffer.
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1322 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
1323 from the surrounding non-deleted text. */
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1324
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1325 /* 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
1326 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
1327 rather than a separate delete and insert.
23053
09d1521f9984 (replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents: 23028
diff changeset
1328 That way, undo will also handle markers properly.
09d1521f9984 (replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents: 23028
diff changeset
1329
09d1521f9984 (replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents: 23028
diff changeset
1330 But if MARKERS is 0, don't relocate markers. */
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1331
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1332 void
23053
09d1521f9984 (replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents: 23028
diff changeset
1333 replace_range (from, to, new, prepare, inherit, markers)
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1334 Lisp_Object new;
23053
09d1521f9984 (replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents: 23028
diff changeset
1335 int from, to, prepare, inherit, markers;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1336 {
20608
a6cca06d5aaf (count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20574
diff changeset
1337 int inschars = XSTRING (new)->size;
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21239
diff changeset
1338 int insbytes = STRING_BYTES (XSTRING (new));
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1339 int from_byte, to_byte;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1340 int nbytes_del, nchars_del;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1341 register Lisp_Object temp;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1342 struct gcpro gcpro1;
21136
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1343 INTERVAL intervals;
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1344 int outgoing_insbytes = insbytes;
23259
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1345 Lisp_Object deletion;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1346
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1347 CHECK_MARKERS ();
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1348
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1349 GCPRO1 (new);
31829
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31603
diff changeset
1350 deletion = Qnil;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1351
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1352 if (prepare)
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1353 {
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1354 int range_length = to - from;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1355 prepare_to_modify_buffer (from, to, &from);
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1356 to = from + range_length;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1357 }
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1358
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1359 UNGCPRO;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1360
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1361 /* Make args be valid */
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1362 if (from < BEGV)
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1363 from = BEGV;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1364 if (to > ZV)
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1365 to = ZV;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1366
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1367 from_byte = CHAR_TO_BYTE (from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1368 to_byte = CHAR_TO_BYTE (to);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1369
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1370 nchars_del = to - from;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1371 nbytes_del = to_byte - from_byte;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1372
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1373 if (nbytes_del <= 0 && insbytes == 0)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1374 return;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1375
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1376 /* Make OUTGOING_INSBYTES describe the text
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1377 as it will be inserted in this buffer. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1378
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1379 if (NILP (current_buffer->enable_multibyte_characters))
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1380 outgoing_insbytes = inschars;
21246
6c16216d0e69 (insert_from_string_1, replace_range):
Richard M. Stallman <rms@gnu.org>
parents: 21244
diff changeset
1381 else if (! STRING_MULTIBYTE (new))
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1382 outgoing_insbytes
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1383 = count_size_as_multibyte (XSTRING (new)->data, insbytes);
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1384
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1385 /* 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
1386 XSETINT (temp, Z_BYTE - nbytes_del + insbytes);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1387 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
1388 error ("Maximum buffer size exceeded");
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1389
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1390 GCPRO1 (new);
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1391
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1392 /* 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
1393 if (from > GPT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1394 gap_right (from, from_byte);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1395 if (to < GPT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1396 gap_left (to, to_byte, 0);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1397
23597
fda73fa21974 (byte_combining_error): New function.
Kenichi Handa <handa@m17n.org>
parents: 23566
diff changeset
1398 /* Even if we don't record for undo, we must keep the original text
fda73fa21974 (byte_combining_error): New function.
Kenichi Handa <handa@m17n.org>
parents: 23566
diff changeset
1399 because we may have to recover it because of inappropriate byte
fda73fa21974 (byte_combining_error): New function.
Kenichi Handa <handa@m17n.org>
parents: 23566
diff changeset
1400 combining. */
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1401 if (! EQ (current_buffer->undo_list, Qt))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1402 deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1);
23259
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1403
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1404 if (markers)
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1405 /* Relocate all markers pointing into the new, larger gap
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1406 to point at the end of the text before the gap.
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1407 Do this before recording the deletion,
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1408 so that undo handles this after reinserting the text. */
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1409 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
1410
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1411 GAP_SIZE += nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1412 ZV -= nchars_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1413 Z -= nchars_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1414 ZV_BYTE -= nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1415 Z_BYTE -= nbytes_del;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1416 GPT = from;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1417 GPT_BYTE = from_byte;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1418 *(GPT_ADDR) = 0; /* Put an anchor. */
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1419
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1420 if (GPT_BYTE < GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1421 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1422
25373
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1423 if (GPT - BEG < BEG_UNCHANGED)
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1424 BEG_UNCHANGED = GPT - BEG;
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1425 if (Z - GPT < END_UNCHANGED)
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1426 END_UNCHANGED = Z - GPT;
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1427
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1428 if (GAP_SIZE < insbytes)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1429 make_gap (insbytes - GAP_SIZE);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1430
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1431 /* Copy the string text into the buffer, perhaps converting
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1432 between single-byte and multibyte. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1433 copy_text (XSTRING (new)->data, GPT_ADDR, insbytes,
21246
6c16216d0e69 (insert_from_string_1, replace_range):
Richard M. Stallman <rms@gnu.org>
parents: 21244
diff changeset
1434 STRING_MULTIBYTE (new),
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1435 ! NILP (current_buffer->enable_multibyte_characters));
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1436
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1437 #ifdef BYTE_COMBINING_DEBUG
22896
6d368c9a689e (replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents: 22876
diff changeset
1438 /* We have copied text into the gap, but we have not marked
6d368c9a689e (replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents: 22876
diff changeset
1439 it as part of the buffer. So we can use the old FROM and FROM_BYTE
6d368c9a689e (replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents: 22876
diff changeset
1440 here, for both the previous text and the following text.
6d368c9a689e (replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents: 22876
diff changeset
1441 Meanwhile, GPT_ADDR does point to
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1442 the text that has been stored by copy_text. */
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1443 if (count_combining_before (GPT_ADDR, outgoing_insbytes, from, from_byte)
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1444 || count_combining_after (GPT_ADDR, outgoing_insbytes, from, from_byte))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1445 abort ();
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1446 #endif
21126
7628e474e89f (adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents: 21054
diff changeset
1447
23259
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1448 if (! EQ (current_buffer->undo_list, Qt))
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1449 {
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1450 record_delete (from, deletion);
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1451 record_insert (from, inschars);
23259
a3f818e927ba (adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents: 23212
diff changeset
1452 }
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1453
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1454 GAP_SIZE -= outgoing_insbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1455 GPT += inschars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1456 ZV += inschars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1457 Z += inschars;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1458 GPT_BYTE += outgoing_insbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1459 ZV_BYTE += outgoing_insbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1460 Z_BYTE += outgoing_insbytes;
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1461 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
1462
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1463 if (GPT_BYTE < GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1464 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1465
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1466 /* 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
1467 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
1468 adjust_overlays_for_delete (from, nchars_del);
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1469 adjust_overlays_for_insert (from, inschars);
23053
09d1521f9984 (replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents: 23028
diff changeset
1470 if (markers)
21239
81154898ac20 (replace_range): New arg NOMARKERS.
Richard M. Stallman <rms@gnu.org>
parents: 21236
diff changeset
1471 adjust_markers_for_insert (from, from_byte,
81154898ac20 (replace_range): New arg NOMARKERS.
Richard M. Stallman <rms@gnu.org>
parents: 21236
diff changeset
1472 from + inschars, from_byte + outgoing_insbytes,
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1473 0);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1474
22896
6d368c9a689e (replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents: 22876
diff changeset
1475 offset_intervals (current_buffer, from, 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
1476
be04baf3d970 (adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents: 21135
diff changeset
1477 /* 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
1478 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
1479 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
1480 /* Insert those intervals. */
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1481 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
1482 current_buffer, inherit);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1483
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1484 /* Relocate point as if it were a marker. */
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1485 if (from < PT)
23212
42fcd022d4e5 (adjust_after_replace): Don't add combining bytes to
Kenichi Handa <handa@m17n.org>
parents: 23203
diff changeset
1486 adjust_point ((from + inschars - (PT < to ? PT : to)),
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1487 (from_byte + outgoing_insbytes
23212
42fcd022d4e5 (adjust_after_replace): Don't add combining bytes to
Kenichi Handa <handa@m17n.org>
parents: 23203
diff changeset
1488 - (PT_BYTE < to_byte ? PT_BYTE : to_byte)));
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1489
21137
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1490 if (outgoing_insbytes == 0)
f4df45f5a0e2 (combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21136
diff changeset
1491 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
1492
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1493 CHECK_MARKERS ();
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1494
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1495 MODIFF++;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1496 UNGCPRO;
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1497
22896
6d368c9a689e (replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents: 22876
diff changeset
1498 signal_after_change (from, nchars_del, GPT - from);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1499 update_compositions (from, GPT, CHECK_BORDER);
18830
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1500 }
ac0f5f1912c0 (replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18446
diff changeset
1501
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1502 /* Delete characters in current buffer
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1503 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
1504 If TO comes before FROM, we delete nothing. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1505
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1506 void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1507 del_range (from, to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1508 register int from, to;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1509 {
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1510 del_range_1 (from, to, 1, 0);
6126
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
1511 }
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
1512
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1513 /* Like del_range; PREPARE says whether to call prepare_to_modify_buffer.
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1514 RET_STRING says to return the deleted text. */
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1515
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1516 Lisp_Object
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1517 del_range_1 (from, to, prepare, ret_string)
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1518 int from, to, prepare, ret_string;
6126
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
1519 {
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1520 int from_byte, to_byte;
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1521 Lisp_Object deletion;
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1522 struct gcpro gcpro1;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1523
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1524 /* Make args be valid */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1525 if (from < BEGV)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1526 from = BEGV;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1527 if (to > ZV)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1528 to = ZV;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1529
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1530 if (to <= from)
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1531 return Qnil;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1532
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1533 if (prepare)
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1534 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1535 int range_length = to - from;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1536 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
1537 to = from + range_length;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1538 }
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1539
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1540 from_byte = CHAR_TO_BYTE (from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1541 to_byte = CHAR_TO_BYTE (to);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1542
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1543 deletion = del_range_2 (from, from_byte, to, to_byte, ret_string);
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1544 GCPRO1(deletion);
24041
2eed8853546f (del_range_1): Call signal_after_change.
Kenichi Handa <handa@m17n.org>
parents: 23929
diff changeset
1545 signal_after_change (from, to - from, 0);
27664
c5c27d509bdf (del_range_1): Call update_compositions.
Kenichi Handa <handa@m17n.org>
parents: 26860
diff changeset
1546 update_compositions (from, from, CHECK_HEAD);
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1547 UNGCPRO;
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1548 return deletion;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1549 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1550
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1551 /* 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
1552
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1553 void
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1554 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
1555 int from_byte, to_byte, prepare;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1556 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1557 int from, to;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1558
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1559 /* Make args be valid */
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1560 if (from_byte < BEGV_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1561 from_byte = BEGV_BYTE;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1562 if (to_byte > ZV_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1563 to_byte = ZV_BYTE;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1564
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1565 if (to_byte <= from_byte)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1566 return;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1567
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1568 from = BYTE_TO_CHAR (from_byte);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1569 to = BYTE_TO_CHAR (to_byte);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1570
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1571 if (prepare)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1572 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1573 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
1574 int range_length = to - from;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1575 prepare_to_modify_buffer (from, to, &from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1576 to = from + range_length;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1577
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1578 if (old_from != from)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1579 from_byte = CHAR_TO_BYTE (from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1580 if (old_to == Z - to)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1581 to_byte = CHAR_TO_BYTE (to);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1582 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1583
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1584 del_range_2 (from, from_byte, to, to_byte, 0);
24041
2eed8853546f (del_range_1): Call signal_after_change.
Kenichi Handa <handa@m17n.org>
parents: 23929
diff changeset
1585 signal_after_change (from, to - from, 0);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1586 update_compositions (from, from, CHECK_HEAD);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1587 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1588
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1589 /* 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
1590 and bytepos. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1591
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1592 void
20983
288cf06bf65c (del_range_both): Reorder args. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 20937
diff changeset
1593 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
1594 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
1595 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1596 /* Make args be valid */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1597 if (from_byte < BEGV_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1598 from_byte = BEGV_BYTE;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1599 if (to_byte > ZV_BYTE)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1600 to_byte = ZV_BYTE;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1601
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1602 if (to_byte <= from_byte)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1603 return;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1604
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 if (from < BEGV)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606 from = BEGV;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1607 if (to > ZV)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608 to = ZV;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1610 if (prepare)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1611 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1612 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
1613 int range_length = to - from;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1614 prepare_to_modify_buffer (from, to, &from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1615 to = from + range_length;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1616
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1617 if (old_from != from)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1618 from_byte = CHAR_TO_BYTE (from);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1619 if (old_to == Z - to)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1620 to_byte = CHAR_TO_BYTE (to);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1621 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1622
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1623 del_range_2 (from, from_byte, to, to_byte, 0);
24041
2eed8853546f (del_range_1): Call signal_after_change.
Kenichi Handa <handa@m17n.org>
parents: 23929
diff changeset
1624 signal_after_change (from, to - from, 0);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1625 update_compositions (from, from, CHECK_HEAD);
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1626 }
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1627
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1628 /* 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
1629 and byte positions. FROM and TO are character positions,
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1630 while FROM_BYTE and TO_BYTE are byte positions.
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1631 If RET_STRING is true, the deleted area is returned as a string. */
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1632
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1633 Lisp_Object
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1634 del_range_2 (from, from_byte, to, to_byte, ret_string)
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1635 int from, from_byte, to, to_byte, ret_string;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1636 {
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1637 register int nbytes_del, nchars_del;
21236
90e90245e679 (insert_1_both, insert_from_string_1, insert_from_buffer_1):
Richard M. Stallman <rms@gnu.org>
parents: 21228
diff changeset
1638 Lisp_Object deletion;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1639
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1640 CHECK_MARKERS ();
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1641
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1642 nchars_del = to - from;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1643 nbytes_del = to_byte - from_byte;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645 /* 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
1646 if (from > GPT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1647 gap_right (from, from_byte);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1648 if (to < GPT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1649 gap_left (to, to_byte, 0);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1650
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1651 #ifdef BYTE_COMBINING_DEBUG
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1652 if (count_combining_before (BUF_BYTE_ADDRESS (current_buffer, to_byte),
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1653 Z_BYTE - to_byte, from, from_byte))
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1654 abort ();
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1655 #endif
21236
90e90245e679 (insert_1_both, insert_from_string_1, insert_from_buffer_1):
Richard M. Stallman <rms@gnu.org>
parents: 21228
diff changeset
1656
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1657 if (ret_string || ! EQ (current_buffer->undo_list, Qt))
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1658 deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1);
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1659 else
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1660 deletion = Qnil;
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1661
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1662 /* 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
1663 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
1664 Do this before recording the deletion,
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1665 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
1666 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
1667
22107
5507c26908af (insert_1_both, insert_from_string_1, replace_range)
Richard M. Stallman <rms@gnu.org>
parents: 21817
diff changeset
1668 if (! EQ (current_buffer->undo_list, Qt))
29012
9e67ee582342 (adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 28813
diff changeset
1669 record_delete (from, deletion);
1247
8dce1588f37f (del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents: 484
diff changeset
1670 MODIFF++;
8dce1588f37f (del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents: 484
diff changeset
1671
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1672 /* Relocate point as if it were a marker. */
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
1673 if (from < PT)
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1674 adjust_point (from - (PT < to ? PT : to),
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1675 from_byte - (PT_BYTE < to_byte ? PT_BYTE : to_byte));
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1676
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1677 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
1678
11474
510885be2758 (insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
1679 /* Adjust the overlay center as needed. This must be done after
12617
2a4a6e89558d Comment change.
Karl Heuer <kwzh@gnu.org>
parents: 12244
diff changeset
1680 adjusting the markers that bound the overlays. */
21191
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1681 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
1682
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1683 GAP_SIZE += nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1684 ZV_BYTE -= nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1685 Z_BYTE -= nbytes_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1686 ZV -= nchars_del;
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1687 Z -= nchars_del;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1688 GPT = from;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1689 GPT_BYTE = from_byte;
21191
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1690 *(GPT_ADDR) = 0; /* Put an anchor. */
b4e925500a71 (ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 21185
diff changeset
1691
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1692 if (GPT_BYTE < GPT)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1693 abort ();
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1694
25373
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1695 if (GPT - BEG < BEG_UNCHANGED)
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1696 BEG_UNCHANGED = GPT - BEG;
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1697 if (Z - GPT < END_UNCHANGED)
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1698 END_UNCHANGED = Z - GPT;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1699
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1700 CHECK_MARKERS ();
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
1701
8840
7242936baf4e (del_range_1): Call evaporate_overlays after deleting text.
Karl Heuer <kwzh@gnu.org>
parents: 8687
diff changeset
1702 evaporate_overlays (from);
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1703
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26731
diff changeset
1704 return deletion;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1705 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1706
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1707 /* 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
1708 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
1709 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
1710 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
1711 area. */
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1712
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1713 void
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1714 modify_region (buffer, start, end)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1715 struct buffer *buffer;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1716 int start, end;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1717 {
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1718 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
1719
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1720 if (buffer != old_buffer)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1721 set_buffer_internal (buffer);
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1722
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1723 prepare_to_modify_buffer (start, end, NULL);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1724
25373
6e6b29a72e2c (gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents: 25351
diff changeset
1725 BUF_COMPUTE_UNCHANGED (buffer, start - 1, end);
5237
378540cf056f (del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents: 5168
diff changeset
1726
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
1727 if (MODIFF <= SAVE_MODIFF)
5237
378540cf056f (del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents: 5168
diff changeset
1728 record_first_change ();
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1729 MODIFF++;
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1730
10564
69cae342dde5 (modify_region): Clear point_before_scroll field.
Richard M. Stallman <rms@gnu.org>
parents: 10391
diff changeset
1731 buffer->point_before_scroll = Qnil;
69cae342dde5 (modify_region): Clear point_before_scroll field.
Richard M. Stallman <rms@gnu.org>
parents: 10391
diff changeset
1732
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1733 if (buffer != old_buffer)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
1734 set_buffer_internal (old_buffer);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1735 }
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1736
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1737 /* 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
1738 which are char positions.
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1739
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
1740 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
1741 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
1742 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
1743
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1744 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
1745 by holding its value temporarily in a marker. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1746
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1747 void
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1748 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
1749 int start, end;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1750 int *preserve_ptr;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1751 {
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
1752 if (!NILP (current_buffer->read_only))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1753 Fbarf_if_buffer_read_only ();
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1754
25025
be2881684382 (prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents: 24342
diff changeset
1755 /* Let redisplay consider other windows than selected_window
be2881684382 (prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents: 24342
diff changeset
1756 if modifying another buffer. */
be2881684382 (prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents: 24342
diff changeset
1757 if (XBUFFER (XWINDOW (selected_window)->buffer) != current_buffer)
be2881684382 (prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents: 24342
diff changeset
1758 ++windows_or_buffers_changed;
be2881684382 (prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents: 24342
diff changeset
1759
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
1760 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
1761 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1762 if (preserve_ptr)
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1763 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1764 Lisp_Object preserve_marker;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1765 struct gcpro gcpro1;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1766 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
1767 GCPRO1 (preserve_marker);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1768 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
1769 *preserve_ptr = marker_position (preserve_marker);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1770 unchain_marker (preserve_marker);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1771 UNGCPRO;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1772 }
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1773 else
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1774 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
1775 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1776
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1777 #ifdef CLASH_DETECTION
11657
ab5f12280452 (prepare_to_modify_buffer): Use file_truename for locking.
Richard M. Stallman <rms@gnu.org>
parents: 11474
diff changeset
1778 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
1779 /* 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
1780 && !NILP (current_buffer->filename)
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
1781 && SAVE_MODIFF >= MODIFF)
11657
ab5f12280452 (prepare_to_modify_buffer): Use file_truename for locking.
Richard M. Stallman <rms@gnu.org>
parents: 11474
diff changeset
1782 lock_file (current_buffer->file_truename);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1783 #else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784 /* 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
1785 if (!NILP (current_buffer->filename)
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
1786 && SAVE_MODIFF >= MODIFF
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
1787 && NILP (Fverify_visited_file_modtime (Fcurrent_buffer ()))
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
1788 && !NILP (Ffile_exists_p (current_buffer->filename)))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789 call1 (intern ("ask-user-about-supersession-threat"),
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 current_buffer->filename);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1791 #endif /* not CLASH_DETECTION */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1792
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1793 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
1794
9409
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1795 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
1796 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
1797 current_buffer->newline_cache,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1798 start - BEG, Z - end);
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1799 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
1800 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
1801 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
1802 start - BEG, Z - end);
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
1803
2050
3ffbf2314074 (prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 2019
diff changeset
1804 Vdeactivate_mark = Qt;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1805 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1806
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1807 /* 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
1808 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
1809
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1810 #define PRESERVE_VALUE \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1811 if (preserve_ptr && NILP (preserve_marker)) \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1812 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
1813
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1814 #define RESTORE_VALUE \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1815 if (! NILP (preserve_marker)) \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1816 { \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1817 *preserve_ptr = marker_position (preserve_marker); \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1818 unchain_marker (preserve_marker); \
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1819 }
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1820
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1821 #define PRESERVE_START_END \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1822 if (NILP (start_marker)) \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1823 start_marker = Fcopy_marker (start, Qnil); \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1824 if (NILP (end_marker)) \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1825 end_marker = Fcopy_marker (end, Qnil);
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1826
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1827 #define FETCH_START \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1828 (! 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
1829
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1830 #define FETCH_END \
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1831 (! 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
1832
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1833 /* 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
1834 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
1835
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1836 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
1837 by holding its value temporarily in a marker. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1838
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1839 void
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1840 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
1841 int start_int, end_int;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1842 int *preserve_ptr;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1843 {
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
1844 Lisp_Object start, end;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1845 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
1846 Lisp_Object preserve_marker;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1847 struct gcpro gcpro1, gcpro2, gcpro3;
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
1848
23400
8a51c720f8d7 (signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents: 23340
diff changeset
1849 if (inhibit_modification_hooks)
8a51c720f8d7 (signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents: 23340
diff changeset
1850 return;
8a51c720f8d7 (signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents: 23340
diff changeset
1851
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
1852 start = make_number (start_int);
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
1853 end = make_number (end_int);
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1854 preserve_marker = Qnil;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1855 start_marker = Qnil;
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1856 end_marker = Qnil;
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1857 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
1858
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1859 /* 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
1860 if (SAVE_MODIFF >= MODIFF
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
1861 && !NILP (Vfirst_change_hook)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
1862 && !NILP (Vrun_hooks))
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1863 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1864 PRESERVE_VALUE;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1865 PRESERVE_START_END;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1866 call1 (Vrun_hooks, Qfirst_change_hook);
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1867 }
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
1868
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1869 /* Now run the before-change-functions if any. */
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
1870 if (!NILP (Vbefore_change_functions))
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
1871 {
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1872 Lisp_Object args[3];
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1873 Lisp_Object before_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1874 Lisp_Object after_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1875 struct gcpro gcpro1, gcpro2;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
1876
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1877 PRESERVE_VALUE;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1878 PRESERVE_START_END;
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1879
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1880 /* "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
1881 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
1882 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
1883 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
1884 after_change_functions = Vafter_change_functions;
12798
9ac61661054b (signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents: 12784
diff changeset
1885 Vbefore_change_functions = Qnil;
9ac61661054b (signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents: 12784
diff changeset
1886 Vafter_change_functions = Qnil;
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1887 GCPRO2 (before_change_functions, after_change_functions);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
1888
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1889 /* Actually run the hook functions. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1890 args[0] = Qbefore_change_functions;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1891 args[1] = FETCH_START;
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1892 args[2] = FETCH_END;
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1893 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
1894
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1895 /* "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
1896 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
1897 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
1898 UNGCPRO;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
1899 }
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
1900
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
1901 if (!NILP (current_buffer->overlays_before)
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
1902 || !NILP (current_buffer->overlays_after))
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1903 {
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1904 PRESERVE_VALUE;
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1905 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
1906 FETCH_START, FETCH_END, Qnil);
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1907 }
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1908
19331
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1909 if (! NILP (start_marker))
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1910 free_marker (start_marker);
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1911 if (! NILP (end_marker))
bc4c4e15a135 (signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents: 18830
diff changeset
1912 free_marker (end_marker);
18446
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1913 RESTORE_VALUE;
59d2f2a0a36e (prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents: 17446
diff changeset
1914 UNGCPRO;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1915 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1916
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1917 /* 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
1918 CHARPOS is the character position of the start of the changed text.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1919 LENDEL is the number of characters of the text before the change.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1920 (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
1921 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
1922 after the change. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1923
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
1924 void
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1925 signal_after_change (charpos, lendel, lenins)
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1926 int charpos, lendel, lenins;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1927 {
23400
8a51c720f8d7 (signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents: 23340
diff changeset
1928 if (inhibit_modification_hooks)
8a51c720f8d7 (signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents: 23340
diff changeset
1929 return;
8a51c720f8d7 (signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents: 23340
diff changeset
1930
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1931 /* 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
1932 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
1933 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
1934 if (! NILP (Vcombine_after_change_calls)
29379
ad856393dab2 (signal_before_change, signal_after_change): Don't check
Dave Love <fx@gnu.org>
parents: 29065
diff changeset
1935 && NILP (Vbefore_change_functions)
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1936 && NILP (current_buffer->overlays_before)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1937 && NILP (current_buffer->overlays_after))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1938 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1939 Lisp_Object elt;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1940
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1941 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
1942 && 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
1943 Fcombine_after_change_execute ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1944
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1945 elt = Fcons (make_number (charpos - BEG),
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1946 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
1947 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
1948 combine_after_change_list
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1949 = 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
1950 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
1951
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1952 return;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1953 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1954
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1955 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
1956 Fcombine_after_change_execute ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1957
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
1958 if (!NILP (Vafter_change_functions))
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
1959 {
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1960 Lisp_Object args[4];
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1961 Lisp_Object before_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1962 Lisp_Object after_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1963 struct gcpro gcpro1, gcpro2;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
1964
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1965 /* "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
1966 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
1967 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
1968 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
1969 after_change_functions = Vafter_change_functions;
12798
9ac61661054b (signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents: 12784
diff changeset
1970 Vbefore_change_functions = Qnil;
9ac61661054b (signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents: 12784
diff changeset
1971 Vafter_change_functions = Qnil;
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1972 GCPRO2 (before_change_functions, after_change_functions);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
1973
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1974 /* Actually run the hook functions. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1975 args[0] = Qafter_change_functions;
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1976 XSETFASTINT (args[1], charpos);
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1977 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
1978 XSETFASTINT (args[3], lendel);
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1979 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
1980 4, args);
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1981
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
1982 /* "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
1983 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
1984 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
1985 UNGCPRO;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
1986 }
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
1987
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
1988 if (!NILP (current_buffer->overlays_before)
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
1989 || !NILP (current_buffer->overlays_after))
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1990 report_overlay_modification (make_number (charpos),
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1991 make_number (charpos + lenins),
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
1992 1,
20555
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1993 make_number (charpos),
80a546059cbd (move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents: 19331
diff changeset
1994 make_number (charpos + lenins),
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
1995 make_number (lendel));
13026
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
1996
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
1997 /* 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
1998 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
1999 if (lendel == 0)
21526
fff9425b9230 (signal_after_change): Fix mixing of Lisp_Object and
Andreas Schwab <schwab@suse.de>
parents: 21514
diff changeset
2000 report_interval_modification (make_number (charpos),
fff9425b9230 (signal_after_change): Fix mixing of Lisp_Object and
Andreas Schwab <schwab@suse.de>
parents: 21514
diff changeset
2001 make_number (charpos + lenins));
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2002 }
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2003
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2004 Lisp_Object
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2005 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
2006 Lisp_Object val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2007 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2008 Vcombine_after_change_calls = val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2009 return val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2010 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2011
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2012 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
2013 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
2014 "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
2015 ()
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2016 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2017 int count = specpdl_ptr - specpdl;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2018 int beg, end, change;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2019 int begpos, endpos;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2020 Lisp_Object tail;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2021
23646
595d8a052b71 (Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents: 23600
diff changeset
2022 if (NILP (combine_after_change_list))
595d8a052b71 (Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents: 23600
diff changeset
2023 return Qnil;
595d8a052b71 (Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents: 23600
diff changeset
2024
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2025 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
2026
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2027 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
2028
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2029 /* # 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
2030 beg = Z - BEG;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2031 /* # 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
2032 end = beg;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2033 /* 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
2034 change = 0;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2035
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2036 /* Scan the various individual changes,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2037 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
2038 for (tail = combine_after_change_list; CONSP (tail);
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2039 tail = XCDR (tail))
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2040 {
17373
4f931fa4c0be (Fcombine_after_change_execute): Fix Lisp_Object/integer confusion.
Karl Heuer <kwzh@gnu.org>
parents: 17034
diff changeset
2041 Lisp_Object elt;
4f931fa4c0be (Fcombine_after_change_execute): Fix Lisp_Object/integer confusion.
Karl Heuer <kwzh@gnu.org>
parents: 17034
diff changeset
2042 int thisbeg, thisend, thischange;
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2043
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2044 /* Extract the info from the next element. */
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2045 elt = XCAR (tail);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2046 if (! CONSP (elt))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2047 continue;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2048 thisbeg = XINT (XCAR (elt));
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2049
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2050 elt = XCDR (elt);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2051 if (! CONSP (elt))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2052 continue;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2053 thisend = XINT (XCAR (elt));
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2054
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2055 elt = XCDR (elt);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2056 if (! CONSP (elt))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2057 continue;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25648
diff changeset
2058 thischange = XINT (XCAR (elt));
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2059
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2060 /* 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
2061 change += thischange;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2062 if (thisbeg < beg)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2063 beg = thisbeg;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2064 if (thisend < end)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2065 end = thisend;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2066 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2067
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2068 /* 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
2069 that was changed. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2070 begpos = BEG + beg;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2071 endpos = Z - end;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2072
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2073 /* 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
2074 combine_after_change_list = Qnil;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2075
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2076 /* 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
2077 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
2078 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
2079 Vcombine_after_change_calls);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2080 signal_after_change (begpos, endpos - begpos - change, endpos - begpos);
26860
96ecaefd97a0 (copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2081 update_compositions (begpos, endpos, CHECK_ALL);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2082
23646
595d8a052b71 (Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents: 23600
diff changeset
2083 return unbind_to (count, Qnil);
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2084 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2085
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21323
diff changeset
2086 void
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2087 syms_of_insdel ()
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2088 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2089 staticpro (&combine_after_change_list);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2090 combine_after_change_list = Qnil;
23646
595d8a052b71 (Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents: 23600
diff changeset
2091 combine_after_change_buffer = Qnil;
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2092
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
2093 DEFVAR_BOOL ("check-markers-debug-flag", &check_markers_debug_flag,
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
2094 "Non-nil means enable debugging checks for invalid marker positions.");
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
2095 check_markers_debug_flag = 0;
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2096 DEFVAR_LISP ("combine-after-change-calls", &Vcombine_after_change_calls,
21307
9ac5045a93ce (check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21274
diff changeset
2097 "Used internally by the `combine-after-change-calls' macro.");
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2098 Vcombine_after_change_calls = Qnil;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2099
25579
5662c18836ae (syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents: 25509
diff changeset
2100 DEFVAR_BOOL ("inhibit-modification-hooks", &inhibit_modification_hooks,
5662c18836ae (syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents: 25509
diff changeset
2101 "Non-nil means don't run any of the hooks that respond to buffer changes.\n\
5662c18836ae (syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents: 25509
diff changeset
2102 This affects `before-change-functions' and `after-change-functions',\n\
5662c18836ae (syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents: 25509
diff changeset
2103 as well as hooks attached to text properties and overlays.");
5662c18836ae (syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents: 25509
diff changeset
2104 inhibit_modification_hooks = 0;
5662c18836ae (syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents: 25509
diff changeset
2105
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2106 defsubr (&Scombine_after_change_execute);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
2107 }