]> git.lyx.org Git - lyx.git/blobdiff - src/paragraph.h
* filetools.[Ch]: Make functions that start with a capital
[lyx.git] / src / paragraph.h
index b16ac0d5b0c85b34501722bc61a1182aafcd2f90..f3c3700025dbd9abfca3ba99f5ace62cedcc1cfe 100644 (file)
@@ -27,7 +27,6 @@
 #include "support/types.h"
 
 #include <string>
-#include <utility>
 
 class Buffer;
 class BufferParams;
@@ -47,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:
@@ -95,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,
@@ -213,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
@@ -261,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.
@@ -279,11 +294,11 @@ 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<lyx::pos_type, lyx::pos_type> 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 { return text_[pos]; }
@@ -302,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<value_type>(META_INSET); }
+       bool isInset(lyx::pos_type pos) const {
+               return getChar(pos) == static_cast<value_type>(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
@@ -357,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;
 
@@ -367,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_;
        /**
@@ -395,6 +426,7 @@ private:
        /// end of label
        lyx::pos_type begin_of_body_;
 
+       /// Pimpl away stuff
        class Pimpl;
        ///
        friend class Paragraph::Pimpl;