]> git.lyx.org Git - lyx.git/blobdiff - src/lyxparagraph.h
Changed InsetText * in InsetCollapsable to be a InsetText.
[lyx.git] / src / lyxparagraph.h
index 9a7abc872a14707ef88aace3c5f96e4b3863b6a4..aacc6f2c4e315748c94c751322a8869e3b669a57 100644 (file)
 #pragma interface
 #endif
 
+#include "LString.h"
+
 #include <vector>
 #include <list>
+#include <boost/array.hpp>
 
 #include "insets/lyxinset.h"
-#include "vspace.h"
-#include "layout.h"
-#include "support/block.h"
 #include "language.h"
+#include "ParagraphParameters.h"
 
 class BufferParams;
 class LyXBuffer;
@@ -34,15 +35,13 @@ class BufferView;
 
 // I dare you to enable this and help me find all the bugs that then show
 // 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
+#define NEW_INSETS 1
+#define NO_PEXTRA 1
 
 /// A LyXParagraph holds all text, attributes and insets in a text paragraph
 class LyXParagraph  {
 public:
+#ifndef NO_PEXTRA_REALLY
        ///
        enum PEXTRA_TYPE {
                ///
@@ -63,6 +62,7 @@ public:
                ///
                MINIPAGE_ALIGN_BOTTOM
        };
+#endif
        ///
        enum META_KIND {
 #ifndef NEW_INSETS
@@ -128,14 +128,17 @@ public:
        ///
        typedef std::vector<value_type> TextContainer;
        ///
-       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();
 
        ///
@@ -160,14 +163,9 @@ public:
        void validate(LaTeXFeatures &) const;
        
        ///
-       int id() const {
-               return id_;
-       }
+       int id() const;
        ///
-       void id(int id_arg) {
-               id_ = id_arg;
-       }
-
+       void id(int id_arg);
        ///
        void read();
 
@@ -203,18 +201,13 @@ public:
        void MakeSameLayout(LyXParagraph const * par);
 
        /// Is it the first par with same depth and layout?
-       bool IsFirstInSequence() const {
-               LyXParagraph const * dhook = DepthHook(GetDepth());
-               return (dhook == this
-                       || dhook->GetLayout() != GetLayout()
-                       || dhook->GetDepth() != GetDepth());
-       }
+       bool IsFirstInSequence() const;
 
        /** Check if the current paragraph is the last paragraph in a
            proof environment */
        int GetEndLabel(BufferParams const &) const;
        ///
-       Inset * InInset() { return inset_owner; }
+       Inset * InInset();
        ///
        void SetInsetOwner(Inset * i);
        ///
@@ -229,28 +222,15 @@ private:
 
 public:
        ///
-       size_type size() const { return text.size(); }
+       size_type size() const;
        ///
-       void fitToSize() {
-               text.resize(text.size());
-       }
+       void fitToSize();
        ///
-       void setContentsFromPar(LyXParagraph * par) {
-               text = par->text;
-       }
+       void setContentsFromPar(LyXParagraph * par);
        ///
-       void clearContents() {
-               text.clear();
-       }
-       
-       /// 
-       VSpace added_space_top;
-       
-       /// 
-       VSpace added_space_bottom;
+       void clearContents();
 
-       ///
-       Spacing spacing;
+       ParagraphParameters params;
        
        ///
        LyXTextClass::LayoutList::size_type layout;
@@ -267,91 +247,48 @@ public:
        /// footnote, margin, fig, tab
        footnote_kind footnotekind;
 #endif
-       ///
-       bool line_top;
-       
-       ///
-       bool line_bottom;
-       
-       ///
-       bool pagebreak_top;
-       
-       ///
-       bool pagebreak_bottom;
-       
-       ///
-       LyXAlignment align;
-       
-       ///
-       char depth;
-       
-       ///
-        bool noindent;
        
 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]++; }
+       void setCounter(int i, int v);
        ///
-       bool start_of_appendix;
-
+       int getCounter(int i) const;
        ///
-       bool appendix;
+       void incCounter(int i);
 
        ///
        char enumdepth;
        
        ///
        char itemdepth;
-
-        /* This is for the paragraph extra stuff */
-        ///
-        int pextra_type;
-        ///
-        string pextra_width;
-        ///
-        string pextra_widthp;
-        ///
-        int pextra_alignment;
-        ///
-        bool pextra_hfill;
-        ///
-        bool pextra_start_minipage;
-        
-        ///
-       string labelstring;
-       
-       ///
-       string labelwidthstring;
-       
+#ifdef NEW_INSETS
+private:
+#endif
        ///
-       LyXParagraph * next;
+       LyXParagraph * next_;
        ///
-       LyXParagraph * previous;
-
-#ifndef NEW_TABULAR
-       /* table stuff -- begin*/
-       ///
-       LyXTable * table;
-       /* table stuff -- end*/
-#endif
+       LyXParagraph * previous_;
+public:
         /// 
         InsetBibKey * bibkey;  // ale970302
 
+       ///
+       void next(LyXParagraph *);
        /** these function are able to hide closed footnotes
         */
-       LyXParagraph * Next();
-       
+       LyXParagraph * next();
        ///
-       LyXParagraph * Previous();
+       LyXParagraph const * next() const;
+
+       ///
+       void previous(LyXParagraph *);
+       ///
+       LyXParagraph * previous();
        ///
