mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-26 07:15:21 +02:00
Fix smart hilight ranges.
Smart hilite relies on SCN_SCROLLED custom notification. Keep in mind to compile the Notepad++ SciLexer on SVN. git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository@328 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
56563f000d
commit
ab5c0fab62
@ -80,26 +80,45 @@ void SmartHighlighter::highlightView(ScintillaEditView * pHighlightView)
|
|||||||
// Get the range of text visible and highlight everything in it
|
// Get the range of text visible and highlight everything in it
|
||||||
int firstLine = (int)pHighlightView->execute(SCI_GETFIRSTVISIBLELINE);
|
int firstLine = (int)pHighlightView->execute(SCI_GETFIRSTVISIBLELINE);
|
||||||
int nrLines = min((int)pHighlightView->execute(SCI_LINESONSCREEN), MAXLINEHIGHLIGHT ) + 1;
|
int nrLines = min((int)pHighlightView->execute(SCI_LINESONSCREEN), MAXLINEHIGHLIGHT ) + 1;
|
||||||
int lastLine = (int)pHighlightView->execute(SCI_DOCLINEFROMVISIBLE, firstLine + nrLines);
|
int lastLine = firstLine+nrLines;
|
||||||
int startPos = (int)pHighlightView->execute(SCI_POSITIONFROMLINE, firstLine);
|
int startPos = 0;//(int)pHighlightView->execute(SCI_POSITIONFROMLINE, firstLine);
|
||||||
int endPos = (int)pHighlightView->execute(SCI_POSITIONFROMLINE, lastLine);
|
int endPos = 0;//(int)pHighlightView->execute(SCI_POSITIONFROMLINE, lastLine);
|
||||||
if (endPos == -1) { //past EOF
|
//if (endPos == -1) { //past EOF
|
||||||
endPos = (int)pHighlightView->getCurrentDocLen() - 1;
|
// endPos = (int)pHighlightView->getCurrentDocLen() - 1;
|
||||||
}
|
//}
|
||||||
|
int currentLine = firstLine;
|
||||||
|
int prevDocLineChecked = -1; //invalid start
|
||||||
|
|
||||||
FindOption fo;
|
FindOption fo;
|
||||||
fo._isMatchCase = true;
|
fo._isMatchCase = false;
|
||||||
fo._isWholeWord = true;
|
fo._isWholeWord = true;
|
||||||
|
|
||||||
|
const TCHAR * searchText = NULL;
|
||||||
#ifdef UNICODE
|
#ifdef UNICODE
|
||||||
WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance();
|
WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance();
|
||||||
unsigned int cp = pHighlightView->execute(SCI_GETCODEPAGE);
|
unsigned int cp = pHighlightView->execute(SCI_GETCODEPAGE);
|
||||||
const TCHAR * text2FindW = wmc->char2wchar(text2Find, cp);
|
const TCHAR * text2FindW = wmc->char2wchar(text2Find, cp);
|
||||||
_pFRDlg->processRange(ProcessMarkAll_2, text2FindW, NULL, startPos, endPos, NULL, &fo);
|
searchText = text2FindW;
|
||||||
#else
|
#else
|
||||||
_pFRDlg->processRange(ProcessMarkAll_2, text2Find, NULL, startPos, endPos, NULL, &fo);
|
searchText = text2Find;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
for(; currentLine < lastLine; currentLine++) {
|
||||||
|
int docLine = (int)pHighlightView->execute(SCI_DOCLINEFROMVISIBLE, currentLine);
|
||||||
|
if (docLine == prevDocLineChecked)
|
||||||
|
continue; //still on same line (wordwrap)
|
||||||
|
prevDocLineChecked = docLine;
|
||||||
|
startPos = (int)pHighlightView->execute(SCI_POSITIONFROMLINE, docLine);
|
||||||
|
endPos = (int)pHighlightView->execute(SCI_POSITIONFROMLINE, docLine+1);
|
||||||
|
if (endPos == -1) { //past EOF
|
||||||
|
endPos = (int)pHighlightView->getCurrentDocLen() - 1;
|
||||||
|
_pFRDlg->processRange(ProcessMarkAll_2, searchText, NULL, startPos, endPos, NULL, &fo);
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
_pFRDlg->processRange(ProcessMarkAll_2, searchText, NULL, startPos, endPos, NULL, &fo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// restore the original targets to avoid conflicts with the search/replace functions
|
// restore the original targets to avoid conflicts with the search/replace functions
|
||||||
pHighlightView->execute(SCI_SETTARGETSTART, originalStartPos);
|
pHighlightView->execute(SCI_SETTARGETSTART, originalStartPos);
|
||||||
pHighlightView->execute(SCI_SETTARGETEND, originalEndPos);
|
pHighlightView->execute(SCI_SETTARGETEND, originalEndPos);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user