* Licence details can be found in the file COPYING.
*
* \author Alejandro Aguilar Sierra
- * \author André Pönitz
+ * \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#include <config.h>
#include "InsetMathChar.h"
+
#include "MathSupport.h"
#include "MathStream.h"
+#include "MetricsInfo.h"
-#include "debug.h"
-#include "dimension.h"
-#include "support/lstrings.h"
+#include "Dimension.h"
+#include "Encoding.h"
+#include "LaTeXFeatures.h"
#include "TextPainter.h"
#include "frontends/FontMetrics.h"
+#include "support/debug.h"
+#include "support/lstrings.h"
+#include "support/textutils.h"
-namespace lyx {
-using std::auto_ptr;
+namespace lyx {
extern bool has_math_fonts;
-namespace {
- bool isBinaryOp(char_type c)
- {
- return support::contains("+-<>=/*", static_cast<char>(c));
- }
+static bool isBinaryOp(char_type c)
+{
+ return support::contains("+-<>=/*", static_cast<char>(c));
+}
- bool slanted(char_type c)
- {
- return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
- }
-
+static bool slanted(char_type c)
+{
+ return isAlphaASCII(c) || Encodings::isMathAlpha(c);
}
-auto_ptr<InsetBase> InsetMathChar::doClone() const
+Inset * InsetMathChar::clone() const
{
- return auto_ptr<InsetBase>(new InsetMathChar(*this));
+ return new InsetMathChar(*this);
}
-bool InsetMathChar::metrics(MetricsInfo & mi, Dimension & dim) const
+void InsetMathChar::metrics(MetricsInfo & mi, Dimension & dim) const
{
- if (mi.base.font == font_cache_) {
- dim = dim_;
- return false;
- }
- font_cache_ = mi.base.font;
-
#if 1
if (char_ == '=' && has_math_fonts) {
FontSetChanger dummy(mi.base, "cmr");
FontSetChanger dummy(mi.base, "cmm");
dim = theFontMetrics(mi.base.font).dimension(char_);
} else if (!slanted(char_) && mi.base.fontname == "mathnormal") {
- ShapeChanger dummy(mi.base.font, LyXFont::UP_SHAPE);
+ ShapeChanger dummy(mi.base.font, UP_SHAPE);
dim = theFontMetrics(mi.base.font).dimension(char_);
} else {
frontend::FontMetrics const & fm = theFontMetrics(mi.base.font);
dim.wid += 2 * theFontMetrics(font_).width(' ');
lyxerr << "InsetMathChar::metrics: " << dim << endl;
#endif
- dim_ = dim;
- return true;
}
FontSetChanger dummy(pi.base, "cmm");
pi.draw(x, y, char_);
} else if (!slanted(char_) && pi.base.fontname == "mathnormal") {
- ShapeChanger dummy(pi.base.font, LyXFont::UP_SHAPE);
+ ShapeChanger dummy(pi.base.font, UP_SHAPE);
pi.draw(x, y, char_);
} else {
pi.draw(x, y, char_);
}
+void InsetMathChar::validate(LaTeXFeatures & features) const
+{
+ if (char_ >= 0x80)
+ encodings.validate(char_, features, true);
+}
+
+
void InsetMathChar::normalize(NormalStream & os) const
{
os << "[char ";