]> git.lyx.org Git - lyx.git/blobdiff - src/lyxfind.cpp
Provide proper fallback if a bibliography processor is not found
[lyx.git] / src / lyxfind.cpp
index d789c0126250a86905706e113ea441ac9bf63665..51f1b90a72050ce6904fd8c38e72e5a7388298a3 100644 (file)
@@ -303,7 +303,7 @@ pair<bool, int> replaceOne(BufferView * bv, docstring searchstr,
        return make_pair(true, 1);
 }
 
-} // namespace anon
+} // namespace
 
 
 docstring const find2string(docstring const & search,
@@ -517,7 +517,7 @@ bool findChange(BufferView * bv, bool forward)
        return selectChange(cur, forward);
 }
 
-}
+} // namespace
 
 bool findNextChange(BufferView * bv)
 {
@@ -978,13 +978,13 @@ int MatchStringAdv::findAux(DocIterator const & cur, int len, bool at_begin) con
                // 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)
@@ -1099,16 +1099,17 @@ docstring stringifyFromCursor(DocIterator const & cur, int len)
                        AS_STR_INSETS | AS_STR_SKIPDELETE | AS_STR_PLAINTEXT,
                        &runparams);
        } else if (cur.inMathed()) {
-               docstring s;
                CursorSlice cs = cur.top();
                MathData md = cs.cell();
                MathData::const_iterator it_end =
                        (( len == -1 || cs.pos() + len > int(md.size()))
                         ? md.end()
                         : md.begin() + cs.pos() + len );
+               MathData md2;
                for (MathData::const_iterator it = md.begin() + cs.pos();
                     it != it_end; ++it)
-                       s = s + asString(*it);
+                       md2.push_back(*it);
+               docstring s = asString(md2);
                LYXERR(Debug::FIND, "Stringified math: '" << s << "'");
                return s;
        }
@@ -1162,9 +1163,11 @@ docstring latexifyFromCursor(DocIterator const & cur, int len)
                        ((len == -1 || cs.pos() + len > int(md.size()))
                         ? md.end()
                         : md.begin() + cs.pos() + len);
+               MathData md2;
                for (MathData::const_iterator it = md.begin() + cs.pos();
                     it != it_end; ++it)
-                       ods << asString(*it);
+                       md2.push_back(*it);
+               ods << asString(md2);
 
                // Retrieve the math environment type, and add '$' or '$]'
                // or others (\end{equation}) accordingly
@@ -1338,7 +1341,7 @@ int findBackwardsAdv(DocIterator & cur, MatchStringAdv & match)
 }
 
 
-} // anonym namespace
+} // namespace
 
 
 docstring stringifyFromForSearch(FindAndReplaceOptions const & opt,
@@ -1419,13 +1422,15 @@ static void changeFirstCase(Buffer & buffer, TextCase first_case, TextCase other
        pit->changeCase(buffer.params(), pos_type(1), right, others_case);
 }
 
-} // anon namespace
+} // namespace
 
 ///
 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();
@@ -1450,6 +1455,7 @@ static void findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, M
        repl_buffer_orig.write(oss);
        string lyx = oss.str();
        Buffer repl_buffer("", false);
+       repl_buffer.setInternal(true);
        repl_buffer.setUnnamed(true);
        LASSERT(repl_buffer.readString(lyx), return);
        if (opt.keep_case && sel_len >= 2) {
@@ -1461,7 +1467,7 @@ static void findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, M
                                changeFirstCase(repl_buffer, text_uppercase, text_uppercase);
                }
        }
-       cap::cutSelection(cur, false, false);
+       cap::cutSelection(cur, false);
        if (cur.inTexted()) {
                repl_buffer.changeLanguage(
                        repl_buffer.language(),
@@ -1514,7 +1520,7 @@ bool findAdv(BufferView * bv, FindAndReplaceOptions const & opt)
 
        // 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))) == 0)
+       if (theBufferList().getBuffer(FileName(to_utf8(opt.find_buf_name)), true) == 0)
                return false;
 
        try {
@@ -1610,4 +1616,4 @@ istringstream & operator>>(istringstream & is, FindAndReplaceOptions & opt)
        return is;
 }
 
-} // lyx namespace
+} // namespace lyx