diff --git a/Versions/build.txt b/Versions/build.txt
index d75c403cf..a894381fc 100644
--- a/Versions/build.txt
+++ b/Versions/build.txt
@@ -1 +1 @@
-1718
+1721
diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf
index c6dbd4e80..2cdf385dc 100644
--- a/res/Notepad3.exe.manifest.conf
+++ b/res/Notepad3.exe.manifest.conf
@@ -3,7 +3,7 @@
Notepad3 ONIGURUMA
diff --git a/src/Edit.c b/src/Edit.c
index 01c6e8f7f..e4ceb1a68 100644
--- a/src/Edit.c
+++ b/src/Edit.c
@@ -5012,7 +5012,7 @@ static RegExResult_t _FindHasMatch(HWND hwnd, LPCEDITFINDREPLACE lpefr, DocPos
if (bMarkAll) {
EditClearAllOccurrenceMarkers(hwnd);
if (iPos >= 0) {
- EditMarkAll(hwnd, szFind, (int)(lpefr->fuFlags), 0, iTextEnd, false, false);
+ EditMarkAll(hwnd, szFind, (int)(lpefr->fuFlags), 0, iTextEnd);
if (FocusedView.HideNonMatchedLines) { EditHideNotMarkedLineRange(lpefr->hwnd, true); }
}
else {
@@ -5160,12 +5160,9 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
CheckDlgButton(hwnd, IDC_ALL_OCCURRENCES, BST_CHECKED);
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_MARKOCCUR_ONOFF, false);
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_MARKOCCUR_VISIBLE, false);
- EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_TOGGLE_VIEW, false);
- DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, true);
}
else {
CheckDlgButton(hwnd, IDC_ALL_OCCURRENCES, BST_UNCHECKED);
- DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, false);
EditClearAllOccurrenceMarkers(sg_pefrData->hwnd);
}
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_MARKOCCUR_VISIBLE, Settings.MarkOccurrencesMatchVisible);
@@ -5272,7 +5269,6 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
Settings.MarkOccurrencesMatchVisible = s_SaveMarkMatchVisible;
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_MARKOCCUR_ONOFF, true);
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_MARKOCCUR_VISIBLE, true);
- EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_TOGGLE_VIEW, true);
Globals.iReplacedOccurrences = 0;
Globals.FindReplaceMatchFoundState = FND_NOP;
@@ -5561,24 +5557,14 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, true);
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_MARKOCCUR_ONOFF, false);
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_MARKOCCUR_VISIBLE, false);
- EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_TOGGLE_VIEW, false);
_DelayMarkAll(hwnd, 0, s_InitialSearchStart);
}
else { // switched OFF
- //DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, IsMarkOccurrencesEnabled() && !Settings.MarkOccurrencesMatchVisible);
DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, false);
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_MARKOCCUR_ONOFF, true);
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_MARKOCCUR_VISIBLE, true);
- EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_TOGGLE_VIEW, true);
-
- if (FocusedView.HideNonMatchedLines) {
- SendWMCommand(hwnd, IDC_TOGGLE_VISIBILITY);
- }
- else {
- EditClearAllOccurrenceMarkers(sg_pefrData->hwnd);
- }
+ EditClearAllOccurrenceMarkers(sg_pefrData->hwnd);
InvalidateRect(GetDlgItem(hwnd, IDC_FINDTEXT), NULL, true);
-
}
}
break;
@@ -6169,6 +6155,9 @@ void EditMarkAllOccurrences(HWND hwnd, bool bForceClear)
bool const bWaitCursor = (Globals.iMarkOccurrencesCount > 4000) ? true : false;
if (bWaitCursor) { BeginWaitCursor(NULL); }
+ int searchFlags = EditAddSearchFlags(0, false, false, false,
+ Settings.MarkOccurrencesCurrentWord || Settings.MarkOccurrencesMatchWholeWords, false);
+
_IGNORE_NOTIFY_CHANGE_;
if (Settings.MarkOccurrencesMatchVisible) {
@@ -6181,10 +6170,10 @@ void EditMarkAllOccurrences(HWND hwnd, bool bForceClear)
// !!! don't clear all marks, else this method is re-called
// !!! on UpdateUI notification on drawing indicator mark
- EditMarkAll(hwnd, NULL, Settings.MarkOccurrencesCurrentWord, iPosStart, iPosEnd, Settings.MarkOccurrencesMatchCase, Settings.MarkOccurrencesMatchWholeWords);
+ EditMarkAll(hwnd, NULL, searchFlags, iPosStart, iPosEnd);
}
else {
- EditMarkAll(hwnd, NULL, Settings.MarkOccurrencesCurrentWord, 0, Sci_GetDocEndPosition(), Settings.MarkOccurrencesMatchCase, Settings.MarkOccurrencesMatchWholeWords);
+ EditMarkAll(hwnd, NULL, searchFlags, 0, Sci_GetDocEndPosition());
}
_OBSERVE_NOTIFY_CHANGE_;
@@ -6512,27 +6501,38 @@ void EditToggleView(HWND hwnd)
}
+
+//=============================================================================
+//
+// EditAddSearchFlags()
+//
+int EditAddSearchFlags(int flags, bool bRegEx, bool bWordStart, bool bMatchCase, bool bMatchWords, bool bDotMatchAll)
+{
+ flags |= (bRegEx) ? SCFIND_REGEXP : 0;
+ flags |= (bWordStart) ? SCFIND_WORDSTART : 0;
+ flags |= (bMatchWords) ? SCFIND_WHOLEWORD : 0;
+ flags |= (bMatchCase ? SCFIND_MATCHCASE : 0);
+ flags |= (bDotMatchAll ? SCFIND_DOT_MATCH_ALL : 0);
+ return flags;
+}
+
+
//=============================================================================
//
// EditMarkAll()
// Mark all occurrences of the matching text in range (by Aleksandar Lekov)
//
-void EditMarkAll(HWND hwnd, char* pszFind, int flags, DocPos rangeStart, DocPos rangeEnd, bool bMatchCase, bool bMatchWords)
+void EditMarkAll(HWND hwnd, char* pszFind, int flags, DocPos rangeStart, DocPos rangeEnd)
{
- char* pszText = NULL;
- char txtBuffer[HUGE_BUFFER] = { '\0' };
+ char txtBuffer[XHUGE_BUFFER] = { '\0' };
+ char* pszText = (pszFind != NULL) ? pszFind : txtBuffer;
DocPos iFindLength = 0;
- if (pszFind != NULL)
- pszText = pszFind;
- else
- pszText = txtBuffer;
-
- if (pszFind == NULL)
+ if (StrIsEmptyA(pszText))
{
if (SciCall_IsSelectionEmpty()) {
- if (flags) { // nothing selected, get word under caret if flagged
+ if (flags & SCFIND_WHOLEWORD) { // nothing selected, get word under caret if flagged
DocPos const iCurrPos = SciCall_GetCurrentPos();
DocPos const iWordStart = SciCall_WordStartPosition(iCurrPos, true);
DocPos const iWordEnd = SciCall_WordEndPosition(iCurrPos, true);
@@ -6540,12 +6540,10 @@ void EditMarkAll(HWND hwnd, char* pszFind, int flags, DocPos rangeStart, DocPos
StringCchCopyNA(txtBuffer, COUNTOF(txtBuffer), SciCall_GetRangePointer(iWordStart, iFindLength), iFindLength);
}
else {
- return; // no selection and no word mark chosen
+ return; // no pattern, no selection and no word mark chosen
}
}
- else { // selection found
-
- if (flags) { return; } // no current word matching if we have a selection
+ else { // we have a selection
// get current selection
DocPos const iSelStart = SciCall_GetSelectionStart();
@@ -6553,14 +6551,14 @@ void EditMarkAll(HWND hwnd, char* pszFind, int flags, DocPos rangeStart, DocPos
DocPos const iSelCount = (iSelEnd - iSelStart);
// if multiple lines are selected exit
- if ((SciCall_LineFromPosition(iSelStart) != SciCall_LineFromPosition(iSelEnd)) || (iSelCount >= HUGE_BUFFER)) {
+ if ((SciCall_LineFromPosition(iSelStart) != SciCall_LineFromPosition(iSelEnd)) || (iSelCount >= COUNTOF(txtBuffer))) {
return;
}
iFindLength = SciCall_GetSelText(pszText) - 1;
// exit if selection is not a word and Match whole words only is enabled
- if (bMatchWords) {
+ if (flags & SCFIND_WHOLEWORD) {
DocPos iSelStart2 = 0;
const char* delims = (Settings.AccelWordNavigation ? DelimCharsAccel : DelimChars);
while ((iSelStart2 <= iSelCount) && pszText[iSelStart2]) {
@@ -6571,10 +6569,6 @@ void EditMarkAll(HWND hwnd, char* pszFind, int flags, DocPos rangeStart, DocPos
}
}
}
- // set additional flags
- flags = flags ? SCFIND_WHOLEWORD : 0; // match current word under caret ?
- flags |= (bMatchWords) ? SCFIND_WHOLEWORD : 0;
- flags |= (bMatchCase ? SCFIND_MATCHCASE : 0);
}
else {
iFindLength = (DocPos)StringCchLenA(pszFind, FNDRPL_BUFFER);
@@ -6933,8 +6927,6 @@ void EditHideNotMarkedLineRange(HWND hwnd, bool bHideLines)
else // ===== fold lines without marker =====
{
// prepare hidden (folding) settings
- EditFinalizeStyling(hwnd, -1);
- EditMarkAllOccurrences(hwnd, true);
FocusedView.CodeFoldingAvailable = true;
FocusedView.ShowCodeFolding = true;
Style_SetFoldingFocusedView();
diff --git a/src/Edit.h b/src/Edit.h
index 2373d8385..49c21fbdd 100644
--- a/src/Edit.h
+++ b/src/Edit.h
@@ -103,7 +103,8 @@ void EditPrintInit();
void EditMatchBrace(HWND hwnd);
void EditClearAllOccurrenceMarkers(HWND hwnd);
void EditToggleView(HWND hwnd);
-void EditMarkAll(HWND hwnd, char* pszFind, int flags, DocPos rangeStart, DocPos rangeEnd, bool, bool);
+int EditAddSearchFlags(int flags, bool bRegEx, bool bWordStart, bool bMatchCase, bool bMatchWords, bool bDotMatchAll);
+void EditMarkAll(HWND hwnd, char* pszFind, int flags, DocPos rangeStart, DocPos rangeEnd);
void EditFinalizeStyling(HWND hwnd, DocPos iEndPos);
void EditUpdateUrlIndicators(HWND hwnd, DocPos startPos, DocPos endPos, bool);
void EditSetAccelWordNav(HWND hwnd,bool);
diff --git a/src/Notepad3.c b/src/Notepad3.c
index 116e072ee..6c4bd7660 100644
--- a/src/Notepad3.c
+++ b/src/Notepad3.c
@@ -3180,7 +3180,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
CheckCmd(hmenu, IDM_VIEW_MARKOCCUR_VISIBLE, Settings.MarkOccurrencesMatchVisible);
CheckCmd(hmenu, IDM_VIEW_MARKOCCUR_CASE, Settings.MarkOccurrencesMatchCase);
- EnableCmd(hmenu, IDM_VIEW_TOGGLE_VIEW, (Settings.MarkOccurrences > 0) && !Settings.MarkOccurrencesMatchVisible);
+ EnableCmd(hmenu, IDM_VIEW_TOGGLE_VIEW, (Settings.MarkOccurrences > 0));
CheckCmd(hmenu, IDM_VIEW_TOGGLE_VIEW, FocusedView.HideNonMatchedLines);
if (Settings.MarkOccurrencesMatchWholeWords) {
@@ -3295,7 +3295,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
}
UpdateSettingsCmds();
-
+
return FALSE;
}
@@ -5095,14 +5095,17 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
case IDM_VIEW_MARKOCCUR_ONOFF:
Settings.MarkOccurrences = (Settings.MarkOccurrences == 0) ? max_i(1, IniGetInt(L"Settings", L"MarkOccurrences", 1)) : 0;
- EnableCmd(GetMenu(hwnd), IDM_VIEW_TOGGLE_VIEW, (Settings.MarkOccurrences > 0) && !Settings.MarkOccurrencesMatchVisible);
+ if ((Settings.MarkOccurrences <= 0) && FocusedView.HideNonMatchedLines) {
+ EditToggleView(Globals.hwndEdit);
+ }
+ EnableCmd(GetMenu(hwnd), IDM_VIEW_TOGGLE_VIEW, (Settings.MarkOccurrences > 0));
MarkAllOccurrences(0, true);
+ UpdateToolbar();
break;
case IDM_VIEW_MARKOCCUR_VISIBLE:
Settings.MarkOccurrencesMatchVisible = !Settings.MarkOccurrencesMatchVisible;
MarkAllOccurrences(0, true);
- EnableCmd(GetMenu(hwnd), IDM_VIEW_TOGGLE_VIEW, (Settings.MarkOccurrences > 0) && !Settings.MarkOccurrencesMatchVisible);
break;
case IDM_VIEW_TOGGLE_VIEW:
@@ -8713,7 +8716,6 @@ static void _UpdateToolbarDelayed()
EnableTool(IDT_FILE_LAUNCH, b2);
-
EnableTool(IDT_EDIT_FIND, b2);
//EnableTool(IDT_EDIT_FINDNEXT,b2);
//EnableTool(IDT_EDIT_FINDPREV,b2 && StringCchLenA(Settings.EFR_Data.szFind,0));
@@ -8725,7 +8727,7 @@ static void _UpdateToolbarDelayed()
EnableTool(IDT_VIEW_TOGGLEFOLDS, b2 && (FocusedView.CodeFoldingAvailable && FocusedView.ShowCodeFolding));
- EnableTool(IDT_VIEW_TOGGLE_VIEW, b2 && ((Settings.MarkOccurrences > 0) && !Settings.MarkOccurrencesMatchVisible));
+ EnableTool(IDT_VIEW_TOGGLE_VIEW, b2 && (Settings.MarkOccurrences > 0));
CheckTool(IDT_VIEW_TOGGLE_VIEW, tv);
}
@@ -9870,9 +9872,9 @@ static int _UndoRedoActionMap(int token, UndoRedoSelection_t** selection)
(*selection) = (UndoRedoSelection_t*)utarray_eltptr(UndoRedoSelectionUTArray, utoken);
}
else {
- // this is a set request (filled redo pos)
- // is done in place, so:
- assert(false); //ยงยงยง should not occur
+ // this is a set request (fill redo pos)
+ assert(false); // not used yet
+ //utarray_insert(UndoRedoSelectionUTArray, (void*)(*selection), utoken);
}
// don't clear map item here (token used in redo/undo again)
}
diff --git a/src/VersionEx.h b/src/VersionEx.h
index 2bea626f5..7c4378645 100644
--- a/src/VersionEx.h
+++ b/src/VersionEx.h
@@ -7,8 +7,8 @@
#define SAPPNAME "Notepad3"
#define VERSION_MAJOR 5
#define VERSION_MINOR 19
-#define VERSION_REV 522
-#define VERSION_BUILD 1718
+#define VERSION_REV 525
+#define VERSION_BUILD 1721
#define SCINTILLA_VER 415+
#define ONIGURUMA_REGEX_VER 6.9.2
#define VERSION_PATCH ONIGURUMA