X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FDocIterator.cpp;h=a29f364aa3deab5f974dc6adcb64f25a646bca12;hb=0362c6aae73c293d1c20277c12d362acfe0b2ef6;hp=f444f42193a1e7c692c332635cd58bb36069ac4b;hpb=57d2f9c0ad96baca7675e1c22e4f1349f849cca7;p=lyx.git diff --git a/src/DocIterator.cpp b/src/DocIterator.cpp index f444f42193..a29f364aa3 100644 --- a/src/DocIterator.cpp +++ b/src/DocIterator.cpp @@ -14,7 +14,6 @@ #include "DocIterator.h" -#include "support/debug.h" #include "InsetList.h" #include "Paragraph.h" #include "Text.h" @@ -24,6 +23,8 @@ #include "insets/InsetTabular.h" +#include "support/debug.h" + #include #include @@ -77,7 +78,7 @@ Inset * DocIterator::nextInset() const } if (inMathed()) return nextAtom().nucleus(); - return paragraph().isInset(pos()) ? paragraph().getInset(pos()) : 0; + return paragraph().getInset(pos()); } @@ -95,7 +96,7 @@ Inset * DocIterator::prevInset() const else return prevAtom().nucleus(); } - return paragraph().isInset(pos() - 1) ? paragraph().getInset(pos() - 1) : 0; + return paragraph().getInset(pos() - 1); } @@ -268,12 +269,10 @@ void DocIterator::forwardPos() if (tip.pos() != lastp) { // this is impossible for pos() == size() - if (inMathed()) { + if (inMathed()) n = (tip.cell().begin() + tip.pos())->nucleus(); - } else { - if (paragraph().isInset(tip.pos())) - n = paragraph().getInset(tip.pos()); - } + else + n = paragraph().getInset(tip.pos()); } if (n && n->isActive()) { @@ -384,12 +383,10 @@ void DocIterator::backwardPos() // move into an inset to the left if possible Inset * n = 0; - if (inMathed()) { + if (inMathed()) n = (top().cell().begin() + top().pos())->nucleus(); - } else { - if (paragraph().isInset(top().pos())) - n = paragraph().getInset(top().pos()); - } + else + n = paragraph().getInset(top().pos()); if (n && n->isActive()) { push_back(CursorSlice(*n)); @@ -431,6 +428,9 @@ void DocIterator::updateInsets(Inset * inset) bool DocIterator::fixIfBroken() { + if (empty()) + return false; + // Go through the slice stack from the bottom. // Check that all coordinates (idx, pit, pos) are correct and // that the inset is the one which is claimed to be there @@ -463,8 +463,8 @@ bool DocIterator::fixIfBroken() // get inset which is supposed to be in the next slice if (cs.inset().inMathed()) inset = (cs.cell().begin() + cs.pos())->nucleus(); - else if (cs.paragraph().isInset(cs.pos())) - inset = cs.paragraph().getInset(cs.pos()); + else if (Inset * csInset = cs.paragraph().getInset(cs.pos())) + inset = csInset; else { // there are slices left, so there must be another inset break; @@ -483,7 +483,7 @@ bool DocIterator::fixIfBroken() } -DocIterator::idx_type DocIterator::find(MathData const & cell) const +int DocIterator::find(MathData const & cell) const { for (size_t l = 0; l != slices_.size(); ++l) { if (slices_[l].asInsetMath() && &slices_[l].cell() == &cell) @@ -493,7 +493,7 @@ DocIterator::idx_type DocIterator::find(MathData const & cell) const } -DocIterator::idx_type DocIterator::find(InsetMath const * inset) const +int DocIterator::find(InsetMath const * inset) const { for (size_t l = 0; l != slices_.size(); ++l) { if (slices_[l].asInsetMath() == inset) @@ -503,14 +503,14 @@ DocIterator::idx_type DocIterator::find(InsetMath const * inset) const } -void DocIterator::cutOff(DocIterator::idx_type above, vector & cut) +void DocIterator::cutOff(int above, vector & cut) { cut = vector(slices_.begin() + above + 1, slices_.end()); slices_.resize(above + 1); } -void DocIterator::cutOff(DocIterator::idx_type above) +void DocIterator::cutOff(int above) { slices_.resize(above + 1); }