Alfredo Braunstein wrote: Updated version.
- Introduces PosIterator.[Ch] and fixes lyxfind.C with it: - This has no S&R regressions wrt. 1.3.x I am aware of - allows backward replaces (didn't work in 1.3.x) - fixes the "search ignoring things in tables" bug 576. - "replace all" is faster and doesn't open collapsables. It would be nice if someone could test it and/or comment it. Thanks, Alfredo
? iterators.C-save ? iterators.h-save ? lyxfind.C-save ? lyxrow_funcs.C-bad1 ? paragraph.C-bad1 ? text.C-bad1 ? text.C-good ? text.C-goood ? text3-save.C Index: BufferView_pimpl.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/BufferView_pimpl.C,v retrieving revision 1.450 diff -u -p -u -r1.450 BufferView_pimpl.C --- BufferView_pimpl.C 29 Oct 2003 19:19:21 -0000 1.450 +++ BufferView_pimpl.C 1 Nov 2003 12:11:08 -0000 @@ -418,8 +418,6 @@ void BufferView::Pimpl::resizeCurrentBuf bv_->text->fullRebreak(); update(); } else { - lyxerr << "text not available!" << endl; - lyxerr << "no text in cache!" << endl; bv_->text = new LyXText(bv_, 0, false, bv_->buffer()->paragraphs()); bv_->text->init(bv_); } Index: Makefile.am =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/Makefile.am,v retrieving revision 1.197 diff -u -p -u -r1.197 Makefile.am --- Makefile.am 29 Oct 2003 10:47:12 -0000 1.197 +++ Makefile.am 1 Nov 2003 12:11:08 -0000 @@ -228,6 +228,8 @@ lyx_SOURCES = \ paragraph.h \ paragraph_pimpl.C \ paragraph_pimpl.h \ + PosIterator.h \ + PosIterator.C \ SpellBase.h \ ispell.C \ ispell.h \ Index: PosIterator.C =================================================================== RCS file: PosIterator.C diff -N PosIterator.C --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ PosIterator.C 1 Nov 2003 12:11:09 -0000 @@ -0,0 +1,151 @@ +/* \file PosIterator.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Alfredo Braunstein + * + * Full author contact details are available in file CREDITS. + */ + + +#include <config.h> + +#include "PosIterator.h" + +#include "buffer.h" +#include "BufferView.h" +#include "lyxtext.h" + +#include "paragraph.h" +#include "cursor.h" +#include "iterators.h" + +#include "insets/insettext.h" +#include "insets/updatableinset.h" +#include "insets/inset.h" + + +using boost::prior; + +PosIterator & PosIterator::operator++() +{ + while (!stack_.empty()) { + PosIteratorItem & p = stack_.top(); + + if (p.pos < p.pit->size()) { + InsetOld * inset = p.pit->getInset(p.pos); + if (inset) { + ParagraphList * pl = inset->getParagraphs(p.index); + if (pl) { + p.index++; + stack_.push(PosIteratorItem(pl)); + return *this; + } + } + p.index = 0; + ++p.pos; + } else { + ++p.pit; + p.pos = 0; + } + + if (p.pit != p.pl->end() || stack_.size() == 1) + return *this; + + stack_.pop(); + } + return *this; +} + + +PosIterator & PosIterator::operator--() +{ + while (!stack_.empty()) { + { + PosIteratorItem & p = stack_.top(); + if (p.pos > 0) { + --p.pos; + InsetOld * inset = p.pit->getInset(p.pos); + if (inset) + p.index = inset->numParagraphs(); + } else { + if (p.pit == p.pl->begin()) { + if (stack_.size() == 1) + return *this; + stack_.pop(); + --stack_.top().index; + } else { + --p.pit; + p.pos = p.pit->size(); + } + } + } + PosIteratorItem & p = stack_.top(); + if (p.pos < p.pit->size()) { + InsetOld * inset = p.pit->getInset(p.pos); + if (inset && p.index > 0) { + ParagraphList * + pl = inset->getParagraphs(p.index - 1); + BOOST_ASSERT(pl); + stack_.push(PosIteratorItem(pl, prior(pl->end()), pl->back().size())); + } + } + return *this; + } + return *this; +} + + +bool PosIterator::operator!=(PosIterator const & a) const +{ + return !operator==(a); +} + + + +bool PosIterator::operator==(PosIterator const & a) const +{ + + PosIteratorItem const & pa = a.stack_.top(); + PosIteratorItem const & p = stack_.top(); + + return (pa.pl == p.pl && pa.pit == p.pit && + (p.pit == p.pl->end() || pa.pos == p.pos)); +} + + +bool PosIterator::at_end() const +{ + return pos() == pit()->size(); +} + + +PosIterator::PosIterator(ParagraphList * pl, ParagraphList::iterator pit, + lyx::pos_type pos) +{ + stack_.push(PosIteratorItem(pl,pit,pos)); +} + + +PosIterator::PosIterator(ParagraphList * pl) +{ + stack_.push(PosIteratorItem(pl, pl->begin(), 0)); +} + + +PosIterator::PosIterator(BufferView & bv) +{ + LyXText * text = bv.getLyXText(); + lyx::pos_type pos = text->cursor.pos(); + ParagraphList::iterator pit = text->cursorPar(); + + ParIterator par = bv.buffer()->par_iterator_begin(); + ParIterator end = bv.buffer()->par_iterator_end(); + for ( ; par != end; ++par) { + if (par.pit() == pit) + break; + } + + *this = PosIterator(par, pos); +} + Index: PosIterator.h =================================================================== RCS file: PosIterator.h diff -N PosIterator.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ PosIterator.h 1 Nov 2003 12:11:09 -0000 @@ -0,0 +1,65 @@ +// -*- C++ -*- +/* \file PosIterator.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Alfredo Braunstein + * + * Full author contact details are available in file CREDITS. + */ + +#ifndef POSITERATOR_H +#define POSITERATOR_H + +#include "ParagraphList_fwd.h" + +#include <boost/scoped_ptr.hpp> + +#include "support/types.h" + +#include <stack> + +class ParIterator; + +class BufferView; + +struct PosIteratorItem +{ + PosIteratorItem(ParagraphList * pl): pl(pl), pit(pl->begin()), + pos(0), index(0) {}; + PosIteratorItem(ParagraphList * pl, + ParagraphList::iterator pit, + lyx::pos_type pos, + int index = 0) + : pl(pl), pit(pit), pos(pos), index(index) {}; + ParagraphList * pl; + ParagraphList::iterator pit; + lyx::pos_type pos; + int index; +}; + + +class PosIterator +{ +public: + PosIterator(BufferView & bv); + PosIterator(ParIterator & par, lyx::pos_type pos); + PosIterator(ParagraphList * pl); + PosIterator(ParagraphList * pl, ParagraphList::iterator pit, + lyx::pos_type pos); + PosIterator(ParIterator const & parit, lyx::pos_type p); + PosIterator & operator++(); + PosIterator & operator--(); + bool operator!=(PosIterator const &) const; + bool operator==(PosIterator const &) const; + + ParagraphList::iterator pit() const { return stack_.top().pit; } + lyx::pos_type pos() const { return stack_.top().pos; } + bool at_end() const; +private: + std::stack<PosIteratorItem> stack_; +}; + + +#endif + Index: buffer.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/buffer.C,v retrieving revision 1.538 diff -u -p -u -r1.538 buffer.C --- buffer.C 31 Oct 2003 18:45:34 -0000 1.538 +++ buffer.C 1 Nov 2003 12:11:11 -0000 @@ -36,6 +36,7 @@ #include "paragraph.h" #include "paragraph_funcs.h" #include "ParagraphParameters.h" +#include "PosIterator.h" #include "sgml.h" #include "texrow.h" #include "undo.h" @@ -1469,6 +1470,18 @@ bool Buffer::hasParWithID(int id) const return true; return false; +} + + +PosIterator Buffer::pos_iterator_begin() +{ + return PosIterator(¶graphs(), paragraphs().begin(), 0); +} + + +PosIterator Buffer::pos_iterator_end() +{ + return PosIterator(¶graphs(), paragraphs().end(), 0); } Index: buffer.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/buffer.h,v retrieving revision 1.170 diff -u -p -u -r1.170 buffer.h --- buffer.h 31 Oct 2003 18:45:34 -0000 1.170 +++ buffer.h 1 Nov 2003 12:11:11 -0000 @@ -40,6 +40,7 @@ class LatexRunParams; class Language; class Messages; class ParIterator; +class PosIterator; class ParConstIterator; class TeXErrors; class TexRow; @@ -345,6 +346,10 @@ public: /// return the const end of all *top-level* insets in the buffer inset_iterator inset_const_iterator_end() const; + /// + PosIterator pos_iterator_begin(); + /// + PosIterator pos_iterator_end(); /// ParIterator par_iterator_begin(); /// Index: iterators.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/iterators.C,v retrieving revision 1.23 diff -u -p -u -r1.23 iterators.C --- iterators.C 29 Oct 2003 12:18:06 -0000 1.23 +++ iterators.C 1 Nov 2003 12:11:12 -0000 @@ -13,9 +13,15 @@ #include "iterators.h" #include "paragraph.h" +#include "PosIterator.h" #include "cursor.h" +#include "BufferView.h" +#include "funcrequest.h" +#include "dispatchresult.h" + #include "insets/inset.h" +#include "insets/updatableinset.h" #include <boost/next_prior.hpp> #include <boost/optional.hpp> @@ -355,4 +361,30 @@ bool operator==(ParConstIterator const & bool operator!=(ParConstIterator const & iter1, ParConstIterator const & iter2) { return !(iter1 == iter2); +} + + +PosIterator::PosIterator(ParIterator & parit, lyx::pos_type pos) +{ + int const last = parit.size() - 1; + for (int i = 0; i < last; ++i) { + ParPosition & pp = parit.pimpl_->positions[i]; + stack_.push(PosIteratorItem(const_cast<ParagraphList *>(pp.plist), + pp.pit, (*pp.it)->pos, *pp.index + 1)); + } + ParPosition const & pp = parit.pimpl_->positions[last]; + stack_.push(PosIteratorItem(const_cast<ParagraphList *>(pp.plist), + pp.pit, pos, 0)); +} + + +void ParIterator::lockPath(BufferView * bv) const +{ + bv->insetUnlock(); + int last = size() - 1; + for (int i = 0; i < last; ++i) { + UpdatableInset * inset = dynamic_cast<UpdatableInset *>((*pimpl_->positions[i].it)->inset); + FuncRequest cmd(bv, LFUN_INSET_EDIT); + inset->dispatch(cmd); + } } Index: iterators.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/iterators.h,v retrieving revision 1.19 diff -u -p -u -r1.19 iterators.h --- iterators.h 29 Oct 2003 12:18:06 -0000 1.19 +++ iterators.h 1 Nov 2003 12:11:12 -0000 @@ -19,6 +19,7 @@ class LyXText; class InsetOld; class Cursor; +class BufferView; class ParIterator { public: @@ -56,6 +57,11 @@ public: /// friend bool operator==(ParIterator const & iter1, ParIterator const & iter2); + /// + friend class PosIterator; + /// + void lockPath(BufferView *) const; + private: struct Pimpl; boost::scoped_ptr<Pimpl> pimpl_; @@ -93,6 +99,10 @@ public: friend bool operator==(ParConstIterator const & iter1, ParConstIterator const & iter2); + /// + friend class PosIterator; + /// + void lockPath(BufferView *) const; private: struct Pimpl; boost::scoped_ptr<Pimpl> pimpl_; Index: lyxfind.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxfind.C,v retrieving revision 1.54 diff -u -p -u -r1.54 lyxfind.C --- lyxfind.C 9 Oct 2003 10:52:07 -0000 1.54 +++ lyxfind.C 1 Nov 2003 12:11:12 -0000 @@ -6,6 +6,7 @@ * \author Lars Gullik Bjønnes * \author John Levon * \author Jürgen Vigna + * \author Alfredo Braunstein * * Full author contact details are available in file CREDITS. */ @@ -14,11 +15,16 @@ #include "lyxfind.h" +#include "funcrequest.h" +#include "dispatchresult.h" #include "buffer.h" #include "BufferView.h" +#include "debug.h" +#include "iterators.h" #include "gettext.h" #include "lyxtext.h" #include "paragraph.h" +#include "PosIterator.h" #include "frontends/Alert.h" @@ -37,304 +43,261 @@ namespace find { namespace { -// returns true if the specified string is at the specified position -bool isStringInText(Paragraph const & par, pos_type pos, - string const & str, bool const & cs, - bool const & mw) +class MatchString { - string::size_type size = str.length(); - pos_type i = 0; - pos_type parsize = par.size(); - while ((pos + i < parsize) - && (string::size_type(i) < size) - && (cs ? (str[i] == par.getChar(pos + i)) - : (uppercase(str[i]) == uppercase(par.getChar(pos + i))))) { - ++i; - } - - if (size == string::size_type(i)) { - // if necessary, check whether string matches word - if (!mw) - return true; - if ((pos <= 0 || !IsLetterCharOrDigit(par.getChar(pos - 1))) - && (pos + pos_type(size) >= parsize - || !IsLetterCharOrDigit(par.getChar(pos + size)))) { - return true; +public: + MatchString(string 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 size = str.length(); + pos_type i = 0; + pos_type parsize = par.size(); + while ((pos + i < parsize) + && (string::size_type(i) < size) + && (cs ? (str[i] == par.getChar(pos + i)) + : (uppercase(str[i]) == uppercase(par.getChar(pos + i))))) { + ++i; } - } - return false; -} - -// forward search: -// if the string can be found: return true and set the cursor to -// the new position, cs = casesensitive, mw = matchword -SearchResult searchForward(BufferView * bv, LyXText * text, string const & str, - bool const & cs, bool const & mw) -{ - ParagraphList::iterator pit = text->cursorPar(); - ParagraphList::iterator pend = text->ownerParagraphs().end(); - pos_type pos = text->cursor.pos(); - UpdatableInset * inset; - - while (pit != pend && !isStringInText(*pit, pos, str, cs, mw)) { - if (pos < pit->size() - && pit->isInset(pos) - && (inset = (UpdatableInset *)pit->getInset(pos)) - && inset->isTextInset() - && inset->searchForward(bv, str, cs, mw)) - return SR_FOUND_NOUPDATE; - - if (++pos >= pit->size()) { - ++pit; - pos = 0; + if (size == string::size_type(i)) { + // if necessary, check whether string matches word + if (!mw) + return true; + if ((pos <= 0 || !IsLetterCharOrDigit(par.getChar(pos - 1))) + && (pos + pos_type(size) >= parsize + || !IsLetterCharOrDigit(par.getChar(pos + size)))) { + return true; + } } + return false; } + +private: + string str; + bool cs; + bool mw; +}; - if (pit != pend) { - text->setCursor(pit, pos); - return SR_FOUND; - } - return SR_NOT_FOUND; -} -// backward search: -// if the string can be found: return true and set the cursor to -// the new position, cs = casesensitive, mw = matchword -SearchResult searchBackward(BufferView * bv, LyXText * text, - string const & str, - bool const & cs, bool const & mw) +} //namespace anon + + + + + +namespace { + + +void put_selection_at(BufferView * bv, PosIterator & cur, + int length, bool backwards) { - ParagraphList::iterator pit = text->cursorPar(); - ParagraphList::iterator pbegin = text->ownerParagraphs().begin(); - pos_type pos = text->cursor.pos(); - - // skip past a match at the current cursor pos - if (pos > 0) { - --pos; - } else if (pit != pbegin) { - --pit; - pos = pit->size(); - } else { - return SR_NOT_FOUND; + ParIterator par = bv->buffer()->par_iterator_begin(); + for (; par.pit() != cur.pit(); ++par) + ; + + { + LyXText * text = bv->getLyXText(); + text->clearSelection(); } + + UpdatableInset * outer = dynamic_cast<UpdatableInset *>(par.inset()); - while (true) { - if (pos < pit->size()) { - if (pit->isInset(pos) && pit->getInset(pos)->isTextInset()) { - UpdatableInset * inset = (UpdatableInset *)pit->getInset(pos); - if (inset->searchBackward(bv, str, cs, mw)) - return SR_FOUND_NOUPDATE; - } + par.lockPath(bv); - if (isStringInText(*pit, pos, str, cs, mw)) { - text->setCursor(pit, pos); - return SR_FOUND; - } - } + LyXText * text = par.text() ? par.text() : bv->text; - if (pos == 0 && pit == pbegin) - break; + InsetText * inner = text->inset_owner; - if (pos > 0) { - --pos; - } else if (pit != pbegin) { - --pit; - pos = pit->size(); - } + if (inner != outer) { + outer->insetUnlock(bv); + outer->lockInsetInInset(bv, inner); } + - return SR_NOT_FOUND; + text->setCursor(cur.pit(), cur.pos()); + if (length) { + text->setSelectionRange(length); + text->setSelection(); + if (backwards) + text->cursor = text->selection.start; + } + + + bv->fitCursor(); + bv->update(); + } -} // anon namespace +bool findForward(PosIterator & cur, PosIterator & end, MatchString & match) +{ + for (; cur != end && !match(*cur.pit(), cur.pos()); ++cur) + ; + return cur != end; +} -int replace(BufferView * bv, - string const & searchstr, string const & replacestr, - bool forward, bool casesens, bool matchwrd, bool replaceall, - bool once) + +bool findBackwards(PosIterator & cur, PosIterator & beg, MatchString & match) { - if (!bv->available() || bv->buffer()->isReadonly()) - return 0; + if (beg == cur) + return false; + do { + --cur; + if (match(*cur.pit(), cur.pos())) + break; + } while (cur != beg); - // CutSelection cannot cut a single space, so we have to stop - // in order to avoid endless loop :-( - if (searchstr.length() == 0 - || (searchstr.length() == 1 && searchstr[0] == ' ')) { -#ifdef WITH_WARNINGS -#warning BLECH. If we have an LFUN for replace, we can sort of fix this bogosity -#endif - Alert::error(_("Cannot replace"), - _("You cannot replace a single space or " - "an empty character.")); - return 0; - } + return match(*cur.pit(), cur.pos()); +} - // now we can start searching for the first - // start at top if replaceall - LyXText * text = bv->getLyXText(); - bool fw = forward; - if (replaceall) { - text->clearSelection(); - bv->unlockInset(bv->theLockingInset()); - text = bv->text; - text->cursorTop(); - // override search direction because we search top to bottom - fw = true; - } - // if nothing selected or selection does not equal search string - // search and select next occurance and return if no replaceall - string str1; - string str2; - if (casesens) { - str1 = searchstr; - str2 = text->selectionAsString(*bv->buffer(), false); - } else { - str1 = lowercase(searchstr); - str2 = lowercase(text->selectionAsString(*bv->buffer(), false)); - } - if (str1 != str2) { - if (!find(bv, searchstr, fw, casesens, matchwrd) || - !replaceall) { - return 0; - } +bool findChange(PosIterator & cur, PosIterator & end) +{ + for (; cur != end; ++cur) { + if ((!cur.pit()->size() || !cur.at_end()) + && cur.pit()->lookupChange(cur.pos()) != Change::UNCHANGED) + break; } + + return cur != end; +} - bool found = false; - int replace_count = 0; - do { - 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->theLockingInset() || - ((text != bv->text) && - (text->inset_owner == text->inset_owner->getLockingInset()))) { - text->replaceSelectionWithString(replacestr); - text->setSelectionRange(replacestr.length()); - ++replace_count; - } - if (!once) - found = find(bv, searchstr, fw, casesens, matchwrd); - } while (!once && replaceall && found); - // FIXME: should be called via an LFUN - bv->buffer()->markDirty(); - bv->update(); - return replace_count; -} +} // namespace anon -bool find(BufferView * bv, - string const & searchstr, bool forward, - bool casesens, bool matchwrd) +bool find(BufferView * bv, string const & searchstr, + bool cs, bool mw, bool fw) { if (!bv->available() || searchstr.empty()) return false; - if (bv->theLockingInset()) { - bool found = forward ? - bv->theLockingInset()->searchForward(bv, searchstr, casesens, matchwrd) : - bv->theLockingInset()->searchBackward(bv, searchstr, casesens, matchwrd); - // We found the stuff inside the inset so we don't have to - // do anything as the inset did all the update for us! - if (found) - return true; - // We now are in the main text but if we did a forward - // search we have to put the cursor behind the inset. - if (forward) { - bv->text->cursorRight(true); - } - } - // If we arrive here we are in the main text again so we - // just start searching from the root LyXText at the position - // we are! - LyXText * text = bv->text; - - - if (text->selection.set()) - text->cursor = forward ? - text->selection.end : text->selection.start; - - text->clearSelection(); - - SearchResult result = forward ? - searchForward(bv, text, searchstr, casesens, matchwrd) : - searchBackward(bv, text, searchstr, casesens, matchwrd); - - bool found = true; - // If we found the cursor inside an inset we will get back - // SR_FOUND_NOUPDATE and we don't have to do anything as the - // inset did it already. - if (result == SR_FOUND) { - bv->unlockInset(bv->theLockingInset()); - text->setSelectionRange(searchstr.length()); - } else if (result == SR_NOT_FOUND) { - bv->unlockInset(bv->theLockingInset()); - found = false; + PosIterator cur = PosIterator(*bv); + + MatchString match(searchstr, cs, mw); + + bool found; + + if (fw) { + PosIterator end = bv->buffer()->pos_iterator_end(); + found = findForward(cur, end, match); + } else { + PosIterator beg = bv->buffer()->pos_iterator_begin(); + found = findBackwards(cur, beg, match); } - bv->update(); + + if (found) + put_selection_at(bv, cur, searchstr.length(), !fw); return found; } -SearchResult find(BufferView * bv, LyXText * text, - string const & searchstr, bool forward, - bool casesens, bool matchwrd) +int replaceAll(BufferView * bv, + string const & searchstr, string const & replacestr, + bool cs, bool mw) { - if (text->selection.set()) - text->cursor = forward ? - text->selection.end : text->selection.start; - - text->clearSelection(); - - SearchResult result = forward ? - searchForward(bv, text, searchstr, casesens, matchwrd) : - searchBackward(bv, text, searchstr, casesens, matchwrd); + if (!bv->available() || bv->buffer()->isReadonly()) + return 0; - return result; + if (searchstr.empty()) { + Alert::error(_("Search error"), _("Search string is empty")); + return 0; + } + + PosIterator cur = bv->buffer()->pos_iterator_begin(); + PosIterator end = bv->buffer()->pos_iterator_end(); + // override search direction because we search top to bottom + MatchString 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(); + int striked = ssize - cur.pit()->erase(pos, pos + ssize); + cur.pit()->insert(pos, replacestr); + for (int i = 0; i < rsize + striked; ++i) + // what do I need for std::advance? + ++cur; + ++num; + } + PosIterator beg = bv->buffer()->pos_iterator_begin(); + bv->text->init(bv); + put_selection_at(bv, beg, 0, false); + return num; } - - -SearchResult nextChange(BufferView * bv, LyXText * text, pos_type & length) +int replace(BufferView * bv, + string const & searchstr, string const & replacestr, + bool cs, bool mw, bool fw) { - ParagraphList::iterator pit = text->cursorPar(); - ParagraphList::iterator pend = text->ownerParagraphs().end(); - pos_type pos = text->cursor.pos(); - - while (pit != pend) { - pos_type parsize = pit->size(); - - if (pos < parsize) { - if ((!parsize || pos != parsize) - && pit->lookupChange(pos) != Change::UNCHANGED) - break; + if (!bv->available() || bv->buffer()->isReadonly()) + return 0; - if (pit->isInset(pos) && pit->getInset(pos)->isTextInset()) { - UpdatableInset * inset = (UpdatableInset *)pit->getInset(pos); - if (inset->nextChange(bv, length)) - return SR_FOUND_NOUPDATE; - } + if (searchstr.empty()) { + Alert::error(_("Search error"), _("Search string is empty")); + 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; } + } + - ++pos; - - if (pos >= parsize) { - ++pit; - pos = 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->theLockingInset() || + ((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; } - if (pit == pend) - return SR_NOT_FOUND; + // FIXME: should be called via an LFUN + bv->buffer()->markDirty(); + + find(bv, searchstr, cs, mw, fw); + bv->update(); + + return 1; +} + + +bool findNextChange(BufferView * bv) +{ + if (!bv->available()) + return false; + + PosIterator cur = PosIterator(*bv); + PosIterator endit = bv->buffer()->pos_iterator_end(); - text->setCursor(pit, pos); + if (!findChange(cur, endit)) + return false; + + + ParagraphList::iterator pit = cur.pit(); + pos_type pos = cur.pos(); + Change orig_change = pit->lookupChangeFull(pos); pos_type parsize = pit->size(); pos_type end = pos; @@ -349,69 +312,9 @@ SearchResult nextChange(BufferView * bv, break; } } - length = end - pos; - return SR_FOUND; -} - - -SearchResult findNextChange(BufferView * bv, LyXText * text, pos_type & length) -{ - if (text->selection.set()) - text->cursor = text->selection.end; - - text->clearSelection(); - - return nextChange(bv, text, length); -} - - -bool findNextChange(BufferView * bv) -{ - if (!bv->available()) - return false; - - pos_type length; - - if (bv->theLockingInset()) { - bool found = bv->theLockingInset()->nextChange(bv, length); - - // We found the stuff inside the inset so we don't have to - // do anything as the inset did all the update for us! - if (found) - return true; - - // We now are in the main text but if we did a forward - // search we have to put the cursor behind the inset. - bv->text->cursorRight(true); - } - // If we arrive here we are in the main text again so we - // just start searching from the root LyXText at the position - // we are! - LyXText * text = bv->text; - - if (text->selection.set()) - text->cursor = text->selection.end; - - text->clearSelection(); - - SearchResult result = nextChange(bv, text, length); - - bool found = true; - - // If we found the cursor inside an inset we will get back - // SR_FOUND_NOUPDATE and we don't have to do anything as the - // inset did it already. - if (result == SR_FOUND) { - bv->unlockInset(bv->theLockingInset()); - text->setSelectionRange(length); - } else if (result == SR_NOT_FOUND) { - bv->unlockInset(bv->theLockingInset()); - found = false; - } - - bv->update(); - - return found; + pos_type length = end - pos; + put_selection_at(bv, cur, length, true); + return true; } } // find namespace Index: lyxfind.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxfind.h,v retrieving revision 1.16 diff -u -p -u -r1.16 lyxfind.h --- lyxfind.h 7 Oct 2003 06:45:24 -0000 1.16 +++ lyxfind.h 1 Nov 2003 12:11:12 -0000 @@ -24,29 +24,21 @@ class LyXText; namespace lyx { namespace find { -enum SearchResult { - // - SR_NOT_FOUND = 0, - // - SR_FOUND, - // - SR_FOUND_NOUPDATE -}; - - int replace(BufferView * bv, - std::string const &, std::string const &, - bool, bool = true, bool = false, - bool = false, bool = false); + std::string const & /*search*/, std::string const & /*repl*/, + bool /*cs*/, bool /*mw*/, bool /*fw*/); + +int replaceAll(BufferView * bv, + std::string const & /*search*/, std::string const & /*repl*/, + bool /*cs*/, bool /*mw*/); /** * This function is called as a general interface to find some * text from the actual cursor position in whatever direction * we want to go. This does also update the screen. */ -bool find(BufferView *, - std::string const & searchstr, bool forward, - bool casesens = true, bool matchwrd = false); +bool find(BufferView *, std::string const & /*search*/, + bool /*cs*/, bool /*mw*/, bool /*fw*/); /** * This function does search from the cursor position inside the @@ -56,16 +48,8 @@ bool find(BufferView *, * returning to the calling function. */ -SearchResult find(BufferView *, LyXText * text, - std::string const & searchstr, bool forward, - bool casesens = true, bool matchwrd = false); - /// find the next change in the buffer bool findNextChange(BufferView * bv); - -SearchResult findNextChange(BufferView * bv, LyXText * text, lyx::pos_type & length); - -SearchResult nextChange(BufferView * bv, LyXText * text, lyx::pos_type & length); } // namespace find } // namespace lyx Index: lyxfunc.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxfunc.C,v retrieving revision 1.529 diff -u -p -u -r1.529 lyxfunc.C --- lyxfunc.C 29 Oct 2003 19:19:22 -0000 1.529 +++ lyxfunc.C 1 Nov 2003 12:11:15 -0000 @@ -1078,7 +1078,8 @@ void LyXFunc::dispatch(FuncRequest const } bool fw = (action == LFUN_WORDFINDFORWARD); if (!searched_string.empty()) - lyx::find::find(view(), searched_string, fw); + lyx::find::find(view(), searched_string, + true, false, fw); break; } Index: paragraph.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/paragraph.C,v retrieving revision 1.340 diff -u -p -u -r1.340 paragraph.C --- paragraph.C 31 Oct 2003 18:45:34 -0000 1.340 +++ paragraph.C 1 Nov 2003 12:11:17 -0000 @@ -257,6 +257,14 @@ int Paragraph::erase(pos_type start, pos } +void Paragraph::insert(pos_type start, string const & str) +{ + int size = str.size(); + for (int i = 0 ; i < size ; ++i) + insertChar(start + i, str[i]); +} + + bool Paragraph::checkInsertChar(LyXFont & font) { if (pimpl_->inset_owner) Index: paragraph.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/paragraph.h,v retrieving revision 1.117 diff -u -p -u -r1.117 paragraph.h --- paragraph.h 31 Oct 2003 18:45:35 -0000 1.117 +++ paragraph.h 1 Nov 2003 12:11:18 -0000 @@ -271,6 +271,8 @@ public: lyx::pos_type endpos, LyXFont_size def_size) const; /// + void insert(lyx::pos_type pos, std::string const & str); + /// void insertChar(lyx::pos_type pos, value_type c); /// void insertChar(lyx::pos_type pos, value_type c, LyXFont const &, Change change = Change(Change::INSERTED)); Index: text.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text.C,v retrieving revision 1.491 diff -u -p -u -r1.491 text.C --- text.C 29 Oct 2003 12:18:07 -0000 1.491 +++ text.C 1 Nov 2003 12:11:20 -0000 @@ -1592,7 +1592,7 @@ void LyXText::backspace() ParagraphList::iterator LyXText::cursorPar() const { - if (cursor.par() != cache_pos_) { + if (cursor.par() != cache_pos_ || cache_pos_ == -1) { cache_pos_ = cursor.par(); cache_par_ = getPar(cache_pos_); } Index: frontends/controllers/ControlSearch.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ControlSearch.C,v retrieving revision 1.27 diff -u -p -u -r1.27 ControlSearch.C --- frontends/controllers/ControlSearch.C 6 Oct 2003 15:42:46 -0000 1.27 +++ frontends/controllers/ControlSearch.C 1 Nov 2003 12:11:20 -0000 @@ -32,8 +32,8 @@ void ControlSearch::find(string const & bool casesensitive, bool matchword, bool forward) { bool const found = lyx::find::find(bufferview(), search, - forward, casesensitive, - matchword); + casesensitive, matchword, + forward); if (!found) lv_.message(_("String not found!")); @@ -41,16 +41,17 @@ void ControlSearch::find(string const & void ControlSearch::replace(string const & search, string const & replace, - bool casesensitive, bool matchword, bool all) + bool casesensitive, bool matchword, + bool forward, bool all) { // If not replacing all instances of the word, then do not // move on to the next instance once the present instance has been // changed - bool const once = !all; - int const replace_count = - lyx::find::replace(bufferview(), - search, replace, true, casesensitive, - matchword, all, once); + int const replace_count = all ? + lyx::find::replaceAll(bufferview(), search, replace, + casesensitive, matchword) + : lyx::find::replace(bufferview(), search, replace, + casesensitive, matchword, forward); if (replace_count == 0) { lv_.message(_("String not found!")); Index: frontends/controllers/ControlSearch.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ControlSearch.h,v retrieving revision 1.15 diff -u -p -u -r1.15 ControlSearch.h --- frontends/controllers/ControlSearch.h 6 Oct 2003 15:42:46 -0000 1.15 +++ frontends/controllers/ControlSearch.h 1 Nov 2003 12:11:21 -0000 @@ -28,7 +28,8 @@ public: /// Replaces occurence of string void replace(std::string const & search, std::string const & replace, - bool casesensitive, bool matchword, bool all); + bool casesensitive, bool matchword, + bool forward, bool all); private: /// not needed. virtual void apply() {} Index: frontends/controllers/ControlThesaurus.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ControlThesaurus.C,v retrieving revision 1.18 diff -u -p -u -r1.18 ControlThesaurus.C --- frontends/controllers/ControlThesaurus.C 6 Oct 2003 15:42:47 -0000 1.18 +++ frontends/controllers/ControlThesaurus.C 1 Nov 2003 12:11:21 -0000 @@ -48,7 +48,7 @@ void ControlThesaurus::replace(string co */ int const replace_count = lyx::find::replace(kernel().bufferview(), oldstr_, newstr, - true, true, true, false, true); + true /*cs*/, true /*mw*/, true /*fw*/); oldstr_ = newstr; Index: frontends/qt2/QSearch.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QSearch.C,v retrieving revision 1.19 diff -u -p -u -r1.19 QSearch.C --- frontends/qt2/QSearch.C 6 Oct 2003 15:42:51 -0000 1.19 +++ frontends/qt2/QSearch.C 1 Nov 2003 12:11:22 -0000 @@ -54,7 +54,8 @@ void QSearch::find(string const & str, b void QSearch::replace(string const & findstr, string const & replacestr, - bool casesens, bool words, bool all) + bool casesens, bool words, bool backwards, bool all) { - controller().replace(findstr, replacestr, casesens, words, all); + controller().replace(findstr, replacestr, casesens, words, + !backwards, all); } Index: frontends/qt2/QSearch.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QSearch.h,v retrieving revision 1.10 diff -u -p -u -r1.10 QSearch.h --- frontends/qt2/QSearch.h 6 Oct 2003 15:42:51 -0000 1.10 +++ frontends/qt2/QSearch.h 1 Nov 2003 12:11:22 -0000 @@ -39,8 +39,9 @@ private: void find(std::string const & str, bool casesens, bool words, bool backwards); - void replace(std::string const & findstr, std::string const & replacestr, - bool casesens, bool words, bool all); + void replace(std::string const & findstr, + std::string const & replacestr, + bool casesens, bool words, bool backwards, bool all); }; #endif // QSEARCH_H Index: frontends/qt2/QSearchDialog.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QSearchDialog.C,v retrieving revision 1.14 diff -u -p -u -r1.14 QSearchDialog.C --- frontends/qt2/QSearchDialog.C 6 Oct 2003 15:42:51 -0000 1.14 +++ frontends/qt2/QSearchDialog.C 1 Nov 2003 12:11:22 -0000 @@ -94,7 +94,7 @@ void QSearchDialog::replaceClicked() form_->replace(find, replace, caseCB->isChecked(), wordsCB->isChecked(), - false); + backwardsCB->isChecked(), false); uniqueInsert(findCO, findCO->currentText()); uniqueInsert(replaceCO, replaceCO->currentText()); } @@ -106,7 +106,7 @@ void QSearchDialog::replaceallClicked() fromqstr(replaceCO->currentText()), caseCB->isChecked(), wordsCB->isChecked(), - true); + false, true); uniqueInsert(findCO, findCO->currentText()); uniqueInsert(replaceCO, replaceCO->currentText()); } Index: frontends/xforms/FormSearch.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/FormSearch.C,v retrieving revision 1.27 diff -u -p -u -r1.27 FormSearch.C --- frontends/xforms/FormSearch.C 6 Oct 2003 15:42:57 -0000 1.27 +++ frontends/xforms/FormSearch.C 1 Nov 2003 12:11:23 -0000 @@ -85,6 +85,7 @@ ButtonPolicy::SMInput FormSearch::input( getString(dialog_->input_replace), fl_get_button(dialog_->check_casesensitive), fl_get_button(dialog_->check_matchword), + !fl_get_button(dialog_->check_searchbackwards), all); } Index: insets/insetcollapsable.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcollapsable.C,v retrieving revision 1.189 diff -u -p -u -r1.189 insetcollapsable.C --- insets/insetcollapsable.C 1 Nov 2003 09:56:18 -0000 1.189 +++ insets/insetcollapsable.C 1 Nov 2003 12:11:24 -0000 @@ -536,42 +536,6 @@ void InsetCollapsable::markErased() } -bool InsetCollapsable::nextChange(BufferView * bv, lyx::pos_type & length) -{ - bool found = inset.nextChange(bv, length); - - if (first_after_edit && !found) - close(bv); - else if (!found) - first_after_edit = false; - return found; -} - - -bool InsetCollapsable::searchForward(BufferView * bv, string const & str, - bool cs, bool mw) -{ - bool found = inset.searchForward(bv, str, cs, mw); - if (first_after_edit && !found) - close(bv); - else if (!found) - first_after_edit = false; - return found; -} - - -bool InsetCollapsable::searchBackward(BufferView * bv, string const & str, - bool cs, bool mw) -{ - bool found = inset.searchBackward(bv, str, cs, mw); - if (first_after_edit && !found) - close(bv); - else if (!found) - first_after_edit = false; - return found; -} - - WordLangTuple const InsetCollapsable::selectNextWordToSpellcheck(BufferView * bv, float & value) const { Index: insets/insetcollapsable.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcollapsable.h,v retrieving revision 1.137 diff -u -p -u -r1.137 insetcollapsable.h --- insets/insetcollapsable.h 1 Nov 2003 09:56:18 -0000 1.137 +++ insets/insetcollapsable.h 1 Nov 2003 12:11:24 -0000 @@ -142,14 +142,6 @@ public: void markErased(); - bool nextChange(BufferView * bv, lyx::pos_type & length); - - /// - bool searchForward(BufferView * bv, std::string const & str, - bool = true, bool = false); - bool searchBackward(BufferView * bv, std::string const & str, - bool = true, bool = false); - /// void addPreview(lyx::graphics::PreviewLoader &) const; Index: insets/insettabular.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettabular.C,v retrieving revision 1.360 diff -u -p -u -r1.360 insettabular.C --- insets/insettabular.C 1 Nov 2003 09:56:18 -0000 1.360 +++ insets/insettabular.C 1 Nov 2003 12:11:28 -0000 @@ -432,6 +432,9 @@ bool InsetTabular::lockInsetInInset(Buff oldcell = -1; + lyxerr[Debug::INSETTEXT] << "HERE1" << std::endl; + + if (inset == &tabular.getCellInset(actcell)) { lyxerr[Debug::INSETTEXT] << "OK" << endl; the_locking_inset = &tabular.getCellInset(actcell); @@ -439,27 +442,37 @@ bool InsetTabular::lockInsetInInset(Buff return true; } + lyxerr[Debug::INSETTEXT] << "HERE2" << std::endl; + if (!the_locking_inset) { int const n = tabular.getNumberOfCells(); int const id = inset->id(); for (int i = 0; i < n; ++i) { InsetText * in = &tabular.getCellInset(i); if (inset == in) { + lyxerr[Debug::INSETTEXT] << + "found!" << std::endl; actcell = i; the_locking_inset = in; locked = true; resetPos(bv); return true; } + /* if (in->getInsetFromID(id)) { actcell = i; in->dispatch(FuncRequest(bv, LFUN_INSET_EDIT)); return the_locking_inset->lockInsetInInset(bv, inset); } + */ } return false; } + lyxerr[Debug::INSETTEXT] << "HERE3" << std::endl; + + + if (the_locking_inset && (the_locking_inset == inset)) { lyxerr[Debug::INSETTEXT] << "OK" << endl; resetPos(bv); @@ -2487,88 +2500,6 @@ void InsetTabular::markErased() { for (int cell = 0; cell < tabular.getNumberOfCells(); ++cell) tabular.getCellInset(cell).markErased(); -} - - -bool InsetTabular::nextChange(BufferView * bv, lyx::pos_type & length) -{ - if (the_locking_inset) { - if (the_locking_inset->nextChange(bv, length)) { - updateLocal(bv); - return true; - } - if (tabular.isLastCell(actcell)) - return false; - ++actcell; - } - InsetText & inset = tabular.getCellInset(actcell); - if (inset.nextChange(bv, length)) { - updateLocal(bv); - return true; - } - while (!tabular.isLastCell(actcell)) { - ++actcell; - InsetText & inset = tabular.getCellInset(actcell); - if (inset.nextChange(bv, length)) { - updateLocal(bv); - return true; - } - } - return false; -} - - -bool InsetTabular::searchForward(BufferView * bv, string const & str, - bool cs, bool mw) -{ - int cell = 0; - if (the_locking_inset) { - if (the_locking_inset->searchForward(bv, str, cs, mw)) { - updateLocal(bv); - return true; - } - if (tabular.isLastCell(actcell)) - return false; - cell = actcell + 1; - } - InsetText & inset = tabular.getCellInset(cell); - if (inset.searchForward(bv, str, cs, mw)) { - updateLocal(bv); - return true; - } - while (!tabular.isLastCell(cell)) { - ++cell; - InsetText & inset = tabular.getCellInset(cell); - if (inset.searchForward(bv, str, cs, mw)) { - updateLocal(bv); - return true; - } - } - return false; -} - - -bool InsetTabular::searchBackward(BufferView * bv, string const & str, - bool cs, bool mw) -{ - int cell = tabular.getNumberOfCells(); - if (the_locking_inset) { - if (the_locking_inset->searchBackward(bv, str, cs, mw)) { - updateLocal(bv); - return true; - } - cell = actcell; - } - - while (cell) { - --cell; - InsetText & inset = tabular.getCellInset(cell); - if (inset.searchBackward(bv, str, cs, mw)) { - updateLocal(bv); - return true; - } - } - return false; } Index: insets/insettabular.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettabular.h,v retrieving revision 1.157 diff -u -p -u -r1.157 insettabular.h --- insets/insettabular.h 1 Nov 2003 09:56:18 -0000 1.157 +++ insets/insettabular.h 1 Nov 2003 12:11:28 -0000 @@ -177,14 +177,6 @@ public: void markErased(); - /// find next change - bool nextChange(BufferView *, lyx::pos_type & length); - /// - bool searchForward(BufferView *, std::string const &, - bool = true, bool = false); - bool searchBackward(BufferView *, std::string const &, - bool = true, bool = false); - // this should return true if we have a "normal" cell, otherwise true. // "normal" means without width set! bool forceDefaultParagraphs(InsetOld const * in) const; Index: insets/insettext.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettext.C,v retrieving revision 1.520 diff -u -p -u -r1.520 insettext.C --- insets/insettext.C 31 Oct 2003 18:45:41 -0000 1.520 +++ insets/insettext.C 1 Nov 2003 12:11:30 -0000 @@ -369,6 +369,7 @@ void InsetText::lockInset(BufferView * b font.setLanguage(bv->getParentLanguage(this)); setFont(bv, font, false); } + lyxerr << "HERE" << std::endl; } @@ -1490,81 +1491,6 @@ void InsetText::selectSelectedWord(Buffe getLyXText(bv)->selectSelectedWord(); updateLocal(bv, false); } - - -bool InsetText::nextChange(BufferView * bv, lyx::pos_type & length) -{ - if (the_locking_inset) { - if (the_locking_inset->nextChange(bv, length)) - return true; - text_.cursorRight(true); - } - lyx::find::SearchResult result = - lyx::find::findNextChange(bv, &text_, length); - - if (result == lyx::find::SR_FOUND) { - LyXCursor cur = text_.cursor; - bv->unlockInset(bv->theLockingInset()); - if (bv->lockInset(this)) - locked = true; - text_.cursor = cur; - text_.setSelectionRange(length); - updateLocal(bv, false); - } - return result != lyx::find::SR_NOT_FOUND; -} - - -bool InsetText::searchForward(BufferView * bv, string const & str, - bool cs, bool mw) -{ - if (the_locking_inset) { - if (the_locking_inset->searchForward(bv, str, cs, mw)) - return true; - text_.cursorRight(true); - } - lyx::find::SearchResult result = - lyx::find::find(bv, &text_, str, true, cs, mw); - - if (result == lyx::find::SR_FOUND) { - LyXCursor cur = text_.cursor; - bv->unlockInset(bv->theLockingInset()); - if (bv->lockInset(this)) - locked = true; - text_.cursor = cur; - text_.setSelectionRange(str.length()); - updateLocal(bv, false); - } - return result != lyx::find::SR_NOT_FOUND; -} - - -bool InsetText::searchBackward(BufferView * bv, string const & str, - bool cs, bool mw) -{ - if (the_locking_inset) { - if (the_locking_inset->searchBackward(bv, str, cs, mw)) - return true; - } - if (!locked) { - text_.setCursor(paragraphs.size() - 1, paragraphs.back().size()); - } - lyx::find::SearchResult result = - lyx::find::find(bv, &text_, str, false, cs, mw); - - if (result == lyx::find::SR_FOUND) { - LyXCursor cur = text_.cursor; - bv->unlockInset(bv->theLockingInset()); - if (bv->lockInset(this)) - locked = true; - text_.cursor = cur; - text_.setSelectionRange(str.length()); - updateLocal(bv, false); - } - return result != lyx::find::SR_NOT_FOUND; -} - - bool InsetText::checkInsertChar(LyXFont & font) { return owner() ? owner()->checkInsertChar(font) : true; Index: insets/insettext.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettext.h,v retrieving revision 1.219 diff -u -p -u -r1.219 insettext.h --- insets/insettext.h 1 Nov 2003 09:56:18 -0000 1.219 +++ insets/insettext.h 1 Nov 2003 12:11:30 -0000 @@ -177,15 +177,7 @@ public: * for the (empty) paragraph contained. */ void markNew(bool track_changes = false); - /// find next change - bool nextChange(BufferView *, lyx::pos_type & length); - /// - bool searchForward(BufferView *, std::string const &, - bool = true, bool = false); - /// - bool searchBackward(BufferView *, std::string const &, - bool = true, bool = false); /// bool checkInsertChar(LyXFont &); /// Index: insets/updatableinset.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/updatableinset.C,v retrieving revision 1.30 diff -u -p -u -r1.30 updatableinset.C --- insets/updatableinset.C 29 Oct 2003 19:19:26 -0000 1.30 +++ insets/updatableinset.C 1 Nov 2003 12:11:31 -0000 @@ -157,19 +157,3 @@ bool UpdatableInset::nextChange(BufferVi } -bool UpdatableInset::searchForward(BufferView * bv, string const &, - bool, bool) -{ - // we have to unlock ourself in this function by default! - bv->unlockInset(const_cast<UpdatableInset *>(this)); - return false; -} - - -bool UpdatableInset::searchBackward(BufferView * bv, string const &, - bool, bool) -{ - // we have to unlock ourself in this function by default! - bv->unlockInset(const_cast<UpdatableInset *>(this)); - return false; -} Index: insets/updatableinset.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/updatableinset.h,v retrieving revision 1.20 diff -u -p -u -r1.20 updatableinset.h --- insets/updatableinset.h 29 Oct 2003 10:47:19 -0000 1.20 +++ insets/updatableinset.h 1 Nov 2003 12:11:31 -0000 @@ -101,15 +101,6 @@ public: /// find the next change in the inset virtual bool nextChange(BufferView * bv, lyx::pos_type & length); - /// - // needed for search/replace functionality - /// - virtual bool searchForward(BufferView *, std::string const &, - bool = true, bool = false); - /// - virtual bool searchBackward(BufferView *, std::string const &, - bool = true, bool = false); - protected: /// An updatable inset could handle lyx editing commands virtual