]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathNest.cpp
Cmake export tests: Added sublabel handling also to revertedTests
[lyx.git] / src / mathed / InsetMathNest.cpp
index 6382f1cf84caaf6a3a66798feec4cca04828be67..90007c072ea3f41d15c0509a9f2a3b565c4aaa68 100644 (file)
@@ -250,7 +250,9 @@ bool InsetMathNest::idxLast(Cursor & cur) const
 void InsetMathNest::dump() const
 {
        odocstringstream oss;
-       WriteStream os(oss);
+       TexRow texrow(false);
+       otexrowstream ots(oss,texrow);
+       WriteStream os(ots);
        os << "---------------------------------------------\n";
        write(os);
        os << "\n";
@@ -376,8 +378,11 @@ void InsetMathNest::write(WriteStream & os) const
        ModeSpecifier specifier(os, currentMode(), lockedMode());
        docstring const latex_name = name();
        os << '\\' << latex_name;
-       for (size_t i = 0; i < nargs(); ++i)
+       for (size_t i = 0; i < nargs(); ++i) {
+               os.pushRowEntry(TexRow::mathEntry(id(),i));
                os << '{' << cell(i) << '}';
+               os.popRowEntry();
+       }
        if (nargs() == 0)
                os.pendingSpace(true);
        if (lock_ && !os.latex()) {
@@ -398,22 +403,20 @@ void InsetMathNest::normalize(NormalStream & os) const
 
 void InsetMathNest::latex(otexstream & os, OutputParams const & runparams) const
 {
-       WriteStream wi(os.os(), runparams.moving_arg, true,
-                      runparams.dryrun ? WriteStream::wsDryrun : WriteStream::wsDefault,
-                      runparams.encoding);
+       WriteStream wi(os, runparams.moving_arg, true,
+                       runparams.dryrun ? WriteStream::wsDryrun : WriteStream::wsDefault,
+                       runparams.encoding);
        wi.canBreakLine(os.canBreakLine());
-       write(wi);
+       if (runparams.lastid != -1) {
+               wi.pushRowEntry(os.texrow().textEntry(runparams.lastid,
+                                                                                         runparams.lastpos));
+               write(wi);
+               wi.popRowEntry();
+       } else
+               write(wi);
        // Reset parbreak status after a math inset.
        os.lastChar(0);
        os.canBreakLine(wi.canBreakLine());
-
-       int lf = wi.line();
-       if (lf > 0 && runparams.lastid != -1) {
-               --lf;
-               os.texrow().newline();
-               os.texrow().start(runparams.lastid, runparams.lastpos);
-       }
-       os.texrow().newlines(lf);
 }
 
 
@@ -636,6 +639,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_CHAR_BACKWARD:
        case LFUN_CHAR_FORWARD:
                cur.screenUpdateFlags(Update::Decoration | Update::FitCursor);
+               // fall through
        case LFUN_CHAR_RIGHT_SELECT:
        case LFUN_CHAR_LEFT_SELECT:
        case LFUN_CHAR_BACKWARD_SELECT:
@@ -696,6 +700,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_DOWN:
        case LFUN_UP:
                cur.screenUpdateFlags(Update::Decoration | Update::FitCursor);
+               // fall through
        case LFUN_DOWN_SELECT:
        case LFUN_UP_SELECT: {
                // close active macro
@@ -744,6 +749,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_PARAGRAPH_UP:
        case LFUN_PARAGRAPH_DOWN:
                cur.screenUpdateFlags(Update::Decoration | Update::FitCursor);
+               // fall through
        case LFUN_PARAGRAPH_UP_SELECT:
        case LFUN_PARAGRAPH_DOWN_SELECT:
                break;
@@ -752,6 +758,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_WORD_BACKWARD:
        case LFUN_WORD_LEFT:
                cur.screenUpdateFlags(Update::Decoration | Update::FitCursor);
+               // fall through
        case LFUN_LINE_BEGIN_SELECT:
        case LFUN_WORD_BACKWARD_SELECT:
        case LFUN_WORD_LEFT_SELECT:
@@ -777,6 +784,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_WORD_RIGHT:
        case LFUN_LINE_END:
                cur.screenUpdateFlags(Update::Decoration | Update::FitCursor);
+               // fall through
        case LFUN_WORD_FORWARD_SELECT:
        case LFUN_WORD_RIGHT_SELECT:
        case LFUN_LINE_END_SELECT:
@@ -993,11 +1001,11 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_FONT_DEFAULT:
                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
@@ -1657,12 +1665,17 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
                        } else if (c == '^' && currentMode() == InsetMath::MATH_MODE) {
                                cur.backspace();
                                cur.niceInsert(createInsetMath("mathcircumflex", buf));
-                       } else if (c == '{') {
-                               cur.backspace();
-                               cur.niceInsert(MathAtom(new InsetMathBrace(buf)));
-                       } else if (c == '%') {
+                       } else if (c == '{' || c == '%') {
+                               //using the saved selection as argument
+                               InsetMathUnknown * p = cur.activeMacro();
+                               p->finalize();
+                               MathData sel(cur.buffer());
+                               asArray(p->selection(), sel);
                                cur.backspace();
-                               cur.niceInsert(MathAtom(new InsetMathComment(buf)));
+                               if (c == '{')
+                                       cur.niceInsert(MathAtom(new InsetMathBrace(sel)));
+                               else
+                                       cur.niceInsert(MathAtom(new InsetMathComment(sel)));
                        } else if (c == '#') {
                                LASSERT(cur.activeMacro(), return false);
                                cur.activeMacro()->setName(name + docstring(1, c));
@@ -1808,9 +1821,6 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
        // These should be treated differently when not in text mode:
        if (cur.inRegexped()) {
                switch (c) {
-               case '\\':
-                       cur.niceInsert(createInsetMath("backslash", buf));
-                       break;
                case '^':
                        cur.niceInsert(createInsetMath("mathcircumflex", buf));
                        break;
@@ -2154,6 +2164,7 @@ MathCompletionList::MathCompletionList(Cursor const & cur)
        globals.push_back(from_ascii("\\sqrt"));
        globals.push_back(from_ascii("\\root"));
        globals.push_back(from_ascii("\\tabular"));
+       globals.push_back(from_ascii("\\sideset"));
        globals.push_back(from_ascii("\\stackrel"));
        globals.push_back(from_ascii("\\stackrelthree"));
        globals.push_back(from_ascii("\\binom"));