]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/MathData.h
More requires --> required, for C++2a.
[lyx.git] / src / mathed / MathData.h
index 72dca0d157e32c02308bb9700a86b4298862eaeb..3c93421821230f6b78bd8b1f7af3dfad5b44f6e6 100644 (file)
 #define MATH_DATA_H
 
 #include "Dimension.h"
+
 #include "MathAtom.h"
+#include "MathRow.h"
 
 #include "OutputEnums.h"
 
 #include "support/strfwd.h"
 
+#include <cstddef>
 #include <vector>
 
 
@@ -34,7 +37,7 @@ class DocIterator;
 class LaTeXFeatures;
 class ReplaceData;
 class MacroContext;
-class MathMacro;
+class InsetMathMacro;
 class MetricsInfo;
 class PainterInfo;
 class ParIterator;
@@ -65,7 +68,8 @@ public:
 
 public:
        ///
-       MathData(Buffer * buf = 0) : buffer_(buf) {}
+       explicit MathData(Buffer * buf = 0) : minasc_(0), mindes_(0), slevel_(0),
+                                    sshift_(0), buffer_(buf) {}
        ///
        MathData(Buffer * buf, const_iterator from, const_iterator to);
        ///
@@ -115,19 +119,29 @@ public:
        MathAtom & operator[](pos_type);
        /// checked read access
        MathAtom const & operator[](pos_type) const;
+
+       /// Add this array to a math row. Return true if contents got added
+       bool addToMathRow(MathRow &, MetricsInfo & mi) const;
+
        /// rebuild cached metrics information
-       void metrics(MetricsInfo & mi, Dimension & dim) const;
+       /** When \c tight is true, the height of the cell will be at least
+        *  the x height of the font. Otherwise, it will be the max height
+        *  of the font.
+        */
+       void metrics(MetricsInfo & mi, Dimension & dim, bool tight = true) const;
        ///
        Dimension const & dimension(BufferView const &) const;
 
+       /// draw the selection over the cell
+       void drawSelection(PainterInfo & pi, int x, int y) const;
        /// redraw cell using cache metrics information
        void draw(PainterInfo & pi, int x, int y) const;
        /// rebuild cached metrics information
        void metricsT(TextMetricsInfo const & mi, Dimension & dim) const;
        /// redraw cell using cache metrics information
        void drawT(TextPainter & pi, int x, int y) const;
-       /// mark cell for re-drawing
-       void touch() const;
+       /// approximate the math class of the data
+       MathClass mathClass() const;
 
        /// access to cached x coordinate of last drawing
        int xo(BufferView const & bv) const;
@@ -142,11 +156,7 @@ public:
        /// returns x coordinate of given position in the array
        int pos2x(BufferView const * bv, size_type pos) const;
        /// returns position of given x coordinate
-       int pos2x(BufferView const * bv, size_type pos, int glue) const;
-       /// returns position of given x coordinate
-       size_type x2pos(BufferView const * bv, int pos) const;
-       /// returns position of given x coordinate fstarting from a certain pos
-       size_type x2pos(BufferView const * bv, int targetx, int glue) const;
+       size_type x2pos(BufferView const * bv, int targetx) const;
        /// returns distance of this cell to the point given by x and y
        // assumes valid position and size cache
        int dist(BufferView const & bv, int x, int y) const;
@@ -159,16 +169,18 @@ public:
        int slevel() const { return slevel_; }
        /// additional super/subscript shift
        int sshift() const { return sshift_; }
-       /// superscript kerning
-       int kerning(BufferView const *) const { return kerning_; }
+       /// Italic correction as described in InsetMathScript.h
+       int kerning(BufferView const *) const;
        ///
        void swap(MathData & ar) { base_type::swap(ar); }
 
-       /// attach/detach arguments to macros, updating the cur to 
+       /// attach/detach arguments to macros, updating the cur to
        /// stay visually at the same position (cur==0 is allowed)
-       void updateMacros(Cursor * cur, MacroContext const & mc);
+       void updateMacros(Cursor * cur, MacroContext const & mc, UpdateType, int nesting);
        ///
        void updateBuffer(ParIterator const &, UpdateType);
+       ///
+       void setBuffer(Buffer & b);
 
 protected:
        /// cached values for super/subscript placement
@@ -176,7 +188,6 @@ protected:
        mutable int mindes_;
        mutable int slevel_;
        mutable int sshift_;
-       mutable int kerning_;
        Buffer * buffer_;
 
 private:
@@ -186,18 +197,18 @@ private:
        ///
        void detachMacroParameters(DocIterator * dit, const size_type macroPos);
        ///
-       void attachMacroParameters(Cursor * cur, const size_type macroPos, 
+       void attachMacroParameters(Cursor * cur, const size_type macroPos,
                const size_type macroNumArgs, const int macroOptionals,
                const bool fromInitToNormalMode, const bool interactiveInit,
                const size_t appetite);
        ///
-       void collectOptionalParameters(Cursor * cur, 
-               const size_type numOptionalParams, std::vector<MathData> & params, 
+       void collectOptionalParameters(Cursor * cur,
+               const size_type numOptionalParams, std::vector<MathData> & params,
                size_t & pos, MathAtom & scriptToPutAround,
                const pos_type macroPos, const int thisPos, const int thisSlice);
        ///
-       void collectParameters(Cursor * cur, 
-               const size_type numParams, std::vector<MathData> & params, 
+       void collectParameters(Cursor * cur,
+               const size_type numParams, std::vector<MathData> & params,
                size_t & pos, MathAtom & scriptToPutAround,
                const pos_type macroPos, const int thisPos, const int thisSlice,
                const size_t appetite);