mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-24 13:48:59 +00:00
Try to make findadv more robust if not ignoring format
If searching for instance '.+' , the found string expanded to the end of search buffer. So we have to replace '.' with '[^\}]'. Also all constructs like '[^abc]' had to be changed to '[^abc\}]' to not go behind the actual format. There is still problem using '*', but constructs usin '+' seem to work now. ('.*' finds everything from first char in correct format to (including) end of next format change while '.+' find _only_ characters in correct format)
This commit is contained in:
parent
cab46ff9d1
commit
ded0dc4c1c
@ -929,6 +929,20 @@ MatchStringAdv::MatchStringAdv(lyx::Buffer & buf, FindAndReplaceOptions const &
|
|||||||
) {
|
) {
|
||||||
++close_wildcards;
|
++close_wildcards;
|
||||||
}
|
}
|
||||||
|
if (!opt.ignoreformat) {
|
||||||
|
// Remove extra '}' at end
|
||||||
|
regex_replace(par_as_string, par_as_string, "(.*)\\\\}$", "$1");
|
||||||
|
// save '\.'
|
||||||
|
regex_replace(par_as_string, par_as_string, "\\\\\\.", "_xxbdotxx_");
|
||||||
|
// handle '.' -> '[^]', replace later as '[^\}]'
|
||||||
|
regex_replace(par_as_string, par_as_string, "\\.", "[^]");
|
||||||
|
// replace '[^...]' with '[^...\}]'
|
||||||
|
regex_replace(par_as_string, par_as_string, "\\[\\^([^\\\\\\]]*)\\]", "_xxbrlxx_$1\\}_xxbrrxx_");
|
||||||
|
regex_replace(par_as_string, par_as_string, "_xxbrlxx_", "[^");
|
||||||
|
regex_replace(par_as_string, par_as_string, "_xxbrrxx_", "]");
|
||||||
|
// restore '\.'
|
||||||
|
regex_replace(par_as_string, par_as_string, "_xxbdotxx_", "\\.");
|
||||||
|
}
|
||||||
LYXERR(Debug::FIND, "par_as_string now is '" << par_as_string << "'");
|
LYXERR(Debug::FIND, "par_as_string now is '" << par_as_string << "'");
|
||||||
LYXERR(Debug::FIND, "Open braces: " << open_braces);
|
LYXERR(Debug::FIND, "Open braces: " << open_braces);
|
||||||
LYXERR(Debug::FIND, "Close .*? : " << close_wildcards);
|
LYXERR(Debug::FIND, "Close .*? : " << close_wildcards);
|
||||||
@ -974,10 +988,12 @@ int MatchStringAdv::findAux(DocIterator const & cur, int len, bool at_begin) con
|
|||||||
return 0;
|
return 0;
|
||||||
match_results<string::const_iterator> const & m = *re_it;
|
match_results<string::const_iterator> const & m = *re_it;
|
||||||
|
|
||||||
// Check braces on the segment that matched the entire regexp expression,
|
if (0) { // Kornel Benko: DO NOT CHECKK
|
||||||
// plus the last subexpression, if a (.*?) was inserted in the constructor.
|
// Check braces on the segment that matched the entire regexp expression,
|
||||||
if (!braces_match(m[0].first, m[0].second, open_braces))
|
// plus the last subexpression, if a (.*?) was inserted in the constructor.
|
||||||
return 0;
|
if (!braces_match(m[0].first, m[0].second, open_braces))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Check braces on segments that matched all (.*?) subexpressions,
|
// Check braces on segments that matched all (.*?) subexpressions,
|
||||||
// except the last "padding" one inserted by lyx.
|
// except the last "padding" one inserted by lyx.
|
||||||
|
Loading…
Reference in New Issue
Block a user