#include "BufferView.h"
#include "gettext.h"
#include "debug.h"
-#include "lyx_gui_misc.h"
+#include "frontends/Alert.h"
#include "support/LOstream.h"
#include "support/LAssert.h"
#include "support/lyxlib.h"
using std::pair;
using std::endl;
using std::vector;
+using std::getline;
namespace {
lyxerr << "calling: " << full << "\n";
Systemcalls dummy(Systemcalls::System, full, 0);
string out = GetFileContents(outfile);
+ lyx::unlink(outfile);
lyxerr << "result: '" << out << "'\n";
return out;
}
if (pos == string::npos || pos < 15)
break; // caret position not found
pos -= 15; // skip the "on line ..." part
- if (expr[pos] == '*')
+ if (expr[pos] == '*' || (pos > 0 && expr[pos - 1] == '*'))
break; // two '*' in a row are definitely bad
expr.insert(pos, "*");
}
}
- MathArray pipeThroughExtern(string const & arg, MathArray const & ar)
+ MathArray pipeThroughExtern(string const & lang, string const & extra,
+ MathArray const & ar)
{
- string lang;
- string extra;
- istringstream iss(arg.c_str());
- iss >> lang >> extra;
- if (extra.empty())
- extra = "noextra";
-
if (lang == "octave")
return pipeThroughOctave(extra, ar);
}
-int InsetFormula::latex(Buffer const * buf, ostream & os, bool fragil, bool)
- const
+int InsetFormula::latex(Buffer const *, ostream & os, bool fragil, bool) const
{
- WriteStream wi(buf, os, fragil);
+ WriteStream wi(os, fragil);
par_->write(wi);
- return 1;
+ return wi.line();
}
-int InsetFormula::ascii(Buffer const * buf, ostream & os, int) const
+int InsetFormula::ascii(Buffer const *, ostream & os, int) const
{
- WriteStream wi(buf, os, false);
+ WriteStream wi(os, false);
par_->write(wi);
- return 1;
+ return wi.line();
}
{
MathMLStream ms(os);
ms << MTag("equation") << MTag("alt");
- int res = ascii(buf, ms.os_, 0);
+ int res = ascii(buf, ms.os(), 0);
ms << ETag("alt") << MTag("math");
ms << par_.nucleus();
ms << ETag("math") << ETag("equation");
- return ms.line_ + res;
+ return ms.line() + res;
}
}
+//std::ostream & operator<<(std::ostream & os, LyXCursor const & c)
+//{
+// os << '[' << c.x() << ' ' << c.y() << ' ' << c.pos() << ']';
+// return os;
+//}
+
+
void InsetFormula::draw(BufferView * bv, LyXFont const & font,
int y, float & xx, bool) const
{
- int x = int(xx) - 1;
- y -= 2;
+ int x = int(xx);
Painter & pain = bv->painter();
int w = par_->width();
int h = par_->height();
int a = par_->ascent();
- pain.fillRectangle(x, y - a, w, h, LColor::mathbg);
- if (mathcursor && mathcursor->formula() == this) {
+ if (lcolor.getX11Name(LColor::mathbg)!=lcolor.getX11Name(LColor::background))
+ pain.fillRectangle(x, y - a, w, h, LColor::mathbg);
+
+ if (mathcursor &&
+ const_cast<InsetFormulaBase const *>(mathcursor->formula()) == this)
+ {
mathcursor->drawSelection(pain);
pain.rectangle(x, y - a, w, h, LColor::mathframe);
}
vector<string> const InsetFormula::getLabelList() const
{
- return mat()->getLabelList();
+ return hull()->getLabelList();
}
//lyxerr << "toggling all numbers\n";
if (display()) {
bv->lockedInsetStoreUndo(Undo::INSERT);
- bool old = mat()->numberedType();
+ bool old = hull()->numberedType();
for (MathInset::row_type row = 0; row < par_->nrows(); ++row)
- mat()->numbered(row, !old);
+ hull()->numbered(row, !old);
bv->owner()->message(old ? _("No number") : _("Number"));
updateLocal(bv, true);
}
//lyxerr << "toggling line number\n";
if (display()) {
bv->lockedInsetStoreUndo(Undo::INSERT);
- MathCursor::row_type row = mathcursor->row();
- bool old = mat()->numbered(row);
+ MathCursor::row_type row = mathcursor->hullRow();
+ bool old = hull()->numbered(row);
bv->owner()->message(old ? _("No number") : _("Number"));
- mat()->numbered(row, !old);
+ hull()->numbered(row, !old);
updateLocal(bv, true);
}
break;
{
bv->lockedInsetStoreUndo(Undo::INSERT);
- MathCursor::row_type row = mathcursor->row();
- string old_label = mat()->label(row);
+ MathCursor::row_type row = mathcursor->hullRow();
+ string old_label = hull()->label(row);
string new_label = arg;
if (new_label.empty()) {
string const default_label =
(lyxrc.label_init_length >= 0) ? "eq:" : "";
pair<bool, string> const res = old_label.empty()
- ? askForText(_("Enter new label to insert:"), default_label)
- : askForText(_("Enter label:"), old_label);
-
- lyxerr << "res: " << res.first << " - '" << res.second << "'\n";
+ ? Alert::askForText(_("Enter new label to insert:"), default_label)
+ : Alert::askForText(_("Enter label:"), old_label);
if (!res.first)
break;
new_label = frontStrip(strip(res.second));
if (!new_label.empty()) {
lyxerr << "setting label to '" << new_label << "'\n";
- mat()->numbered(row, true);
+ hull()->numbered(row, true);
}
if (!new_label.empty() && bv->ChangeRefsIfUnique(old_label, new_label))
bv->redraw();
- mat()->label(row, new_label);
+ hull()->label(row, new_label);
updateLocal(bv, true);
break;
int x;
int y;
mathcursor->getPos(x, y);
- mat()->mutate(arg);
+ hull()->mutate(arg);
mathcursor->setPos(x, y);
mathcursor->normalize();
updateLocal(bv, true);
case LFUN_MATH_DISPLAY:
{
- int x;
- int y;
+ int x = 0;
+ int y = 0;
mathcursor->getPos(x, y);
- if (mat()->getType() == LM_OT_SIMPLE)
- mat()->mutate(LM_OT_EQUATION);
+ if (hull()->getType() == LM_OT_SIMPLE)
+ hull()->mutate(LM_OT_EQUATION);
else
- mat()->mutate(LM_OT_SIMPLE);
+ hull()->mutate(LM_OT_SIMPLE);
mathcursor->setPos(x, y);
mathcursor->normalize();
updateLocal(bv, true);
break;
}
- case LFUN_MATH_COLUMN_INSERT:
- {
- if (mat()->getType() == LM_OT_ALIGN)
- mat()->mutate(LM_OT_ALIGNAT);
- mat()->addCol(mat()->ncols());
- mathcursor->normalize();
- updateLocal(bv, true);
- }
-
default:
result = InsetFormulaBase::localDispatch(bv, action, arg);
}
}
+bool needEqnArray(string const & extra)
+{
+ return extra == "dsolve";
+}
+
+
void InsetFormula::handleExtern(const string & arg)
{
// where are we?
if (!mathcursor)
return;
+ string lang;
+ string extra;
+ istringstream iss(arg.c_str());
+ iss >> lang >> extra;
+ if (extra.empty())
+ extra = "noextra";
+
bool selected = mathcursor->selection();
MathArray ar;
- if (selected) {
+ if (needEqnArray(extra)) {
+ mathcursor->last();
+ //mathcursor->readLine(ar);
+ mathcursor->breakLine();
+ } else if (selected) {
mathcursor->selGet(ar);
//lyxerr << "use selection: " << ar << "\n";
} else {
- mathcursor->end();
+ mathcursor->last();
mathcursor->stripFromLastEqualSign();
ar = mathcursor->cursor().cell();
mathcursor->insert(MathAtom(new MathCharInset('=', LM_TC_VAR)));
//lyxerr << "use whole cell: " << ar << "\n";
}
- mathcursor->insert(pipeThroughExtern(arg, ar));
+ mathcursor->insert(pipeThroughExtern(lang, extra, ar));
}
bool InsetFormula::display() const
{
- return mat()->getType() != LM_OT_SIMPLE;
+ return hull()->getType() != LM_OT_SIMPLE;
}
-MathHullInset const * InsetFormula::mat() const
+MathHullInset const * InsetFormula::hull() const
{
lyx::Assert(par_->asHullInset());
return par_->asHullInset();
}
-MathHullInset * InsetFormula::mat()
+MathHullInset * InsetFormula::hull()
{
lyx::Assert(par_->asHullInset());
return par_->asHullInset();
bool InsetFormula::insetAllowed(Inset::Code code) const
{
- return code == Inset::LABEL_CODE && display();
+ return
+ (code == Inset::LABEL_CODE && display())
+ || code == Inset::ERT_CODE;
}
int InsetFormula::ascent(BufferView *, LyXFont const &) const
{
- return par_->ascent() + 2;
+ return par_->ascent() + 1;
}
int InsetFormula::descent(BufferView *, LyXFont const &) const
{
- return par_->descent() - 2;
+ return par_->descent() + 1;
}
MathInsetTypes InsetFormula::getType() const
{
- return mat()->getType();
+ return hull()->getType();
}