]> git.lyx.org Git - lyx.git/blobdiff - src/lyxfind.cpp
Embedding: saving inzip name to .lyx file so that embedded files can always be found...
[lyx.git] / src / lyxfind.cpp
index 514c508114f62b69c1db5364414faa71bf767538..8406c77193f9a632be8acc58fa326c953aedac44 100644 (file)
@@ -22,9 +22,9 @@
 #include "buffer_funcs.h"
 #include "BufferView.h"
 #include "Changes.h"
-#include "debug.h"
+#include "support/debug.h"
 #include "FuncRequest.h"
-#include "gettext.h"
+#include "support/gettext.h"
 #include "Text.h"
 #include "Paragraph.h"
 #include "ParIterator.h"
 
 #include "support/convert.h"
 #include "support/docstream.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<Paragraph, pos_type, bool>
+class MatchString : public binary_function<Paragraph, pos_type, bool>
 {
 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;
@@ -278,7 +249,7 @@ void find(BufferView * bv, FuncRequest const & ev)
        if (!bv || ev.action != LFUN_WORD_FIND)
                return;
 
-       //lyxerr << "find called, cmd: " << ev << std::endl;
+       //lyxerr << "find called, cmd: " << ev << endl;
 
        // data is of the form
        // "<search>