]> git.lyx.org Git - lyx.git/blobdiff - src/Text3.cpp
Typos.
[lyx.git] / src / Text3.cpp
index c2ef1d1ad9b635580ef6d09844be99f60a5e54ae..e78a4ee68984baf6bcdfc7862be9465f92d87649 100644 (file)
@@ -56,7 +56,6 @@
 #include "insets/InsetQuotes.h"
 #include "insets/InsetSpecialChar.h"
 #include "insets/InsetText.h"
-#include "insets/InsetInfo.h"
 #include "insets/InsetGraphics.h"
 #include "insets/InsetGraphicsParams.h"
 
@@ -68,6 +67,7 @@
 
 #include "mathed/InsetMathHull.h"
 #include "mathed/MathMacroTemplate.h"
+#include "mathed/MathParser.h"
 
 #include <boost/next_prior.hpp>
 
@@ -128,6 +128,9 @@ static void mathDispatch(Cursor & cur, FuncRequest const & cmd, bool display)
        // 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();
@@ -157,20 +160,35 @@ static void mathDispatch(Cursor & cur, FuncRequest const & cmd, bool display)
                                && 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")));
 }
 
 
@@ -864,7 +882,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                if (!ins)
                        break;
 
-               cur.recordUndoFullDocument();
+               cur.recordUndo();
 
                string id = to_utf8(cmd.argument());
                string grp = graphics::getGroupParams(bv->buffer(), id);
@@ -1149,7 +1167,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        // 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
@@ -1231,7 +1249,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                // 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);
@@ -1492,7 +1510,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        cur.push(*inset);
                        cur.top().pos() = cur.top().lastpos();
                        cur.resetAnchor();
-                       cur.selection() = true;
+                       cur.setSelection(true);
                        cur.top().pos() = 0;
                }
                break;
@@ -1525,7 +1543,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
        }
 
-       case LFUN_FONT_BOLD: {
+       case LFUN_FONT_BOLD:
+       case LFUN_FONT_BOLDSYMBOL: {
                Font font(ignore_font, ignore_language);
                font.fontInfo().setSeries(BOLD_SERIES);
                toggleAndShow(cur, this, font);
@@ -1768,7 +1787,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
        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
@@ -2041,6 +2060,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                break;
 
        case LFUN_FONT_BOLD:
+       case LFUN_FONT_BOLDSYMBOL:
                flag.setOnOff(fontinfo.series() == BOLD_SERIES);
                break;