#include "MathStream.h"
#include "MetricsInfo.h"
+#include "Buffer.h"
#include "BufferView.h"
#include "CutAndPaste.h"
#include "FuncStatus.h"
}
+void InsetMathGrid::updateBuffer(ParIterator const & it, UpdateType utype)
+{
+ // pass down
+ for (idx_type idx = 0; idx < nargs(); ++idx)
+ cell(idx).updateBuffer(it, utype);
+}
+
+
docstring InsetMathGrid::eolString(row_type row, bool fragile) const
{
docstring eol;
void InsetMathGrid::mathmlize(MathStream & os) const
{
- bool const havetable = nrows() > 1;
+ bool const havetable = nrows() > 1 || ncols() > 1;
if (havetable)
os << MTag("mtable");
+ char const * const celltag = havetable ? "mtd" : "mrow";
for (row_type row = 0; row < nrows(); ++row) {
- os << MTag("mrow");
- for (col_type col = 0; col < ncols(); ++col)
+ if (havetable)
+ os << MTag("mtr");;
+ for (col_type col = 0; col < ncols(); ++col) {
+ os << MTag(celltag);
os << cell(index(row, col));
- os << ETag("mrow");
+ os << ETag(celltag);
+ }
+ if (havetable)
+ os << ETag("mtr");;
}
if (havetable)
os << ETag("mtable");
}
+// FIXME XHTML
+// We need to do something about alignment here.
+void InsetMathGrid::htmlize(HtmlStream & os, string attrib) const
+{
+ bool const havetable = nrows() > 1 || ncols() > 1;
+ if (!havetable) {
+ os << cell(index(0, 0));
+ return;
+ }
+ os << MTag("table", attrib);
+ for (row_type row = 0; row < nrows(); ++row) {
+ os << MTag("tr");;
+ for (col_type col = 0; col < ncols(); ++col) {
+ os << MTag("td");
+ os << cell(index(row, col));
+ os << ETag("td");
+ }
+ os << ETag("tr");;
+ }
+ os << ETag("table");
+}
+
+
+void InsetMathGrid::htmlize(HtmlStream & os) const
+{
+ htmlize(os, "class='mathtable'");
+}
+
+
void InsetMathGrid::write(WriteStream & os) const
{
write(os, 0, 0, nrows(), ncols());
Parse::flags parseflg = Parse::QUIET | Parse::USETEXT;
- switch (cmd.action) {
+ FuncCode const act = cmd.action();
+ switch (act) {
// insert file functions
case LFUN_LINE_DELETE:
break;
}
- case LFUN_TABULAR_FEATURE: {
+ case LFUN_INSET_MODIFY: {
cur.recordUndoInset();
//lyxerr << "handling tabular-feature " << to_utf8(cmd.argument()) << endl;
istringstream is(to_utf8(cmd.argument()));
string s;
is >> s;
+ if (s != "tabular") {
+ InsetMathNest::doDispatch(cur, cmd);
+ return;
+ }
+ is >> s;
if (s == "valign-top")
setVerticalAlignment('t');
else if (s == "valign-middle")
cell(i).append(grid.cell(grid.index(r, c)));
}
cur.clearSelection(); // bug 393
+ // FIXME audit setBuffer/updateBuffer calls
+ cur.inset().setBuffer(*buffer_);
+ // FIXME audit setBuffer/updateBuffer calls
+ cur.buffer()->updateBuffer();
cur.finishUndo();
break;
}
case LFUN_WORD_BACKWARD:
case LFUN_WORD_LEFT_SELECT:
case LFUN_WORD_LEFT:
- cur.selHandle(cmd.action == LFUN_WORD_BACKWARD_SELECT ||
- cmd.action == LFUN_WORD_LEFT_SELECT ||
- cmd.action == LFUN_LINE_BEGIN_SELECT);
+ cur.selHandle(act == LFUN_WORD_BACKWARD_SELECT ||
+ act == LFUN_WORD_LEFT_SELECT ||
+ act == LFUN_LINE_BEGIN_SELECT);
cur.macroModeClose();
if (cur.pos() != 0) {
cur.pos() = 0;
case LFUN_WORD_RIGHT:
case LFUN_LINE_END_SELECT:
case LFUN_LINE_END:
- cur.selHandle(cmd.action == LFUN_WORD_FORWARD_SELECT ||
- cmd.action == LFUN_WORD_RIGHT_SELECT ||
- cmd.action == LFUN_LINE_END_SELECT);
+ cur.selHandle(act == LFUN_WORD_FORWARD_SELECT ||
+ act == LFUN_WORD_RIGHT_SELECT ||
+ act == LFUN_LINE_END_SELECT);
cur.macroModeClose();
cur.clearTargetX();
if (cur.pos() != cur.lastpos()) {
bool InsetMathGrid::getStatus(Cursor & cur, FuncRequest const & cmd,
FuncStatus & status) const
{
- switch (cmd.action) {
- case LFUN_TABULAR_FEATURE: {
- string const s = cmd.getArg(0);
+ switch (cmd.action()) {
+ case LFUN_INSET_MODIFY: {
+ istringstream is(to_utf8(cmd.argument()));
+ string s;
+ is >> s;
+ if (s != "tabular") {
+ // We only now about table actions here.
+ break;
+ }
+ if (&cur.inset() != this) {
+ // Table actions requires that the cursor is _inside_ the
+ // table.
+ status.setEnabled(false);
+ status.message(from_utf8(N_("Cursor not in table")));
+ return true;
+ }
+ is >> s;
if (nrows() <= 1 && (s == "delete-row" || s == "swap-row")) {
status.setEnabled(false);
status.message(from_utf8(N_("Only one row")));
return true;
default:
- return InsetMathNest::getStatus(cur, cmd, status);
+ break;
}
+ return InsetMathNest::getStatus(cur, cmd, status);
}