]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathNest.cpp
Whitespace.
[lyx.git] / src / mathed / InsetMathNest.cpp
index a0962e972a021e1c81210f5c40c29a6062569820..2b23fb15acb9b31f3e54746894e071c34c7cc411 100644 (file)
@@ -79,9 +79,11 @@ using cap::replaceSelection;
 using cap::selClearOrDel;
 
 
-InsetMathNest::InsetMathNest(idx_type nargs)
-       : cells_(nargs), lock_(false), mouse_hover_(false)
-{}
+InsetMathNest::InsetMathNest(Buffer * buf, idx_type nargs)
+       : InsetMath(buf), cells_(nargs), lock_(false), mouse_hover_(false)
+{
+       setBuffer(*buf);
+}
 
 
 InsetMathNest::InsetMathNest(InsetMathNest const & inset)
@@ -440,7 +442,7 @@ void InsetMathNest::handleFont(Cursor & cur, docstring const & arg,
        if (cur.inset().asInsetMath()->name() == font)
                cur.handleFont(to_utf8(font));
        else
-               handleNest(cur, createInsetMath(font), arg);
+               handleNest(cur, createInsetMath(font, cur.buffer()), arg);
 }
 
 
@@ -520,7 +522,7 @@ void InsetMathNest::handleFont2(Cursor & cur, docstring const & arg)
        font.fromString(to_utf8(arg), b);
        if (font.fontInfo().color() != Color_inherit &&
            font.fontInfo().color() != Color_ignore)
-               handleNest(cur, MathAtom(new InsetMathColor(true, font.fontInfo().color())));
+               handleNest(cur, MathAtom(new InsetMathColor(buffer_, true, font.fontInfo().color())));
 
        // FIXME: support other font changes here as well?
 }
@@ -552,7 +554,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                        is >> n;
                        topaste = cap::selection(n);
                }
-               cur.niceInsert(topaste, parseflg);
+               cur.niceInsert(topaste, parseflg, false);
                cur.clearSelection(); // bug 393
                cur.finishUndo();
                break;
@@ -953,6 +955,10 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                handleFont(cur, cmd.argument(), "textnormal");
                break;
 
+       case LFUN_FONT_UNDERLINE:
+               cur.recordUndo();
+               cur.handleNest(createInsetMath("underline", cur.buffer()));
+               break;
        case LFUN_MATH_MODE: {
 #if 1
                // ignore math-mode on when already in math mode
@@ -964,16 +970,16 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                selClearOrDel(cur);
                //cur.plainInsert(MathAtom(new InsetMathMBox(cur.bv())));
                if (currentMode() <= Inset::TEXT_MODE)
-                       cur.plainInsert(MathAtom(new InsetMathEnsureMath));
+                       cur.plainInsert(MathAtom(new InsetMathEnsureMath(buffer_)));
                else
-                       cur.plainInsert(MathAtom(new InsetMathBox(from_ascii("mbox"))));
+                       cur.plainInsert(MathAtom(new InsetMathBox(buffer_, from_ascii("mbox"))));
                cur.posBackward();
                cur.pushBackward(*cur.nextInset());
                cur.niceInsert(save_selection);
 #else
                if (currentMode() == Inset::TEXT_MODE) {
                        cur.recordUndoSelection();
-                       cur.niceInsert(MathAtom(new InsetMathHull("simple")));
+                       cur.niceInsert(MathAtom(new InsetMathHull("simple", cur.buffer())));
                        cur.message(_("create new math text environment ($...$)"));
                } else {
                        handleFont(cur, cmd.argument(), "textrm");
@@ -992,7 +998,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                cur.macroModeClose();
                docstring const save_selection = grabAndEraseSelection(cur);
                selClearOrDel(cur);
-               cur.plainInsert(MathAtom(new InsetMathHull(hullRegexp)));
+               cur.plainInsert(MathAtom(new InsetMathHull(buffer_, hullRegexp)));
                cur.posBackward();
                cur.pushBackward(*cur.nextInset());
                cur.niceInsert(save_selection);
@@ -1025,8 +1031,8 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                if (n < 1)
                        n = 1;
                v_align += 'c';
-               cur.niceInsert(
-                       MathAtom(new InsetMathArray(from_ascii("array"), m, n, (char)v_align[0], h_align)));
+               cur.niceInsert(MathAtom(new InsetMathArray(buffer_,
+                       from_ascii("array"), m, n, (char)v_align[0], h_align)));
                break;
        }
 
@@ -1042,7 +1048,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                if (n < 1)
                        n = 1;
                cur.niceInsert(
-                       MathAtom(new InsetMathAMSArray(name, m, n)));
+                       MathAtom(new InsetMathAMSArray(buffer_, name, m, n)));
                break;
        }
 
@@ -1055,7 +1061,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                if (rs.empty())
                        rs = ')';
                cur.recordUndo();
-               cur.handleNest(MathAtom(new InsetMathDelim(ls, rs)));
+               cur.handleNest(MathAtom(new InsetMathDelim(buffer_, ls, rs)));
                break;
        }
 
