]> git.lyx.org Git - lyx.git/blobdiff - src/DocIterator.h
Append rows and columns if necessary when pasting into table
[lyx.git] / src / DocIterator.h
index 425bfa4f6867f968efc58252aa523bd705c58d07..8ee4d4e373c790f50a909cdf2eca6c6d812eca3c 100644 (file)
 namespace lyx {
 
 class DocIterator;
+class Encoding;
+class FontSpan;
+class InsetIterator;
 class LyXErr;
 class MathAtom;
 class Paragraph;
 class Text;
-class InsetIterator;
-class FontSpan;
 
 DocIterator doc_iterator_begin(Buffer const * buf, Inset const * inset = 0);
 DocIterator doc_iterator_end(Buffer const * buf, Inset const * inset = 0);
@@ -70,8 +71,6 @@ public:
        bool empty() const { return slices_.empty(); }
        /// is this the end position?
        bool atEnd() const { return slices_.empty(); }
-       /// is this the last possible position?
-       bool atLastPos() const { return pit() == lastpit() && pos() == lastpos(); }
 
        /// checks the cursor slices for disabled spell checker insets
        bool allowSpellCheck() const;
@@ -125,6 +124,7 @@ public:
        /// return the last column of the top grid
        col_type lastcol() const { return ncols() - 1; }
        /// the inset just behind the cursor
+       /// returns 0 if there is no inset (e.g. normal text)
        Inset * nextInset() const;
        /// the inset just in front of the cursor
        Inset * prevInset() const;
@@ -149,6 +149,10 @@ public:
        //
        /// return the mathed cell this cursor is in
        MathData & cell() const;
+       ///
+       InsetMath & nextMath();
+       ///
+       InsetMath & prevMath();
        /// the mathatom left of the cursor
        MathAtom & prevAtom() const;
        /// the mathatom right of the cursor
@@ -184,6 +188,10 @@ public:
        //
        // elementary moving
        //
+       /// move one step backwards
+       bool posBackward();
+       /// move one step forward
+       bool posForward();
        /**
         * move on one logical position, descend into nested insets
         * including collapsed insets
@@ -198,7 +206,7 @@ public:
        void forwardChar();
        /// move on one paragraph
        void forwardPar();
-       /// move on one inset
+       /// move on to the next closest inset
        void forwardInset();
        /// move backward one logical position
        void backwardPos();
@@ -239,6 +247,10 @@ public:
        /// Repopulate the slices insets from bottom to top. Useful
        /// for stable iterators or Undo data.
        void sanitize();
+       ///
+       bool isInside(Inset const *) const;
+       /// make sure we are outside of given inset
+       void leaveInset(Inset const & inset);
 
        /// find index of CursorSlice with &cell() == &cell (or -1 if not found)
        int find(MathData const & cell) const;
@@ -253,6 +265,11 @@ public:
        /// push one CursorSlice on top and set its index and position
        void append(idx_type idx, pos_type pos);
 
+       ///
+       docstring getPossibleLabel() const;
+
+       ///
+       Encoding const * getEncoding() const;
 private:
        friend class InsetIterator;
        friend DocIterator doc_iterator_begin(Buffer const * buf, Inset const * inset);
@@ -261,22 +278,22 @@ private:
        explicit DocIterator(Buffer * buf, Inset * inset);
        /**
         * Normally, when the cursor is at position i, it is painted *before*
-        * the character at position i. However, what if we want the cursor 
+        * the character at position i. However, what if we want the cursor
         * painted *after* position i? That's what boundary_ is for: if
         * boundary_==true, the cursor is painted *after* position i-1, instead
         * of before position i.
         *
         * Note 1: Usually, after i-1 or before i are actually the same place!
-        * However, this is not the case when i-1 and i are not painted 
+        * However, this is not the case when i-1 and i are not painted
         * contiguously, and in these cases we sometimes do want to have control
         * over whether to paint before i or after i-1.
         * Some concrete examples of where this happens:
         * a. i-1 at the end of one row, i at the beginning of next row
         * b. in bidi text, at transitions between RTL and LTR or vice versa
         *
-        * Note 2: Why i and i-1? Why, if boundary_==false means: *before* i, 
-        * couldn't boundary_==true mean: *after* i? 
-        * Well, the reason is this: cursor position is not used only for 
+        * Note 2: Why i and i-1? Why, if boundary_==false means: *before* i,
+        * couldn't boundary_==true mean: *after* i?
+        * Well, the reason is this: cursor position is not used only for
         * painting the cursor, but it also affects other things, for example:
         * where the next insertion will be placed (it is inserted at the current
         * position, pushing anything at the current position and beyond forward).
@@ -320,21 +337,21 @@ bool operator<(DocIterator const & p, DocIterator const & q)
 }
 
 
-inline 
+inline
 bool operator>(DocIterator const & p, DocIterator const & q)
 {
        return q < p;
 }
 
 
-inline 
+inline
 bool operator<=(DocIterator const & p, DocIterator const & q)
 {
        return !(q < p);
 }
 
 
-inline 
+inline
 bool operator>=(DocIterator const & p, DocIterator const & q)
 {
        return !(p < q);