X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph.h;h=79ae05e6d6023488724d38a04382a581fdf0bc79;hb=09e01879979643949f1f2c7216023f1f35d5ada2;hp=caedbaf9faac92a879ba5d93d329934878d624d4;hpb=60322bc9d78704180ddfd2e4bf83ffa65143761c;p=lyx.git diff --git a/src/paragraph.h b/src/paragraph.h index caedbaf9fa..79ae05e6d6 100644 --- a/src/paragraph.h +++ b/src/paragraph.h @@ -13,38 +13,38 @@ #include "lyxfont.h" // Just for LyXFont::FONT_SIZE #include "InsetList.h" -#include "insets/inset.h" // Just for Inset::Code +#include "insets/inset.h" // Just for InsetOld::Code #include "support/types.h" #include "changes.h" +#include "RowList.h" #include "LString.h" +class Buffer; class BufferParams; class BufferView; class Counters; class InsetBibitem; class Language; class LaTeXFeatures; +class LatexRunParams; class ParagraphParameters; class TexRow; - -// Define this if you want to try out the new storage container for -// paragraphs. (Lgb) -// This is non working and far from finished. -// #define NO_NEXT 1 +class ParagraphList; +class UpdatableInset; /// A Paragraph holds all text, attributes and insets in a text paragraph class Paragraph { public: /// enum META_KIND { - /// - META_HFILL = 1, - /// - META_NEWLINE, - /// - META_INSET + /// Note that this is 1 right now to avoid + /// crashes where getChar() is called wrongly + /// (returning 0) - if this was 0, then we'd + /// try getInset() and crash. We should fix + /// all these places. + META_INSET = 1 }; /// typedef char value_type; @@ -53,13 +53,11 @@ public: /// Paragraph(); -#ifndef NO_NEXT - /// this constructor inserts the new paragraph in a list - explicit - Paragraph(Paragraph * par); -#endif + + /// + Paragraph(Paragraph const &); /// - Paragraph(Paragraph const &, bool same_ids); + void operator=(Paragraph const &); /// the destructor removes the new paragraph from the list ~Paragraph(); @@ -87,8 +85,8 @@ public: /// return the unique ID of this paragraph int id() const; - /// - void read(); + /// Set the Id of this paragraph. + void id(int); /// int startTeXParParams(BufferParams const &, std::ostream &, bool) const; @@ -99,35 +97,28 @@ public: /// bool simpleTeXOnePar(Buffer const *, BufferParams const &, - std::ostream &, TexRow & texrow, bool moving_arg); + LyXFont const & outerfont, std::ostream &, + TexRow & texrow, LatexRunParams const &); /// - bool hasSameLayout(Paragraph const * par) const; + bool hasSameLayout(Paragraph const & par) const; /// - void makeSameLayout(Paragraph const * par); - - /// Is it the first par with same depth and layout? - bool isFirstInSequence() const; + void makeSameLayout(Paragraph const & par); - /** Check if the current paragraph is the last paragraph in a - proof environment */ - int getEndLabel() const; /// - Inset * inInset() const; + UpdatableInset * inInset() const; /// - void setInsetOwner(Inset * i); + void setInsetOwner(UpdatableInset * inset); /// void deleteInsetsLyXText(BufferView *); - /// - void resizeInsetsLyXText(BufferView *); /// lyx::pos_type size() const; /// bool empty() const; /// - void setContentsFromPar(Paragraph * par); + void setContentsFromPar(Paragraph const & par); /// void clearContents(); @@ -143,16 +134,7 @@ public: char itemdepth; /// - InsetBibitem * bibitem(); // ale970302 - -#ifndef NO_NEXT - /// - void next(Paragraph *); - /** these function are able to hide closed footnotes - */ - Paragraph * next(); - /// - Paragraph const * next() const; + InsetBibitem * bibitem() const; // ale970302 /// initialise tracking for this par void trackChanges(Change::Type = Change::UNCHANGED); @@ -175,6 +157,9 @@ public: /// is there a non-addition in this range ? bool isChangeEdited(lyx::pos_type start, lyx::pos_type end) const; + /// set change at pos + void setChange(lyx::pos_type pos, Change::Type type); + /// accept change void acceptChange(lyx::pos_type start, lyx::pos_type end); @@ -184,23 +169,13 @@ public: /// mark whole par as erased void markErased(); - /// - void previous(Paragraph *); - /// - Paragraph * previous(); - /// - Paragraph const * previous() const; -#endif - /// for the environments - Paragraph * depthHook(depth_type depth); - /// for the environments - Paragraph const * depthHook(depth_type depth) const; - /// - Paragraph * outerHook(); - /// - Paragraph const * outerHook() const; - /// - int beginningOfMainBody() const; + /// Paragraphs can contain "manual labels", for example, Description + /// environment. The text for this user-editable label is stored in + /// the paragraph alongside the text of the rest of the paragraph + /// (the body). This function returns the starting position of the + /// body of the text in the paragraph. + int beginningOfBody() const; + /// string const & getLabelstring() const; @@ -217,10 +192,12 @@ public: /// void applyLayout(LyXLayout_ptr const & new_layout); + /// definite erase + void eraseIntern(lyx::pos_type pos); /// erase the char at the given position - void erase(lyx::pos_type pos); - /// erase the given range. Returns true if actually erased. - bool erase(lyx::pos_type start, lyx::pos_type end); + bool erase(lyx::pos_type pos); + /// erase the given range. Returns the number of chars actually erased + int erase(lyx::pos_type start, lyx::pos_type end); /** Get uninstantiated font setting. Returns the difference between the characters font and the layoutfont. @@ -238,9 +215,19 @@ public: attributes with values LyXFont::INHERIT, LyXFont::IGNORE or LyXFont::TOGGLE. */ - LyXFont const getFont(BufferParams const &, lyx::pos_type pos) const; - LyXFont const getLayoutFont(BufferParams const &) const; - LyXFont const getLabelFont(BufferParams const &) const; + LyXFont const getFont(BufferParams const &, lyx::pos_type pos, + LyXFont const & outerfont) const; + LyXFont const getLayoutFont(BufferParams const &, + LyXFont const & outerfont) const; + LyXFont const getLabelFont(BufferParams const &, + LyXFont const & outerfont) const; + /** + * The font returned by the above functions is the same in a + * span of characters. This method will return the last position + * in the paragraph for which that font is the same. + * This can be used to avoid unnecessary calls to getFont. + */ + lyx::pos_type getEndPosOfFontSpan(lyx::pos_type pos) const; /// value_type getChar(lyx::pos_type pos) const; /// @@ -261,23 +248,15 @@ public: /// bool checkInsertChar(LyXFont &); /// - void insertInset(lyx::pos_type pos, Inset * inset); + void insertInset(lyx::pos_type pos, InsetOld * inset); /// - void insertInset(lyx::pos_type pos, Inset * inset, LyXFont const &, Change change = Change(Change::INSERTED)); + void insertInset(lyx::pos_type pos, InsetOld * inset, LyXFont const &, Change change = Change(Change::INSERTED)); /// - bool insetAllowed(Inset::Code code); + bool insetAllowed(InsetOld::Code code); /// - Inset * getInset(lyx::pos_type pos); + InsetOld * getInset(lyx::pos_type pos); /// - Inset const * getInset(lyx::pos_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 &, lyx::pos_type pos) const; - /// - void cutIntoMinibuffer(BufferParams const &, lyx::pos_type pos); - /// - bool insertFromMinibuffer(lyx::pos_type pos); + InsetOld const * getInset(lyx::pos_type pos) const; /// bool isHfill(lyx::pos_type pos) const; @@ -297,42 +276,37 @@ public: bool isWord(lyx::pos_type pos) const; /// returns -1 if inset not found - int getPositionOfInset(Inset const * inset) const; + int getPositionOfInset(InsetOld const * inset) const; /// int stripLeadingSpaces(); - /// + /// return true if we allow multiple spaces bool isFreeSpacing() const; + /// return true if we allow this par to stay empty + bool allowEmpty() const; + /// ParagraphParameters & params(); /// ParagraphParameters const & params() const; /// InsetList insetlist; - /// - //Counters & counters(); - friend void breakParagraph(BufferParams const & bparams, - Paragraph * par, lyx::pos_type pos, int flag); + /// + mutable RowList rows; private: /// LyXLayout_ptr layout_; - /// if anything uses this we don't want it to. - Paragraph(Paragraph const &); -#ifndef NO_NEXT - /// - Paragraph * next_; - /// - Paragraph * previous_; -#endif + struct Pimpl; /// friend struct Paragraph::Pimpl; /// Pimpl * pimpl_; + };