#include <vector>
#include <iosfwd>
+
+namespace lyx {
+
class LyXText;
class MathAtom;
class Paragraph;
-class Row;
-
// only needed for gcc 2.95, remove when support terminated
public:
/// type for cell number in inset
typedef CursorSlice::idx_type idx_type;
- /// type for paragraph numbers positions within a cell
- typedef CursorSlice::pit_type pit_type;
- /// type for cursor positions within a cell
- typedef CursorSlice::pos_type pos_type;
/// type for row indices
typedef CursorSlice::row_type row_type;
/// type for col indices
///
void boundary(bool b) { boundary_ = b; }
- /// are we in mathed?
- bool inMathed() const;
- /// are we in texted?
- bool inTexted() const;
+ // the two methods below have been inlined out because of
+ // profiling results under linux when opening a document.
+ /// are we in mathed?.
+ bool inMathed() const
+ { return !empty() && inset().inMathed(); }
+ /// are we in texted?.
+ bool inTexted() const
+ { return !empty() && !inset().inMathed(); }
//
// math-specific part
Paragraph & paragraph();
/// the paragraph we're in
Paragraph const & paragraph() const;
- /// the row in the paragraph we're in
- Row & textRow();
- /// the row in the paragraph we're in
- Row const & textRow() const;
///
LyXText * text();
///
LyXText const * text() const;
+ /// the containing inset or the cell, respectively
+ InsetBase * realInset() const;
///
InsetBase * innerInsetOfType(int code) const;
///
//
/// move on one logical position, do not descend into nested insets
void forwardPosNoDescend();
- /// move on one logical position, descend into nested insets
- void forwardPos();
+ /**
+ * move on one logical position, descend into nested insets
+ * skip collapsed insets if \p ignorecollapsed is true
+ */
+ void forwardPos(bool ignorecollapsed = false);
/// move on one physical character or inset
void forwardChar();
/// move on one paragraph
/// move backward one cell
void backwardIdx();
/// move backward one inset
- void backwardInset();
+ /// FIXME: This is not implemented!
+ //void backwardInset();
/// are we some 'extension' (i.e. deeper nested) of the given iterator
bool hasPart(DocIterator const & it) const;
void push_back(CursorSlice const & sl) { slices_.push_back(sl); }
///
void pop_back() { slices_.pop_back(); }
+ /// recompute the inset parts of the cursor from the document data
+ void updateInsets(InsetBase * inset);
+
private:
/**
* When the cursor position is i, is the cursor after the i-th char
// The difference to a ('non stable') DocIterator is the removed
-// (overwritte by 0...) part of the CursorSlice data items. So this thing
+// (overwritten by 0...) part of the CursorSlice data items. So this thing
// is suitable for external storage, but not for iteration as such.
class StableDocIterator {
DocIterator asDocIterator(InsetBase * start) const;
///
size_t size() const { return data_.size(); }
- /// type for cursor positions within a cell
- typedef CursorSlice::pos_type pos_type;
/// return the position within the paragraph
pos_type pos() const { return data_.back().pos(); }
/// return the position within the paragraph
std::vector<CursorSlice> data_;
};
+
+} // namespace lyx
+
#endif