* \author Lars Gullik Bjønnes
* \author John Levon
*
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
*
* This file contains some utility functions for actually mutating
* the text contents of a document
#include <config.h>
+#include "text_funcs.h"
#include "debug.h"
#include "lyxcursor.h"
-#include "ParagraphList.h"
-
-#include "support/types.h"
+#include "lyxtext.h"
+#include "paragraph.h"
#include <boost/next_prior.hpp>
using lyx::pos_type;
using lyx::word_location;
+using std::endl;
+
-bool transposeChars(LyXCursor const & cursor)
+bool transposeChars(LyXText & text, LyXCursor const & cursor)
{
- ParagraphList::iterator tmppit = cursor.par();
+ ParagraphList::iterator tmppit = text.cursorPar();
pos_type tmppos = cursor.pos();
// First decide if it is possible to transpose at all
}
-void cursorLeftOneWord(LyXCursor & cursor, ParagraphList const & pars)
+void cursorLeftOneWord(LyXText & text,
+ LyXCursor & cursor, ParagraphList const & pars)
{
// treat HFills, floats and Insets as words
- ParagraphList::iterator pit = cursor.par();
+ ParagraphList::iterator pit = text.cursorPar();
size_t pos = cursor.pos();
while (pos &&
(pit->isSeparator(pos - 1) ||
- pit->isKomma(pos - 1) ||
- pit->isNewline(pos - 1)) &&
+ pit->isKomma(pos - 1) ||
+ pit->isNewline(pos - 1)) &&
!(pit->isHfill(pos - 1) ||
pit->isInset(pos - 1)))
--pos;
pit->isHfill(pos - 1))) {
--pos;
} else if (!pos) {
- if (pit != pars.begin()) {
+ // cast only for BSD's g++ 2.95
+ if (pit != const_cast<ParagraphList &>(pars).begin()) {
--pit;
pos = pit->size();
}
--pos;
}
- cursor.par(pit);
+ cursor.par(text.parOffset(pit));
cursor.pos(pos);
}
-void cursorRightOneWord(LyXCursor & cursor, ParagraphList const & pars)
+void cursorRightOneWord(LyXText & text,
+ LyXCursor & cursor, ParagraphList const & pars)
{
// treat floats, HFills and Insets as words
- ParagraphList::iterator pit = cursor.par();
+ ParagraphList::iterator pit = text.cursorPar();
pos_type pos = cursor.pos();
// CHECK See comment on top of text.C
- if (pos == pit->size() && boost::next(pit) != pars.end()) {
+ // cast only for BSD's g++ 2.95
+ if (pos == pit->size() &&
+ boost::next(pit) != const_cast<ParagraphList &>(pars).end()) {
++pit;
pos = 0;
} else {
}
}
- cursor.par(pit);
+ cursor.par(text.parOffset(pit));
cursor.pos(pos);
}
// Select current word. This depends on behaviour of
// CursorLeftOneWord(), so it is patched as well.
-void getWord(LyXCursor & from, LyXCursor & to, word_location const loc,
- ParagraphList const & pars)
+void getWord(LyXText & text, LyXCursor & from, LyXCursor & to,
+ word_location const loc, ParagraphList const & pars)
{
+ ParagraphList::iterator from_par = text.getPar(from);
+ ParagraphList::iterator to_par = text.getPar(to);
switch (loc) {
case lyx::WHOLE_WORD_STRICT:
- if (from.pos() == 0 || from.pos() == from.par()->size()
- || from.par()->isSeparator(from.pos())
- || from.par()->isKomma(from.pos())
- || from.par()->isNewline(from.pos())
- || from.par()->isSeparator(from.pos() - 1)
- || from.par()->isKomma(from.pos() - 1)
- || from.par()->isNewline(from.pos() - 1)) {
+ if (from.pos() == 0 || from.pos() == from_par->size()
+ || from_par->isSeparator(from.pos())
+ || from_par->isKomma(from.pos())
+ || from_par->isNewline(from.pos())
+ || from_par->isSeparator(from.pos() - 1)
+ || from_par->isKomma(from.pos() - 1)
+ || from_par->isNewline(from.pos() - 1)) {
to = from;
return;
}
case lyx::WHOLE_WORD:
// Move cursor to the beginning, when not already there.
- if (from.pos() && !from.par()->isSeparator(from.pos() - 1)
- && !(from.par()->isKomma(from.pos() - 1)
- || from.par()->isNewline(from.pos() - 1)))
- cursorLeftOneWord(from, pars);
+ if (from.pos() && !from_par->isSeparator(from.pos() - 1)
+ && !(from_par->isKomma(from.pos() - 1)
+ || from_par->isNewline(from.pos() - 1)))
+ cursorLeftOneWord(text, from, pars);
break;
case lyx::PREVIOUS_WORD:
// always move the cursor to the beginning of previous word
- cursorLeftOneWord(from, pars);
+ cursorLeftOneWord(text, from, pars);
break;
case lyx::NEXT_WORD:
- lyxerr << "LyXText::getWord: NEXT_WORD not implemented yet\n";
+ lyxerr << "LyXText::getWord: NEXT_WORD not implemented yet"
+ << endl;
break;
case lyx::PARTIAL_WORD:
break;
}
to = from;
- while (to.pos() < to.par()->size()
- && !to.par()->isSeparator(to.pos())
- && !to.par()->isKomma(to.pos())
- && !to.par()->isNewline(to.pos())
- && !to.par()->isHfill(to.pos())
- && !to.par()->isInset(to.pos()))
+ while (to.pos() < to_par->size()
+ && !to_par->isSeparator(to.pos())
+ && !to_par->isKomma(to.pos())
+ && !to_par->isNewline(to.pos())
+ && !to_par->isHfill(to.pos())
+ && !to_par->isInset(to.pos()))
{
to.pos(to.pos() + 1);
}