X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfind.C;h=2f16fd3d6ce1dd27ef31f39009a68675d4d4bdf7;hb=e7ef29fa2d516b8593aa3cccb6548de5686e8a9a;hp=7f2d5bfee8eb0d794816c26e2047fa3d9562dd95;hpb=0d43ba149a41e8860dde316ccbd4336d6b0bbdfa;p=lyx.git diff --git a/src/lyxfind.C b/src/lyxfind.C index 7f2d5bfee8..2f16fd3d6c 100644 --- a/src/lyxfind.C +++ b/src/lyxfind.C @@ -20,26 +20,25 @@ #include "CutAndPaste.h" #include "BufferView.h" #include "debug.h" -#include "iterators.h" #include "funcrequest.h" #include "gettext.h" #include "lyxtext.h" #include "paragraph.h" +#include "pariterator.h" #include "undo.h" #include "frontends/Alert.h" #include "frontends/LyXView.h" -#include "support/textutils.h" -#include "support/tostr.h" +#include "support/convert.h" -#include "support/std_sstream.h" +#include using lyx::support::lowercase; using lyx::support::uppercase; using lyx::support::split; -using lyx::par_type; +using lyx::pit_type; using lyx::pos_type; using std::advance; @@ -75,7 +74,7 @@ public: for (i = 0; pos + i < parsize; ++i) { if (string::size_type(i) >= size) break; - if (cs && str[i] != par.getChar(pos + i)) + if (cs && str[i] != par.getChar(pos + i)) break; if (!cs && uppercase(str[i]) != uppercase(par.getChar(pos + i))) break; @@ -86,10 +85,10 @@ public: // if necessary, check whether string matches word if (mw) { - if (pos > 0 && IsLetterCharOrDigit(par.getChar(pos - 1))) + if (pos > 0 && par.isLetter(pos - 1)) return false; if (pos + lyx::pos_type(size) < parsize - && IsLetterCharOrDigit(par.getChar(pos + size))); + && par.isLetter(pos + size)) return false; } @@ -106,29 +105,32 @@ private: }; -bool findForward(DocumentIterator & cur, MatchString const & match) +bool findForward(DocIterator & cur, MatchString const & match) { - for (; cur.size(); cur.forwardChar()) - if (match(cur.paragraph(), cur.pos())) + for (; cur; cur.forwardChar()) + if (cur.inTexted() && match(cur.paragraph(), cur.pos())) return true; return false; } -bool findBackwards(DocumentIterator & cur, MatchString const & match) +bool findBackwards(DocIterator & cur, MatchString const & match) { - for (; cur.size(); cur.backwardChar()) - if (match(cur.paragraph(), cur.pos())) + while (cur) { + cur.backwardChar(); + if (cur.inTexted() && match(cur.paragraph(), cur.pos())) return true; + } return false; } -bool findChange(DocumentIterator & cur) +bool findChange(DocIterator & cur) { - for (; cur.size(); cur.forwardChar()) - if ((cur.paragraph().empty() || !cur.empty()) - && cur.paragraph().lookupChange(cur.pos()) != Change::UNCHANGED) + for (; cur; cur.forwardChar()) + if (cur.inTexted() && cur.pos() != cur.paragraph().size() && + cur.paragraph().lookupChange(cur.pos()) + != Change::UNCHANGED) return true; return false; } @@ -149,7 +151,7 @@ bool find(BufferView * bv, string const & searchstr, bool cs, bool mw, bool fw) if (!searchAllowed(bv, searchstr)) return false; - DocumentIterator cur = bv->cursor(); + DocIterator cur = bv->cursor(); MatchString const match(searchstr, cs, mw); @@ -171,7 +173,7 @@ int replaceAll(BufferView * bv, if (!searchAllowed(bv, searchstr) || buf.isReadonly()) return 0; - recordUndoFullDocument(bv->cursor()); + recordUndoFullDocument(bv); MatchString const match(searchstr, cs, mw); int num = 0; @@ -179,7 +181,7 @@ int replaceAll(BufferView * bv, int const rsize = replacestr.size(); int const ssize = searchstr.size(); - DocumentIterator cur = DocumentIterator(buf.inset()); + DocIterator cur = doc_iterator_begin(buf.inset()); while (findForward(cur, match)) { lyx::pos_type pos = cur.pos(); LyXFont const font @@ -192,7 +194,7 @@ int replaceAll(BufferView * bv, } bv->text()->init(bv); - bv->putSelectionAt(DocumentIterator(buf.inset()), 0, false); + bv->putSelectionAt(doc_iterator_begin(buf.inset()), 0, false); if (num) buf.markDirty(); return num; @@ -216,7 +218,7 @@ bool stringSelected(BufferView * bv, string const & searchstr, int replace(BufferView * bv, string const & searchstr, - string const & replacestr, bool cs, bool mw, bool fw) + string const & replacestr, bool cs, bool mw, bool fw) { if (!searchAllowed(bv, searchstr) || bv->buffer()->isReadonly()) return 0; @@ -324,7 +326,7 @@ void replace(BufferView * bv, FuncRequest const & ev) if (replace_count == 1) { lv->message(_("String has been replaced.")); } else { - string str = tostr(replace_count); + string str = convert(replace_count); str += _(" strings have been replaced."); lv->message(str); } @@ -337,16 +339,16 @@ bool findNextChange(BufferView * bv) if (!bv->available()) return false; - DocumentIterator cur = DocumentIterator(bv->buffer()->inset()); + DocIterator cur = bv->cursor(); if (!findChange(cur)) return false; Paragraph const & par = cur.paragraph(); - pos_type pos = cur.pos(); + const pos_type pos = cur.pos(); Change orig_change = par.lookupChangeFull(pos); - pos_type parsize = par.size(); + const pos_type parsize = par.size(); pos_type end = pos; for (; end != parsize; ++end) { @@ -360,11 +362,13 @@ bool findNextChange(BufferView * bv) } } pos_type length = end - pos; - bv->putSelectionAt(cur, length, true); + bv->putSelectionAt(cur, length, false); + // if we used a lfun like in find/replace, dispatch would do + // that for us + bv->update(); + return true; } } // find namespace } // lyx namespace - -