#include "MetricsInfo.h"
#include "TextPainter.h"
+#include "support/lassert.h"
#include "frontends/Painter.h"
using namespace std;
dim.des = dim1.height() - 5;
} else {
if (kind_ == CFRAC || kind_ == CFRACLEFT
- || kind_ == CFRACRIGHT || kind_ == DFRAC) {
+ || kind_ == CFRACRIGHT || kind_ == DFRAC) {
// \cfrac and \dfrac are always in display size
StyleChanger dummy2(mi.base, LM_ST_DISPLAY);
cell(0).metrics(mi, dim0);
pi.pain.line(xx + dim0.wid,
y + dim.des - 2,
xx + dim0.wid + 5,
- y - dim.asc + 2, Color_math);
+ y - dim.asc + 2, pi.base.font.color());
}
if (kind_ == FRAC || kind_ == CFRAC || kind_ == CFRACLEFT
|| kind_ == CFRACRIGHT || kind_ == DFRAC
|| kind_ == TFRAC || kind_ == OVER)
pi.pain.line(x + 1, y - 5,
- x + dim.wid - 2, y - 5, Color_math);
+ x + dim.wid - 2, y - 5, pi.base.font.color());
drawMarkers(pi, x, y);
}
void InsetMathFrac::maple(MapleStream & os) const
{
+ if (nargs() != 2) {
+ // Someone who knows about maple should fix this.
+ LASSERT(false, return);
+ }
os << '(' << cell(0) << ")/(" << cell(1) << ')';
}
void InsetMathFrac::mathematica(MathematicaStream & os) const
{
+ if (nargs() != 2) {
+ // Someone who knows about mathematica should fix this.
+ LASSERT(false, return);
+ }
os << '(' << cell(0) << ")/(" << cell(1) << ')';
}
void InsetMathFrac::octave(OctaveStream & os) const
{
+ if (nargs() != 2) {
+ // Someone who knows about octave should fix this.
+ LASSERT(false, return);
+ }
os << '(' << cell(0) << ")/(" << cell(1) << ')';
}
void InsetMathFrac::mathmlize(MathStream & os) const
{
- os << MTag("mfrac")
- << MTag("mrow") << cell(0) << ETag("mrow")
- << MTag("mrow") << cell(1) << ETag("mrow")
- << ETag("mfrac");
+ switch (kind_) {
+ case ATOP:
+ os << MTag("mfrac", "linethickeness='0'")
+ << MTag("mrow") << cell(0) << ETag("mrow")
+ << MTag("mrow") << cell(1) << ETag("mrow")
+ << ETag("mfrac");
+ break;
+
+ // we do not presently distinguish these
+ case OVER:
+ case FRAC:
+ case DFRAC:
+ case TFRAC:
+ case CFRAC:
+ case CFRACLEFT:
+ case CFRACRIGHT:
+ os << MTag("mfrac")
+ << MTag("mrow") << cell(0) << ETag("mrow")
+ << MTag("mrow") << cell(1) << ETag("mrow")
+ << ETag("mfrac");
+ break;
+
+ case NICEFRAC:
+ os << MTag("mfrac", "bevelled='true'")
+ << MTag("mrow") << cell(0) << ETag("mrow")
+ << MTag("mrow") << cell(1) << ETag("mrow")
+ << ETag("mfrac");
+ break;
+
+ case UNITFRAC:
+ if (nargs() == 3)
+ os << cell(2);
+ os << MTag("mfrac", "bevelled='true'")
+ << MTag("mrow") << cell(0) << ETag("mrow")
+ << MTag("mrow") << cell(1) << ETag("mrow")
+ << ETag("mfrac");
+ break;
+
+ case UNIT:
+ // FIXME This is not right, because we still output mi, etc,
+ // when we output the cell. So we need to prevent that somehow.
+ if (nargs() == 2)
+ os << cell(0)
+ << MTag("mstyle mathvariant='normal'")
+ << cell(1)
+ << ETag("mstyle");
+ else
+ os << MTag("mstyle mathvariant='normal'")
+ << cell(0)
+ << ETag("mstyle");
+ }
}
void InsetMathFrac::htmlize(HtmlStream & os) const
{
- os << MTag("span", "class='frac'")
- << MTag("span", "class='numer'") << cell(0) << ETag("span")
- << MTag("span", "class='denom'") << cell(1) << ETag("span")
- << ETag("span");
+ switch (kind_) {
+ case ATOP:
+ os << MTag("span", "class='frac'")
+ << MTag("span", "class='numer'") << cell(0) << ETag("span")
+ << MTag("span", "class='numer'") << cell(1) << ETag("span")
+ << ETag("span");
+ break;
+
+ // we do not presently distinguish these
+ case OVER:
+ case FRAC:
+ case DFRAC:
+ case TFRAC:
+ case CFRAC:
+ case CFRACLEFT:
+ case CFRACRIGHT:
+ os << MTag("span", "class='frac'")
+ << MTag("span", "class='numer'") << cell(0) << ETag("span")
+ << MTag("span", "class='denom'") << cell(1) << ETag("span")
+ << ETag("span");
+ break;
+
+ case NICEFRAC:
+ os << cell(0) << '/' << cell(1);
+ break;
+
+ case UNITFRAC:
+ if (nargs() == 3)
+ os << cell(2) << ' ';
+ os << cell(0) << '/' << cell(1);
+ break;
+
+ case UNIT:
+ // FIXME This is not right, because we still output i, etc,
+ // when we output the cell. So we need to prevent that somehow.
+ if (nargs() == 2)
+ os << cell(0)
+ << MTag("span")
+ << cell(1)
+ << ETag("span");
+ else
+ os << MTag("span")
+ << cell(0)
+ << ETag("span");
+ }
}
if (kind_ == NICEFRAC || kind_ == UNITFRAC || kind_ == UNIT)
features.require("units");
if (kind_ == CFRAC || kind_ == CFRACLEFT || kind_ == CFRACRIGHT
- || kind_ == DFRAC || kind_ == TFRAC)
+ || kind_ == DFRAC || kind_ == TFRAC)
features.require("amsmath");
if (features.runparams().math_flavor == OutputParams::MathAsHTML)
// CSS adapted from eLyXer
- features.addPreambleSnippet("<style type=\"text/css\">\n"
+ features.addCSSSnippet(
"span.frac{display: inline-block; vertical-align: middle; text-align:center;}\n"
"span.numer{display: block;}\n"
- "span.denom{display: block; border-top: thin solid #000040;}\n"
- "</style>");
+ "span.denom{display: block; border-top: thin solid #000040;}");
InsetMathNest::validate(features);
}
}
+void InsetMathBinom::htmlize(HtmlStream & os) const
+{
+ char ldelim = ' ';
+ char rdelim = ' ';
+ switch (kind_) {
+ case BINOM:
+ case TBINOM:
+ case DBINOM:
+ case CHOOSE:
+ ldelim = '(';
+ rdelim = ')';
+ break;
+ case BRACE:
+ ldelim = '{';
+ rdelim = '}';
+ break;
+ case BRACK:
+ ldelim = '[';
+ rdelim = ']';
+ break;
+ }
+ os << MTag("span", "class='binomdelim'") << ldelim << ETag("span") << '\n'
+ << MTag("span", "class='binom'") << '\n'
+ << MTag("span") << cell(0) << ETag("span") << '\n'
+ << MTag("span") << cell(1) << ETag("span") << '\n'
+ << ETag("span") << '\n'
+ << MTag("span", "class='binomdelim'") << rdelim << ETag("span") << '\n';
+}
+
+
void InsetMathBinom::validate(LaTeXFeatures & features) const
{
- if (kind_ == BINOM)
- features.require("binom");
- if (kind_ == DBINOM || kind_ == TBINOM)
- features.require("amsmath");
+ if (features.runparams().isLaTeX()) {
+ if (kind_ == BINOM)
+ features.require("binom");
+ if (kind_ == DBINOM || kind_ == TBINOM)
+ features.require("amsmath");
+ } else if (features.runparams().math_flavor == OutputParams::MathAsHTML)
+ features.addCSSSnippet(
+ "span.binom{display: inline-block; vertical-align: bottom; text-align:center;}\n"
+ "span.binom span{display: block;}\n"
+ "span.binomdelim{font-size: 2em;}");
InsetMathNest::validate(features);
}