diff --git a/Versions/build.txt b/Versions/build.txt
index d00491fd7..0cfbf0888 100644
--- a/Versions/build.txt
+++ b/Versions/build.txt
@@ -1 +1 @@
-1
+2
diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf
index ef87bd75b..40664707e 100644
--- a/res/Notepad3.exe.manifest.conf
+++ b/res/Notepad3.exe.manifest.conf
@@ -3,7 +3,7 @@
Notepad3 BETA
diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp
index 50af5176c..814b66fe1 100644
--- a/src/Config/Config.cpp
+++ b/src/Config/Config.cpp
@@ -1284,15 +1284,22 @@ void LoadSettings()
GET_INT_VALUE_FROM_INISECTION(WordWrapMode, 0, 0, 1);
GET_INT_VALUE_FROM_INISECTION(WordWrapIndent, 0, 0, 6);
- GET_BOOL_VALUE_FROM_INISECTION(WordWrap, true); Globals.fvBackup.bWordWrap = Settings.WordWrap;
- GET_BOOL_VALUE_FROM_INISECTION(TabsAsSpaces, false); Globals.fvBackup.bTabsAsSpaces = Settings.TabsAsSpaces;
- GET_BOOL_VALUE_FROM_INISECTION(TabIndents, true); Globals.fvBackup.bTabIndents = Settings.TabIndents;
- GET_INT_VALUE_FROM_INISECTION(TabWidth, 4, 1, 1024); Globals.fvBackup.iTabWidth = Settings.TabWidth;
- GET_INT_VALUE_FROM_INISECTION(IndentWidth, 4, 0, 1024); Globals.fvBackup.iIndentWidth = Settings.IndentWidth;
- GET_INT_VALUE_FROM_INISECTION(LongLinesLimit, 80, 0, LONG_LINES_MARKER_LIMIT); Globals.fvBackup.iLongLinesLimit = Settings.LongLinesLimit;
+ GET_BOOL_VALUE_FROM_INISECTION(WordWrap, true); Globals.fvCurFile.bWordWrap = Settings.WordWrap;
+ GET_BOOL_VALUE_FROM_INISECTION(TabsAsSpaces, false); Globals.fvCurFile.bTabsAsSpaces = Settings.TabsAsSpaces;
+ GET_BOOL_VALUE_FROM_INISECTION(TabIndents, true); Globals.fvCurFile.bTabIndents = Settings.TabIndents;
+ GET_INT_VALUE_FROM_INISECTION(TabWidth, 4, 1, 1024); Globals.fvCurFile.iTabWidth = Settings.TabWidth;
+ GET_INT_VALUE_FROM_INISECTION(IndentWidth, 4, 0, 1024); Globals.fvCurFile.iIndentWidth = Settings.IndentWidth;
+
+ GET_BOOL_VALUE_FROM_INISECTION(MarkLongLines, (Globals.iCfgVersionRead < CFG_VER_0002)); Defaults.MarkLongLines = false; // new default
+ GET_INT_VALUE_FROM_INISECTION(LongLineMode, EDGE_LINE, EDGE_LINE, EDGE_MULTILINE);
+ GET_INT_VALUE_FROM_INISECTION(LongLinesLimit, 80, 0, LONG_LINES_MARKER_LIMIT);
Globals.iWrapCol = Settings.LongLinesLimit;
- StringCchPrintf(Defaults.MultiEdgeLines, COUNTOF(Defaults.MultiEdgeLines), L"%i", Settings.LongLinesLimit);
+
+ _itow_s(Settings.LongLinesLimit, Defaults.MultiEdgeLines, COUNTOF(Defaults.MultiEdgeLines), 10);
IniSectionGetString(IniSecSettings, L"MultiEdgeLines", Defaults.MultiEdgeLines, Settings.MultiEdgeLines, COUNTOF(Settings.MultiEdgeLines));
+ size_t const n = NormalizeColumnVector(NULL, Settings.MultiEdgeLines, COUNTOF(Settings.MultiEdgeLines));
+ StringCchCopy(Globals.fvCurFile.wchMultiEdgeLines, COUNTOF(Globals.fvCurFile.wchMultiEdgeLines), Settings.MultiEdgeLines);
+ if (n > 1) { Settings.LongLineMode = EDGE_MULTILINE; }
Defaults.WordWrapSymbols = 2;
int const iWS = IniSectionGetInt(IniSecSettings, L"WordWrapSymbols", Defaults.WordWrapSymbols);
@@ -1316,8 +1323,6 @@ void LoadSettings()
GET_BOOL_VALUE_FROM_INISECTION(BackspaceUnindents, false);
GET_BOOL_VALUE_FROM_INISECTION(WarnInconsistentIndents, false);
GET_BOOL_VALUE_FROM_INISECTION(AutoDetectIndentSettings, false);
- GET_BOOL_VALUE_FROM_INISECTION(MarkLongLines, (Globals.iCfgVersionRead < CFG_VER_0002)); Defaults.MarkLongLines = false; // new default
- GET_INT_VALUE_FROM_INISECTION(LongLineMode, EDGE_LINE, EDGE_LINE, EDGE_BACKGROUND);
GET_BOOL_VALUE_FROM_INISECTION(ShowSelectionMargin, true);
GET_BOOL_VALUE_FROM_INISECTION(ShowLineNumbers, true);
GET_BOOL_VALUE_FROM_INISECTION(ShowCodeFolding, true); FocusedView.ShowCodeFolding = Settings.ShowCodeFolding;
@@ -1334,9 +1339,12 @@ void LoadSettings()
GET_BOOL_VALUE_FROM_INISECTION(ViewWhiteSpace, false);
GET_BOOL_VALUE_FROM_INISECTION(ViewEOLs, false);
- auto const iPrefEncIniSetting = (cpi_enc_t)Encoding_MapIniSetting(false, (int)CPI_PREFERRED_ENCODING);
- GET_ENC_VALUE_FROM_INISECTION(DefaultEncoding, iPrefEncIniSetting, CPI_NONE, INT_MAX);
- Settings.DefaultEncoding = ((Settings.DefaultEncoding == CPI_NONE) ? CPI_PREFERRED_ENCODING : (cpi_enc_t)Encoding_MapIniSetting(true, (int)Settings.DefaultEncoding));
+ auto const iDefaultEncoding = (cpi_enc_t)Encoding_MapIniSetting(false, (int)CPI_PREFERRED_ENCODING);
+ GET_ENC_VALUE_FROM_INISECTION(DefaultEncoding, iDefaultEncoding, CPI_NONE, INT_MAX);
+ Settings.DefaultEncoding = ((Settings.DefaultEncoding == CPI_NONE) ? CPI_PREFERRED_ENCODING :
+ (cpi_enc_t)Encoding_MapIniSetting(true, (int)Settings.DefaultEncoding));
+ Globals.fvCurFile.iEncoding = Settings.DefaultEncoding;
+
GET_BOOL_VALUE_FROM_INISECTION(UseDefaultForFileEncoding, false);
GET_BOOL_VALUE_FROM_INISECTION(LoadASCIIasUTF8, true);
GET_BOOL_VALUE_FROM_INISECTION(UseReliableCEDonly, true);
@@ -1559,19 +1567,6 @@ void LoadSettings()
// define scintilla internal codepage
int const iSciDefaultCodePage = SC_CP_UTF8; // default UTF8
- // remove internal support for Chinese, Japan, Korean DBCS use UTF-8 instead
- /*
- if (Settings.DefaultEncoding == 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;
- }
- Settings.DefaultEncoding = Encoding_GetByCodePage(iSciDefaultCodePage);
- }
- */
-
// set flag for encoding default
Encoding_SetDefaultFlag(Settings.DefaultEncoding);
@@ -1775,6 +1770,7 @@ static bool _SaveSettings(bool bForceSaveSettings)
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, ViewWhiteSpace);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, ViewEOLs);
+ // encoding: internal<->external mapping
Settings.DefaultEncoding = (cpi_enc_t)Encoding_MapIniSetting(false, (int)Settings.DefaultEncoding);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, DefaultEncoding);
Settings.DefaultEncoding = (cpi_enc_t)Encoding_MapIniSetting(true, (int)Settings.DefaultEncoding);
diff --git a/src/Dialogs.c b/src/Dialogs.c
index 15be90d23..5e1bb2bca 100644
--- a/src/Dialogs.c
+++ b/src/Dialogs.c
@@ -2337,11 +2337,13 @@ static INT_PTR CALLBACK LongLineSettingsDlgProc(HWND hwnd, UINT umsg, WPARAM wPa
BOOL fTranslated;
/*UINT const iCol = */ GetDlgItemInt(hwnd, IDC_MULTIEDGELINE, &fTranslated, FALSE);
if (fTranslated) {
- if (Settings.LongLineMode == EDGE_BACKGROUND) {
- CheckRadioButton(hwnd, IDC_SHOWEDGELINE, IDC_BACKGRDCOLOR, IDC_BACKGRDCOLOR);
- }
- else {
- CheckRadioButton(hwnd, IDC_SHOWEDGELINE, IDC_BACKGRDCOLOR, IDC_SHOWEDGELINE);
+ switch (Settings.LongLineMode) {
+ case EDGE_BACKGROUND:
+ CheckRadioButton(hwnd, IDC_SHOWEDGELINE, IDC_BACKGRDCOLOR, IDC_BACKGRDCOLOR);
+ break;
+ default:
+ CheckRadioButton(hwnd, IDC_SHOWEDGELINE, IDC_BACKGRDCOLOR, IDC_SHOWEDGELINE);
+ break;
}
}
else {
@@ -4266,7 +4268,8 @@ int Toolbar_SetButtons(HANDLE hwnd, int cmdBase, LPCWSTR lpszButtons, LPCTBBUTTO
p = tchButtons;
while (*p) {
int iCmd;
- if (swscanf_s(p, L"%i", &iCmd) == 1) {
+ //if (swscanf_s(p, L"%i", &iCmd) == 1) {
+ if (StrToIntEx(p, STIF_DEFAULT, &iCmd)) {
iCmd = (iCmd == 0) ? 0 : iCmd + cmdBase - 1;
for (int i = 0; i < ctbb; i++) {
if (ptbb[i].idCommand == iCmd) {
diff --git a/src/Edit.c b/src/Edit.c
index ef5248f7d..b1580cdd1 100644
--- a/src/Edit.c
+++ b/src/Edit.c
@@ -1124,8 +1124,7 @@ bool EditLoadFile(
CloseHandle(hFile);
if (cbData == 0) {
- FileVars_Init(NULL, 0, &Globals.fvCurFile);
- status->iEncoding = Settings.DefaultEncoding;
+ FileVars_GetFromData(NULL, 0, &Globals.fvCurFile); // init-reset
status->iEOLMode = Settings.DefaultEOLMode;
EditSetNewText(hwnd, "", 0, bClearUndoHistory);
SciCall_SetEOLMode(Settings.DefaultEOLMode);
@@ -1160,7 +1159,7 @@ bool EditLoadFile(
bool const bIsUTF8Sig = IsUTF8Signature(lpData);
Encoding_Forced(bIsUTF8Sig ? CPI_UTF8SIGN : CPI_UTF8);
- FileVars_Init(NULL, 0, &Globals.fvCurFile);
+ FileVars_GetFromData(NULL, 0, &Globals.fvCurFile); // init-reset
status->iEncoding = Encoding_Forced(CPI_GET);
status->iEOLMode = Settings.DefaultEOLMode;
@@ -1243,7 +1242,7 @@ bool EditLoadFile(
status->bUnicodeErr = true;
}
- FileVars_Init(lpDataUTF8, convCnt - 1, &Globals.fvCurFile);
+ FileVars_GetFromData(lpDataUTF8, convCnt - 1, &Globals.fvCurFile);
EditSetNewText(hwnd, lpDataUTF8, convCnt - 1, bClearUndoHistory);
EditDetectEOLMode(lpDataUTF8, convCnt - 1, status);
FreeMem(lpDataUTF8);
@@ -1272,7 +1271,7 @@ bool EditLoadFile(
EditDetectEOLMode(lpData, cbData, status);
}
}
- else if (bIsCP_UTF7 || encDetection.bIs7BitASCII)
+ else if (!IS_ENC_ENFORCED() && (bIsCP_UTF7 || encDetection.bIs7BitASCII))
{
// load UTF-7/ASCII(7-bit) as ANSI/UTF-8
EditSetNewText(hwnd, lpData, cbData, bClearUndoHistory);
diff --git a/src/Encoding.h b/src/Encoding.h
index 54f9ad1ea..b9a849bc1 100644
--- a/src/Encoding.h
+++ b/src/Encoding.h
@@ -160,7 +160,7 @@ inline bool IsDBCSCodePage(UINT cp) {
#define FV_ENCODING 64
#define FV_MODE 128
-bool FileVars_Init(const char* lpData, size_t cbData, LPFILEVARS lpfv);
+bool FileVars_GetFromData(const char* lpData, size_t cbData, LPFILEVARS lpfv);
bool FileVars_Apply(LPFILEVARS lpfv);
bool FileVars_ParseInt(char* pszData, char* pszName, int* piValue);
bool FileVars_ParseStr(char* pszData, char* pszName, char* pszValue, int cchValue);
diff --git a/src/EncodingDetection.cpp b/src/EncodingDetection.cpp
index c9f92fd28..e51bb0288 100644
--- a/src/EncodingDetection.cpp
+++ b/src/EncodingDetection.cpp
@@ -53,6 +53,10 @@ extern "C" {
//=============================================================================
+extern "C" void Style_SetMultiEdgeLine(const int colVec[], const size_t count);
+
+//=============================================================================
+
static WCHAR wchEncodingInfo[MAX_PATH] = { L'\0' };
static void _SetEncodingTitleInfo(const ENC_DET_T* pEncDetInfo);
@@ -65,6 +69,7 @@ extern "C" const char* Encoding_GetTitleInfoA() {
return chEncodingInfo;
}
+
//=============================================================================
///////////////////////////////////////////////////////////////////////////////////////////////
@@ -975,11 +980,12 @@ static void _SetFileVars(char* buffer, size_t cch, LPFILEVARS lpfv)
lpfv->bWordWrap = (i) ? false : true;
lpfv->mask |= FV_WORDWRAP;
}
+ }
- if (FileVars_ParseInt(buffer, "fill-column", &i)) {
- lpfv->iLongLinesLimit = clampi(i, 0, LONG_LINES_MARKER_LIMIT);
- lpfv->mask |= FV_LONGLINESLIMIT;
- }
+ char columns[SMALL_BUFFER];
+ if (FileVars_ParseStr(buffer, "fill-column", columns, COUNTOF(columns))) {
+ NormalizeColumnVector(columns, lpfv->wchMultiEdgeLines, COUNTOF(lpfv->wchMultiEdgeLines));
+ lpfv->mask |= FV_LONGLINESLIMIT;
}
}
@@ -988,20 +994,24 @@ static void _SetFileVars(char* buffer, size_t cch, LPFILEVARS lpfv)
if (!bHasSignature && !Settings.NoEncodingTags && !bDisableFileVar) {
- if (FileVars_ParseStr(buffer, "encoding", lpfv->tchEncoding, COUNTOF(lpfv->tchEncoding)))
+ if (FileVars_ParseStr(buffer, "encoding", lpfv->chEncoding, COUNTOF(lpfv->chEncoding))) {
lpfv->mask |= FV_ENCODING;
- else if (FileVars_ParseStr(buffer, "charset", lpfv->tchEncoding, COUNTOF(lpfv->tchEncoding)))
+ }
+ else if (FileVars_ParseStr(buffer, "charset", lpfv->chEncoding, COUNTOF(lpfv->chEncoding))) {
lpfv->mask |= FV_ENCODING;
- else if (FileVars_ParseStr(buffer, "coding", lpfv->tchEncoding, COUNTOF(lpfv->tchEncoding)))
+ }
+ else if (FileVars_ParseStr(buffer, "coding", lpfv->chEncoding, COUNTOF(lpfv->chEncoding))) {
lpfv->mask |= FV_ENCODING;
+ }
}
if (lpfv->mask & FV_ENCODING) {
- lpfv->iEncoding = Encoding_MatchA(lpfv->tchEncoding);
+ lpfv->iEncoding = Encoding_MatchA(lpfv->chEncoding);
}
if (!Flags.NoFileVariables && !bDisableFileVar) {
- if (FileVars_ParseStr(buffer, "mode", lpfv->tchMode, COUNTOF(lpfv->tchMode)))
+ if (FileVars_ParseStr(buffer, "mode", lpfv->chMode, COUNTOF(lpfv->chMode))) {
lpfv->mask |= FV_MODE;
+ }
}
}
@@ -1009,7 +1019,7 @@ static void _SetFileVars(char* buffer, size_t cch, LPFILEVARS lpfv)
//
// FileVars_Init()
//
-extern "C" bool FileVars_Init(const char* lpData, size_t cbData, LPFILEVARS lpfv)
+extern "C" bool FileVars_GetFromData(const char* lpData, size_t cbData, LPFILEVARS lpfv)
{
ZeroMemory(lpfv, sizeof(FILEVARS));
lpfv->bTabIndents = Settings.TabIndents;
@@ -1017,8 +1027,8 @@ extern "C" bool FileVars_Init(const char* lpData, size_t cbData, LPFILEVARS lpfv
lpfv->bWordWrap = Settings.WordWrap;
lpfv->iTabWidth = Settings.TabWidth;
lpfv->iIndentWidth = Settings.IndentWidth;
- lpfv->iLongLinesLimit = Settings.LongLinesLimit;
lpfv->iEncoding = Settings.DefaultEncoding;
+ StringCchCopy(lpfv->wchMultiEdgeLines, COUNTOF(lpfv->wchMultiEdgeLines), Settings.MultiEdgeLines);
if ((Flags.NoFileVariables && Settings.NoEncodingTags) || !lpData || !cbData) { return true; }
@@ -1061,9 +1071,9 @@ extern "C" bool FileVars_Apply(LPFILEVARS lpfv) {
int const _iWrapMode = _bWordWrap ? ((Settings.WordWrapMode == 0) ? SC_WRAP_WHITESPACE : SC_WRAP_CHAR) : SC_WRAP_NONE;
SciCall_SetWrapMode(_iWrapMode);
- int const _iLongLinesLimit = (lpfv->mask & FV_LONGLINESLIMIT) ? lpfv->iLongLinesLimit : Settings.LongLinesLimit;
- SciCall_SetEdgeColumn(_iLongLinesLimit);
- Globals.iWrapCol = _iLongLinesLimit;
+ int edgeColumns[SMALL_BUFFER];
+ size_t const cnt = ReadVectorFromString(lpfv->wchMultiEdgeLines, edgeColumns, COUNTOF(edgeColumns), 0, LONG_LINES_MARKER_LIMIT, 0, true);
+ Style_SetMultiEdgeLine(edgeColumns, cnt);
return true;
}
@@ -1147,8 +1157,8 @@ extern "C" bool FileVars_ParseStr(char* pszData, char* pszName, char* pszValue,
pvStart = StrStrIA(pvStart, pszName); // next
}
- if (pvStart) {
-
+ if (pvStart)
+ {
bool bQuoted = false;
while (*pvStart && StrChrIA(":=\"' \t", *pvStart)) {
if (*pvStart == '\'' || *pvStart == '"')
@@ -1181,8 +1191,8 @@ extern "C" bool FileVars_ParseStr(char* pszData, char* pszName, char* pszValue,
//
extern "C" bool FileVars_IsUTF8(LPFILEVARS lpfv) {
if (lpfv->mask & FV_ENCODING) {
- if (StringCchCompareNIA(lpfv->tchEncoding, COUNTOF(lpfv->tchEncoding), "utf-8", CSTRLEN("utf-8")) == 0 ||
- StringCchCompareNIA(lpfv->tchEncoding, COUNTOF(lpfv->tchEncoding), "utf8", CSTRLEN("utf8")) == 0)
+ if (StringCchCompareNIA(lpfv->chEncoding, COUNTOF(lpfv->chEncoding), "utf-8", CSTRLEN("utf-8")) == 0 ||
+ StringCchCompareNIA(lpfv->chEncoding, COUNTOF(lpfv->chEncoding), "utf8", CSTRLEN("utf8")) == 0)
return true;
}
return false;
@@ -1231,7 +1241,7 @@ extern "C" ENC_DET_T Encoding_DetectEncoding(LPWSTR pszFile, const char* lpData,
{
ENC_DET_T encDetRes = INIT_ENC_DET_T;
- FileVars_Init(lpData, cbData, &Globals.fvCurFile);
+ FileVars_GetFromData(lpData, cbData, &Globals.fvCurFile);
bool const bBOM_LE = Has_UTF16_LE_BOM(lpData, cbData);
bool const bBOM_BE = Has_UTF16_BE_BOM(lpData, cbData);
diff --git a/src/Helpers.c b/src/Helpers.c
index 0f2d20e91..0712edcfe 100644
--- a/src/Helpers.c
+++ b/src/Helpers.c
@@ -2578,8 +2578,9 @@ size_t ReadVectorFromString(LPCWSTR wchStrg, int iVector[], size_t iCount, int i
p = wchTmpBuff;
while (*p) {
int iValue;
- if (swscanf_s(p, L"%i", &iValue) == 1) {
- if (n < iCount) {
+ if (n < iCount) {
+ //if (swscanf_s(p, L"%i", &iValue) == 1) {
+ if (StrToIntEx(p, STIF_DEFAULT, &iValue)) {
iVector[n++] = clampi(iValue, iMin, iMax);
}
}
@@ -2593,6 +2594,27 @@ size_t ReadVectorFromString(LPCWSTR wchStrg, int iVector[], size_t iCount, int i
return n;
}
+size_t NormalizeColumnVector(LPSTR chStrg_in, LPWSTR wchStrg_out, size_t iCount)
+{
+ if (chStrg_in) {
+ MultiByteToWideChar(CP_UTF8, 0, chStrg_in, -1, wchStrg_out, (int)iCount);
+ }
+ StrTrim(wchStrg_out, L"\"'");
+
+ int* intVector = (int*)AllocMem(iCount * sizeof(int), HEAP_ZERO_MEMORY);
+ if (!intVector) { return 0; }
+
+ size_t const cnt = ReadVectorFromString(wchStrg_out, intVector, iCount, 0, LONG_LINES_MARKER_LIMIT, 0, true);
+
+ WCHAR col[32];
+ wchStrg_out[0] = L'\0';
+ for (size_t i = 0; i < cnt; ++i) {
+ StringCchPrintf(col, COUNTOF(col), ((i == 0) ? L"%i" : L" %i"), intVector[i]);
+ StringCchCat(wchStrg_out, iCount, col);
+ }
+ FreeMem(intVector);
+ return cnt;
+}
//=============================================================================
//
diff --git a/src/Helpers.h b/src/Helpers.h
index 2f4720a6f..a523ec22c 100644
--- a/src/Helpers.h
+++ b/src/Helpers.h
@@ -554,6 +554,7 @@ void UrlUnescapeEx(LPWSTR lpURL, LPWSTR lpUnescaped, DWORD* pcchUnescaped);
int ReadStrgsFromCSV(LPCWSTR wchCSVStrg, prefix_t sMatrix[], int iCount, int iLen, LPCWSTR sDefault);
size_t ReadVectorFromString(LPCWSTR wchStrg, int iVector[], size_t iCount, int iMin, int iMax, int iDefault, bool ordered);
+size_t NormalizeColumnVector(LPSTR chStrg_in, LPWSTR wchStrg_out, size_t iCount);
inline bool Char2IntW(LPCWSTR str, int* value) {
LPWSTR end;
diff --git a/src/Notepad3.c b/src/Notepad3.c
index d599f82e2..5ec3161d7 100644
--- a/src/Notepad3.c
+++ b/src/Notepad3.c
@@ -615,7 +615,6 @@ static void _InitGlobals()
ZeroMemory(&Flags, sizeof(FLAGS_T));
ZeroMemory(&(Globals.fvCurFile), sizeof(FILEVARS));
- ZeroMemory(&(Globals.fvBackup), sizeof(FILEVARS));
Globals.hDlgIcon256 = NULL;
Globals.hDlgIcon128 = NULL;
@@ -629,7 +628,7 @@ static void _InitGlobals()
Globals.uConsoleCodePage = 0;
Globals.iAvailLngCount = 1;
Globals.iPrefLANGID = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
- Globals.iWrapCol = 0;
+ Globals.iWrapCol = 80;
Globals.CallTipType = CT_NONE;
Globals.CmdLnFlag_PosParam = false;
@@ -1724,7 +1723,7 @@ static void _SetWrapStartIndent()
//
static void _SetWrapIndentMode()
{
- int const wrap_mode = (!Settings.WordWrap ? SC_WRAP_NONE : ((Settings.WordWrapMode == 0) ? SC_WRAP_WHITESPACE : SC_WRAP_CHAR));
+ int const wrap_mode = (!Globals.fvCurFile.bWordWrap ? SC_WRAP_NONE : ((Settings.WordWrapMode == 0) ? SC_WRAP_WHITESPACE : SC_WRAP_CHAR));
SciCall_SetWrapMode(wrap_mode);
@@ -3369,7 +3368,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
CheckCmd(hmenu, IDM_VIEW_USE2NDDEFAULT, Style_GetUse2ndDefault());
- CheckCmd(hmenu, IDM_VIEW_WORDWRAP, Settings.WordWrap);
+ CheckCmd(hmenu, IDM_VIEW_WORDWRAP, Globals.fvCurFile.bWordWrap);
CheckCmd(hmenu, IDM_VIEW_LONGLINEMARKER, Settings.MarkLongLines);
CheckCmd(hmenu, IDM_VIEW_TABSASSPACES, Globals.fvCurFile.bTabsAsSpaces);
CheckCmd(hmenu, IDM_VIEW_SHOWINDENTGUIDES, Settings.ShowIndentGuides);
@@ -4967,6 +4966,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
case IDM_VIEW_WORDWRAP:
Settings.WordWrap = !Settings.WordWrap;
+ Globals.fvCurFile.bWordWrap = Settings.WordWrap;
_SetWrapIndentMode(Globals.hwndEdit);
EditEnsureSelectionVisible();
break;
@@ -4990,52 +4990,51 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
{
Settings.MarkLongLines = !Settings.MarkLongLines;
size_t cnt = 0;
- int edgeCol[MIDSZ_BUFFER] = { L'\0' };
+ int edgeColumns[SMALL_BUFFER] = { 0 };
if (Settings.MarkLongLines) {
- cnt = ReadVectorFromString(Settings.MultiEdgeLines, edgeCol, MIDSZ_BUFFER, 0, LONG_LINES_MARKER_LIMIT, 0, true);
+ cnt = ReadVectorFromString(Globals.fvCurFile.wchMultiEdgeLines, edgeColumns, COUNTOF(edgeColumns), 0, LONG_LINES_MARKER_LIMIT, 0, true);
}
- Style_SetMultiEdgeLine(Globals.hwndEdit, edgeCol, cnt);
+ Style_SetMultiEdgeLine(edgeColumns, cnt);
}
break;
case IDM_VIEW_LONGLINESETTINGS:
{
- int _iLongLinesLimit = Settings.LongLinesLimit;
+ int _iLongLinesLimit = Defaults.LongLinesLimit;
- WCHAR wchColumnList[MIDSZ_BUFFER];
- StringCchCopy(wchColumnList, COUNTOF(wchColumnList), Settings.MultiEdgeLines);
+ if (LongLineSettingsDlg(hwnd, IDD_MUI_LONGLINES, Globals.fvCurFile.wchMultiEdgeLines)) {
- if (LongLineSettingsDlg(hwnd, IDD_MUI_LONGLINES, wchColumnList)) {
-
- int edgeCol[MIDSZ_BUFFER];
- size_t const cnt = ReadVectorFromString(wchColumnList, edgeCol, MIDSZ_BUFFER, 0, LONG_LINES_MARKER_LIMIT, 0, true);
+ int edgeColumns[SMALL_BUFFER];
+ size_t const cnt = ReadVectorFromString(Globals.fvCurFile.wchMultiEdgeLines, edgeColumns, COUNTOF(edgeColumns), 0, LONG_LINES_MARKER_LIMIT, 0, true);
if (cnt == 0) {
Settings.MarkLongLines = false;
}
else if (cnt == 1) {
- _iLongLinesLimit = edgeCol[0];
+ _iLongLinesLimit = edgeColumns[0];
Settings.MarkLongLines = true;
//~Settings.LongLineMode = EDGE_LINE|EDGE_BACKGROUND; // set by Dlg
}
else {
- _iLongLinesLimit = edgeCol[cnt - 1];
+ _iLongLinesLimit = edgeColumns[cnt - 1];
Settings.MarkLongLines = true;
Settings.LongLineMode = EDGE_MULTILINE;
}
Globals.iWrapCol = _iLongLinesLimit;
Settings.LongLinesLimit = _iLongLinesLimit;
- Globals.fvCurFile.iLongLinesLimit = _iLongLinesLimit;
- Settings.MultiEdgeLines[0] = L'\0'; // empty
+ // new multi-edge lines setting
WCHAR col[32];
+ Settings.MultiEdgeLines[0] = L'\0';
for (size_t i = 0; i < cnt; ++i) {
- StringCchPrintf(col, COUNTOF(col), ((i == 0) ? L"%i" : L" %i"), edgeCol[i]);
+ StringCchPrintf(col, COUNTOF(col), ((i == 0) ? L"%i" : L" %i"), edgeColumns[i]);
StringCchCat(Settings.MultiEdgeLines, COUNTOF(Settings.MultiEdgeLines), col);
}
+ // make current too
+ StringCchCopy(Globals.fvCurFile.wchMultiEdgeLines, COUNTOF(Globals.fvCurFile.wchMultiEdgeLines), Settings.MultiEdgeLines);
- Style_SetMultiEdgeLine(Globals.hwndEdit, edgeCol, cnt);
+ Style_SetMultiEdgeLine(edgeColumns, cnt);
}
}
break;
@@ -5043,8 +5042,8 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
case IDM_VIEW_TABSASSPACES:
{
- Globals.fvCurFile.bTabsAsSpaces = !Globals.fvCurFile.bTabsAsSpaces;
- Settings.TabsAsSpaces = Globals.fvCurFile.bTabsAsSpaces;
+ Settings.TabsAsSpaces = !Settings.TabsAsSpaces;
+ Globals.fvCurFile.bTabsAsSpaces = Settings.TabsAsSpaces;
SciCall_SetUseTabs(!Globals.fvCurFile.bTabsAsSpaces);
}
break;
@@ -7962,7 +7961,7 @@ static void _UpdateToolbarDelayed()
EnableTool(Globals.hwndToolbar, IDT_FILE_SAVE, IsSaveNeeded(ISN_GET) /*&& !bReadOnly*/);
EnableTool(Globals.hwndToolbar, IDT_FILE_RECENT, (MRU_Count(Globals.pFileMRU) > 0));
- CheckTool(Globals.hwndToolbar, IDT_VIEW_WORDWRAP, Settings.WordWrap);
+ CheckTool(Globals.hwndToolbar, IDT_VIEW_WORDWRAP, Globals.fvCurFile.bWordWrap);
CheckTool(Globals.hwndToolbar, IDT_VIEW_CHASING_DOCTAIL, FileWatching.MonitoringLog);
CheckTool(Globals.hwndToolbar, IDT_VIEW_PIN_ON_TOP, Settings.AlwaysOnTop);
@@ -9297,7 +9296,7 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload,
SetDlgItemText(Globals.hwndMain,IDC_FILENAME,Globals.CurrentFile);
SetDlgItemInt(Globals.hwndMain,IDC_REUSELOCK,GetTickCount(),false);
if (!s_flagKeepTitleExcerpt) { StringCchCopy(s_wchTitleExcerpt, COUNTOF(s_wchTitleExcerpt), L""); }
- FileVars_Init(NULL,0,&Globals.fvCurFile);
+ FileVars_GetFromData(NULL,0,&Globals.fvCurFile); // init-reset
EditSetNewText(Globals.hwndEdit, "", 0, true);
@@ -9363,7 +9362,7 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload,
Globals.dwLastError = GetLastError();
fSuccess = (hFile != INVALID_HANDLE_VALUE);
if (fSuccess) {
- FileVars_Init(NULL,0,&Globals.fvCurFile);
+ FileVars_GetFromData(NULL,0,&Globals.fvCurFile); // init/reset
EditSetNewText(Globals.hwndEdit,"",0, true);
Style_SetDefaultLexer(Globals.hwndEdit);
SciCall_SetEOLMode(Settings.DefaultEOLMode);
@@ -9373,9 +9372,9 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload,
Encoding_HasChanged(fioStatus.iEncoding);
}
else {
- fioStatus.iEncoding = Settings.DefaultEncoding;
- Encoding_Current(Settings.DefaultEncoding);
- Encoding_HasChanged(Settings.DefaultEncoding);
+ fioStatus.iEncoding = Globals.fvCurFile.iEncoding;
+ Encoding_Current(Globals.fvCurFile.iEncoding);
+ Encoding_HasChanged(Globals.fvCurFile.iEncoding);
}
s_bFileReadOnly = false;
}
diff --git a/src/Styles.c b/src/Styles.c
index e7cca147e..ab88436cc 100644
--- a/src/Styles.c
+++ b/src/Styles.c
@@ -1332,12 +1332,9 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew)
StringCchCopy(pCurrentStandard->Styles[STY_CARET].szValue,
COUNTOF(pCurrentStandard->Styles[STY_CARET].szValue),wchSpecificStyle);
- size_t cnt = 0;
- int edgeCol[MIDSZ_BUFFER] = { L'\0' };
- if (Settings.MarkLongLines) {
- cnt = ReadVectorFromString(Settings.MultiEdgeLines, edgeCol, MIDSZ_BUFFER, 0, LONG_LINES_MARKER_LIMIT, 0, true);
- }
- Style_SetMultiEdgeLine(hwnd, edgeCol, cnt);
+ int edgeColumns[MIDSZ_BUFFER] = { 0 };
+ size_t const cnt = ReadVectorFromString(Globals.fvCurFile.wchMultiEdgeLines, edgeColumns, COUNTOF(edgeColumns), 0, LONG_LINES_MARKER_LIMIT, 0, true);
+ Style_SetMultiEdgeLine(edgeColumns, cnt);
Style_SetExtraLineSpace(hwnd, pCurrentStandard->Styles[STY_X_LN_SPACE].szValue,
COUNTOF(pCurrentStandard->Styles[STY_X_LN_SPACE].szValue));
@@ -1595,14 +1592,16 @@ void Style_SetReadonly(HWND hwnd, bool bReadonly)
//
// Style_SetLongLineEdge()
//
-void Style_SetMultiEdgeLine(HWND hwnd, const int colVec[], const size_t count)
+void Style_SetMultiEdgeLine(const int colVec[], const size_t count)
{
- UNUSED(hwnd);
COLORREF rgb;
- int const iLongLineLimit = (count > 0) ? colVec[count - 1] : Defaults.LongLinesLimit;
+ int const iLongLineLimit = (count > 0) ? colVec[count - 1] : Settings.LongLinesLimit;
int const mLongLineMode = (count > 1) ? EDGE_MULTILINE : Settings.LongLineMode;
+ Settings.LongLinesLimit = iLongLineLimit; // normalize
+ Globals.iWrapCol = iLongLineLimit; // long line limit should be explicit wrap column too
+
if (mLongLineMode == EDGE_BACKGROUND) {
if (!Style_StrGetColor(GetCurrentStdLexer()->Styles[STY_LONG_LN_MRK].szValue, BACKGROUND_LAYER, &rgb)) { // edge back
rgb = GetSysColor(COLOR_3DSHADOW);
@@ -2006,11 +2005,11 @@ bool Style_SetLexerFromFile(HWND hwnd,LPCWSTR lpszFile)
PEDITLEXER pLexNew = NULL;
PEDITLEXER pLexSniffed = NULL;
- if ((Globals.fvCurFile.mask & FV_MODE) && Globals.fvCurFile.tchMode[0]) {
+ if ((Globals.fvCurFile.mask & FV_MODE) && Globals.fvCurFile.chMode[0]) {
PEDITLEXER pLexMode;
WCHAR wchMode[MICRO_BUFFER] = { L'\0' };
- MultiByteToWideCharEx(Encoding_SciCP, 0, Globals.fvCurFile.tchMode, -1, wchMode, MICRO_BUFFER);
+ MultiByteToWideCharEx(Encoding_SciCP, 0, Globals.fvCurFile.chMode, -1, wchMode, MICRO_BUFFER);
if (!Flags.NoCGIGuess && (StringCchCompareNI(wchMode,COUNTOF(wchMode),L"cgi", CSTRLEN(L"cgi")) == 0 ||
StringCchCompareNI(wchMode,COUNTOF(wchMode),L"fcgi", CSTRLEN(L"fcgi")) == 0)) {
@@ -2679,8 +2678,7 @@ bool Style_StrGetAlpha(LPCWSTR lpszStyle, int* iOutValue, bool bAlpha1st)
*p = L'\0';
TrimSpcW(tch);
int iValue = 0;
- int itok = swscanf_s(tch, L"%i", &iValue);
- if (itok == 1) {
+ if (StrToIntEx(tch, STIF_DEFAULT, &iValue)) {
*iOutValue = clampi(iValue, SC_ALPHA_TRANSPARENT, SC_ALPHA_OPAQUE);
return true;
}
@@ -2703,7 +2701,8 @@ bool Style_StrGetAlpha(LPCWSTR lpszStyle, int* iOutValue, bool bAlpha1st)
// if (p)
// *p = L'\0';
// TrimStringW(tch);
-// if (1 == swscanf_s(tch, L"%i", val)) { return true; }
+// //if (1 == swscanf_s(tch, L"%i", val)) { return true; }
+// if (StrToIntEx(tch, STIF_DEFAULT, val)) { return true; }
// }
// return false;
//}
diff --git a/src/Styles.h b/src/Styles.h
index db4fe6c89..21c2a0af6 100644
--- a/src/Styles.h
+++ b/src/Styles.h
@@ -86,7 +86,7 @@ bool Style_SelectColor(HWND hwnd,bool,LPWSTR lpszStyle,int cchStyle,bool);
void Style_SetStyles(HWND hwnd,int iStyle,LPCWSTR lpszStyle,bool);
bool Style_IsCurLexerStandard();
float Style_GetBaseFontSize();
-void Style_SetMultiEdgeLine(HWND hwnd, const int colVec[], const size_t count);
+void Style_SetMultiEdgeLine(const int colVec[], const size_t count);
PEDITLEXER Style_GetCurrentLexerPtr();
int Style_GetCurrentLexerRID();
void Style_GetLexerDisplayName(PEDITLEXER pLexer, LPWSTR lpszName, int cchName);
diff --git a/src/TypeDefs.h b/src/TypeDefs.h
index a013a5d85..183647b3e 100644
--- a/src/TypeDefs.h
+++ b/src/TypeDefs.h
@@ -171,10 +171,10 @@ typedef struct _filevars
int iTabWidth;
int iIndentWidth;
int iWrapColumn;
- int iLongLinesLimit;
- char tchEncoding[64];
+ char chEncoding[64];
cpi_enc_t iEncoding;
- char tchMode[32];
+ char chMode[32];
+ WCHAR wchMultiEdgeLines[SMALL_BUFFER];
} FILEVARS, *LPFILEVARS;
@@ -327,7 +327,6 @@ typedef struct _globals_t
LPMRULIST pMRUreplace;
CALLTIPTYPE CallTipType;
FILEVARS fvCurFile;
- FILEVARS fvBackup;
int iWrapCol;
bool CmdLnFlag_PosParam;
diff --git a/src/VersionEx.h b/src/VersionEx.h
index 66994ae20..7f15c28b5 100644
--- a/src/VersionEx.h
+++ b/src/VersionEx.h
@@ -9,11 +9,11 @@
#define VERSION_MAJOR 5
#define VERSION_MINOR 20
#define VERSION_REV 421
-#define VERSION_BUILD 1
+#define VERSION_BUILD 2
#define SCINTILLA_VER 432
#define ONIGURUMA_REGEX_VER 6.9.5
#define UCHARDET_VER 2018.09.27
#define TINYEXPR_VER 2018.05.11
#define UTHASH_VER 2.1.0
#define VERSION_PATCH BETA
-#define VERSION_COMMIT_ID dkt1-amr
+#define VERSION_COMMIT_ID t7820-rk
diff --git a/test/test_files/StyleLexers/styleLexCPP/Notepad3.c b/test/test_files/StyleLexers/styleLexCPP/Notepad3.c
index a38087851..416f90ae4 100644
--- a/test/test_files/StyleLexers/styleLexCPP/Notepad3.c
+++ b/test/test_files/StyleLexers/styleLexCPP/Notepad3.c
@@ -1,6 +1,7 @@
-/******************************************************************************
-* *
+/******************************************************************************
* *
+* encoding: CP-437
+* fill-column: "3 17 31 53 77" *
* Notepad3 *
* *
* Notepad3.c *