From d73b6cedf2482b68afc625aad2fae6451d47763d Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Mon, 5 Sep 2022 23:21:27 +0700 Subject: [PATCH] [NOTEPAD] Improve UTF-8 encoding support and improve status bar (#4649) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add write support for UTF-8 without BOM. - Add "UTF-8 with BOM" encoding to the "Save As" dialog. - Show line endings and encoding on the status bar (like Notepad in Windows 10). - Remove ignored WS_EX_STATICEDGE - Add grip to the status window. Co-authored-by: Hermès BÉLUSCA - MAÏTO --- base/applications/notepad/dialog.c | 87 +++++++++++++++++++++++-- base/applications/notepad/dialog.h | 1 + base/applications/notepad/lang/bg-BG.rc | 1 + base/applications/notepad/lang/cs-CZ.rc | 1 + base/applications/notepad/lang/da-DK.rc | 1 + base/applications/notepad/lang/de-DE.rc | 1 + base/applications/notepad/lang/el-GR.rc | 1 + base/applications/notepad/lang/en-US.rc | 1 + base/applications/notepad/lang/es-ES.rc | 1 + base/applications/notepad/lang/et-EE.rc | 1 + base/applications/notepad/lang/eu-ES.rc | 1 + base/applications/notepad/lang/fi-FI.rc | 1 + base/applications/notepad/lang/fr-FR.rc | 1 + base/applications/notepad/lang/he-IL.rc | 1 + base/applications/notepad/lang/hi-IN.rc | 1 + base/applications/notepad/lang/hr-HR.rc | 1 + base/applications/notepad/lang/hu-HU.rc | 1 + base/applications/notepad/lang/hy-AM.rc | 1 + base/applications/notepad/lang/id-ID.rc | 1 + base/applications/notepad/lang/it-IT.rc | 1 + base/applications/notepad/lang/ja-JP.rc | 1 + base/applications/notepad/lang/lt-LT.rc | 1 + base/applications/notepad/lang/ms-MY.rc | 1 + base/applications/notepad/lang/nl-NL.rc | 1 + base/applications/notepad/lang/no-NO.rc | 1 + base/applications/notepad/lang/pl-PL.rc | 1 + base/applications/notepad/lang/pt-BR.rc | 1 + base/applications/notepad/lang/pt-PT.rc | 1 + base/applications/notepad/lang/ro-RO.rc | 1 + base/applications/notepad/lang/ru-RU.rc | 1 + base/applications/notepad/lang/sk-SK.rc | 1 + base/applications/notepad/lang/sl-SI.rc | 1 + base/applications/notepad/lang/sq-AL.rc | 1 + base/applications/notepad/lang/sv-SE.rc | 1 + base/applications/notepad/lang/th-TH.rc | 1 + base/applications/notepad/lang/tr-TR.rc | 1 + base/applications/notepad/lang/uk-UA.rc | 1 + base/applications/notepad/lang/uz-UZ.rc | 1 + base/applications/notepad/lang/zh-CN.rc | 1 + base/applications/notepad/lang/zh-HK.rc | 1 + base/applications/notepad/lang/zh-TW.rc | 1 + base/applications/notepad/main.c | 9 ++- base/applications/notepad/main.h | 3 +- base/applications/notepad/notepad_res.h | 19 +++--- base/applications/notepad/text.c | 20 +++--- 45 files changed, 152 insertions(+), 26 deletions(-) diff --git a/base/applications/notepad/dialog.c b/base/applications/notepad/dialog.c index 1b10084e99b..6e45d05798e 100644 --- a/base/applications/notepad/dialog.c +++ b/base/applications/notepad/dialog.c @@ -33,6 +33,27 @@ static const TCHAR empty_str[] = _T(""); static const TCHAR szDefaultExt[] = _T("txt"); static const TCHAR txt_files[] = _T("*.txt"); +/* Status bar parts index */ +#define SBPART_CURPOS 0 +#define SBPART_EOLN 1 +#define SBPART_ENCODING 2 + +/* Line endings - string resource ID mapping table */ +static UINT EolnToStrId[] = { + STRING_CRLF, + STRING_LF, + STRING_CR +}; + +/* Encoding - string resource ID mapping table */ +static UINT EncToStrId[] = { + STRING_ANSI, + STRING_UNICODE, + STRING_UNICODE_BE, + STRING_UTF8, + STRING_UTF8_BOM +}; + static UINT_PTR CALLBACK DIALOG_PAGESETUP_Hook(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); VOID ShowLastError(VOID) @@ -104,6 +125,45 @@ void UpdateWindowCaption(BOOL clearModifyAlert) SetWindowText(Globals.hMainWnd, szCaption); } +VOID DIALOG_StatusBarAlignParts(VOID) +{ + static const int defaultWidths[] = {120, 120, 120}; + RECT rcStatusBar; + int parts[3]; + + GetClientRect(Globals.hStatusBar, &rcStatusBar); + + parts[0] = rcStatusBar.right - (defaultWidths[1] + defaultWidths[2]); + parts[1] = rcStatusBar.right - defaultWidths[2]; + parts[2] = -1; // the right edge of the status bar + + parts[0] = max(parts[0], defaultWidths[0]); + parts[1] = max(parts[1], defaultWidths[0] + defaultWidths[1]); + + SendMessageW(Globals.hStatusBar, SB_SETPARTS, (WPARAM)ARRAY_SIZE(parts), (LPARAM)parts); +} + +static VOID DIALOG_StatusBarUpdateLineEndings(VOID) +{ + WCHAR szText[128]; + + LoadStringW(Globals.hInstance, EolnToStrId[Globals.iEoln], szText, ARRAY_SIZE(szText)); + + SendMessageW(Globals.hStatusBar, SB_SETTEXTW, SBPART_EOLN, (LPARAM)szText); +} + +static VOID DIALOG_StatusBarUpdateEncoding(VOID) +{ + WCHAR szText[128] = L""; + + if (Globals.encFile != ENCODING_AUTO) + { + LoadStringW(Globals.hInstance, EncToStrId[Globals.encFile], szText, ARRAY_SIZE(szText)); + } + + SendMessageW(Globals.hStatusBar, SB_SETTEXTW, SBPART_ENCODING, (LPARAM)szText); +} + int DIALOG_StringMsgBox(HWND hParent, int formatId, LPCTSTR szString, DWORD dwFlags) { TCHAR szMessage[MAX_STRING_LEN]; @@ -403,6 +463,11 @@ VOID DoOpenFile(LPCTSTR szFileName) SetFileName(szFileName); UpdateWindowCaption(TRUE); NOTEPAD_EnableSearchMenu(); + + /* Update line endings and encoding on the status bar */ + DIALOG_StatusBarUpdateLineEndings(); + DIALOG_StatusBarUpdateEncoding(); + done: if (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); @@ -497,6 +562,9 @@ DIALOG_FileSaveAs_Hook(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) LoadString(Globals.hInstance, STRING_UTF8, szText, ARRAY_SIZE(szText)); SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText); + LoadString(Globals.hInstance, STRING_UTF8_BOM, szText, ARRAY_SIZE(szText)); + SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText); + SendMessage(hCombo, CB_SETCURSEL, Globals.encFile, 0); hCombo = GetDlgItem(hDlg, ID_EOLN); @@ -562,6 +630,11 @@ BOOL DIALOG_FileSaveAs(VOID) if (DoSaveFile()) { UpdateWindowCaption(TRUE); + + /* Update line endings and encoding on the status bar */ + DIALOG_StatusBarUpdateLineEndings(); + DIALOG_StatusBarUpdateEncoding(); + return TRUE; } else @@ -852,7 +925,7 @@ VOID DoCreateStatusBar(VOID) if (Globals.hStatusBar == NULL) { /* Try to create the status bar */ - Globals.hStatusBar = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_EX_STATICEDGE, + Globals.hStatusBar = CreateStatusWindow(WS_CHILD | WS_VISIBLE | CCS_BOTTOM | SBARS_SIZEGRIP, NULL, Globals.hMainWnd, CMD_STATUSBAR_WND_ID); @@ -865,9 +938,6 @@ VOID DoCreateStatusBar(VOID) /* Load the string for formatting column/row text output */ LoadString(Globals.hInstance, STRING_LINE_COLUMN, Globals.szStatusBarLineCol, MAX_PATH - 1); - - /* Set the status bar for single-text output */ - SendMessage(Globals.hStatusBar, SB_SIMPLE, (WPARAM)TRUE, (LPARAM)0); } /* Set status bar visiblity according to the settings. */ @@ -916,8 +986,15 @@ VOID DoCreateStatusBar(VOID) TRUE); } + /* Set the status bar for multiple-text output */ + DIALOG_StatusBarAlignParts(); + /* Update content with current row/column text */ DIALOG_StatusBarUpdateCaretPos(); + + /* Update line endings and encoding on the status bar */ + DIALOG_StatusBarUpdateLineEndings(); + DIALOG_StatusBarUpdateEncoding(); } VOID DoCreateEditWindow(VOID) @@ -1195,7 +1272,7 @@ VOID DIALOG_StatusBarUpdateCaretPos(VOID) col = dwStart - SendMessage(Globals.hEdit, EM_LINEINDEX, (WPARAM)line, 0); _stprintf(buff, Globals.szStatusBarLineCol, line + 1, col + 1); - SendMessage(Globals.hStatusBar, SB_SETTEXT, SB_SIMPLEID, (LPARAM)buff); + SendMessage(Globals.hStatusBar, SB_SETTEXT, SBPART_CURPOS, (LPARAM)buff); } VOID DIALOG_ViewStatusBar(VOID) diff --git a/base/applications/notepad/dialog.h b/base/applications/notepad/dialog.h index 98104dcc6e5..3d5572cfad7 100644 --- a/base/applications/notepad/dialog.h +++ b/base/applications/notepad/dialog.h @@ -46,6 +46,7 @@ VOID DIALOG_GoTo(VOID); VOID DIALOG_SelectFont(VOID); VOID DIALOG_ViewStatusBar(VOID); +VOID DIALOG_StatusBarAlignParts(VOID); VOID DIALOG_StatusBarUpdateCaretPos(VOID); VOID DIALOG_HelpContents(VOID); diff --git a/base/applications/notepad/lang/bg-BG.rc b/base/applications/notepad/lang/bg-BG.rc index d17e24ab300..5b900b511f3 100644 --- a/base/applications/notepad/lang/bg-BG.rc +++ b/base/applications/notepad/lang/bg-BG.rc @@ -160,6 +160,7 @@ BEGIN STRING_UNICODE "Уникод" STRING_UNICODE_BE "Уникод (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Уьиндоуьс (CR + LF)" STRING_LF "Юникс (LF)" STRING_CR "Мак (CR)" diff --git a/base/applications/notepad/lang/cs-CZ.rc b/base/applications/notepad/lang/cs-CZ.rc index 1338063e8e9..36fd1d28b52 100644 --- a/base/applications/notepad/lang/cs-CZ.rc +++ b/base/applications/notepad/lang/cs-CZ.rc @@ -161,6 +161,7 @@ paměti." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/da-DK.rc b/base/applications/notepad/lang/da-DK.rc index f24b93562cb..8ab2d8f4c07 100644 --- a/base/applications/notepad/lang/da-DK.rc +++ b/base/applications/notepad/lang/da-DK.rc @@ -161,6 +161,7 @@ hukommelse, og prøv så igen." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/de-DE.rc b/base/applications/notepad/lang/de-DE.rc index 12304456c6f..c1c491f3e03 100644 --- a/base/applications/notepad/lang/de-DE.rc +++ b/base/applications/notepad/lang/de-DE.rc @@ -162,6 +162,7 @@ um diese Funktion\nabzuschließen. Beenden Sie eine oder mehrere \ STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (Big-Endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/el-GR.rc b/base/applications/notepad/lang/el-GR.rc index c27cb97636a..32e23f3f00a 100644 --- a/base/applications/notepad/lang/el-GR.rc +++ b/base/applications/notepad/lang/el-GR.rc @@ -161,6 +161,7 @@ BEGIN STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/en-US.rc b/base/applications/notepad/lang/en-US.rc index 6f284bdbf21..242fb18c426 100644 --- a/base/applications/notepad/lang/en-US.rc +++ b/base/applications/notepad/lang/en-US.rc @@ -160,6 +160,7 @@ task.\nClose one or more applications to increase the amount of\nfree memory." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/es-ES.rc b/base/applications/notepad/lang/es-ES.rc index a22083ca956..3700fe740cd 100644 --- a/base/applications/notepad/lang/es-ES.rc +++ b/base/applications/notepad/lang/es-ES.rc @@ -163,6 +163,7 @@ aumentar la cantidad\nde memoria libre." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/et-EE.rc b/base/applications/notepad/lang/et-EE.rc index 3df808c417e..f5b3afa982b 100644 --- a/base/applications/notepad/lang/et-EE.rc +++ b/base/applications/notepad/lang/et-EE.rc @@ -168,6 +168,7 @@ käsu lõpetamiseks.\nSulge üks või enam rakendust, et suurendada\nvaba mälu STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/eu-ES.rc b/base/applications/notepad/lang/eu-ES.rc index 0923ac47c4d..bb082e9fbb6 100644 --- a/base/applications/notepad/lang/eu-ES.rc +++ b/base/applications/notepad/lang/eu-ES.rc @@ -161,6 +161,7 @@ memoria librearen\nkopurua handitzeko." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/fi-FI.rc b/base/applications/notepad/lang/fi-FI.rc index a12be32822e..d13c7ce9337 100644 --- a/base/applications/notepad/lang/fi-FI.rc +++ b/base/applications/notepad/lang/fi-FI.rc @@ -161,6 +161,7 @@ muistia." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/fr-FR.rc b/base/applications/notepad/lang/fr-FR.rc index 29bac1aa9c9..6fba3e8d9c0 100644 --- a/base/applications/notepad/lang/fr-FR.rc +++ b/base/applications/notepad/lang/fr-FR.rc @@ -161,6 +161,7 @@ de la mémoire." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/he-IL.rc b/base/applications/notepad/lang/he-IL.rc index 63c3a2c2f46..f4929cf8d5f 100644 --- a/base/applications/notepad/lang/he-IL.rc +++ b/base/applications/notepad/lang/he-IL.rc @@ -163,6 +163,7 @@ task.\nClose one or more applications to increase the amount of\nfree memory." STRING_UNICODE "יוניקוד" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "חלונות (CR + LF)" STRING_LF "יוניקס (LF)" STRING_CR "מקינטוש (CR)" diff --git a/base/applications/notepad/lang/hi-IN.rc b/base/applications/notepad/lang/hi-IN.rc index abb0c2810fd..24ecb4b0094 100644 --- a/base/applications/notepad/lang/hi-IN.rc +++ b/base/applications/notepad/lang/hi-IN.rc @@ -167,6 +167,7 @@ BEGIN STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/hr-HR.rc b/base/applications/notepad/lang/hr-HR.rc index fa683dd091d..92eeafd4af5 100644 --- a/base/applications/notepad/lang/hr-HR.rc +++ b/base/applications/notepad/lang/hr-HR.rc @@ -167,6 +167,7 @@ zadatak.\nZatvorite jednu ili više aplikacija da povećate\nslobodnu memoriju." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/hu-HU.rc b/base/applications/notepad/lang/hu-HU.rc index 48d1086851f..e23208079ff 100644 --- a/base/applications/notepad/lang/hu-HU.rc +++ b/base/applications/notepad/lang/hu-HU.rc @@ -161,6 +161,7 @@ Szeretné menteni a változásokat?" STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/hy-AM.rc b/base/applications/notepad/lang/hy-AM.rc index 7c82d538f26..d14af947fd7 100644 --- a/base/applications/notepad/lang/hy-AM.rc +++ b/base/applications/notepad/lang/hy-AM.rc @@ -160,6 +160,7 @@ Would you like to save the changes ?" STRING_UNICODE "Յունիկոդ" STRING_UNICODE_BE "Յունիկոդ (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Պատւոհաններ (CR + LF)" STRING_LF "Յունիքս (LF)" STRING_CR "Մակինտոշ (CR)" diff --git a/base/applications/notepad/lang/id-ID.rc b/base/applications/notepad/lang/id-ID.rc index 32f002e078a..594ddac068d 100644 --- a/base/applications/notepad/lang/id-ID.rc +++ b/base/applications/notepad/lang/id-ID.rc @@ -161,6 +161,7 @@ bebas." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/it-IT.rc b/base/applications/notepad/lang/it-IT.rc index b239f11b7e8..d06b07dceb9 100644 --- a/base/applications/notepad/lang/it-IT.rc +++ b/base/applications/notepad/lang/it-IT.rc @@ -161,6 +161,7 @@ di memoria libera." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/ja-JP.rc b/base/applications/notepad/lang/ja-JP.rc index ad1359f9aca..5b43cd0352e 100644 --- a/base/applications/notepad/lang/ja-JP.rc +++ b/base/applications/notepad/lang/ja-JP.rc @@ -161,6 +161,7 @@ BEGIN STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/lt-LT.rc b/base/applications/notepad/lang/lt-LT.rc index 494161c1eb3..040a66a6755 100644 --- a/base/applications/notepad/lang/lt-LT.rc +++ b/base/applications/notepad/lang/lt-LT.rc @@ -160,6 +160,7 @@ Ar norite išsaugoti pakeitimus?" STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/ms-MY.rc b/base/applications/notepad/lang/ms-MY.rc index 26787eeb4ef..9674fdef67d 100644 --- a/base/applications/notepad/lang/ms-MY.rc +++ b/base/applications/notepad/lang/ms-MY.rc @@ -162,6 +162,7 @@ tugas ini.\nTutup satu atau lebih aplikasi untuk menambah jumlah\ningatan kosong STRING_UNICODE "Unikod" STRING_UNICODE_BE "Unikod (endian besar)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/nl-NL.rc b/base/applications/notepad/lang/nl-NL.rc index d6c30f26403..a0ffe227096 100644 --- a/base/applications/notepad/lang/nl-NL.rc +++ b/base/applications/notepad/lang/nl-NL.rc @@ -160,6 +160,7 @@ Wilt u de wijzigingen opslaan?" STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/no-NO.rc b/base/applications/notepad/lang/no-NO.rc index ae83e8a270c..b58fdf6b475 100644 --- a/base/applications/notepad/lang/no-NO.rc +++ b/base/applications/notepad/lang/no-NO.rc @@ -161,6 +161,7 @@ minne." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/pl-PL.rc b/base/applications/notepad/lang/pl-PL.rc index 70c29377898..708ead6edfb 100644 --- a/base/applications/notepad/lang/pl-PL.rc +++ b/base/applications/notepad/lang/pl-PL.rc @@ -155,6 +155,7 @@ BEGIN STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/pt-BR.rc b/base/applications/notepad/lang/pt-BR.rc index 1ba2f1788b5..08f8714b570 100644 --- a/base/applications/notepad/lang/pt-BR.rc +++ b/base/applications/notepad/lang/pt-BR.rc @@ -160,6 +160,7 @@ tarefa.\nFeche uma ou mais aplicações para aumentar a quantidade de memória l STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/pt-PT.rc b/base/applications/notepad/lang/pt-PT.rc index 5e597417040..857c587bcb2 100644 --- a/base/applications/notepad/lang/pt-PT.rc +++ b/base/applications/notepad/lang/pt-PT.rc @@ -160,6 +160,7 @@ tarefa.\nFeche uma ou mais aplicações para aumentar a quantidade de memória l STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/ro-RO.rc b/base/applications/notepad/lang/ro-RO.rc index a032dc0d67e..cfe4487fe18 100644 --- a/base/applications/notepad/lang/ro-RO.rc +++ b/base/applications/notepad/lang/ro-RO.rc @@ -165,6 +165,7 @@ Păstrați modificările aduse?" STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/ru-RU.rc b/base/applications/notepad/lang/ru-RU.rc index 4ebb9037727..c6c729b5fc9 100644 --- a/base/applications/notepad/lang/ru-RU.rc +++ b/base/applications/notepad/lang/ru-RU.rc @@ -160,6 +160,7 @@ BEGIN STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (Big Endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Macintosh (CR)" diff --git a/base/applications/notepad/lang/sk-SK.rc b/base/applications/notepad/lang/sk-SK.rc index 730ac82e4b9..7a272f3fb41 100644 --- a/base/applications/notepad/lang/sk-SK.rc +++ b/base/applications/notepad/lang/sk-SK.rc @@ -168,6 +168,7 @@ alebo viac aplikácií, aby sa uvoľnila pamäť a skúste to znova." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (veľký indián)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/sl-SI.rc b/base/applications/notepad/lang/sl-SI.rc index a694e53c068..5dacaf8b8a9 100644 --- a/base/applications/notepad/lang/sl-SI.rc +++ b/base/applications/notepad/lang/sl-SI.rc @@ -160,6 +160,7 @@ operacijo.\nÈe ga želite sprostiti, konèajte enega ali veè programov in posk STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/sq-AL.rc b/base/applications/notepad/lang/sq-AL.rc index 542b5b93936..82c55454577 100644 --- a/base/applications/notepad/lang/sq-AL.rc +++ b/base/applications/notepad/lang/sq-AL.rc @@ -164,6 +164,7 @@ detyrë.\nMbyll nje ose me shume programe te rrisesh shumën e\nmemories." STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/sv-SE.rc b/base/applications/notepad/lang/sv-SE.rc index 6536306b1e7..49160f0fc62 100644 --- a/base/applications/notepad/lang/sv-SE.rc +++ b/base/applications/notepad/lang/sv-SE.rc @@ -160,6 +160,7 @@ den här åtgärden.\nAvsluta ett eller flera program för att frigöra mer minn STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/th-TH.rc b/base/applications/notepad/lang/th-TH.rc index ed6277314a8..ac24b8d2d5e 100644 --- a/base/applications/notepad/lang/th-TH.rc +++ b/base/applications/notepad/lang/th-TH.rc @@ -155,6 +155,7 @@ BEGIN STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 (มี BOM)" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/tr-TR.rc b/base/applications/notepad/lang/tr-TR.rc index 391b0e70d83..5a862b887c0 100644 --- a/base/applications/notepad/lang/tr-TR.rc +++ b/base/applications/notepad/lang/tr-TR.rc @@ -158,6 +158,7 @@ BEGIN STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (Büyük Sonlu)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/uk-UA.rc b/base/applications/notepad/lang/uk-UA.rc index 8c39417b9ec..a46758205ab 100644 --- a/base/applications/notepad/lang/uk-UA.rc +++ b/base/applications/notepad/lang/uk-UA.rc @@ -160,6 +160,7 @@ BEGIN STRING_UNICODE "Юнікод" STRING_UNICODE_BE "Юнікод (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/uz-UZ.rc b/base/applications/notepad/lang/uz-UZ.rc index e6857a5f546..abc5f6088ce 100644 --- a/base/applications/notepad/lang/uz-UZ.rc +++ b/base/applications/notepad/lang/uz-UZ.rc @@ -160,6 +160,7 @@ O‘zgarishlarni saqlashni istaysizmi?" STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Macintosh (CR)" diff --git a/base/applications/notepad/lang/zh-CN.rc b/base/applications/notepad/lang/zh-CN.rc index de8877d9f17..5b02a2fd733 100644 --- a/base/applications/notepad/lang/zh-CN.rc +++ b/base/applications/notepad/lang/zh-CN.rc @@ -168,6 +168,7 @@ BEGIN STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode(大端)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows(CR + LF)" STRING_LF "Unix(LF)" STRING_CR "Mac(CR)" diff --git a/base/applications/notepad/lang/zh-HK.rc b/base/applications/notepad/lang/zh-HK.rc index 6a47644ff58..c5e455fa877 100644 --- a/base/applications/notepad/lang/zh-HK.rc +++ b/base/applications/notepad/lang/zh-HK.rc @@ -168,6 +168,7 @@ BEGIN STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode(大端序)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/lang/zh-TW.rc b/base/applications/notepad/lang/zh-TW.rc index db550b17012..2cae1d75fd9 100644 --- a/base/applications/notepad/lang/zh-TW.rc +++ b/base/applications/notepad/lang/zh-TW.rc @@ -168,6 +168,7 @@ BEGIN STRING_UNICODE "Unicode" STRING_UNICODE_BE "Unicode (big endian)" STRING_UTF8 "UTF-8" + STRING_UTF8_BOM "UTF-8 with BOM" STRING_CRLF "Windows (CR + LF)" STRING_LF "Unix (LF)" STRING_CR "Mac (CR)" diff --git a/base/applications/notepad/main.c b/base/applications/notepad/main.c index 3fed529fb3e..42bf2493911 100644 --- a/base/applications/notepad/main.c +++ b/base/applications/notepad/main.c @@ -427,8 +427,13 @@ NOTEPAD_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) LOWORD(wParam), SWP_NOZORDER); - if (hdwp != NULL) - EndDeferWindowPos(hdwp); + if (hdwp == NULL) + break; + + EndDeferWindowPos(hdwp); + + /* Align status bar parts, only if the status bar resize operation succeeds */ + DIALOG_StatusBarAlignParts(); } else SetWindowPos(Globals.hEdit, diff --git a/base/applications/notepad/main.h b/base/applications/notepad/main.h index 349be218118..ce7fc850877 100644 --- a/base/applications/notepad/main.h +++ b/base/applications/notepad/main.h @@ -40,7 +40,8 @@ typedef enum ENCODING_ANSI = 0, ENCODING_UTF16LE = 1, ENCODING_UTF16BE = 2, - ENCODING_UTF8 = 3 + ENCODING_UTF8 = 3, + ENCODING_UTF8BOM = 4 } ENCODING; // #define MIN_ENCODING 0 diff --git a/base/applications/notepad/notepad_res.h b/base/applications/notepad/notepad_res.h index b53ff22cb57..7b463383dc8 100644 --- a/base/applications/notepad/notepad_res.h +++ b/base/applications/notepad/notepad_res.h @@ -88,17 +88,18 @@ #define STRING_OUT_OF_MEMORY 0x17C #define STRING_CANNOTFIND 0x17D -#define STRING_ANSI 0x17E -#define STRING_UNICODE 0x17F -#define STRING_UNICODE_BE 0x180 -#define STRING_UTF8 0x181 +#define STRING_ANSI 0x180 +#define STRING_UNICODE 0x181 +#define STRING_UNICODE_BE 0x182 +#define STRING_UTF8 0x183 +#define STRING_UTF8_BOM 0x184 -#define STRING_CRLF 0x182 -#define STRING_LF 0x183 -#define STRING_CR 0x184 +#define STRING_CRLF 0x185 +#define STRING_LF 0x186 +#define STRING_CR 0x187 -#define STRING_LINE_COLUMN 0x186 -#define STRING_PRINTERROR 0x187 +#define STRING_LINE_COLUMN 0x188 +#define STRING_PRINTERROR 0x189 #define STRING_TEXT_DOCUMENT 0x200 diff --git a/base/applications/notepad/text.c b/base/applications/notepad/text.c index 0afdde89b6c..6a83a89d64f 100644 --- a/base/applications/notepad/text.c +++ b/base/applications/notepad/text.c @@ -140,7 +140,7 @@ ReadText(HANDLE hFile, LPWSTR *ppszText, DWORD *pdwTextLen, ENCODING *pencFile, } else if ((dwSize >= 3) && (pBytes[0] == 0xEF) && (pBytes[1] == 0xBB) && (pBytes[2] == 0xBF)) { - encFile = ENCODING_UTF8; + encFile = ENCODING_UTF8BOM; dwPos += 3; } else @@ -166,10 +166,11 @@ ReadText(HANDLE hFile, LPWSTR *ppszText, DWORD *pdwTextLen, ENCODING *pencFile, case ENCODING_ANSI: case ENCODING_UTF8: - if (encFile == ENCODING_ANSI) - iCodePage = CP_ACP; - else if (encFile == ENCODING_UTF8) + case ENCODING_UTF8BOM: + if (encFile == ENCODING_UTF8 || encFile == ENCODING_UTF8BOM) iCodePage = CP_UTF8; + else + iCodePage = CP_ACP; if ((dwSize - dwPos) > 0) { @@ -312,10 +313,11 @@ static BOOL WriteEncodedText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, ENC case ENCODING_ANSI: case ENCODING_UTF8: - if (encFile == ENCODING_ANSI) - iCodePage = CP_ACP; - else if (encFile == ENCODING_UTF8) + case ENCODING_UTF8BOM: + if (encFile == ENCODING_UTF8 || encFile == ENCODING_UTF8BOM) iCodePage = CP_UTF8; + else + iCodePage = CP_ACP; iRequiredBytes = WideCharToMultiByte(iCodePage, 0, &pszText[dwPos], dwTextLen - dwPos, NULL, 0, NULL, NULL); if (iRequiredBytes <= 0) @@ -371,8 +373,8 @@ BOOL WriteText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, ENCODING encFile, LPCWSTR pszLF = L"\n"; DWORD dwPos, dwNext; - /* Write the proper byte order marks if not ANSI */ - if (encFile != ENCODING_ANSI) + /* Write the proper byte order marks if not ANSI or UTF-8 without BOM */ + if (encFile != ENCODING_ANSI && encFile != ENCODING_UTF8) { wcBom = 0xFEFF; if (!WriteEncodedText(hFile, &wcBom, 1, encFile))