X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph.h;h=f3c3700025dbd9abfca3ba99f5ace62cedcc1cfe;hb=8c93f63b48a1b15d4f3e163b7305213f2f73879e;hp=14c9cc156eaecb16d30a4320f999e2faf81c44df;hpb=282f86fbb1ec7a877cdd05f25edbf468ae06595d;p=lyx.git diff --git a/src/paragraph.h b/src/paragraph.h index 14c9cc156e..f3c3700025 100644 --- a/src/paragraph.h +++ b/src/paragraph.h @@ -26,10 +26,7 @@ #include "support/types.h" -#include - #include -#include class Buffer; class BufferParams; @@ -49,6 +46,19 @@ class ParagraphParameters; class TexRow; +class FontSpan { +public: + /// Invalid font span containing no character + FontSpan() : first(0), last(-1) {} + /// Span including first and last + FontSpan(lyx::pos_type f, lyx::pos_type l) : first(f), last(l) {} + +public: + /// Range including first and last. + lyx::pos_type first, last; +}; + + /// A Paragraph holds all text, attributes and insets in a text paragraph class Paragraph { public: @@ -97,10 +107,10 @@ public: /// std::string const asString(Buffer const &, bool label) const; /// - std::string const Paragraph::asString(Buffer const & buffer, - lyx::pos_type beg, - lyx::pos_type end, - bool label) const; + std::string const asString(Buffer const & buffer, + lyx::pos_type beg, + lyx::pos_type end, + bool label) const; /// std::string const asString(Buffer const &, OutputParams const & runparams, @@ -215,14 +225,17 @@ public: /// set change at pos void setChange(lyx::pos_type pos, Change::Type type); + /// set full change at pos + void setChangeFull(lyx::pos_type pos, Change change); + /// accept change void acceptChange(lyx::pos_type start, lyx::pos_type end); /// reject change void rejectChange(lyx::pos_type start, lyx::pos_type end); - /// mark whole par as erased - void markErased(); + /// mark whole par as erased or not + void markErased(bool erased); /// Paragraphs can contain "manual labels", for example, Description /// environment. The text for this user-editable label is stored in @@ -263,7 +276,7 @@ public: LyXFont const getFontSettings(BufferParams const &, lyx::pos_type pos) const; /// - LyXFont const getFirstFontSettings() const; + LyXFont const getFirstFontSettings(BufferParams const &) const; /** Get fully instantiated font. If pos == -1, use the layout font attached to this paragraph. @@ -281,19 +294,14 @@ public: /** * The font returned by the above functions is the same in a * span of characters. This method will return the first and - * the last last positions in the paragraph for which that - * font is the same. This can be used to avoid unnecessary - * calls to getFont. + * the last positions in the paragraph for which that font is + * the same. This can be used to avoid unnecessary calls to + * getFont. */ - std::pair getFontSpan(lyx::pos_type pos) const; + FontSpan fontSpan(lyx::pos_type pos) const; /// /// this is a bottleneck. - value_type getChar(lyx::pos_type pos) const - { - BOOST_ASSERT(pos >= 0); - BOOST_ASSERT(pos < int(text_.size())); - return text_[pos]; - } + value_type getChar(lyx::pos_type pos) const { return text_[pos]; } /// Get the char, but mirror all bracket characters if it is right-to-left value_type getUChar(BufferParams const &, lyx::pos_type pos) const; /// The position must already exist. @@ -309,36 +317,40 @@ public: LyXFont const & font); /// void insertChar(lyx::pos_type pos, value_type c, - Change change = Change(Change::INSERTED)); + Change change = Change::INSERTED); /// void insertChar(lyx::pos_type pos, value_type c, - LyXFont const &, Change change = Change(Change::INSERTED)); - /// - bool checkInsertChar(LyXFont &); + LyXFont const &, Change change = Change::INSERTED); /// void insertInset(lyx::pos_type pos, InsetBase * inset, - Change change = Change(Change::INSERTED)); + Change change = Change::INSERTED); /// void insertInset(lyx::pos_type pos, InsetBase * inset, - LyXFont const &, Change change = Change(Change::INSERTED)); + LyXFont const &, Change change = Change::INSERTED); /// bool insetAllowed(InsetBase_code code); /// - InsetBase * getInset(lyx::pos_type pos); - /// - InsetBase const * getInset(lyx::pos_type pos) const; + InsetBase * getInset(lyx::pos_type pos) { + return insetlist.get(pos); + } /// - InsetList insetlist; - + InsetBase const * getInset(lyx::pos_type pos) const { + return insetlist.get(pos); + } /// - bool isHfill(lyx::pos_type pos) const; + bool isHfill(lyx::pos_type pos) const { + return isInset(pos) + && getInset(pos)->lyxCode() == InsetBase::HFILL_CODE; + } /// hinted by profiler - bool isInset(lyx::pos_type pos) const { return getChar(pos) == static_cast(META_INSET); } + bool isInset(lyx::pos_type pos) const { + return getChar(pos) == static_cast(META_INSET); + } /// bool isNewline(lyx::pos_type pos) const; - /// - bool isSeparator(lyx::pos_type pos) const; + /// return true if the char is a word separator + bool isSeparator(lyx::pos_type pos) const { return getChar(pos) == ' '; } /// bool isLineSeparator(lyx::pos_type pos) const; /// True if the character/inset at this point can be part of a word @@ -364,9 +376,9 @@ public: ParagraphParameters const & params() const; /// - Row & getRow(lyx::pos_type pos); + Row & getRow(lyx::pos_type pos, bool boundary); /// - Row const & getRow(lyx::pos_type pos) const; + Row const & getRow(lyx::pos_type pos, bool boundary) const; /// size_t pos2row(lyx::pos_type pos) const; @@ -374,24 +386,36 @@ public: unsigned int height() const { return dim_.height(); } /// total width of paragraph, may differ from workwidth unsigned int width() const { return dim_.width(); } + /// ascend of paragraph above baseline unsigned int ascent() const { return dim_.ascent(); } + /// descend of paragraph below baseline unsigned int descent() const { return dim_.descent(); } /// LyXText updates the rows using this access point RowList & rows() { return rows_; } /// The painter and others use this RowList const & rows() const { return rows_; } + /// + RowSignature & rowSignature() const { return rowSignature_; } /// LyXText::redoParagraph updates this Dimension & dim() { return dim_; } /// dump some information to lyxerr void dump() const; + +public: + /// + InsetList insetlist; + private: /// cached dimensions of paragraph Dimension dim_; /// mutable RowList rows_; + /// + mutable RowSignature rowSignature_; + /// LyXLayout_ptr layout_; /** @@ -402,6 +426,7 @@ private: /// end of label lyx::pos_type begin_of_body_; + /// Pimpl away stuff class Pimpl; /// friend class Paragraph::Pimpl;