]> git.lyx.org Git - lyx.git/blobdiff - src/Row.h
Inset::forceLTR() only determines whether explicit switches are needed
[lyx.git] / src / Row.h
index bf49eb1b33025c3238bb7ca9a0d5a59396f11aa1..156fd9f671eefb166af633ebb99f1d6609b6aa85 100644 (file)
--- a/src/Row.h
+++ b/src/Row.h
@@ -50,7 +50,10 @@ public:
                // An inset
                INSET,
                // Some spacing described by its width, not a string
-               SPACE
+               SPACE,
+               // Spacing until the left margin, with a minimal value given
+               // by the initial width
+               MARGINSPACE
        };
 
 /**
@@ -63,9 +66,6 @@ public:
                        : type(t), pos(p), endpos(p + 1), font(f), change(ch) {}
 
 
-               // Return the number of separator in the element (only STRING type)
-               int countSeparators() const;
-
                // Return total width of element, including separator overhead
                // FIXME: Cache this value or the number of expanders?
                double full_width() const { return dim.wid + extra * countExpanders(); }
@@ -89,14 +89,16 @@ public:
                */
                pos_type x2pos(int &x) const;
                /** Break the element in two if possible, so that its width is less
-                * than \param w.
-                * \return a vector of elements containing the remainder of
-                *   the text (empty if nothing happened).
-                * \param width maximum width of the row.
-                * \param next_width available width on next row.
+                * than the required values.
+                * \return true if something has been done ; false if this is
+                * not needed or not possible.
+                * \param width: maximum width of the row.
+                * \param next_width: available width on next rows.
                 * \param force: if true, cut string at any place, even for
                 *   languages that wrap at word delimiters; if false, do not
                 *   break at all if first element would larger than \c width.
+                * \param tail: a vector of elements where the remainder of
+                *   the text will be appended (empty if nothing happened).
                 */
                // FIXME: ideally last parameter should be Elements&, but it is not possible.
                bool splitAt(int width, int next_width, bool force, std::vector<Element> & tail);
@@ -119,9 +121,11 @@ public:
                pos_type pos;
                // first position after the element in the paragraph
                pos_type endpos;
-               // The dimension of the chunk (does not contains the
+               // The dimension of the chunk (does not contain the
                // separator correction)
                Dimension dim;
+               // The width of the element without trailing spaces
+               int nspc_wid = 0;
 
                // Non-zero only if element is an inset
                Inset const * inset = nullptr;
@@ -137,7 +141,7 @@ public:
                Change change;
                // is it possible to add contents to this element?
                bool final = false;
-               // properties with respect to row breaking (made of RowFlag enums)
+               // properties with respect to row breaking (made of RowFlag enumerators)
                int row_flags = Inline;
 
                friend std::ostream & operator<<(std::ostream & os, Element const & row);
@@ -202,9 +206,9 @@ public:
        ///
        pos_type endpos() const { return end_; }
        ///
-       void right_boundary(bool b) { right_boundary_ = b; }
+       void end_boundary(bool b) { end_boundary_ = b; }
        ///
-       bool right_boundary() const { return right_boundary_; }
+       bool end_boundary() const { return end_boundary_; }
        ///
        void flushed(bool b) { flushed_ = b; }
        ///
@@ -233,8 +237,6 @@ public:
        /// The offset of the right-most cursor position on the row
        int right_x() const;
 
-       // Return the number of separators in the row
-       int countSeparators() const;
        // Set the extra spacing for every expanding character in STRING-type
        // elements.  \param w is the total amount of extra width for the row to be
        // distributed among expanders.  \return false if the justification fails.
@@ -245,12 +247,14 @@ public:
                 Font const & f, Change const & ch);
        ///
        void add(pos_type pos, char_type const c,
-                Font const & f, Change const & ch, bool can_break);
+                Font const & f, Change const & ch);
        ///
        void addVirtual(pos_type pos, docstring const & s,
                        Font const & f, Change const & ch);
        ///
        void addSpace(pos_type pos, int width, Font const & f, Change const & ch);
+       ///
+       void addMarginSpace(pos_type pos, int width, Font const & f, Change const & ch);
 
        ///
        typedef std::vector<Element> Elements;
@@ -301,10 +305,12 @@ public:
         * Find sequences of right-to-left elements and reverse them.
         * This should be called once the row is completely built.
         */
-       void reverseRTL(bool rtl_par);
+       void reverseRTL();
        ///
        bool isRTL() const { return rtl_; }
        ///
+       void setRTL(bool rtl) { rtl_ = rtl; }
+       ///
        bool needsChangeBar() const { return changebar_; }
        ///
        void needsChangeBar(bool ncb) { changebar_ = ncb; }
@@ -362,7 +368,7 @@ private:
        /// one behind last pos covered by this row
        pos_type end_ = 0;
        // Is there a boundary at the end of the row (display inset...)
-       bool right_boundary_ = false;
+       bool end_boundary_ = false;
        // Shall the row be flushed when it is supposed to be justified?
        bool flushed_ = false;
        /// Row dimension.