]> git.lyx.org Git - lyx.git/blobdiff - src/dociterator.C
fix reading the author field.
[lyx.git] / src / dociterator.C
index 264df011274a88580ff74a1a3171750d53e0fdd7..2df577b5f4adfffe1cc6caf21a2fcc57c700a139 100644 (file)
@@ -3,8 +3,7 @@
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
- * \author unknown
- * \author Lars Gullik Bjønnes
+ * \author André Pönitz
  *
  * Full author contact details are available in file CREDITS.
  */
 using std::endl;
 
 
-//we could be able to get rid of this if only every BufferView were
-//associated to a buffer on construction
-DocIterator::DocIterator() : inset_(0)
+// We could be able to get rid of this if only every BufferView were
+// associated to a buffer on construction.
+DocIterator::DocIterator()
+       : inset_(0)
+{}
+
+
+DocIterator::DocIterator(InsetBase & inset)
+       : inset_(&inset)
 {}
 
 
@@ -47,10 +52,6 @@ DocIterator doc_iterator_end(InsetBase & inset)
 }
 
 
-DocIterator::DocIterator(InsetBase & inset) : inset_(&inset)
-{}
-
-
 InsetBase * DocIterator::nextInset()
 {
        BOOST_ASSERT(!empty());
@@ -103,6 +104,7 @@ MathAtom & DocIterator::prevAtom()
 MathAtom const & DocIterator::nextAtom() const
 {
        BOOST_ASSERT(!empty());
+       //lyxerr << "lastpos: " << lastpos() << " next atom:\n" << *this << endl;
        BOOST_ASSERT(pos() < lastpos());
        return cell()[pos()];
 }
@@ -111,6 +113,7 @@ MathAtom const & DocIterator::nextAtom() const
 MathAtom & DocIterator::nextAtom()
 {
        BOOST_ASSERT(!empty());
+       //lyxerr << "lastpos: " << lastpos() << " next atom:\n" << *this << endl;
        BOOST_ASSERT(pos() < lastpos());
        return cell()[pos()];
 }
@@ -407,6 +410,17 @@ void DocIterator::backwardPos()
 }
 
 
+bool DocIterator::hasPart(DocIterator const & it) const
+{
+       // it can't be a part if it is larger
+       if (it.size() > size())
+               return false;
+
+       // as inset adresses are the 'last' level
+       return &it.back().inset() == &operator[](it.size() - 1).inset();
+}
+
+
 std::ostream & operator<<(std::ostream & os, DocIterator const & dit)
 {
        for (size_t i = 0, n = dit.size(); i != n; ++i)