}
+void MathMacro::normalize(NormalStream & os) const
+{
+ os << "[macro " << name();
+ for (size_t i = 0; i < nargs(); ++i)
+ os << ' ' << cell(i);
+ os << ']';
+}
+
+
docstring MathMacro::name() const
{
if (displayMode_ == DISPLAY_UNFOLDED)
// otherwise do a manual metrics call
CoordCache & coords = mi.base.bv->coordCache();
for (idx_type i = 0; i < nargs(); ++i) {
- if (!coords.getArrays().has(&cell(i))) {
+ if (!coords.getArrays().hasDim(&cell(i))) {
Dimension tdim;
cell(i).metrics(mi, tdim);
}
}
-void MathMacro::updateRepresentation()
+void MathMacro::updateRepresentation(Cursor * cur, MacroContext const & mc,
+ UpdateType utype)
{
// known macro?
if (macro_ == 0)
}
// expanding macro with the values
macro_->expand(values, expanded_.cell(0));
+ if (utype == OutputUpdate && !expanded_.cell(0).empty())
+ expanded_.cell(0).updateMacros(cur, mc, utype);
// get definition for list edit mode
docstring const & display = macro_->display();
asArray(display.empty() ? macro_->definition() : display, definition_);
inset_cursor.cell().erase(inset_cursor.pos());
inset_cursor.cell().insert(inset_cursor.pos(),
createInsetMath(unfolded_name, cur.buffer()));
+ cur.resetAnchor();
cur.screenUpdateFlags(cur.result().screenUpdate() | Update::SinglePar);
return true;
}
void MathMacro::mathmlize(MathStream & os) const
{
- os << expanded_.cell(0);
+ MathData const & data = expanded_.cell(0);
+ if (data.empty()) {
+ // this means that we do not recognize the macro
+ throw MathExportException();
+ }
+ os << data;
}
void MathMacro::htmlize(HtmlStream & os) const
{
- os << expanded_.cell(0);
+ MathData const & data = expanded_.cell(0);
+ if (data.empty()) {
+ // this means that we do not recognize the macro
+ throw MathExportException();
+ }
+ os << data;
}