mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-11 21:03:05 +08:00
+ fix: use Windows regional ANSI Code Page settings for fallback in case of file encoding detection failure (instead of default encoding for created files)
This commit is contained in:
parent
528d0fa3bf
commit
cce69112ca
@ -55,6 +55,7 @@ extern WCHAR g_wchCurFile[];
|
||||
extern WCHAR g_wchAppUserModelID[];
|
||||
|
||||
extern DWORD dwLastIOError;
|
||||
extern BOOL bUseDefaultForFileEncoding;
|
||||
extern BOOL bSkipUnicodeDetection;
|
||||
extern BOOL bLoadASCIIasUTF8;
|
||||
extern BOOL bLoadNFOasOEM;
|
||||
@ -2094,6 +2095,9 @@ INT_PTR CALLBACK SelectDefEncodingDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPAR
|
||||
|
||||
Encoding_AddToComboboxEx(GetDlgItem(hwnd,IDC_ENCODINGLIST),pdd->idEncoding,0);
|
||||
|
||||
if (bUseDefaultForFileEncoding)
|
||||
CheckDlgButton(hwnd, IDC_USEASREADINGFALLBACK, BST_CHECKED);
|
||||
|
||||
if (bSkipUnicodeDetection)
|
||||
CheckDlgButton(hwnd,IDC_NOUNICODEDETECTION,BST_CHECKED);
|
||||
|
||||
@ -2121,6 +2125,7 @@ INT_PTR CALLBACK SelectDefEncodingDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPAR
|
||||
EndDialog(hwnd,IDCANCEL);
|
||||
}
|
||||
else {
|
||||
bUseDefaultForFileEncoding = (IsDlgButtonChecked(hwnd, IDC_USEASREADINGFALLBACK) == BST_CHECKED) ? 1 : 0;
|
||||
bSkipUnicodeDetection = (IsDlgButtonChecked(hwnd,IDC_NOUNICODEDETECTION) == BST_CHECKED) ? 1 : 0;
|
||||
bLoadASCIIasUTF8 = (IsDlgButtonChecked(hwnd,IDC_ASCIIASUTF8) == BST_CHECKED) ? 1 : 0;
|
||||
bLoadNFOasOEM = (IsDlgButtonChecked(hwnd,IDC_NFOASOEM) == BST_CHECKED) ? 1 : 0;
|
||||
|
||||
27
src/Edit.c
27
src/Edit.c
@ -64,6 +64,7 @@ extern DWORD dwLastIOError;
|
||||
extern UINT cpLastFind;
|
||||
extern BOOL bReplaceInitialized;
|
||||
extern BOOL bUseOldStyleBraceMatching;
|
||||
extern BOOL bUseDefaultForFileEncoding;
|
||||
extern BOOL bSkipUnicodeDetection;
|
||||
extern BOOL bFindReplCopySelOrClip;
|
||||
|
||||
@ -81,7 +82,7 @@ extern BOOL bFixLineEndings;
|
||||
extern BOOL bAutoStripBlanks;
|
||||
|
||||
// Default Codepage and Character Set
|
||||
extern int g_iDefaultEncoding;
|
||||
extern int g_iDefaultNewFileEncoding;
|
||||
extern int g_iDefaultCharSet;
|
||||
extern BOOL bLoadASCIIasUTF8;
|
||||
extern BOOL bLoadNFOasOEM;
|
||||
@ -193,8 +194,8 @@ HWND EditCreate(HWND hwndParent)
|
||||
g_hInstance,
|
||||
NULL);
|
||||
|
||||
Encoding_Current(g_iDefaultEncoding);
|
||||
Encoding_SciSetCodePage(hwnd,g_iDefaultEncoding);
|
||||
Encoding_Current(g_iDefaultNewFileEncoding);
|
||||
Encoding_SciSetCodePage(hwnd,g_iDefaultNewFileEncoding);
|
||||
SendMessage(hwnd,SCI_SETEOLMODE,SC_EOL_CRLF,0);
|
||||
SendMessage(hwnd,SCI_SETPASTECONVERTENDINGS,TRUE,0);
|
||||
SendMessage(hwnd,SCI_SETMODEVENTMASK,/*SC_MODEVENTMASKALL*/SC_MOD_INSERTTEXT|SC_MOD_DELETETEXT|SC_MOD_CONTAINER,0);
|
||||
@ -1061,9 +1062,9 @@ BOOL EditLoadFile(
|
||||
}
|
||||
|
||||
const int iFileEncoding = Encoding_SrcCmdLn(CPI_GET);
|
||||
const int iPreferedEncoding = (bPreferOEM) ? g_DOSEncoding :
|
||||
(Encoding_IsValid(Encoding_SrcWeak(CPI_GET)) ? Encoding_SrcWeak(CPI_GET) : g_iDefaultEncoding);
|
||||
|
||||
const int iFileEncWeak = (Encoding_SrcWeak(CPI_GET) != CPI_NONE) ? Encoding_SrcWeak(CPI_GET) : CPI_ANSI_DEFAULT;
|
||||
const int iPreferedEncoding = (bPreferOEM) ? g_DOSEncoding : (bUseDefaultForFileEncoding ? g_iDefaultNewFileEncoding : iFileEncWeak);
|
||||
//@@@(g_Encodings[iFileEncWeak].uFlags & NCP_INTERNAL) ? g_iDefaultNewFileEncoding : iFileEncWeak;
|
||||
|
||||
BOOL bBOM = FALSE;
|
||||
BOOL bReverse = FALSE;
|
||||
@ -1176,6 +1177,7 @@ BOOL EditLoadFile(
|
||||
}
|
||||
|
||||
else {
|
||||
|
||||
if (iFileEncoding != CPI_NONE)
|
||||
*iEncoding = iFileEncoding;
|
||||
else {
|
||||
@ -1184,16 +1186,7 @@ BOOL EditLoadFile(
|
||||
if (fvCurFile.mask & FV_ENCODING)
|
||||
*iEncoding = CPI_ANSI_DEFAULT;
|
||||
else {
|
||||
int iEncWeak = Encoding_SrcWeak(CPI_GET);
|
||||
switch (iEncWeak) {
|
||||
case CPI_NONE:
|
||||
*iEncoding = iPreferedEncoding;
|
||||
break;
|
||||
default:
|
||||
*iEncoding = (g_Encodings[iEncWeak].uFlags & NCP_INTERNAL) ? g_iDefaultEncoding :
|
||||
(Encoding_IsValid(iEncWeak) ? iEncWeak : iPreferedEncoding);
|
||||
break;
|
||||
}
|
||||
*iEncoding = iPreferedEncoding;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1236,7 +1229,7 @@ BOOL EditLoadFile(
|
||||
}
|
||||
}
|
||||
else {
|
||||
*iEncoding = Encoding_IsValid(iFileEncoding) ? iFileEncoding : g_iDefaultEncoding;
|
||||
*iEncoding = Encoding_IsValid(iFileEncoding) ? iFileEncoding : iPreferedEncoding;
|
||||
Encoding_SciSetCodePage(hwnd,*iEncoding);
|
||||
EditSetNewText(hwnd,"",0);
|
||||
EditSetNewText(hwnd,lpData,cbData);
|
||||
|
||||
@ -42,8 +42,6 @@
|
||||
|
||||
|
||||
extern HINSTANCE g_hInstance;
|
||||
extern BOOL bSkipUnicodeDetection;
|
||||
extern BOOL bPreserveCaretPos;
|
||||
|
||||
|
||||
//=============================================================================
|
||||
@ -1824,6 +1822,8 @@ UINT CharSetFromCodePage(UINT uCodePage) {
|
||||
}
|
||||
|
||||
|
||||
extern BOOL bPreserveCaretPos;
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
// MRU functions
|
||||
@ -3405,6 +3405,7 @@ void Encoding_SciSetCodePage(HWND hwnd,int iEncoding) {
|
||||
*/
|
||||
}
|
||||
|
||||
extern BOOL bSkipUnicodeDetection;
|
||||
|
||||
BOOL IsUnicode(const char* pBuffer,int cb,LPBOOL lpbBOM,LPBOOL lpbReverse) {
|
||||
int i = 0xFFFF;
|
||||
|
||||
@ -174,6 +174,7 @@ BOOL g_bCodeFoldingAvailable;
|
||||
BOOL g_bShowCodeFolding;
|
||||
BOOL bViewWhiteSpace;
|
||||
BOOL bViewEOLs;
|
||||
BOOL bUseDefaultForFileEncoding;
|
||||
BOOL bSkipUnicodeDetection;
|
||||
BOOL bLoadASCIIasUTF8;
|
||||
BOOL bLoadNFOasOEM;
|
||||
@ -254,7 +255,7 @@ LPMRULIST mruReplace;
|
||||
|
||||
DWORD dwLastIOError;
|
||||
|
||||
int g_iDefaultEncoding;
|
||||
int g_iDefaultNewFileEncoding;
|
||||
int g_iDefaultCharSet;
|
||||
|
||||
int g_iEOLMode;
|
||||
@ -2731,7 +2732,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
|
||||
case IDM_ENCODING_SETDEFAULT:
|
||||
SelectDefEncodingDlg(hwnd,&g_iDefaultEncoding);
|
||||
SelectDefEncodingDlg(hwnd,&g_iDefaultNewFileEncoding);
|
||||
break;
|
||||
|
||||
|
||||
@ -4466,7 +4467,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
WCHAR tchCurFile2[MAX_PATH] = { L'\0' };
|
||||
if (StringCchLenW(g_wchCurFile,COUNTOF(g_wchCurFile))) {
|
||||
Encoding_SrcCmdLn(Encoding_MapUnicode(g_iDefaultEncoding));
|
||||
Encoding_SrcCmdLn(Encoding_MapUnicode(g_iDefaultNewFileEncoding));
|
||||
StringCchCopy(tchCurFile2,COUNTOF(tchCurFile2),g_wchCurFile);
|
||||
FileLoad(FALSE,FALSE,TRUE,TRUE,tchCurFile2);
|
||||
}
|
||||
@ -5796,10 +5797,12 @@ void LoadSettings()
|
||||
|
||||
bViewEOLs = IniSectionGetBool(pIniSection,L"ViewEOLs", FALSE);
|
||||
|
||||
g_iDefaultEncoding = IniSectionGetInt(pIniSection,L"DefaultEncoding", CPI_NONE);
|
||||
g_iDefaultNewFileEncoding = IniSectionGetInt(pIniSection,L"DefaultEncoding", CPI_NONE);
|
||||
// if DefaultEncoding is not defined set to system's current code-page
|
||||
g_iDefaultEncoding = (g_iDefaultEncoding == CPI_NONE) ?
|
||||
Encoding_MapIniSetting(TRUE,(int)GetACP()) : Encoding_MapIniSetting(TRUE,g_iDefaultEncoding);
|
||||
g_iDefaultNewFileEncoding = (g_iDefaultNewFileEncoding == CPI_NONE) ?
|
||||
Encoding_MapIniSetting(TRUE,(int)GetACP()) : Encoding_MapIniSetting(TRUE,g_iDefaultNewFileEncoding);
|
||||
|
||||
bUseDefaultForFileEncoding = IniSectionGetBool(pIniSection, L"UseDefaultForFileEncoding", FALSE);
|
||||
|
||||
bSkipUnicodeDetection = IniSectionGetBool(pIniSection, L"SkipUnicodeDetection", FALSE);
|
||||
|
||||
@ -6003,19 +6006,19 @@ void LoadSettings()
|
||||
|
||||
// remove internal support for Chinese, Japan, Korean DBCS use UTF-8 instead
|
||||
/*
|
||||
if (g_iDefaultEncoding == CPI_ANSI_DEFAULT)
|
||||
if (g_iDefaultNewFileEncoding == CPI_ANSI_DEFAULT)
|
||||
{
|
||||
// check for Chinese, Japan, Korean DBCS code pages and switch accordingly
|
||||
int acp = (int)GetACP();
|
||||
if (acp == 932 || acp == 936 || acp == 949 || acp == 950) {
|
||||
iSciDefaultCodePage = acp;
|
||||
}
|
||||
g_iDefaultEncoding = Encoding_GetByCodePage(iSciDefaultCodePage);
|
||||
g_iDefaultNewFileEncoding = Encoding_GetByCodePage(iSciDefaultCodePage);
|
||||
}
|
||||
*/
|
||||
|
||||
// set flag for encoding default
|
||||
g_Encodings[g_iDefaultEncoding].uFlags |= NCP_DEFAULT;
|
||||
g_Encodings[g_iDefaultNewFileEncoding].uFlags |= NCP_DEFAULT;
|
||||
|
||||
// define default charset
|
||||
g_iDefaultCharSet = (int)CharSetFromCodePage((UINT)iSciDefaultCodePage);
|
||||
@ -6101,7 +6104,8 @@ void SaveSettings(BOOL bSaveSettingsNow) {
|
||||
IniSectionSetBool(pIniSection, L"MarkOccurrencesCurrentWord", bMarkOccurrencesCurrentWord);
|
||||
IniSectionSetBool(pIniSection, L"ViewWhiteSpace", bViewWhiteSpace);
|
||||
IniSectionSetBool(pIniSection, L"ViewEOLs", bViewEOLs);
|
||||
IniSectionSetInt(pIniSection, L"DefaultEncoding", Encoding_MapIniSetting(FALSE, g_iDefaultEncoding));
|
||||
IniSectionSetInt(pIniSection, L"DefaultEncoding", Encoding_MapIniSetting(FALSE, g_iDefaultNewFileEncoding));
|
||||
IniSectionSetBool(pIniSection, L"UseDefaultForFileEncoding", bUseDefaultForFileEncoding);
|
||||
IniSectionSetBool(pIniSection, L"SkipUnicodeDetection", bSkipUnicodeDetection);
|
||||
IniSectionSetInt(pIniSection, L"LoadASCIIasUTF8", bLoadASCIIasUTF8);
|
||||
IniSectionSetBool(pIniSection, L"LoadNFOasOEM", bLoadNFOasOEM);
|
||||
@ -7435,9 +7439,9 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
|
||||
|
||||
g_iEOLMode = iLineEndings[g_iDefaultEOLMode];
|
||||
SendMessage(g_hwndEdit,SCI_SETEOLMODE,iLineEndings[g_iDefaultEOLMode],0);
|
||||
Encoding_Current(g_iDefaultEncoding);
|
||||
Encoding_HasChanged(g_iDefaultEncoding);
|
||||
Encoding_SciSetCodePage(g_hwndEdit,g_iDefaultEncoding);
|
||||
Encoding_Current(g_iDefaultNewFileEncoding);
|
||||
Encoding_HasChanged(g_iDefaultNewFileEncoding);
|
||||
Encoding_SciSetCodePage(g_hwndEdit,g_iDefaultNewFileEncoding);
|
||||
EditSetNewText(g_hwndEdit,"",0);
|
||||
|
||||
bReadOnly = FALSE;
|
||||
@ -7511,8 +7515,8 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
|
||||
Encoding_HasChanged(fileEncoding);
|
||||
}
|
||||
else {
|
||||
Encoding_Current(g_iDefaultEncoding);
|
||||
Encoding_HasChanged(g_iDefaultEncoding);
|
||||
Encoding_Current(g_iDefaultNewFileEncoding);
|
||||
Encoding_HasChanged(g_iDefaultNewFileEncoding);
|
||||
}
|
||||
Encoding_SciSetCodePage(g_hwndEdit,Encoding_Current(CPI_GET));
|
||||
bReadOnly = FALSE;
|
||||
|
||||
@ -25,10 +25,10 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_RUN ICON "..\\res\\Run.ico"
|
||||
|
||||
IDR_MAINWND ICON "..\\res\\Notepad3.ico"
|
||||
|
||||
IDI_RUN ICON "..\\res\\Run.ico"
|
||||
|
||||
IDR_MAINWND128 ICON "..\\res\\Notepad3_128.ico"
|
||||
|
||||
IDI_STYLES ICON "..\\res\\Styles.ico"
|
||||
@ -486,7 +486,7 @@ BEGIN
|
||||
"M", IDM_VIEW_MARGIN, VIRTKEY, SHIFT, CONTROL, NOINVERT
|
||||
"N", IDM_FILE_NEW, VIRTKEY, CONTROL, NOINVERT
|
||||
"N", IDM_FILE_NEWWINDOW, VIRTKEY, ALT, NOINVERT
|
||||
"N", IDM_FILE_NEWWINDOW2, VIRTKEY, ALT, SHIFT, NOINVERT
|
||||
"N", IDM_FILE_NEWWINDOW2, VIRTKEY, SHIFT, ALT, NOINVERT
|
||||
"N", IDM_VIEW_LINENUMBERS, VIRTKEY, SHIFT, CONTROL, NOINVERT
|
||||
"O", IDM_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT
|
||||
"O", IDM_EDIT_SORTLINES, VIRTKEY, ALT, NOINVERT
|
||||
@ -744,23 +744,25 @@ BEGIN
|
||||
SCROLLBAR IDC_RESIZEGRIP3,7,112,10,10
|
||||
END
|
||||
|
||||
IDD_DEFENCODING DIALOGEX 0, 0, 180, 118
|
||||
IDD_DEFENCODING DIALOGEX 0, 0, 181, 122
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Encoding"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
LTEXT "&Default encoding:",IDC_STATIC,7,7,58,8
|
||||
CONTROL "",IDC_ENCODINGLIST,"ComboBoxEx32",CBS_DROPDOWNLIST | WS_CLIPSIBLINGS | WS_VSCROLL | WS_TABSTOP,7,20,166,128
|
||||
LTEXT "&Default encoding (new file):",IDC_STATIC,7,7,90,8
|
||||
CONTROL "",IDC_ENCODINGLIST,"ComboBoxEx32",CBS_DROPDOWNLIST | WS_CLIPSIBLINGS | WS_VSCROLL | WS_TABSTOP,7,20,167,128
|
||||
CONTROL "Fallback on detection failure.", IDC_USEASREADINGFALLBACK,
|
||||
"Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 40, 108, 10
|
||||
CONTROL "Skip automatic &Unicode detection.",IDC_NOUNICODEDETECTION,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,43,124,10
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,51,124,10
|
||||
CONTROL "Open 7-bit &ASCII files in UTF-8 mode.",IDC_ASCIIASUTF8,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,53,136,10
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,62,136,10
|
||||
CONTROL "Open 8-bit *.&nfo/diz files in DOS-437 mode.",IDC_NFOASOEM,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,63,166,10
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,73,167,10
|
||||
CONTROL "Don't parse encoding &tags.",IDC_ENCODINGFROMFILEVARS,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,73,102,10
|
||||
DEFPUSHBUTTON "OK",IDOK,68,97,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,123,97,50,14
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,84,102,10
|
||||
DEFPUSHBUTTON "OK",IDOK,68,101,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,124,101,50,14
|
||||
END
|
||||
|
||||
IDD_DEFEOLMODE DIALOGEX 0, 0, 180, 78
|
||||
@ -1209,9 +1211,9 @@ BEGIN
|
||||
IDD_DEFENCODING, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 173
|
||||
RIGHTMARGIN, 174
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 101
|
||||
BOTTOMMARGIN, 115
|
||||
END
|
||||
|
||||
IDD_DEFEOLMODE, DIALOG
|
||||
|
||||
@ -134,6 +134,7 @@
|
||||
#define IDC_SWAPSTRG 230
|
||||
#define IDC_CHECK_OCC 231
|
||||
#define IDC_PRINTER 232
|
||||
#define IDC_USEASREADINGFALLBACK 233
|
||||
#define IDACC_FIND 302
|
||||
#define IDACC_REPLACE 303
|
||||
#define IDACC_SAVEPOS 304
|
||||
|
||||
Loading…
Reference in New Issue
Block a user