diff --git a/distrib/Notepad3.ini b/distrib/Notepad3.ini index ea9752cf9..051fb93b5 100644 Binary files a/distrib/Notepad3.ini and b/distrib/Notepad3.ini differ diff --git a/doc/Notepad3.txt b/doc/Notepad3.txt index 8e75c450e..01e276d13 100644 --- a/doc/Notepad3.txt +++ b/doc/Notepad3.txt @@ -159,6 +159,10 @@ MarkOccurrencesMaxCount The maximum number of counts for marking occurences, if this option is active. The default is 2000. +UseOldStyleBraceMatching +Switch back to (not recommended) old style brace matching. +The default is 0. + Notepad2 already existing settings: ----------------------------------- diff --git a/src/Edit.c b/src/Edit.c index c7e5c599f..61756b984 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -55,6 +55,7 @@ extern HINSTANCE g_hInstance; extern DWORD dwLastIOError; extern UINT cpLastFind; extern BOOL bReplaceInitialized; +extern BOOL bUseOldStyleBraceMatching; static EDITFINDREPLACE efrSave; static BOOL bSwitchedFindReplace = FALSE; @@ -5256,15 +5257,46 @@ void CompleteWord(HWND hwnd, BOOL autoInsert) } +BOOL __fastcall EditHighlightIfBrace(HWND hwnd, int iPos) +{ + if (iPos < 0) { + // clear indicator + SendMessage(hwnd, SCI_BRACEBADLIGHT, (WPARAM)INVALID_POSITION, 0); + SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, 0, 0); + if (!bUseOldStyleBraceMatching) + SendMessage(hwnd, SCI_BRACEBADLIGHTINDICATOR, 0, INDIC_NP3_BAD_BRACE); + return TRUE; + } + char c = (char)SendMessage(hwnd, SCI_GETCHARAT, iPos, 0); + if (StrChrA("()[]{}", c)) { + int iBrace2 = (int)SendMessage(hwnd, SCI_BRACEMATCH, iPos, 0); + if (iBrace2 != -1) { + int col1 = (int)SendMessage(hwnd, SCI_GETCOLUMN, iPos, 0); + int col2 = (int)SendMessage(hwnd, SCI_GETCOLUMN, iBrace2, 0); + SendMessage(hwnd, SCI_BRACEHIGHLIGHT, iPos, iBrace2); + SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, min(col1, col2), 0); + if (!bUseOldStyleBraceMatching) + SendMessage(hwnd, SCI_BRACEHIGHLIGHTINDICATOR, 1, INDIC_NP3_MATCH_BRACE); + } + else { + SendMessage(hwnd, SCI_BRACEBADLIGHT, iPos, 0); + SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, 0, 0); + if (!bUseOldStyleBraceMatching) + SendMessage(hwnd, SCI_BRACEBADLIGHTINDICATOR, 1, INDIC_NP3_BAD_BRACE); + } + return TRUE; + } + return FALSE; +} + + + //============================================================================= // // EditMatchBrace() // void EditMatchBrace(HWND hwnd) { - int iPos; - char c; - int iEndStyled = (int)SendMessage(hwnd, SCI_GETENDSTYLED, 0, 0); if (iEndStyled < (int)SendMessage(hwnd, SCI_GETLENGTH, 0, 0)) { int iLine = (int)SendMessage(hwnd, SCI_LINEFROMPOSITION, iEndStyled, 0); @@ -5272,46 +5304,14 @@ void EditMatchBrace(HWND hwnd) SendMessage(hwnd, SCI_COLOURISE, iEndStyled2, -1); } - iPos = (int)SendMessage(hwnd, SCI_GETCURRENTPOS, 0, 0); - c = (char)SendMessage(hwnd, SCI_GETCHARAT, iPos, 0); - if (StrChrA("()[]{}", c)) { - int iBrace2 = (int)SendMessage(hwnd, SCI_BRACEMATCH, iPos, 0); - if (iBrace2 != -1) { - int col1 = (int)SendMessage(hwnd, SCI_GETCOLUMN, iPos, 0); - int col2 = (int)SendMessage(hwnd, SCI_GETCOLUMN, iBrace2, 0); - SendMessage(hwnd, SCI_BRACEHIGHLIGHT, iPos, iBrace2); - SendMessage(hwnd, SCI_BRACEHIGHLIGHTINDICATOR, 1, INDIC_NP3_MATCH_BRACE); - SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, min(col1, col2), 0); - } - else { - SendMessage(hwnd, SCI_BRACEBADLIGHT, iPos, 0); - SendMessage(hwnd, SCI_BRACEBADLIGHTINDICATOR, 1, INDIC_NP3_BAD_BRACE); - SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, 0, 0); - } - } - // Try one before - else { + int iPos = (int)SendMessage(hwnd, SCI_GETCURRENTPOS, 0, 0); + + if (!EditHighlightIfBrace(hwnd, iPos)) { + // try one before iPos = (int)SendMessage(hwnd, SCI_POSITIONBEFORE, iPos, 0); - c = (char)SendMessage(hwnd, SCI_GETCHARAT, iPos, 0); - if (StrChrA("()[]{}", c)) { - int iBrace2 = (int)SendMessage(hwnd, SCI_BRACEMATCH, iPos, 0); - if (iBrace2 != -1) { - int col1 = (int)SendMessage(hwnd, SCI_GETCOLUMN, iPos, 0); - int col2 = (int)SendMessage(hwnd, SCI_GETCOLUMN, iBrace2, 0); - SendMessage(hwnd, SCI_BRACEHIGHLIGHT, iPos, iBrace2); - SendMessage(hwnd, SCI_BRACEHIGHLIGHTINDICATOR, 1, INDIC_NP3_MATCH_BRACE); - SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, min(col1, col2), 0); - } - else { - SendMessage(hwnd, SCI_BRACEBADLIGHT, iPos, 0); - SendMessage(hwnd, SCI_BRACEBADLIGHTINDICATOR, 1, INDIC_NP3_BAD_BRACE); - SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, 0, 0); - } - } - else { - SendMessage(hwnd, SCI_BRACEHIGHLIGHT, (WPARAM)-1, (LPARAM)-1); - SendMessage(hwnd, SCI_BRACEHIGHLIGHTINDICATOR, 1, INDIC_NP3_MATCH_BRACE); - SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, 0, 0); + if (!EditHighlightIfBrace(hwnd, iPos)) { + // clear mark + EditHighlightIfBrace(hwnd, -1); } } } @@ -5350,7 +5350,7 @@ void EditMarkAll(HWND hwnd, BOOL bMarkOccurrencesMatchCase, BOOL bMarkOccurrence iSelLength = (int)SendMessage(hwnd,SCI_GETSELTEXT,0,0); iSelCount = iSelEnd - iSelStart; - // clear existing indicator + // clear existing marker indicators SendMessage(hwnd, SCI_SETINDICATORCURRENT, INDIC_NP3_MARK_OCCURANCE, 0); SendMessage(hwnd, SCI_INDICATORCLEARRANGE, 0, iTextLen); diff --git a/src/Helpers.h b/src/Helpers.h index 240b6af9f..a9c6b64cc 100644 --- a/src/Helpers.h +++ b/src/Helpers.h @@ -33,26 +33,30 @@ extern WCHAR szIniFile[MAX_PATH]; #define IniGetString(lpSection,lpName,lpDefault,lpReturnedStr,nSize) \ - GetPrivateProfileString(lpSection,lpName,lpDefault,lpReturnedStr,nSize,szIniFile) + GetPrivateProfileString(lpSection,lpName,(lpDefault),(lpReturnedStr),(nSize),szIniFile) #define IniGetInt(lpSection,lpName,nDefault) \ - GetPrivateProfileInt(lpSection,lpName,nDefault,szIniFile) + GetPrivateProfileInt(lpSection,lpName,(nDefault),szIniFile) +#define IniGetBool(lpSection,lpName,nDefault) \ + (GetPrivateProfileInt(lpSection,lpName,(int)(nDefault),szIniFile) ? TRUE : FALSE) #define IniSetString(lpSection,lpName,lpString) \ - WritePrivateProfileString(lpSection,lpName,lpString,szIniFile) + WritePrivateProfileString(lpSection,lpName,(lpString),szIniFile) #define IniDeleteSection(lpSection) \ WritePrivateProfileSection(lpSection,NULL,szIniFile) __inline BOOL IniSetInt(LPCWSTR lpSection, LPCWSTR lpName, int i) { WCHAR tch[32] = { L'\0' }; StringCchPrintf(tch, COUNTOF(tch), L"%i", i); return IniSetString(lpSection, lpName, tch); } +#define IniSetBool(lpSection,lpName,nValue) \ + IniSetInt(lpSection,lpName,((nValue) ? 1 : 0)) #define LoadIniSection(lpSection,lpBuf,cchBuf) \ - GetPrivateProfileSection(lpSection,lpBuf,cchBuf,szIniFile) + GetPrivateProfileSection(lpSection,lpBuf,(cchBuf),szIniFile) #define SaveIniSection(lpSection,lpBuf) \ WritePrivateProfileSection(lpSection,lpBuf,szIniFile) int IniSectionGetString(LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, int); int IniSectionGetInt(LPCWSTR, LPCWSTR, int); UINT IniSectionGetUInt(LPCWSTR, LPCWSTR, UINT); __inline BOOL IniSectionGetBool(LPCWSTR lpCachedIniSection, LPCWSTR lpName, BOOL bDefault) { - return (IniSectionGetInt(lpCachedIniSection, lpName, (bDefault ? 1 : 0)) ? TRUE : FALSE); + return (IniSectionGetInt(lpCachedIniSection, lpName, ((bDefault) ? 1 : 0)) ? TRUE : FALSE); } BOOL IniSectionSetString(LPWSTR,LPCWSTR,LPCWSTR); __inline BOOL IniSectionSetInt(LPWSTR lpCachedIniSection,LPCWSTR lpName,int i) { diff --git a/src/Notepad3.c b/src/Notepad3.c index 623127b39..413f0d4df 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -152,6 +152,7 @@ int iMarkOccurrencesCount; int iMarkOccurrencesMaxCount; BOOL bMarkOccurrencesMatchCase; BOOL bMarkOccurrencesMatchWords; +BOOL bUseOldStyleBraceMatching; BOOL bAutoCompleteWords; BOOL bAccelWordNavigation; BOOL bVirtualSpaceInRectSelection; @@ -5984,6 +5985,8 @@ void LoadSettings() iMarkOccurrencesMaxCount = IniSectionGetInt(pIniSection,L"MarkOccurrencesMaxCount",2000); iMarkOccurrencesMaxCount = max(min(iMarkOccurrencesMaxCount,100000),2); + bUseOldStyleBraceMatching = IniSectionGetBool(pIniSection, L"UseOldStyleBraceMatching", FALSE); + LoadIniSection(L"Toolbar Images",pIniSection,cchIniSection); IniSectionGetString(pIniSection,L"BitmapDefault",L"", diff --git a/src/Styles.c b/src/Styles.c index 8f756612f..37f2db1f5 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -46,6 +46,9 @@ extern HINSTANCE g_hInstance; extern int iSciFontQuality; extern const int FontQuality[4]; +extern BOOL bUseOldStyleBraceMatching; + + #define MULTI_STYLE(a,b,c,d) ((a)|(b<<8)|(c<<16)|(d<<24)) @@ -2999,18 +3002,24 @@ void Style_SetLexer(HWND hwnd,PEDITLEXER pLexNew) Style_SetStyles(hwnd,lexDefault.Styles[1+iIdx].iStyle,lexDefault.Styles[1+iIdx].szValue); // linenumber - //~Style_SetStyles(hwnd,lexDefault.Styles[2+iIdx].iStyle,lexDefault.Styles[2+iIdx].szValue); // brace light - if (Style_StrGetColor(TRUE, lexDefault.Styles[2 + iIdx].szValue, &iValue)) - SendMessage(hwnd, SCI_INDICSETFORE, INDIC_NP3_MATCH_BRACE, iValue); - if (Style_StrGetAlpha(lexDefault.Styles[2 + iIdx].szValue, &iValue)) - SendMessage(hwnd, SCI_INDICSETALPHA, INDIC_NP3_MATCH_BRACE, iValue); - - //~Style_SetStyles(hwnd,lexDefault.Styles[3+iIdx].iStyle,lexDefault.Styles[3+iIdx].szValue); // brace bad - if (Style_StrGetColor(TRUE, lexDefault.Styles[3 + iIdx].szValue, &iValue)) - SendMessage(hwnd, SCI_INDICSETFORE, INDIC_NP3_BAD_BRACE, iValue); - if (Style_StrGetAlpha(lexDefault.Styles[3 + iIdx].szValue, &iValue)) - SendMessage(hwnd, SCI_INDICSETALPHA, INDIC_NP3_BAD_BRACE, iValue); - + if (bUseOldStyleBraceMatching) { + Style_SetStyles(hwnd,lexDefault.Styles[2+iIdx].iStyle,lexDefault.Styles[2+iIdx].szValue); // brace light + } + else { + if (Style_StrGetColor(TRUE, lexDefault.Styles[2 + iIdx].szValue, &iValue)) + SendMessage(hwnd, SCI_INDICSETFORE, INDIC_NP3_MATCH_BRACE, iValue); + if (Style_StrGetAlpha(lexDefault.Styles[2 + iIdx].szValue, &iValue)) + SendMessage(hwnd, SCI_INDICSETALPHA, INDIC_NP3_MATCH_BRACE, iValue); + } + if (bUseOldStyleBraceMatching) { + Style_SetStyles(hwnd, lexDefault.Styles[3 + iIdx].iStyle, lexDefault.Styles[3 + iIdx].szValue); // brace bad + } + else { + if (Style_StrGetColor(TRUE, lexDefault.Styles[3 + iIdx].szValue, &iValue)) + SendMessage(hwnd, SCI_INDICSETFORE, INDIC_NP3_BAD_BRACE, iValue); + if (Style_StrGetAlpha(lexDefault.Styles[3 + iIdx].szValue, &iValue)) + SendMessage(hwnd, SCI_INDICSETALPHA, INDIC_NP3_BAD_BRACE, iValue); + } if (pLexNew != &lexANSI) Style_SetStyles(hwnd,lexDefault.Styles[4+iIdx].iStyle,lexDefault.Styles[4+iIdx].szValue); // control char