]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_macro.C
fix #1073
[lyx.git] / src / mathed / math_macro.C
index 9983cf5f78b523af9c7425a1a17867bf75460d45..17c05dcbea93d90d9f010b42246412ee242949be 100644 (file)
@@ -14,9 +14,6 @@
  *  This code is under the GNU General Public Licence version 2 or later.
  */
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
 
 #include "math_macro.h"
 #include "math_support.h"
@@ -53,7 +50,7 @@ MathInset * MathMacro::clone() const
 }
 
 
-string const & MathMacro::name() const
+string MathMacro::name() const
 {
        return tmplate_->asMacroTemplate()->name();
 }
@@ -68,54 +65,48 @@ bool MathMacro::defining() const
 
 void MathMacro::expand() const
 {
-       expanded_ = tmplate_->xcell(tmplate_->cell(1).empty() ? 0 : 1);
+       expanded_ = tmplate_->cell(tmplate_->cell(1).empty() ? 0 : 1);
 }
 
 
-void MathMacro::metrics(MathMetricsInfo & mi) const
+void MathMacro::metrics(MetricsInfo & mi) const
 {
        augmentFont(font_, "lyxtex");
        mi_ = mi;
 
        if (defining()) {
-               mathed_string_dim(font_, name(), ascent_, descent_, width_);
+               mathed_string_dim(font_, name(), dim_);
                return;
        }
 
        if (editing()) {
                expand();
-               expanded_.metrics(mi_);
-               width_   = expanded_.width()   + 4;
-               ascent_  = expanded_.ascent()  + 2;
-               descent_ = expanded_.descent() + 2;
+               dim_ = expanded_.metrics(mi_);
+               metricsMarkers2(2);
 
-               width_ +=  mathed_string_width(font_, name()) + 10;
+               dim_.w +=  mathed_string_width(font_, name()) + 10;
 
-               int lasc;
-               int ldes;
-               int lwid;
-               mathed_string_dim(font_, "#1: ", lasc, ldes, lwid);
+               Dimension ldim;
+               mathed_string_dim(font_, "#1: ", ldim);
 
                for (idx_type i = 0; i < nargs(); ++i) {
-                       MathXArray const & c = xcell(i);
+                       MathArray const & c = cell(i);
                        c.metrics(mi_);
-                       width_    = max(width_, c.width() + lwid);
-                       descent_ += max(c.ascent(),  lasc) + 5;
-                       descent_ += max(c.descent(), ldes) + 5;
+                       dim_.w  = max(dim_.w, c.width() + ldim.w);
+                       dim_.d += max(c.ascent(),  ldim.a) + 5;
+                       dim_.d += max(c.descent(), ldim.d) + 5;
                }
                return;
        }
 
        expand();
-       expanded_.data().substitute(*this);
+       expanded_.substitute(*this);
        expanded_.metrics(mi_);
-       width_   = expanded_.width();
-       ascent_  = expanded_.ascent();
-       descent_ = expanded_.descent();
+       dim_ = expanded_.dim();
 }
 
 
-void MathMacro::draw(MathPainterInfo & pi, int x, int y) const
+void MathMacro::draw(PainterInfo & pi, int x, int y) const
 {
        metrics(mi_);
 
@@ -135,19 +126,17 @@ void MathMacro::draw(MathPainterInfo & pi, int x, int y) const
                expanded_.draw(pi, x + w + 12, h);
                h += expanded_.descent();
 
-               int lasc;
-               int ldes;
-               int lwid;
-               mathed_string_dim(font_, "#1: ", lasc, ldes, lwid);
+               Dimension ldim;
+               mathed_string_dim(font_, "#1: ", ldim);
 
                for (idx_type i = 0; i < nargs(); ++i) {
-                       MathXArray const & c = xcell(i);
-                       h += max(c.ascent(), lasc) + 5;
-                       c.draw(pi, x + lwid, h);
+                       MathArray const & c = cell(i);
+                       h += max(c.ascent(), ldim.a) + 5;
+                       c.draw(pi, x + ldim.w, h);
                        char str[] = "#1:";
                        str[1] += static_cast<char>(i);
                        drawStr(pi, texfont, x + 3, h, str);
-                       h += max(c.descent(), ldes) + 5;
+                       h += max(c.descent(), ldim.d) + 5;
                }
                return;
        }
@@ -168,11 +157,20 @@ void MathMacro::dump() const
 }
 
 
-bool MathMacro::idxUpDown(idx_type & idx, bool up) const
+bool MathMacro::idxUpDown(idx_type & idx, pos_type &, bool up, int x) const
 {
        pos_type pos;
-       return
-               up ? MathNestInset::idxLeft(idx, pos) : MathNestInset::idxRight(idx, pos);
+       if (up) {
+               if (!MathNestInset::idxLeft(idx, pos))
+                       return false;
+               pos = cell(idx).x2pos(x);
+               return true;
+       } else {
+               if (!MathNestInset::idxRight(idx, pos))
+                       return false;
+               pos = cell(idx).x2pos(x);
+               return true;
+       }
 }
 
 
@@ -196,48 +194,41 @@ void MathMacro::validate(LaTeXFeatures & features) const
 }
 
 
-void MathMacro::maplize(MapleStream & os) const
+void MathMacro::maple(MapleStream & os) const
 {
        updateExpansion();
-       ::maplize(expanded_.data(), os);
+       ::maple(expanded_, os);
 }
 
 
 void MathMacro::mathmlize(MathMLStream & os) const
 {
        updateExpansion();
-       ::mathmlize(expanded_.data(), os);
+       ::mathmlize(expanded_, os);
 }
 
 
-void MathMacro::octavize(OctaveStream & os) const
+void MathMacro::octave(OctaveStream & os) const
 {
        updateExpansion();
-       ::octavize(expanded_.data(), os);
+       ::octave(expanded_, os);
 }
 
 
-void MathMacro::normalize(NormalStream & os) const
+void MathMacro::updateExpansion() const
 {
-       os << "[macro " << name() << " ";
-       for (idx_type i = 0; i < nargs(); ++i)
-               os << cell(i) << ' ';
-       os << ']';
+       expand();
+       expanded_.substitute(*this);
 }
 
 
-void MathMacro::write(WriteStream & os) const
+void MathMacro::infoize(std::ostream & os) const
 {
-       os << '\\' << name();
-       for (idx_type i = 0; i < nargs(); ++i)
-               os << '{' << cell(i) << '}';
-       if (nargs() == 0)
-               os << ' ';
+       os << "Macro: " << name();
 }
 
 
-void MathMacro::updateExpansion() const
+void MathMacro::infoize2(std::ostream & os) const
 {
-       expand();
-       expanded_.data().substitute(*this);
+       os << "Macro: " << name();
 }