mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-30 05:12:40 +00:00
Get MathML output working for math decorations.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@32636 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
bae47150c6
commit
904129cba6
@ -22,9 +22,11 @@
|
||||
#include "LaTeXFeatures.h"
|
||||
|
||||
#include "support/debug.h"
|
||||
#include "support/lassert.h"
|
||||
|
||||
#include <ostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace lyx {
|
||||
|
||||
@ -155,5 +157,65 @@ void InsetMathDecoration::validate(LaTeXFeatures & features) const
|
||||
InsetMathNest::validate(features);
|
||||
}
|
||||
|
||||
namespace {
|
||||
struct Attributes {
|
||||
Attributes() {}
|
||||
Attributes(bool o, string t)
|
||||
: over(o), tag(t) {}
|
||||
bool over;
|
||||
string tag;
|
||||
};
|
||||
|
||||
typedef map<string, Attributes> Translator;
|
||||
|
||||
void buildTranslator(Translator & 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["overrightarrow"] = Attributes(true, "⟶");
|
||||
t["tilde"] = Attributes(true, "˜");
|
||||
t["underbar"] = Attributes(false, "_");
|
||||
t["underbrace"] = Attributes(false, "⏟");
|
||||
t["underleftarrow"] = Attributes(false, "⟵");
|
||||
t["underleftrightarrow"] = Attributes(false, "⟷");
|
||||
t["underline"] = Attributes(false, "&;");
|
||||
t["underrightarrow"] = Attributes(false, "⟶");
|
||||
t["vec"] = Attributes(true, "→");
|
||||
t["widehat"] = Attributes(true, "^");
|
||||
t["widetilde"] = Attributes(true, "∼");
|
||||
}
|
||||
|
||||
Translator const & translator() {
|
||||
static Translator t;
|
||||
if (t.empty())
|
||||
buildTranslator(t);
|
||||
return t;
|
||||
}
|
||||
}
|
||||
|
||||
void InsetMathDecoration::mathmlize(MathStream & os) const
|
||||
{
|
||||
Translator const & t = translator();
|
||||
Translator::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("<mo stretchy=\"true\">" + cur->second.tag + "</mo>")
|
||||
<< ETag(outag);
|
||||
}
|
||||
|
||||
|
||||
} // namespace lyx
|
||||
|
@ -41,6 +41,8 @@ public:
|
||||
void validate(LaTeXFeatures & features) const;
|
||||
///
|
||||
InsetCode lyxCode() const { return MATH_DECORATION_CODE; }
|
||||
///
|
||||
void mathmlize(MathStream &) const;
|
||||
|
||||
private:
|
||||
virtual Inset * clone() const;
|
||||
|
Loading…
Reference in New Issue
Block a user