X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfind.cpp;h=0ec9fcb7a039208226b4b3d0858dbd4ab1d48666;hb=28be7d552f62cc02fa86d7f79201d089bfb2d7b5;hp=0ffb5b203c7b38893783f88b9bef897e0e90f1e5;hpb=6d05a96546c4704e325066e205631326951cb05a;p=lyx.git diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp index 0ffb5b203c..0ec9fcb7a0 100644 --- a/src/lyxfind.cpp +++ b/src/lyxfind.cpp @@ -672,23 +672,13 @@ string escape_for_regex(string s, bool match_latex) bool regex_replace(string const & s, string & t, string const & searchstr, string const & replacestr) { - LYXERR(Debug::FIND, "regex_replace() - s='" << s - << "', searchstr='" << searchstr - << "', replacestr='" << replacestr); -#if LYX_USE_STD_REGEX - // this is the default anyway lyx::regex e(searchstr, regex_constants::ECMAScript); -#else - // TBD: check - lyx::regex e(searchstr, regex_constants::ECMAScript); -#endif ostringstream oss; ostream_iterator it(oss); lyx::regex_replace(it, s.begin(), s.end(), e, replacestr); // tolerate t and s be references to the same variable bool rv = (s != oss.str()); t = oss.str(); - LYXERR(Debug::FIND, "regex_replace() - t='" << t << "', rv=" << rv); return rv; } @@ -1435,7 +1425,9 @@ static void changeFirstCase(Buffer & buffer, TextCase first_case, TextCase other static void findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, MatchStringAdv & matchAdv) { Cursor & cur = bv->cursor(); - if (opt.repl_buf_name == docstring()) + if (opt.repl_buf_name == docstring() + || theBufferList().getBuffer(FileName(to_utf8(opt.repl_buf_name)), true) == 0 + || theBufferList().getBuffer(FileName(to_utf8(opt.find_buf_name)), true) == 0) return; DocIterator sel_beg = cur.selectionBegin(); @@ -1522,6 +1514,11 @@ bool findAdv(BufferView * bv, FindAndReplaceOptions const & opt) DocIterator cur; int match_len = 0; + // e.g., when invoking word-findadv from mini-buffer wither with + // wrong options syntax or before ever opening advanced F&R pane + if (theBufferList().getBuffer(FileName(to_utf8(opt.find_buf_name)), true) == 0) + return false; + try { MatchStringAdv matchAdv(bv->buffer(), opt); int length = bv->cursor().selectionEnd().pos() - bv->cursor().selectionBegin().pos();