]> git.lyx.org Git - lyx.git/commitdiff
Matrix output via HTML. I have to say, this one took some work.
authorRichard Heck <rgheck@comcast.net>
Wed, 31 Mar 2010 19:59:09 +0000 (19:59 +0000)
committerRichard Heck <rgheck@comcast.net>
Wed, 31 Mar 2010 19:59:09 +0000 (19:59 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@33978 a592a061-630c-0410-9148-cb99ea01b6c8

src/mathed/InsetMathHull.cpp
src/mathed/InsetMathMatrix.cpp

index f977dacb9729627583527838d63db8573ce80a6b..5450bba7f8874fb43eebbdc7d0102a20c6a26f9f 100644 (file)
@@ -634,26 +634,37 @@ bool InsetMathHull::numberedType() const
 
 void InsetMathHull::validate(LaTeXFeatures & features) const
 {
-       if (ams())
-               features.require("amsmath");
-
-       if (type_ == hullRegexp) {
-               features.require("color");
-               string frcol = lcolor.getLaTeXName(Color_regexpframe);
-               string bgcol = "white";
-               features.addPreambleSnippet(
-                       string("\\newcommand{\\regexp}[1]{\\fcolorbox{")
-                       + frcol + string("}{")
-                       + bgcol + string("}{\\texttt{#1}}}"));
+       if (features.runparams().isLaTeX()) {
+               if (ams())
+                       features.require("amsmath");
+       
+               if (type_ == hullRegexp) {
+                       features.require("color");
+                       string frcol = lcolor.getLaTeXName(Color_regexpframe);
+                       string bgcol = "white";
+                       features.addPreambleSnippet(
+                               string("\\newcommand{\\regexp}[1]{\\fcolorbox{")
+                               + frcol + string("}{")
+                               + bgcol + string("}{\\texttt{#1}}}"));
+               }
+       
+               // Validation is necessary only if not using AMS math.
+               // To be safe, we will always run mathedvalidate.
+               //if (features.amsstyle)
+               //  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>");
        }
-
-       // Validation is necessary only if not using AMS math.
-       // To be safe, we will always run mathedvalidate.
-       //if (features.amsstyle)
-       //  return;
-
-       //features.binom      = true;
-
        InsetMathGrid::validate(features);
 }
 
index d368f217b7b1493485c0ebbc652f5bd487824ae4..4d309d13e88dba668401e28dd6b23e4562f17149 100644 (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 << '[';