Matrix output via HTML. I have to say, this one took some work.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@33978 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2010-03-31 19:59:09 +00:00
parent db1d81f03a
commit edff97cb30
2 changed files with 58 additions and 19 deletions

View File

@ -634,6 +634,7 @@ bool InsetMathHull::numberedType() const
void InsetMathHull::validate(LaTeXFeatures & features) const
{
if (features.runparams().isLaTeX()) {
if (ams())
features.require("amsmath");
@ -653,7 +654,17 @@ void InsetMathHull::validate(LaTeXFeatures & features) const
// return;
//features.binom = true;
} else if (features.runparams().math_flavor == OutputParams::MathAsHTML) {
// it would be better to do this elsewhere, but we can't validate in
// InsetMathMatrix and we have no way, outside MathExtern, to know if
// we even have any matrices.
features.addPreambleSnippet("<style type=\"text/css\">\n"
"table.matrix{display: inline-block; vertical-align: middle; text-align:center;}\n"
"table.matrix td{padding: 0.25px;}\n"
"td.ldelim{width: 0.5ex; border: thin solid black; border-right: none;}\n"
"td.rdelim{width: 0.5ex; border: thin solid black; border-left: none;}\n"
"</style>");
}
InsetMathGrid::validate(features);
}

View File

@ -14,6 +14,9 @@
#include "MathData.h"
#include "MathStream.h"
#include "support/convert.h"
using namespace std;
namespace lyx {
@ -106,6 +109,31 @@ void InsetMathMatrix::mathmlize(MathStream & os) const
}
void InsetMathMatrix::htmlize(HtmlStream & os) const
{
os << MTag("table", "class='matrix'") << '\n';
// we do not print the delimiters but instead try to hack them
string const rows = convert<string>(nrows());
string const lattrib =
"class='ldelim' rowspan='" + rows + "'";
string const rattrib =
"class='rdelim' rowspan='" + rows + "'";
for (row_type row = 0; row < nrows(); ++row) {
os << MTag("tr") << '\n';
if (row == 0)
os << MTag("td", lattrib) << ETag("td") << '\n';
for (col_type col = 0; col < ncols(); ++col)
os << MTag("td") << cell(index(row, col)) << ETag("td") << '\n';
if (row == 0)
os << MTag("td", rattrib) << ETag("td") << '\n';
os << ETag("tr") << '\n';
}
os << ETag("table") << '\n';
}
void InsetMathMatrix::octave(OctaveStream & os) const
{
os << '[';