* This code is under the GNU General Public Licence version 2 or later.
*/
-#include <config.h>
-
#ifdef __GNUG__
#pragma implementation
#endif
#include "math_macrotable.h"
#include "math_macrotemplate.h"
#include "Painter.h"
+#include "LaTeXFeatures.h"
using std::endl;
MathMacro::MathMacro(MathMacroTemplate const & t)
- : MathInset(t.name(), LM_OT_MACRO, t.numargs()), tmplate_(&t)
+ : MathNestInset(t.numargs()), tmplate_(&t)
+{}
+
+
+MathMacro::MathMacro(MathMacro const & t)
+ : MathNestInset(t), tmplate_(t.tmplate_) // don't copy 'expanded_'!
{}
+
MathInset * MathMacro::clone() const
{
return new MathMacro(*this);
}
-void MathMacro::Metrics(MathStyles st)
+const char * MathMacro::name() const
+{
+ return tmplate_->name().c_str();
+}
+
+
+void MathMacro::metrics(MathStyles st) const
{
if (mathcursor && mathcursor->isInside(this)) {
expanded_ = tmplate_->xcell(0);
- expanded_.Metrics(st);
+ expanded_.metrics(st);
size_ = st;
width_ = expanded_.width() + 4;
ascent_ = expanded_.ascent() + 2;
descent_ = expanded_.descent() + 2;
- width_ += mathed_string_width(LM_TC_TEXTRM, size_, name_) + 10;
+ width_ += mathed_string_width(LM_TC_TEXTRM, size_, name()) + 10;
int lasc;
int ldes;
int lwid;
mathed_string_dim(LM_TC_TEXTRM, size_, "#1: ", lasc, ldes, lwid);
- for (int i = 0; i < nargs(); ++i) {
- MathXArray & c = xcell(i);
- c.Metrics(st);
+ for (unsigned int i = 0; i < nargs(); ++i) {
+ MathXArray const & c = xcell(i);
+ c.metrics(st);
width_ = std::max(width_, c.width() + lwid);
descent_ += std::max(c.ascent(), lasc) + 5;
descent_ += std::max(c.descent(), ldes) + 5;
} else {
expanded_ = tmplate_->xcell(0);
expanded_.data_.substitute(*this);
- expanded_.Metrics(st);
+ expanded_.metrics(st);
size_ = st;
width_ = expanded_.width() + 6;
ascent_ = expanded_.ascent() + 3;
}
-void MathMacro::draw(Painter & pain, int x, int y)
+void MathMacro::draw(Painter & pain, int x, int y) const
{
xo(x);
yo(y);
- LColor::color col;
+ metrics(size());
+
+ //LColor::color col;
if (mathcursor && mathcursor->isInside(this)) {
int h = y - ascent() + 2 + expanded_.ascent();
- drawStr(pain, LM_TC_TEXTRM, size(), x + 3, h, name_);
+ drawStr(pain, LM_TC_TEXTRM, size(), x + 3, h, name());
- int const w = mathed_string_width(LM_TC_TEXTRM, size(), name_);
+ int const w = mathed_string_width(LM_TC_TEXTRM, size(), name());
expanded_.draw(pain, x + w + 12, h);
h += expanded_.descent();
int lwid;
mathed_string_dim(LM_TC_TEXTRM, size_, "#1: ", lasc, ldes, lwid);
- for (int i = 0; i < nargs(); ++i) {
- MathXArray & c = xcell(i);
+ for (unsigned int i = 0; i < nargs(); ++i) {
+ MathXArray const & c = xcell(i);
h += std::max(c.ascent(), lasc) + 5;
c.draw(pain, x + lwid, h);
char str[] = "#1:";
drawStr(pain, LM_TC_TEX, size(), x + 3, h, str);
h += std::max(c.descent(), ldes) + 5;
}
- col = LColor::red;
+ //col = LColor::red;
} else {
expanded_.draw(pain, x + 3, y);
- col = LColor::black;
+ //col = LColor::black;
}
- pain.rectangle(x + 1, y - ascent() + 1, width() - 2, height() - 2, col);
+ //if (nargs() > 0)
+ // pain.rectangle(x + 1, y - ascent() + 1, width() - 2, height() - 2, col);
}
-void MathMacro::dump(std::ostream & os) const
+void MathMacro::dump() const
{
MathMacroTable::dump();
- os << "\n macro: '" << this << "'\n";
- os << " name: '" << name_ << "'\n";
- os << " template: '" << tmplate_ << "'\n";
- os << " template: '" << *tmplate_ << "'\n";
- os << endl;
+ lyxerr << "\n macro: '" << this << "'\n";
+ lyxerr << " name: '" << name() << "'\n";
+ lyxerr << " template: '" << tmplate_ << "'\n";
+ lyxerr << " template: '" << *tmplate_ << "'\n";
+ lyxerr << endl;
}
-void MathMacro::Write(std::ostream & os, bool fragile) const
+void MathMacro::write(std::ostream & os, bool fragile) const
{
- os << '\\' << name_;
- for (int i = 0; i < nargs(); ++i) {
+ os << '\\' << name();
+ for (unsigned int i = 0; i < nargs(); ++i) {
os << '{';
- cell(i).Write(os, fragile);
+ cell(i).write(os, fragile);
os << '}';
}
if (nargs() == 0)
}
-void MathMacro::WriteNormal(std::ostream & os) const
+void MathMacro::writeNormal(std::ostream & os) const
{
- os << "[macro " << name_ << " ";
- for (int i = 0; i < nargs(); ++i) {
- cell(i).WriteNormal(os);
+ os << "[macro " << name() << " ";
+ for (unsigned int i = 0; i < nargs(); ++i) {
+ cell(i).writeNormal(os);
os << ' ';
}
os << "] ";
}
-bool MathMacro::idxUp(int & idx, int & pos) const
+bool MathMacro::idxUp(unsigned int & idx, unsigned int & pos) const
{
- return MathInset::idxLeft(idx, pos);
+ return MathNestInset::idxLeft(idx, pos);
}
-bool MathMacro::idxDown(int & idx, int & pos) const
+bool MathMacro::idxDown(unsigned int & idx, unsigned int & pos) const
{
- return MathInset::idxRight(idx, pos);
+ return MathNestInset::idxRight(idx, pos);
}
-bool MathMacro::idxLeft(int &, int &) const
+bool MathMacro::idxLeft(unsigned int &, unsigned int &) const
{
return false;
}
-bool MathMacro::idxRight(int &, int &) const
+bool MathMacro::idxRight(unsigned int &, unsigned int &) const
{
return false;
}
+
+
+void MathMacro::validate(LaTeXFeatures & features) const
+{
+ if (name() == "binom")
+ features.binom = true;
+ //MathInset::validate(features);
+}