#include "MathClass.h"
+#include "ColorCode.h"
+#include "Dimension.h"
+
#include "support/docstring.h"
#include <vector>
namespace lyx {
class BufferView;
-class Dimension;
+class InsetMath;
+class MathData;
class MetricsInfo;
class PainterInfo;
-class InsetMath;
-class MathData;
-class MathMacro;
+enum class marker_type : int;
/*
* While for editing purpose it is important that macros are counted
// What row elements can be
enum Type {
INSET, // this element is a plain inset
- BEG_MACRO, // a macro begins here
- END_MACRO, // a macro ends here
- BEG_ARG, // a macro argument begins here
- END_ARG, // a macro argument ends here
- BEGIN, // dummy element before row
- END, // dummy element after row
+ BOX, // an empty box
+ BEGIN, // an inset and/or a math array begins here
+ END, // an inset and/or a math array ends here
+ DUMMY // a dummy element (used before or after row)
};
// An elements, together with its spacing
struct Element
{
///
- Element(Type t = INSET, MathClass const mc = MC_ORD);
+ Element(MetricsInfo const & mi, Type t, MathClass mc = MC_UNKNOWN);
/// Classifies the contents of the object
Type type;
+ /// the class of the element
+ MathClass mclass;
+ /// the spacing around the element
+ int before, after;
+ /// count whether the current mathdata is nested in macro(s)
+ int macro_nesting;
+ /// Marker type
+ marker_type marker;
/// When type is INSET
- /// the math inset
+ /// the math inset (also for BEGIN and END)
InsetMath const * inset;
- /// the class of the inset
- MathClass mclass;
- /// the spacing around the inset
- int before, after;
// Non empty when there is a completion to draw
docstring compl_text;
// the number of characters forming the unique part.
size_t compl_unique_to;
- /// When type is BEG_MACRO, END_MACRO, BEG_ARG, END_ARG
- /// the math macro
- MathMacro const * macro;
-
- // type is BEG_ARG, END_ARG
+ // type is BEGIN, END
MathData const * ar;
+
+ // type is BOX
+ ColorCode color;
};
///
- MathRow() {};
+ MathRow() {}
+ ///
+ MathRow(Dimension const & dim) : caret_dim(dim) {}
///
typedef std::vector<Element> Elements;
///
// create the math row by unwinding all macros in the MathData and
// compute the spacings.
- MathRow(MetricsInfo const & mi, MathData const * ar);
+ MathRow(MetricsInfo & mi, MathData const * ar);
//
- void metrics(MetricsInfo & mi, Dimension & dim) const;
+ void metrics(MetricsInfo & mi, Dimension & dim);
//
void draw(PainterInfo & pi, int const x, int const y) const;
/// superscript kerning
int kerning(BufferView const *) const;
+ /// useful when the caret visits this cell
+ Dimension caret_dim;
+
+
private:
// Index of the first inset element before position i
int before(int i) const;