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