]> git.lyx.org Git - features.git/commitdiff
fix #1073
authorAndré Pönitz <poenitz@gmx.net>
Thu, 24 Apr 2003 10:47:05 +0000 (10:47 +0000)
committerAndré Pönitz <poenitz@gmx.net>
Thu, 24 Apr 2003 10:47:05 +0000 (10:47 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6843 a592a061-630c-0410-9148-cb99ea01b6c8

src/mathed/formulabase.C
src/mathed/math_cursor.C
src/mathed/math_cursor.h
src/mathed/math_parser.C

index e4e308a40e16df0687c4870f69b991bd53099005..d6e350fd819e31463ab17ba947b227bb9dfcb4e6 100644 (file)
@@ -573,12 +573,16 @@ dispatch_result InsetFormulaBase::localDispatch(FuncRequest const & cmd)
                break;
        }
 
-       case LFUN_PASTE:
+       case LFUN_PASTE: {
+               int n = 0;
+               istringstream is(cmd.argument.c_str());
+               is >> n;
                if (was_macro)
                        mathcursor->macroModeClose();
                bv->lockedInsetStoreUndo(Undo::EDIT);
-               mathcursor->selPaste();
+               mathcursor->selPaste(n);
                break;
+       }
 
        case LFUN_CUT:
                bv->lockedInsetStoreUndo(Undo::DELETE);
index 95dd31f494bca841a2648205e5285ca012371a25..3be9d00658da1bb0df79543da261d35b82d6b0c3 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "support/lstrings.h"
 #include "support/LAssert.h"
+#include "support/limited_stack.h"
 #include "debug.h"
 #include "frontends/Painter.h"
 #include "math_cursor.h"
@@ -58,7 +59,7 @@ using std::isalpha;
 
 
 // matheds own cut buffer
-string theCutBuffer;
+limited_stack<string> theCutBuffer;
 
 
 MathCursor::MathCursor(InsetFormulaBase * formula, bool front)
@@ -544,10 +545,10 @@ void MathCursor::selCopy()
 {
        dump("selCopy");
        if (selection_) {
-               theCutBuffer = grabSelection();
+               theCutBuffer.push(grabSelection());
                selection_ = false;
        } else {
-               theCutBuffer.erase();
+               //theCutBuffer.erase();
        }
 }
 
@@ -555,7 +556,7 @@ void MathCursor::selCopy()
 void MathCursor::selCut()
 {
        dump("selCut");
-       theCutBuffer = grabAndEraseSelection();
+       theCutBuffer.push(grabAndEraseSelection());
 }
 
 
@@ -569,11 +570,12 @@ void MathCursor::selDel()
 }
 
 
-void MathCursor::selPaste()
+void MathCursor::selPaste(int n)
 {
        dump("selPaste");
        selClearOrDel();
-       paste(theCutBuffer);
+       if (n < theCutBuffer.size())
+               paste(theCutBuffer[n]);
        //grabSelection();
        selection_ = false;
 }
@@ -1239,18 +1241,8 @@ bool MathCursor::interpret(char c)
                return pos() != size();
        }
 
-       if (c == '#') {
-               insert(c);
-               return true;
-       }
-
-       if (c == '{' || c == '}') {
-               niceInsert(createMathInset(string(1, c)));
-               return true;
-       }
-
-       if (c == '$') {
-               insert(createMathInset("$"));
+       if (c == '{' || c == '}' || c == '#' || c == '&' || c == '$') {
+               createMathInset(string(1, c));
                return true;
        }
 
index 6e33ddf5bfba7c2c06fc00a865fa22b0fce3ef36..91ab25e4703af870bc4336e3233cfdd18f6812e7 100644 (file)
@@ -149,8 +149,8 @@ public:
        void selCut();
        ///
        void selDel();
-       ///
-       void selPaste();
+       /// pastes n-th element of cut buffer
+       void selPaste(int n);
        ///
        void selHandle(bool);
        ///
index 61e2290f312de13e4f8ecd56a970c562f238d135..57d04f882ec19621f9023277c359b605ae4dc595 100644 (file)
@@ -86,6 +86,7 @@ namespace {
 
 MathInset::mode_type asMode(MathInset::mode_type oldmode, string const & str)
 {
+       lyxerr << "handling mode: '" << str << "'\n";
        if (str == "mathmode")
                return MathInset::MATH_MODE;
        if (str == "textmode" || str == "forcetext")
@@ -601,6 +602,8 @@ void Parser::parse1(MathGridInset & grid, unsigned flags,
                grid.asHullInset()->numbered(cellrow, numbered);
 
        //dump();
+       //lyxerr << " flags: " << flags << "\n";
+       //lyxerr << " mode: " << mode  << "\n";
        //lyxerr << "grid: " << grid << endl;
 
        while (good()) {
@@ -608,23 +611,22 @@ void Parser::parse1(MathGridInset & grid, unsigned flags,
 
 #ifdef FILEDEBUG
                lyxerr << "t: " << t << " flags: " << flags << "\n";
+               lyxerr << "mode: " << mode  << "\n";
                cell->dump();
                lyxerr << "\n";
 #endif
 
                if (flags & FLAG_ITEM) {
-                       skipSpaces();
 
-                       flags &= ~FLAG_ITEM;
-                       if (t.cat() == catBegin) {
+               if (t.cat() == catBegin) {
                                // skip the brace and collect everything to the next matching
                                // closing brace
-                               flags |= FLAG_BRACE_LAST;
-                               continue;
+                               parse1(grid, FLAG_BRACE_LAST, mode, numbered);
+                               return;
                        }
 
                        // handle only this single token, leave the loop if done
-                       flags |= FLAG_LEAVE;
+                       flags = FLAG_LEAVE;
                }
 
 
@@ -842,9 +844,8 @@ void Parser::parse1(MathGridInset & grid, unsigned flags,
                        // is a version for display attached?
                        skipSpaces();
                        MathArray ar2;
-                       if (nextToken().cat() == catBegin) {
+                       if (nextToken().cat() == catBegin)
                                parse(ar2, FLAG_ITEM, MathInset::MATH_MODE);
-                       }
 
                        cell->push_back(MathAtom(new MathMacroTemplate(name, nargs, ar1, ar2)));
                }
@@ -1212,8 +1213,10 @@ void Parser::parse1(MathGridInset & grid, unsigned flags,
                                MathAtom at = createMathInset(t.cs());
                                MathInset::mode_type m = mode;
                                //if (m == MathInset::UNDECIDED_MODE)
+                               lyxerr << "default creation: m1: " << m << "\n";
                                if (at->currentMode() != MathInset::UNDECIDED_MODE)
                                        m = at->currentMode();
+                               lyxerr << "default creation: m2: " << m << "\n";
                                MathInset::idx_type start = 0;
                                // this fails on \bigg[...\bigg]
                                //MathArray opt;