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