namespace lyx {
-class LyXText;
+class Text;
class MathAtom;
class Paragraph;
/// return the last column of the top grid
col_type lastcol() const { return ncols() - 1; }
/// the inset just behind the cursor
- Inset * nextInset();
+ Inset * nextInset() const;
/// the inset just in front of the cursor
- Inset * prevInset();
- /// the inset just in front of the cursor
- Inset const * prevInset() const;
+ Inset * prevInset() const;
///
bool boundary() const { return boundary_; }
///
// math-specific part
//
/// return the mathed cell this cursor is in
- MathData const & cell() const;
- /// return the mathed cell this cursor is in
- MathData & cell();
+ MathData & cell() const;
/// the mathatom left of the cursor
- MathAtom const & prevAtom() const;
- /// the mathatom left of the cursor
- MathAtom & prevAtom();
- /// the mathatom right of the cursor
- MathAtom const & nextAtom() const;
+ MathAtom & prevAtom() const;
/// the mathatom right of the cursor
- MathAtom & nextAtom();
+ MathAtom & nextAtom() const;
- //
// text-specific part
//
- /// the paragraph we're in
- Paragraph & paragraph();
- /// the paragraph we're in
- Paragraph const & paragraph() const;
- ///
- LyXText * text();
+ /// the paragraph we're in in text mode.
+ /// \warning only works within text!
+ Paragraph & paragraph() const;
+ /// the paragraph we're in in any case.
+ /// This method will give the containing paragraph even
+ /// if not in text mode (ex: in mathed).
+ Paragraph & innerParagraph() const;
+ /// return the inner text slice.
+ CursorSlice const & innerTextSlice() const;
///
- LyXText const * text() const;
+ Text * text() const;
/// the containing inset or the cell, respectively
Inset * realInset() const;
///
Inset * innerInsetOfType(int code) const;
///
- LyXText * innerText();
- ///
- LyXText const * innerText() const;
+ Text * innerText() const;
//
// elementary moving
//
- /// move on one logical position, do not descend into nested insets
- void forwardPosNoDescend();
/**
* move on one logical position, descend into nested insets
* skip collapsed insets if \p ignorecollapsed is true
void forwardChar();
/// move on one paragraph
void forwardPar();
- /// move on one cell
- void forwardIdx();
/// move on one inset
void forwardInset();
/// move backward one logical position
void backwardChar();
/// move backward one paragraph
void backwardPar();
- /// move backward one cell
- void backwardIdx();
/// move backward one inset
/// FIXME: This is not implemented!
//void backwardInset();
operator<<(std::ostream & os, DocIterator const & cur);
///
friend bool operator==(DocIterator const &, DocIterator const &);
+ friend bool operator<(DocIterator const &, DocIterator const &);
+ friend bool operator>(DocIterator const &, DocIterator const &);
+ friend bool operator<=(DocIterator const &, DocIterator const &);
///
friend class StableDocIterator;
//protected:
void pop_back() { slices_.pop_back(); }
/// recompute the inset parts of the cursor from the document data
void updateInsets(Inset * inset);
+ /// fix DocIterator in circumstances that should never happen.
+ /// \return true if the DocIterator was fixed.
+ bool fixIfBroken();
private:
/**