]> 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 45ba966efdbb36772317905909488a4db3993830..3a4b3a6169cc98399b615813259c3a3ed2b3d6d4 100644 (file)
 #include "insets/insettabular.h"
 #include "insets/insettext.h"
 
-#include "mathed/math_biginset.h"
-#include "mathed/math_data.h"
-#include "mathed/math_inset.h"
-#include "mathed/math_scriptinset.h"
-#include "mathed/math_macrotable.h"
-#include "mathed/math_parser.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"
 
@@ -55,6 +54,7 @@
 #include <limits>
 
 using lyx::char_type;
+using lyx::docstring;
 using lyx::pit_type;
 
 using std::string;
@@ -64,7 +64,6 @@ using std::endl;
 using std::isalpha;
 #endif
 using std::min;
-using std::swap;
 
 namespace {
 
@@ -96,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;
@@ -494,7 +493,6 @@ void LCursor::clearSelection()
        selection() = false;
        mark() = false;
        resetAnchor();
-       bv().unsetXSel();
 }
 
 
@@ -567,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
 
@@ -652,22 +650,6 @@ void LCursor::markErase()
 
 void LCursor::plainInsert(MathAtom const & t)
 {
-       // Create a MathBigInset from cell()[pos() - 1] and t if possible
-       if (!empty() && pos() > 0 && cell()[pos() - 1]->asUnknownInset()) {
-               string const name = asString(t);
-               if (MathBigInset::isBigInsetDelim(name)) {
-                       string prev = asString(cell()[pos() - 1]);
-                       if (prev[0] == '\\') {
-                               prev = prev.substr(1);
-                               latexkeys const * l = in_word_set(prev);
-                               if (l && l->inset == "big") {
-                                       cell()[pos() - 1] =
-                                               MathAtom(new MathBigInset(prev, name));
-                                       return;
-                               }
-                       }
-               }
-       }
        cell().insert(pos(), t);
        ++pos();
 }
@@ -687,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);
        }
@@ -769,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;
@@ -859,7 +841,7 @@ bool LCursor::macroModeClose()
 {
        if (!inMacroMode())
                return false;
-       MathUnknownInset * p = activeMacro();
+       InsetMathUnknown * p = activeMacro();
        p->finalize();
        string const s = p->name();
        --pos();
@@ -877,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;
 }
 
@@ -926,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;
 }
@@ -981,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();
        }
@@ -999,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
@@ -1009,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;
@@ -1021,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;
@@ -1102,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();
@@ -1117,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();
@@ -1145,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].
@@ -1160,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();
 }