X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxparagraph.h;h=7852ca9dd5f6a111617ec412af1f86b1d93a311f;hb=245007468d0bb2aaa65dea4feab571b744dd9dec;hp=8835859650077be348e0d18931b1d4bc95ba6f0a;hpb=fa492d6bf09db7f1c278687e0000ad1c4833af3d;p=lyx.git diff --git a/src/lyxparagraph.h b/src/lyxparagraph.h index 8835859650..7852ca9dd5 100644 --- a/src/lyxparagraph.h +++ b/src/lyxparagraph.h @@ -24,7 +24,7 @@ #include "vspace.h" #include "layout.h" #include "support/block.h" -#include "direction.h" +#include "language.h" class BufferParams; class LyXBuffer; @@ -32,8 +32,6 @@ class TexRow; struct LaTeXFeatures; class InsetBibKey; -using std::list; - /// A LyXParagraph holds all text, attributes and insets in a text paragraph class LyXParagraph { public: @@ -114,24 +112,31 @@ public: /// typedef char value_type; /// - typedef vector TextContainer; + typedef std::vector TextContainer; /// typedef int size_type; /// LyXParagraph(); /// this konstruktor inserts the new paragraph in a list + explicit LyXParagraph(LyXParagraph * par); /// the destruktors removes the new paragraph from the list ~LyXParagraph(); /// - LyXDirection getParDirection() const; + Language const * getParLanguage() const; + /// + bool isRightToLeftPar() const; + /// + void ChangeLanguage(Language const * from, Language const * to); + /// + bool isMultiLingual(); /// - LyXDirection getLetterDirection(size_type pos) const; + string String(bool label); /// - void writeFile(ostream &, BufferParams const &, char, char) const; + void writeFile(std::ostream &, BufferParams const &, char, char) const; /// void validate(LaTeXFeatures &) const; @@ -148,18 +153,16 @@ public: void read(); /// - void readSimpleWholeFile(istream &); - - /// - LyXParagraph * TeXOnePar(ostream &, TexRow & texrow, - ostream & foot, TexRow & foot_texrow, + LyXParagraph * TeXOnePar(std::ostream &, TexRow & texrow, + bool moving_arg, + std::ostream & foot, TexRow & foot_texrow, int & foot_count); /// - bool SimpleTeXOnePar(ostream &, TexRow & texrow); + bool SimpleTeXOnePar(std::ostream &, TexRow & texrow, bool moving_arg); /// - LyXParagraph * TeXEnvironment(ostream &, TexRow & texrow, - ostream & foot, TexRow & foot_texrow, + LyXParagraph * TeXEnvironment(std::ostream &, TexRow & texrow, + std::ostream & foot, TexRow & foot_texrow, int & foot_count); /// LyXParagraph * Clone() const; @@ -178,16 +181,41 @@ public: || dhook->GetDepth() != GetDepth()); } - + /** 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(); } + /// + void fitToSize() { + text.resize(text.size()); + } + void setContentsFromPar(LyXParagraph * par) { + text = par->text; + } + void clearContents() { + text.clear(); + } + /// VSpace added_space_top; /// VSpace added_space_bottom; + + /// + Spacing spacing; /// LyXTextClass::LayoutList::size_type layout; @@ -299,6 +327,8 @@ public: LyXParagraph * PreviousBeforeFootnote(); /// LyXParagraph * LastPhysicalPar(); + /// + LyXParagraph const * LastPhysicalPar() const; /// LyXParagraph * FirstPhysicalPar(); @@ -317,7 +347,7 @@ public: /// int BeginningOfMainBody() const; /// - string GetLabestring() const; + string GetLabelstring() const; /// the next two functions are for the manual labels string GetLabelWidthString() const; @@ -349,6 +379,9 @@ public: This is what is stored in the fonttable */ LyXFont GetFontSettings(size_type pos) const; + /// + LyXFont 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. @@ -361,6 +394,11 @@ public: char GetChar(size_type pos); /// char GetChar(size_type pos) const; + /// The position must already exist. + void SetChar(size_type pos, char c) { + text[pos] = c; + } + /// void SetFont(size_type pos, LyXFont const & font); /// @@ -373,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); @@ -387,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; @@ -453,10 +491,7 @@ public: 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 { - return (footnoteflag == LyXParagraph::NO_FOOTNOTE && previous - && previous->footnoteflag != LyXParagraph::NO_FOOTNOTE); - } + bool IsDummy() const; /* 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 */ @@ -466,18 +501,44 @@ public: void UnsetPExtraType(); #if 0 /// - bool RoffContTableRows(ostream &, size_type i, int actcell); + bool RoffContTableRows(std::ostream &, size_type i, int actcell); #endif /// bool linuxDocConvertChar(char c, string & sgml_string); /// - void DocBookContTableRows(ostream &, string & extra, int & desc_on, - size_type i, + void DocBookContTableRows(std::ostream &, string & extra, + int & desc_on, size_type i, int current_cell_number, int & column); /// - void SimpleDocBookOneTablePar(ostream &, string & extra, + void SimpleDocBookOneTablePar(std::ostream &, string & extra, int & desc_on, int depth); private: + /// + struct InsetTable { + /// + size_type pos; + /// + Inset * inset; + /// + InsetTable(size_type p, Inset * i) { pos = p; inset = i;} + }; + /// + 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 @@ -501,42 +562,36 @@ private: LyXFont font; }; /// - struct InsetTable { - /// - size_type pos; - /// - Inset * inset; - }; - /// - typedef list FontList; + typedef std::list FontList; /// FontList fontlist; /// - typedef list InsetList; + typedef std::vector InsetList; /// InsetList insetlist; /// - LyXParagraph * TeXDeeper(ostream &, TexRow & texrow, - ostream & foot, TexRow & foot_texrow, + LyXParagraph * TeXDeeper(std::ostream &, TexRow & texrow, + std::ostream & foot, TexRow & foot_texrow, int & foot_count); /// - LyXParagraph * TeXFootnote(ostream &, TexRow & texrow, - ostream & foot, TexRow & foot_texrow, + LyXParagraph * TeXFootnote(std::ostream &, TexRow & texrow, + std::ostream & foot, TexRow & foot_texrow, int & foot_count, - LyXDirection par_direction); + bool parent_is_rtl); /// - bool SimpleTeXOneTablePar(ostream &, TexRow & texrow); + bool SimpleTeXOneTablePar(std::ostream &, TexRow & texrow); /// - bool TeXContTableRows(ostream &, size_type i, + bool TeXContTableRows(std::ostream &, size_type i, int current_cell_number, int & column, TexRow & texrow); /// - void SimpleTeXBlanks(ostream &, TexRow & texrow, + void SimpleTeXBlanks(std::ostream &, TexRow & texrow, size_type const i, int & column, LyXFont const & font, LyXLayout const & style); /// - void SimpleTeXSpecialChars(ostream &, TexRow & texrow, + void SimpleTeXSpecialChars(std::ostream &, TexRow & texrow, + bool moving_arg, LyXFont & font, LyXFont & running_font, LyXFont & basefont, bool & open_font, LyXLayout const & style, @@ -546,5 +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); + }; + #endif