From 40d70ca9bb4722283965376c1dd5172b85af9f66 Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Fri, 13 Aug 2021 20:43:03 +0900 Subject: [PATCH 1/1] Fix issue #914: Unicode SMP chars misrendered after performing a find --- Externals/crystaledit/editlib/utils/cregexp_poco.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Externals/crystaledit/editlib/utils/cregexp_poco.cpp b/Externals/crystaledit/editlib/utils/cregexp_poco.cpp index 8ec68a9d6..2752f3091 100644 --- a/Externals/crystaledit/editlib/utils/cregexp_poco.cpp +++ b/Externals/crystaledit/editlib/utils/cregexp_poco.cpp @@ -101,8 +101,11 @@ int RxExec(RxNode *Regexp, LPCTSTR Data, size_t Len, LPCTSTR Start, RxMatchRes * for (i = 0; i < result; i++) { #ifdef UNICODE - Match->Open[i] = ucr::stringlen_of_utf8(compString.c_str(), ovector[i].offset); - Match->Close[i] = ucr::stringlen_of_utf8(compString.c_str(), ovector[i].offset + ovector[i].length); + std::wstring utf16str; + UnicodeConverter::toUTF16(std::string(compString.c_str(), ovector[i].offset), utf16str); + Match->Open[i] = utf16str.length(); + UnicodeConverter::toUTF16(std::string(compString.c_str() + ovector[i].offset, ovector[i].length), utf16str); + Match->Close[i] = Match->Open[i] + utf16str.length(); #else Match->Open[i] = ovector[i].offset; Match->Close[i] = ovector[i].offset + ovector[i].length; -- 2.11.0