* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
- * \author André Pönitz
+ * \author André Pönitz
* \author Alfredo Braunstein
*
* Full author contact details are available in file CREDITS.
#include "DocIterator.h"
+#include "Buffer.h"
#include "InsetList.h"
#include "Paragraph.h"
+#include "LyXRC.h"
#include "Text.h"
#include "mathed/MathData.h"
#include "mathed/InsetMath.h"
+#include "mathed/InsetMathHull.h"
#include "insets/InsetTabular.h"
#include "support/debug.h"
-
-#include <boost/assert.hpp>
+#include "support/lassert.h"
+#include "support/lstrings.h"
#include <ostream>
using namespace std;
+using namespace lyx::support;
namespace lyx {
+DocIterator::DocIterator()
+ : boundary_(false), inset_(0), buffer_(0)
+{}
+
// We could be able to get rid of this if only every BufferView were
// associated to a buffer on construction.
-DocIterator::DocIterator()
- : boundary_(false), inset_(0)
+DocIterator::DocIterator(Buffer * buf)
+ : boundary_(false), inset_(0), buffer_(buf)
{}
-DocIterator::DocIterator(Inset & inset)
- : boundary_(false), inset_(&inset)
+DocIterator::DocIterator(Buffer * buf, Inset * inset)
+ : boundary_(false), inset_(inset), buffer_(buf)
{}
-DocIterator doc_iterator_begin(Inset & inset)
+DocIterator doc_iterator_begin(const Buffer * buf0, const Inset * inset0)
{
- DocIterator dit(inset);
+ Buffer * buf = const_cast<Buffer *>(buf0);
+ Inset * inset = const_cast<Inset *>(inset0);
+ DocIterator dit(buf, inset ? inset : &buf->inset());
dit.forwardPos();
return dit;
}
-DocIterator doc_iterator_end(Inset & inset)
+DocIterator doc_iterator_end(const Buffer * buf0, const Inset * inset0)
+{
+ Buffer * buf = const_cast<Buffer *>(buf0);
+ Inset * inset = const_cast<Inset *>(inset0);
+ return DocIterator(buf, inset ? inset : &buf->inset());
+}
+
+
+bool DocIterator::inRegexped() const
{
- return DocIterator(inset);
+ InsetMathHull * i = dynamic_cast<InsetMathHull *>(inset().asInsetMath());
+ return i && i->getType() == hullRegexp;
}
Inset * DocIterator::nextInset() const
{
- BOOST_ASSERT(!empty());
+ LASSERT(!empty(), return 0);
if (pos() == lastpos())
return 0;
if (pos() > lastpos()) {
Inset * DocIterator::prevInset() const
{
- BOOST_ASSERT(!empty());
+ LASSERT(!empty(), return 0);
if (pos() == 0)
return 0;
if (inMathed()) {
Inset * DocIterator::realInset() const
{
- BOOST_ASSERT(inTexted());
+ LASSERT(inTexted(), /**/);
// if we are in a tabular, we need the cell
if (inset().lyxCode() == TABULAR_CODE) {
InsetTabular & tabular = static_cast<InsetTabular&>(inset());
MathAtom & DocIterator::prevAtom() const
{
- BOOST_ASSERT(!empty());
- BOOST_ASSERT(pos() > 0);
+ LASSERT(!empty(), /**/);
+ LASSERT(pos() > 0, /**/);
return cell()[pos() - 1];
}
MathAtom & DocIterator::nextAtom() const
{
- BOOST_ASSERT(!empty());
+ LASSERT(!empty(), /**/);
//lyxerr << "lastpos: " << lastpos() << " next atom:\n" << *this << endl;
- BOOST_ASSERT(pos() < lastpos());
+ LASSERT(pos() < lastpos(), /**/);
return cell()[pos()];
}
Text * DocIterator::text() const
{
- BOOST_ASSERT(!empty());
+ LASSERT(!empty(), /**/);
return top().text();
}
{
if (!inTexted())
LYXERR0(*this);
- BOOST_ASSERT(inTexted());
+ LASSERT(inTexted(), /**/);
return top().paragraph();
}
Paragraph & DocIterator::innerParagraph() const
{
- BOOST_ASSERT(!empty());
+ LASSERT(!empty(), /**/);
return innerTextSlice().paragraph();
}
CursorSlice const & DocIterator::innerTextSlice() const
{
- BOOST_ASSERT(!empty());
+ LASSERT(!empty(), /**/);
// go up until first non-0 text is hit
// (innermost text is 0 in mathed)
for (int i = depth() - 1; i >= 0; --i)
// This case is in principe not possible. We _must_
// be inside a Text.
- BOOST_ASSERT(false);
+ LASSERT(false, /**/);
static CursorSlice dummy;
return dummy;
}
MathData & DocIterator::cell() const
{
-// BOOST_ASSERT(inMathed());
+// LASSERT(inMathed(), /**/);
return top().cell();
}
Text * DocIterator::innerText() const
{
- BOOST_ASSERT(!empty());
+ LASSERT(!empty(), /**/);
// go up until first non-0 text is hit
// (innermost text is 0 in mathed)
for (int i = depth() - 1; i >= 0; --i)
size_t const n = slices_.size();
slices_.resize(0);
for (size_t i = 0 ; i < n; ++i) {
- BOOST_ASSERT(inset);
+ LASSERT(inset, /**/);
push_back(dit[i]);
top().inset_ = inset;
if (i + 1 != n)
}
-DocIterator StableDocIterator::asDocIterator(Inset * inset) const
+DocIterator StableDocIterator::asDocIterator(Buffer * buf) const
{
// this function re-creates the cache of inset pointers
//lyxerr << "converting:\n" << *this << endl;
- DocIterator dit = DocIterator(*inset);
+ Inset * inset = &buf->inset();
+ DocIterator dit = DocIterator(buf, inset);
for (size_t i = 0, n = data_.size(); i != n; ++i) {
if (inset == 0) {
// FIXME
}
+bool isLetter(DocIterator const & dit)
+{
+ return dit.inTexted()
+ && dit.inset().allowSpellCheck()
+ && dit.pos() != dit.lastpos()
+ && (dit.paragraph().isLetter(dit.pos())
+ // We want to pass the ' and escape chars to ispell
+ || contains(from_utf8(lyxrc.spellchecker_esc_chars + '\''),
+ dit.paragraph().getChar(dit.pos())))
+ && !dit.paragraph().isDeleted(dit.pos());
+}
+
} // namespace lyx