X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_macrotemplate.C;h=22186a52ee52fff2d81898f46f026ba39f9957a9;hb=46880e2b9b49632c56bab2377ce9a3c826cf8d1d;hp=7377ac9104fce7670641ab6814b92cee04cc6d57;hpb=47b341b9963935f5421661109b497d671f21a885;p=lyx.git diff --git a/src/mathed/math_macrotemplate.C b/src/mathed/math_macrotemplate.C index 7377ac9104..22186a52ee 100644 --- a/src/mathed/math_macrotemplate.C +++ b/src/mathed/math_macrotemplate.C @@ -1,68 +1,90 @@ -#include - #ifdef __GNUG__ #pragma implementation #endif #include "math_macrotemplate.h" -#include "math_macro.h" -#include "macro_support.h" -#include "support/LOstream.h" -#include "support/LAssert.h" +#include "math_mathmlstream.h" +#include "frontends/Painter.h" #include "debug.h" -#include "Painter.h" -using namespace std; -MathMacroTemplate::MathMacroTemplate() : - MathParInset(LM_ST_TEXT, "undefined", LM_OT_MACRO), - na_(0), users_() +MathMacroTemplate::MathMacroTemplate() + : MathNestInset(2), numargs_(0), name_() {} -MathMacroTemplate::MathMacroTemplate(string const & nm, int na) : - MathParInset(LM_ST_TEXT, nm, LM_OT_MACRO), - na_(na), users_() -{} +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; +} -int MathMacroTemplate::nargs() const +MathInset * MathMacroTemplate::clone() const { - return na_; + //lyxerr << "cloning MacroTemplate!\n"; + return new MathMacroTemplate(*this); } -void MathMacroTemplate::WriteDef(ostream & os, bool fragile) const +int MathMacroTemplate::numargs() const { - os << "\n\\newcommand{\\" << name << "}"; + return numargs_; +} - if (na_ > 0) - os << "[" << na_ << "]"; - os << "{"; -#ifdef WITH_WARNINGS -#warning stupid cast -#endif - const_cast(this)->Write(os, fragile); - os << "}\n"; +void MathMacroTemplate::numargs(int numargs) +{ + numargs_ = numargs; } -void MathMacroTemplate::Metrics() +string const & MathMacroTemplate::name() const { - MathParInset::Metrics(); - width += 4; - ascent += 2; - descent += 2; + return name_; } -void MathMacroTemplate::draw(Painter & pain, int x, int y) +void MathMacroTemplate::metrics(MathMetricsInfo & mi) const { - MathParInset::draw(pain, x + 2, y + 1); - int w = Width(); - int a = Ascent(); - int h = Height(); - pain.rectangle(x, y - a, w, h, LColor::blue); + 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::draw(MathPainterInfo & pi, int x, int y) const +{ + 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::write(WriteStream & os) const +{ + 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) << '}'; + } +}