#include "MathMacroTemplate.h"
#include "DocIterator.h"
+#include "LaTeXFeatures.h"
#include "InsetMathBrace.h"
#include "InsetMathChar.h"
#include "InsetMathSqrt.h"
if (!parent_.premetrics())
dim.des += maxasc + maxdes + 1;
}
-
- setDimCache(mi, dim);
}
dim.wid = 0;
dim.asc = 0;
dim.des = 0;
- setDimCache(mi, dim);
}
}
Inset * MathMacroTemplate::clone() const
{
- return new MathMacroTemplate(*this);
+ MathMacroTemplate * inset = new MathMacroTemplate(*this);
+ // the parent pointers of the proxy insets above will point to
+ // to the old template. Hence, the look must be updated.
+ inset->updateLook();
+ return inset;
}
void MathMacroTemplate::write(WriteStream & os, bool overwriteRedefinition) const
{
- if (type_ == MacroTypeDef) {
- os << "\\def\\" << name().c_str();
- for (int i = 1; i <= numargs_; ++i)
- os << '#' << i;
- } else {
- // newcommand or renewcommand
+ // newcommand or renewcommand
+ if (os.latex() && optionals_ > 1)
+ os << "\\newlyxcommand";
+ else {
if (redefinition_ && !overwriteRedefinition)
os << "\\renewcommand";
else
os << "\\newcommand";
- os << "{\\" << name().c_str() << '}';
- if (numargs_ > 0)
- os << '[' << numargs_ << ']';
-
- // optional values
- if (os.latex()) {
- // in latex only one optional possible, simulate the others
- if (optionals_ >= 1) {
- docstring optValue = asString(cell(optIdx(0)));
- if (optValue.find(']') != docstring::npos)
- os << "[{" << cell(optIdx(0)) << "}]";
- else
- os << "[" << cell(optIdx(0)) << "]";
- }
- } else {
- // in lyx we handle all optionals as real optionals
- for (int i = 0; i < optionals_; ++i) {
- docstring optValue = asString(cell(optIdx(i)));
- if (optValue.find(']') != docstring::npos)
- os << "[{" << cell(optIdx(i)) << "}]";
- else
- os << "[" << cell(optIdx(i)) << "]";
- }
- }
+ }
+ os << "{\\" << name().c_str() << '}';
+ if (numargs_ > 0)
+ os << '[' << numargs_ << ']';
+
+ // optional values
+ for (int i = 0; i < optionals_; ++i) {
+ docstring optValue = asString(cell(optIdx(i)));
+ if (optValue.find(']') != docstring::npos)
+ os << "[{" << cell(optIdx(i)) << "}]";
+ else
+ os << "[" << cell(optIdx(i)) << "]";
}
os << "{" << cell(defIdx()) << "}";
return data.size() > 0;
}
+
+void MathMacroTemplate::validate(LaTeXFeatures & features) const
+{
+ if (optionals_ > 1) {
+ features.require("newlyxcommand");
+ }
+}
void MathMacroTemplate::getDefaults(vector<docstring> & defaults) const
{