#pragma implementation
#endif
-#include <cctype>
-
#include "math_charinset.h"
#include "LColor.h"
#include "Painter.h"
#include "support/LOstream.h"
-#include "math_support.h"
-#include "math_parser.h"
+#include "font.h"
#include "debug.h"
+#include "math_support.h"
#include "math_mathmlstream.h"
#include "LaTeXFeatures.h"
+#include "textpainter.h"
+
+#include <cctype>
+#include <cstring>
+
+
+using std::ostream;
+using std::endl;
+
+#ifndef CXX_GLOBAL_CSTD
+using std::strchr;
+#endif
+
+
+bool isBinaryOp(char c, MathTextCodes type)
+{
+ return type < LM_TC_SYMB && strchr("+-<>=/*", c);
+}
MathCharInset::MathCharInset(char c)
MathInset * MathCharInset::clone() const
-{
+{
return new MathCharInset(*this);
}
void MathCharInset::metrics(MathMetricsInfo const & mi) const
{
- mi_ = mi;
- ascent_ = mathed_char_ascent(code_, mi_, char_);
- descent_ = mathed_char_descent(code_, mi_, char_);
- width_ = mathed_char_width(code_, mi_, char_);
+ whichFont(font_, code_, mi);
+ mathed_char_dim(font_, char_, ascent_, descent_, width_);
+ if (isBinaryOp(char_, code_))
+ width_ += 2 * lyxfont::width(' ', font_);
}
void MathCharInset::draw(Painter & pain, int x, int y) const
-{
+{
//lyxerr << "drawing '" << char_ << "' code: " << code_ << endl;
- drawChar(pain, code_, mi_, x, y, char_);
+ if (isBinaryOp(char_, code_))
+ x += lyxfont::width(' ', font_);
+ drawChar(pain, font_, x, y, char_);
+}
+
+
+void MathCharInset::metricsT(TextMetricsInfo const &) const
+{
+ width_ = 1;
+ ascent_ = 1;
+ descent_ = 0;
+}
+
+
+void MathCharInset::drawT(TextPainter & pain, int x, int y) const
+{
+ //lyxerr << "drawing text '" << char_ << "' code: " << code_ << endl;
+ pain.draw(x, y, char_);
}
-void MathCharInset::writeHeader(std::ostream & os) const
+void MathCharInset::writeHeader(ostream & os) const
{
if (math_font_name(code_))
os << '\\' << math_font_name(code_) << '{';
}
-void MathCharInset::writeTrailer(std::ostream & os) const
+void MathCharInset::writeTrailer(ostream & os) const
{
if (math_font_name(code_))
os << '}';
}
-void MathCharInset::writeRaw(std::ostream & os) const
+void MathCharInset::writeRaw(ostream & os) const
{
os << char_;
}
{
// Make sure amssymb is put in preamble if Blackboard Bold or
// Fraktur used:
- if ( (code_ == LM_TC_BB) || (code_ == LM_TC_EUFRAK) )
+ if ((code_ == LM_TC_BB) || (code_ == LM_TC_EUFRAK))
features.require("amssymb");
}