mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-11 21:03:05 +08:00
+ chg: find/replace dialog: in case of "transform backslashes" do esc control seqs
This commit is contained in:
parent
52742dc4df
commit
c76ba3b704
489
src/Edit.c
489
src/Edit.c
@ -4911,196 +4911,197 @@ void EditGetExcerpt(HWND hwnd,LPWSTR lpszExcerpt,DWORD cchExcerpt)
|
||||
//
|
||||
static void _SetSearchFlags(HWND hwnd, LPEDITFINDREPLACE lpefr)
|
||||
{
|
||||
char szBuf[FNDRPL_BUFFER];
|
||||
if (lpefr) {
|
||||
char szBuf[FNDRPL_BUFFER];
|
||||
|
||||
bool bIsFindDlg = (GetDlgItem(Globals.hwndDlgFindReplace, IDC_REPLACE) == NULL);
|
||||
bool bIsFindDlg = (GetDlgItem(Globals.hwndDlgFindReplace, IDC_REPLACE) == NULL);
|
||||
|
||||
GetDlgItemTextW2MB(hwnd, IDC_FINDTEXT, szBuf, COUNTOF(szBuf));
|
||||
if (StringCchCompareXA(szBuf, lpefr->szFind) != 0) {
|
||||
StringCchCopyNA(lpefr->szFind, COUNTOF(lpefr->szFind), szBuf, COUNTOF(szBuf));
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
GetDlgItemTextW2MB(hwnd, IDC_FINDTEXT, szBuf, COUNTOF(szBuf));
|
||||
if (StringCchCompareXA(szBuf, lpefr->szFind) != 0) {
|
||||
StringCchCopyA(lpefr->szFind, COUNTOF(lpefr->szFind), szBuf);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
|
||||
GetDlgItemTextW2MB(hwnd, IDC_REPLACETEXT, szBuf, COUNTOF(szBuf));
|
||||
if (StringCchCompareXA(szBuf, lpefr->szReplace) != 0) {
|
||||
StringCchCopyNA(lpefr->szReplace, COUNTOF(lpefr->szReplace), szBuf, COUNTOF(szBuf));
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
GetDlgItemTextW2MB(hwnd, IDC_REPLACETEXT, szBuf, COUNTOF(szBuf));
|
||||
if (StringCchCompareXA(szBuf, lpefr->szReplace) != 0) {
|
||||
StringCchCopyA(lpefr->szReplace, COUNTOF(lpefr->szReplace), szBuf);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
|
||||
bool bIsFlagSet = ((lpefr->fuFlags & SCFIND_MATCHCASE) != 0);
|
||||
if (IsButtonChecked(hwnd, IDC_FINDCASE)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->fuFlags |= SCFIND_MATCHCASE;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->fuFlags &= ~(SCFIND_MATCHCASE);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
bIsFlagSet = ((lpefr->fuFlags & SCFIND_WHOLEWORD) != 0);
|
||||
if (IsButtonChecked(hwnd, IDC_FINDWORD)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->fuFlags |= SCFIND_WHOLEWORD;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->fuFlags &= ~(SCFIND_WHOLEWORD);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
bIsFlagSet = ((lpefr->fuFlags & SCFIND_WORDSTART) != 0);
|
||||
if (IsButtonChecked(hwnd, IDC_FINDSTART)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->fuFlags |= SCFIND_WORDSTART;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->fuFlags &= ~(SCFIND_WORDSTART);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
bIsFlagSet = ((lpefr->fuFlags & SCFIND_NP3_REGEX) != 0);
|
||||
if (IsButtonChecked(hwnd, IDC_FINDREGEXP)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->fuFlags |= SCFIND_NP3_REGEX;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->fuFlags &= ~(SCFIND_NP3_REGEX);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
if (bIsFlagSet) // check "dot match all" too
|
||||
{
|
||||
bIsFlagSet = ((lpefr->fuFlags & SCFIND_DOT_MATCH_ALL) != 0);
|
||||
if (IsButtonChecked(hwnd, IDC_DOT_MATCH_ALL)) {
|
||||
bool bIsFlagSet = ((lpefr->fuFlags & SCFIND_MATCHCASE) != 0);
|
||||
if (IsButtonChecked(hwnd, IDC_FINDCASE)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->fuFlags |= SCFIND_DOT_MATCH_ALL;
|
||||
lpefr->fuFlags |= SCFIND_MATCHCASE;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->fuFlags &= ~(SCFIND_MATCHCASE);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
bIsFlagSet = ((lpefr->fuFlags & SCFIND_WHOLEWORD) != 0);
|
||||
if (IsButtonChecked(hwnd, IDC_FINDWORD)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->fuFlags |= SCFIND_WHOLEWORD;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->fuFlags &= ~(SCFIND_WHOLEWORD);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
bIsFlagSet = ((lpefr->fuFlags & SCFIND_WORDSTART) != 0);
|
||||
if (IsButtonChecked(hwnd, IDC_FINDSTART)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->fuFlags |= SCFIND_WORDSTART;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->fuFlags &= ~(SCFIND_WORDSTART);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
bIsFlagSet = ((lpefr->fuFlags & SCFIND_NP3_REGEX) != 0);
|
||||
if (IsButtonChecked(hwnd, IDC_FINDREGEXP)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->fuFlags |= SCFIND_NP3_REGEX;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->fuFlags &= ~(SCFIND_NP3_REGEX);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
if (bIsFlagSet) // check "dot match all" too
|
||||
{
|
||||
bIsFlagSet = ((lpefr->fuFlags & SCFIND_DOT_MATCH_ALL) != 0);
|
||||
if (IsButtonChecked(hwnd, IDC_DOT_MATCH_ALL)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->fuFlags |= SCFIND_DOT_MATCH_ALL;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->fuFlags &= ~(SCFIND_DOT_MATCH_ALL);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bIsFlagSet = lpefr->bWildcardSearch;
|
||||
if (IsButtonChecked(hwnd, IDC_WILDCARDSEARCH)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->bWildcardSearch = true;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->bWildcardSearch = false;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
if (bIsFlagSet) // special setting for wildcardsearch
|
||||
{
|
||||
bIsFlagSet = ((lpefr->fuFlags & SCFIND_NP3_REGEX) != 0);
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->fuFlags |= SCFIND_NP3_REGEX;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
|
||||
bIsFlagSet = ((lpefr->fuFlags & SCFIND_DOT_MATCH_ALL) != 0);
|
||||
if (bIsFlagSet) {
|
||||
lpefr->fuFlags &= ~(SCFIND_DOT_MATCH_ALL);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bIsFlagSet = lpefr->bWildcardSearch;
|
||||
if (IsButtonChecked(hwnd, IDC_WILDCARDSEARCH)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->bWildcardSearch = true;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->bWildcardSearch = false;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
if (bIsFlagSet) // special setting for wildcardsearch
|
||||
{
|
||||
bIsFlagSet = ((lpefr->fuFlags & SCFIND_NP3_REGEX) != 0);
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->fuFlags |= SCFIND_NP3_REGEX;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
|
||||
bIsFlagSet = ((lpefr->fuFlags & SCFIND_DOT_MATCH_ALL) != 0);
|
||||
if (bIsFlagSet) {
|
||||
lpefr->fuFlags &= ~(SCFIND_DOT_MATCH_ALL);
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
bIsFlagSet = lpefr->bTransformBS;
|
||||
if (IsButtonChecked(hwnd, IDC_FINDTRANSFORMBS)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->bTransformBS = true;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->bTransformBS = false;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
bIsFlagSet = lpefr->bNoFindWrap;
|
||||
if (IsButtonChecked(hwnd, IDC_NOWRAP)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->bNoFindWrap = true;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->bNoFindWrap = false;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
bIsFlagSet = lpefr->bMarkOccurences;
|
||||
if (IsButtonChecked(hwnd, IDC_ALL_OCCURRENCES)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->bMarkOccurences = true;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->bMarkOccurences = false;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (bIsFindDlg)
|
||||
{
|
||||
bIsFlagSet = lpefr->bFindClose;
|
||||
if (IsButtonChecked(hwnd, IDC_FINDCLOSE)) {
|
||||
bIsFlagSet = lpefr->bNoFindWrap;
|
||||
if (IsButtonChecked(hwnd, IDC_NOWRAP)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->bFindClose = true;
|
||||
lpefr->bNoFindWrap = true;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->bFindClose = false;
|
||||
lpefr->bNoFindWrap = false;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else // replace close
|
||||
{
|
||||
bIsFlagSet = lpefr->bReplaceClose;
|
||||
if (IsButtonChecked(hwnd, IDC_FINDCLOSE)) {
|
||||
|
||||
bIsFlagSet = lpefr->bMarkOccurences;
|
||||
if (IsButtonChecked(hwnd, IDC_ALL_OCCURRENCES)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->bReplaceClose = true;
|
||||
lpefr->bMarkOccurences = true;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->bReplaceClose = false;
|
||||
lpefr->bMarkOccurences = false;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
bIsFlagSet = lpefr->bTransformBS;
|
||||
if (IsButtonChecked(hwnd, IDC_FINDTRANSFORMBS)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->bTransformBS = true;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->bTransformBS = false;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (bIsFindDlg)
|
||||
{
|
||||
bIsFlagSet = lpefr->bFindClose;
|
||||
if (IsButtonChecked(hwnd, IDC_FINDCLOSE)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->bFindClose = true;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->bFindClose = false;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else // replace close
|
||||
{
|
||||
bIsFlagSet = lpefr->bReplaceClose;
|
||||
if (IsButtonChecked(hwnd, IDC_FINDCLOSE)) {
|
||||
if (!bIsFlagSet) {
|
||||
lpefr->bReplaceClose = true;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bIsFlagSet) {
|
||||
lpefr->bReplaceClose = false;
|
||||
lpefr->bStateChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -5166,7 +5167,7 @@ static int _EditGetFindStrg(HWND hwnd, LPCEDITFINDREPLACE lpefr, LPSTR szFind,
|
||||
StringCchCopyA(szFind, cchCnt, lpefr->szFind);
|
||||
}
|
||||
else {
|
||||
GetFindPatternMB(szFind, cchCnt);
|
||||
GetFindPatternMB(szFind, cchCnt, lpefr->bTransformBS);
|
||||
StringCchCopyA(lpefr->szFind, COUNTOF(lpefr->szFind), szFind);
|
||||
}
|
||||
if (!StringCchLenA(szFind, cchCnt)) { return 0; }
|
||||
@ -5322,6 +5323,9 @@ static bool s_SaveTFBackSlashes = false;
|
||||
static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
static LPEDITFINDREPLACE sg_pefrData = NULL;
|
||||
|
||||
#define PEFRDATA(MEMBER) (sg_pefrData ? sg_pefrData->MEMBER : s_efrSave.MEMBER)
|
||||
|
||||
static DocPos s_InitialSearchStart = 0;
|
||||
static DocPos s_InitialAnchorPos = 0;
|
||||
static DocPos s_InitialCaretPos = 0;
|
||||
@ -5376,7 +5380,7 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
SHAutoComplete(infoF.hwndItem, SHACF_FILESYS_ONLY | SHACF_AUTOAPPEND_FORCE_OFF | SHACF_AUTOSUGGEST_FORCE_OFF);
|
||||
}
|
||||
if (!GetWindowTextLengthW(GetDlgItem(hwnd, IDC_FINDTEXT))) {
|
||||
SetDlgItemTextMB2W(hwnd, IDC_FINDTEXT, sg_pefrData->szFind);
|
||||
SetDlgItemTextMB2W(hwnd, IDC_FINDTEXT, PEFRDATA(szFind));
|
||||
}
|
||||
if (GetDlgItem(hwnd, IDC_REPLACETEXT))
|
||||
{
|
||||
@ -5388,49 +5392,49 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
//SHAutoComplete(infoR.hwndItem, SHACF_DEFAULT);
|
||||
SHAutoComplete(infoR.hwndItem, SHACF_FILESYS_ONLY | SHACF_AUTOAPPEND_FORCE_OFF | SHACF_AUTOSUGGEST_FORCE_OFF);
|
||||
|
||||
SetDlgItemTextMB2W(hwnd, IDC_REPLACETEXT, sg_pefrData->szReplace);
|
||||
SetDlgItemTextMB2W(hwnd, IDC_REPLACETEXT, PEFRDATA(szReplace));
|
||||
}
|
||||
|
||||
if (sg_pefrData->fuFlags & SCFIND_MATCHCASE)
|
||||
if (PEFRDATA(fuFlags) & SCFIND_MATCHCASE)
|
||||
CheckDlgButton(hwnd, IDC_FINDCASE, BST_CHECKED);
|
||||
|
||||
if (sg_pefrData->fuFlags & SCFIND_WHOLEWORD)
|
||||
if (PEFRDATA(fuFlags) & SCFIND_WHOLEWORD)
|
||||
CheckDlgButton(hwnd, IDC_FINDWORD, BST_CHECKED);
|
||||
|
||||
if (sg_pefrData->fuFlags & SCFIND_WORDSTART)
|
||||
if (PEFRDATA(fuFlags) & SCFIND_WORDSTART)
|
||||
CheckDlgButton(hwnd, IDC_FINDSTART, BST_CHECKED);
|
||||
|
||||
if (sg_pefrData->bTransformBS) {
|
||||
if (PEFRDATA(bTransformBS)) {
|
||||
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED);
|
||||
}
|
||||
s_SaveTFBackSlashes = sg_pefrData->bTransformBS;
|
||||
s_SaveTFBackSlashes = PEFRDATA(bTransformBS);
|
||||
|
||||
if (sg_pefrData->fuFlags & SCFIND_REGEXP) {
|
||||
if (PEFRDATA(fuFlags) & SCFIND_REGEXP) {
|
||||
CheckDlgButton(hwnd, IDC_FINDREGEXP, BST_CHECKED);
|
||||
CheckDlgButton(hwnd, IDC_WILDCARDSEARCH, BST_UNCHECKED);
|
||||
DialogEnableControl(hwnd, IDC_DOT_MATCH_ALL, true);
|
||||
}
|
||||
|
||||
if (sg_pefrData->bDotMatchAll) {
|
||||
if (PEFRDATA(bDotMatchAll)) {
|
||||
CheckDlgButton(hwnd, IDC_DOT_MATCH_ALL, BST_CHECKED);
|
||||
}
|
||||
|
||||
if (sg_pefrData->bWildcardSearch) {
|
||||
if (PEFRDATA(bWildcardSearch)) {
|
||||
CheckDlgButton(hwnd, IDC_FINDREGEXP, BST_UNCHECKED);
|
||||
CheckDlgButton(hwnd, IDC_WILDCARDSEARCH, BST_CHECKED);
|
||||
DialogEnableControl(hwnd, IDC_DOT_MATCH_ALL, false);
|
||||
}
|
||||
|
||||
if (sg_pefrData->bMarkOccurences) {
|
||||
if (PEFRDATA(bMarkOccurences)) {
|
||||
CheckDlgButton(hwnd, IDC_ALL_OCCURRENCES, BST_CHECKED);
|
||||
}
|
||||
else {
|
||||
CheckDlgButton(hwnd, IDC_ALL_OCCURRENCES, BST_UNCHECKED);
|
||||
EditClearAllOccurrenceMarkers(sg_pefrData->hwnd);
|
||||
EditClearAllOccurrenceMarkers(PEFRDATA(hwnd));
|
||||
Globals.iMarkOccurrencesCount = (DocPos)-1;
|
||||
}
|
||||
|
||||
if (sg_pefrData->fuFlags & SCFIND_REGEXP) {
|
||||
if (PEFRDATA(fuFlags) & SCFIND_REGEXP) {
|
||||
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED);
|
||||
DialogEnableControl(hwnd, IDC_FINDTRANSFORMBS, false);
|
||||
}
|
||||
@ -5438,27 +5442,27 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
DialogEnableControl(hwnd, IDC_DOT_MATCH_ALL, false);
|
||||
}
|
||||
|
||||
if (sg_pefrData->bNoFindWrap) {
|
||||
if (PEFRDATA(bNoFindWrap)) {
|
||||
CheckDlgButton(hwnd, IDC_NOWRAP, BST_CHECKED);
|
||||
}
|
||||
|
||||
if (GetDlgItem(hwnd, IDC_REPLACE)) {
|
||||
if (s_bSwitchedFindReplace) {
|
||||
if (sg_pefrData->bFindClose)
|
||||
if (PEFRDATA(bFindClose))
|
||||
CheckDlgButton(hwnd, IDC_FINDCLOSE, BST_CHECKED);
|
||||
}
|
||||
else {
|
||||
if (sg_pefrData->bReplaceClose)
|
||||
if (PEFRDATA(bReplaceClose))
|
||||
CheckDlgButton(hwnd, IDC_FINDCLOSE, BST_CHECKED);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (s_bSwitchedFindReplace) {
|
||||
if (sg_pefrData->bReplaceClose)
|
||||
if (PEFRDATA(bReplaceClose))
|
||||
CheckDlgButton(hwnd, IDC_FINDCLOSE, BST_CHECKED);
|
||||
}
|
||||
else {
|
||||
if (sg_pefrData->bFindClose)
|
||||
if (PEFRDATA(bFindClose))
|
||||
CheckDlgButton(hwnd, IDC_FINDCLOSE, BST_CHECKED);
|
||||
}
|
||||
}
|
||||
@ -5476,7 +5480,21 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
s_bSwitchedFindReplace = false;
|
||||
CopyMemory(sg_pefrData, &s_efrSave, sizeof(EDITFINDREPLACE));
|
||||
}
|
||||
|
||||
_SetSearchFlags(hwnd, sg_pefrData); // sync
|
||||
// esc control chars if checked
|
||||
if (sg_pefrData && PEFRDATA(bTransformBS)) {
|
||||
char chBuffer[FNDRPL_BUFFER];
|
||||
StringCchCopyA(chBuffer, COUNTOF(chBuffer), sg_pefrData->szFind);
|
||||
EscCtrlCharsA(sg_pefrData->szFind, COUNTOF(sg_pefrData->szFind), chBuffer);
|
||||
SetDlgItemTextMB2W(hwnd, IDC_FINDTEXT, sg_pefrData->szFind);
|
||||
if (GetDlgItem(hwnd, IDC_REPLACE)) {
|
||||
StringCchCopyA(chBuffer, COUNTOF(chBuffer), sg_pefrData->szReplace);
|
||||
EscCtrlCharsA(sg_pefrData->szReplace, COUNTOF(sg_pefrData->szReplace), chBuffer);
|
||||
SetDlgItemTextMB2W(hwnd, IDC_REPLACETEXT, sg_pefrData->szReplace);
|
||||
}
|
||||
}
|
||||
|
||||
s_fwrdMatch = NO_MATCH;
|
||||
s_anyMatch = (Sci_IsMultiOrRectangleSelection() || SciCall_IsSelectionEmpty() ? NO_MATCH : MATCH);
|
||||
|
||||
@ -5518,14 +5536,14 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
{
|
||||
if (s_anyMatch == MATCH) {
|
||||
// Save MRUs
|
||||
if (StringCchLenA(sg_pefrData->szFind, COUNTOF(sg_pefrData->szFind))) {
|
||||
if (StringCchLenA(PEFRDATA(szFind), COUNTOF(PEFRDATA(szFind)))) {
|
||||
if (GetDlgItemText(hwnd, IDC_FINDTEXT, s_tchBuf, COUNTOF(s_tchBuf))) {
|
||||
MRU_Add(Globals.pMRUfind, s_tchBuf, 0, -1, -1, NULL);
|
||||
SetFindPattern(s_tchBuf);
|
||||
}
|
||||
}
|
||||
}
|
||||
sg_pefrData->szFind[0] = '\0';
|
||||
PEFRDATA(szFind)[0] = '\0';
|
||||
|
||||
Globals.iReplacedOccurrences = 0;
|
||||
Globals.FindReplaceMatchFoundState = FND_NOP;
|
||||
@ -5535,14 +5553,14 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_MARKOCCUR_ONOFF, true);
|
||||
|
||||
if (FocusedView.HideNonMatchedLines) {
|
||||
EditToggleView(sg_pefrData->hwnd);
|
||||
EditToggleView(PEFRDATA(hwnd));
|
||||
}
|
||||
|
||||
if (IsMarkOccurrencesEnabled()) {
|
||||
MarkAllOccurrences(50, true);
|
||||
}
|
||||
else {
|
||||
EditClearAllOccurrenceMarkers(sg_pefrData->hwnd);
|
||||
EditClearAllOccurrenceMarkers(PEFRDATA(hwnd));
|
||||
Globals.iMarkOccurrencesCount = (DocPos)-1;
|
||||
}
|
||||
|
||||
@ -5552,10 +5570,10 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
}
|
||||
else {
|
||||
if (s_fwrdMatch == NO_MATCH) {
|
||||
EditSetSelectionEx(sg_pefrData->hwnd, s_InitialAnchorPos, s_InitialCaretPos, -1, -1);
|
||||
EditSetSelectionEx(PEFRDATA(hwnd), s_InitialAnchorPos, s_InitialCaretPos, -1, -1);
|
||||
}
|
||||
else {
|
||||
EditEnsureSelectionVisible(sg_pefrData->hwnd);
|
||||
EditEnsureSelectionVisible(PEFRDATA(hwnd));
|
||||
}
|
||||
}
|
||||
|
||||
@ -5653,7 +5671,9 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
{
|
||||
|
||||
case IDC_DOC_MODIFIED:
|
||||
sg_pefrData->bStateChanged = true;
|
||||
if (sg_pefrData) {
|
||||
sg_pefrData->bStateChanged = true;
|
||||
}
|
||||
s_InitialSearchStart = SciCall_GetSelectionStart();
|
||||
s_InitialTopLine = -1; // reset
|
||||
break;
|
||||
@ -5670,7 +5690,8 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
s_tchBuf[0] = L'\0';
|
||||
|
||||
DocPos const cchSelection = SciCall_GetSelText(NULL);
|
||||
if ((1 < cchSelection) && !(GetDlgItem(hwnd, IDC_REPLACE) && Sci_IsSelectionMultiLine())) {
|
||||
//if ((1 < cchSelection) && !(GetDlgItem(hwnd, IDC_REPLACE) && Sci_IsSelectionMultiLine())) {
|
||||
if ((1 < cchSelection) && !GetDlgItem(hwnd, IDC_REPLACE)) {
|
||||
lpszSelection = AllocMem(cchSelection, HEAP_ZERO_MEMORY);
|
||||
SciCall_GetSelText(lpszSelection);
|
||||
}
|
||||
@ -5678,7 +5699,7 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
// nothing is selected in the editor:
|
||||
// if first time you bring up find/replace dialog,
|
||||
// use most recent search pattern to find box
|
||||
GetFindPattern(s_tchBuf, FNDRPL_BUFFER);
|
||||
GetFindPattern(s_tchBuf, COUNTOF(s_tchBuf), PEFRDATA(bTransformBS));
|
||||
if (s_tchBuf[0] == L'\0') {
|
||||
MRU_Enum(Globals.pMRUfind, 0, s_tchBuf, COUNTOF(s_tchBuf));
|
||||
}
|
||||
@ -5697,40 +5718,35 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
}
|
||||
|
||||
if (lpszSelection) {
|
||||
// Check lpszSelection and truncate bad chars (CR,LF,VT)
|
||||
char* lpsz = StrChrA(lpszSelection, 13);
|
||||
if (lpsz) *lpsz = '\0';
|
||||
|
||||
lpsz = StrChrA(lpszSelection, 10);
|
||||
if (lpsz) *lpsz = '\0';
|
||||
|
||||
lpsz = StrChrA(lpszSelection, 11);
|
||||
if (lpsz) *lpsz = '\0';
|
||||
|
||||
StringCchCopyNA(szFind, FNDRPL_BUFFER, lpszSelection, SizeOfMem(lpszSelection));
|
||||
|
||||
if (PEFRDATA(bTransformBS)) {
|
||||
EscCtrlCharsA(szFind, COUNTOF(szFind), lpszSelection);
|
||||
}
|
||||
else {
|
||||
StringCchCopyA(szFind, COUNTOF(szFind), lpszSelection);
|
||||
}
|
||||
SetDlgItemTextMB2W(hwnd, IDC_FINDTEXT, szFind);
|
||||
FreeMem(lpszSelection);
|
||||
lpszSelection = NULL;
|
||||
}
|
||||
else {
|
||||
if (s_tchBuf[0] == L'\0') {
|
||||
GetFindPattern(s_tchBuf, FNDRPL_BUFFER);
|
||||
GetFindPattern(s_tchBuf, COUNTOF(s_tchBuf), PEFRDATA(bTransformBS));
|
||||
}
|
||||
// cppcheck-suppress duplicateCondition // s_tchBuf may have changed
|
||||
if (s_tchBuf[0] == L'\0') {
|
||||
MRU_Enum(Globals.pMRUfind, 0, s_tchBuf, COUNTOF(s_tchBuf));
|
||||
}
|
||||
SetDlgItemText(hwnd, IDC_FINDTEXT, s_tchBuf);
|
||||
GetDlgItemTextW2MB(hwnd, IDC_FINDTEXT, szFind, FNDRPL_BUFFER);
|
||||
GetDlgItemTextW2MB(hwnd, IDC_FINDTEXT, szFind, COUNTOF(szFind));
|
||||
}
|
||||
Globals.bFindReplCopySelOrClip = false;
|
||||
s_anyMatch = s_fwrdMatch = NO_MATCH;
|
||||
}
|
||||
|
||||
GetDlgItemTextW2MB(hwnd, IDC_FINDTEXT, szCmpBuf, FNDRPL_BUFFER);
|
||||
GetDlgItemTextW2MB(hwnd, IDC_FINDTEXT, szCmpBuf, COUNTOF(szCmpBuf));
|
||||
if ((StringCchCompareXA(szCmpBuf, szFind) != 0)) {
|
||||
s_InitialTopLine = -1; // reset
|
||||
StringCchCopyNA(szFind, FNDRPL_BUFFER, szCmpBuf, FNDRPL_BUFFER);
|
||||
StringCchCopyNA(szFind, COUNTOF(szFind), szCmpBuf, COUNTOF(szCmpBuf));
|
||||
}
|
||||
|
||||
bool const bEnableF = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_FINDTEXT)) ||
|
||||
@ -5765,47 +5781,49 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
case IDT_TIMER_MAIN_MRKALL:
|
||||
if (sg_pefrData) {
|
||||
_SetSearchFlags(hwnd, sg_pefrData);
|
||||
if (sg_pefrData->bMarkOccurences) {
|
||||
if (sg_pefrData->bStateChanged || (StringCchCompareXA(s_lastFind, sg_pefrData->szFind) != 0)) {
|
||||
if (PEFRDATA(bMarkOccurences)) {
|
||||
if (PEFRDATA(bStateChanged) || (StringCchCompareXA(s_lastFind, PEFRDATA(szFind)) != 0)) {
|
||||
_IGNORE_NOTIFY_CHANGE_;
|
||||
EditClearAllOccurrenceMarkers(sg_pefrData->hwnd);
|
||||
StringCchCopyA(s_lastFind, COUNTOF(s_lastFind), sg_pefrData->szFind);
|
||||
RegExResult_t match = _FindHasMatch(sg_pefrData->hwnd, sg_pefrData, 0, (sg_pefrData->bMarkOccurences), false);
|
||||
EditClearAllOccurrenceMarkers(PEFRDATA(hwnd));
|
||||
StringCchCopyA(s_lastFind, COUNTOF(s_lastFind), PEFRDATA(szFind));
|
||||
RegExResult_t match = _FindHasMatch(PEFRDATA(hwnd), sg_pefrData, 0, (PEFRDATA(bMarkOccurences)), false);
|
||||
if (s_anyMatch != match) { s_anyMatch = match; }
|
||||
// we have to set Sci's regex instance to first find (have substitution in place)
|
||||
DocPos const iStartPos = (DocPos)lParam;
|
||||
if (!GetDlgItem(hwnd, IDC_REPLACE) || !Sci_IsSelectionMultiLine()) {
|
||||
s_fwrdMatch = _FindHasMatch(sg_pefrData->hwnd, sg_pefrData, iStartPos, false, true);
|
||||
s_fwrdMatch = _FindHasMatch(PEFRDATA(hwnd), sg_pefrData, iStartPos, false, true);
|
||||
}
|
||||
else {
|
||||
s_fwrdMatch = match;
|
||||
}
|
||||
InvalidateRect(GetDlgItem(hwnd, IDC_FINDTEXT), NULL, true);
|
||||
if (match != MATCH) {
|
||||
EditClearAllOccurrenceMarkers(sg_pefrData->hwnd);
|
||||
EditClearAllOccurrenceMarkers(PEFRDATA(hwnd));
|
||||
if (s_InitialTopLine >= 0) {
|
||||
SciCall_SetFirstVisibleLine(s_InitialTopLine);
|
||||
}
|
||||
else {
|
||||
EditSetSelectionEx(sg_pefrData->hwnd, s_InitialAnchorPos, s_InitialCaretPos, -1, -1);
|
||||
EditSetSelectionEx(PEFRDATA(hwnd), s_InitialAnchorPos, s_InitialCaretPos, -1, -1);
|
||||
}
|
||||
if (FocusedView.HideNonMatchedLines) {
|
||||
EditToggleView(sg_pefrData->hwnd);
|
||||
EditToggleView(PEFRDATA(hwnd));
|
||||
}
|
||||
MarkAllOccurrences(4, true);
|
||||
}
|
||||
_OBSERVE_NOTIFY_CHANGE_;
|
||||
}
|
||||
}
|
||||
else if (sg_pefrData->bStateChanged) {
|
||||
else if (PEFRDATA(bStateChanged)) {
|
||||
if (FocusedView.HideNonMatchedLines) {
|
||||
SendWMCommand(hwnd, IDC_TOGGLE_VISIBILITY);
|
||||
}
|
||||
else {
|
||||
EditClearAllOccurrenceMarkers(sg_pefrData->hwnd);
|
||||
EditClearAllOccurrenceMarkers(PEFRDATA(hwnd));
|
||||
}
|
||||
}
|
||||
sg_pefrData->bStateChanged = false;
|
||||
if (sg_pefrData) {
|
||||
sg_pefrData->bStateChanged = false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
@ -5822,9 +5840,9 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
else { // switched OFF
|
||||
DialogEnableControl(hwnd, IDC_TOGGLE_VISIBILITY, false);
|
||||
if (FocusedView.HideNonMatchedLines) {
|
||||
EditToggleView(sg_pefrData->hwnd);
|
||||
EditToggleView(PEFRDATA(hwnd));
|
||||
}
|
||||
EditClearAllOccurrenceMarkers(sg_pefrData->hwnd);
|
||||
EditClearAllOccurrenceMarkers(PEFRDATA(hwnd));
|
||||
Globals.iMarkOccurrencesCount = (DocPos)-1;
|
||||
InvalidateRect(GetDlgItem(hwnd, IDC_FINDTEXT), NULL, true);
|
||||
}
|
||||
@ -5833,11 +5851,13 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
|
||||
|
||||
case IDC_TOGGLE_VISIBILITY:
|
||||
EditToggleView(sg_pefrData->hwnd);
|
||||
EditToggleView(PEFRDATA(hwnd));
|
||||
if (!FocusedView.HideNonMatchedLines) {
|
||||
sg_pefrData->bStateChanged = true;
|
||||
if (sg_pefrData) {
|
||||
sg_pefrData->bStateChanged = true;
|
||||
}
|
||||
s_InitialTopLine = -1; // reset
|
||||
EditClearAllOccurrenceMarkers(sg_pefrData->hwnd);
|
||||
EditClearAllOccurrenceMarkers(PEFRDATA(hwnd));
|
||||
_DelayMarkAll(hwnd, 0, s_InitialSearchStart);
|
||||
}
|
||||
break;
|
||||
@ -5848,7 +5868,6 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
{
|
||||
DialogEnableControl(hwnd, IDC_DOT_MATCH_ALL, true);
|
||||
CheckDlgButton(hwnd, IDC_WILDCARDSEARCH, BST_UNCHECKED); // Can not use wildcard search together with regexp
|
||||
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, SetBtn(s_SaveTFBackSlashes));
|
||||
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED); // transform BS handled by regex
|
||||
DialogEnableControl(hwnd, IDC_FINDTRANSFORMBS, false);
|
||||
}
|
||||
@ -5929,13 +5948,13 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
}
|
||||
|
||||
if (!s_bSwitchedFindReplace &&
|
||||
!GetDlgItemTextW2MB(hwnd, IDC_FINDTEXT, sg_pefrData->szFind, COUNTOF(sg_pefrData->szFind))) {
|
||||
!GetDlgItemTextW2MB(hwnd, IDC_FINDTEXT, PEFRDATA(szFind), COUNTOF(PEFRDATA(szFind)))) {
|
||||
DialogEnableControl(hwnd, IDOK, false);
|
||||
DialogEnableControl(hwnd, IDC_FINDPREV, false);
|
||||
DialogEnableControl(hwnd, IDC_REPLACE, false);
|
||||
DialogEnableControl(hwnd, IDC_REPLACEALL, false);
|
||||
DialogEnableControl(hwnd, IDC_REPLACEINSEL, false);
|
||||
if (!GetDlgItemTextW2MB(hwnd, IDC_REPLACETEXT, sg_pefrData->szReplace, COUNTOF(sg_pefrData->szReplace)))
|
||||
if (!GetDlgItemTextW2MB(hwnd, IDC_REPLACETEXT, PEFRDATA(szReplace), COUNTOF(PEFRDATA(szReplace))))
|
||||
DialogEnableControl(hwnd, IDC_SWAPSTRG, false);
|
||||
return true;
|
||||
}
|
||||
@ -5944,13 +5963,13 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
|
||||
if (!s_bSwitchedFindReplace) {
|
||||
// Save MRUs
|
||||
if (StringCchLenA(sg_pefrData->szFind, COUNTOF(sg_pefrData->szFind))) {
|
||||
if (StringCchLenA(PEFRDATA(szFind), COUNTOF(PEFRDATA(szFind)))) {
|
||||
if (GetDlgItemText(hwnd, IDC_FINDTEXT, s_tchBuf2, COUNTOF(s_tchBuf2))) {
|
||||
MRU_Add(Globals.pMRUfind, s_tchBuf2, 0, -1, -1, NULL);
|
||||
SetFindPattern(s_tchBuf2);
|
||||
}
|
||||
}
|
||||
if (StringCchLenA(sg_pefrData->szReplace, COUNTOF(sg_pefrData->szReplace))) {
|
||||
if (StringCchLenA(PEFRDATA(szReplace), COUNTOF(PEFRDATA(szReplace)))) {
|
||||
if (GetDlgItemText(hwnd, IDC_REPLACETEXT, s_tchBuf2, COUNTOF(s_tchBuf2))) {
|
||||
MRU_Add(Globals.pMRUreplace, s_tchBuf2, 0, -1, -1, NULL);
|
||||
}
|
||||
@ -5970,18 +5989,18 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_ADDSTRING, 0, (LPARAM)s_tchBuf2);
|
||||
}
|
||||
|
||||
SetDlgItemTextMB2W(hwnd, IDC_FINDTEXT, sg_pefrData->szFind);
|
||||
SetDlgItemTextMB2W(hwnd, IDC_REPLACETEXT, sg_pefrData->szReplace);
|
||||
SetDlgItemTextMB2W(hwnd, IDC_FINDTEXT, PEFRDATA(szFind));
|
||||
SetDlgItemTextMB2W(hwnd, IDC_REPLACETEXT, PEFRDATA(szReplace));
|
||||
|
||||
if (!s_bSwitchedFindReplace)
|
||||
SendMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)(GetFocus()), 1);
|
||||
|
||||
bool bCloseDlg = false;
|
||||
if (bIsFindDlg) {
|
||||
bCloseDlg = sg_pefrData->bFindClose;
|
||||
bCloseDlg = PEFRDATA(bFindClose);
|
||||
}
|
||||
else if (LOWORD(wParam) != IDOK) {
|
||||
bCloseDlg = sg_pefrData->bReplaceClose;
|
||||
bCloseDlg = PEFRDATA(bReplaceClose);
|
||||
}
|
||||
|
||||
if (bCloseDlg) {
|
||||
@ -5993,8 +6012,8 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
case IDOK: // find next
|
||||
case IDACC_SELTONEXT:
|
||||
if (!bIsFindDlg) { Globals.bReplaceInitialized = true; }
|
||||
if (!SciCall_IsSelectionEmpty()) { EditJumpToSelectionEnd(sg_pefrData->hwnd); }
|
||||
EditFindNext(sg_pefrData->hwnd, sg_pefrData, (LOWORD(wParam) == IDACC_SELTONEXT), IsKeyDown(VK_F3));
|
||||
if (!SciCall_IsSelectionEmpty()) { EditJumpToSelectionEnd(PEFRDATA(hwnd)); }
|
||||
EditFindNext(PEFRDATA(hwnd), sg_pefrData, (LOWORD(wParam) == IDACC_SELTONEXT), IsKeyDown(VK_F3));
|
||||
s_InitialSearchStart = SciCall_GetSelectionStart();
|
||||
s_InitialAnchorPos = SciCall_GetAnchor();
|
||||
s_InitialCaretPos = SciCall_GetCurrentPos();
|
||||
@ -6004,8 +6023,8 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
case IDC_FINDPREV: // find previous
|
||||
case IDACC_SELTOPREV:
|
||||
if (!bIsFindDlg) { Globals.bReplaceInitialized = true; }
|
||||
if (!SciCall_IsSelectionEmpty()) { EditJumpToSelectionStart(sg_pefrData->hwnd); }
|
||||
EditFindPrev(sg_pefrData->hwnd, sg_pefrData, (LOWORD(wParam) == IDACC_SELTOPREV), IsKeyDown(VK_F3));
|
||||
if (!SciCall_IsSelectionEmpty()) { EditJumpToSelectionStart(PEFRDATA(hwnd)); }
|
||||
EditFindPrev(PEFRDATA(hwnd), sg_pefrData, (LOWORD(wParam) == IDACC_SELTOPREV), IsKeyDown(VK_F3));
|
||||
s_InitialSearchStart = SciCall_GetSelectionStart();
|
||||
s_InitialAnchorPos = SciCall_GetAnchor();
|
||||
s_InitialCaretPos = SciCall_GetCurrentPos();
|
||||
@ -6016,7 +6035,7 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
{
|
||||
Globals.bReplaceInitialized = true;
|
||||
_BEGIN_UNDO_ACTION_
|
||||
EditReplace(sg_pefrData->hwnd, sg_pefrData);
|
||||
EditReplace(PEFRDATA(hwnd), sg_pefrData);
|
||||
_END_UNDO_ACTION_
|
||||
}
|
||||
break;
|
||||
@ -6024,14 +6043,14 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
case IDC_REPLACEALL:
|
||||
Globals.bReplaceInitialized = true;
|
||||
_BEGIN_UNDO_ACTION_
|
||||
EditReplaceAll(sg_pefrData->hwnd, sg_pefrData, true);
|
||||
EditReplaceAll(PEFRDATA(hwnd), sg_pefrData, true);
|
||||
_END_UNDO_ACTION_
|
||||
break;
|
||||
|
||||
case IDC_REPLACEINSEL:
|
||||
if (!SciCall_IsSelectionEmpty()) {
|
||||
Globals.bReplaceInitialized = true;
|
||||
EditReplaceAllInSelection(sg_pefrData->hwnd, sg_pefrData, true);
|
||||
EditReplaceAllInSelection(PEFRDATA(hwnd), sg_pefrData, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -6097,7 +6116,7 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
case IDACC_SAVEFIND:
|
||||
Globals.FindReplaceMatchFoundState = FND_NOP;
|
||||
SendWMCommand(Globals.hwndMain, IDM_EDIT_SAVEFIND);
|
||||
SetDlgItemTextMB2W(hwnd, IDC_FINDTEXT, sg_pefrData->szFind);
|
||||
SetDlgItemTextMB2W(hwnd, IDC_FINDTEXT, PEFRDATA(szFind));
|
||||
CheckDlgButton(hwnd, IDC_FINDREGEXP, BST_UNCHECKED);
|
||||
CheckDlgButton(hwnd, IDC_DOT_MATCH_ALL, BST_UNCHECKED);
|
||||
CheckDlgButton(hwnd, IDC_WILDCARDSEARCH, BST_UNCHECKED);
|
||||
@ -6167,7 +6186,7 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara
|
||||
case WM_CTLCOLOREDIT:
|
||||
case WM_CTLCOLORLISTBOX:
|
||||
{
|
||||
if (sg_pefrData->bMarkOccurences)
|
||||
if (PEFRDATA(bMarkOccurences))
|
||||
{
|
||||
HWND hCheck = (HWND)lParam;
|
||||
HDC hDC = (HDC)wParam;
|
||||
|
||||
138
src/Helpers.c
138
src/Helpers.c
@ -1668,7 +1668,7 @@ bool SetDlgItemIntEx(HWND hwnd,int nIdItem,UINT uValue)
|
||||
//
|
||||
UINT GetDlgItemTextW2MB(HWND hDlg, int nIDDlgItem, LPSTR lpString, int nMaxCount)
|
||||
{
|
||||
WCHAR wsz[FNDRPL_BUFFER] = L"";
|
||||
WCHAR wsz[FNDRPL_BUFFER] = { L'\0' };
|
||||
UINT uRet = GetDlgItemTextW(hDlg, nIDDlgItem, wsz, COUNTOF(wsz));
|
||||
ZeroMemory(lpString,nMaxCount);
|
||||
WideCharToMultiByteEx(Encoding_SciCP, 0, wsz, -1, lpString, nMaxCount - 1, NULL, NULL);
|
||||
@ -1676,16 +1676,16 @@ UINT GetDlgItemTextW2MB(HWND hDlg, int nIDDlgItem, LPSTR lpString, int nMaxCount
|
||||
}
|
||||
|
||||
UINT SetDlgItemTextMB2W(HWND hDlg, int nIDDlgItem, LPSTR lpString)
|
||||
{
|
||||
WCHAR wsz[FNDRPL_BUFFER] = L"";
|
||||
MultiByteToWideCharEx(Encoding_SciCP, 0, lpString, -1, wsz, FNDRPL_BUFFER);
|
||||
{
|
||||
WCHAR wsz[FNDRPL_BUFFER] = { L'\0' };
|
||||
MultiByteToWideCharEx(Encoding_SciCP, 0, lpString, -1, wsz, COUNTOF(wsz));
|
||||
return SetDlgItemTextW(hDlg, nIDDlgItem, wsz);
|
||||
}
|
||||
|
||||
LRESULT ComboBox_AddStringMB2W(HWND hwnd, LPCSTR lpString)
|
||||
{
|
||||
WCHAR wsz[FNDRPL_BUFFER] = L"";
|
||||
MultiByteToWideCharEx(Encoding_SciCP, 0, lpString, -1, wsz, FNDRPL_BUFFER);
|
||||
WCHAR wsz[FNDRPL_BUFFER] = { L'\0' };
|
||||
MultiByteToWideCharEx(Encoding_SciCP, 0, lpString, -1, wsz, COUNTOF(wsz));
|
||||
return SendMessageW(hwnd, CB_ADDSTRING, 0, (LPARAM)wsz);
|
||||
}
|
||||
|
||||
@ -1840,6 +1840,132 @@ unsigned int UnSlashLowOctal(char* s) {
|
||||
return (unsigned int)(o - sStart);
|
||||
}
|
||||
|
||||
/*
|
||||
* transform control chas into backslash sequence
|
||||
*/
|
||||
bool EscCtrlCharsA(LPSTR pchOutput, size_t cchOutLen, LPCSTR pchInput)
|
||||
{
|
||||
if (!pchOutput || cchOutLen < 1 || !pchInput) { return false; }
|
||||
|
||||
int i = 0;
|
||||
int k = 0;
|
||||
bool escChar = false;
|
||||
while ((pchInput[k] != '\0') && (i < (cchOutLen - 2)))
|
||||
{
|
||||
escChar = false;
|
||||
switch (pchInput[k]) {
|
||||
case '\n':
|
||||
pchOutput[i++] = '\\';
|
||||
pchOutput[i++] = 'n';
|
||||
escChar = true;
|
||||
break;
|
||||
case '\r':
|
||||
pchOutput[i++] = '\\';
|
||||
pchOutput[i++] = 'r';
|
||||
escChar = true;
|
||||
break;
|
||||
case '\t':
|
||||
pchOutput[i++] = '\\';
|
||||
pchOutput[i++] = 't';
|
||||
escChar = true;
|
||||
break;
|
||||
case '\f':
|
||||
pchOutput[i++] = '\\';
|
||||
pchOutput[i++] = 'f';
|
||||
escChar = true;
|
||||
break;
|
||||
case '\v':
|
||||
pchOutput[i++] = '\\';
|
||||
pchOutput[i++] = 'v';
|
||||
escChar = true;
|
||||
break;
|
||||
case '\a':
|
||||
pchOutput[i++] = '\\';
|
||||
pchOutput[i++] = 'a';
|
||||
escChar = true;
|
||||
break;
|
||||
case '\b':
|
||||
pchOutput[i++] = '\\';
|
||||
pchOutput[i++] = 'b';
|
||||
escChar = true;
|
||||
break;
|
||||
case '\x1B':
|
||||
pchOutput[i++] = '\\';
|
||||
pchOutput[i++] = 'e';
|
||||
escChar = true;
|
||||
break;
|
||||
default:
|
||||
pchOutput[i++] = pchInput[k];
|
||||
break;
|
||||
}
|
||||
++k;
|
||||
}
|
||||
pchOutput[i] = '\0';
|
||||
return escChar;
|
||||
}
|
||||
|
||||
|
||||
bool EscCtrlCharsW(LPWSTR pszOutput, size_t cchOutLen, LPCWSTR pszInput)
|
||||
{
|
||||
if (!pszOutput || cchOutLen < 1 || !pszInput) { return false; }
|
||||
|
||||
int i = 0;
|
||||
int k = 0;
|
||||
bool escChar = false;
|
||||
while ((pszInput[k] != L'\0') && (i < (cchOutLen - 2)))
|
||||
{
|
||||
escChar = false;
|
||||
switch (pszInput[k]) {
|
||||
case L'\n':
|
||||
pszOutput[i++] = L'\\';
|
||||
pszOutput[i++] = L'n';
|
||||
escChar = true;
|
||||
break;
|
||||
case L'\r':
|
||||
pszOutput[i++] = L'\\';
|
||||
pszOutput[i++] = L'r';
|
||||
escChar = true;
|
||||
break;
|
||||
case L'\t':
|
||||
pszOutput[i++] = L'\\';
|
||||
pszOutput[i++] = L't';
|
||||
escChar = true;
|
||||
break;
|
||||
case L'\f':
|
||||
pszOutput[i++] = L'\\';
|
||||
pszOutput[i++] = L'f';
|
||||
escChar = true;
|
||||
break;
|
||||
case L'\v':
|
||||
pszOutput[i++] = L'\\';
|
||||
pszOutput[i++] = L'v';
|
||||
escChar = true;
|
||||
break;
|
||||
case L'\a':
|
||||
pszOutput[i++] = L'\\';
|
||||
pszOutput[i++] = L'a';
|
||||
escChar = true;
|
||||
break;
|
||||
case L'\b':
|
||||
pszOutput[i++] = L'\\';
|
||||
pszOutput[i++] = L'b';
|
||||
escChar = true;
|
||||
break;
|
||||
case L'\x1B':
|
||||
pszOutput[i++] = L'\\';
|
||||
pszOutput[i++] = L'e';
|
||||
escChar = true;
|
||||
break;
|
||||
default:
|
||||
pszOutput[i++] = pszInput[k];
|
||||
break;
|
||||
}
|
||||
++k;
|
||||
}
|
||||
pszOutput[i] = L'\0';
|
||||
return escChar;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* check, if we have regex sub-group referencing
|
||||
|
||||
@ -354,6 +354,8 @@ UINT CharSetFromCodePage(const UINT uCodePage);
|
||||
unsigned int UnSlash(char* s, UINT cpEdit);
|
||||
void TransformBackslashes(char* pszInput,bool,UINT cpEdit,int* iReplaceMsg);
|
||||
void TransformMetaChars(char* pszInput,bool,int iEOLMode);
|
||||
bool EscCtrlCharsA(LPSTR pchOutput, size_t cchOutLen, LPCSTR pchInput);
|
||||
bool EscCtrlCharsW(LPWSTR pszOutput, size_t cchOutLen, LPCWSTR pszInput);
|
||||
|
||||
|
||||
//==== Large Text Conversion ==================================================
|
||||
|
||||
@ -7670,19 +7670,32 @@ void SetFindPatternMB(LPCSTR chFindPattern)
|
||||
//
|
||||
// GetFindPattern()
|
||||
//
|
||||
void GetFindPattern(LPWSTR wchFindPattern, size_t bufferSize)
|
||||
void GetFindPattern(LPWSTR wchFindPattern, size_t bufferCount, bool bTransformBackslashes)
|
||||
{
|
||||
StringCchCopyW(wchFindPattern, bufferSize, sCurrentFindPattern);
|
||||
if (bTransformBackslashes) {
|
||||
EscCtrlCharsW(wchFindPattern, bufferCount, sCurrentFindPattern);
|
||||
}
|
||||
else {
|
||||
StringCchCopyW(wchFindPattern, bufferCount, sCurrentFindPattern);
|
||||
}
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
// GetFindPatternMB()
|
||||
//
|
||||
void GetFindPatternMB(LPSTR chFindPattern, size_t bufferSize)
|
||||
void GetFindPatternMB(LPSTR chFindPattern, size_t bufferCount, bool bTransformBackslashes)
|
||||
{
|
||||
WideCharToMultiByteEx(Encoding_SciCP, 0, sCurrentFindPattern, -1,
|
||||
chFindPattern, bufferSize, NULL, NULL);
|
||||
if (bTransformBackslashes) {
|
||||
WCHAR wchFindPattern[FNDRPL_BUFFER] = { L'\0' };
|
||||
GetFindPattern(wchFindPattern, FNDRPL_BUFFER, bTransformBackslashes);
|
||||
WideCharToMultiByte(Encoding_SciCP, 0, wchFindPattern, -1,
|
||||
chFindPattern, (int)bufferCount, NULL, NULL);
|
||||
}
|
||||
else {
|
||||
WideCharToMultiByte(Encoding_SciCP, 0, sCurrentFindPattern, -1,
|
||||
chFindPattern, (int)bufferCount, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -159,8 +159,8 @@ void HandleColorDefClicked(HWND hwnd, const DocPos position);
|
||||
bool IsFindPatternEmpty();
|
||||
void SetFindPattern(LPCWSTR wchFindPattern);
|
||||
void SetFindPatternMB(LPCSTR chFindPattern);
|
||||
void GetFindPattern(LPWSTR wchFindPattern, size_t bufferSize);
|
||||
void GetFindPatternMB(LPSTR chFindPattern, size_t bufferSize);
|
||||
void GetFindPattern(LPWSTR wchFindPattern, size_t bufferCount, bool bTransformBackslashes);
|
||||
void GetFindPatternMB(LPSTR chFindPattern, size_t bufferCount, bool bTransformBackslashes);
|
||||
|
||||
bool ConsistentIndentationCheck(EditFileIOStatus* fioStatus);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user