X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FMathSupport.cpp;h=daf437fc67fe5003a868ccac45e6d2a093cb1508;hb=5fdc577badb1cb133d6a0dc7d831bb1f82576adb;hp=0c610b1e69412c202c66505d576d4401870452fc;hpb=be836909c52f8586646fa6360df649288b5e2875;p=lyx.git diff --git a/src/mathed/MathSupport.cpp b/src/mathed/MathSupport.cpp index 0c610b1e69..daf437fc67 100644 --- a/src/mathed/MathSupport.cpp +++ b/src/mathed/MathSupport.cpp @@ -15,10 +15,13 @@ #include "InsetMathFont.h" #include "InsetMathSymbol.h" +#include "Length.h" #include "MathData.h" +#include "MathFactory.h" #include "MathParser.h" #include "MathStream.h" +#include "LaTeXFeatures.h" #include "MetricsInfo.h" #include "frontends/FontLoader.h" @@ -528,27 +531,20 @@ int mathed_font_em(FontInfo const & font) * punctuation, and is put around inner objects, except where these * are followed by a close or preceded by an open symbol, and except * if the other object is a large operator or a binary relation. + * + * See the file MathClass.cpp for a formal implementation of the rules + * above. */ -int mathed_thinmuskip(FontInfo font) +int mathed_mu(FontInfo const & font, double mu) { - font.setFamily(SYMBOL_FAMILY); - return support::iround(3.0 / 18 * theFontMetrics(font).em()); + MetricsBase mb(nullptr, font); + return Length(mu, Length::MU).inPixels(mb); } - -int mathed_medmuskip(FontInfo font) -{ - font.setFamily(SYMBOL_FAMILY); - return support::iround(4.0 / 18 * theFontMetrics(font).em()); -} - - -int mathed_thickmuskip(FontInfo font) -{ - font.setFamily(SYMBOL_FAMILY); - return support::iround(5.0 / 18 * theFontMetrics(font).em()); -} +int mathed_thinmuskip(FontInfo const & font) { return mathed_mu(font, 3.0); } +int mathed_medmuskip(FontInfo const & font) { return mathed_mu(font, 4.0); } +int mathed_thickmuskip(FontInfo const & font) { return mathed_mu(font, 5.0); } int mathed_char_width(FontInfo const & font, char_type c) @@ -657,7 +653,7 @@ void mathed_draw_deco(PainterInfo & pi, int x, int y, int w, int h, } -void mathedSymbolDim(MetricsInfo & mi, Dimension & dim, latexkeys const * sym) +void mathedSymbolDim(MetricsBase & mb, Dimension & dim, latexkeys const * sym) { LASSERT((bool)sym, return); //lyxerr << "metrics: symbol: '" << sym->name @@ -667,17 +663,10 @@ void mathedSymbolDim(MetricsInfo & mi, Dimension & dim, latexkeys const * sym) bool const italic_upcase_greek = sym->inset == "cmr" && sym->extra == "mathalpha" && - mi.base.fontname == "mathit"; + mb.fontname == "mathit"; std::string const font = italic_upcase_greek ? "cmm" : sym->inset; - Changer dummy = mi.base.changeFontSet(font); - mathed_string_dim(mi.base.font, sym->draw, dim); - // seperate things a bit - if (sym->extra == "mathbin") - dim.wid += 2 * mathed_medmuskip(mi.base.font); - else if (sym->extra == "mathrel") - dim.wid += 2 * mathed_thickmuskip(mi.base.font); - else if (sym->extra == "mathpunct") - dim.wid += mathed_thinmuskip(mi.base.font); + Changer dummy = mb.changeFontSet(font); + mathed_string_dim(mb.font, sym->draw, dim); } @@ -693,10 +682,6 @@ void mathedSymbolDraw(PainterInfo & pi, int x, int y, latexkeys const * sym) sym->extra == "mathalpha" && pi.base.fontname == "mathit"; std::string const font = italic_upcase_greek ? "cmm" : sym->inset; - if (sym->extra == "mathbin") - x += mathed_medmuskip(pi.base.font); - else if (sym->extra == "mathrel") - x += mathed_thickmuskip(pi.base.font); Changer dummy = pi.base.changeFontSet(font); pi.draw(x, y, sym->draw); @@ -1002,4 +987,23 @@ docstring asString(MathAtom const & at) } +int axis_height(MetricsBase & mb) +{ + Changer dummy = mb.changeFontSet("mathnormal"); + return theFontMetrics(mb.font).ascent('-') - 1; +} + + +void validate_math_word(LaTeXFeatures & features, docstring const & word) +{ + MathWordList const & words = mathedWordList(); + MathWordList::const_iterator it = words.find(word); + if (it != words.end()) { + string const req = it->second.requires; + if (!req.empty()) + features.require(req); + } +} + + } // namespace lyx