]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_scriptinset.C
rename commandtags.h to lfuns.h and renumber/cleanup. Rebuild the tree !
[lyx.git] / src / mathed / math_scriptinset.C
index ebd2dab51e92ffc47e6681d4c0162f3d8ffd4100..3892ba88328da383d71a7d4ec6411e56dfc5d699 100644 (file)
@@ -1,6 +1,3 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
 
 #include "math_scriptinset.h"
 #include "math_support.h"
@@ -273,16 +270,6 @@ bool MathScriptInset::hasLimits() const
 }
 
 
-void MathScriptInset::removeEmptyScripts()
-{
-       for (int i = 0; i <= 1; ++i)
-               if (script_[i] && cell(i).size() == 0) {
-                       cell(i).clear();
-                       script_[i] = false;
-               }
-}
-
-
 void MathScriptInset::removeScript(bool up)
 {
        cell(up).clear();
@@ -329,7 +316,7 @@ bool MathScriptInset::idxUpDown(idx_type & idx, pos_type & pos, bool up,
                        return false;
                // otherwise go to last base position
                idx = 2;
-               pos = cell(2).size();   
+               pos = cell(2).size();
        }
 
        else if (idx == 0) {
@@ -337,20 +324,22 @@ bool MathScriptInset::idxUpDown(idx_type & idx, pos_type & pos, bool up,
                if (!up)
                        return false;
                idx = 2;
-               pos = cell(2).size();   
+               pos = cell(2).size();
        }
-       
+
        else {
                // in nucleus
-               // don't go up/down unless in last position
-               if (pos != cell(2).size())
-                       return false;   
                // don't go up/down if there is no cell.
                if (!has(up))
                        return false;
-               // otherwise move into the first position
-               idx = up;
-               pos = 0;
+               // go up/down only if in the last position
+               // or in the first position of something with displayed limits
+               if (pos == cell(2).size() || (pos == 0 && hasLimits())) {
+                       idx = up;
+                       pos = 0;
+                       return true;
+               }
+               return false;
        }
        return true;
 }
@@ -410,7 +399,7 @@ void MathScriptInset::normalize(NormalStream & os) const
 }
 
 
-void MathScriptInset::maplize(MapleStream & os) const
+void MathScriptInset::maple(MapleStream & os) const
 {
        if (nuc().size())
                os << nuc();
@@ -421,24 +410,24 @@ void MathScriptInset::maplize(MapleStream & os) const
 }
 
 
-void MathScriptInset::mathematicize(MathematicaStream & os) const
+void MathScriptInset::mathematica(MathematicaStream & os) const
 {
        bool d = hasDown() && down().size();
        bool u = hasUp() && up().size();
 
        if (nuc().size()) {
-               if (d) 
+               if (d)
                        os << "Subscript[" << nuc();
                else
                        os << nuc();
        }
 
        if (u)
-               os << "^(" << up() << ")";
+               os << "^(" << up() << ')';
 
        if (nuc().size())
                if (d)
-                       os << "," << down() << "]"; 
+                       os << ',' << down() << ']';
 }
 
 
@@ -468,7 +457,7 @@ void MathScriptInset::mathmlize( MathMLStream & os) const
 }
 
 
-void MathScriptInset::octavize(OctaveStream & os) const
+void MathScriptInset::octave(OctaveStream & os) const
 {
        if (nuc().size())
                os << nuc();
@@ -482,12 +471,29 @@ void MathScriptInset::octavize(OctaveStream & os) const
 void MathScriptInset::infoize(std::ostream & os) const
 {
        os << "Scripts";
+}
+
+
+void MathScriptInset::infoize2(std::ostream & os) const
+{
        if (limits_)
                os << (limits_ == 1 ? ", Displayed limits" : ", Inlined limits");
 }
 
 
-MathInset::result_type MathScriptInset::dispatch
+void MathScriptInset::notifyCursorLeaves(idx_type idx)
+{
+       MathNestInset::notifyCursorLeaves(idx);
+
+       // remove empty scripts if possible
+       if (idx != 2 && script_[idx] && cell(idx).empty()) {
+               cell(idx).clear();
+               script_[idx] = false;
+       }
+}
+
+
+dispatch_result MathScriptInset::dispatch
        (FuncRequest const & cmd, idx_type & idx, pos_type & pos)
 {
        if (cmd.action == LFUN_MATH_LIMITS) {