#include "buffer_funcs.h"
#include "BufferView.h"
#include "Changes.h"
-#include "debug.h"
#include "FuncRequest.h"
-#include "gettext.h"
#include "Text.h"
#include "Paragraph.h"
#include "ParIterator.h"
#include "frontends/alert.h"
#include "support/convert.h"
+#include "support/debug.h"
#include "support/docstream.h"
+#include "support/gettext.h"
#include "support/lstrings.h"
-namespace lyx {
-
-using support::compare_no_case;
-using support::uppercase;
-using support::split;
-
-using std::advance;
+using namespace std;
+using namespace lyx::support;
+namespace lyx {
namespace {
}
-class MatchString : public std::binary_function<Paragraph, pos_type, bool>
+class MatchString : public binary_function<Paragraph, pos_type, bool>
{
public:
MatchString(docstring const & str, bool cs, bool mw)
if (!searchAllowed(bv, searchstr) || buf.isReadonly())
return 0;
- bv->cursor().recordUndoFullDocument();
-
MatchString const match(searchstr, cs, mw);
int num = 0;
int const rsize = replacestr.size();
int const ssize = searchstr.size();
- DocIterator cur = doc_iterator_begin(buf.inset());
+ Cursor cur(*bv);
+ cur.setCursor(doc_iterator_begin(buf.inset()));
while (findForward(cur, match, false)) {
pos_type pos = cur.pos();
Font const font
= cur.paragraph().getFontSettings(buf.params(), pos);
+ cur.recordUndo();
int striked = ssize - cur.paragraph().eraseChars(pos, pos + ssize,
buf.params().trackChanges);
cur.paragraph().insert(pos, replacestr, font,
cap::replaceSelectionWithString(cur, replacestr, fw);
bv->buffer().markDirty();
find(bv, searchstr, cs, mw, fw, false);
+ bv->buffer().updateMacros();
bv->processUpdateFlags(Update::Force | Update::FitCursor);
return 1;
}
-void find(BufferView * bv, FuncRequest const & ev)
+bool find(BufferView * bv, FuncRequest const & ev)
{
if (!bv || ev.action != LFUN_WORD_FIND)
- return;
+ return false;
- //lyxerr << "find called, cmd: " << ev << std::endl;
+ //lyxerr << "find called, cmd: " << ev << endl;
// data is of the form
// "<search>
bool matchword = parse_bool(howto);
bool forward = parse_bool(howto);
- bool const found = find(bv, search,
- casesensitive, matchword, forward);
-
- if (!found)
- // emit message signal.
- bv->message(_("String not found!"));
+ return find(bv, search, casesensitive, matchword, forward);
}
} else {
// if we have deleted characters, we do not replace at all, but
// rather search for the next occurence
- bool const found = find(bv, search,
- casesensitive, matchword, forward);
-
- if (!found)
- // emit message signal.
+ if (find(bv, search, casesensitive, matchword, forward))
+ bv->showCursor();
+ else
bv->message(_("String not found!"));
}
}