]> git.lyx.org Git - lyx.git/blobdiff - src/cursor.C
Small fixes for STLPort compliance
[lyx.git] / src / cursor.C
index 6556fa25d4c97aa616b2f9d1e4cf1ef8284acd08..a94fdc2800800580fe1c0e8f2b78d8585828f28b 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"
 
-#include "frontends/LyXView.h"
+#include "frontends/Application.h"
 #include "frontends/font_metrics.h"
 
 #include <boost/assert.hpp>
@@ -52,6 +53,8 @@
 #include <sstream>
 #include <limits>
 
+using lyx::char_type;
+using lyx::docstring;
 using lyx::pit_type;
 
 using std::string;
@@ -61,7 +64,7 @@ using std::endl;
 using std::isalpha;
 #endif
 using std::min;
-using std::swap;
+using std::for_each;
 
 namespace {
 
@@ -93,7 +96,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;
@@ -491,7 +494,6 @@ void LCursor::clearSelection()
        selection() = false;
        mark() = false;
        resetAnchor();
-       bv().unsetXSel();
 }
 
 
@@ -564,18 +566,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
 
@@ -637,7 +639,7 @@ void LCursor::plainErase()
 
 void LCursor::markInsert()
 {
-       insert(char(0));
+       insert(char_type(0));
 }
 
 
@@ -657,18 +659,18 @@ void LCursor::plainInsert(MathAtom const & t)
 void LCursor::insert(string const & str)
 {
        for_each(str.begin(), str.end(),
-                boost::bind(static_cast<void(LCursor::*)(char)>
+                boost::bind(static_cast<void(LCursor::*)(char_type)>
                             (&LCursor::insert), this, _1));
 }
 
 
-void LCursor::insert(char c)
+void LCursor::insert(char_type c)
 {
        //lyxerr << "LCursor::insert char '" << c << "'" << endl;
        BOOST_ASSERT(!empty());
        if (inMathed()) {
                lyx::cap::selClearOrDel(*this);
-               insert(new MathCharInset(c));
+               insert(new InsetMathChar(c));
        } else {
                text()->insertChar(*this, c);
        }
@@ -750,7 +752,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;
@@ -840,7 +842,7 @@ bool LCursor::macroModeClose()
 {
        if (!inMacroMode())
                return false;
-       MathUnknownInset * p = activeMacro();
+       InsetMathUnknown * p = activeMacro();
        p->finalize();
        string const s = p->name();
        --pos();
@@ -858,7 +860,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;
 }
 
@@ -907,12 +912,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;
 }
@@ -962,7 +967,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();
        }
@@ -980,7 +985,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
@@ -990,10 +996,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;
@@ -1002,9 +1008,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;
@@ -1083,7 +1089,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();
@@ -1098,22 +1104,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);
+       theApp->lyxFunc().setMessage(msg);
 }
 
 
-void LCursor::errorMessage(string const & msg) const
+void LCursor::errorMessage(docstring const & msg) const
 {
-       bv().owner()->getLyXFunc().setErrorMessage(msg);
+       theApp->lyxFunc().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();
@@ -1126,7 +1132,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].
@@ -1141,13 +1147,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();
 }