From 86c66bba90cc3f49323cdcae77173099122c75dc Mon Sep 17 00:00:00 2001 From: Udo Hoffmann Date: Sat, 27 Mar 2021 17:58:54 +0100 Subject: [PATCH] Improve character case handling in RegEx Fix #9636, close #9707 --- scintilla/boostregex/BoostRegExSearch.cxx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scintilla/boostregex/BoostRegExSearch.cxx b/scintilla/boostregex/BoostRegExSearch.cxx index a53aa2052..afd3853a1 100644 --- a/scintilla/boostregex/BoostRegExSearch.cxx +++ b/scintilla/boostregex/BoostRegExSearch.cxx @@ -304,10 +304,12 @@ Sci::Position BoostRegexSearch::FindText(Document* doc, Sci::Position startPosit ); search._skip_windows_line_end_as_one_character = (sciSearchFlags & SCFIND_REGEXP_SKIPCRLFASONE) != 0; + std::locale l = std::locale::global(std::locale("")); Match match = isUtf8 ? _utf8.FindText(search) : _ansi.FindText(search); - + std::locale::global(l); + if (match.found()) { *lengthRet = match.length(); @@ -414,7 +416,9 @@ void BoostRegexSearch::EncodingDependent::compileRegex { if (_lastCompileFlags != compileFlags || _lastRegexString != regex) { + std::locale l = std::locale(""); _regex = Regex(CharTPtr(regex), static_cast(compileFlags)); + std::locale::global(l); _lastRegexString = regex; _lastCompileFlags = compileFlags; } @@ -444,9 +448,11 @@ bool BoostRegexSearch::SearchParameters::isLineEnd(Sci::Position position) const char *BoostRegexSearch::SubstituteByPosition(Document* doc, const char *text, Sci::Position *length) { delete[] _substituted; + std::locale l = std::locale::global(std::locale("")); _substituted = (doc->CodePage() == SC_CP_UTF8) ? _utf8.SubstituteByPosition(text, length) : _ansi.SubstituteByPosition(text, length); + std::locale::global(l); return _substituted; }