Find: Advanced + Quick:

Expand list of quotes to include also '» « › ‹'
Enable quick find to search for quotes too
This commit is contained in:
Kornel Benko 2022-04-08 08:40:32 +02:00
parent aa66663364
commit 1f7d90d636
2 changed files with 27 additions and 8 deletions

View File

@ -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, int Paragraph::find(docstring const & str, bool cs, bool mw,
pos_type start_pos, bool del) const pos_type start_pos, bool del) const
@ -4590,8 +4607,9 @@ int Paragraph::find(docstring const & str, bool cs, bool mw,
if (!insetstring.empty()) { if (!insetstring.empty()) {
int const insetstringsize = insetstring.length(); int const insetstringsize = insetstring.length();
for (int j = 0; j < insetstringsize && pos < parsize; ++i, ++j) { for (int j = 0; j < insetstringsize && pos < parsize; ++i, ++j) {
if ((cs && str[i] != insetstring[j]) char_type ij = matchquote(insetstring[j]);
|| (!cs && uppercase(str[i]) != uppercase(insetstring[j]))) { if ((cs && str[i] != ij)
|| (!cs && uppercase(str[i]) != uppercase(ij))) {
nonmatch = true; nonmatch = true;
break; break;
} }
@ -4601,9 +4619,10 @@ int Paragraph::find(docstring const & str, bool cs, bool mw,
} }
if (nonmatch || i == strsize) if (nonmatch || i == strsize)
break; break;
if (cs && str[i] != d->text_[pos]) char_type dp = matchquote(d->text_[pos]);
if (cs && str[i] != dp)
break; break;
if (!cs && uppercase(str[i]) != uppercase(d->text_[pos])) if (!cs && uppercase(str[i]) != uppercase(dp))
break; break;
} }

View File

@ -913,10 +913,10 @@ string correctRegex(string t, bool withformat)
else if (lastpos < t.length()) else if (lastpos < t.length())
s += t.substr(lastpos, t.length() - lastpos); s += t.substr(lastpos, t.length() - lastpos);
// Handle quotes in regex // Handle quotes in regex
// substitute all '„', '“' with '"' // substitute all '„', '“', '»', '«' with '"'
// and all '', '' with "\'" // and all '', '', '', '' with "\'"
static std::regex plainquotes { R"(„|“)" }; static std::regex plainquotes { R"(„|“|»|«)" };
static std::regex innerquotes { R"(|)" }; static std::regex innerquotes { R"(|||)" };
t = std::regex_replace(s, plainquotes, R"(")"); t = std::regex_replace(s, plainquotes, R"(")");
s = std::regex_replace(t, innerquotes, R"(')"); s = std::regex_replace(t, innerquotes, R"(')");
//LYXERR0("correctRegex output '" << s << "'"); //LYXERR0("correctRegex output '" << s << "'");