X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FMathData.h;h=a1ce7a6df0e720aae0099f4df7f134814bd8da1c;hb=cdc847fd304019a19425a0d5d9d42a556a937097;hp=0e217a2f31d54c3202f49cb4e4f133307e2525ec;hpb=12314897982e07afd8926c997f66d7bb08e7e1fd;p=lyx.git diff --git a/src/mathed/MathData.h b/src/mathed/MathData.h index 0e217a2f31..a1ce7a6df0 100644 --- a/src/mathed/MathData.h +++ b/src/mathed/MathData.h @@ -5,8 +5,8 @@ * Licence details can be found in the file COPYING. * * \author Alejandro Aguilar Sierra - * \author André Pönitz - * \author Lars Gullik Bjønnes + * \author André Pönitz + * \author Lars Gullik Bjønnes * \author Stefan Schimanski * * Full author contact details are available in file CREDITS. @@ -15,23 +15,33 @@ #ifndef MATH_DATA_H #define MATH_DATA_H -#include - -#include "Cursor.h" #include "Dimension.h" + #include "MathAtom.h" +#include "MathRow.h" + +#include "OutputEnums.h" -#include "support/docstream.h" +#include "support/strfwd.h" + +#include +#include +#include namespace lyx { +class Buffer; class BufferView; +class Cursor; +class DocIterator; class LaTeXFeatures; class ReplaceData; +class MacroContext; class MathMacro; class MetricsInfo; class PainterInfo; +class ParIterator; class TextMetricsInfo; class TextPainter; @@ -59,9 +69,14 @@ public: public: /// - MathData() {} + 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); + /// + Buffer * buffer() { return buffer_; } /// - MathData(const_iterator from, const_iterator to); + Buffer const * buffer() const { return buffer_; } /// void append(MathData const & ar); @@ -105,6 +120,10 @@ 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; /// @@ -118,6 +137,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; @@ -130,13 +151,9 @@ public: /// write access to coordinate; void setXY(BufferView & bv, int x, int y) const; /// returns x coordinate of given position in the array - int pos2x(size_type pos) const; + int pos2x(BufferView const * bv, size_type pos) const; /// returns position of given x coordinate - int pos2x(size_type pos, int glue) const; - /// returns position of given x coordinate - size_type x2pos(int pos) const; - /// returns position of given x coordinate fstarting from a certain pos - size_type x2pos(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; @@ -150,10 +167,16 @@ public: /// additional super/subscript shift int sshift() const { return sshift_; } /// superscript kerning - int kerning() const { return kerning_; } + int kerning(BufferView const *) const { return kerning_; } /// void swap(MathData & ar) { base_type::swap(ar); } + /// 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, UpdateType, int nesting); + /// + void updateBuffer(ParIterator const &, UpdateType); + protected: /// cached values for super/subscript placement mutable int minasc_; @@ -161,21 +184,33 @@ protected: mutable int slevel_; mutable int sshift_; 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; - /// attach/detach arguments to macros - void updateMacros(MetricsInfo & mi); /// - void detachMacroParameters(Cursor & cur, const size_type macroPos); + 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 fromInitToNormalMode, const bool interactiveInit, + const size_t appetite); + /// + 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); /// - mutable std::vector atom_dims_; + 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); }; ///