using support::bformat;
-InsetMathSubstack::InsetMathSubstack()
- : InsetMathGrid(1, 1)
+InsetMathSubstack::InsetMathSubstack(Buffer * buf)
+ : InsetMathGrid(buf, 1, 1)
{}
bool InsetMathSubstack::getStatus(Cursor & cur, FuncRequest const & cmd,
FuncStatus & flag) const
{
- switch (cmd.action) {
- case LFUN_TABULAR_FEATURE: {
+ switch (cmd.action()) {
+ case LFUN_INSET_MODIFY: {
+ istringstream is(to_utf8(cmd.argument()));
+ string s;
+ is >> s;
+ if (s != "tabular")
+ break;
+ is >> s;
string const name = "substack";
- docstring const & s = cmd.argument();
if (s == "add-vline-left" || s == "add-vline-right") {
flag.message(bformat(
from_utf8(N_("Can't add vertical grid lines in '%1$s'")),
flag.setEnabled(false);
return true;
}
- return InsetMathGrid::getStatus(cur, cmd, flag);
+ // in contrary to \subaray, the columns in \substack
+ // are always centered and this cannot be changed
+ if (s == "align-left" || s == "align-right") {
+ flag.message(bformat(
+ from_utf8(N_("Can't change horizontal alignment in '%1$s'")),
+ from_utf8(name)));
+ flag.setEnabled(false);
+ return true;
+ }
+ break;
}
+
default:
- return InsetMathGrid::getStatus(cur, cmd, flag);
+ break;
}
+ return InsetMathGrid::getStatus(cur, cmd, flag);
}
}
+void InsetMathSubstack::mathmlize(MathStream & os) const
+{
+ int movers = 0;
+ row_type const numrows = nrows();
+ for (row_type row = 0; row < nrows(); ++row) {
+ if (row < numrows - 1) {
+ movers ++;
+ os << MTag("munder");
+ }
+ os << MTag("mrow") << cell(index(row, 0)) << ETag("mrow");
+ }
+ for (int i = 1; i <= movers; ++i)
+ os << ETag("munder");
+}
+
+
+void InsetMathSubstack::htmlize(HtmlStream & os) const
+{
+ os << MTag("span", "class='substack'");
+ for (row_type row = 0; row < nrows(); ++row)
+ os << MTag("span") << cell(index(row, 0)) << ETag("span");
+ os << ETag("span");
+}
+
+
void InsetMathSubstack::validate(LaTeXFeatures & features) const
{
- features.require("amsmath");
+ if (features.runparams().isLaTeX())
+ features.require("amsmath");
+ else if (features.runparams().math_flavor == OutputParams::MathAsHTML)
+ features.addCSSSnippet(
+ "span.substack{display: inline-block; vertical-align: middle; text-align:center; font-size: 75%;}\n"
+ "span.substack span{display: block;}");
+
InsetMathGrid::validate(features);
}