X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfind.C;h=9e92f3b63b64db4b1b4a75d885e80307e4424520;hb=89b422b320a352e503c0625820da1073805d74a9;hp=98f30e15d3ae62d39b87d2c5959ebe17133bfba0;hpb=dcc3f7f15109a79ebd7c82e781ee7a2cbcb2986a;p=lyx.git diff --git a/src/lyxfind.C b/src/lyxfind.C index 98f30e15d3..9e92f3b63b 100644 --- a/src/lyxfind.C +++ b/src/lyxfind.C @@ -18,6 +18,7 @@ #include "buffer.h" #include "cursor.h" #include "CutAndPaste.h" +#include "buffer_funcs.h" #include "BufferView.h" #include "debug.h" #include "funcrequest.h" @@ -28,10 +29,10 @@ #include "undo.h" #include "frontends/Alert.h" +#include "frontends/Selection.h" #include "support/convert.h" - -#include +#include "support/docstream.h" namespace lyx { @@ -40,17 +41,15 @@ using support::uppercase; using support::split; using std::advance; -using std::ostringstream; -using std::string; namespace { -bool parse_bool(string & howto) +bool parse_bool(docstring & howto) { if (howto.empty()) return false; - string var; + docstring var; howto = split(howto, var, ' '); return (var == "1"); } @@ -59,18 +58,18 @@ bool parse_bool(string & howto) class MatchString : public std::binary_function { public: - MatchString(string const & str, bool cs, bool mw) + MatchString(docstring const & str, bool cs, bool mw) : str(str), cs(cs), mw(mw) {} // returns true if the specified string is at the specified position bool operator()(Paragraph const & par, pos_type pos) const { - string::size_type const size = str.length(); + 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 (string::size_type(i) >= size) + if (docstring::size_type(i) >= size) break; if (cs && str[i] != par.getChar(pos + i)) break; @@ -78,7 +77,7 @@ public: break; } - if (size != string::size_type(i)) + if (size != docstring::size_type(i)) return false; // if necessary, check whether string matches word @@ -95,7 +94,7 @@ public: private: // search string - string str; + docstring str; // case sensitive bool cs; // match whole words only @@ -132,7 +131,7 @@ bool findChange(DocIterator & cur) } -bool searchAllowed(BufferView * bv, string const & str) +bool searchAllowed(BufferView * bv, docstring const & str) { if (str.empty()) { frontend::Alert::error(_("Search error"), @@ -143,7 +142,7 @@ bool searchAllowed(BufferView * bv, string const & str) } -bool find(BufferView * bv, string const & searchstr, bool cs, bool mw, bool fw) +bool find(BufferView * bv, docstring const & searchstr, bool cs, bool mw, bool fw) { if (!searchAllowed(bv, searchstr)) return false; @@ -162,7 +161,7 @@ bool find(BufferView * bv, string const & searchstr, bool cs, bool mw, bool fw) int replaceAll(BufferView * bv, - string const & searchstr, string const & replacestr, + docstring const & searchstr, docstring const & replacestr, bool cs, bool mw) { Buffer & buf = *bv->buffer(); @@ -185,7 +184,7 @@ int replaceAll(BufferView * bv, = cur.paragraph().getFontSettings(buf.params(), pos); int striked = ssize - cur.paragraph().eraseChars(pos, pos + ssize, buf.params().trackChanges); - cur.paragraph().insert(pos, from_utf8(replacestr), font, + cur.paragraph().insert(pos, replacestr, font, Change(buf.params().trackChanges ? Change::INSERTED : Change::UNCHANGED)); for (int i = 0; i < rsize + striked; ++i) @@ -193,7 +192,7 @@ int replaceAll(BufferView * bv, ++num; } - bv->buffer()->text().init(bv); + updateLabels(buf); bv->putSelectionAt(doc_iterator_begin(buf.inset()), 0, false); if (num) buf.markDirty(); @@ -201,13 +200,13 @@ int replaceAll(BufferView * bv, } -bool stringSelected(BufferView * bv, string const & searchstr, +bool stringSelected(BufferView * bv, docstring const & searchstr, bool cs, bool mw, bool fw) { // if nothing selected or selection does not equal search // string search and select next occurance and return - string const & str1 = searchstr; - string const str2 = to_utf8(bv->cursor().selectionAsString(false)); + docstring const & str1 = searchstr; + docstring const str2 = bv->cursor().selectionAsString(false); if ((cs && str1 != str2) || lowercase(str1) != lowercase(str2)) { find(bv, searchstr, cs, mw, fw); return false; @@ -217,8 +216,8 @@ bool stringSelected(BufferView * bv, string const & searchstr, } -int replace(BufferView * bv, string const & searchstr, - string const & replacestr, bool cs, bool mw, bool fw) +int replace(BufferView * bv, docstring const & searchstr, + docstring const & replacestr, bool cs, bool mw, bool fw) { if (!searchAllowed(bv, searchstr) || bv->buffer()->isReadonly()) return 0; @@ -238,10 +237,10 @@ int replace(BufferView * bv, string const & searchstr, } // namespace anon -string const find2string(string const & search, +docstring const find2string(docstring const & search, bool casesensitive, bool matchword, bool forward) { - ostringstream ss; + odocstringstream ss; ss << search << '\n' << int(casesensitive) << ' ' << int(matchword) << ' ' @@ -250,11 +249,11 @@ string const find2string(string const & search, } -string const replace2string(string const & search, string const & replace, +docstring const replace2string(docstring const & search, docstring const & replace, bool casesensitive, bool matchword, bool all, bool forward) { - ostringstream ss; + odocstringstream ss; ss << search << '\n' << replace << '\n' << int(casesensitive) << ' ' @@ -275,8 +274,8 @@ void find(BufferView * bv, FuncRequest const & ev) // data is of the form // " // " - string search; - string howto = split(to_utf8(ev.argument()), search, '\n'); + docstring search; + docstring howto = split(ev.argument(), search, '\n'); bool casesensitive = parse_bool(howto); bool matchword = parse_bool(howto); @@ -300,9 +299,9 @@ void replace(BufferView * bv, FuncRequest const & ev) // " // // " - string search; - string rplc; - string howto = split(to_utf8(ev.argument()), search, '\n'); + docstring search; + docstring rplc; + docstring howto = split(ev.argument(), search, '\n'); howto = split(howto, rplc, '\n'); bool casesensitive = parse_bool(howto); @@ -358,9 +357,7 @@ bool findNextChange(BufferView * bv) // Now put cursor to end of selection: bv->cursor().setCursor(cur); bv->cursor().setSelection(); - // if we used a lfun like in find/replace, dispatch would do - // that for us - bv->update(); + theSelection().haveSelection(bv->cursor().selection()); return true; }