X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathSymbol.cpp;h=1999846729868998005b1f628e392481e63257d1;hb=6de3c19fd63f810eed90ef3bc4469faf28e949c2;hp=5ca45a16fe0804ffbf8f4cc5c88d988b08c123cf;hpb=36b1623c5bf3e51d4a4b104cb32d3e9af578016a;p=lyx.git diff --git a/src/mathed/InsetMathSymbol.cpp b/src/mathed/InsetMathSymbol.cpp index 5ca45a16fe..1999846729 100644 --- a/src/mathed/InsetMathSymbol.cpp +++ b/src/mathed/InsetMathSymbol.cpp @@ -23,6 +23,8 @@ #include "support/docstream.h" #include "support/textutils.h" +#include + namespace lyx { @@ -60,8 +62,12 @@ void InsetMathSymbol::metrics(MetricsInfo & mi, Dimension & dim) const // << "' drawn as: '" << sym_->draw // << "'" << endl; + bool const italic_upcase_greek = sym_->inset == "cmr" && + sym_->extra == "mathalpha" && + mi.base.fontname == "mathit"; + docstring const font = italic_upcase_greek ? from_ascii("cmm") : sym_->inset; int const em = mathed_char_width(mi.base.font, 'M'); - FontSetChanger dummy(mi.base, sym_->inset); + FontSetChanger dummy(mi.base, font); mathed_string_dim(mi.base.font, sym_->draw, dim); docstring::const_reverse_iterator rit = sym_->draw.rbegin(); kerning_ = mathed_char_kerning(mi.base.font, *rit); @@ -91,17 +97,28 @@ void InsetMathSymbol::draw(PainterInfo & pi, int x, int y) const // << "' in font: '" << sym_->inset // << "' drawn as: '" << sym_->draw // << "'" << endl; + + bool const italic_upcase_greek = sym_->inset == "cmr" && + sym_->extra == "mathalpha" && + pi.base.fontname == "mathit"; + docstring const font = italic_upcase_greek ? from_ascii("cmm") : sym_->inset; int const em = mathed_char_width(pi.base.font, 'M'); if (isRelOp()) x += static_cast(0.25*em+0.5); else x += static_cast(0.0833*em+0.5); - FontSetChanger dummy(pi.base, sym_->inset.c_str()); + FontSetChanger dummy(pi.base, font); pi.draw(x, y - h_, sym_->draw); } +InsetMath::mode_type InsetMathSymbol::currentMode() const +{ + return sym_->extra == "textmode" ? TEXT_MODE : MATH_MODE; +} + + bool InsetMathSymbol::isRelOp() const { return sym_->extra == "mathrel"; @@ -226,7 +243,9 @@ void InsetMathSymbol::octave(OctaveStream & os) const void InsetMathSymbol::write(WriteStream & os) const { - MathEnsurer ensurer(os); + boost::scoped_ptr ensurer; + if (currentMode() != TEXT_MODE) + ensurer.reset(new MathEnsurer(os)); os << '\\' << name(); // $,#, etc. In theory the restriction based on catcodes, but then @@ -249,15 +268,14 @@ void InsetMathSymbol::validate(LaTeXFeatures & features) const { // this is not really the ideal place to do this, but we can't // validate in InsetMathExInt. - if (features.runparams().flavor == OutputParams::HTML + if (features.runparams().math_flavor == OutputParams::MathAsHTML && sym_->name == from_ascii("int")) { - features.addPreambleSnippet(""); + "sup.limit{font-size: 75%;}"); } else { if (!sym_->requires.empty()) features.require(to_utf8(sym_->requires));