aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorZufu Liu <unknown>2023-01-10 09:13:46 +1100
committerZufu Liu <unknown>2023-01-10 09:13:46 +1100
commit5d71ee3725bb8d91937208b1aeaf3c99afa9a054 (patch)
treed862f3ed17b7f2f889e81317a8dcc29600e489ad /src
parent3b5beda672c3f6aede945a273f4bb42b54e462cb (diff)
downloadscintilla-mirror-5d71ee3725bb8d91937208b1aeaf3c99afa9a054.tar.gz
Bug [#2372]. Fix SCI_LINESJOIN bug where carriage returns were incorrectly
retained.
Diffstat (limited to 'src')
-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);
}
}
}