+ fix: 'uchardet' result interpretation

+ fix: 'title-bar' display format for analyze result
This commit is contained in:
Rainer Kottenhoff 2019-03-01 14:28:30 +01:00
parent 1caa332305
commit b3d299acdb
9 changed files with 64 additions and 56 deletions

View File

@ -1 +1 @@
1627
1628

View File

@ -3,7 +3,7 @@
<assemblyIdentity
name="Notepad3"
processorArchitecture="*"
version="5.19.228.1627"
version="5.19.301.1628"
type="win32"
/>
<description>Notepad3 XpErImEnTaL</description>

View File

@ -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"<unknown>");
}
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"<unknown>");
StringCchCat(szAdditionalTitleInfo, ADDTITLEINFO_BUF_LEN, (iAnalyzedEncoding_CED == CPI_ASCII_7BIT) ? L"ascii" : L"<unknown>");
}
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);

View File

@ -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));
}
// ============================================================================

View File

@ -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<int>(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;

View File

@ -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;
}
}

View File

@ -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);

View File

@ -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]);

View File

@ -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