X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxparagraph.h;h=aacc6f2c4e315748c94c751322a8869e3b669a57;hb=77639efa94ce5c071cf47bfd3ba0026f157a1e6a;hp=69e956f2f0c3ea27492d56cc70c83bbcbce89e09;hpb=a996b1bd2ba6fb8b3870aad05decde3cce1a6df6;p=lyx.git diff --git a/src/lyxparagraph.h b/src/lyxparagraph.h index 69e956f2f0..aacc6f2c4e 100644 --- a/src/lyxparagraph.h +++ b/src/lyxparagraph.h @@ -16,20 +16,15 @@ #pragma interface #endif -//#define HAVE_ROPE 1 - -#ifdef HAVE_ROPE -#include -#endif +#include "LString.h" #include #include +#include #include "insets/lyxinset.h" -#include "vspace.h" -#include "layout.h" -#include #include "language.h" +#include "ParagraphParameters.h" class BufferParams; class LyXBuffer; @@ -40,11 +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 +#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 { /// @@ -65,6 +62,7 @@ public: /// MINIPAGE_ALIGN_BOTTOM }; +#endif /// enum META_KIND { #ifndef NEW_INSETS @@ -128,11 +126,7 @@ public: /// typedef char value_type; /// -#ifndef HAVE_ROPE typedef std::vector TextContainer; -#else - typedef std::rope TextContainer; -#endif /// /* This should be TextContainer::size_type, but we need signed values for now. @@ -169,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(); @@ -212,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); /// @@ -238,34 +222,15 @@ private: public: /// - size_type size() const { return text.size(); } + size_type size() const; /// - void fitToSize() { -#ifndef HAVE_ROPE - text.resize(text.size()); -#endif - } + void fitToSize(); /// - void setContentsFromPar(LyXParagraph * par) { - text = par->text; - } + void setContentsFromPar(LyXParagraph * par); /// - void clearContents() { -#ifndef HAVE_ROPE - text.clear(); -#else - text.erase(text.mutable_begin(), text.mutable_end()); -#endif - } - - /// - VSpace added_space_top; - - /// - VSpace added_space_bottom; + void clearContents(); - /// - Spacing spacing; + ParagraphParameters params; /// LyXTextClass::LayoutList::size_type layout; @@ -282,85 +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: /// array counter_; public: /// - void setCounter(int i, int v) { counter_[i] = v; } - /// - int getCounter(int i) const { return counter_[i]; } + void setCounter(int i, int v); /// - void incCounter(int i) { counter_[i]++; } - /// - 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; - + 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 @@ -413,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 @@ -444,14 +374,7 @@ public: /// value_type GetUChar(BufferParams const &, 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 SetChar(size_type pos, value_type c); /// void SetFont(size_type pos, LyXFont const & font); /// @@ -547,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 */ /// @@ -554,6 +478,7 @@ public: string const & width, string const & widthp); /// void UnsetPExtraType(BufferParams const &); +#endif /// bool linuxDocConvertChar(char c, string & sgml_string); private: @@ -564,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; @@ -589,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 @@ -600,9 +540,9 @@ private: The values LyXFont::IGNORE_* and LyXFont::TOGGLE are NOT allowed in these font tables. */ - LyXFont font; + boost::shared_ptr font_; /// - FontTable(size_type p, LyXFont const & f) {pos = p; font = f;} + static ShareContainer container; }; /// friend struct matchFT; @@ -612,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(); } }; @@ -688,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