From dec5280501b36552ea642f804aad15846cb92d8e Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Mon, 15 Jan 2018 23:12:58 +0100 Subject: [PATCH] + fix: bug in joining lines algorithm --- src/Edit.c | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index c373c46a6..df99c1911 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -3630,36 +3630,28 @@ void EditJoinLinesEx(HWND hwnd, BOOL bPreserveParagraphs, BOOL bCRLF2Space) int cchJoin = -1; for (int i = 0; i < iSelCount; ++i) { - if (pszText[i] == '\r' || pszText[i] == '\n') + if ((pszText[i] == '\r') || (pszText[i] == '\n')) { - if (pszText[i] == '\r' && pszText[i + 1] == '\n') { ++i; } + if ((pszText[i+1] == '\r') || (pszText[i+1] == '\n')) { ++i; } - if (!StrChrA("\r\n",pszText[i+1]) && pszText[i+1]) + int j = ++i; + while (StrChrA("\r\n", pszText[j])) { ++j; } // swallow all next line-breaks + + if ((i < j) && (j < iSelCount) && pszText[j] && bPreserveParagraphs) { - // next char is non line-break - if (bCRLF2Space) { pszJoin[++cchJoin] = ' '; } - bModified = TRUE; - } - else { // we are between paragraphs - - // swallow all line-breaks - while (StrChrA("\r\n",pszText[i+1])) { - ++i; - bModified = TRUE; - } - - if (bPreserveParagraphs) { - if (pszText[i + 1] != 0) { - for (int k = 0; k < cchEOL; ++k) { pszJoin[++cchJoin] = szEOL[k]; } - if (cchJoin > cchEOL) { - for (int k = 0; k < cchEOL; ++k) { pszJoin[++cchJoin] = szEOL[k]; } - } - bModified = TRUE; - } + for (int k = 0; k < cchEOL; ++k) { pszJoin[++cchJoin] = szEOL[k]; } + if (bCRLF2Space) { + for (int k = 0; k < cchEOL; ++k) { pszJoin[++cchJoin] = szEOL[k]; } } } + else if ((j < iSelCount) && pszText[j] && bCRLF2Space) + { + pszJoin[++cchJoin] = ' '; + } + i = j; + bModified = TRUE; } - else { + if (i < iSelCount) { pszJoin[++cchJoin] = pszText[i]; // copy char } }