X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathXArrow.cpp;h=30cce8a8eb14bc4b95f58b085822acd2e6f98b71;hb=f1dd80f464b46f6112f6c9a64a70dd3da76cbe7f;hp=06ef4a52403c691a8cc7766ed03382ef273f64f3;hpb=e9ce68dddc0d0055b7ea469b0a31b1ed3aba1324;p=lyx.git diff --git a/src/mathed/InsetMathXArrow.cpp b/src/mathed/InsetMathXArrow.cpp index 06ef4a5240..30cce8a8eb 100644 --- a/src/mathed/InsetMathXArrow.cpp +++ b/src/mathed/InsetMathXArrow.cpp @@ -10,13 +10,20 @@ #include +#include "support/lassert.h" + #include "InsetMathXArrow.h" + #include "MathData.h" #include "MathStream.h" #include "MathStream.h" #include "MathSupport.h" #include "LaTeXFeatures.h" +#include "MetricsInfo.h" + + +#include using namespace std; @@ -36,7 +43,8 @@ Inset * InsetMathXArrow::clone() const void InsetMathXArrow::metrics(MetricsInfo & mi, Dimension & dim) const { - ScriptChanger dummy(mi.base); + Changer dummy2 = mi.base.changeEnsureMath(); + Changer dummy = mi.base.changeScript(); Dimension dim0; cell(0).metrics(mi, dim0); Dimension dim1; @@ -44,22 +52,20 @@ void InsetMathXArrow::metrics(MetricsInfo & mi, Dimension & dim) const dim.wid = max(dim0.width(), dim1.width()) + 10; dim.asc = dim0.height() + 10; dim.des = dim1.height(); - metricsMarkers(dim); } void InsetMathXArrow::draw(PainterInfo & pi, int x, int y) const { - ScriptChanger dummy(pi.base); - Dimension const dim00 = dimension(*pi.base.bv); - Dimension const & dim01 = cell(0).dimension(*pi.base.bv); + Changer dummy2 = pi.base.changeEnsureMath(); + Changer dummy = pi.base.changeScript(); + Dimension const dim = dimension(*pi.base.bv); + Dimension const & dim0 = cell(0).dimension(*pi.base.bv); // center the cells with the decoration - cell(0).draw(pi, x + dim00.width()/2 - dim01.width()/2, y - 10); + cell(0).draw(pi, x + dim.width()/2 - dim0.width()/2, y - 10); Dimension const & dim1 = cell(1).dimension(*pi.base.bv); - cell(1).draw(pi, x + dim00.width()/2 - dim1.width()/2, y + dim1.height()); - Dimension const dim = dimension(*pi.base.bv); - mathed_draw_deco(pi, x + 1, y - 7, dim.wid - 2, 5, name_); - drawMarkers(pi, x, y); + cell(1).draw(pi, x + dim.width()/2 - dim1.width()/2, y + dim1.height()); + mathed_draw_deco(pi, x, y - 7, dim.wid, 5, name_); } @@ -81,8 +87,42 @@ void InsetMathXArrow::normalize(NormalStream & os) const void InsetMathXArrow::mathmlize(MathStream & ms) const { - char const * const arrow = name_ == "xleftarrow" - ? "←" : "→"; + char const * arrow; + + if (name_ == "xleftarrow") + arrow = "←"; + else if (name_ == "xrightarrow") + arrow = "→"; + else if (name_ == "xhookleftarrow") + arrow = "↩"; + else if (name_ == "xhookrightarrow") + arrow = "↪"; + else if (name_ == "xLeftarrow") + arrow = "⇐"; + else if (name_ == "xRightarrow") + arrow = "⇒"; + else if (name_ == "xleftrightarrow") + arrow = "↔"; + else if (name_ == "xLeftrightarrow") + arrow = "⇔"; + else if (name_ == "xleftharpoondown") + arrow = "↽"; + else if (name_ == "xleftharpoonup") + arrow = "↼"; + else if (name_ == "xleftrightharpoons") + arrow = "⇋"; + else if (name_ == "xrightharpoondown") + arrow = "⇁"; + else if (name_ == "xrightharpoonup") + arrow = "⇀"; + else if (name_ == "xrightleftharpoons") + arrow = "⇌"; + else if (name_ == "xmapsto") + arrow = "↦"; + else { + lyxerr << "mathmlize conversion for '" << name_ << "' not implemented" << endl; + LASSERT(false, arrow = "→"); + } ms << "" << arrow << cell(1) << cell(0) << ""; @@ -91,8 +131,42 @@ void InsetMathXArrow::mathmlize(MathStream & ms) const void InsetMathXArrow::htmlize(HtmlStream & os) const { - char const * const arrow = name_ == "xleftarrow" - ? "←" : "→"; + char const * arrow; + + if (name_ == "xleftarrow") + arrow = "←"; + else if (name_ == "xrightarrow") + arrow = "→"; + else if (name_ == "xhookleftarrow") + arrow = "↩"; + else if (name_ == "xhookrightarrow") + arrow = "↪"; + else if (name_ == "xLeftarrow") + arrow = "⇐"; + else if (name_ == "xRightarrow") + arrow = "⇒"; + else if (name_ == "xleftrightarrow") + arrow = "↔"; + else if (name_ == "xLeftrightarrow") + arrow = "⇔"; + else if (name_ == "xleftharpoondown") + arrow = "↽"; + else if (name_ == "xleftharpoonup") + arrow = "↼"; + else if (name_ == "xleftrightharpoons") + arrow = "⇋"; + else if (name_ == "xrightharpoondown") + arrow = "⇁"; + else if (name_ == "xrightharpoonup") + arrow = "⇀"; + else if (name_ == "xrightleftharpoons") + arrow = "⇌"; + else if (name_ == "xmapsto") + arrow = "↦"; + else { + lyxerr << "htmlize conversion for '" << name_ << "' not implemented" << endl; + LASSERT(false, arrow = "→"); + } os << MTag("span", "class='xarrow'") << MTag("span", "class='xatop'") << cell(0) << ETag("span") << MTag("span", "class='xabottom'") << arrow << ETag("span") @@ -102,7 +176,10 @@ void InsetMathXArrow::htmlize(HtmlStream & os) const void InsetMathXArrow::validate(LaTeXFeatures & features) const { - features.require("amsmath"); + if (name_ == "xleftarrow" || name_ == "xrightarrow") + features.require("amsmath"); + else + features.require("mathtools"); if (features.runparams().math_flavor == OutputParams::MathAsHTML) // CSS adapted from eLyXer features.addCSSSnippet(