X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathDelim.cpp;h=2680ad090d20f17cb517cf74969ebb68968c28c7;hb=5fdc577badb1cb133d6a0dc7d831bb1f82576adb;hp=403c1cf65d315fca1e2b56e3880eb72a2c1417b5;hpb=7150b0caa381ed6872d0b6090a1057861cacfa50;p=lyx.git diff --git a/src/mathed/InsetMathDelim.cpp b/src/mathed/InsetMathDelim.cpp index 403c1cf65d..2680ad090d 100644 --- a/src/mathed/InsetMathDelim.cpp +++ b/src/mathed/InsetMathDelim.cpp @@ -4,7 +4,7 @@ * Licence details can be found in the file COPYING. * * \author Alejandro Aguilar Sierra - * \author André Pönitz + * \author André Pönitz * * Full author contact details are available in file CREDITS. */ @@ -14,14 +14,19 @@ #include "InsetMathDelim.h" #include "MathData.h" +#include "MathFactory.h" #include "MathStream.h" #include "MathSupport.h" #include "MetricsInfo.h" +#include "LaTeXFeatures.h" + #include "support/docstring.h" #include "frontends/FontMetrics.h" +#include + using namespace std; namespace lyx { @@ -38,14 +43,15 @@ static docstring convertDelimToLatexName(docstring const & name) } -InsetMathDelim::InsetMathDelim(docstring const & l, docstring const & r) - : InsetMathNest(1), left_(l), right_(r) +InsetMathDelim::InsetMathDelim(Buffer * buf, docstring const & l, + docstring const & r) + : InsetMathNest(buf, 1), left_(l), right_(r), dw_(0) {} -InsetMathDelim::InsetMathDelim - (docstring const & l, docstring const & r, MathData const & ar) - : InsetMathNest(1), left_(l), right_(r) +InsetMathDelim::InsetMathDelim(Buffer * buf, docstring const & l, docstring const & r, + MathData const & ar) + : InsetMathNest(buf, 1), left_(l), right_(r), dw_(0) { cell(0) = ar; } @@ -57,8 +63,20 @@ Inset * InsetMathDelim::clone() const } +void InsetMathDelim::validate(LaTeXFeatures & features) const +{ + InsetMathNest::validate(features); + // The delimiters may be used without \left or \right as well. + // Therefore they are listed in lib/symbols, and if they have + // requirements, we need to add them here. + validate_math_word(features, left_); + validate_math_word(features, right_); +} + + void InsetMathDelim::write(WriteStream & os) const { + MathEnsurer ensurer(os); os << "\\left" << convertDelimToLatexName(left_) << cell(0) << "\\right" << convertDelimToLatexName(right_); } @@ -73,6 +91,7 @@ void InsetMathDelim::normalize(NormalStream & os) const void InsetMathDelim::metrics(MetricsInfo & mi, Dimension & dim) const { + Changer dummy = mi.base.changeEnsureMath(); Dimension dim0; cell(0).metrics(mi, dim0); Dimension t = theFontMetrics(mi.base.font).dimension('I'); @@ -84,7 +103,7 @@ void InsetMathDelim::metrics(MetricsInfo & mi, Dimension & dim) const dw_ = 8; if (dw_ < 4) dw_ = 4; - dim.wid = dim0.width() + 2 * dw_ + 8; + dim.wid = dim0.width() + 2 * dw_; dim.asc = max(a0, d0) + h0; dim.des = max(a0, d0) - h0; } @@ -92,13 +111,13 @@ void InsetMathDelim::metrics(MetricsInfo & mi, Dimension & dim) const void InsetMathDelim::draw(PainterInfo & pi, int x, int y) const { + Changer dummy = pi.base.changeEnsureMath(); Dimension const dim = dimension(*pi.base.bv); int const b = y - dim.asc; - cell(0).draw(pi, x + dw_ + 4, y); - mathed_draw_deco(pi, x + 4, b, dw_, dim.height(), left_); - mathed_draw_deco(pi, x + dim.width() - dw_ - 4, + cell(0).draw(pi, x + dw_, y); + mathed_draw_deco(pi, x, b, dw_, dim.height(), left_); + mathed_draw_deco(pi, x + dim.width() - dw_, b, dw_, dim.height(), right_); - setPosCache(pi, x, y); } @@ -161,8 +180,21 @@ void InsetMathDelim::mathematica(MathematicaStream & os) const void InsetMathDelim::mathmlize(MathStream & os) const { - os << "" << cell(0) << ""; + os << "" + << convertDelimToXMLEscape(left_) + << "\n" + << cell(0) + << "\n" + << convertDelimToXMLEscape(right_) + << "\n"; +} + + +void InsetMathDelim::htmlize(HtmlStream & os) const +{ + os << convertDelimToXMLEscape(left_) + << cell(0) + << convertDelimToXMLEscape(right_); }