X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfind.cpp;h=bb53c35854739da4d9138dd7785bcdb38430b352;hb=9337d73f1f9a6d4dae2e239e9f679a7452660c40;hp=514c508114f62b69c1db5364414faa71bf767538;hpb=fbb3abfeac7b65f823b67e41ab5d6bc0a62f3eef;p=lyx.git diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp index 514c508114..bb53c35854 100644 --- a/src/lyxfind.cpp +++ b/src/lyxfind.cpp @@ -22,9 +22,7 @@ #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" @@ -32,16 +30,15 @@ #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 { @@ -55,7 +52,7 @@ bool parse_bool(docstring & howto) } -class MatchString : public std::binary_function +class MatchString : public binary_function { public: MatchString(docstring const & str, bool cs, bool mw) @@ -66,33 +63,7 @@ public: // del specifies whether deleted strings in ct mode will be considered bool operator()(Paragraph const & par, pos_type pos, bool del = true) const { - docstring::size_type const size = str.length(); - pos_type i = 0; - pos_type const parsize = par.size(); - for (i = 0; pos + i < parsize; ++i) { - if (docstring::size_type(i) >= size) - break; - if (cs && str[i] != par.getChar(pos + i)) - break; - if (!cs && uppercase(str[i]) != uppercase(par.getChar(pos + i))) - break; - if (!del && par.isDeleted(pos + i)) - break; - } - - if (size != docstring::size_type(i)) - return false; - - // if necessary, check whether string matches word - if (mw) { - if (pos > 0 && par.isLetter(pos - 1)) - return false; - if (pos + pos_type(size) < parsize - && par.isLetter(pos + size)) - return false; - } - - return true; + return par.find(str, cs, mw, pos, del); } private: @@ -141,16 +112,15 @@ bool findChange(DocIterator & cur) bool searchAllowed(BufferView * /*bv*/, docstring const & str) { if (str.empty()) { - frontend::Alert::error(_("Search error"), - _("Search string is empty")); + frontend::Alert::error(_("Search error"), _("Search string is empty")); return false; } return true; } -bool find(BufferView * bv, docstring const & searchstr, bool cs, bool mw, bool fw, - bool find_del = true) +bool find(BufferView * bv, docstring const & searchstr, + bool cs, bool mw, bool fw, bool find_del = true) { if (!searchAllowed(bv, searchstr)) return false; @@ -238,6 +208,7 @@ int replace(BufferView * bv, docstring const & searchstr, 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; @@ -273,12 +244,12 @@ docstring const replace2string(docstring const & search, docstring const & repla } -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 // " @@ -290,12 +261,7 @@ void find(BufferView * bv, FuncRequest const & ev) 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); } @@ -341,11 +307,9 @@ void replace(BufferView * bv, FuncRequest const & ev, bool has_deleted) } 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!")); } }