diff options
author | Zufu Liu <unknown> | 2023-01-10 09:13:46 +1100 |
---|---|---|
committer | Zufu Liu <unknown> | 2023-01-10 09:13:46 +1100 |
commit | 5d71ee3725bb8d91937208b1aeaf3c99afa9a054 (patch) | |
tree | d862f3ed17b7f2f889e81317a8dcc29600e489ad /src/Editor.cxx | |
parent | 3b5beda672c3f6aede945a273f4bb42b54e462cb (diff) | |
download | scintilla-mirror-5d71ee3725bb8d91937208b1aeaf3c99afa9a054.tar.gz |
Bug [#2372]. Fix SCI_LINESJOIN bug where carriage returns were incorrectly
retained.
Diffstat (limited to 'src/Editor.cxx')
-rw-r--r-- | src/Editor.cxx | 22 |
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); } } } |