#include "mathed/InsetMathHull.h"
#include "mathed/MathMacroTemplate.h"
+#include "mathed/MathParser.h"
#include <boost/next_prior.hpp>
// It may happen that sel is empty but there is a selection
replaceSelection(cur);
+ // Is this a valid formula?
+ bool valid = true;
+
if (sel.empty()) {
#ifdef ENABLE_ASSERTIONS
const int old_pos = cur.pos();
&& sel.find(from_ascii("\\def")) == string::npos)
{
InsetMathHull * formula = new InsetMathHull;
- istringstream is(to_utf8(sel));
+ string const selstr = to_utf8(sel);
+ istringstream is(selstr);
Lexer lex;
lex.setStream(is);
+ mathed_parser_warn_contents(false);
formula->read(lex);
- if (formula->getType() == hullNone)
- // Don't create pseudo formulas if
- // delimiters are left out
- formula->mutate(hullSimple);
- cur.insert(formula);
+ if (formula->getType() == hullNone) {
+ // No valid formula, let's try with delims
+ is.str("$" + selstr + "$");
+ lex.setStream(is);
+ formula->read(lex);
+ if (formula->getType() == hullNone) {
+ // Still not valid, leave it as is
+ valid = false;
+ delete formula;
+ cur.insert(sel);
+ } else
+ cur.insert(formula);
+ } else
+ cur.insert(formula);
+ mathed_parser_warn_contents(true);
} else {
cur.insert(new MathMacroTemplate(sel));
}
}
- cur.message(from_utf8(N_("Math editor mode")));
+ if (valid)
+ cur.message(from_utf8(N_("Math editor mode")));
+ else
+ cur.message(from_utf8(N_("No valid math formula")));
}
// Single-click on work area
case LFUN_MOUSE_PRESS:
// We are not marking a selection with the keyboard in any case.
- cur.bv().cursor().mark() = false;
+ cur.bv().cursor().setMark(false);
switch (cmd.button()) {
case mouse_button::button1:
// Set the cursor
// We continue with our existing selection or start a new one, so don't
// reset the anchor.
bvcur.setCursor(cur);
- bvcur.selection() = true;
+ bvcur.setSelection(true);
if (cur.top() == old) {
// We didn't move one iota, so no need to update the screen.
cur.updateFlags(Update::SinglePar | Update::FitCursor);
cur.push(*inset);
cur.top().pos() = cur.top().lastpos();
cur.resetAnchor();
- cur.selection() = true;
+ cur.setSelection(true);
cur.top().pos() = 0;
}
break;
case LFUN_ESCAPE:
if (cur.selection()) {
- cur.selection() = false;
+ cur.setSelection(false);
} else {
cur.undispatched();
// This used to be LFUN_FINISHED_RIGHT, I think FORWARD is more