mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-27 11:52:25 +00:00
DEPM: reorganize a bit (no change intended)
Exit early if the cursor has not moved. Place comments where they belong.
This commit is contained in:
parent
2dc62d0405
commit
b59b968c3e
105
src/Text2.cpp
105
src/Text2.cpp
@ -819,6 +819,10 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
|
|||||||
Paragraph & oldpar = old.paragraph();
|
Paragraph & oldpar = old.paragraph();
|
||||||
bool const trackChanges = cur.buffer()->params().track_changes;
|
bool const trackChanges = cur.buffer()->params().track_changes;
|
||||||
|
|
||||||
|
// We do nothing if cursor did not move
|
||||||
|
if (cur.top() == old.top())
|
||||||
|
return false;
|
||||||
|
|
||||||
// We do not do anything on read-only documents
|
// We do not do anything on read-only documents
|
||||||
if (cur.buffer()->isReadonly())
|
if (cur.buffer()->isReadonly())
|
||||||
return false;
|
return false;
|
||||||
@ -827,6 +831,22 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
|
|||||||
if (oldpar.isFreeSpacing())
|
if (oldpar.isFreeSpacing())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// Find a common inset and the corresponding depth.
|
||||||
|
size_t depth = 0;
|
||||||
|
for (; depth < cur.depth(); ++depth)
|
||||||
|
if (&old.inset() == &cur[depth].inset())
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Whether a common inset is found and whether the cursor is still in
|
||||||
|
// the same paragraph (possibly nested).
|
||||||
|
bool const same_par = depth < cur.depth() && old.idx() == cur[depth].idx()
|
||||||
|
&& old.pit() == cur[depth].pit();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (1) If the chars around the old cursor were spaces, delete some of
|
||||||
|
* them, but only if the cursor has really moved.
|
||||||
|
*/
|
||||||
|
|
||||||
/* Ok I'll put some comments here about what is missing.
|
/* Ok I'll put some comments here about what is missing.
|
||||||
There are still some small problems that can lead to
|
There are still some small problems that can lead to
|
||||||
double spaces stored in the document file or space at
|
double spaces stored in the document file or space at
|
||||||
@ -844,61 +864,48 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
|
|||||||
// delete the LineSeparator.
|
// delete the LineSeparator.
|
||||||
// MISSING
|
// MISSING
|
||||||
|
|
||||||
// Find a common inset and the corresponding depth.
|
// find range of spaces around cursors
|
||||||
size_t depth = 0;
|
pos_type from = old.pos();
|
||||||
for (; depth < cur.depth(); ++depth)
|
while (from > 0
|
||||||
if (&old.inset() == &cur[depth].inset())
|
&& oldpar.isLineSeparator(from - 1)
|
||||||
break;
|
&& !oldpar.isDeleted(from - 1))
|
||||||
|
--from;
|
||||||
|
pos_type to = old.pos();
|
||||||
|
while (to < old.lastpos()
|
||||||
|
&& oldpar.isLineSeparator(to)
|
||||||
|
&& !oldpar.isDeleted(to))
|
||||||
|
++to;
|
||||||
|
|
||||||
// Whether a common inset is found and whether the cursor is still in
|
int num_spaces = to - from;
|
||||||
// the same paragraph (possibly nested).
|
// If we are not at the start of the paragraph, keep one space
|
||||||
bool const same_par = depth < cur.depth() && old.idx() == cur[depth].idx()
|
if (from != to && from > 0)
|
||||||
&& old.pit() == cur[depth].pit();
|
--num_spaces;
|
||||||
bool const same_par_pos = depth == cur.depth() - 1 && same_par
|
|
||||||
&& old.pos() == cur[depth].pos();
|
|
||||||
|
|
||||||
// If the chars around the old cursor were spaces, delete some of
|
// If cursor is inside range, keep one additional space
|
||||||
// them, but only if the cursor has really moved.
|
if (same_par && cur.pos() > from && cur.pos() < to)
|
||||||
if (!same_par_pos) {
|
--num_spaces;
|
||||||
// find range of spaces around cursors
|
|
||||||
pos_type from = old.pos();
|
|
||||||
while (from > 0
|
|
||||||
&& oldpar.isLineSeparator(from - 1)
|
|
||||||
&& !oldpar.isDeleted(from - 1))
|
|
||||||
--from;
|
|
||||||
pos_type to = old.pos();
|
|
||||||
while (to < old.lastpos()
|
|
||||||
&& oldpar.isLineSeparator(to)
|
|
||||||
&& !oldpar.isDeleted(to))
|
|
||||||
++to;
|
|
||||||
|
|
||||||
int num_spaces = to - from;
|
// Remove spaces and adapt cursor.
|
||||||
// If we are not at the start of the paragraph, keep one space
|
if (num_spaces > 0) {
|
||||||
if (from != to && from > 0)
|
old.recordUndo();
|
||||||
--num_spaces;
|
int const deleted =
|
||||||
|
deleteSpaces(oldpar, from, to, num_spaces, trackChanges);
|
||||||
// If cursor is inside range, keep one additional space
|
// correct cur position
|
||||||
if (same_par && cur.pos() > from && cur.pos() < to)
|
// FIXME: there can be other cursors pointing there, we should update them
|
||||||
--num_spaces;
|
if (same_par) {
|
||||||
|
if (cur[depth].pos() >= to)
|
||||||
// Remove spaces and adapt cursor.
|
cur[depth].pos() -= deleted;
|
||||||
if (num_spaces > 0) {
|
else if (cur[depth].pos() > from)
|
||||||
old.recordUndo();
|
cur[depth].pos() = min(from + 1, old.lastpos());
|
||||||
int const deleted =
|
need_anchor_change = true;
|
||||||
deleteSpaces(oldpar, from, to, num_spaces, trackChanges);
|
|
||||||
// correct cur position
|
|
||||||
// FIXME: there can be other cursors pointing there, we should update them
|
|
||||||
if (same_par) {
|
|
||||||
if (cur[depth].pos() >= to)
|
|
||||||
cur[depth].pos() -= deleted;
|
|
||||||
else if (cur[depth].pos() > from)
|
|
||||||
cur[depth].pos() = min(from + 1, old.lastpos());
|
|
||||||
need_anchor_change = true;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (2) If the paragraph where the cursor was is empty, delete it
|
||||||
|
*/
|
||||||
|
|
||||||
// only do our other magic if we changed paragraph
|
// only do our other magic if we changed paragraph
|
||||||
if (same_par)
|
if (same_par)
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user