X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_macrotemplate.C;h=22186a52ee52fff2d81898f46f026ba39f9957a9;hb=46880e2b9b49632c56bab2377ce9a3c826cf8d1d;hp=6d64a524c6651073359bc6eb27f05dc1a71c9749;hpb=9ccefe810b24031894fff8cf3dd39c1bc7f31241;p=lyx.git diff --git a/src/mathed/math_macrotemplate.C b/src/mathed/math_macrotemplate.C index 6d64a524c6..22186a52ee 100644 --- a/src/mathed/math_macrotemplate.C +++ b/src/mathed/math_macrotemplate.C @@ -3,23 +3,28 @@ #endif #include "math_macrotemplate.h" -#include "Painter.h" +#include "math_mathmlstream.h" +#include "frontends/Painter.h" #include "debug.h" -MathMacroTemplate::MathMacroTemplate() : - MathInset(1, "undefined", LM_OT_MACRO), numargs_(0) +MathMacroTemplate::MathMacroTemplate() + : MathNestInset(2), numargs_(0), name_() {} -MathMacroTemplate::MathMacroTemplate(string const & nm, int numargs) : - MathInset(1, nm, LM_OT_MACRO), numargs_(numargs) -{} +MathMacroTemplate::MathMacroTemplate(string const & nm, int numargs) + : MathNestInset(2), numargs_(numargs), name_(nm) +{ + if (numargs_ > 9) + lyxerr << "MathMacroTemplate::MathMacroTemplate: wrong # of arguments: " + << numargs_ << std::endl; +} MathInset * MathMacroTemplate::clone() const { - lyxerr << "cloning MacroTemplate!\n"; + //lyxerr << "cloning MacroTemplate!\n"; return new MathMacroTemplate(*this); } @@ -36,33 +41,50 @@ void MathMacroTemplate::numargs(int numargs) } -void MathMacroTemplate::Write(std::ostream & os, bool fragile) const +string const & MathMacroTemplate::name() const { - os << "\n\\newcommand{\\" << name_ << "}"; + return name_; +} - if (numargs_ > 0) - os << "[" << numargs_ << "]"; - os << "{"; - cell(0).Write(os, fragile); - os << "}\n"; +void MathMacroTemplate::metrics(MathMetricsInfo & mi) const +{ + xcell(0).metrics(mi); + xcell(1).metrics(mi); + width_ = xcell(0).width() + xcell(1).width() + 10; + ascent_ = std::max(xcell(0).ascent(), xcell(1).ascent()) + 2; + descent_ = std::max(xcell(0).descent(), xcell(1).descent()) + 2; } -void MathMacroTemplate::Metrics(MathStyles st) +void MathMacroTemplate::draw(MathPainterInfo & pi, int x, int y) const { - xcell(0).Metrics(st); - size_ = st; - width_ = xcell(0).width() + 4; - ascent_ = xcell(0).ascent() + 2; - descent_ = xcell(0).descent() + 2; + int const w0 = xcell(0).width(); + int const w1 = xcell(1).width(); + xcell(0).draw(pi, x + 2, y + 1); + pi.pain.rectangle(x, y - ascent() + 1, w0 + 4, height(), + LColor::blue); + xcell(1).draw(pi, x + 8 + w0, y + 1); + pi.pain.rectangle(x + w0 + 6 , y - ascent() + 1, w1 + 4, + height(), LColor::blue); } -void MathMacroTemplate::draw(Painter & pain, int x, int y) +void MathMacroTemplate::write(WriteStream & os) const { - xo(x); - yo(y); - xcell(0).draw(pain, x + 2, y + 1); - pain.rectangle(x, y - ascent(), width(), height(), LColor::blue); + if (os.latex()) { + os << "\n\\newcommand{\\" << name_.c_str() << '}'; + if (numargs_ > 0) + os << '[' << numargs_ << ']'; + os << '{' << cell(0) << "}\n"; + } else { + // writing .lyx + os << "\n\\newcommand{\\" << name_.c_str() << '}'; + if (numargs_ > 0) + os << '[' << numargs_ << ']'; + os << '{' << cell(0) << '}'; + // write special .tex export only if necessary + if (!cell(1).empty()) + os << "\n{" << cell(1) << '}'; + } }