aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Editor.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Editor.cxx')
-rw-r--r--src/Editor.cxx22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 3bf50b09e..fac808e54 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -1623,19 +1623,17 @@ bool Editor::WrapLines(WrapScope ws) {
void Editor::LinesJoin() {
if (!RangeContainsProtected(targetRange.start.Position(), targetRange.end.Position())) {
UndoGroup ug(pdoc);
- bool prevNonWS = true;
- for (Sci::Position pos = targetRange.start.Position(); pos < targetRange.end.Position(); pos++) {
- if (pdoc->IsPositionInLineEnd(pos)) {
- targetRange.end.Add(-pdoc->LenChar(pos));
- pdoc->DelChar(pos);
- if (prevNonWS) {
- // Ensure at least one space separating previous lines
- const Sci::Position lengthInserted = pdoc->InsertString(pos, " ", 1);
- targetRange.end.Add(lengthInserted);
- }
- } else {
- prevNonWS = pdoc->CharAt(pos) != ' ';
+ for (Sci::Position pos = pdoc->LineEndPosition(targetRange.start.Position()); pos < targetRange.end.Position();) {
+ const char chPrev = pdoc->CharAt(pos - 1);
+ const Sci::Position widthChar = pdoc->LenChar(pos);
+ targetRange.end.Add(-widthChar);
+ pdoc->DeleteChars(pos, widthChar);
+ if (chPrev != ' ') {
+ // Ensure at least one space separating previous lines
+ const Sci::Position lengthInserted = pdoc->InsertString(pos, " ", 1);
+ targetRange.end.Add(lengthInserted);
}
+ pos = pdoc->LineEndPosition(pos);
}
}
}