]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_macrotemplate.C
fix #1073
[lyx.git] / src / mathed / math_macrotemplate.C
index d826e7a77889cad9ce661d5c490b6b6fc89c6413..4f1ae017ecda13724097afeded1e4c8464703418 100644 (file)
@@ -1,9 +1,7 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
 
 #include "math_macrotemplate.h"
 #include "math_mathmlstream.h"
+#include "math_parser.h"
 #include "frontends/Painter.h"
 #include "debug.h"
 
@@ -13,12 +11,29 @@ MathMacroTemplate::MathMacroTemplate()
 {}
 
 
-MathMacroTemplate::MathMacroTemplate(string const & nm, int numargs)
+MathMacroTemplate::MathMacroTemplate(string const & nm, int numargs,
+               MathArray const & ar1, MathArray const & ar2)
        : MathNestInset(2), numargs_(numargs), name_(nm)
 {
        if (numargs_ > 9)
                lyxerr << "MathMacroTemplate::MathMacroTemplate: wrong # of arguments: "
                        << numargs_ << std::endl;
+       cell(0) = ar1;
+       cell(1) = ar2;
+}
+
+
+
+MathMacroTemplate::MathMacroTemplate(std::istream & is)
+       : MathNestInset(2), numargs_(0), name_()
+{
+       MathArray ar;
+       mathed_parse_cell(ar, is);
+       if (ar.size() != 1 || !ar[0]->asMacroTemplate()) {
+               lyxerr << "cannot read macro from '" << ar << "'\n";
+               return;
+       }
+       operator=( *(ar[0]->asMacroTemplate()) );
 }
 
 
@@ -41,35 +56,36 @@ void MathMacroTemplate::numargs(int numargs)
 }
 
 
-string const & MathMacroTemplate::name() const
+string MathMacroTemplate::name() const
 {
        return name_;
 }
 
 
-void MathMacroTemplate::metrics(MathMetricsInfo & mi) const
+void MathMacroTemplate::metrics(MetricsInfo & mi) const
 {
-       xcell(0).metrics(mi);
-       xcell(1).metrics(mi);
-       dim_.w = xcell(0).width() + xcell(1).width() + 10;
-       dim_.a = std::max(xcell(0).ascent(),  xcell(1).ascent())  + 2;
-       dim_.d = std::max(xcell(0).descent(), xcell(1).descent()) + 2;
+       cell(0).metrics(mi);
+       cell(1).metrics(mi);
+       dim_.w = cell(0).width() + cell(1).width() + 10;
+       dim_.a = std::max(cell(0).ascent(),  cell(1).ascent())  + 2;
+       dim_.d = std::max(cell(0).descent(), cell(1).descent()) + 2;
 }
 
 
-void MathMacroTemplate::draw(MathPainterInfo & pi, int x, int y) const
+void MathMacroTemplate::draw(PainterInfo & 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);
+       int const w0 = cell(0).width();
+       int const w1 = cell(1).width();
+       cell(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);
+                       LColor::mathline);
+       cell(1).draw(pi, x + 8 + w0, y + 1);
        pi.pain.rectangle(x + w0 + 6 , y - ascent() + 1, w1 + 4,
-                       height(), LColor::blue);
+                       height(), LColor::mathline);
 }
 
 
+
 void MathMacroTemplate::write(WriteStream & os) const
 {
        if (os.latex()) {