]> git.lyx.org Git - lyx.git/blobdiff - src/lyxparagraph.h
prepare for 1.1.6pre2
[lyx.git] / src / lyxparagraph.h
index dd84cf2210c61bbddbb9eef80a5550036a53f54a..6d8d6129109aa9241555ef4440b7b4c563d3ef41 100644 (file)
 #pragma interface
 #endif
 
+//#define HAVE_ROPE 1
+
+#ifdef HAVE_ROPE
+#include <rope>
+#endif
+
 #include <vector>
 #include <list>
 
 #include "insets/lyxinset.h"
-#include "table.h"
 #include "vspace.h"
 #include "layout.h"
-#include "support/block.h"
+#include <boost/array.hpp>
 #include "language.h"
 
 class BufferParams;
@@ -37,10 +42,6 @@ class BufferView;
 // up. (Lgb)
 //#define NEW_INSETS 1
 
-// I dare you to try this one too. It is ortogonal with NEW_INSETS so you
-// can try both or just one of them.
-//#define NEW_TABULAR 1
-
 /// A LyXParagraph holds all text, attributes and insets in a text paragraph
 class LyXParagraph  {
 public:
@@ -89,7 +90,7 @@ public:
 #endif
                ///
                META_NEWLINE,
-               ///
+               //
                //META_PROTECTED_SEPARATOR,
                ///
                META_INSET
@@ -127,16 +128,23 @@ public:
        ///
        typedef char value_type;
        ///
+#ifndef HAVE_ROPE
        typedef std::vector<value_type> TextContainer;
+#else
+       typedef std::rope<value_type> TextContainer;
+#endif
        ///
-       typedef int size_type;
+       /* This should be TextContainer::size_type, but we need
+          signed values for now.
+       */
+       typedef TextContainer::difference_type size_type;
 
        ///
        LyXParagraph();
-       /// this konstruktor inserts the new paragraph in a list
+       /// this constructor inserts the new paragraph in a list
        explicit
        LyXParagraph(LyXParagraph * par);
-       /// the destruktors removes the new paragraph from the list
+       /// the destructor removes the new paragraph from the list
        ~LyXParagraph();
 
        ///
@@ -150,9 +158,9 @@ public:
        bool isMultiLingual(BufferParams const &);
        ///
 
-       string String(Buffer const *, bool label);
+       string const String(Buffer const *, bool label);
        ///
-       string String(Buffer const *, size_type beg, size_type end);
+       string const String(Buffer const *, size_type beg, size_type end);
        
        ///
        void writeFile(Buffer const *, std::ostream &, BufferParams const &,
@@ -188,9 +196,12 @@ public:
 
        ///
        LyXParagraph * TeXEnvironment(Buffer const *, BufferParams const &,
-                                     std::ostream &, TexRow & texrow,
-                                     std::ostream & foot, TexRow & foot_texrow,
-                                     int & foot_count);
+                                     std::ostream &, TexRow & texrow
+#ifndef NEW_INSETS
+                                     ,std::ostream & foot, TexRow & foot_texrow,
+                                     int & foot_count
+#endif
+               );
        ///
        LyXParagraph * Clone() const;
        
@@ -217,6 +228,7 @@ public:
        void SetInsetOwner(Inset * i);
        ///
        void deleteInsetsLyXText(BufferView *);
+       ///
        void resizeInsetsLyXText(BufferView *);
 private:
        ///
@@ -229,7 +241,9 @@ public:
        size_type size() const { return text.size(); }
        ///
        void fitToSize() {
+#ifndef HAVE_ROPE
                text.resize(text.size());
+#endif
        }
        ///
        void setContentsFromPar(LyXParagraph * par) {
@@ -237,7 +251,11 @@ public:
        }
        ///
        void clearContents() {
+#ifndef HAVE_ROPE
                text.clear();
+#else
+               text.erase(text.mutable_begin(), text.mutable_end());
+#endif
        }
        
        /// 
@@ -264,8 +282,6 @@ public:
        /// footnote, margin, fig, tab
        footnote_kind footnotekind;
 #endif
-       //@Man: the LyX- DTP-switches
-       //@{
        ///
        bool line_top;
        
@@ -289,11 +305,13 @@ public:
        
 private:
        ///
-       block<int, 10> counter_;
+       array<int, 10> counter_;
 public:
        ///
        void setCounter(int i, int v) { counter_[i] = v; }
+       ///
        int getCounter(int i) const { return counter_[i]; }
+       ///
        void incCounter(int i) { counter_[i]++; }
        ///
        bool start_of_appendix;
@@ -326,19 +344,12 @@ public:
        
        ///
        string labelwidthstring;
-       //@}
        
        ///
        LyXParagraph * next;
        ///
        LyXParagraph * previous;
 
-#ifndef NEW_TABULAR
-       /* table stuff -- begin*/
-       ///
-       LyXTable * table;
-       /* table stuff -- end*/
-#endif
         /// 
         InsetBibKey * bibkey;  // ale970302
 
@@ -369,12 +380,11 @@ public:
        LyXParagraph * FirstPhysicalPar();
        ///
        LyXParagraph const * FirstPhysicalPar() const;
-#endif
-
        /// returns the physical paragraph
        LyXParagraph * ParFromPos(size_type pos);
        /// returns the position in the physical par
        int PositionInParFromPos(size_type pos) const;
+#endif
 
        /// for the environments
        LyXParagraph * DepthHook(int depth);
@@ -386,7 +396,7 @@ public:
        string const & GetLabelstring() const;
        
        /// the next two functions are for the manual labels
-       string GetLabelWidthString() const;
+       string const GetLabelWidthString() const;
        ///
        void SetLabelWidthString(string const & s);
        ///
@@ -416,31 +426,34 @@ public:
          between the characters font and the layoutfont.
          This is what is stored in the fonttable
         */
-       LyXFont GetFontSettings(BufferParams const &, size_type pos) const;
+       LyXFont const
+       GetFontSettings(BufferParams const &, size_type pos) const;
        ///
-       LyXFont GetFirstFontSettings() const;
+       LyXFont const GetFirstFontSettings() const;
 
        /** Get fully instantiated font. If pos == -1, use the layout
-         font attached to this paragraph.
-         If pos == -2, use the label font of the layout attached here.
-         In all cases, the font is instantiated, i.e. does not have any
-         attributes with values LyXFont::INHERIT, LyXFont::IGNORE or 
-         LyXFont::TOGGLE.
-         */
-       LyXFont getFont(BufferParams const &, size_type pos) const;
-       ///
-       value_type GetChar(size_type pos);
+           font attached to this paragraph.
+           If pos == -2, use the label font of the layout attached here.
+           In all cases, the font is instantiated, i.e. does not have any
+           attributes with values LyXFont::INHERIT, LyXFont::IGNORE or 
+           LyXFont::TOGGLE.
+       */
+       LyXFont const getFont(BufferParams const &, size_type pos) const;
        ///
        value_type GetChar(size_type pos) const;
        /// The position must already exist.
        void SetChar(size_type pos, value_type c) {
+#ifndef HAVE_ROPE
                text[pos] = c;
+#else
+               text.replace(pos, c);
+#endif
        }
        
        ///
        void SetFont(size_type pos, LyXFont const & font);
        ///
-        string GetWord(size_type &) const;
+        string const GetWord(size_type &) const;
        /// Returns the height of the highest font in range
        LyXFont::FONT_SIZE HighestFontInRange(size_type startpos,
                                              size_type endpos) const;
@@ -523,33 +536,22 @@ public:
 
 #ifndef NEW_INSETS
        /** A paragraph following a footnote is a "dummy". A paragraph
-         with a footnote in it is stored as three paragraphs:
-         First a paragraph with the text up to the footnote, then
-         one (or more) paragraphs with the footnote, and finally
-         the a paragraph with the text after the footnote. Only the
-         first paragraph keeps information  about layoutparameters, */
+           with a footnote in it is stored as three paragraphs:
+           First a paragraph with the text up to the footnote, then
+           one (or more) paragraphs with the footnote, and finally
+           the a paragraph with the text after the footnote. Only the
+           first paragraph keeps information  about layoutparameters, */
        bool IsDummy() const;
 #endif
         /* If I set a PExtra Indent on one paragraph of a ENV_LIST-TYPE
            I have to set it on each of it's elements */
        ///
-        void SetPExtraType(BufferParams const &,
-                          int type, char const * width, char const * widthp);
+        void SetPExtraType(BufferParams const &, int type,
+                          string const & width, string const & widthp);
        ///
         void UnsetPExtraType(BufferParams const &);
        ///
        bool linuxDocConvertChar(char c, string & sgml_string);
-#ifndef NEW_TABULAR
-       ///
-       void DocBookContTableRows(Buffer const *,
-                                 std::ostream &, string & extra,
-                                 int & desc_on, size_type i,
-                                 int current_cell_number, int & column);
-       ///
-       void SimpleDocBookOneTablePar(Buffer const *,
-                                     std::ostream &, string & extra,
-                                     int & desc_on, int depth);
-#endif
 private:
        ///
        struct InsetTable {
@@ -598,6 +600,7 @@ private:
                ///
                FontTable(size_type p, LyXFont const & f) {pos = p; font = f;}
        };
+       ///
        friend struct matchFT;
        ///
        struct matchFT {
@@ -619,9 +622,12 @@ private:
        InsetList insetlist;
        ///
        LyXParagraph * TeXDeeper(Buffer const *, BufferParams const &,
-                                std::ostream &, TexRow & texrow,
-                                std::ostream & foot, TexRow & foot_texrow,
-                                int & foot_count);
+                                std::ostream &, TexRow & texrow
+#ifndef NEW_INSETS
+                                ,std::ostream & foot, TexRow & foot_texrow,
+                                int & foot_count
+#endif
+               );
 #ifndef NEW_INSETS
        ///
        LyXParagraph * TeXFootnote(Buffer const *, BufferParams const &,
@@ -629,16 +635,6 @@ private:
                                   std::ostream & foot, TexRow & foot_texrow,
                                   int & foot_count,
                                   bool parent_is_rtl);
-#endif
-#ifndef NEW_TABULAR
-       ///
-       bool SimpleTeXOneTablePar(Buffer const *, BufferParams const &,
-                                 std::ostream &, TexRow & texrow);
-       ///
-       bool TeXContTableRows(Buffer const *, BufferParams const &,
-                             std::ostream &, size_type i,
-                             int current_cell_number,
-                              int & column, TexRow & texrow);
 #endif
        ///
        void SimpleTeXBlanks(std::ostream &, TexRow & texrow,
@@ -659,23 +655,32 @@ private:
        ///
        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; }
+               ///
+               size_type getPos() const {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;
        };
        ///