if (at_begin &&
(opt.restr == FindAndReplaceOptions::R_ONLY_MATHS && !cur.inMathed()) )
return 0;
+
docstring docstr = stringifyFromForSearch(opt, cur, len);
- LYXERR(Debug::FIND, "Matching against '" << lyx::to_utf8(docstr) << "'");
string str = normalize(docstr, true);
+ LYXERR(Debug::FIND, "Matching against '" << lyx::to_utf8(docstr) << "'");
LYXERR(Debug::FIND, "After normalization: '" << str << "'");
- if (! use_regexp) {
- LYXERR(Debug::FIND, "Searching in normal mode: par_as_string='" << par_as_string << "', str='" << str << "'");
- LYXERR(Debug::FIND, "Searching in normal mode: lead_as_string='" << lead_as_string << "', par_as_string_nolead='" << par_as_string_nolead << "'");
- if (at_begin) {
- LYXERR(Debug::FIND, "size=" << par_as_string.size() << ", substr='" << str.substr(0, par_as_string.size()) << "'");
- if (str.substr(0, par_as_string.size()) == par_as_string)
- return par_as_string.size();
- } else {
- size_t pos = str.find(par_as_string_nolead);
- if (pos != string::npos)
- return par_as_string.size();
- }
- } else {
+
+ if (use_regexp) {
LYXERR(Debug::FIND, "Searching in regexp mode: at_begin=" << at_begin);
- // Try all possible regexp matches,
- //until one that verifies the braces match test is found
regex const & p_regexp = at_begin ? regexp : regexp2;
sregex_iterator re_it(str.begin(), str.end(), p_regexp);
match_results<string::const_iterator> const & m = *re_it;
+
// Check braces on the segment that matched the entire regexp expression,
// plus the last subexpression, if a (.*?) was inserted in the constructor.
if (!braces_match(m[0].first, m[0].second, open_braces))
return 0;
+
// Check braces on segments that matched all (.*?) subexpressions,
// except the last "padding" one inserted by lyx.
for (size_t i = 1; i < m.size() - 1; ++i)
if (!braces_match(m[i].first, m[i].second))
return false;
+
// Exclude from the returned match length any length
// due to close wildcards added at end of regexp
if (close_wildcards == 0)
return m[0].second - m[0].first;
- else
- return m[m.size() - close_wildcards].first - m[0].first;
+
+ return m[m.size() - close_wildcards].first - m[0].first;
+ }
+
+ // else !use_regexp: but all code paths above return
+ LYXERR(Debug::FIND, "Searching in normal mode: par_as_string='"
+ << par_as_string << "', str='" << str << "'");
+ LYXERR(Debug::FIND, "Searching in normal mode: lead_as_string='"
+ << lead_as_string << "', par_as_string_nolead='"
+ << par_as_string_nolead << "'");
+
+ if (at_begin) {
+ LYXERR(Debug::FIND, "size=" << par_as_string.size()
+ << ", substr='" << str.substr(0, par_as_string.size()) << "'");
+ if (str.substr(0, par_as_string.size()) == par_as_string)
+ return par_as_string.size();
+ } else {
+ size_t pos = str.find(par_as_string_nolead);
+ if (pos != string::npos)
+ return par_as_string.size();
}
return 0;
}
LYXERR(Debug::FIND, "Latexified replace_buffer: '" << repl_latex << "'");
string s;
// false positive from coverity
- // coverity[CHECKED_RETURN]
+ // coverity[check_return]
regex_replace(to_utf8(repl_latex), s, "\\$(.*)\\$", "$1");
+ // coverity[check_return]
regex_replace(s, s, "\\\\\\[(.*)\\\\\\]", "$1");
repl_latex = from_utf8(s);
LYXERR(Debug::FIND, "Replacing by insert()ing latex: '" << repl_latex << "' cur=" << cur << " with depth=" << cur.depth());