diff --git a/mdx_math.py b/mdx_math.py new file mode 100644 index 0000000..3568608 --- /dev/null +++ b/mdx_math.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- + +''' +Math extension for Python-Markdown +================================== + +Adds support for displaying math formulas using [MathJax](http://www.mathjax.org/). + +Author: 2015, Dmitry Shachnev . +''' + +import markdown + +class MathExtension(markdown.extensions.Extension): + def __init__(self, *args, **kwargs): + self.config = { + 'enable_dollar_delimiter': [False, 'Enable single-dollar delimiter'], + 'render_to_span': [False, + 'Render to span elements rather than script for fallback'], + } + super(MathExtension, self).__init__(*args, **kwargs) + + def extendMarkdown(self, md, md_globals): + def handle_match_inline(m): + if self.getConfig('render_to_span'): + node = markdown.util.etree.Element('span') + node.set('class', 'tex') + node.text = ("\\\\(" + markdown.util.AtomicString(m.group(3)) + + "\\\\)") + else: + node = markdown.util.etree.Element('script') + node.set('type', 'math/tex') + node.text = markdown.util.AtomicString(m.group(3)) + return node + + def handle_match(m): + node = markdown.util.etree.Element('script') + node.set('type', 'math/tex; mode=display') + if '\\begin' in m.group(2): + node.text = markdown.util.AtomicString(m.group(2) + m.group(4) + m.group(5)) + else: + node.text = markdown.util.AtomicString(m.group(3)) + return node + + inlinemathpatterns = ( + markdown.inlinepatterns.Pattern(r'(?