]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathNest.cpp
Find: Renamend for_searchAdv to for_serach in src/OutputParams.h
[lyx.git] / src / mathed / InsetMathNest.cpp
index 9210886d221c6b5eae932197dc8be352418f61a0..d4759a0c0f16fdd345cd19fbf9b313efe0c8af05 100644 (file)
@@ -358,8 +358,14 @@ void InsetMathNest::normalize(NormalStream & os) const
 
 void InsetMathNest::latex(otexstream & os, OutputParams const & runparams) const
 {
-       TeXMathStream wi(os, runparams.moving_arg, true,
-                        runparams.dryrun ? TeXMathStream::wsDryrun : TeXMathStream::wsDefault,
+       TeXMathStream::OutputType ot;
+       if (runparams.for_search != OutputParams::NoSearch)
+               ot = TeXMathStream::wsSearchAdv;
+       else if (runparams.dryrun)
+               ot = TeXMathStream::wsDryrun;
+       else
+               ot = TeXMathStream::wsDefault;
+       TeXMathStream wi(os, runparams.moving_arg, true, ot,
                         runparams.encoding);
        wi.strikeoutMath(runparams.inDeletedInset);
        if (runparams.inulemcmd) {
@@ -780,8 +786,12 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                cur.clearTargetX();
                cur.macroModeClose();
                if (!cur.inset().idxNext(cur)) {
-                       cur.idx() = firstIdx();
-                       cur.pos() = 0;
+                       if (cur.lastidx() == 0)
+                               cur.popForward();
+                       else {
+                               cur.idx() = firstIdx();
+                               cur.pos() = 0;
+                       }
                }
                break;
 
@@ -791,8 +801,12 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                cur.clearTargetX();
                cur.macroModeClose();
                if (!cur.inset().idxPrev(cur)) {
-                       cur.idx() = cur.lastidx();
-                       cur.pos() = lyxrc.mac_like_cursor_movement ? cur.lastpos() : 0;
+                       if (cur.lastidx() == 0)
+                               cur.popBackward();
+                       else {
+                               cur.idx() = cur.lastidx();
+                               cur.pos() = lyxrc.mac_like_cursor_movement ? cur.lastpos() : 0;
+                       }
                }
                break;
 
@@ -1665,10 +1679,10 @@ void InsetMathNest::lfunMouseRelease(Cursor & cur, FuncRequest & cmd)
 
 bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
 {
-        // try auto-correction
-        if (lyxrc.autocorrection_math && cur.pos() != 0 && !cur.selection()
-                  && math_autocorrect(cur, c))
-                return true;
+       // try auto-correction
+       if (lyxrc.autocorrection_math && cur.pos() != 0 && !cur.selection()
+            && math_autocorrect(cur, c))
+               return true;
 
        //lyxerr << "interpret 2: '" << c << "'" << endl;
        docstring save_selection;
@@ -1895,10 +1909,16 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
                        return true;
                }
                if (currentMode() == InsetMath::MATH_MODE && Encodings::isUnicodeTextOnly(c)) {
-                       MathAtom at = createInsetMath("text", buf);
-                       at.nucleus()->cell(0).push_back(MathAtom(new InsetMathChar(c)));
-                       cur.insert(at);
-                       cur.posForward();
+                       MathAtom const atom(new InsetMathChar(c));
+                       if (cur.prevInset() && cur.prevInset()->asInsetMath()->name() == "text") {
+                               // reuse existing \text inset
+                               cur.prevInset()->asInsetMath()->cell(0).push_back(atom);
+                       } else {
+                               MathAtom at = createInsetMath("text", buf);
+                               at.nucleus()->cell(0).push_back(atom);
+                               cur.insert(at);
+                               cur.posForward();
+                       }
                        return true;
                }
        } else {