X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathDecoration.cpp;h=0349c69ee5f158a04997a38b5cb10cbccf272a3f;hb=21c92c8a129b5f3ff56de33bf2941a25967cffbb;hp=e4cb25a1c3cf35cd52ad9cc71ba659dc587e4c34;hpb=e35fda62a7f69e3278a2df5cfa4ec9fa103c5c65;p=lyx.git diff --git a/src/mathed/InsetMathDecoration.cpp b/src/mathed/InsetMathDecoration.cpp index e4cb25a1c3..0349c69ee5 100644 --- a/src/mathed/InsetMathDecoration.cpp +++ b/src/mathed/InsetMathDecoration.cpp @@ -27,6 +27,7 @@ #include "support/lassert.h" #include "support/lstrings.h" +#include #include using namespace lyx::support; @@ -37,7 +38,7 @@ namespace lyx { InsetMathDecoration::InsetMathDecoration(Buffer * buf, latexkeys const * key) - : InsetMathNest(buf, 1), key_(key), dh_(0), dy_(0), dw_(0) + : InsetMathNest(buf, 1), key_(key) { // lyxerr << " creating deco " << key->name << endl; } @@ -55,11 +56,11 @@ bool InsetMathDecoration::upper() const } -bool InsetMathDecoration::isScriptable() const +MathClass InsetMathDecoration::mathClass() const { - return - key_->name == "overbrace" || - key_->name == "underbrace"; + if (key_->name == "overbrace" || key_->name == "underbrace") + return MC_OP; + return MC_ORD; } @@ -119,8 +120,6 @@ void InsetMathDecoration::metrics(MetricsInfo & mi, Dimension & dim) const dy_ = dim.des + 1; dim.des += dh_ + 2; } - - metricsMarkers(mi, dim); } @@ -128,14 +127,13 @@ void InsetMathDecoration::draw(PainterInfo & pi, int x, int y) const { Changer dummy = pi.base.changeEnsureMath(currentMode()); - cell(0).draw(pi, x + 1, y); + cell(0).draw(pi, x, y); Dimension const & dim0 = cell(0).dimension(*pi.base.bv); if (wide()) mathed_draw_deco(pi, x + 1, y + dy_, dim0.wid, dh_, key_->name); else mathed_draw_deco(pi, x + 1 + (dim0.wid - dw_) / 2, y + dy_, dw_, dh_, key_->name); - drawMarkers(pi, x, y); } @@ -147,6 +145,7 @@ void InsetMathDecoration::write(WriteStream & os) const os << '\\' << key_->name << '{'; ModeSpecifier specifier(os, currentMode()); os << cell(0) << '}'; + writeLimits(os); } @@ -165,45 +164,46 @@ void InsetMathDecoration::infoize(odocstream & os) const namespace { struct Attributes { Attributes() : over(false) {} - Attributes(bool o, string t) - : over(o), tag(t) {} + Attributes(bool o, string const & t, string const & entity) + : over(o), tag(t), entity(entity) {} bool over; string tag; + string entity; }; typedef map TranslationMap; void buildTranslationMap(TranslationMap & t) { // the decorations we need to support are listed in lib/symbols - t["acute"] = Attributes(true, "´"); - t["bar"] = Attributes(true, "‾"); - t["breve"] = Attributes(true, "˘"); - t["check"] = Attributes(true, "ˇ"); - t["ddddot"] = Attributes(true, "⃜"); - t["dddot"] = Attributes(true, "⃛"); - t["ddot"] = Attributes(true, "¨"); - t["dot"] = Attributes(true, "˙"); - t["grave"] = Attributes(true, "`"); - t["hat"] = Attributes(true, "ˆ"); - t["mathring"] = Attributes(true, "˚"); - t["overbrace"] = Attributes(true, "⏞"); - t["overleftarrow"] = Attributes(true, "⟵"); - t["overleftrightarrow"] = Attributes(true, "⟷"); - t["overline"] = Attributes(true, "¯"); - t["overrightarrow"] = Attributes(true, "⟶"); - t["tilde"] = Attributes(true, "˜"); - t["underbar"] = Attributes(false, "_"); - t["underbrace"] = Attributes(false, "⏟"); - t["underleftarrow"] = Attributes(false, "⟵"); - t["underleftrightarrow"] = Attributes(false, "⟷"); + t["acute"] = Attributes(true, "´", "´"); + t["bar"] = Attributes(true, "‾", "¯"); + t["breve"] = Attributes(true, "˘", "˘"); + t["check"] = Attributes(true, "ˇ", "ˇ"); + t["ddddot"] = Attributes(true, "⃜", "⃜"); + t["dddot"] = Attributes(true, "⃛", "⃛"); + t["ddot"] = Attributes(true, "¨", "¨"); + t["dot"] = Attributes(true, "˙", "˙"); + t["grave"] = Attributes(true, "`", "`"); + t["hat"] = Attributes(true, "ˆ", "ˆ"); + t["mathring"] = Attributes(true, "˚", "˚"); + t["overbrace"] = Attributes(true, "⏞", "︷"); + t["overleftarrow"] = Attributes(true, "⟵", "⟵"); + t["overleftrightarrow"] = Attributes(true, "⟷", "⟷"); + t["overline"] = Attributes(true, "¯", "¯"); + t["overrightarrow"] = Attributes(true, "⟶", "⟶"); + t["tilde"] = Attributes(true, "˜", "˜"); + t["underbar"] = Attributes(false, "_", "̲"); + t["underbrace"] = Attributes(false, "⏟", "︸"); + t["underleftarrow"] = Attributes(false, "⟵", "⟵"); + t["underleftrightarrow"] = Attributes(false, "⟷", "⟷"); // this is the macron, again, but it works - t["underline"] = Attributes(false, "¯"); - t["underrightarrow"] = Attributes(false, "⟶"); - t["undertilde"] = Attributes(false, "∼"); - t["utilde"] = Attributes(false, "∼"); - t["vec"] = Attributes(true, "→"); - t["widehat"] = Attributes(true, "^"); - t["widetilde"] = Attributes(true, "∼"); + t["underline"] = Attributes(false, "¯", "¯"); + t["underrightarrow"] = Attributes(false, "⟶", "⟶"); + t["undertilde"] = Attributes(false, "∼", "∼"); + t["utilde"] = Attributes(false, "∼", "∼"); + t["vec"] = Attributes(true, "→", "→"); + t["widehat"] = Attributes(true, "^", "^"); + t["widetilde"] = Attributes(true, "∼", "∼"); } TranslationMap const & translationMap() { @@ -212,18 +212,21 @@ namespace { buildTranslationMap(t); return t; } -} +} // namespace -void InsetMathDecoration::mathmlize(MathStream & os) const +void InsetMathDecoration::mathmlize(MathStream & ms) const { TranslationMap const & t = translationMap(); TranslationMap::const_iterator cur = t.find(to_utf8(key_->name)); LASSERT(cur != t.end(), return); char const * const outag = cur->second.over ? "mover" : "munder"; - os << MTag(outag) - << MTag("mrow") << cell(0) << ETag("mrow") - << from_ascii("" + cur->second.tag + "") - << ETag(outag); + std::string decoration = ms.xmlMode() ? cur->second.entity : cur->second.tag; + ms << MTag(outag) + << MTag("mrow") << cell(0) << ETag("mrow") + << "<" << from_ascii(ms.namespacedTag("mo")) << " stretchy=\"true\">" + << from_ascii(decoration) + << "" + << ETag(outag); } @@ -280,8 +283,8 @@ void InsetMathDecoration::validate(LaTeXFeatures & features) const "span.symbol{height: 0.5ex;}"); } } else { - if (!key_->requires.empty()) - features.require(key_->requires); + if (!key_->required.empty()) + features.require(key_->required); } InsetMathNest::validate(features); }