X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxparagraph.h;h=6d8d6129109aa9241555ef4440b7b4c563d3ef41;hb=f448e22d483e1370bcbfbb7be8cb47ad7251ed77;hp=dcccb3cd75cfe95bb681f7c517e0eda1898238a9;hpb=4d3288c95b580560b4707e163a0e60609e287758;p=lyx.git diff --git a/src/lyxparagraph.h b/src/lyxparagraph.h index dcccb3cd75..6d8d612910 100644 --- a/src/lyxparagraph.h +++ b/src/lyxparagraph.h @@ -16,14 +16,19 @@ #pragma interface #endif +//#define HAVE_ROPE 1 + +#ifdef HAVE_ROPE +#include +#endif + #include #include #include "insets/lyxinset.h" -#include "table.h" #include "vspace.h" #include "layout.h" -#include "support/block.h" +#include #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 TextContainer; +#else + typedef std::rope 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 &, @@ -220,6 +228,7 @@ public: void SetInsetOwner(Inset * i); /// void deleteInsetsLyXText(BufferView *); + /// void resizeInsetsLyXText(BufferView *); private: /// @@ -232,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) { @@ -240,7 +251,11 @@ public: } /// void clearContents() { +#ifndef HAVE_ROPE text.clear(); +#else + text.erase(text.mutable_begin(), text.mutable_end()); +#endif } /// @@ -267,8 +282,6 @@ public: /// footnote, margin, fig, tab footnote_kind footnotekind; #endif - //@Man: the LyX- DTP-switches - //@{ /// bool line_top; @@ -292,11 +305,13 @@ public: private: /// - block counter_; + array 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; @@ -329,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 @@ -388,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); /// @@ -418,29 +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; + 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 { @@ -632,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, @@ -662,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; }; ///