X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FMathData.h;h=2f6ab22acd3967d76fad2b55b1405422343251a6;hb=f2f7ea9edcdafb0e02d91cc2af53185154d41bd8;hp=72dca0d157e32c02308bb9700a86b4298862eaeb;hpb=d65020b293ab208b1391f96a731e53e0c7274a02;p=lyx.git diff --git a/src/mathed/MathData.h b/src/mathed/MathData.h index 72dca0d157..2f6ab22acd 100644 --- a/src/mathed/MathData.h +++ b/src/mathed/MathData.h @@ -16,13 +16,17 @@ #define MATH_DATA_H #include "Dimension.h" + #include "MathAtom.h" +#include "MathRow.h" #include "OutputEnums.h" #include "support/strfwd.h" +#include #include +#include namespace lyx { @@ -34,7 +38,7 @@ class DocIterator; class LaTeXFeatures; class ReplaceData; class MacroContext; -class MathMacro; +class InsetMathMacro; class MetricsInfo; class PainterInfo; class ParIterator; @@ -65,7 +69,8 @@ public: public: /// - MathData(Buffer * buf = 0) : buffer_(buf) {} + MathData(Buffer * buf = 0) : minasc_(0), mindes_(0), slevel_(0), + sshift_(0), kerning_(0), buffer_(buf) {} /// MathData(Buffer * buf, const_iterator from, const_iterator to); /// @@ -115,11 +120,17 @@ 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; /// 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 @@ -128,6 +139,8 @@ public: 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 +155,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,14 +168,14 @@ public: int slevel() const { return slevel_; } /// additional super/subscript shift int sshift() const { return sshift_; } - /// superscript kerning + /// Italic correction as described in InsetMathScript.h int kerning(BufferView const *) const { return kerning_; } /// 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); @@ -179,6 +188,9 @@ protected: mutable int kerning_; Buffer * buffer_; + /// cached object that describes typeset data + mutable std::map mrow_cache_; + private: /// is this an exact match at this position? bool find1(MathData const & ar, size_type pos) const; @@ -186,18 +198,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 & params, + void collectOptionalParameters(Cursor * cur, + const size_type numOptionalParams, std::vector & 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 & params, + void collectParameters(Cursor * cur, + const size_type numParams, std::vector & params, size_t & pos, MathAtom & scriptToPutAround, const pos_type macroPos, const int thisPos, const int thisSlice, const size_t appetite);