#include "support/convert.h"
#include "support/debug.h"
#include "support/docstream.h"
+#include "support/FileName.h"
#include "support/gettext.h"
#include "support/lassert.h"
#include "support/lstrings.h"
}
-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()) {
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);
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."));
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();
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)) {
}
}
- // 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 {
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;
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
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
<< ", 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;
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))
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)