/*
* File: formulamacro.C
* Purpose: Implementation of the formula macro LyX inset
- * Author: André Pönitz
+ * Author: André Pönitz, based on ideas of Alejandro Aguilar Sierra
* Created: March 2001
- * Description: Allows the edition of math macros inside Lyx.
+ * Description: Allows the edition of math macros inside Lyx.
*
* Copyright: 2001 The LyX Project
*
#include "math_cursor.h"
#include "math_parser.h"
#include "math_macro.h"
-#include "math_macroarg.h"
#include "math_macrotable.h"
-#include "math_macrotemplate.h"
-#include "math_matrixinset.h"
-#include "lyx_main.h"
+#include "math_support.h"
+#include "math_mathmlstream.h"
#include "BufferView.h"
#include "gettext.h"
#include "Painter.h"
#include "font.h"
#include "support/lyxlib.h"
-#include "mathed/math_support.h"
#include "support/LOstream.h"
#include "debug.h"
#include "lyxlex.h"
#include "lyxtext.h"
#include "lyxfont.h"
-#include "math_mathmlstream.h"
using std::ostream;
}
-InsetFormulaMacro::InsetFormulaMacro(string nm, int na)
+InsetFormulaMacro::InsetFormulaMacro(string const & name, int nargs)
{
- setInsetName(nm);
- MathMacroTable::create(nm, na, string());
+ setInsetName(name);
+ MathMacroTable::create(name, nargs);
}
InsetFormulaMacro::InsetFormulaMacro(string const & s)
{
- string name = mathed_parse_macro(s);
+ string name;
+ mathed_parse_macro(name, s);
setInsetName(name);
-#ifdef WITH_WARNINGS
-#warning "metrics disabled"
-#endif
- //metrics();
}
}
-void InsetFormulaMacro::write(Buffer const * buf, ostream & os) const
+void InsetFormulaMacro::write(Buffer const *, ostream & os) const
{
os << "FormulaMacro ";
- MathWriteInfo wi(buf, os, false);
+ WriteStream wi(os, false, false);
par()->write(wi);
}
-int InsetFormulaMacro::latex(Buffer const * buf, ostream & os, bool fragile,
+int InsetFormulaMacro::latex(Buffer const *, ostream & os, bool fragile,
bool /*free_spacing*/) const
{
- MathWriteInfo wi(buf, os, fragile);
+ WriteStream wi(os, fragile, true);
par()->write(wi);
return 2;
}
-int InsetFormulaMacro::ascii(Buffer const * buf, ostream & os, int) const
+int InsetFormulaMacro::ascii(Buffer const *, ostream & os, int) const
{
- MathWriteInfo wi(buf, os, false);
+ WriteStream wi(os, false, true);
par()->write(wi);
return 0;
}
void InsetFormulaMacro::read(Buffer const *, LyXLex & lex)
{
- string name = mathed_parse_macro(lex);
+ string name;
+ mathed_parse_macro(name, lex);
setInsetName(name);
//lyxerr << "metrics disabled";
metrics();
}
-
-UpdatableInset::RESULT
-InsetFormulaMacro::localDispatch(BufferView * bv,
- kb_action action, string const & arg)
-{
- RESULT result = DISPATCHED;
- switch (action) {
- case LFUN_MATH_MACROARG: {
- int const i = lyx::atoi(arg);
- lyxerr << "inserting macro arg " << i << "\n";
- //if (i > 0 && i <= par()->numargs()) {
- mathcursor->insert(MathAtom(new MathMacroArgument(i)));
- updateLocal(bv, true);
- //} else {
- // lyxerr << "not in range 0.." << par()->numargs() << "\n";
- //}
- break;
- }
-
- default: {
- result = InsetFormulaBase::localDispatch(bv, action, arg);
- // force redraw if anything happened
- if (result != UNDISPATCHED) {
- bv->text->status(bv, LyXText::NEED_MORE_REFRESH);
- bv->updateInset(this, false);
- }
- }
- }
- return result;
-}
-
-
MathAtom const & InsetFormulaMacro::par() const
{
return MathMacroTable::provide(getInsetName());
// label
font.setColor(LColor::math);
-
+
int const a = y - ascent(bv, font) + 1;
int const w = width(bv, font) - 2;
int const h = ascent(bv, font) + descent(bv, font) - 2;
pain.fillRectangle(int(x), a , w, h, LColor::mathmacrobg);
pain.rectangle(int(x), a, w, h, LColor::mathframe);
- if (mathcursor && mathcursor->formula() == this)
+ if (mathcursor &&
+ const_cast<InsetFormulaBase const *>(mathcursor->formula()) == this)
mathcursor->drawSelection(pain);
pain.text(int(x + 2), y, prefix(), font);
yo_ = y;
par()->draw(pain, xo_, yo_);
}
-