]> git.lyx.org Git - lyx.git/blobdiff - src/lyxparagraph.h
patch from dekel
[lyx.git] / src / lyxparagraph.h
index ad8e21484f1670a2ce7ef1d1bb4998739fec7cbd..7852ca9dd5f6a111617ec412af1f86b1d93a311f 100644 (file)
@@ -24,7 +24,6 @@
 #include "vspace.h"
 #include "layout.h"
 #include "support/block.h"
-#include "direction.h"
 #include "language.h"
 
 class BufferParams;
@@ -120,6 +119,7 @@ public:
        ///
        LyXParagraph();
        /// this konstruktor inserts the new paragraph in a list
+       explicit
        LyXParagraph(LyXParagraph * par);
        /// the destruktors removes the new paragraph from the list
        ~LyXParagraph();
@@ -127,12 +127,13 @@ public:
        ///
        Language const * getParLanguage() const;
        ///
-       Language const * getLetterLanguage(size_type pos) const;
-
+       bool isRightToLeftPar() const;
+       ///
+       void ChangeLanguage(Language const * from, Language const * to);
        ///
-       LyXDirection getParDirection() const;
+       bool isMultiLingual();
        ///
-       LyXDirection getLetterDirection(size_type pos) const;
+       string String(bool label);
        
        ///
        void writeFile(std::ostream &, BufferParams const &, char, char) const;
@@ -153,10 +154,11 @@ public:
 
        ///
        LyXParagraph * TeXOnePar(std::ostream &, TexRow & texrow,
+                                bool moving_arg,
                                 std::ostream & foot, TexRow & foot_texrow,
                                 int & foot_count);
        ///
-       bool SimpleTeXOnePar(std::ostream &, TexRow & texrow);
+       bool SimpleTeXOnePar(std::ostream &, TexRow & texrow, bool moving_arg);
 
        ///
        LyXParagraph * TeXEnvironment(std::ostream &, TexRow & texrow,
@@ -182,10 +184,16 @@ public:
        /** Check if the current paragraph is the last paragraph in a
            proof environment */
        int GetEndLabel() const;
-
+       ///
+       Inset * InInset() { return inset_owner; }
+       ///
+       void SetInsetOwner(Inset * i) { inset_owner = i; }
 private:
        ///
        TextContainer text;
+       ///
+       Inset * inset_owner;
+
 public:
        ///
        size_type size() const { return text.size(); }
@@ -205,6 +213,9 @@ public:
        
        /// 
        VSpace added_space_bottom;
+
+       ///
+       Spacing spacing;
        
        ///
        LyXTextClass::LayoutList::size_type layout;
@@ -400,12 +411,12 @@ public:
        ///
        void InsertInset(size_type pos, Inset * inset);
        ///
+       bool InsertInsetAllowed(Inset * inset);
+       ///
        Inset * GetInset(size_type pos);
        ///
        Inset const * GetInset(size_type pos) const;
        ///
-       Inset * ReturnNextInsetPointer(size_type & pos);
-       ///
        void OpenFootnote(size_type pos);
        ///
        void CloseFootnote(size_type pos);
@@ -414,7 +425,7 @@ public:
        ///
        void CutIntoMinibuffer(size_type pos);
        ///
-       void InsertFromMinibuffer(size_type pos);
+       bool InsertFromMinibuffer(size_type pos);
 
        ///
        bool IsHfill(size_type pos) const;
@@ -501,6 +512,7 @@ public:
        ///
        void SimpleDocBookOneTablePar(std::ostream &, string & extra,
                                      int & desc_on, int depth);
+private:
        ///
        struct InsetTable {
                ///
@@ -510,7 +522,23 @@ public:
                ///
                InsetTable(size_type p, Inset * i) { pos = p; inset = i;}
        };
-private:
+       ///
+       friend struct matchIT;
+       ///
+       struct matchIT {
+               /// used by lower_bound
+               inline
+               int operator()(LyXParagraph::InsetTable const & a,
+                              LyXParagraph::size_type pos) const {
+                       return a.pos < pos;
+               }
+               /// used by upper_bound
+               inline
+               int operator()(LyXParagraph::size_type pos,
+                              LyXParagraph::InsetTable const & a) const {
+                       return pos < a.pos;
+               }
+       };
        /** A font entry covers a range of positions. Notice that the
          entries in the list are inserted in random order.
          I don't think it's worth the effort to implement a more effective
@@ -549,7 +577,7 @@ private:
        LyXParagraph * TeXFootnote(std::ostream &, TexRow & texrow,
                                   std::ostream & foot, TexRow & foot_texrow,
                                   int & foot_count,
-                                  LyXDirection par_direction);
+                                  bool parent_is_rtl);
        ///
        bool SimpleTeXOneTablePar(std::ostream &, TexRow & texrow);
        ///
@@ -563,6 +591,7 @@ private:
                             LyXLayout const & style);
        ///
        void SimpleTeXSpecialChars(std::ostream &, TexRow & texrow,
+                                  bool moving_arg,
                                   LyXFont & font, LyXFont & running_font,
                                   LyXFont & basefont, bool & open_font,
                                   LyXLayout const & style,
@@ -572,12 +601,37 @@ private:
        unsigned int id_;
        ///
        static unsigned int paragraph_id;
-};
+public:
+       class inset_iterator {
+       public:
+               inset_iterator() {}
+               inset_iterator(InsetList::iterator const & iter) : it(iter) {};
+               inset_iterator & operator++() {
+                       ++it;
+                       return *this;
+               }
+               Inset * operator*() { return (*it).inset; }
+               size_type getPos() {return (*it).pos; }
+               bool operator==(inset_iterator const & iter) const {
+                       return it == iter.it;
+               }
+               bool operator!=(inset_iterator const & iter) const {
+                       return it != iter.it;
+               }
+       private:
+               InsetList::iterator it;
+       };
+       ///
+       inset_iterator inset_iterator_begin() {
+               return inset_iterator(insetlist.begin());
+       }
+       ///
+       inset_iterator inset_iterator_end() {
+               return inset_iterator(insetlist.end());
+       }
+       ///
+       inset_iterator InsetIterator(size_type pos);
 
-inline bool operator<(LyXParagraph::InsetTable const & a, 
-                     LyXParagraph::InsetTable const & b)
-{
-        return a.pos < b.pos;
-}
+};
 
 #endif