mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-24 08:51:10 -08:00
(adjust_markers_for_combining): This function deleted.
(adjust_markers_for_replace): Correctly adjust marker positions. Don't record these adjustment because they were recorded already. (combine_bytes): Don't adjust markers here.
This commit is contained in:
parent
5e522af4f3
commit
3019692c38
1 changed files with 19 additions and 52 deletions
71
src/insdel.c
71
src/insdel.c
|
|
@ -401,44 +401,6 @@ adjust_markers_for_delete (from, from_byte, to, to_byte)
|
|||
}
|
||||
}
|
||||
|
||||
/* Adjust all markers for a byte combining of NBYTES at char position
|
||||
FROM and byte position FROM_BYTE. */
|
||||
|
||||
static void
|
||||
adjust_markers_for_combining (from, from_byte, nbytes)
|
||||
register int from, from_byte, nbytes;
|
||||
{
|
||||
Lisp_Object marker;
|
||||
register struct Lisp_Marker *m;
|
||||
register int bytepos;
|
||||
register int to_byte = from_byte + nbytes;
|
||||
|
||||
marker = BUF_MARKERS (current_buffer);
|
||||
|
||||
while (!NILP (marker))
|
||||
{
|
||||
m = XMARKER (marker);
|
||||
bytepos = m->bytepos;
|
||||
|
||||
if (bytepos >= to_byte)
|
||||
{
|
||||
record_marker_adjustment (marker, - nbytes);
|
||||
m->charpos -= nbytes;
|
||||
}
|
||||
else if (bytepos > from_byte)
|
||||
{
|
||||
record_marker_adjustment (marker, from - m->charpos);
|
||||
m->charpos = from;
|
||||
m->bytepos = to_byte;
|
||||
}
|
||||
else if (bytepos == from_byte)
|
||||
{
|
||||
m->bytepos = to_byte;
|
||||
}
|
||||
|
||||
marker = m->chain;
|
||||
}
|
||||
}
|
||||
|
||||
/* Adjust all markers for calling record_delete for combining bytes.
|
||||
whose range in bytes is FROM_BYTE to TO_BYTE.
|
||||
|
|
@ -605,7 +567,8 @@ adjust_markers_for_replace (from, from_byte, old_chars, old_bytes,
|
|||
{
|
||||
Lisp_Object marker = BUF_MARKERS (current_buffer);
|
||||
int prev_to_byte = from_byte + old_bytes;
|
||||
int diff_chars = new_chars - old_chars;
|
||||
int diff_chars
|
||||
= (new_chars - combined_before_bytes) - (old_chars + combined_after_bytes);
|
||||
int diff_bytes = new_bytes - old_bytes;
|
||||
|
||||
while (!NILP (marker))
|
||||
|
|
@ -617,26 +580,30 @@ adjust_markers_for_replace (from, from_byte, old_chars, old_bytes,
|
|||
if (m->bytepos < prev_to_byte + combined_after_bytes)
|
||||
{
|
||||
/* Put it after the combining bytes. */
|
||||
m->bytepos = from_byte + new_bytes;
|
||||
m->charpos = from + new_chars;
|
||||
m->bytepos = from_byte + new_bytes + combined_after_bytes;
|
||||
m->charpos = from + new_chars - combined_before_bytes;
|
||||
}
|
||||
else
|
||||
{
|
||||
m->charpos += diff_chars;
|
||||
m->bytepos += diff_bytes;
|
||||
}
|
||||
if (m->charpos == from + new_chars)
|
||||
record_marker_adjustment (marker, - old_chars);
|
||||
}
|
||||
else if (m->bytepos > from_byte)
|
||||
else if (m->bytepos >= from_byte)
|
||||
{
|
||||
record_marker_adjustment (marker, from - m->charpos);
|
||||
m->charpos = from;
|
||||
m->bytepos = from_byte;
|
||||
m->bytepos = from_byte + combined_before_bytes;
|
||||
/* If all new bytes are combined in addition to that there
|
||||
are after combining bytes, we must set byte position of
|
||||
the marker after the after combining bytes. */
|
||||
if (combined_before_bytes == new_bytes)
|
||||
m->bytepos += combined_after_bytes;
|
||||
}
|
||||
|
||||
marker = m->chain;
|
||||
}
|
||||
|
||||
CHECK_MARKERS ();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1037,15 +1004,17 @@ count_combining_after (string, length, pos, pos_byte)
|
|||
/* Combine NBYTES stray trailing-codes, which were formerly separate
|
||||
characters, with the preceding character. These bytes
|
||||
are located after position POS / POS_BYTE, and the preceding character
|
||||
is located just before that position. */
|
||||
is located just before that position.
|
||||
|
||||
This function does not adjust markers for byte combining. That
|
||||
should be done in advance by the functions
|
||||
adjust_markers_for_insert, adjust_markers_for_delete, or
|
||||
adjust_markers_for_replace. */
|
||||
|
||||
static void
|
||||
combine_bytes (pos, pos_byte, nbytes)
|
||||
int pos, pos_byte, nbytes;
|
||||
{
|
||||
/* Adjust all markers. */
|
||||
adjust_markers_for_combining (pos, pos_byte, nbytes);
|
||||
|
||||
adjust_overlays_for_delete (pos, nbytes);
|
||||
|
||||
ADJUST_CHAR_POS (BUF_PT (current_buffer), BUF_PT_BYTE (current_buffer));
|
||||
|
|
@ -1056,8 +1025,6 @@ combine_bytes (pos, pos_byte, nbytes)
|
|||
if (BUF_INTERVALS (current_buffer) != 0)
|
||||
/* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES. */
|
||||
offset_intervals (current_buffer, pos, - nbytes);
|
||||
|
||||
CHECK_MARKERS ();
|
||||
}
|
||||
|
||||
/* Insert a sequence of NCHARS chars which occupy NBYTES bytes
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue