]> git.lyx.org Git - lyx.git/blobdiff - src/dociterator.h
* output_plaintext.C: cosmetics in comment: line length cannot be < 0
[lyx.git] / src / dociterator.h
index 07ade45dedee730ac86d0b10d40f682de88eaf28..2195e0b40fb0e9c297a4a4c5d7717a4c43b047a4 100644 (file)
 #include <vector>
 #include <iosfwd>
 
+
+namespace lyx {
+
 class LyXText;
 class MathAtom;
 class Paragraph;
-class Row;
-
 
 
 // only needed for gcc 2.95, remove when support terminated
@@ -39,10 +40,6 @@ class DocIterator // : public std::vector<CursorSlice>
 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
@@ -128,10 +125,14 @@ public:
        ///
        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
@@ -156,14 +157,12 @@ public:
        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;
        ///
@@ -176,8 +175,11 @@ public:
        //
        /// 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
@@ -214,6 +216,9 @@ public:
        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
@@ -261,7 +266,7 @@ bool operator!=(DocIterator const & di1, DocIterator const & di2)
 
 
 // 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 {
@@ -274,8 +279,6 @@ public:
        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
@@ -293,4 +296,7 @@ private:
        std::vector<CursorSlice> data_;
 };
 
+
+} // namespace lyx
+
 #endif