]> git.lyx.org Git - lyx.git/blobdiff - src/lyxfind.cpp
Natbib authoryear uses (Ref1; Ref2) by default.
[lyx.git] / src / lyxfind.cpp
index e74401693d87650b5ac47b4abed8a60fa8280338..36b663e5e372536b6e8bf7a2d40c40ac6a674836 100644 (file)
@@ -121,23 +121,6 @@ int findBackwards(DocIterator & cur, MatchString const & match,
 }
 
 
-bool findChange(DocIterator & cur, bool next)
-{
-       if (!next)
-               cur.backwardPos();
-       for (; cur; next ? cur.forwardPos() : cur.backwardPos())
-               if (cur.inTexted() && cur.paragraph().isChanged(cur.pos())) {
-                       if (!next)
-                               // if we search backwards, take a step forward
-                               // to correctly set the anchor
-                               cur.forwardPos();
-                       return true;
-               }
-
-       return false;
-}
-
-
 bool searchAllowed(docstring const & str)
 {
        if (str.empty()) {
@@ -280,7 +263,8 @@ pair<bool, int> replaceOne(BufferView * bv, docstring searchstr,
        cap::replaceSelectionWithString(cur, replacestr);
        if (forward) {
                cur.pos() += replacestr.length();
-               LASSERT(cur.pos() <= cur.lastpos(), /* */);
+               LASSERT(cur.pos() <= cur.lastpos(),
+                       cur.pos() = cur.lastpos());
        }
        if (findnext)
                findOne(bv, searchstr, case_sens, whole, forward, false);
@@ -379,7 +363,7 @@ bool lyxreplace(BufferView * bv,
                Buffer const & buf = bv->buffer();
                if (!update) {
                        // emit message signal.
-                       buf.message(_("String not found!"));
+                       buf.message(_("String not found."));
                } else {
                        if (replace_count == 0) {
                                buf.message(_("String found."));
@@ -397,40 +381,41 @@ bool lyxreplace(BufferView * bv,
                if (findOne(bv, search, casesensitive, matchword, forward))
                        update = true;
                else
-                       bv->message(_("String not found!"));
+                       bv->message(_("String not found."));
        }
        return update;
 }
 
 
-bool findNextChange(BufferView * bv)
+namespace {
+bool findChange(DocIterator & cur, bool next)
 {
-       return findChange(bv, true);
-}
-
+       if (!next)
+               cur.backwardPos();
+       for (; cur; next ? cur.forwardPos() : cur.backwardPos())
+               if (cur.inTexted() && cur.paragraph().isChanged(cur.pos())) {
+                       if (!next)
+                               // if we search backwards, take a step forward
+                               // to correctly set the anchor
+                               cur.forwardPos();
+                       return true;
+               }
 
-bool findPreviousChange(BufferView * bv)
-{
-       return findChange(bv, false);
+       return false;
 }
 
 
 bool findChange(BufferView * bv, bool next)
 {
-       if (bv->cursor().selection()) {
-               // set the cursor at the beginning or at the end of the selection
-               // before searching. Otherwise, the current change will be found.
-               if (next != (bv->cursor().top() > bv->cursor().normalAnchor()))
-                       bv->cursor().setCursorToAnchor();
-       }
-
-       DocIterator cur = bv->cursor();
+       Cursor cur(*bv);
+       cur.setCursor(next ? bv->cursor().selectionEnd()
+                     : bv->cursor().selectionBegin());
 
        // Are we within a change ? Then first search forward (backward),
        // clear the selection and search the other way around (see the end
        // of this function). This will avoid changes to be selected half.
        bool search_both_sides = false;
-       DocIterator tmpcur = cur;
+       Cursor tmpcur = cur;
        // Leave math first
        while (tmpcur.inMathed())
                tmpcur.pop_back();
@@ -449,24 +434,24 @@ bool findChange(BufferView * bv, bool next)
        if (!findChange(cur, next))
                return false;
 
-       bv->cursor().setCursor(cur);
-       bv->cursor().resetAnchor();
+       bv->mouseSetCursor(cur, false);
+
+       CursorSlice & tip = cur.top();
 
        if (!next)
                // take a step into the change
-               cur.backwardPos();
+               tip.backwardPos();
 
-       Change orig_change = cur.paragraph().lookupChange(cur.pos());
+       Change orig_change = tip.paragraph().lookupChange(tip.pos());
 
-       CursorSlice & tip = cur.top();
        if (next) {
-               for (; !tip.at_end(); tip.forwardPos()) {
+               for (; tip.pit() < tip.lastpit() || tip.pos() < tip.lastpos(); tip.forwardPos()) {
                        Change change = tip.paragraph().lookupChange(tip.pos());
                        if (!change.isSimilarTo(orig_change))
                                break;
                }
        } else {
-               for (; !tip.at_begin();) {
+               for (; tip.pit() > 0 || tip.pos() > 0;) {
                        tip.backwardPos();
                        Change change = tip.paragraph().lookupChange(tip.pos());
                        if (!change.isSimilarTo(orig_change)) {
@@ -477,17 +462,30 @@ bool findChange(BufferView * bv, bool next)
                }
        }
 
-       // Now put cursor to end of selection:
-       bv->cursor().setCursor(cur);
-       bv->cursor().setSelection();
-
-       if (search_both_sides) {
-               bv->cursor().setSelection(false);
+       if (!search_both_sides) {
+               // Now set the selection.
+               bv->mouseSetCursor(cur, true);
+       } else {
+               bv->mouseSetCursor(cur, false);
                findChange(bv, !next);
        }
 
        return true;
 }
+}
+
+
+bool findNextChange(BufferView * bv)
+{
+       return findChange(bv, true);
+}
+
+
+bool findPreviousChange(BufferView * bv)
+{
+       return findChange(bv, false);
+}
+
 
 namespace {
 
@@ -1063,7 +1061,7 @@ docstring latexifyFromCursor(DocIterator const & cur, int len)
        LYXERR(Debug::FIND, "  with cur.lastpost=" << cur.lastpos() << ", cur.lastrow="
               << cur.lastrow() << ", cur.lastcol=" << cur.lastcol());
        Buffer const & buf = *cur.buffer();
-       LASSERT(buf.params().isLatex(), /* */);
+       LBUFERR(buf.params().isLatex());
 
        TexRow texrow;
        odocstringstream ods;
@@ -1140,7 +1138,7 @@ int findAdvFinalize(DocIterator & cur, MatchStringAdv const & match)
                cur.forwardPos();
        } while (cur && cur.depth() > d && match(cur) > 0);
        cur = old_cur;
-       LASSERT(match(cur) > 0, /* */);
+       LASSERT(match(cur) > 0, return 0);
        LYXERR(Debug::FIND, "Ok");
 
        // Compute the match length
@@ -1284,7 +1282,8 @@ int findBackwardsAdv(DocIterator & cur, MatchStringAdv & match)
 docstring stringifyFromForSearch(FindAndReplaceOptions const & opt,
                                 DocIterator const & cur, int len)
 {
-       LASSERT(cur.pos() >= 0 && cur.pos() <= cur.lastpos(), /* */);
+       LASSERT(cur.pos() >= 0 && cur.pos() <= cur.lastpos(),
+               return docstring());
        if (!opt.ignoreformat)
                return latexifyFromCursor(cur, len);
        else
@@ -1369,7 +1368,7 @@ static void findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, M
               << ", sel_len: " << sel_len << endl);
        if (sel_len == 0)
                return;
-       LASSERT(sel_len > 0, /**/);
+       LASSERT(sel_len > 0, return);
 
        if (!matchAdv(sel_beg, sel_len))
                return;
@@ -1381,7 +1380,7 @@ static void findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, M
        string lyx = oss.str();
        Buffer repl_buffer("", false);
        repl_buffer.setUnnamed(true);
-       LASSERT(repl_buffer.readString(lyx), /**/);
+       LASSERT(repl_buffer.readString(lyx), return);
        if (opt.keep_case && sel_len >= 2) {
                if (cur.inTexted()) {
                        if (firstUppercase(cur))
@@ -1445,6 +1444,9 @@ bool findAdv(BufferView * bv, FindAndReplaceOptions const & opt)
 
        try {
                MatchStringAdv matchAdv(bv->buffer(), opt);
+               int length = bv->cursor().selectionEnd().pos() - bv->cursor().selectionBegin().pos();
+               if (length > 0)
+                       bv->putSelectionAt(bv->cursor().selectionBegin(), length, !opt.forward);
                findAdvReplace(bv, opt, matchAdv);
                cur = bv->cursor();
                if (opt.forward)