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<char, char> 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;
}
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();
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();