@@ -1169,7 +1175,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                docstring const & name = cmd.argument();
                string data;
                if (name == "ref") {
-                       InsetMathRef tmp(name);
+                       InsetMathRef tmp(buffer_, name);
                        data = tmp.createDialogStr(to_utf8(name));
                } else if (name == "mathspace") {
                        InsetMathSpace tmp;
@@ -1288,6 +1294,7 @@ bool InsetMathNest::getStatus(Cursor & cur, FuncRequest const & cmd,
                flag.setEnabled(true);
                break;
 
+       case LFUN_FONT_UNDERLINE:
        case LFUN_FONT_FRAK:
                flag.setEnabled(currentMode() != TEXT_MODE);
                break;
@@ -1468,6 +1475,7 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
                save_selection = grabAndEraseSelection(cur);
 
        cur.clearTargetX();
+       Buffer * buf = cur.buffer();
 
        // handle macroMode
        if (cur.inMacroMode()) {
@@ -1498,24 +1506,24 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
                        if (c == '\\') {
                                cur.backspace();
                                if (currentMode() <= InsetMath::TEXT_MODE)
-                                       cur.niceInsert(createInsetMath("textbackslash"));
+                                       cur.niceInsert(createInsetMath("textbackslash", buf));
                                else
-                                       cur.niceInsert(createInsetMath("backslash"));
+                                       cur.niceInsert(createInsetMath("backslash", buf));
                        } else if (c == '^' && currentMode() == InsetMath::MATH_MODE) {
                                cur.backspace();
-                               cur.niceInsert(createInsetMath("mathcircumflex"));
+                               cur.niceInsert(createInsetMath("mathcircumflex", buf));
                        } else if (c == '{') {
                                cur.backspace();
-                               cur.niceInsert(MathAtom(new InsetMathBrace));
+                               cur.niceInsert(MathAtom(new InsetMathBrace(buf)));
                        } else if (c == '%') {
                                cur.backspace();
-                               cur.niceInsert(MathAtom(new InsetMathComment));
+                               cur.niceInsert(MathAtom(new InsetMathComment(buf)));
                        } else if (c == '#') {
                                LASSERT(cur.activeMacro(), /**/);
                                cur.activeMacro()->setName(name + docstring(1, c));
                        } else {
                                cur.backspace();
-                               cur.niceInsert(createInsetMath(docstring(1, c)));
+                               cur.niceInsert(createInsetMath(docstring(1, c), buf));
                        }
                        return true;
                }
@@ -1559,7 +1567,7 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
                        }
                }
                if (c == '{')
-                       cur.niceInsert(MathAtom(new InsetMathBrace));
+                       cur.niceInsert(MathAtom(new InsetMathBrace(buf)));
                else if (c != ' ')
                        interpretChar(cur, c);
                return true;
@@ -1652,11 +1660,11 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
                        return true;
                }
                if (c == '~') {
-                       cur.niceInsert(createInsetMath("sim"));
+                       cur.niceInsert(createInsetMath("sim", buf));
                        return true;
                }
                if (currentMode() == InsetMath::MATH_MODE && !isAsciiOrMathAlpha(c)) {
-                       MathAtom at = createInsetMath("text");
+                       MathAtom at = createInsetMath("text", buf);
                        at.nucleus()->cell(0).push_back(MathAtom(new InsetMathChar(c)));
                        cur.niceInsert(at);
                        cur.posForward();
@@ -1664,18 +1672,18 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
                }
        } else {
                if (c == '^') {
-                       cur.niceInsert(createInsetMath("textasciicircum"));
+                       cur.niceInsert(createInsetMath("textasciicircum", buf));
                        return true;
                }
                if (c == '~') {
-                       cur.niceInsert(createInsetMath("textasciitilde"));
+                       cur.niceInsert(createInsetMath("textasciitilde", buf));
                        return true;
                }
        }
 
        if (c == '{' || c == '}' || c == '&' || c == '$' || c == '#' ||
            c == '%' || c == '_') {
-               cur.niceInsert(createInsetMath(docstring(1, c)));
+               cur.niceInsert(createInsetMath(docstring(1, c), buf));
                return true;
        }
 
@@ -1733,7 +1741,7 @@ bool InsetMathNest::script(Cursor & cur, bool up,
        //lyxerr << "handling script: up: " << up << endl;
        if (cur.inMacroMode() && cur.macroName() == "\\") {
                if (up)
-                       cur.niceInsert(createInsetMath("mathcircumflex"));
+                       cur.niceInsert(createInsetMath("mathcircumflex", cur.buffer()));
                else
                        interpretChar(cur, '_');
                return true;
@@ -1759,10 +1767,10 @@ bool InsetMathNest::script(Cursor & cur, bool up,
                // one if in the very first position of the array
                if (cur.pos() == 0) {
                        //lyxerr << "new scriptinset" << endl;
-                       cur.insert(new InsetMathScript(up));
+                       cur.insert(new InsetMathScript(buffer_, up));
                } else {
                        //lyxerr << "converting prev atom " << endl;
-                       cur.prevAtom() = MathAtom(new InsetMathScript(cur.prevAtom(), up));
+                       cur.prevAtom() = MathAtom(new InsetMathScript(buffer_, cur.prevAtom(), up));
                }
                --cur.pos();
                InsetMathScript * inset = cur.nextAtom().nucleus()->asScriptInset();