diff --git a/Build/Changes.txt b/Build/Changes.txt index 6a5bef4ff..f2aa230a7 100644 --- a/Build/Changes.txt +++ b/Build/Changes.txt @@ -33,14 +33,14 @@ UCD - (UCD)ARDET is an Encoding Detector Library ======================================================== -Current BETA/RC Version 5.21.525.(build_#) (2021-05-25) +Current BETA/RC Version 5.21.527.(build_#) (2021-05-27) ======================================================== -------------------------------------------------------- NEW: -------------------------------------------------------- [.###.#]- . -[.525.1]- Add "Julia" lexer (new in Lexilla). +[.525.1]- Add "Julia" lexer (new in Lexilla) (LEX). [.506.1]- Base64 Encoding/Decoding. [.428.1]- Custom ChooseColor resource definition. [.426.1]- Prepare Application Manifest for to grant Identity for non-package desktop apps. @@ -72,7 +72,9 @@ NEW: CHANGES: -------------------------------------------------------- [.###.#]- . -[.525.1]- Update Lexilla Lib (bug fixes for Lexer: Markdown, Cmd/Batch). +[.526.1]- Batch-Lexer + patching Markdown-Lexer (eolfilled header lines) (LEX). +[.526.1]- Scheme-Dlg: dynamic (alloc) Style-Backup handling. +[.525.1]- Update Lexilla Lib (bug fixes for Lexer: Markdown, Cmd/Batch) (LEX). [.515.1]- "grepWinNP3" based on current grepWin ver (boost v1.76 , upd: sktoolslib). [.515.1]- Add some more coding fonts to prefer over Consolas (if installed). [.515.1]- Linker: hardware-enforced stack-protection. @@ -118,6 +120,10 @@ CHANGES: [.302.1]- Prevent Path to URL conversion, if Hyperlink RegEx pattern does not match. [.301.1]- Enable Dark Mode feature for Win10 v21H1 insider beta. [.301.1]- EOL-Mode: status-bar double-click : inverted cyclic change rotation CRLF -> LF -> CR. + +-------------------------------------------------------- +CHANGES Versions in Tools or Libraries: +-------------------------------------------------------- [.515.1]- Update grepWinNP3 (GRE) version 2.1.7.37 (2021-05.14). [.525.1]- Update Oniguruma Regex (ONI) engine version 7.0.0 (2021-05-17). [.429.1]- Update Lexilla Library (LEX) version 5.0.2 (2021-04-23). @@ -127,6 +133,8 @@ CHANGES: FIXES: -------------------------------------------------------- [.###.#]- . +[.527.1]- Correct handling of F/R dialog pattern combo-box dropdown list. +[.527.1]- Minor fixes Markdown-Lexer. [.513.1]- Go to doc begin after global indentation change. [.513.1]- Minor enhancements for selection scroll to view. [.513.1]- Optimized handling of multi-step undo/redo notifications. diff --git a/Versions/day.txt b/Versions/day.txt index 642ea6f49..678dee3e1 100644 --- a/Versions/day.txt +++ b/Versions/day.txt @@ -1 +1 @@ -525 +527 diff --git a/language/np3_hu_hu/dialogs_hu_hu.rc b/language/np3_hu_hu/dialogs_hu_hu.rc index 02ae08567..dc992c1f1 100644 --- a/language/np3_hu_hu/dialogs_hu_hu.rc +++ b/language/np3_hu_hu/dialogs_hu_hu.rc @@ -697,53 +697,53 @@ END // IDD_MUI_SYSFONT_WITHLINK DIALOGEX 13, 54, 243, 234 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Font" +CAPTION "Betűtípus" FONT 9, "Segoe UI", 0, 0, 0x0 BEGIN - LTEXT "&Font:", stc1, 7, 7, 98, 9 + LTEXT "&Betűtípus:", stc1, 7, 7, 98, 9 COMBOBOX cmb1, 7, 16, 98, 76, CBS_SIMPLE | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_HASSTRINGS | CBS_OWNERDRAWFIXED - LTEXT "Font st&yle:", stc2, 114, 7, 74, 9 + LTEXT "Betű &stílusa:", stc2, 114, 7, 74, 9 COMBOBOX cmb2, 114, 16, 74, 76, CBS_SIMPLE | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_HASSTRINGS | CBS_OWNERDRAWFIXED - LTEXT "&Size:", stc3, 198, 7, 36, 9 + LTEXT "&Méret:", stc3, 198, 7, 36, 9 COMBOBOX cmb3, 198, 16, 36, 76, CBS_SIMPLE | CBS_AUTOHSCROLL | CBS_DISABLENOSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_HASSTRINGS | CBS_OWNERDRAWFIXED - GROUPBOX "Effects", grp1, 7, 97, 98, 76, WS_GROUP - AUTOCHECKBOX "Stri&keout", chx1, 13, 111, 90, 10, WS_TABSTOP - AUTOCHECKBOX "&Underline", chx2, 13, 127, 90, 10 + GROUPBOX "Effektusok", grp1, 7, 97, 98, 76, WS_GROUP + AUTOCHECKBOX "Át&húzott", chx1, 13, 111, 90, 10, WS_TABSTOP + AUTOCHECKBOX "&Aláhúzom", chx2, 13, 127, 90, 10 - LTEXT "&Color:", stc4, 13, 144, 89, 9 + LTEXT "&Szín:", stc4, 13, 144, 89, 9 COMBOBOX cmb4, 13, 155, 85, 100, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Sample", grp2, 114, 97, 120, 43, WS_GROUP + GROUPBOX "Minta", grp2, 114, 97, 120, 43, WS_GROUP CTEXT "AaBbYyZz", stc5, 116, 106, 117, 33, SS_NOPREFIX | NOT WS_VISIBLE LTEXT "", stc6, 7, 178, 227, 20, SS_NOPREFIX | NOT WS_GROUP - LTEXT "Sc&ript:", stc7, 114, 145, 118, 9 + LTEXT "Í&rott:", stc7, 114, 145, 118, 9 COMBOBOX cmb5, 114, 155, 120, 30, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP - CONTROL "Show more fonts", IDC_MANAGE_LINK, "SysLink", + CONTROL "További betűtípusok", IDC_MANAGE_LINK, "SysLink", WS_TABSTOP, 7, 199, 227, 9 DEFPUSHBUTTON "OK", IDOK, 141, 215, 45, 14, WS_GROUP - PUSHBUTTON "Cancel", IDCANCEL, 190, 215, 45, 14, WS_GROUP - PUSHBUTTON "&Apply", psh3, 92, 215, 45, 14, WS_GROUP - PUSHBUTTON "&Help", pshHelp, 43, 215, 45, 14, WS_GROUP + PUSHBUTTON "Mégsem", IDCANCEL, 190, 215, 45, 14, WS_GROUP + PUSHBUTTON "&Alkalmaz", psh3, 92, 215, 45, 14, WS_GROUP + PUSHBUTTON "&Súgó", pshHelp, 43, 215, 45, 14, WS_GROUP END @@ -753,25 +753,25 @@ END IDD_MUI_SYSCOLOR_DLG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 2, 0, 298, 184 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Choose Color" +CAPTION "Válasszon színt" FONT 9, "Segoe UI", 0, 0, 0x0 BEGIN - LTEXT "&Basic colors:", -1, 4, 4, 140, 9 + LTEXT "&Alap színek:", -1, 4, 4, 140, 9 CONTROL "", COLOR_BOX1, "static", SS_SIMPLE | WS_CHILD | WS_TABSTOP | WS_GROUP, 4, 14, 140, 86 - LTEXT "&Custom colors:", -1, 4, 106, 140, 9 + LTEXT "&Egyéni színek:", -1, 4, 106, 140, 9 CONTROL "", COLOR_CUSTOM1, "static", SS_SIMPLE | WS_CHILD | WS_TABSTOP | WS_GROUP, 4, 116, 140, 28 - PUSHBUTTON "&Define Custom Colors >>" COLOR_MIX, 4, 150, 138, 14, + PUSHBUTTON "&Egyéni színek >>" COLOR_MIX, 4, 150, 138, 14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "OK", IDOK, 4, 166, 44, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 52, 166, 44, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Help", pshHelp, 100, 166, 44, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Mégsem", IDCANCEL, 52, 166, 44, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Súgó", pshHelp, 100, 166, 44, 14, WS_GROUP | WS_TABSTOP CONTROL "", COLOR_RAINBOW, "static", SS_SIMPLE | WS_CHILD, 152, 4, 118, 116 @@ -783,28 +783,28 @@ BEGIN SS_SIMPLE | WS_CHILD, 152, 124, 40, 26 PUSHBUTTON "&o", COLOR_SOLID, 300, 200, 4, 14, WS_GROUP - RTEXT "Color", COLOR_SOLID_LEFT, 152, 151, 20, 9 - LTEXT "|S&olid", COLOR_SOLID_RIGHT, 172, 151, 20, 9 + RTEXT "Szín", COLOR_SOLID_LEFT, 152, 151, 20, 9 + LTEXT "|&Teli", COLOR_SOLID_RIGHT, 172, 151, 20, 9 - RTEXT "Hu&e:", COLOR_HUEACCEL, 194, 126, 20, 9 + RTEXT "Árn&y.:", COLOR_HUEACCEL, 194, 126, 20, 9 EDITTEXT, COLOR_HUE, 216, 124, 18, 12, WS_GROUP | WS_TABSTOP - RTEXT "&Sat:", COLOR_SATACCEL, 194, 140, 20, 9 + RTEXT "&Fény.:", COLOR_SATACCEL, 194, 140, 20, 9 EDITTEXT, COLOR_SAT, 216, 138, 18, 12, WS_GROUP | WS_TABSTOP RTEXT "&Lum:", COLOR_LUMACCEL, 194, 154, 20, 9 EDITTEXT, COLOR_LUM, 216, 152, 18, 12, WS_GROUP | WS_TABSTOP - RTEXT "&Red:", COLOR_REDACCEL, 243, 126, 24, 9 + RTEXT "&Vörös:", COLOR_REDACCEL, 243, 126, 24, 9 EDITTEXT, COLOR_RED, 269, 124, 18, 12, WS_GROUP | WS_TABSTOP - RTEXT "&Green:", COLOR_GREENACCEL, 243, 140, 24, 9 + RTEXT "&Zöld:", COLOR_GREENACCEL, 243, 140, 24, 9 EDITTEXT, COLOR_GREEN, 269, 138, 18, 12, WS_GROUP | WS_TABSTOP - RTEXT "Bl&ue:", COLOR_BLUEACCEL, 243, 154, 24, 9 + RTEXT "&Kék:", COLOR_BLUEACCEL, 243, 154, 24, 9 EDITTEXT, COLOR_BLUE, 269, 152, 18, 12, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Add to Custom Colors", COLOR_ADD, 152, 166, 142, 14, + PUSHBUTTON "&Hozzáadás az egyéni színekhez", COLOR_ADD, 152, 166, 142, 14, WS_GROUP | WS_TABSTOP END diff --git a/language/np3_hu_hu/lexer_hu_hu.rc b/language/np3_hu_hu/lexer_hu_hu.rc index 73829b3d0..f719d1b9b 100644 --- a/language/np3_hu_hu/lexer_hu_hu.rc +++ b/language/np3_hu_hu/lexer_hu_hu.rc @@ -469,7 +469,7 @@ BEGIN IDS_LEX_STR_63367 "Unicode-Point Hover" IDS_LEX_STR_63368 "2nd Unicode-Point Hover" IDS_LEX_STR_63369 "Interface" - IDS_LEX_STR_63370 "Annotation" + IDS_LEX_STR_63370 "Annotáció" IDS_LEX_STR_63371 "Comment Doc Word" END diff --git a/language/np3_hu_hu/menu_hu_hu.rc b/language/np3_hu_hu/menu_hu_hu.rc index b01b6c2ee..d43364809 100644 --- a/language/np3_hu_hu/menu_hu_hu.rc +++ b/language/np3_hu_hu/menu_hu_hu.rc @@ -77,10 +77,10 @@ BEGIN END POPUP "In&dítás" BEGIN - MENUITEM "Keresés &fájlokban\tCtrl+Shift+F", IDM_GREP_WIN_SEARCH + MENUITEM "Keresés &fájlokban\tCtrl+Shift+F", IDM_GREP_WIN_SEARCH MENUITEM SEPARATOR - MENUITEM "&New Empty Window\tAlt+N", IDM_FILE_NEWWINDOW - MENUITEM "&Duplicate Instance\tAlt+Shift+N", IDM_FILE_NEWWINDOW2 + MENUITEM "&Új üres ablak\tAlt+N", IDM_FILE_NEWWINDOW + MENUITEM "&Példány duplikálás\tAlt+Shift+N", IDM_FILE_NEWWINDOW2 MENUITEM SEPARATOR MENUITEM "&Emelt szinten indítás", IDM_FILE_LAUNCH_ELEVATED MENUITEM SEPARATOR @@ -95,7 +95,7 @@ BEGIN END MENUITEM SEPARATOR MENUITEM "&Visszaállás fájlból\tF5", IDM_FILE_REVERT - MENUITEM "&Ignore File-Vars", CMD_IGNORE_FILE_VARS + MENUITEM "Fájl&változások kihagyása", CMD_IGNORE_FILE_VARS POPUP "&Kódolás" BEGIN POPUP "Visszaállás fájlból másként&" @@ -210,12 +210,12 @@ BEGIN MENUITEM "&Behúzás", IDM_EDIT_INDENT MENUITEM "Behúzás törlése", IDM_EDIT_UNINDENT MENUITEM SEPARATOR - POPUP "Line &Comment" + POPUP "S&or megjegyzés" BEGIN - MENUITEM "&Toggle\tCtrl+Q", IDM_EDIT_LINECOMMENT - MENUITEM "&Add\tCtrl+Alt+Q", IDM_EDIT_LINECOMMENT_ADD - MENUITEM "&Remove\tCtrl+Alt+Shift+Q", IDM_EDIT_LINECOMMENT_REMOVE - MENUITEM "&Block Edit\tAlt+Shift+Q", IDM_EDIT_LINECOMMENT_BLOCKEDIT + MENUITEM "&Váltás\tCtrl+Q", IDM_EDIT_LINECOMMENT + MENUITEM "&Hozzáadás\tCtrl+Alt+Q", IDM_EDIT_LINECOMMENT_ADD + MENUITEM "&Eltávolítás\tCtrl+Alt+Shift+Q", IDM_EDIT_LINECOMMENT_REMOVE + MENUITEM "&Blokk szerkesztése\tAlt+Shift+Q", IDM_EDIT_LINECOMMENT_BLOCKEDIT END MENUITEM SEPARATOR MENUITEM "&Blokk megjegyzés\tCtrl+Shift+Q", IDM_EDIT_STREAMCOMMENT @@ -263,9 +263,9 @@ BEGIN MENUITEM "Behúzás Tab&ulátorrá\tCtrl+Alt+T", IDM_EDIT_CONVERTSPACES2 MENUITEM "Behúzás Tab-m&entes\tCtrl+Alt+S", IDM_EDIT_CONVERTTABS2 MENUITEM SEPARATOR - MENUITEM "Base&64 Encode", IDM_EDIT_BASE64ENCODE - MENUITEM "Base6&4 Decode", IDM_EDIT_BASE64DECODE - MENUITEM "Base64 Decode to codepage...", IDM_EDIT_B64DECODESEL + MENUITEM "Base&64 kódolás", IDM_EDIT_BASE64ENCODE + MENUITEM "Base6&4 dekódolás", IDM_EDIT_BASE64DECODE + MENUITEM "Base64 dekódolás kódlapra...", IDM_EDIT_B64DECODESEL MENUITEM SEPARATOR MENUITEM "&URL bekódolás\tCtrl+Shift+E", IDM_EDIT_URLENCODE MENUITEM "U&RL kikódolás\tCtrl+Shift+R", IDM_EDIT_URLDECODE diff --git a/language/np3_hu_hu/strings_hu_hu.rc b/language/np3_hu_hu/strings_hu_hu.rc index 3cd89185a..a5b32a90c 100644 --- a/language/np3_hu_hu/strings_hu_hu.rc +++ b/language/np3_hu_hu/strings_hu_hu.rc @@ -196,10 +196,10 @@ BEGIN IDS_MUI_EXPORT_FAIL "Hiba a színkiemelések beállításainak exportálásakor ide ""%s""." IDS_MUI_REGEX_INVALID "Hiba a reguláris kifejezés feldolgozásakor. A kifejezés érvénytelen!" IDS_MUI_DROP_NO_FILE "Nem sikerült érvényes fájlnevet kapni.\nHa egy 32 bites alkalmazásból lett átdobva,\nkérem, ejtse újra a Notepad3 eszköztárra." - IDS_MUI_URL_DIR_EXISTS "URL specified directory exists!" - IDS_MUI_URL_FILE_EXISTS "URL specified file exists!" + IDS_MUI_URL_DIR_EXISTS "Az URL-ben megadott könyvtár létezik!" + IDS_MUI_URL_FILE_EXISTS "Az URL-ben megadott fájl létezik!" IDS_MUI_URL_PATH_NOT_FOUND - "URL specified path not found!" + "Az URL-ben megadott útvonal nem létezik!" IDS_MUI_URL_OPEN_FILE "\nAlt + Kattintás a fájl megnyitásához." IDS_MUI_URL_OPEN_BROWSER "\nCtrl + Kattintás a böngészőben való megnyitáshoz." IDS_MUI_INF_PRSVFILEMODTM @@ -242,10 +242,10 @@ STRINGTABLE BEGIN IDS_MUI_TRANSL_AUTHOR "(hu-HU) Magyar fordítás: xsak" IDS_MUI_TITLE_FIXBASE "BASE (%s)" - IDS_MUI_TITLE_RELCUR "+++ %s: %s Style +++" - IDS_MUI_TITLE_FIXCUR "%s: %s Style" - IDS_MUI_TITLE_RELARB "+++ Style '%s' (%s) +++" - IDS_MUI_TITLE_FIXARB "Style '%s' (%s)" + IDS_MUI_TITLE_RELCUR "+++ %s: %s Stílus +++" + IDS_MUI_TITLE_FIXCUR "%s: %s Stílus" + IDS_MUI_TITLE_RELARB "+++ Stílus '%s' (%s) +++" + IDS_MUI_TITLE_FIXARB "Stílus '%s' (%s)" IDS_MUI_ASSOCIATED_EXT "Hozzárendelt kiterjesztések:" IDS_MUI_ZERO_LEN_MATCH "^ Nulla hosszú egyezés" IDS_MUI_GOTO_LINE "Sor (1 - %ti):" @@ -272,13 +272,13 @@ END STRINGTABLE BEGIN - IDS_MUI_SB_MARK_ALL_OCC "Mark All Occurrences..." - IDS_MUI_SB_TOGGLE_VIEW "Toggle View..." - IDS_MUI_SB_REPLACE_ALL "Replace all..." - IDS_MUI_SB_WRAP_LINES "Wrap Lines..." - IDS_MUI_SB_CONV_LNBRK "Convert Line Breaks..." - IDS_MUI_SB_RECODING_DOC "Recoding Document..." - IDS_MUI_SB_LEXER_STYLING "Apply Lexer Styling..." + IDS_MUI_SB_MARK_ALL_OCC "Minden találat jelölése..." + IDS_MUI_SB_TOGGLE_VIEW "Nézet váltása..." + IDS_MUI_SB_REPLACE_ALL "Összes cseréje..." + IDS_MUI_SB_WRAP_LINES "Sorok törése..." + IDS_MUI_SB_CONV_LNBRK "Sorvégek átalakítása..." + IDS_MUI_SB_RECODING_DOC "Dokumentum újrakódolása..." + IDS_MUI_SB_LEXER_STYLING "Lexer stílus alkalmazása..." END STRINGTABLE @@ -379,4 +379,3 @@ END ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED - diff --git a/lexilla/lexers_x/LexMarkdown.cxx b/lexilla/lexers_x/LexMarkdown.cxx index 3fe5b4f19..923af3617 100644 --- a/lexilla/lexers_x/LexMarkdown.cxx +++ b/lexilla/lexers_x/LexMarkdown.cxx @@ -53,7 +53,7 @@ using namespace Lexilla; -static inline bool IsNewline(const int ch) { +constexpr bool IsNewline(const int ch) { return (ch == '\n' || ch == '\r'); } @@ -135,36 +135,45 @@ static bool HasPrevLineContent(StyleContext &sc) { return false; } -static bool AtTermStart(StyleContext &sc) { +constexpr bool AtTermStart(StyleContext &sc) { return sc.currentPos == 0 || sc.chPrev == 0 || isspacechar(sc.chPrev); } -static bool IsValidHrule(const Sci_PositionU endPos, StyleContext &sc) { +static bool IsValidHrule(const Sci_PositionU endPos, StyleContext& sc) { int count = 1; Sci_PositionU i = 0; for (;;) { ++i; - int c = sc.GetRelative(i); - if (c == sc.ch) + int const ch = sc.GetRelative(i); + if (ch == sc.ch) ++count; // hit a terminating character - else if (!IsASpaceOrTab(c) || sc.currentPos + i == endPos) { + else if (!IsASpaceOrTab(ch) || (sc.currentPos + i) == endPos) { // Are we a valid HRULE - if ((IsNewline(c) || sc.currentPos + i == endPos) && - count >= 3 && !HasPrevLineContent(sc)) { + if ((IsNewline(ch) || (sc.currentPos + i) == endPos) && + count >= 3 && !HasPrevLineContent(sc)) { sc.SetState(SCE_MARKDOWN_HRULE); sc.Forward(i); - sc.SetState(SCE_MARKDOWN_LINE_BEGIN); + //@@@sc.SetState(SCE_MARKDOWN_LINE_BEGIN); + sc.SetState(SCE_MARKDOWN_DEFAULT); return true; } else { sc.SetState(SCE_MARKDOWN_DEFAULT); - return false; + return false; } } } } +constexpr bool IsInHeaderState(const int state) { + return ( + state == SCE_MARKDOWN_HEADER1 || state == SCE_MARKDOWN_HEADER2 || + state == SCE_MARKDOWN_HEADER3 || state == SCE_MARKDOWN_HEADER4 || + state == SCE_MARKDOWN_HEADER5 || state == SCE_MARKDOWN_HEADER6 + ); +} + static void ColorizeMarkdownDoc(Sci_PositionU startPos, Sci_Position length, int initStyle, WordList **, Accessor &styler) { Sci_PositionU endPos = startPos + length; @@ -178,16 +187,21 @@ static void ColorizeMarkdownDoc(Sci_PositionU startPos, Sci_Position length, int StyleContext sc(startPos, length, initStyle, styler); while (sc.More()) { + // Skip past escaped characters if (sc.ch == '\\') { sc.Forward(); continue; } - // A blockquotes resets the line semantics - if (sc.state == SCE_MARKDOWN_BLOCKQUOTE) + if (IsInHeaderState(sc.state) && sc.atLineStart) { sc.SetState(SCE_MARKDOWN_LINE_BEGIN); + } + // A blockquotes resets the line semantics + if (sc.state == SCE_MARKDOWN_BLOCKQUOTE) { + sc.SetState(SCE_MARKDOWN_LINE_BEGIN); + } // Conditional state-based actions if (sc.state == SCE_MARKDOWN_CODE2) { if (sc.Match("``") && sc.GetRelative(-2) != ' ') { @@ -263,24 +277,36 @@ static void ColorizeMarkdownDoc(Sci_PositionU startPos, Sci_Position length, int } else if (sc.state == SCE_MARKDOWN_LINE_BEGIN) { // Header - if (sc.Match("######")) + if (sc.Match("######")) { SetStateAndZoom(SCE_MARKDOWN_HEADER6, 6, '#', sc); - else if (sc.Match("#####")) + freezeCursor = true; + } + else if (sc.Match("#####")) { SetStateAndZoom(SCE_MARKDOWN_HEADER5, 5, '#', sc); - else if (sc.Match("####")) - SetStateAndZoom(SCE_MARKDOWN_HEADER4, 4, '#', sc); - else if (sc.Match("###")) + freezeCursor = true; + } + else if (sc.Match("####")) { + SetStateAndZoom(SCE_MARKDOWN_HEADER4, 4, '#', sc); + freezeCursor = true; + } + else if (sc.Match("###")) { SetStateAndZoom(SCE_MARKDOWN_HEADER3, 3, '#', sc); - else if (sc.Match("##")) + freezeCursor = true; + } + else if (sc.Match("##")) { SetStateAndZoom(SCE_MARKDOWN_HEADER2, 2, '#', sc); + freezeCursor = true; + } else if (sc.Match("#")) { // Catch the special case of an unordered list if (sc.chNext == '.' && IsASpaceOrTab(sc.GetRelative(2))) { precharCount = 0; sc.SetState(SCE_MARKDOWN_PRECHAR); } - else + else { SetStateAndZoom(SCE_MARKDOWN_HEADER1, 1, '#', sc); + freezeCursor = true; + } } // Code block else if (sc.Match("~~~")) { @@ -303,20 +329,22 @@ static void ColorizeMarkdownDoc(Sci_PositionU startPos, Sci_Position length, int sc.SetState(SCE_MARKDOWN_PRECHAR); } } - else if (IsNewline(sc.ch)) - sc.SetState(SCE_MARKDOWN_LINE_BEGIN); + else if (sc.atLineEnd) { + sc.ForwardSetState(SCE_MARKDOWN_LINE_BEGIN); + freezeCursor = true; + } else { precharCount = 0; sc.SetState(SCE_MARKDOWN_PRECHAR); } } - // The header lasts until the newline - else if (sc.state == SCE_MARKDOWN_HEADER1 || sc.state == SCE_MARKDOWN_HEADER2 || - sc.state == SCE_MARKDOWN_HEADER3 || sc.state == SCE_MARKDOWN_HEADER4 || - sc.state == SCE_MARKDOWN_HEADER5 || sc.state == SCE_MARKDOWN_HEADER6) { - if (IsNewline(sc.ch)) - sc.SetState(SCE_MARKDOWN_LINE_BEGIN); + // The header lasts beyond the newline (eolfilled) + else if (IsInHeaderState(sc.state)) { + if (sc.atLineEnd) { + sc.ForwardSetState(SCE_MARKDOWN_LINE_BEGIN); + freezeCursor = true; + } } // New state only within the initial whitespace @@ -427,14 +455,16 @@ static void ColorizeMarkdownDoc(Sci_PositionU startPos, Sci_Position length, int sc.Forward(); } // Beginning of line - else if (IsNewline(sc.ch)) { - sc.SetState(SCE_MARKDOWN_LINE_BEGIN); + else if (sc.atLineEnd) { + sc.ForwardSetState(SCE_MARKDOWN_LINE_BEGIN); + freezeCursor = true; } } // Advance if not holding back the cursor for this iteration. if (!freezeCursor) sc.Forward(); - freezeCursor = false; + else + freezeCursor = false; } sc.Complete(); } diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf index 89db2d3d0..ca5eef776 100644 --- a/res/Notepad3.exe.manifest.conf +++ b/res/Notepad3.exe.manifest.conf @@ -3,7 +3,7 @@ Notepad3 beta diff --git a/src/DarkMode/DarkMode.cpp b/src/DarkMode/DarkMode.cpp index d950b2057..a7fec6a5e 100644 --- a/src/DarkMode/DarkMode.cpp +++ b/src/DarkMode/DarkMode.cpp @@ -73,7 +73,7 @@ constexpr bool CheckBuildNumber(DWORD buildNumber) case 19042: // Win10 v20H2 case 19043: // Win10 v21H1 Insider Beta and Release Preview Channels [2021-04-28] // unknown, if working with these version(s) :-O - case 21387: // Win10 v21H2 Insider Dev Channel [2021-05-18] + case 21390: // Win10 v21H2 Insider Dev Channel [2021-05-21] return true; default: // not supported diff --git a/src/Dialogs.c b/src/Dialogs.c index 6dbbb2cf6..710af17fe 100644 --- a/src/Dialogs.c +++ b/src/Dialogs.c @@ -4970,18 +4970,21 @@ void SetWindowReadingRTL(HWND hwnd, bool bRTL) // A2W: Convert Dialog Item Text form Unicode to UTF-8 and vice versa // -UINT ComboBox_GetTextLenth(HWND hDlg, int nIDDlgItem) +UINT ComboBox_GetTextLengthEx(HWND hDlg, int nIDDlgItem) { return (UINT)ComboBox_GetTextLength(GetDlgItem(hDlg, nIDDlgItem)); } -UINT ComboBox_GetTextW2MB(HWND hDlg, int nIDDlgItem, LPSTR lpString, int nMaxCount) -{ +UINT ComboBox_GetCurSelEx(HWND hDlg, int nIDDlgItem) { + return (UINT)ComboBox_GetCurSel(GetDlgItem(hDlg, nIDDlgItem)); +} + +UINT ComboBox_GetTextW2MB(HWND hDlg, int nIDDlgItem, LPSTR lpString, int nMaxCount) { WCHAR wsz[FNDRPL_BUFFER] = { L'\0' }; HWND const hwndCtl = GetDlgItem(hDlg, nIDDlgItem); UINT const uRet = (UINT)ComboBox_GetTextLength(hwndCtl); int const idx = ComboBox_GetCurSel(hwndCtl); - if (-1 != idx) { + if (idx >= 0) { if (uRet < COUNTOF(wsz)) { ComboBox_GetLBText(hwndCtl, ComboBox_GetCurSel(hwndCtl), wsz); } @@ -5001,13 +5004,14 @@ void ComboBox_SetTextMB2W(HWND hDlg, int nIDDlgItem, LPCSTR lpString) //return SetDlgItemText(hDlg, nIDDlgItem, wsz); } -LRESULT ComboBox_AddStringMB2W(HWND hwnd, LPCSTR lpString) +#if 0 +void ComboBox_AddStringMB2W(HWND hDlg, int nIDDlgItem, LPCSTR lpString) { WCHAR wsz[FNDRPL_BUFFER] = { L'\0' }; MultiByteToWideChar(Encoding_SciCP, 0, lpString, -1, wsz, (int)COUNTOF(wsz)); - return SendMessageW(hwnd, CB_ADDSTRING, 0, (LPARAM)wsz); + ComboBox_AddString(GetDlgItem(hDlg, nIDDlgItem), wsz); } - +#endif //============================================================================= // diff --git a/src/Dialogs.h b/src/Dialogs.h index 166e29f6d..0015e8a8f 100644 --- a/src/Dialogs.h +++ b/src/Dialogs.h @@ -89,10 +89,11 @@ void SetWindowTransparentMode(HWND hwnd, bool bTransparentMode, int iOpacityLeve void SetWindowLayoutRTL(HWND hwnd, bool bRTL); void SetWindowReadingRTL(HWND hwnd, bool bRTL); -UINT ComboBox_GetTextLenth(HWND hDlg, int nIDDlgItem); +UINT ComboBox_GetTextLengthEx(HWND hDlg, int nIDDlgItem); +UINT ComboBox_GetCurSelEx(HWND hDlg, int nIDDlgItem); UINT ComboBox_GetTextW2MB(HWND hDlg, int nIDDlgItem, LPSTR lpString, int nMaxCount); void ComboBox_SetTextMB2W(HWND hDlg, int nIDDlgItem, LPCSTR lpString); -LRESULT ComboBox_AddStringMB2W(HWND hwnd, LPCSTR lpString); +//void ComboBox_AddStringMB2W(HWND hDlg, int nIDDlgItem, LPCSTR lpString); POINT GetCenterOfDlgInParent(const RECT* rcDlg, const RECT* rcParent); HWND GetParentOrDesktop(HWND hDlg); diff --git a/src/Edit.c b/src/Edit.c index 827fa5dea..dc1243626 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -5442,196 +5442,194 @@ void EditGetExcerpt(HWND hwnd,LPWSTR lpszExcerpt,DWORD cchExcerpt) // static void _SetSearchFlags(HWND hwnd, LPEDITFINDREPLACE lpefr) { - if (lpefr) { - if (hwnd) { - char szBuf[FNDRPL_BUFFER] = { '\0' }; - bool bIsFindDlg = (GetDlgItem(Globals.hwndDlgFindReplace, IDC_REPLACE) == NULL); + if (hwnd && lpefr) { - ComboBox_GetTextW2MB(hwnd, IDC_FINDTEXT, szBuf, COUNTOF(szBuf)); - if (StringCchCompareXA(szBuf, lpefr->szFind) != 0) { - StringCchCopyA(lpefr->szFind, COUNTOF(lpefr->szFind), szBuf); + char szBuf[FNDRPL_BUFFER] = { '\0' }; + bool bIsFindDlg = (GetDlgItem(Globals.hwndDlgFindReplace, IDC_REPLACE) == NULL); + + ComboBox_GetTextW2MB(hwnd, IDC_FINDTEXT, szBuf, COUNTOF(szBuf)); + if (StringCchCompareXA(szBuf, lpefr->szFind) != 0) { + StringCchCopyA(lpefr->szFind, COUNTOF(lpefr->szFind), szBuf); + lpefr->bStateChanged = true; + } + + ComboBox_GetTextW2MB(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; } - - ComboBox_GetTextW2MB(hwnd, IDC_REPLACETEXT, szBuf, COUNTOF(szBuf)); - if (StringCchCompareXA(szBuf, lpefr->szReplace) != 0) { - StringCchCopyA(lpefr->szReplace, COUNTOF(lpefr->szReplace), szBuf); + } 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; + } + } - bool bIsFlagSet = ((lpefr->fuFlags & SCFIND_MATCHCASE) != 0); - if (IsButtonChecked(hwnd, IDC_FINDCASE)) { + 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->bRegExprSearch; + if (IsButtonChecked(hwnd, IDC_FINDREGEXP)) { + if (!bIsFlagSet) { + lpefr->bRegExprSearch = true; + lpefr->fuFlags |= SCFIND_REGEXP; + lpefr->bStateChanged = true; + } + } else { + if (bIsFlagSet) { + lpefr->bRegExprSearch = false; + lpefr->fuFlags &= ~SCFIND_REGEXP; + lpefr->bStateChanged = true; + } + } + + if (IsDialogControlEnabled(hwnd, IDC_DOT_MATCH_ALL)) { + bIsFlagSet = ((lpefr->fuFlags & SCFIND_DOT_MATCH_ALL) != 0); + if (IsButtonChecked(hwnd, IDC_DOT_MATCH_ALL)) { if (!bIsFlagSet) { - lpefr->fuFlags |= SCFIND_MATCHCASE; + lpefr->fuFlags |= SCFIND_DOT_MATCH_ALL; lpefr->bStateChanged = true; } } else { if (bIsFlagSet) { - lpefr->fuFlags &= ~(SCFIND_MATCHCASE); + lpefr->fuFlags &= ~SCFIND_DOT_MATCH_ALL; 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; - } + // force consistency + if (lpefr->bRegExprSearch) { + CheckDlgButton(hwnd, IDC_WILDCARDSEARCH, BST_UNCHECKED); + } + bIsFlagSet = lpefr->bWildcardSearch; + if (IsButtonChecked(hwnd, IDC_WILDCARDSEARCH)) { + if (!bIsFlagSet) { + lpefr->bWildcardSearch = true; + lpefr->fuFlags |= SCFIND_REGEXP; // Wildcard search based on RegExpr + 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->bRegExprSearch; - if (IsButtonChecked(hwnd, IDC_FINDREGEXP)) { - if (!bIsFlagSet) { - lpefr->bRegExprSearch = true; - lpefr->fuFlags |= SCFIND_REGEXP; - lpefr->bStateChanged = true; - } - } else { - if (bIsFlagSet) { - lpefr->bRegExprSearch = false; + } else { + if (bIsFlagSet) { + lpefr->bWildcardSearch = false; + if (!(lpefr->bRegExprSearch)) { lpefr->fuFlags &= ~SCFIND_REGEXP; - lpefr->bStateChanged = true; } + lpefr->bStateChanged = true; } + } - if (IsDialogControlEnabled(hwnd, IDC_DOT_MATCH_ALL)) { - 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->bOverlappingFind; + if (IsButtonChecked(hwnd, IDC_FIND_OVERLAPPING)) { + if (!bIsFlagSet) { + lpefr->bOverlappingFind = true; + lpefr->bStateChanged = false; // no effect on state } + } else { + if (bIsFlagSet) { + lpefr->bOverlappingFind = false; + lpefr->bStateChanged = false; // no effect on state + } + } - // force consistency - if (lpefr->bRegExprSearch) { - CheckDlgButton(hwnd, IDC_WILDCARDSEARCH, BST_UNCHECKED); + bIsFlagSet = lpefr->bNoFindWrap; + if (IsButtonChecked(hwnd, IDC_NOWRAP)) { + if (!bIsFlagSet) { + lpefr->bNoFindWrap = true; + lpefr->bStateChanged = true; } - bIsFlagSet = lpefr->bWildcardSearch; - if (IsButtonChecked(hwnd, IDC_WILDCARDSEARCH)) { + } 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 (IsDialogControlEnabled(hwnd, IDC_FINDTRANSFORMBS)) { + bIsFlagSet = lpefr->bTransformBS; + if (IsButtonChecked(hwnd, IDC_FINDTRANSFORMBS)) { if (!bIsFlagSet) { - lpefr->bWildcardSearch = true; - lpefr->fuFlags |= SCFIND_REGEXP; // Wildcard search based on RegExpr + lpefr->bTransformBS = true; lpefr->bStateChanged = true; } } else { if (bIsFlagSet) { - lpefr->bWildcardSearch = false; - if (!(lpefr->bRegExprSearch)) { - lpefr->fuFlags &= ~SCFIND_REGEXP; - } + lpefr->bTransformBS = false; lpefr->bStateChanged = true; } } + } - bIsFlagSet = lpefr->bOverlappingFind; - if (IsButtonChecked(hwnd, IDC_FIND_OVERLAPPING)) { + if (bIsFindDlg) { + bIsFlagSet = lpefr->bFindClose; + if (IsButtonChecked(hwnd, IDC_FINDCLOSE)) { if (!bIsFlagSet) { - lpefr->bOverlappingFind = true; - lpefr->bStateChanged = false; // no effect on state - } - } else { - if (bIsFlagSet) { - lpefr->bOverlappingFind = false; - lpefr->bStateChanged = false; // no effect on state - } - } - - bIsFlagSet = lpefr->bNoFindWrap; - if (IsButtonChecked(hwnd, IDC_NOWRAP)) { - if (!bIsFlagSet) { - lpefr->bNoFindWrap = true; + lpefr->bFindClose = true; lpefr->bStateChanged = true; } } else { if (bIsFlagSet) { - lpefr->bNoFindWrap = false; + lpefr->bFindClose = false; lpefr->bStateChanged = true; } } - - bIsFlagSet = lpefr->bMarkOccurences; - if (IsButtonChecked(hwnd, IDC_ALL_OCCURRENCES)) { + } else { // replace close + bIsFlagSet = lpefr->bReplaceClose; + if (IsButtonChecked(hwnd, IDC_FINDCLOSE)) { if (!bIsFlagSet) { - lpefr->bMarkOccurences = true; + lpefr->bReplaceClose = true; lpefr->bStateChanged = true; } } else { if (bIsFlagSet) { - lpefr->bMarkOccurences = false; + lpefr->bReplaceClose = false; lpefr->bStateChanged = true; } } - - if (IsDialogControlEnabled(hwnd, IDC_FINDTRANSFORMBS)) { - 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; - } - } - } - } // if hwnd + } } } @@ -5895,6 +5893,29 @@ static void _ShowZeroLengthCallTip(DocPos iPosition) } +//============================================================================= +// +// _EnableFRDlgCtrls() +// +static bool _EnableFRDlgCtrls(HWND hwnd) { + + //bool const bEmptyFnd = (ComboBox_GetTextLengthEx(hwnd, IDC_FINDTEXT) == 0 || ComboBox_GetCurSelEx(hwnd, IDC_FINDTEXT) != CB_ERR); + //bool const bEmptyRpl = (ComboBox_GetTextLengthEx(hwnd, IDC_REPLACETEXT) == 0 || ComboBox_GetCurSelEx(hwnd, IDC_REPLACETEXT) != CB_ERR); + bool const bEmptyFnd = ComboBox_GetTextLengthEx(hwnd, IDC_FINDTEXT) == 0; + bool const bEmptyRpl = ComboBox_GetTextLengthEx(hwnd, IDC_REPLACETEXT) == 0; + bool const bEmptySel = !(SciCall_IsSelectionEmpty() || Sci_IsMultiOrRectangleSelection()); + + DialogEnableControl(hwnd, IDOK, !bEmptyFnd); + DialogEnableControl(hwnd, IDC_FINDPREV, !bEmptyFnd); + DialogEnableControl(hwnd, IDC_REPLACE, !bEmptyFnd); + DialogEnableControl(hwnd, IDC_REPLACEALL, !bEmptyFnd); + DialogEnableControl(hwnd, IDC_REPLACEINSEL, !bEmptyFnd && !bEmptySel); + DialogEnableControl(hwnd, IDC_SWAPSTRG, !bEmptyFnd || !bEmptyRpl); + + return !bEmptyFnd; +} + + //============================================================================= // // EditFindReplaceDlgProc() @@ -6339,79 +6360,88 @@ static INT_PTR CALLBACK EditFindReplaceDlgProc(HWND hwnd, UINT umsg, WPARAM wPar case IDC_FINDTEXT: case IDC_REPLACETEXT: { - bool bPatternChanged = false; + bool bFndPatternChanged = s_pEfrDataDlg->bStateChanged; + + switch (HIWORD(wParam)) { + + case CBN_CLOSEUP: { + LONG lSelEnd = 0; + SendDlgItemMessage(hwnd, LOWORD(wParam), CB_GETEDITSEL, 0, (LPARAM)&lSelEnd); + SendDlgItemMessage(hwnd, LOWORD(wParam), CB_SETEDITSEL, 0, MAKELPARAM(lSelEnd, lSelEnd)); + } + break; + + case CBN_EDITUPDATE: + if (SendDlgItemMessage(hwnd, LOWORD(wParam), CB_GETDROPPEDSTATE, 0, 0)) { + //~SendDlgItemMessage(hwnd, LOWORD(wParam), CB_SETCURSEL, (WPARAM)-1, 0); // clear + SendDlgItemMessage(hwnd, LOWORD(wParam), CB_SHOWDROPDOWN, 0, 0); // hide + } + break; + + case CBN_SELCHANGE: { + LRESULT const cursel = SendDlgItemMessage(hwnd, LOWORD(wParam), CB_GETCURSEL, 0, 0); + if (cursel != CB_ERR) { + SendDlgItemMessage(hwnd, LOWORD(wParam), CB_SETCURSEL, (WPARAM)cursel, 0); + } + } + // [fallthrough] + case CBN_SELENDOK: + case CBN_EDITCHANGE: + bFndPatternChanged = (LOWORD(wParam) == IDC_FINDTEXT); + LPSTR const buffer = bFndPatternChanged ? s_pEfrDataDlg->szFind : s_pEfrDataDlg->szReplace; + ComboBox_GetTextW2MB(hwnd, LOWORD(wParam), buffer, FNDRPL_BUFFER); + if (bFndPatternChanged) { + SetFindPatternMB(s_pEfrDataDlg->szFind); + } + break; + + case CBN_KILLFOCUS: + case CBN_SELENDCANCEL: + default: + break; + } + if (Globals.bFindReplCopySelOrClip) { - char* lpszSelection = NULL; + char *lpszSelection = NULL; DocPos const cchSelection = SciCall_GetSelText(NULL); if ((cchSelection > 1) && (LOWORD(wParam) != IDC_REPLACETEXT)) { lpszSelection = AllocMem(cchSelection + 1, HEAP_ZERO_MEMORY); SciCall_GetSelText(lpszSelection); } else { // (cchSelection <= 1) // nothing is selected in the editor: - // if first time you bring up find/replace dialog, - // use most recent search pattern to find box lpszSelection = AllocMem(FNDRPL_BUFFER, HEAP_ZERO_MEMORY); if (lpszSelection) { + // if first time you bring up find/replace dialog, + // use most recent search pattern to find box + // in case of no history: paste clipboard _EditGetFindStrg(Globals.hwndEdit, s_pEfrDataDlg, lpszSelection, SizeOfMem(lpszSelection)); } } - if (lpszSelection) { ComboBox_SetTextMB2W(hwnd, IDC_FINDTEXT, lpszSelection); FreeMem(lpszSelection); lpszSelection = NULL; - bPatternChanged = true; + bFndPatternChanged = true; } - s_InitialTopLine = -1; // reset + s_InitialTopLine = -1; // reset s_anyMatch = NO_MATCH; Globals.bFindReplCopySelOrClip = false; } // Globals.bFindReplCopySelOrClip - switch (HIWORD(wParam)) { - case CBN_CLOSEUP: - case CBN_EDITCHANGE: - bPatternChanged = (LOWORD(wParam) == IDC_FINDTEXT); - break; - default: - break; + // ------------------------ + if (!bFndPatternChanged) { + break; // return } + // ------------------------ - if (!bPatternChanged) { - break; - } - - bool const bEmptyFnd = (ComboBox_GetTextLenth(hwnd, IDC_FINDTEXT) || - CB_ERR != SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_GETCURSEL, 0, 0)); - - bool const bEmptyRpl = (ComboBox_GetTextLenth(hwnd, IDC_REPLACETEXT) || - CB_ERR != SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_GETCURSEL, 0, 0)); - - bool const bEmptySel = !(SciCall_IsSelectionEmpty() || Sci_IsMultiOrRectangleSelection()); - - DialogEnableControl(hwnd, IDOK, bEmptyFnd); - DialogEnableControl(hwnd, IDC_FINDPREV, bEmptyFnd); - DialogEnableControl(hwnd, IDC_REPLACE, bEmptyFnd); - DialogEnableControl(hwnd, IDC_REPLACEALL, bEmptyFnd); - DialogEnableControl(hwnd, IDC_REPLACEINSEL, bEmptyFnd && bEmptySel); - DialogEnableControl(hwnd, IDC_SWAPSTRG, bEmptyFnd || bEmptyRpl); - - if (!bEmptyFnd) { + if (_EnableFRDlgCtrls(hwnd)) { s_anyMatch = NO_MATCH; EditSetSelectionEx(s_InitialAnchorPos, s_InitialCaretPos, -1, -1); } - if (HIWORD(wParam) == CBN_CLOSEUP) { - LONG lSelEnd = 0; - SendDlgItemMessage(hwnd, LOWORD(wParam), CB_GETEDITSEL, 0, (LPARAM)&lSelEnd); - SendDlgItemMessage(hwnd, LOWORD(wParam), CB_SETEDITSEL, 0, MAKELPARAM(lSelEnd, lSelEnd)); - } - _SetSearchFlags(hwnd, s_pEfrDataDlg); - - if (StrIsEmptyA(s_pEfrDataDlg->szFind)) { - SetFindPattern(L""); - } + SetFindPatternMB(s_pEfrDataDlg->szFind); DocPos start = s_InitialSearchStart; DocPos end = Sci_GetDocEndPosition(); @@ -6581,16 +6611,7 @@ static INT_PTR CALLBACK EditFindReplaceDlgProc(HWND hwnd, UINT umsg, WPARAM wPar CopyMemory(&s_efrSave, s_pEfrDataDlg, sizeof(EDITFINDREPLACE)); } - if (!s_bSwitchedFindReplace && - !ComboBox_GetTextW2MB(hwnd, IDC_FINDTEXT, s_pEfrDataDlg->szFind, COUNTOF(s_pEfrDataDlg->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 (!ComboBox_GetTextW2MB(hwnd, IDC_REPLACETEXT, s_pEfrDataDlg->szReplace, COUNTOF(s_pEfrDataDlg->szReplace))) { - DialogEnableControl(hwnd, IDC_SWAPSTRG, false); - } + if (!s_bSwitchedFindReplace && !_EnableFRDlgCtrls(hwnd)) { return true; } diff --git a/src/Notepad3.c b/src/Notepad3.c index 7904609c6..2845ec8ab 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -1177,7 +1177,7 @@ void SetFindPattern(LPCWSTR wchFindPattern) // void SetFindPatternMB(LPCSTR chFindPattern) { - MultiByteToWideCharEx(Encoding_SciCP, 0, chFindPattern, -1, sCurrentFindPattern, COUNTOF(sCurrentFindPattern)); + MultiByteToWideChar(Encoding_SciCP, 0, chFindPattern, -1, sCurrentFindPattern, (int)COUNTOF(sCurrentFindPattern)); } diff --git a/src/Version.h b/src/Version.h index b886d295b..c04ab23c3 100644 --- a/src/Version.h +++ b/src/Version.h @@ -76,7 +76,11 @@ #undef VER_CPL #if defined(_MSC_VER) - #if (_MSC_VER == 1928) + #if (_MSC_VER == 1929) + #if (_MSC_FULL_VER >= 192930037) + #define VER_CPL MS Visual C++ 2019 v16.10.0 + #endif + #elif (_MSC_VER == 1928) #if (_MSC_FULL_VER >= 192829915) #define VER_CPL MS Visual C++ 2019 v16.9.(5-6) #elif (_MSC_FULL_VER >= 192829914) diff --git a/src/VersionEx.h b/src/VersionEx.h index f00c75c0f..0c24b5b0f 100644 --- a/src/VersionEx.h +++ b/src/VersionEx.h @@ -8,7 +8,7 @@ #define SAPPNAME "Notepad3" #define VERSION_MAJOR 5 #define VERSION_MINOR 21 -#define VERSION_REV 525 +#define VERSION_REV 527 #define VERSION_BUILD 1 #define SCINTILLA_VER 502 #define LEXILLA_VER 502