X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fcursor.C;h=a94fdc2800800580fe1c0e8f2b78d8585828f28b;hb=12a6d463703010a006b2dcd15ccddafa6335fa59;hp=6556fa25d4c97aa616b2f9d1e4cf1ef8284acd08;hpb=3b9338a3a8ba33fbbdf2c77cbffb3ff50d8fad86;p=lyx.git diff --git a/src/cursor.C b/src/cursor.C index 6556fa25d4..a94fdc2800 100644 --- a/src/cursor.C +++ b/src/cursor.C @@ -35,14 +35,15 @@ #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 @@ -52,6 +53,8 @@ #include #include +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 + boost::bind(static_cast (&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(p)); + push(*const_cast(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(p)); + push(*const_cast(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(); }