Fix "Single Line Uncomment" uncomments an extra line issue
Fix from: https://github.com/notepad-plus-plus/notepad-plus-plus/issues/12829#issuecomment-1737330242 Fix #12829
This commit is contained in:
parent
c4c1089231
commit
7bbe4d1ff8
|
@ -8459,26 +8459,26 @@ DWORD WINAPI Notepad_plus::backupDocument(void * /*param*/)
|
|||
//-- undoStreamComment: New function to undo stream comment around or within selection end-points.
|
||||
bool Notepad_plus::undoStreamComment(bool tryBlockComment)
|
||||
{
|
||||
const TCHAR *commentStart;
|
||||
const TCHAR *commentEnd;
|
||||
const TCHAR *commentLineSymbol;
|
||||
const TCHAR* commentStart;
|
||||
const TCHAR* commentEnd;
|
||||
const TCHAR* commentLineSymbol;
|
||||
|
||||
generic_string symbolStart;
|
||||
generic_string symbolEnd;
|
||||
generic_string symbol;
|
||||
|
||||
const int charbufLen = 10;
|
||||
TCHAR charbuf[charbufLen];
|
||||
TCHAR charbuf[charbufLen]{};
|
||||
|
||||
bool retVal = false;
|
||||
|
||||
Buffer * buf = _pEditView->getCurrentBuffer();
|
||||
Buffer* buf = _pEditView->getCurrentBuffer();
|
||||
//-- Avoid side-effects (e.g. cursor moves number of comment-characters) when file is read-only.
|
||||
if (buf->isReadOnly())
|
||||
return false;
|
||||
if (buf->getLangType() == L_USER)
|
||||
{
|
||||
UserLangContainer * userLangContainer = NppParameters::getInstance().getULCFromName(buf->getUserDefineLangName());
|
||||
UserLangContainer* userLangContainer = NppParameters::getInstance().getULCFromName(buf->getUserDefineLangName());
|
||||
if (!userLangContainer)
|
||||
return false;
|
||||
|
||||
|
@ -8528,7 +8528,7 @@ bool Notepad_plus::undoStreamComment(bool tryBlockComment)
|
|||
//-- Note: The caretPosition is either at selectionEnd or at selectionStart!! selectionStart is always before (smaller) than selectionEnd!!
|
||||
|
||||
//-- First, search all start_comment and end_comment before and after the selectionStart and selectionEnd position.
|
||||
const int iSelStart=0, iSelEnd=1;
|
||||
const int iSelStart = 0, iSelEnd = 1;
|
||||
const size_t N_CMNT = 2;
|
||||
intptr_t posStartCommentBefore[N_CMNT], posEndCommentBefore[N_CMNT], posStartCommentAfter[N_CMNT], posEndCommentAfter[N_CMNT];
|
||||
bool blnStartCommentBefore[N_CMNT], blnEndCommentBefore[N_CMNT], blnStartCommentAfter[N_CMNT], blnEndCommentAfter[N_CMNT];
|
||||
|
@ -8562,8 +8562,8 @@ bool Notepad_plus::undoStreamComment(bool tryBlockComment)
|
|||
&& (!blnEndCommentBefore[iSelStart] || (posStartCommentBefore[iSelStart] >= posEndCommentBefore[iSelStart]))
|
||||
&& (!blnStartCommentAfter[iSelStart] || (posEndCommentAfter[iSelStart] <= posStartCommentAfter[iSelStart])))
|
||||
{
|
||||
posStartComment = posStartCommentBefore[iSelStart];
|
||||
posEndComment = posEndCommentAfter[iSelStart];
|
||||
posStartComment = posStartCommentBefore[iSelStart];
|
||||
posEndComment = posEndCommentAfter[iSelStart];
|
||||
}
|
||||
else //-- Second, check if there is a stream-comment around the selectionEnd position:
|
||||
{
|
||||
|
@ -8583,16 +8583,16 @@ bool Notepad_plus::undoStreamComment(bool tryBlockComment)
|
|||
&& (!blnEndCommentBefore[iSelEnd] || (posStartCommentBefore[iSelEnd] >= posEndCommentBefore[iSelEnd]))
|
||||
&& (!blnStartCommentAfter[iSelEnd] || (posEndCommentAfter[iSelEnd] <= posStartCommentAfter[iSelEnd])))
|
||||
{
|
||||
posStartComment = posStartCommentBefore[iSelEnd];
|
||||
posEndComment = posEndCommentAfter[iSelEnd];
|
||||
posStartComment = posStartCommentBefore[iSelEnd];
|
||||
posEndComment = posEndCommentAfter[iSelEnd];
|
||||
}
|
||||
//-- Third, check if there is a stream-comment within the selected area:
|
||||
else if ( (blnStartCommentAfter[iSelStart] && (posStartCommentAfter[iSelStart] < selectionEnd))
|
||||
&& (blnEndCommentBefore[iSelEnd] && (posEndCommentBefore[iSelEnd] > selectionStart)))
|
||||
else if ((blnStartCommentAfter[iSelStart] && (posStartCommentAfter[iSelStart] < selectionEnd))
|
||||
&& (blnEndCommentBefore[iSelEnd] && (posEndCommentBefore[iSelEnd] > selectionStart)))
|
||||
{
|
||||
//-- If there are more than one stream-comment within the selection, take the first one after selectionStart!!
|
||||
posStartComment = posStartCommentAfter[iSelStart];
|
||||
posEndComment = posEndCommentAfter[iSelStart];
|
||||
//-- If there are more than one stream-comment within the selection, take the first one after selectionStart!!
|
||||
posStartComment = posStartCommentAfter[iSelStart];
|
||||
posEndComment = posEndCommentAfter[iSelStart];
|
||||
}
|
||||
//-- Finally, if there is no stream-comment, return
|
||||
else
|
||||
|
@ -8605,16 +8605,16 @@ bool Notepad_plus::undoStreamComment(bool tryBlockComment)
|
|||
//-- Ok, there are valid start-comment and valid end-comment around the caret-position.
|
||||
// Now, un-comment stream-comment:
|
||||
retVal = true;
|
||||
intptr_t startCommentLength = start_comment_length;
|
||||
intptr_t endCommentLength = end_comment_length;
|
||||
intptr_t startCommentLength = static_cast<intptr_t>(start_comment_length);
|
||||
intptr_t endCommentLength = static_cast<intptr_t>(end_comment_length);
|
||||
|
||||
//-- First delete end-comment, so that posStartCommentBefore does not change!
|
||||
//-- Get character before end-comment to decide, if there is a white character before the end-comment, which will be removed too!
|
||||
_pEditView->getGenericText(charbuf, charbufLen, posEndComment-1, posEndComment);
|
||||
if (wcsncmp(charbuf, white_space.c_str(), white_space.length()) == 0)
|
||||
_pEditView->getGenericText(charbuf, charbufLen, posEndComment - 1, posEndComment);
|
||||
if (wcsnicmp(charbuf, white_space.c_str(), white_space.length()) == 0)
|
||||
{
|
||||
endCommentLength +=1;
|
||||
posEndComment-=1;
|
||||
endCommentLength += 1;
|
||||
posEndComment -= 1;
|
||||
}
|
||||
//-- Delete end stream-comment string ---------
|
||||
_pEditView->execute(SCI_BEGINUNDOACTION);
|
||||
|
@ -8622,9 +8622,9 @@ bool Notepad_plus::undoStreamComment(bool tryBlockComment)
|
|||
_pEditView->execute(SCI_REPLACESEL, 0, reinterpret_cast<LPARAM>(""));
|
||||
|
||||
//-- Get character after start-comment to decide, if there is a white character after the start-comment, which will be removed too!
|
||||
_pEditView->getGenericText(charbuf, charbufLen, posStartComment+startCommentLength, posStartComment+startCommentLength+1);
|
||||
if (wcsncmp(charbuf, white_space.c_str(), white_space.length()) == 0)
|
||||
startCommentLength +=1;
|
||||
_pEditView->getGenericText(charbuf, charbufLen, posStartComment + startCommentLength, posStartComment + startCommentLength + 1);
|
||||
if (wcsnicmp(charbuf, white_space.c_str(), white_space.length()) == 0)
|
||||
startCommentLength += 1;
|
||||
|
||||
//-- Delete starting stream-comment string ---------
|
||||
_pEditView->execute(SCI_SETSEL, posStartComment, posStartComment + startCommentLength);
|
||||
|
@ -8636,36 +8636,34 @@ bool Notepad_plus::undoStreamComment(bool tryBlockComment)
|
|||
// selectionStart
|
||||
if (selectionStart > posStartComment)
|
||||
{
|
||||
if (selectionStart >= posStartComment+startCommentLength)
|
||||
selectionStartMove = -startCommentLength;
|
||||
if (selectionStart >= posStartComment + startCommentLength)
|
||||
selectionStartMove = -static_cast<intptr_t>(startCommentLength);
|
||||
else
|
||||
selectionStartMove = -selectionStart - posStartComment;
|
||||
selectionStartMove = -static_cast<intptr_t>(selectionStart - posStartComment);
|
||||
}
|
||||
else
|
||||
selectionStartMove = 0;
|
||||
|
||||
// selectionEnd
|
||||
if (selectionEnd >= posEndComment+endCommentLength)
|
||||
selectionEndMove = -startCommentLength+endCommentLength;
|
||||
if (selectionEnd >= posEndComment + endCommentLength)
|
||||
selectionEndMove = -static_cast<intptr_t>(startCommentLength + endCommentLength);
|
||||
else if (selectionEnd <= posEndComment)
|
||||
selectionEndMove = -startCommentLength;
|
||||
selectionEndMove = -static_cast<intptr_t>(startCommentLength);
|
||||
else
|
||||
selectionEndMove = -startCommentLength + (selectionEnd - posEndComment);
|
||||
selectionEndMove = -static_cast<intptr_t>(startCommentLength + (selectionEnd - posEndComment));
|
||||
|
||||
//-- Reset selection of text without deleted stream-comment-string
|
||||
if (move_caret)
|
||||
{
|
||||
// moving caret to the beginning of selected block
|
||||
_pEditView->execute(SCI_GOTOPOS, selectionEnd+selectionEndMove);
|
||||
_pEditView->execute(SCI_SETCURRENTPOS, selectionStart+selectionStartMove);
|
||||
_pEditView->execute(SCI_GOTOPOS, selectionEnd + selectionEndMove);
|
||||
_pEditView->execute(SCI_SETCURRENTPOS, selectionStart + selectionStartMove);
|
||||
}
|
||||
else
|
||||
{
|
||||
_pEditView->execute(SCI_SETSEL, selectionStart+selectionStartMove, selectionEnd+selectionEndMove);
|
||||
_pEditView->execute(SCI_SETSEL, selectionStart + selectionStartMove, selectionEnd + selectionEndMove);
|
||||
}
|
||||
}
|
||||
while (1); //do as long as stream-comments are within selection
|
||||
|
||||
} while (1); //do as long as stream-comments are within selection
|
||||
}
|
||||
|
||||
void Notepad_plus::monitoringStartOrStopAndUpdateUI(Buffer* pBuf, bool isStarting)
|
||||
|
|
Loading…
Reference in New Issue