From cd76f580e3ca385c426c5bf6e01357b93d2d532f Mon Sep 17 00:00:00 2001 From: Alfredo Braunstein Date: Mon, 17 Nov 2003 09:02:10 +0000 Subject: [PATCH] reactivate replace + some code simplification git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8089 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/ChangeLog | 5 +++ src/lyxfind.C | 113 +++++++++++++++++++++++++------------------------- 2 files changed, 61 insertions(+), 57 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7fd5c87368..cc57be0972 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2003-11-16 Alfredo Braunstein + + * lyxfind.C (replace): adjust to locking removal + some + code simplification + 2003-11-14 Alfredo Braunstein * cursor.C (dispatch): dispatch to BufferView::dispatch at the end diff --git a/src/lyxfind.C b/src/lyxfind.C index 9f474c5a36..34499ae36b 100644 --- a/src/lyxfind.C +++ b/src/lyxfind.C @@ -53,7 +53,7 @@ public: { string::size_type size = str.length(); pos_type i = 0; - pos_type parsize = par.size(); + pos_type const parsize = par.size(); while ((pos + i < parsize) && (string::size_type(i) < size) && (cs ? (str[i] == par.getChar(pos + i)) @@ -81,27 +81,25 @@ private: bool findForward(PosIterator & cur, PosIterator const & end, - MatchString & match) + MatchString const & match) { - for (; cur != end && !match(*cur.pit(), cur.pos()); ++cur) - ; - - return cur != end; + for (; cur != end; ++cur) { + if (match(*cur.pit(), cur.pos())) + return true; + } + return false; } bool findBackwards(PosIterator & cur, PosIterator const & beg, - MatchString & match) + MatchString const & match) { - if (beg == cur) - return false; - do { + while (beg != cur) { --cur; if (match(*cur.pit(), cur.pos())) - break; - } while (cur != beg); - - return match(*cur.pit(), cur.pos()); + return true; + } + return false; } @@ -110,10 +108,9 @@ bool findChange(PosIterator & cur, PosIterator const & end) for (; cur != end; ++cur) { if ((!cur.pit()->size() || !cur.at_end()) && cur.pit()->lookupChange(cur.pos()) != Change::UNCHANGED) - break; + return true; } - - return cur != end; + return false; } @@ -138,18 +135,14 @@ bool find(BufferView * bv, string const & searchstr, PosIterator cur = PosIterator(*bv); - MatchString match(searchstr, cs, mw); - - bool found; - - if (fw) { - PosIterator const end = bv->buffer()->pos_iterator_end(); - found = findForward(cur, end, match); - } else { - PosIterator const beg = bv->buffer()->pos_iterator_begin(); - found = findBackwards(cur, beg, match); - } - + MatchString const match(searchstr, cs, mw); + + PosIterator const end = bv->buffer()->pos_iterator_end(); + PosIterator const beg = bv->buffer()->pos_iterator_begin(); + + bool found = fw ? findForward(cur, end, match) + : findBackwards(cur, beg, match); + if (found) put_selection_at(bv, cur, searchstr.length(), !fw); @@ -171,11 +164,12 @@ int replaceAll(BufferView * bv, PosIterator cur = buf.pos_iterator_begin(); PosIterator const end = buf.pos_iterator_end(); - MatchString match(searchstr, cs, mw); + MatchString const match(searchstr, cs, mw); int num = 0; int const rsize = replacestr.size(); int const ssize = searchstr.size(); + while (findForward(cur, end, match)) { pos_type pos = cur.pos(); LyXFont const font @@ -185,6 +179,7 @@ int replaceAll(BufferView * bv, advance(cur, rsize + striked); ++num; } + PosIterator beg = buf.pos_iterator_begin(); bv->text->init(bv); put_selection_at(bv, beg, 0, false); @@ -194,40 +189,45 @@ int replaceAll(BufferView * bv, } +namespace { + +bool stringSelected(BufferView * bv, + string const & searchstr, + bool cs, bool mw, bool fw) +{ + LyXText * text = bv->getLyXText(); + // if nothing selected or selection does not equal search + // string search and select next occurance and return + string const & str1 = searchstr; + string const str2 = text->selectionAsString(*bv->buffer(), + false); + if ((cs && str1 != str2) + || lowercase(str1) != lowercase(str2)) { + find(bv, searchstr, cs, mw, fw); + return false; + } + + return true; +} + +} //namespace anon + + int replace(BufferView * bv, string const & searchstr, string const & replacestr, bool cs, bool mw, bool fw) { if (!searchAllowed(bv, searchstr) || bv->buffer()->isReadonly()) return 0; - - { - LyXText * text = bv->getLyXText(); - // if nothing selected or selection does not equal search - // string search and select next occurance and return - string const str1 = searchstr; - string const str2 = text->selectionAsString(*bv->buffer(), - false); - if ((cs && str1 != str2) - || lowercase(str1) != lowercase(str2)) { - find(bv, searchstr, cs, mw, fw); - return 0; - } - } -#ifdef LOCK + if (!stringSelected(bv, searchstr, cs, mw, fw)) + return 0; + LyXText * text = bv->getLyXText(); - // We have to do this check only because mathed insets don't - // return their own LyXText but the LyXText of it's parent! - if (!bv->innerInset() || - ((text != bv->text) && - (text->inset_owner == text->inset_owner->getLockingInset()))) { - text->replaceSelectionWithString(replacestr); - text->setSelectionRange(replacestr.length()); - text->cursor = fw ? text->selection.end - : text->selection.start; - } -#endif + + text->replaceSelectionWithString(replacestr); + text->setSelectionRange(replacestr.length()); + text->cursor = fw ? text->selection.end : text->selection.start; bv->buffer()->markDirty(); find(bv, searchstr, cs, mw, fw); @@ -248,7 +248,6 @@ bool findNextChange(BufferView * bv) if (!findChange(cur, endit)) return false; - ParagraphList::iterator pit = cur.pit(); pos_type pos = cur.pos(); -- 2.39.2