diff --git a/Versions/build.txt b/Versions/build.txt index efa0ab6fc..807a3f99b 100644 --- a/Versions/build.txt +++ b/Versions/build.txt @@ -1 +1 @@ -2702 +2703 diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf index c71ecf643..584009b10 100644 --- a/res/Notepad3.exe.manifest.conf +++ b/res/Notepad3.exe.manifest.conf @@ -3,7 +3,7 @@ Notepad3 BETA diff --git a/scintilla/Scintilla.vcxproj b/scintilla/Scintilla.vcxproj index c5902afbf..e647cc559 100644 --- a/scintilla/Scintilla.vcxproj +++ b/scintilla/Scintilla.vcxproj @@ -121,7 +121,7 @@ true Disabled NotUsing - _WIN32_WINNT=0x601;WINVER=0x601;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_STATIC;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_STATIC;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) MultiThreadedDebug Level3 false @@ -146,7 +146,7 @@ true Disabled NotUsing - _WIN32_WINNT=0x601;WINVER=0x601;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_STATIC;_WIN64;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_STATIC;_WIN64;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) MultiThreadedDebug Level3 false @@ -170,7 +170,7 @@ true MaxSpeed NotUsing - _WIN32_WINNT=0x601;WINVER=0x601;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_STATIC;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_STATIC;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) MultiThreaded Level3 true @@ -193,7 +193,7 @@ true MaxSpeed NotUsing - _WIN32_WINNT=0x601;WINVER=0x601;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_STATIC;_WIN64;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_STATIC;_WIN64;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) MultiThreaded Level3 true diff --git a/scintilla/ScintillaDLL.vcxproj b/scintilla/ScintillaDLL.vcxproj index a8c9a36b1..2275b0274 100644 --- a/scintilla/ScintillaDLL.vcxproj +++ b/scintilla/ScintillaDLL.vcxproj @@ -121,7 +121,7 @@ true Disabled NotUsing - _SCL_SECURE_NO_WARNINGS;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_EXTERN=extern;SCINTILLA_DLL;NP3;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_EXTERN=extern;SCINTILLA_DLL;NP3;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 false @@ -149,7 +149,7 @@ true Disabled NotUsing - _SCL_SECURE_NO_WARNINGS;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_EXTERN=extern;SCINTILLA_DLL;NP3;_WIN64;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_EXTERN=extern;SCINTILLA_DLL;NP3;_WIN64;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 false @@ -176,7 +176,7 @@ true MaxSpeed NotUsing - _SCL_SECURE_NO_WARNINGS;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_EXTERN=extern;SCINTILLA_DLL;NP3;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_EXTERN=extern;SCINTILLA_DLL;NP3;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) MultiThreadedDLL Level3 true @@ -202,7 +202,7 @@ true MaxSpeed NotUsing - _SCL_SECURE_NO_WARNINGS;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_EXTERN=extern;SCINTILLA_DLL;NP3;_WIN64;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NO_CXX11_REGEX;SCI_OWNREGEX;ONIG_EXTERN=extern;SCINTILLA_DLL;NP3;_WIN64;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;SCI_LEXER;USE_D2D;%(PreprocessorDefinitions) MultiThreadedDLL Level3 true diff --git a/src/Edit.c b/src/Edit.c index 802bd992b..cb56123c6 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -1646,9 +1646,8 @@ void EditURLEncode(HWND hwnd) } DWORD cchEscapedW = (DWORD)cchEscaped; - DWORD const flags = (DWORD)(URL_ESCAPE_SEGMENT_ONLY | URL_ESCAPE_PERCENT | URL_ESCAPE_AS_UTF8); - UrlEscape(szTextW, pszEscapedW, &cchEscapedW, flags); + UrlEscapeEx(szTextW, pszEscapedW, &cchEscapedW); ptrdiff_t const cchEscapedEnc = WideCharToMultiByteEx(Encoding_SciCP, 0, pszEscapedW, cchEscapedW, pszEscaped, cchEscaped, NULL, NULL); @@ -1723,11 +1722,11 @@ void EditURLDecode(HWND hwnd) return; } - size_t cchUnescapedW = cchUnescaped; + DWORD cchUnescapedW = (DWORD)cchUnescaped; UrlUnescapeEx(pszTextW, pszUnescapedW, &cchUnescapedW); - ptrdiff_t const cchUnescapedDec = WideCharToMultiByteEx(Encoding_SciCP, 0, pszUnescapedW, cchUnescapedW, - pszUnescaped, cchUnescaped, NULL, NULL); + int const cchUnescapedDec = WideCharToMultiByte(Encoding_SciCP, 0, pszUnescapedW, cchUnescapedW, + pszUnescaped, (int)cchUnescaped, NULL, NULL); _BEGIN_UNDO_ACTION_ _IGNORE_NOTIFY_CHANGE_; diff --git a/src/Helpers.c b/src/Helpers.c index fce5788a5..334858224 100644 --- a/src/Helpers.c +++ b/src/Helpers.c @@ -20,6 +20,7 @@ #include #include +#include //#include @@ -2201,29 +2202,130 @@ VOID RestoreWndFromTray(HWND hWnd) // properly until DAR finished } +//============================================================================= +// +// UrlEscapeEx() +// + +#if (NTDDI_VERSION < NTDDI_WIN8) + +// no encoding for safe chars +inline bool isAlphaNumeric(WCHAR ch) { + return + ((ch >= L'0') && (ch <= L'9')) || + ((ch >= L'a') && (ch <= L'z')) || + ((ch >= L'A') && (ch <= L'Z')); +} + +// Convert a byte into Hexadecimal Unicode character +inline void toHEX(BYTE val, WCHAR* pOutChr) +{ + StringCchPrintfW(pOutChr, 4, L"%%%0.2X", val); +} + +// Convert a Unicode character into UTF8 +inline WORD toUTF8(WCHAR ch) +{ + WCHAR wc[2] = { L'\0', L'\0' }; + CHAR mb[3] = { '\0', '\0', '\0' }; + wc[0] = ch; + WideCharToMultiByte(CP_UTF8, 0, wc, 2, mb, 3, 0, 0); + return MAKEWORD(mb[1], mb[0]); +} + +// Convert a UTF8 character into Unicode +inline WCHAR fromUTF8(WORD w) +{ + WCHAR wc[2] = { L'\0', L'\0' }; + CHAR mb[3] = { '\0', '\0', '\0' }; + mb[0] = HIBYTE(w); + mb[1] = LOBYTE(w); + MultiByteToWideChar(CP_UTF8, 0, mb, 3, wc, 2); + return (WCHAR)wc[0]; +} + +LPCTSTR const lpszUnsafeChars = L"% \"<>#{}|\\^~[]`"; +LPCTSTR const lpszReservedChars = L"$&+,./:;=?@-_!*()'"; + +#endif + + +void UrlEscapeEx(LPCWSTR lpURL, LPWSTR lpEscaped, DWORD* pcchEscaped) +{ +#if (NTDDI_VERSION >= NTDDI_WIN8) + UrlEscape(lpURL, lpEscaped, pcchEscaped, (URL_ESCAPE_SEGMENT_ONLY | URL_ESCAPE_URI_COMPONENT)); +#else + //UrlEscape(lpURL, lpEscaped, pcchEscaped, (URL_ESCAPE_SEGMENT_ONLY | URL_ESCAPE_PERCENT | URL_ESCAPE_AS_UTF8)); + + DWORD posIn = 0; + DWORD posOut = 0; + + while (lpURL[posIn] && (posOut < *pcchEscaped)) + { + if (isAlphaNumeric(lpURL[posIn])) + { + lpEscaped[posOut++] = lpURL[posIn++]; + } + else if (StrChrW(lpszReservedChars, lpURL[posIn])) + { + if (posOut < (*pcchEscaped - 3)) { + toHEX(toascii(lpURL[posIn++]), &lpEscaped[posOut]); + posOut += 3; + } + } + else if (StrChrW(lpszUnsafeChars, lpURL[posIn])) + { + if (posOut < (*pcchEscaped - 3)) { + toHEX(toascii(lpURL[posIn++]), &lpEscaped[posOut]); + posOut += 3; + } + } + // Encode unprintable characters 0x00-0x1F, and 0x7F + else if ((lpURL[posIn] <= 0x1F) || (lpURL[posIn] == 0x7F)) + { + if (posOut < (*pcchEscaped - 3)) { + toHEX((BYTE)lpURL[posIn++], &lpEscaped[posOut]); + posOut += 3; + } + } + // Now encode all other unsafe characters + else { + WORD const w = toUTF8(lpURL[posIn++]); + if (posOut < (*pcchEscaped - 6)) { + toHEX(HIBYTE(w), &lpEscaped[posOut]); + posOut += 3; + toHEX(LOBYTE(w), &lpEscaped[posOut]); + posOut += 3; + } + } + } + lpEscaped[posOut] = L'\0'; + *pcchEscaped = posOut; +#endif +} //============================================================================= // // UrlUnescapeEx() // -void UrlUnescapeEx(LPWSTR lpURL, LPWSTR lpUnescaped, size_t* pcchUnescaped) +void UrlUnescapeEx(LPWSTR lpURL, LPWSTR lpUnescaped, DWORD* pcchUnescaped) { -#if defined(URL_UNESCAPE_AS_UTF8) +#if (NTDDI_VERSION >= NTDDI_WIN8) UrlUnescape(lpURL, lpUnescaped, pcchUnescaped, URL_UNESCAPE_AS_UTF8); #else char* outBuffer = AllocMem(*pcchUnescaped + 1, HEAP_ZERO_MEMORY); if (outBuffer == NULL) { return; } - size_t const outLen = *pcchUnescaped; + DWORD const outLen = *pcchUnescaped; - size_t posIn = 0; + DWORD posIn = 0; WCHAR buf[5] = { L'\0' }; - size_t lastEsc = StringCchLenW(lpURL,0) - 2; + DWORD lastEsc = (DWORD)StringCchLenW(lpURL,0) - 2; unsigned int code; - size_t posOut = 0; + DWORD posOut = 0; while ((posIn < lastEsc) && (posOut < outLen)) { bool bOk = false; @@ -2255,22 +2357,22 @@ void UrlUnescapeEx(LPWSTR lpURL, LPWSTR lpUnescaped, size_t* pcchUnescaped) } } } - // TODO(rkotten): HTML Hex encoded (&#x...) + if (!bOk) { - posOut += WideCharToMultiByteEx(Encoding_SciCP, 0, &(lpURL[posIn++]), 1, - &(outBuffer[posOut]), (outLen - posOut), NULL, NULL); + posOut += WideCharToMultiByte(Encoding_SciCP, 0, &lpURL[posIn++], 1, + &outBuffer[posOut], (int)(outLen - posOut), NULL, NULL); } } // copy rest while ((lpURL[posIn] != L'\0') && (posOut < outLen)) { - posOut += WideCharToMultiByteEx(Encoding_SciCP, 0, &(lpURL[posIn++]), 1, - &(outBuffer[posOut]), (outLen - posOut), NULL, NULL); + posOut += WideCharToMultiByte(Encoding_SciCP, 0, &lpURL[posIn++], 1, + &outBuffer[posOut], (int)(outLen - posOut), NULL, NULL); } outBuffer[posOut] = '\0'; - ptrdiff_t const iOut = MultiByteToWideCharEx(Encoding_SciCP, 0, outBuffer, -1, lpUnescaped, *pcchUnescaped); + DWORD const iOut = MultiByteToWideChar(Encoding_SciCP, 0, outBuffer, -1, lpUnescaped, (int)*pcchUnescaped); FreeMem(outBuffer); *pcchUnescaped = ((iOut > 0) ? (iOut - 1) : 0); diff --git a/src/Helpers.h b/src/Helpers.h index 1f79d9723..0460257a1 100644 --- a/src/Helpers.h +++ b/src/Helpers.h @@ -512,7 +512,8 @@ inline int GetHexDigit(char ch) { // ---------------------------------------------------------------------------- -void UrlUnescapeEx(LPWSTR lpURL, LPWSTR lpUnescaped, size_t* pcchUnescaped); +void UrlEscapeEx(LPCWSTR lpURL, LPWSTR lpEscaped, DWORD* pcchEscaped); +void UrlUnescapeEx(LPWSTR lpURL, LPWSTR lpUnescaped, DWORD* pcchUnescaped); int ReadStrgsFromCSV(LPCWSTR wchCSVStrg, prefix_t sMatrix[], int iCount, int iLen, LPCWSTR sDefault); int ReadVectorFromString(LPCWSTR wchStrg, int iVector[], int iCount, int iMin, int iMax, int iDefault); diff --git a/src/Notepad3.vcxproj b/src/Notepad3.vcxproj index 166447e2f..7dc345e66 100644 --- a/src/Notepad3.vcxproj +++ b/src/Notepad3.vcxproj @@ -109,7 +109,7 @@ false true Disabled - _WIN32_WINNT=0x601;WINVER=0x601;WIN32;STATIC_BUILD;SCI_LEXER;_DEBUG;DEBUG;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;WIN32;STATIC_BUILD;SCI_LEXER;_DEBUG;DEBUG;%(PreprocessorDefinitions) MultiThreadedDebug Level4 false @@ -173,7 +173,7 @@ false true Disabled - _WIN32_WINNT=0x601;WINVER=0x601;_WIN64;STATIC_BUILD;SCI_LEXER;_DEBUG;DEBUG;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_WIN64;STATIC_BUILD;SCI_LEXER;_DEBUG;DEBUG;%(PreprocessorDefinitions) MultiThreadedDebug Level4 false @@ -233,7 +233,7 @@ .\;..\scintilla\include;..\scintilla\lexlib;..\scintilla\src;..\sciXlexers;..\ced\ced;..\uchardet;%(AdditionalIncludeDirectories) true MaxSpeed - _WIN32_WINNT=0x601;WINVER=0x601;WIN32;STATIC_BUILD;SCI_LEXER;NDEBUG;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;WIN32;STATIC_BUILD;SCI_LEXER;NDEBUG;%(PreprocessorDefinitions) MultiThreaded Level4 None @@ -301,7 +301,7 @@ .\;..\scintilla\include;..\scintilla\lexlib;..\scintilla\src;..\sciXlexers;..\ced\ced;..\uchardet;%(AdditionalIncludeDirectories) true MaxSpeed - _WIN32_WINNT=0x601;WINVER=0x601;_WIN64;STATIC_BUILD;SCI_LEXER;NDEBUG;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_WIN64;STATIC_BUILD;SCI_LEXER;NDEBUG;%(PreprocessorDefinitions) MultiThreaded Level4 None diff --git a/src/Notepad3DLL.vcxproj b/src/Notepad3DLL.vcxproj index 66fdc189b..6ac1c213f 100644 --- a/src/Notepad3DLL.vcxproj +++ b/src/Notepad3DLL.vcxproj @@ -109,7 +109,7 @@ false true Disabled - _WIN32_WINNT=0x601;WINVER=0x601;WIN32;STATIC_BUILD;SCI_LEXER;_DEBUG;DEBUG;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;WIN32;STATIC_BUILD;SCI_LEXER;_DEBUG;DEBUG;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level4 false @@ -173,7 +173,7 @@ false true Disabled - _WIN32_WINNT=0x601;WINVER=0x601;_WIN64;STATIC_BUILD;SCI_LEXER;_DEBUG;DEBUG;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_WIN64;STATIC_BUILD;SCI_LEXER;_DEBUG;DEBUG;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level4 false @@ -233,7 +233,7 @@ .\;..\scintilla\include;..\scintilla\lexlib;..\scintilla\src;..\sciXlexers;..\ced\ced;..\uchardet;%(AdditionalIncludeDirectories) true MaxSpeed - _WIN32_WINNT=0x601;WINVER=0x601;WIN32;STATIC_BUILD;SCI_LEXER;NDEBUG;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;WIN32;STATIC_BUILD;SCI_LEXER;NDEBUG;%(PreprocessorDefinitions) MultiThreadedDLL Level4 None @@ -301,7 +301,7 @@ .\;..\scintilla\include;..\scintilla\lexlib;..\scintilla\src;..\sciXlexers;..\ced\ced;..\uchardet;%(AdditionalIncludeDirectories) true MaxSpeed - _WIN32_WINNT=0x601;WINVER=0x601;_WIN64;STATIC_BUILD;SCI_LEXER;NDEBUG;%(PreprocessorDefinitions) + _WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_WIN64;STATIC_BUILD;SCI_LEXER;NDEBUG;%(PreprocessorDefinitions) MultiThreadedDLL Level4 None diff --git a/src/VersionEx.h b/src/VersionEx.h index 0c3922029..a49c86667 100644 --- a/src/VersionEx.h +++ b/src/VersionEx.h @@ -8,8 +8,8 @@ #define SAPPNAME "Notepad3" #define VERSION_MAJOR 5 #define VERSION_MINOR 20 -#define VERSION_REV 110 -#define VERSION_BUILD 2702 +#define VERSION_REV 113 +#define VERSION_BUILD 2703 #define SCINTILLA_VER 423 #define ONIGURUMA_REGEX_VER 6.9.4 #define UCHARDET_VER 2018.09.27