]> git.lyx.org Git - lyx.git/blobdiff - src/cursor.C
cleanup after svn hang-up, #undef CursorShape. Should be compilable ganin now.
[lyx.git] / src / cursor.C
index 0ca25c2d20af868b2824c792038cd73367919867..3a4b3a6169cc98399b615813259c3a3ed2b3d6d4 100644 (file)
 #include "insets/insettabular.h"
 #include "insets/insettext.h"
 
-#include "mathed/math_data.h"
-#include "mathed/math_inset.h"
-#include "mathed/math_scriptinset.h"
-#include "mathed/math_macrotable.h"
+#include "mathed/MathData.h"
+#include "mathed/InsetMath.h"
+#include "mathed/InsetMathScript.h"
+#include "mathed/MathMacroTable.h"
+#include "mathed/MathParser.h"
 
 #include "support/limited_stack.h"
 
@@ -53,6 +54,7 @@
 #include <limits>
 
 using lyx::char_type;
+using lyx::docstring;
 using lyx::pit_type;
 
 using std::string;
@@ -62,7 +64,6 @@ using std::endl;
 using std::isalpha;
 #endif
 using std::min;
-using std::swap;
 
 namespace {
 
@@ -94,7 +95,7 @@ namespace {
                DocIterator it = c;
                it.top().pos() = 0;
                DocIterator et = c;
-               et.top().pos() = et.top().asMathInset()->cell(et.top().idx()).size();
+               et.top().pos() = et.top().asInsetMath()->cell(et.top().idx()).size();
                for (size_t i = 0; ; ++i) {
                        int xo;
                        int yo;
@@ -492,7 +493,6 @@ void LCursor::clearSelection()
        selection() = false;
        mark() = false;
        resetAnchor();
-       bv().unsetXSel();
 }
 
 
@@ -565,18 +565,18 @@ std::ostream & operator<<(std::ostream & os, LCursor const & cur)
 //
 // The part below is the non-integrated rest of the original math
 // cursor. This should be either generalized for texted or moved
-// back to mathed (in most cases to MathNestInset).
+// back to mathed (in most cases to InsetMathNest).
 //
 ///////////////////////////////////////////////////////////////////
 
-#include "mathed/math_charinset.h"
-#include "mathed/math_factory.h"
-#include "mathed/math_gridinset.h"
-#include "mathed/math_macroarg.h"
-#include "mathed/math_mathmlstream.h"
-#include "mathed/math_scriptinset.h"
-#include "mathed/math_support.h"
-#include "mathed/math_unknowninset.h"
+#include "mathed/InsetMathChar.h"
+#include "mathed/MathFactory.h"
+#include "mathed/InsetMathGrid.h"
+#include "mathed/MathMacroArgument.h"
+#include "mathed/MathMLStream.h"
+#include "mathed/InsetMathScript.h"
+#include "mathed/MathSupport.h"
+#include "mathed/InsetMathUnknown.h"
 
 //#define FILEDEBUG 1
 
@@ -669,7 +669,7 @@ void LCursor::insert(char_type c)
        BOOST_ASSERT(!empty());
        if (inMathed()) {
                lyx::cap::selClearOrDel(*this);
-               insert(new MathCharInset(c));
+               insert(new InsetMathChar(c));
        } else {
                text()->insertChar(*this, c);
        }
@@ -751,7 +751,7 @@ bool LCursor::backspace()
        }
 
        if (inMacroMode()) {
-               MathUnknownInset * p = activeMacro();
+               InsetMathUnknown * p = activeMacro();
                if (p->name().size() > 1) {
                        p->setName(p->name().substr(0, p->name().size() - 1));
                        return true;
@@ -841,7 +841,7 @@ bool LCursor::macroModeClose()
 {
        if (!inMacroMode())
                return false;
-       MathUnknownInset * p = activeMacro();
+       InsetMathUnknown * p = activeMacro();
        p->finalize();
        string const s = p->name();
        --pos();
@@ -859,7 +859,10 @@ bool LCursor::macroModeClose()
        if (macro && macro->getInsetName() == name)
                lyxerr << "can't enter recursive macro" << endl;
 
-       plainInsert(createMathInset(name));
+       InsetMathNest * const in = inset().asInsetMath()->asNestInset();
+       if (in && in->interpret(*this, s))
+               return true;
+       plainInsert(createInsetMath(name));
        return true;
 }
 
@@ -908,12 +911,12 @@ bool LCursor::inMacroMode() const
 {
        if (pos() == 0)
                return false;
-       MathUnknownInset const * p = prevAtom()->asUnknownInset();
+       InsetMathUnknown const * p = prevAtom()->asUnknownInset();
        return p && !p->final();
 }
 
 
-MathUnknownInset * LCursor::activeMacro()
+InsetMathUnknown * LCursor::activeMacro()
 {
        return inMacroMode() ? prevAtom().nucleus()->asUnknownInset() : 0;
 }
@@ -963,7 +966,7 @@ void LCursor::normalize()
                        << pos() << ' ' << lastpos() <<  " in idx: " << idx()
                       << " in atom: '";
                WriteStream wi(lyxerr, false, true);
-               inset().asMathInset()->write(wi);
+               inset().asInsetMath()->write(wi);
                lyxerr << endl;
                pos() = lastpos();
        }
@@ -981,7 +984,8 @@ bool LCursor::goUpDown(bool up)
        int yo = 0;
        getPos(xo, yo);
 
-       // check if we had something else in mind, if not, this is the future goal
+       // check if we had something else in mind, if not, this is the future
+       // target
        if (x_target() == -1)
                x_target() = xo;
        else
@@ -991,10 +995,10 @@ bool LCursor::goUpDown(bool up)
        if (!selection()) {
                // try left
                if (pos() != 0) {
-                       MathScriptInset const * p = prevAtom()->asScriptInset();
+                       InsetMathScript const * p = prevAtom()->asScriptInset();
                        if (p && p->has(up)) {
                                --pos();
-                               push(*const_cast<MathScriptInset*>(p));
+                               push(*const_cast<InsetMathScript*>(p));
                                idx() = p->idxOfScript(up);
                                pos() = lastpos();
                                return true;
@@ -1003,9 +1007,9 @@ bool LCursor::goUpDown(bool up)
 
                // try right
                if (pos() != lastpos()) {
-                       MathScriptInset const * p = nextAtom()->asScriptInset();
+                       InsetMathScript const * p = nextAtom()->asScriptInset();
                        if (p && p->has(up)) {
-                               push(*const_cast<MathScriptInset*>(p));
+                               push(*const_cast<InsetMathScript*>(p));
                                idx() = p->idxOfScript(up);
                                pos() = 0;
                                return true;
@@ -1084,7 +1088,7 @@ void LCursor::handleFont(string const & font)
                } else {
                        // cursor in between. split cell
                        MathArray::iterator bt = cell().begin();
-                       MathAtom at = createMathInset(font);
+                       MathAtom at = createInsetMath(font);
                        at.nucleus()->cell(0) = MathArray(bt, bt + pos());
                        cell().erase(bt, bt + pos());
                        popLeft();
@@ -1099,22 +1103,22 @@ void LCursor::handleFont(string const & font)
 }
 
 
-void LCursor::message(string const & msg) const
+void LCursor::message(docstring const & msg) const
 {
        bv().owner()->getLyXFunc().setMessage(msg);
 }
 
 
-void LCursor::errorMessage(string const & msg) const
+void LCursor::errorMessage(docstring const & msg) const
 {
        bv().owner()->getLyXFunc().setErrorMessage(msg);
 }
 
 
-string LCursor::selectionAsString(bool label) const
+docstring LCursor::selectionAsString(bool label) const
 {
        if (!selection())
-               return string();
+               return docstring();
 
        if (inTexted()) {
                Buffer const & buffer = *bv().buffer();
@@ -1127,7 +1131,7 @@ string LCursor::selectionAsString(bool label) const
                size_t const endpos = selEnd().pos();
 
                if (startpit == endpit)
-                       return pars[startpit].asString(buffer, startpos, endpos, label);
+                       return lyx::from_utf8(pars[startpit].asString(buffer, startpos, endpos, label));
 
                // First paragraph in selection
                string result = pars[startpit].
@@ -1142,13 +1146,13 @@ string LCursor::selectionAsString(bool label) const
                // Last paragraph in selection
                result += pars[endpit].asString(buffer, 0, endpos, label);
 
-               return result;
+               return lyx::from_utf8(result);
        }
 
        if (inMathed())
-               return lyx::cap::grabSelection(*this);
+               return lyx::from_utf8(lyx::cap::grabSelection(*this));
 
-       return string();
+       return docstring();
 }