From 456be83425973d2ed09468a21fb0f384a3d26069 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Sat, 15 May 2021 12:13:09 +0200 Subject: [PATCH] + chg: add some more coding fonts to prefer over Consolas (if installed) + bld: linker: hardware-enforced stack-protection + rfc: some code cleanup --- lexilla/Lexilla.vcxproj | 6 +++ minipath/minipath.vcxproj | 6 +++ src/Edit.c | 98 +++++++-------------------------------- src/Edit.h | 7 --- src/Notepad3.c | 2 - src/Notepad3.vcxproj | 6 +++ src/Styles.c | 36 ++++++++++---- 7 files changed, 61 insertions(+), 100 deletions(-) diff --git a/lexilla/Lexilla.vcxproj b/lexilla/Lexilla.vcxproj index 419cdf429..c6e023ece 100644 --- a/lexilla/Lexilla.vcxproj +++ b/lexilla/Lexilla.vcxproj @@ -241,6 +241,7 @@ Console true + true true @@ -277,6 +278,7 @@ true true true + true true @@ -312,6 +314,7 @@ true true true + true true @@ -340,6 +343,7 @@ Console true + true true @@ -375,6 +379,7 @@ true true true + true true @@ -409,6 +414,7 @@ true true true + true true diff --git a/minipath/minipath.vcxproj b/minipath/minipath.vcxproj index 1daeb987c..8b53091a0 100644 --- a/minipath/minipath.vcxproj +++ b/minipath/minipath.vcxproj @@ -147,6 +147,7 @@ false uxtheme.dll + true _DEBUG;%(PreprocessorDefinitions) @@ -210,6 +211,7 @@ false uxtheme.dll + true NDEBUG;%(PreprocessorDefinitions) @@ -276,6 +278,7 @@ false uxtheme.dll + true NDEBUG;%(PreprocessorDefinitions) @@ -312,6 +315,7 @@ false uxtheme.dll + true @@ -350,6 +354,7 @@ false uxtheme.dll + true @@ -394,6 +399,7 @@ false uxtheme.dll + true diff --git a/src/Edit.c b/src/Edit.c index 956e9efe6..827fa5dea 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -1787,8 +1787,6 @@ void EditURLEncode(const bool isPathConvert) return; } - _SAVE_TARGET_RANGE_; - DocPos const iSelStart = SciCall_GetSelectionStart(); //DocPos const iSelEnd = SciCall_GetSelectionEnd(); DocPos const iSelSize = SciCall_GetSelText(NULL) - 1; // w/o terminating zero @@ -1846,8 +1844,6 @@ void EditURLEncode(const bool isPathConvert) EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; - FreeMem(pszEscaped); FreeMem(pszEscapedW); } @@ -1867,8 +1863,6 @@ void EditURLDecode(const bool isPathConvert) return; } - _SAVE_TARGET_RANGE_; - DocPos const iSelStart = SciCall_GetSelectionStart(); //DocPos const iSelEnd = SciCall_GetSelectionEnd(); DocPos const iSelSize = SciCall_GetSelText(NULL) - 1; // w/o terminating zero @@ -1933,8 +1927,6 @@ void EditURLDecode(const bool isPathConvert) EndUndoTransAction(); } - _RESTORE_TARGET_RANGE_; - FreeMem(pszTextW); FreeMem(pszUnescaped); FreeMem(pszUnescapedW); @@ -1956,8 +1948,6 @@ void EditReplaceAllChr(const WCHAR chSearch, const WCHAR chReplace) { return; } - _SAVE_TARGET_RANGE_; - DocPos const iSelStart = SciCall_GetSelectionStart(); DocPos const iSelEnd = SciCall_GetSelectionEnd(); DocPos const iSelSize = SciCall_GetSelText(NULL) - 1; // w/o terminating zero @@ -1996,8 +1986,6 @@ void EditReplaceAllChr(const WCHAR chSearch, const WCHAR chReplace) { EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; - FreeMem(pwchText); FreeMem(pchReplace); } @@ -2060,8 +2048,6 @@ void EditBase64Code(HWND hwnd, const bool bEncode, cpi_enc_t cpi) { base64Size = (size_t)new_size; } - _SAVE_TARGET_RANGE_; - UndoTransActionBegin(); SciCall_TargetFromSelection(); @@ -2078,8 +2064,6 @@ void EditBase64Code(HWND hwnd, const bool bEncode, cpi_enc_t cpi) { EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; - } @@ -2609,13 +2593,11 @@ void EditTabsToSpaces(int nTabWidth,bool bOnlyIndentingWS) iCurPos = iSelStart + cchConvM; } - _SAVE_TARGET_RANGE_; UndoTransActionBegin(); SciCall_SetTargetRange(iSelStart, iSelEnd); SciCall_ReplaceTarget(cchConvM, pszText2); EditSetSelectionEx(iAnchorPos, iCurPos, -1, -1); EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; FreeMem(pszText2); } FreeMem(pszConvW); @@ -2637,8 +2619,6 @@ void EditSpacesToTabs(int nTabWidth,bool bOnlyIndentingWS) return; } - _SAVE_TARGET_RANGE_; - DocPos iCurPos = SciCall_GetCurrentPos(); DocPos iAnchorPos = SciCall_GetAnchor(); @@ -2733,8 +2713,6 @@ void EditSpacesToTabs(int nTabWidth,bool bOnlyIndentingWS) FreeMem(pszText2); } - _RESTORE_TARGET_RANGE_; - FreeMem(pszConvW); } @@ -2988,8 +2966,6 @@ void EditModifyLines(const PENCLOSESELDATA pEnclData) { return; } - _SAVE_TARGET_RANGE_; - char mszPrefix1[256 * 3] = { '\0' }; char mszAppend1[256 * 3] = { '\0' }; @@ -3236,7 +3212,6 @@ void EditModifyLines(const PENCLOSESELDATA pEnclData) { EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; } @@ -3341,8 +3316,6 @@ void EditAlignText(int nMode) return; } - _SAVE_TARGET_RANGE_; - DocPos iCurPos = SciCall_GetCurrentPos(); DocPos iAnchorPos = SciCall_GetAnchor(); @@ -3558,7 +3531,6 @@ void EditAlignText(int nMode) EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; } @@ -3574,8 +3546,6 @@ void EditEncloseSelection(LPCWSTR pszOpen, LPCWSTR pszClose) { return; } - _SAVE_TARGET_RANGE_; - char mszOpen[ENCLDATA_SIZE * 3] = { '\0' }; char mszClose[ENCLDATA_SIZE * 3] = { '\0' }; @@ -3614,7 +3584,6 @@ void EditEncloseSelection(LPCWSTR pszOpen, LPCWSTR pszClose) { EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; } @@ -3624,8 +3593,6 @@ void EditEncloseSelection(LPCWSTR pszOpen, LPCWSTR pszClose) { // void EditToggleLineCommentsSimple(LPCWSTR pwszComment, bool bInsertAtStart, LnCmtMode_t mode) { - _SAVE_TARGET_RANGE_; - bool const bStraightSel = SciCall_GetAnchor() <= SciCall_GetCurrentPos(); DocPos const iSelStart = Sci_GetSelectionStartEx(); @@ -3743,7 +3710,6 @@ void EditToggleLineCommentsSimple(LPCWSTR pwszComment, bool bInsertAtStart, LnCm EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; } @@ -3753,8 +3719,6 @@ void EditToggleLineCommentsSimple(LPCWSTR pwszComment, bool bInsertAtStart, LnCm // void EditToggleLineCommentsExtended(LPCWSTR pwszComment, bool bInsertAtStart) { - _SAVE_TARGET_RANGE_; - DocPos const iSelStart = Sci_GetSelectionStartEx(); DocPos const iSelEnd = Sci_GetSelectionEndEx(); @@ -3872,7 +3836,6 @@ void EditToggleLineCommentsExtended(LPCWSTR pwszComment, bool bInsertAtStart) EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; } @@ -3884,8 +3847,6 @@ static DocPos _AppendSpaces(HWND hwnd, DocLn iLineStart, DocLn iLineEnd, DocPos { UNREFERENCED_PARAMETER(hwnd); - _SAVE_TARGET_RANGE_; - size_t size = (size_t)iMaxColumn; char* pmszPadStr = AllocMem(size + 1, HEAP_ZERO_MEMORY); FillMemory(pmszPadStr, size, ' '); @@ -3916,8 +3877,6 @@ static DocPos _AppendSpaces(HWND hwnd, DocLn iLineStart, DocLn iLineEnd, DocPos spcCount += iPadLen; } - _RESTORE_TARGET_RANGE_; - FreeMem(pmszPadStr); return spcCount; @@ -4044,8 +4003,6 @@ void EditStripFirstCharacter(HWND hwnd) return; } - _SAVE_TARGET_RANGE_; - DocPos const iSelStart = SciCall_IsSelectionEmpty() ? 0 : SciCall_GetSelectionStart(); DocPos const iSelEnd = SciCall_IsSelectionEmpty() ? Sci_GetDocEndPosition() : SciCall_GetSelectionEnd(); DocLn const iLineStart = SciCall_LineFromPosition(iSelStart); @@ -4105,7 +4062,6 @@ void EditStripFirstCharacter(HWND hwnd) EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; } @@ -4121,8 +4077,6 @@ void EditStripLastCharacter(HWND hwnd, bool bIgnoreSelection, bool bTrailingBlan return; } - _SAVE_TARGET_RANGE_; - DocPos const iSelStart = (SciCall_IsSelectionEmpty() || bIgnoreSelection) ? 0 : SciCall_GetSelectionStart(); DocPos const iSelEnd = (SciCall_IsSelectionEmpty() || bIgnoreSelection) ? Sci_GetDocEndPosition() : SciCall_GetSelectionEnd(); DocLn const iLineStart = SciCall_LineFromPosition(iSelStart); @@ -4220,9 +4174,9 @@ void EditStripLastCharacter(HWND hwnd, bool bIgnoreSelection, bool bTrailingBlan } } } + EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; } @@ -4232,8 +4186,6 @@ void EditStripLastCharacter(HWND hwnd, bool bIgnoreSelection, bool bTrailingBlan // void EditCompressBlanks() { - _SAVE_TARGET_RANGE_; - const bool bIsSelEmpty = SciCall_IsSelectionEmpty(); const DocPos iSelStartPos = SciCall_GetSelectionStart(); @@ -4399,7 +4351,6 @@ void EditCompressBlanks() FreeMem(pszOut); } - _RESTORE_TARGET_RANGE_; } @@ -4429,8 +4380,6 @@ void EditRemoveBlankLines(HWND hwnd, bool bMerge, bool bRemoveWhiteSpace) --iEndLine; } - _SAVE_TARGET_RANGE_; - UndoTransActionBegin(); for (DocLn iLine = iBegLine; iLine <= iEndLine; ) { @@ -4478,7 +4427,6 @@ void EditRemoveBlankLines(HWND hwnd, bool bMerge, bool bRemoveWhiteSpace) EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; } @@ -4495,8 +4443,6 @@ void EditRemoveDuplicateLines(HWND hwnd, bool bRemoveEmptyLines) return; } - _SAVE_TARGET_RANGE_; - DocPos const iSelStart = SciCall_GetSelectionStart(); DocPos const iSelEnd = SciCall_GetSelectionEnd(); @@ -4551,7 +4497,6 @@ void EditRemoveDuplicateLines(HWND hwnd, bool bRemoveEmptyLines) EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; } @@ -4667,8 +4612,6 @@ void EditFocusMarkedLinesCmd(HWND hwnd, bool bCopy, bool bDelete) // void EditWrapToColumn(DocPosU nColumn) { - _SAVE_TARGET_RANGE_; - DocPosU const tabWidth = SciCall_GetTabWidth(); nColumn = clamppu(nColumn, tabWidth, LONG_LINES_MARKER_LIMIT); @@ -4803,16 +4746,18 @@ void EditWrapToColumn(DocPosU nColumn) } UndoTransActionBegin(); + SciCall_SetTargetRange(iSelStart, iSelEnd); SciCall_ReplaceTarget(cchConvM, pszText); EditSetSelectionEx(iAnchorPos, iCurPos, -1, -1); + EndUndoTransAction(); + FreeMem(pszText); } } FreeMem(pszConvW); - _RESTORE_TARGET_RANGE_; } @@ -4830,8 +4775,6 @@ void EditWrapToColumnForce(HWND hwnd, DocPosU nColumn/*,int nTabWidth*/) return; } - _SAVE_TARGET_RANGE_; - size_t const size = (size_t)nColumn + 1LL; char const spc = ' '; char* const pTxt = (char* const)AllocMem(size + 1, HEAP_ZERO_MEMORY); @@ -4840,14 +4783,15 @@ void EditWrapToColumnForce(HWND hwnd, DocPosU nColumn/*,int nTabWidth*/) FreeMem(pTxt); UndoTransActionBegin(); + if (SciCall_IsSelectionEmpty()) { SciCall_TargetWholeDocument(); } else { SciCall_TargetFromSelection(); } SciCall_LinesSplit(width_pix); + EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; } #endif @@ -4859,12 +4803,13 @@ void EditWrapToColumnForce(HWND hwnd, DocPosU nColumn/*,int nTabWidth*/) void EditSplitLines(HWND hwnd) { UNREFERENCED_PARAMETER(hwnd); - _SAVE_TARGET_RANGE_; + UndoTransActionBegin(); + SciCall_TargetFromSelection(); SciCall_LinesSplit(0); + EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; } @@ -4887,8 +4832,6 @@ void EditJoinLinesEx(bool bPreserveParagraphs, bool bCRLF2Space) return; } - _SAVE_TARGET_RANGE_; - DocPos const iSelStart = SciCall_GetSelectionStart(); DocPos const iSelEnd = SciCall_GetSelectionEnd(); DocPos const iSelLength = (iSelEnd - iSelStart); @@ -4942,13 +4885,14 @@ void EditJoinLinesEx(bool bPreserveParagraphs, bool bCRLF2Space) } UndoTransActionBegin(); + SciCall_SetTargetRange(iSelStart, iSelEnd); SciCall_ReplaceTarget(cchJoin, pszJoin); EditSetSelectionEx(iAnchorPos, iCurPos, -1, -1); + EndUndoTransAction(); } FreeMem(pszJoin); - _RESTORE_TARGET_RANGE_; } @@ -5058,11 +5002,9 @@ void EditSortLines(HWND hwnd, int iSortFlags) return; // no selection } - _SAVE_TARGET_RANGE_; - bool const bIsMultiSel = Sci_IsMultiOrRectangleSelection(); - DocPos const iSelStart = SciCall_GetSelectionStart(); //iSelStart = SciCall_PositionFromLine(iLine); + DocPos const iSelStart = SciCall_GetSelectionStart(); //~iSelStart = SciCall_PositionFromLine(iLine); DocPos const iSelEnd = SciCall_GetSelectionEnd(); //DocLn const iLine = SciCall_LineFromPosition(iSelStart); @@ -5266,6 +5208,7 @@ void EditSortLines(HWND hwnd, int iSortFlags) } UndoTransActionBegin(); + //SciCall_SetTargetRange(SciCall_PositionFromLine(iLineStart), SciCall_PositionFromLine(iLineEnd + 1)); SciCall_SetTargetRange(SciCall_PositionFromLine(iLineStart), SciCall_GetLineEndPosition(iLineEnd)); SciCall_ReplaceTarget(-1, pmszResult); @@ -5275,9 +5218,9 @@ void EditSortLines(HWND hwnd, int iSortFlags) } else { EditSetSelectionEx(iAnchorPos, iCurPos, -1, -1); } + EndUndoTransAction(); - _RESTORE_TARGET_RANGE_; } @@ -7147,21 +7090,14 @@ void EditSelectionMultiSelectAll() { if (SciCall_GetSelText(NULL) > 1) { - _SAVE_TARGET_RANGE_; - SciCall_TargetWholeDocument(); - SciCall_SetSearchFlags(GetMarkAllOccSearchFlags()); - SciCall_MultipleSelectAddEach(); - SciCall_SetMainSelection(0); if (SciCall_GetSelectionNAnchor(0) > SciCall_GetSelectionNCaret(0)) { SciCall_SwapMainAnchorCaret(); } EditScrollSelectionToView(); - - _RESTORE_TARGET_RANGE_; } } @@ -7257,9 +7193,8 @@ bool EditReplace(HWND hwnd, LPEDITFINDREPLACE lpefr) return EditFindNext(hwnd, lpefr, false, false); } - _SAVE_TARGET_RANGE_; - UndoTransActionBegin(); + SciCall_TargetFromSelection(); Sci_ReplaceTarget(iReplaceMsg, -1, pszReplace); // move caret behind replacement @@ -7267,9 +7202,8 @@ bool EditReplace(HWND hwnd, LPEDITFINDREPLACE lpefr) Globals.iReplacedOccurrences = 1; EndUndoTransAction(); - FreeMem(pszReplace); - _RESTORE_TARGET_RANGE_; + FreeMem(pszReplace); return EditFindNext(hwnd, lpefr, false, false); } diff --git a/src/Edit.h b/src/Edit.h index 6a78fe83d..f283aaeb7 100644 --- a/src/Edit.h +++ b/src/Edit.h @@ -137,13 +137,6 @@ void EditDeleteMarkerInSelection(); void EditSelectionMultiSelectAll(); void EditSelectionMultiSelectAllEx(CLPCEDITFINDREPLACE edFndRpl); -// maybe removed beyond next release -//#define _SAVE_TARGET_RANGE_ DocPos const _saveTargetBeg_ = SciCall_GetTargetStart();\ -// DocPos const _saveTargetEnd_ = SciCall_GetTargetEnd() -//#define _RESTORE_TARGET_RANGE_ SciCall_SetTargetRange(_saveTargetBeg_, _saveTargetEnd_) -#define _SAVE_TARGET_RANGE_ -#define _RESTORE_TARGET_RANGE_ - // // Folding Functions // diff --git a/src/Notepad3.c b/src/Notepad3.c index e02fdcbea..1c45a5408 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -7191,10 +7191,8 @@ void HandleColorDefClicked(HWND hwnd, const DocPos position) (int)GetRValue(rgbNew), (int)GetGValue(rgbNew), (int)GetBValue(rgbNew)); } - _SAVE_TARGET_RANGE_; SciCall_SetTargetRange(firstPos, lastPos); SciCall_ReplaceTarget(length, wchColor); - _RESTORE_TARGET_RANGE_; EditUpdateVisibleIndicators(); } diff --git a/src/Notepad3.vcxproj b/src/Notepad3.vcxproj index 6edd426d7..bba4a799c 100644 --- a/src/Notepad3.vcxproj +++ b/src/Notepad3.vcxproj @@ -180,6 +180,7 @@ true uxtheme.dll + true @@ -251,6 +252,7 @@ true uxtheme.dll + true @@ -332,6 +334,7 @@ true NoErrorReport false + true @@ -408,6 +411,7 @@ true uxtheme.dll true + true @@ -488,6 +492,7 @@ true NoErrorReport false + true @@ -563,6 +568,7 @@ true uxtheme.dll true + true diff --git a/src/Styles.c b/src/Styles.c index 77d858330..483785746 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -2644,38 +2644,56 @@ bool Style_GetFileFilterStr(LPWSTR lpszFilter, int cchFilter, LPWSTR lpszDefExt, //============================================================================= +static WCHAR _DefaultCodingFont[LF_FACESIZE] = { L"\0" }; // session static + static inline bool GetDefaultCodeFont(LPWSTR pwchFontName, int cchFont) { + if (StrIsNotEmpty(_DefaultCodingFont)) { + StringCchCopy(pwchFontName, cchFont, _DefaultCodingFont); + return true; + } + LPCWSTR const FontNamePrioList[] = { L"Cascadia Code", L"Fira Code", + L"Roboto Mono", + L"Source Code Pro", L"DejaVu Sans Mono", L"Consolas", L"Lucida Console" }; - bool found = false; - for (int i = 0; i < COUNTOF(FontNamePrioList); ++i) { + unsigned const countof = COUNTOF(FontNamePrioList); + + unsigned i = 0; + for ( ; i < countof; ++i) { LPCWSTR const fontName = FontNamePrioList[i]; if (IsFontAvailable(fontName)) { StringCchCopy(pwchFontName, cchFont, fontName); - found = true; break; } } - if (!found) { + if (i >= countof) { StringCchCopy(pwchFontName, cchFont, L"Courier New"); // fallback } - return found; + StringCchCopy(_DefaultCodingFont, COUNTOF(_DefaultCodingFont), pwchFontName); + + return (i < countof); } +static WORD _wDTFSize = 9; +static WCHAR _DefaultTextFont[LF_FACESIZE] = { L"\0" }; // session static + static inline unsigned GetDefaultTextFont(LPWSTR pwchFontName) { - WORD wSize = (WORD)LF_FACESIZE; - GetThemedDialogFont(pwchFontName, &wSize); - return wSize; + if (StrIsNotEmpty(_DefaultTextFont)) { + StringCchCopy(pwchFontName, LF_FACESIZE, _DefaultTextFont); + return _wDTFSize; + } + GetThemedDialogFont(pwchFontName, &_wDTFSize); + StringCchCopy(_DefaultTextFont, COUNTOF(_DefaultTextFont), pwchFontName); + return _wDTFSize; } - //============================================================================= // // Style_StrGetFontName()