From c6ef530efc515b10fa84af8a433d0f2b6b2f449b Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Sun, 10 Dec 2017 19:00:17 +0100 Subject: [PATCH] + fix: Hyperlink feature related delay of font changing + add: mor triggers for Hyperlink style updated --- src/Edit.c | 3 +++ src/Notepad3.c | 18 ++++-------------- src/Styles.c | 27 ++++++++++++++++----------- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index 4f9d51f6e..d9b1a9c10 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -82,6 +82,7 @@ extern BOOL bLoadNFOasOEM; extern BOOL bAccelWordNavigation; extern BOOL bDenyVirtualSpaceAccess; +extern BOOL bHyperlinkHotspot; extern int iMarkOccurrences; extern int iMarkOccurrencesCount; @@ -5794,6 +5795,8 @@ void EditCompleteWord(HWND hwnd, BOOL autoInsert) { // void EditUpdateUrlHotspots(HWND hwnd, int startPos, int endPos) { + if (!bHyperlinkHotspot) return; + const char* pszUrlRegEx = "\\b(?:(?:https?|ftp|file)://|www\\.|ftp\\.)" "(?:\\([-A-Z0-9+&@#/%=~_|$?!:,.]*\\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*" "(?:\\([-A-Z0-9+&@#/%=~_|$?!:,.]*\\)|[A-Z0-9+&@#/%=~_|$])"; diff --git a/src/Notepad3.c b/src/Notepad3.c index 28d9e7358..2195a8d10 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -2030,7 +2030,6 @@ LRESULT MsgCopyData(HWND hwnd, WPARAM wParam, LPARAM lParam) UpdateToolbar(); UpdateStatusbar(); UpdateLineNumberWidth(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); } @@ -2533,7 +2532,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) //SendMessage(hwndEdit,SCI_SETREADONLY,bReadOnly,0); //UpdateToolbar(); //UpdateStatusbar(); - //EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); if (StringCchLenW(szCurFile,COUNTOF(szCurFile))) { @@ -2889,7 +2887,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) UpdateToolbar(); UpdateStatusbar(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); } } break; @@ -2933,7 +2930,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) EditFixPositions(hwndEdit); UpdateToolbar(); UpdateStatusbar(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); } break; @@ -3056,7 +3052,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) LocalFree(pClip); UpdateToolbar(); UpdateStatusbar(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); } break; @@ -4023,7 +4018,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) Style_SelectLexerDlg(hwndEdit); UpdateStatusbar(); UpdateLineNumberWidth(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); break; @@ -4031,7 +4025,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) Style_ToggleUse2ndDefault(hwndEdit); UpdateStatusbar(); UpdateLineNumberWidth(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); break; @@ -4039,7 +4032,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) Style_ConfigDlg(hwndEdit); UpdateStatusbar(); UpdateLineNumberWidth(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); break; @@ -4047,7 +4039,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) Style_SetDefaultFont(hwndEdit); UpdateStatusbar(); UpdateLineNumberWidth(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); break; @@ -4114,7 +4105,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) else SendMessage(hwndEdit,SCI_SETEDGEMODE,EDGE_NONE,0); UpdateStatusbar(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); break; @@ -4126,7 +4116,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) iLongLinesLimit = max(min(iLongLinesLimit,4096),0); SendMessage(hwndEdit,SCI_SETEDGECOLUMN,iLongLinesLimit,0); UpdateStatusbar(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); iLongLinesLimitG = iLongLinesLimit; } break; @@ -4779,7 +4768,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) Style_SetDefaultLexer(hwndEdit); UpdateStatusbar(); UpdateLineNumberWidth(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); break; @@ -4787,7 +4775,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) Style_SetHTMLLexer(hwndEdit); UpdateStatusbar(); UpdateLineNumberWidth(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); break; @@ -4795,7 +4782,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) Style_SetXMLLexer(hwndEdit); UpdateStatusbar(); UpdateLineNumberWidth(); - EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); break; @@ -5681,8 +5667,12 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam) RestoreSelectionAction(scn->token,REDO); } } + else if (scn->modificationType & SC_MOD_CHANGESTYLE) { + EditUpdateUrlHotspots(hwndEdit, (int)scn->position, (int)(scn->position + scn->length)); + } if (scn->linesAdded != 0) { UpdateLineNumberWidth(); + EditUpdateUrlHotspots(hwndEdit, 0, SciCall_GetTextLength()); } bModified = TRUE; break; diff --git a/src/Styles.c b/src/Styles.c index a1f98e308..a4fe8e7a5 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -3160,7 +3160,7 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) { SciCall_SetProperty("fold.cpp.comment.explicit", "0"); // Add KeyWord Lists - for (int i = 0; i < 9; i++) + for (int i = 0; i < (KEYWORDSET_MAX + 1); i++) SendMessage(hwnd, SCI_SETKEYWORDS, i, (LPARAM)pLexNew->pKeyWords->pszKeyWords[i]); // Use 2nd default style @@ -3171,7 +3171,6 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) { fIsConsolasAvailable = IsFontAvailable(L"Consolas"); // Clear - SendMessage(hwnd, SCI_STYLECLEARALL, 0, 0); SendMessage(hwnd, SCI_CLEARDOCUMENTSTYLE, 0, 0); // Idle Styling (very large text) @@ -3186,7 +3185,7 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) { Style_StrGetSize(lexDefault.Styles[STY_DEFAULT + iIdx].szValue, &iBaseFontSize); // base size // Auto-select codepage according to charset - //Style_SetACPfromCharSet(hwnd); + //~Style_SetACPfromCharSet(hwnd); if (!Style_StrGetColor(TRUE, lexDefault.Styles[STY_DEFAULT + iIdx].szValue, &iValue)) SendMessage(hwnd, SCI_STYLESETFORE, STYLE_DEFAULT, (LPARAM)GetSysColor(COLOR_WINDOWTEXT)); // default text color @@ -3195,6 +3194,9 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) { if (pLexNew->iLexer != SCLEX_NULL || pLexNew == &lexANSI) Style_SetStyles(hwnd, pLexNew->Styles[STY_DEFAULT].iStyle, pLexNew->Styles[STY_DEFAULT].szValue); // lexer default + // Reset + SendMessage(hwnd, SCI_STYLECLEARALL, 0, 0); + Style_SetStyles(hwnd, lexDefault.Styles[STY_MARGIN + iIdx].iStyle, lexDefault.Styles[STY_MARGIN + iIdx].szValue); // linenumber @@ -3552,15 +3554,18 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) { } } - // set URL Hotspot style - Style_SetUrlHotSpot(hwnd, bHyperlinkHotspot); + // apply lexer styles + SendMessage(hwnd, SCI_COLOURISE, 0, (LPARAM)-1); - SendMessage(hwnd,SCI_COLOURISE,0,(LPARAM)-1); - - EditUpdateUrlHotspots(hwnd, 0, SciCall_GetTextLength()); + // override hyperlink hotspot style + if (bHyperlinkHotspot) { + Style_SetUrlHotSpot(hwnd, bHyperlinkHotspot); + EditUpdateUrlHotspots(hwnd, 0, SciCall_GetTextLength()); + } // Save current lexer pLexCurrent = pLexNew; + } @@ -4017,10 +4022,10 @@ void Style_ToggleUse2ndDefault(HWND hwnd) // void Style_SetDefaultFont(HWND hwnd) { - int iIdx = (bUse2ndDefaultStyle) ? STY_CNT_LAST : 0; + const int iIdx = (bUse2ndDefaultStyle) ? STY_CNT_LAST : 0; if (Style_SelectFont(hwnd, lexDefault.Styles[STY_DEFAULT + iIdx].szValue, - COUNTOF(lexDefault.Styles[STY_DEFAULT].szValue), + COUNTOF(lexDefault.Styles[STY_DEFAULT + iIdx].szValue), TRUE)) { fStylesModified = TRUE; Style_SetLexer(hwnd,pLexCurrent); @@ -4425,7 +4430,7 @@ BOOL Style_SelectFont(HWND hwnd,LPWSTR lpszStyle,int cchStyle,BOOL bDefaultStyle StringCchCat(szNewStyle,COUNTOF(szNewStyle),tch); } - StringCchCopyN(lpszStyle,cchStyle,szNewStyle,cchStyle); + StringCchCopyN(lpszStyle,cchStyle,szNewStyle,COUNTOF(szNewStyle)); return TRUE; }