#include "LaTeXFeatures.h"
#include "LyX.h"
#include "LyXRC.h"
-#include "Undo.h"
#include "frontends/Painter.h"
}
+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)
// look if there is no other macro in edit mode above
++i;
for (; i != cur.depth(); ++i) {
- MathMacro const * macro = dynamic_cast<MathMacro const *>(&cur[i].inset());
- if (macro && macro->displayMode() == DISPLAY_NORMAL)
- return false;
+ InsetMath * im = cur[i].asInsetMath();
+ if (im) {
+ MathMacro const * macro = im->asMacro();
+ if (macro && macro->displayMode() == DISPLAY_NORMAL)
+ return false;
+ }
}
// ok, none found, I am the highest one
// 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.screenUpdateFlags(cur.result().update() | Update::SinglePar);
+ 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;
}