#include <config.h>
-#ifdef __GNUG__
-#pragma implementation
-#endif
#include "math_hullinset.h"
#include "math_mathmlstream.h"
#include "math_streamstr.h"
+#include "math_cursor.h"
#include "math_support.h"
#include "math_extern.h"
#include "math_charinset.h"
return 3;
if (type == "align")
return 2;
+ if (type == "flalign")
+ return 2;
if (type == "alignat")
return 2;
if (type == "xalignat")
if (s == "xxalignat") return 7;
if (s == "multline") return 8;
if (s == "gather") return 9;
+ if (s == "flalign") return 10;
lyxerr << "unknown hull type '" << s << "'\n";
return 0;
}
return 0;
if (type_ == "xalignat")
return (col & 1) ? 20 : 0;
- if (type_ == "xxalignat")
+ if (type_ == "xxalignat" || type_ == "flalign")
return (col & 1) ? 40 : 0;
return 0;
}
int asc = 0;
int des = 0;
math_font_max_dim(mi.base.font, asc, des);
- dim_.a = max(dim_.a, asc);
+ dim_.a = max(dim_.a, asc);
dim_.d = max(dim_.d, des);
// for markers
{
return
type_ == "align" ||
+ type_ == "flalign" ||
type_ == "multline" ||
type_ == "gather" ||
type_ == "alignat" ||
os << "\\[\n";
}
- else if (type_ == "eqnarray" || type_ == "align")
+ else if (type_ == "eqnarray" || type_ == "align" || type_ == "flalign"
+ || type_ == "gather" || type_ == "multline")
os << "\\begin{" << type_ << star(n) << "}\n";
else if (type_ == "alignat" || type_ == "xalignat")
- os << "\\begin{" << type_ << star(n) << "}"
- << "{" << static_cast<unsigned int>((ncols() + 1)/2) << "}\n";
+ os << "\\begin{" << type_ << star(n) << '}'
+ << '{' << static_cast<unsigned int>((ncols() + 1)/2) << "}\n";
else if (type_ == "xxalignat")
- os << "\\begin{" << type_ << "}"
- << "{" << static_cast<unsigned int>((ncols() + 1)/2) << "}\n";
-
- else if (type_ == "multline" || type_ == "gather")
- os << "\\begin{" << type_ << "}\n";
+ os << "\\begin{" << type_ << '}'
+ << '{' << static_cast<unsigned int>((ncols() + 1)/2) << "}\n";
else
- os << "\\begin{unknown" << star(n) << "}";
+ os << "\\begin{unknown" << star(n) << '}';
}
else
os << "\\]\n";
- else if (type_ == "eqnarray" || type_ == "align" || type_ == "alignat"
- || type_ == "xalignat")
- os << "\n\\end{" << type_ << star(n) << "}\n";
+ else if (type_ == "eqnarray" || type_ == "align" || type_ == "flalign"
+ || type_ == "alignat" || type_ == "xalignat"
+ || type_ == "gather" || type_ == "multline")
+ os << "\\end{" << type_ << star(n) << "}\n";
- else if (type_ == "xxalignat" || type_ == "multline" || type_ == "gather")
- os << "\n\\end{" << type_ << "}\n";
+ else if (type_ == "xxalignat")
+ os << "\\end{" << type_ << "}\n";
else
- os << "\\end{unknown" << star(n) << "}";
+ os << "\\end{unknown" << star(n) << '}';
+}
+
+
+bool MathHullInset::colChangeOK() const
+{
+ return
+ type_ == "align" || type_ == "flalign" ||type_ == "alignat" ||
+ type_ == "xalignat" || type_ == "xxalignat";
}
void MathHullInset::delRow(row_type row)
{
+ if (nrows() <= 1)
+ return;
MathGridInset::delRow(row);
nonum_.erase(nonum_.begin() + row);
label_.erase(label_.begin() + row);
}
-void MathHullInset::addFancyCol(col_type col)
+void MathHullInset::addCol(col_type col)
{
- if (type_ == "equation")
- mutate("eqnarray");
-
- else if (type_ == "eqnarray") {
- mutate("align");
- addFancyCol(col);
- }
-
- else if (type_ == "align" || type_ == "alignat"
- || type_ == "xalignat" || type_ == "xxalignat")
+ if (colChangeOK())
MathGridInset::addCol(col);
+ else
+ lyxerr << "Can't change number of columns in '" << type_ << "'\n";
}
-void MathHullInset::delFancyCol(col_type col)
+void MathHullInset::delCol(col_type col)
{
- if (type_ == "alignat" || type_ == "xalignat" || type_ == "xxalignat")
+ if (colChangeOK())
MathGridInset::delCol(col);
+ else
+ lyxerr << "Can't change number of columns in '" << type_ << "'\n";
}
return string();
if (label_[row].empty())
return string("(#)");
- return "(" + label_[row] + ")";
+ return '(' + label_[row] + ')';
}
}
else if (type_ == "multline") {
- if (newtype == "gather") {
- setType("gather");
+ if (newtype == "gather" || newtype == "align" ||
+ newtype == "xalignat" || newtype == "xxalignat" || newtype == "flalign")
+ setType(newtype);
+ else if (newtype == "eqnarray") {
+ MathGridInset::addCol(1);
+ MathGridInset::addCol(1);
+ setType("eqnarray");
} else {
lyxerr << "mutation from '" << type_
- << "' to '" << newtype << "' not implemented"
- << endl;
+ << "' to '" << newtype << "' not implemented" << endl;
}
}
{
string res;
if (numberedType()) {
- if (!label_[row].empty())
- res += "\\label{" + label_[row] + "}";
- if (nonum_[row])
+ if (!label_[row].empty() && !nonum_[row])
+ res += "\\label{" + label_[row] + '}';
+ if (nonum_[row] && (type_ != "multline"))
res += "\\nonumber ";
}
return res + MathGridInset::eolString(row, fragile);
void MathHullInset::normalize(NormalStream & os) const
{
- os << "[formula " << type_ << " ";
+ os << "[formula " << type_ << ' ';
MathGridInset::normalize(os);
os << "] ";
}
if (getType() == "simple") {
size_type pos = cell(idx).find_last(eq);
MathArray ar;
- if (pos == cell(idx).size()) {
+ if (mathcursor && mathcursor->selection()) {
+ ar = asArray(mathcursor->grabAndEraseSelection());
+ } else if (pos == cell(idx).size()) {
ar = cell(idx);
lyxerr << "use whole cell: " << ar << "\n";
} else {
if (display()) {
//bv->lockedInsetStoreUndo(Undo::INSERT);
bool old = numberedType();
- for (row_type row = 0; row < nrows(); ++row)
- numbered(row, !old);
+ if (type_ == "multline")
+ numbered(nrows() - 1, !old);
+ else
+ for (row_type row = 0; row < nrows(); ++row)
+ numbered(row, !old);
//bv->owner()->message(old ? _("No number") : _("Number"));
//updateLocal(bv, true);
}
case LFUN_MATH_NONUMBER:
if (display()) {
+ row_type r = (type_ == "multline") ? nrows() - 1 : row(idx);
//bv->lockedInsetStoreUndo(Undo::INSERT);
- bool old = numbered(row(idx));
+ bool old = numbered(r);
//bv->owner()->message(old ? _("No number") : _("Number"));
- numbered(row(idx), !old);
+ numbered(r, !old);
//updateLocal(bv, true);
}
return DISPATCHED;
case LFUN_INSERT_LABEL: {
- row_type r = row(idx);
+ row_type r = (type_ == "multline") ? nrows() - 1 : row(idx);
string old_label = label(r);
string new_label = cmd.argument;
return DISPATCHED;
}
- case LFUN_MATH_HALIGN:
- case LFUN_MATH_VALIGN:
- // we explicitly don't want the default behaviour here
- return UNDISPATCHED;
-
case LFUN_MATH_EXTERN:
doExtern(cmd, idx, pos);
return DISPATCHED_POP;
idx = r * ncols() + c;
if (idx >= nargs())
idx = nargs() - 1;
- if (pos > cell(idx).size())
+ if (pos > cell(idx).size())
pos = cell(idx).size();
return DISPATCHED_POP;
}