diff --git a/Versions/build.txt b/Versions/build.txt index 0e1b3bc63..4ef9b1f0d 100644 --- a/Versions/build.txt +++ b/Versions/build.txt @@ -1 +1 @@ -1627 +1628 diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf index d4080031a..349a605bb 100644 --- a/res/Notepad3.exe.manifest.conf +++ b/res/Notepad3.exe.manifest.conf @@ -3,7 +3,7 @@ Notepad3 XpErImEnTaL diff --git a/src/Edit.c b/src/Edit.c index 61c57814b..7bc13e0af 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -1042,7 +1042,6 @@ bool EditLoadFile( - /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // UCHARDET @@ -1057,20 +1056,24 @@ bool EditLoadFile( else { StringCchCat(szAdditionalTitleInfo, ADDTITLEINFO_BUF_LEN, (iAnalyzedEncoding == CPI_ASCII_7BIT) ? L"ASCII" : L""); } - StringCchPrintf((LPWSTR)wchOrigUCHARDET, 128, L"' Conf=%4.2f%%", confidence); + StringCchPrintf((LPWSTR)wchOrigUCHARDET, 128, L"' Conf=%3.0f%%", confidence * 100.0f); StringCchCat(szAdditionalTitleInfo, ADDTITLEINFO_BUF_LEN, (LPWSTR)wchOrigUCHARDET); StringCchCat(szAdditionalTitleInfo, ADDTITLEINFO_BUF_LEN, L" CED='"); if (iAnalyzedEncoding_CED >= 0) { - //GetLngString(g_Encodings[iAnalyzedEncoding_CED].idsName, (LPWSTR)wchOrigUCHARDET, 128); - StringCchCat(szAdditionalTitleInfo, ADDTITLEINFO_BUF_LEN, g_Encodings[iAnalyzedEncoding_CED].wchLabel); + StringCchCat(szAdditionalTitleInfo, ADDTITLEINFO_BUF_LEN, Encoding_GetLabel(iAnalyzedEncoding_CED)); } else { - StringCchCat(szAdditionalTitleInfo, ADDTITLEINFO_BUF_LEN, (iAnalyzedEncoding == CPI_ASCII_7BIT) ? L"ASCII" : L""); + StringCchCat(szAdditionalTitleInfo, ADDTITLEINFO_BUF_LEN, (iAnalyzedEncoding_CED == CPI_ASCII_7BIT) ? L"ascii" : L""); + } + if ((iAnalyzedEncoding_CED >= 0) || (iAnalyzedEncoding_CED == CPI_ASCII_7BIT)) { + StringCchPrintf((LPWSTR)wchOrigUCHARDET, 128, L"' (%s).", bIsReliable ? L"reliable" : L"NOT reliable"); + StringCchCat(szAdditionalTitleInfo, ADDTITLEINFO_BUF_LEN, (LPWSTR)wchOrigUCHARDET); + } + else { + StringCchCat(szAdditionalTitleInfo, ADDTITLEINFO_BUF_LEN, L"'"); } - StringCchPrintf((LPWSTR)wchOrigUCHARDET, 128, L"' (%s).", bIsReliable ? L"reliable" : L"NOT reliable"); - StringCchCat(szAdditionalTitleInfo, ADDTITLEINFO_BUF_LEN, (LPWSTR)wchOrigUCHARDET); /////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1370,8 +1373,6 @@ bool EditSaveFile( bEncodingMismatch = false; } if (bEncodingMismatch) { - Encoding_SetLabel(iAltEncoding); - Encoding_SetLabel(iEncoding); InfoBoxLng(0,L"MsgEncodingMismatch",IDS_MUI_ENCODINGMISMATCH, g_Encodings[iAltEncoding].wchLabel, g_Encodings[iEncoding].wchLabel); diff --git a/src/Encoding.c b/src/Encoding.c index e45316bda..8bffe6930 100644 --- a/src/Encoding.c +++ b/src/Encoding.c @@ -234,32 +234,33 @@ int Encoding_MapUnicode(int iUni) // ============================================================================ -void Encoding_SetLabel(int iEncoding) +void Encoding_SetLabel(int iEncoding) { - if (g_Encodings[iEncoding].wchLabel[0] == L'\0') { - WCHAR wch1[128] = { L'\0' }; - WCHAR wch2[128] = { L'\0' }; - GetLngString(g_Encodings[iEncoding].idsName, wch1, COUNTOF(wch1)); - WCHAR *pwsz = StrChr(wch1, L';'); + WCHAR wch1[128] = { L'\0' }; + GetLngString(g_Encodings[iEncoding].idsName, wch1, COUNTOF(wch1)); + + // point to correct label in list + WCHAR* pwsz = StrChr(wch1, L';'); + if (pwsz) { + pwsz = StrChr(CharNext(pwsz), L';'); if (pwsz) { - pwsz = StrChr(CharNext(pwsz), L';'); - if (pwsz) { - pwsz = CharNext(pwsz); - } + pwsz = CharNext(pwsz); } - if (!pwsz) - pwsz = wch1; - - StringCchCopyN(wch2, COUNTOF(wch2), pwsz, COUNTOF(wch1)); - - if (Encoding_IsANSI(iEncoding)) - StringCchCatN(wch2, COUNTOF(wch2), wchANSI, COUNTOF(wchANSI)); - else if (Encoding_IsOEM(iEncoding)) - StringCchCatN(wch2, COUNTOF(wch2), wchOEM, COUNTOF(wchOEM)); - - StringCchCopyN(g_Encodings[iEncoding].wchLabel, COUNTOF(g_Encodings[iEncoding].wchLabel), - wch2, COUNTOF(g_Encodings[iEncoding].wchLabel)); } + if (!pwsz) + pwsz = wch1; + + WCHAR wch2[128] = { L'\0' }; + StringCchCopyN(wch2, COUNTOF(wch2), pwsz, COUNTOF(wch1)); + + if (Encoding_IsANSI(iEncoding)) { + StringCchCatN(wch2, COUNTOF(wch2), wchANSI, COUNTOF(wchANSI)); + } + else if (Encoding_IsOEM(iEncoding)) { + StringCchCatN(wch2, COUNTOF(wch2), wchOEM, COUNTOF(wchOEM)); + } + + StringCchCopyN(g_Encodings[iEncoding].wchLabel, COUNTOF(g_Encodings[iEncoding].wchLabel), wch2, COUNTOF(wch2)); } // ============================================================================ diff --git a/src/EncodingDetection.cpp b/src/EncodingDetection.cpp index f2bd6e503..eda334faf 100644 --- a/src/EncodingDetection.cpp +++ b/src/EncodingDetection.cpp @@ -299,16 +299,19 @@ extern "C" NP2ENCODING g_Encodings[] = { /* 137 *///{ NCP_EXTERNAL_8BIT|NCP_RECODE, 57011, "x-iscii-pa,xisciipa,", 00000, L"" }, // ISCII Panjabi }; +constexpr int _CountOfEncodings() { return ARRAYSIZE(g_Encodings); } + extern "C" int Encoding_CountOf() { - return ARRAYSIZE(g_Encodings); + return _CountOfEncodings(); } + //============================================================================= constexpr int _MapCPI2Encoding(const int iNP3Encoding) { - if ((iNP3Encoding < 0) || (iNP3Encoding >= Encoding_CountOf())) { + if ((iNP3Encoding < 0) || (iNP3Encoding >= _CountOfEncodings())) { return UNKNOWN_ENCODING; // CPI_NONE, CPI_GET } @@ -388,7 +391,7 @@ constexpr int _FindCodePage(const Encoding& encoding) break; default: - for (int i = 0; i < Encoding_CountOf(); ++i) { + for (int i = 0; i < _CountOfEncodings(); ++i) { if (encoding == g_Encodings[i].iCEDEncoding) { iCodePage = static_cast(g_Encodings[i].uCodePage); break; @@ -418,7 +421,7 @@ static int _MapCEDEncoding2CPI(const char* const text, const size_t len, const if (cpiEncoding == CPI_NONE) { - for (int cpiIdx = 0; cpiIdx < Encoding_CountOf(); ++cpiIdx) { + for (int cpiIdx = 0; cpiIdx < _CountOfEncodings(); ++cpiIdx) { if (encoding == g_Encodings[cpiIdx].iCEDEncoding) { cpiEncoding = cpiIdx; break; @@ -601,10 +604,12 @@ extern "C" int Encoding_Analyze_UCHARDET(const char* const text, const size_t le uchardet_t hUcharDet = uchardet_new(); int const result = uchardet_handle_data(hUcharDet, text, len); - uchardet_data_end(hUcharDet); // transfer results + + uchardet_data_end(hUcharDet); // transfer report switch (result) { + case HANDLE_DATA_RESULT_NEED_MORE_DATA: // need more data is a result too case HANDLE_DATA_RESULT_DETECTED: { const char* charset = uchardet_get_charset(hUcharDet); @@ -615,11 +620,6 @@ extern "C" int Encoding_Analyze_UCHARDET(const char* const text, const size_t le } break; - case HANDLE_DATA_RESULT_NEED_MORE_DATA: - encoding = CPI_NONE; - confidence = 0.0f; - break; - case HANDLE_DATA_RESULT_ERROR: default: encoding = CPI_NONE; diff --git a/src/MuiLanguage.c b/src/MuiLanguage.c index 157fe1de8..6e45b9cf9 100644 --- a/src/MuiLanguage.c +++ b/src/MuiLanguage.c @@ -22,7 +22,9 @@ //============================================================================= -MUILANGUAGE MUI_LanguageDLLs[NUM_OF_MUI_LANGUAGES] = +//NUM_OF_MUI_LANGUAGES + +MUILANGUAGE MUI_LanguageDLLs[] = { { IDS_MUI_LANG_EN_US, L"en-US", MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), true, false }, // internal - must be 1st // ---------------------------- @@ -42,6 +44,7 @@ MUILANGUAGE MUI_LanguageDLLs[NUM_OF_MUI_LANGUAGES] = { IDS_MUI_LANG_ZH_CN, L"zh-CN", MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), false, false} }; +int MuiLanguages_CountOf() { return COUNTOF(MUI_LanguageDLLs); }; //============================================================================= @@ -55,7 +58,7 @@ static int _CheckAvailableLanguageDLLs() WCHAR wchAbsPath[MAX_PATH]; int count = 1; - for (int lng = 1; lng < NUM_OF_MUI_LANGUAGES; ++lng) + for (int lng = 1; lng < MuiLanguages_CountOf(); ++lng) { if (IsValidLocaleName(MUI_LanguageDLLs[lng].szLocaleName)) { @@ -203,7 +206,7 @@ HMODULE LoadLanguageResources(LANGID* pPrefLanguageID) // set the appropriate fallback list int iPrefLngIndex = -1; WCHAR tchAvailLngs[2 * (LOCALE_NAME_MAX_LENGTH + 1)] = { L'\0' }; - for (int lng = 0; lng < NUM_OF_MUI_LANGUAGES; ++lng) { + for (int lng = 0; lng < MuiLanguages_CountOf(); ++lng) { if (StringCchCompareXIW(MUI_LanguageDLLs[lng].szLocaleName, Settings2.PreferredLanguageLocaleName) == 0) { if (MUI_LanguageDLLs[lng].bHasDLL && (lng > 0)) { StringCchCatW(tchAvailLngs, COUNTOF(tchAvailLngs), MUI_LanguageDLLs[lng].szLocaleName); @@ -257,6 +260,12 @@ HMODULE LoadLanguageResources(LANGID* pPrefLanguageID) SetThreadUILanguage(languageID); + // update language dependent items + for (int enc = 0; enc < Encoding_CountOf(); ++enc) + { + Encoding_SetLabel(enc); + } + *pPrefLanguageID = languageID; return hLangResourceContainer; } @@ -274,7 +283,7 @@ void FreeLanguageResources(HMODULE hLangResourceContainer) FreeMUILibrary(hLangResourceContainer); } } - for (int i = 0; i < NUM_OF_MUI_LANGUAGES; ++i) { + for (int i = 0; i < MuiLanguages_CountOf(); ++i) { MUI_LanguageDLLs[i].bIsLoaded = false; } } diff --git a/src/MuiLanguage.h b/src/MuiLanguage.h index e2bdd95cc..6fee43658 100644 --- a/src/MuiLanguage.h +++ b/src/MuiLanguage.h @@ -28,9 +28,8 @@ typedef struct _muilanguage } MUILANGUAGE, *PMUILANGUAGE; - -#define NUM_OF_MUI_LANGUAGES 15 extern MUILANGUAGE MUI_LanguageDLLs[]; +int MuiLanguages_CountOf(); HMODULE LoadLanguageResources(LANGID* pPrefLanguageID); diff --git a/src/Notepad3.c b/src/Notepad3.c index c0c1c2840..9b5be3692 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -487,7 +487,7 @@ static bool _InsertLanguageMenu(HMENU hMenuBar) WCHAR wchMenuItemFmt[128]; WCHAR wchMenuItemStrg[196]; - for (int lng = 0; lng < NUM_OF_MUI_LANGUAGES; ++lng) + for (int lng = 0; lng < MuiLanguages_CountOf(); ++lng) { if (MUI_LanguageDLLs[lng].bHasDLL) { @@ -2914,7 +2914,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) i = (int)StringCchLenW(Settings2.AdministrationTool, COUNTOF(Settings2.AdministrationTool)); EnableCmd(hmenu, IDM_HELP_ADMINEXE, i); - for (int lng = 0; lng < NUM_OF_MUI_LANGUAGES; ++lng) { + for (int lng = 0; lng < MuiLanguages_CountOf(); ++lng) { //EnableCmd(hmenu, MUI_LanguageDLLs[lng].rid, MUI_LanguageDLLs[lng].bHasDLL); CheckCmd(hmenu, MUI_LanguageDLLs[lng].rid, MUI_LanguageDLLs[lng].bIsLoaded); } @@ -2932,7 +2932,7 @@ static bool _DynamicLanguageMenuCmd(int cmd) { int iLngIdx = (cmd - IDS_MUI_LANG_EN_US); // consecutive IDs - if ((iLngIdx < 0) || (iLngIdx >= NUM_OF_MUI_LANGUAGES)) { + if ((iLngIdx < 0) || (iLngIdx >= MuiLanguages_CountOf())) { return false; } if (!MUI_LanguageDLLs[iLngIdx].bIsLoaded) @@ -8636,8 +8636,6 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) int const iEncoding = Encoding_Current(CPI_GET); if (bForceRedraw || (s_iEncoding != iEncoding)) { - Encoding_SetLabel(iEncoding); - StringCchPrintf(tchStatusBar[STATUS_CODEPAGE], txtWidth, L"%s%s%s", s_mxSBPrefix[STATUS_CODEPAGE], Encoding_GetLabel(iEncoding), s_mxSBPostfix[STATUS_CODEPAGE]); diff --git a/src/VersionEx.h b/src/VersionEx.h index 38924fdf5..07e8a53b5 100644 --- a/src/VersionEx.h +++ b/src/VersionEx.h @@ -7,8 +7,8 @@ #define SAPPNAME "Notepad3" #define VERSION_MAJOR 5 #define VERSION_MINOR 19 -#define VERSION_REV 228 -#define VERSION_BUILD 1627 +#define VERSION_REV 301 +#define VERSION_BUILD 1628 #define SCINTILLA_VER 414+ #define ONIGMO_REGEX_VER 6.2.0 #define VERSION_PATCH XpErImEnTaL