From 1f7d90d6367010d32f77a536a246e8fed9b3d381 Mon Sep 17 00:00:00 2001 From: Kornel Benko Date: Fri, 8 Apr 2022 08:40:32 +0200 Subject: [PATCH] Find: Advanced + Quick: MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Expand list of quotes to include also '» « › ‹' Enable quick find to search for quotes too --- src/Paragraph.cpp | 27 +++++++++++++++++++++++---- src/lyxfind.cpp | 8 ++++---- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index be133b12c5..92bb883710 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -4560,6 +4560,23 @@ void Paragraph::changeCase(BufferParams const & bparams, pos_type pos, } } +static char_type matchquote(char_type in) +{ + switch (in) { + case 0x2018: + case 0x201a: + case 0x203a: + case 0x2039: + return '\''; // ‘ ‚ › ‹ + case 0x00bb: + case 0x00ab: + case 0x201e: + case 0x201c: + return '"'; // » « „ “ + default: + return in; + } +} int Paragraph::find(docstring const & str, bool cs, bool mw, pos_type start_pos, bool del) const @@ -4590,8 +4607,9 @@ int Paragraph::find(docstring const & str, bool cs, bool mw, if (!insetstring.empty()) { int const insetstringsize = insetstring.length(); for (int j = 0; j < insetstringsize && pos < parsize; ++i, ++j) { - if ((cs && str[i] != insetstring[j]) - || (!cs && uppercase(str[i]) != uppercase(insetstring[j]))) { + char_type ij = matchquote(insetstring[j]); + if ((cs && str[i] != ij) + || (!cs && uppercase(str[i]) != uppercase(ij))) { nonmatch = true; break; } @@ -4601,9 +4619,10 @@ int Paragraph::find(docstring const & str, bool cs, bool mw, } if (nonmatch || i == strsize) break; - if (cs && str[i] != d->text_[pos]) + char_type dp = matchquote(d->text_[pos]); + if (cs && str[i] != dp) break; - if (!cs && uppercase(str[i]) != uppercase(d->text_[pos])) + if (!cs && uppercase(str[i]) != uppercase(dp)) break; } diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp index 0f02a39916..c3f2b77929 100644 --- a/src/lyxfind.cpp +++ b/src/lyxfind.cpp @@ -913,10 +913,10 @@ string correctRegex(string t, bool withformat) else if (lastpos < t.length()) s += t.substr(lastpos, t.length() - lastpos); // Handle quotes in regex - // substitute all '„', '“' with '"' - // and all '‚', '‘' with "\'" - static std::regex plainquotes { R"(„|“)" }; - static std::regex innerquotes { R"(‚|‘)" }; + // substitute all '„', '“', '»', '«' with '"' + // and all '‚', '‘', '›', '‹' with "\'" + static std::regex plainquotes { R"(„|“|»|«)" }; + static std::regex innerquotes { R"(‚|‘|›|‹)" }; t = std::regex_replace(s, plainquotes, R"(")"); s = std::regex_replace(t, innerquotes, R"(')"); //LYXERR0("correctRegex output '" << s << "'"); -- 2.39.2