-       LyXParagraph const * Previous() const;
+       LyXParagraph const * previous() const;
 
 #ifndef NEW_INSETS
        /** these function are able to hide open and closed footnotes
@@ -404,8 +341,10 @@ public:
                           LyXTextClass::LayoutList::size_type new_layout);
        ///
        int GetFirstCounter(int i) const;
+#ifndef NEW_INSETS
        ///
        size_type Last() const;
+#endif
        ///
        void Erase(size_type pos);
        /** the flag determines wether the layout should be copied
@@ -432,11 +371,10 @@ public:
        LyXFont const getFont(BufferParams const &, size_type pos) const;
        ///
        value_type GetChar(size_type pos) const;
+       ///
+       value_type GetUChar(BufferParams const &, size_type pos) const;
        /// The position must already exist.
-       void SetChar(size_type pos, value_type c) {
-               text[pos] = c;
-       }
-       
+       void SetChar(size_type pos, value_type c);
        ///
        void SetFont(size_type pos, LyXFont const & font);
        ///
@@ -464,8 +402,10 @@ public:
        ///
        void CloseFootnote(size_type pos);
 #endif
-       /// important for cut and paste
-       void CopyIntoMinibuffer(BufferParams const &, size_type pos) const;
+       /** important for cut and paste
+           Temporary change from BufferParams to Buffer. Will revert when we
+           get rid of the argument to Inset::Clone(Buffer const &) */
+       void CopyIntoMinibuffer(Buffer const &, size_type pos) const;
        ///
        void CutIntoMinibuffer(BufferParams const &, size_type pos);
        ///
@@ -530,6 +470,7 @@ public:
            first paragraph keeps information  about layoutparameters, */
        bool IsDummy() const;
 #endif
+#ifndef NO_PEXTRA_REALLY
         /* 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 */
        ///
@@ -537,19 +478,9 @@ public:
                           string const & width, string const & widthp);
        ///
         void UnsetPExtraType(BufferParams const &);
+#endif
        ///
        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 {
@@ -558,7 +489,7 @@ private:
                ///
                Inset * inset;
                ///
-               InsetTable(size_type p, Inset * i) { pos = p; inset = i;}
+               InsetTable(size_type p, Inset * i) : pos(p), inset(i) {}
        };
        ///
        friend struct matchIT;
@@ -583,8 +514,23 @@ private:
          (font_1 covers the chars 0,...,pos_1) (Dekel)
        */
        struct FontTable  {
+               ///
+               FontTable(size_type p, LyXFont const & f)
+                       : pos_(p)
+               {
+                       font_ = container.get(f);
+               }
+               ///
+               size_type pos() const { return pos_; }
+               ///
+               void pos(size_type p) { pos_ = p; }
+               ///
+               LyXFont const & font() const { return *font_; }
+               ///
+               void font(LyXFont const & f) { font_ = container.get(f);}
+       private:
                /// End position of paragraph this font attribute covers
-               size_type pos;
+               size_type pos_;
                /** Font. Interpretation of the font values:
                If a value is LyXFont::INHERIT_*, it means that the font 
                attribute is inherited from either the layout of this
@@ -594,9 +540,9 @@ private:
                The values LyXFont::IGNORE_* and LyXFont::TOGGLE are NOT 
                allowed in these font tables.
                */
-               LyXFont font;
+               boost::shared_ptr<LyXFont> font_;
                ///
-               FontTable(size_type p, LyXFont const & f) {pos = p; font = f;}
+               static ShareContainer<LyXFont> container;
        };
        ///
        friend struct matchFT;
@@ -606,7 +552,7 @@ private:
                inline
                int operator()(LyXParagraph::FontTable const & a,
                               LyXParagraph::FontTable const & b) const {
-                       return a.pos < b.pos;
+                       return a.pos() < b.pos();
                }
        };
 
@@ -633,16 +579,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,
@@ -678,7 +614,7 @@ public:
                ///
                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;
@@ -692,15 +628,97 @@ public:
                InsetList::iterator it;
        };
        ///
-       inset_iterator inset_iterator_begin() {
-               return inset_iterator(insetlist.begin());
-       }
+       inset_iterator inset_iterator_begin();
        ///
-       inset_iterator inset_iterator_end() {
-               return inset_iterator(insetlist.end());
-       }
+       inset_iterator inset_iterator_end();
        ///
        inset_iterator InsetIterator(size_type pos);
 };
 
+
+inline
+int LyXParagraph::id() const
+{
+       return id_;
+}
+
+
+inline
+void  LyXParagraph::id(int id_arg)
+{
+       id_ = id_arg;
+}
+
+
+inline
+bool LyXParagraph::IsFirstInSequence() const
+{
+       LyXParagraph const * dhook = DepthHook(GetDepth());
+       return (dhook == this
+               || dhook->GetLayout() != GetLayout()
+               || dhook->GetDepth() != GetDepth());
+}
+
+
+inline
+Inset * LyXParagraph::InInset()
+{
+       return inset_owner;
+}
+
+
+inline
+LyXParagraph::size_type LyXParagraph::size() const
+{
+       return text.size();
+}
+
+
+inline
+void LyXParagraph::clearContents()
+{
+       text.clear();
+}
+
+
+inline
+void LyXParagraph::setCounter(int i, int v)
+{
+       counter_[i] = v;
+}
+
+
+inline
+int LyXParagraph::getCounter(int i) const
+{
+       return counter_[i];
+}
+
+
+inline
+void LyXParagraph::incCounter(int i)
+{
+       counter_[i]++;
+}
+
+
+inline
+void LyXParagraph::SetChar(size_type pos, value_type c)
+{
+       text[pos] = c;
+}
+
+
+inline
+LyXParagraph::inset_iterator LyXParagraph::inset_iterator_begin()
+{
+       return inset_iterator(insetlist.begin());
+}
+
+
+inline
+LyXParagraph::inset_iterator LyXParagraph::inset_iterator_end()
+{
+       return inset_iterator(insetlist.end());
+}
 #endif