]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_cursor.C
fix for the first item on Martin's list
[lyx.git] / src / mathed / math_cursor.C
index c3ee8d0996e124c1b3c95b83a645ae192544f258..e62ac1920d6f343362eaed166eae004ff5ad6eff 100644 (file)
@@ -38,6 +38,7 @@
 #include "math_hullinset.h"
 #include "math_iterator.h"
 #include "math_macroarg.h"
+#include "math_macrotemplate.h"
 #include "math_mathmlstream.h"
 #include "math_parser.h"
 #include "math_replace.h"
@@ -202,14 +203,9 @@ void MathCursor::pushRight(MathAtom & t)
 
 bool MathCursor::popLeft()
 {
-       //cerr << "Leaving atom "; par()->write(cerr, false); cerr << " left\n";
+       //cerr << "Leaving atom to the left\n";
        if (Cursor_.size() <= 1)
                return false;
-       if (par()->asScriptInset()) {
-               par()->asScriptInset()->removeEmptyScripts();
-               if (par()->asScriptInset()->empty())
-                       plainErase();
-       }
        Cursor_.pop_back();
        return true;
 }
@@ -220,11 +216,6 @@ bool MathCursor::popRight()
        //cerr << "Leaving atom "; par()->write(cerr, false); cerr << " right\n";
        if (Cursor_.size() <= 1)
                return false;
-       if (par()->asScriptInset()) {
-               par()->asScriptInset()->removeEmptyScripts();
-               if (par()->asScriptInset()->empty())
-                       plainErase();
-       }
        Cursor_.pop_back();
        posRight();
        return true;
@@ -973,6 +964,19 @@ void MathCursor::normalize()
                dump("error 4");
        }
        pos() = min(pos(), size());
+
+       // remove empty scripts if possible
+       for (pos_type i = 0; i < size(); ++i) {
+               MathScriptInset * p = array().at(i)->asScriptInset();
+               if (p) {
+                       p->removeEmptyScripts();
+                       if (p->empty())
+                               array().erase(i);
+               }
+       }
+
+       // fix again position
+       pos() = min(pos(), size());
 }
 
 
@@ -1371,7 +1375,9 @@ bool MathCursor::interpret(char c)
        if (inMacroArgMode()) {
                --pos();
                plainErase();
-               if ('1' <= c && c <= '9')
+               int n = c - '0';
+               MathMacroTemplate * p = formula()->par()->asMacroTemplate();
+               if (p && 1 <= n && n <= p->numargs())
                        insert(MathAtom(new MathMacroArgument(c - '0')));
                else {
                        insert(MathAtom(new MathSpecialCharInset('#')));