--- /dev/null
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from lxml import etree
+import six
+from librarian import get_resource
+from . import TreeEmbed, create_embed, downgrades_to
+
+
+class MathML(TreeEmbed):
+ @downgrades_to('application/x-latex')
+ def to_latex(self):
+ """
+ >>> print(MathML(etree.fromstring('<mat>a < b</mat>')).to_latex().data.strip())
+ a < b
+
+ >>> print(MathML(etree.fromstring('<mat>< & &lt; A</mat>')).to_latex().data.strip())
+ < & < A
+
+ """
+ xslt = etree.parse(get_resource('res/embeds/mathml/mathml2latex.xslt'))
+ output = self.tree.xslt(xslt)
+ text = six.text_type(output)
+ # Workaround for entities being preserved in output. But there should be a better way.
+ text = text.replace('<', '<').replace('&', '&')
+ return create_embed('application/x-latex', data=text)