mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-13 06:20:28 +00:00
fix crash due to invalid cursor position after deleting more than one cell
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2925 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
229ddc5929
commit
616955adb2
@ -315,7 +315,7 @@ InsetFormula::localDispatch(BufferView * bv, kb_action action,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
void InsetFormula::handleExtern(const string & arg)
|
void InsetFormula::handleExtern(const string & arg)
|
||||||
{
|
{
|
||||||
// where are we?
|
// where are we?
|
||||||
@ -357,7 +357,54 @@ void InsetFormula::handleExtern(const string & arg)
|
|||||||
mathed_parse_cell(ar, is);
|
mathed_parse_cell(ar, is);
|
||||||
mathcursor->end();
|
mathcursor->end();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void InsetFormula::handleExtern(const string & arg)
|
||||||
|
{
|
||||||
|
// where are we?
|
||||||
|
if (!mathcursor)
|
||||||
|
return;
|
||||||
|
|
||||||
|
MathArray ar;
|
||||||
|
if (mathcursor->selection())
|
||||||
|
mathcursor->selGet(ar);
|
||||||
|
else
|
||||||
|
ar = mathcursor->cursor().cell();
|
||||||
|
|
||||||
|
// parse args
|
||||||
|
string lang;
|
||||||
|
string extra;
|
||||||
|
istringstream iss(arg.c_str());
|
||||||
|
iss >> lang >> extra;
|
||||||
|
if (extra.empty())
|
||||||
|
extra = "noextra";
|
||||||
|
|
||||||
|
// strip last '=' and everything behind
|
||||||
|
stripFromLastEqualSign(ar);
|
||||||
|
|
||||||
|
// create normalized expression
|
||||||
|
//string outfile = lyx::tempName("maple.out");
|
||||||
|
string outfile = "/tmp/lyx2" + lang + ".out";
|
||||||
|
ostringstream os;
|
||||||
|
os << "[" << extra << ' ';
|
||||||
|
ar.writeNormal(os);
|
||||||
|
os << "]";
|
||||||
|
string code = os.str().c_str();
|
||||||
|
|
||||||
|
// run external sript
|
||||||
|
string script = "lyx2" + arg + " '" + code + "' " + outfile;
|
||||||
|
lyxerr << "calling: " << script << endl;
|
||||||
|
Systemcalls cmd(Systemcalls::System, script, 0);
|
||||||
|
|
||||||
|
// append a '='
|
||||||
|
//ar.push_back(MathAtom(new MathCharInset('=')));
|
||||||
|
|
||||||
|
// append result
|
||||||
|
MathArray br;
|
||||||
|
ifstream is(outfile.c_str());
|
||||||
|
mathed_parse_cell(br, is);
|
||||||
|
mathcursor->insert(br);
|
||||||
|
}
|
||||||
|
|
||||||
bool InsetFormula::display() const
|
bool InsetFormula::display() const
|
||||||
{
|
{
|
||||||
|
@ -557,6 +557,9 @@ void MathCursor::delLine()
|
|||||||
|
|
||||||
if (par()->nrows() > 1)
|
if (par()->nrows() > 1)
|
||||||
par()->delRow(row());
|
par()->delRow(row());
|
||||||
|
|
||||||
|
if (pos() > size())
|
||||||
|
pos() = size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -699,6 +702,7 @@ void MathCursor::selDel()
|
|||||||
seldump("selDel");
|
seldump("selDel");
|
||||||
if (selection_) {
|
if (selection_) {
|
||||||
theSelection.erase(*this);
|
theSelection.erase(*this);
|
||||||
|
pos() = 0;
|
||||||
selClear();
|
selClear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -743,6 +747,18 @@ void MathCursor::selClear()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MathCursor::selGet(MathArray & ar)
|
||||||
|
{
|
||||||
|
seldump("selGet");
|
||||||
|
if (selection_)
|
||||||
|
return;
|
||||||
|
|
||||||
|
theSelection.grab(*this);
|
||||||
|
ar = theSelection.glue();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void MathCursor::drawSelection(Painter & pain) const
|
void MathCursor::drawSelection(Painter & pain) const
|
||||||
{
|
{
|
||||||
if (!selection_)
|
if (!selection_)
|
||||||
|
@ -165,6 +165,8 @@ public:
|
|||||||
///
|
///
|
||||||
void selClear();
|
void selClear();
|
||||||
///
|
///
|
||||||
|
void selGet(MathArray & ar);
|
||||||
|
///
|
||||||
void drawSelection(Painter & pain) const;
|
void drawSelection(Painter & pain) const;
|
||||||
///
|
///
|
||||||
void handleFont(MathTextCodes t);
|
void handleFont(MathTextCodes t);
|
||||||
|
Loading…
Reference in New Issue
Block a user