def extendMarkdown(self, md, md_globals): def handle_match_inline(m): node = etree.Element('script') node.set('type', 'math/tex') node.text = AtomicString(m.group(3)) return node def handle_match(m): node = etree.Element('script') node.set('type', 'math/tex; mode=display') if '\\begin' in m.group(2): node.text = AtomicString(m.group(2) + m.group(4) + m.group(5)) else: node.text = AtomicString(m.group(3)) return node inlinemathpatterns = ( # Inline math with `$...$` Pattern(r'(?<!\\|\$)(\$)([^\$]+)(\$)'), # Inline math with `\(...\)` Pattern(r'(?<!\\)(\\\()(.+?)(\\\))') ) mathpatterns = ( # Display style math with `$$...$$` Pattern(r'(?<!\\)(\$\$)([^\$]+)(\$\$)'), # Display style math with `\[...\]` Pattern(r'(?<!\\)(\\\[)(.+?)(\\\])'), Pattern(r'(?<!\\)(\\begin{([a-z]+?\*?)})(.+?)(\\end{\3})') ) for i, pattern in enumerate(inlinemathpatterns): pattern.handleMatch = handle_match_inline md.inlinePatterns.add('math-inline-%d' % i, pattern, '<escape') for i, pattern in enumerate(mathpatterns): pattern.handleMatch = handle_match md.inlinePatterns.add('math-%d' % i, pattern, '<escape')
def extendMarkdown(self, md, md_globals): def _wrap_node(node, preview_text, wrapper_tag): if not self.getConfig('add_preview'): return node preview = etree.Element('span', {'class': 'MathJax_Preview'}) preview.text = AtomicString(preview_text) wrapper = etree.Element(wrapper_tag) wrapper.extend([preview, node]) return wrapper def handle_match_inline(m): node = etree.Element('script') node.set('type', self._get_content_type()) node.text = AtomicString(m.group(3)) return _wrap_node(node, ''.join(m.group(2, 3, 4)), 'span') def handle_match(m): node = etree.Element('script') node.set('type', '%s; mode=display' % self._get_content_type()) if '\\begin' in m.group(2): node.text = AtomicString(''.join(m.group(2, 4, 5))) return _wrap_node(node, ''.join(m.group(1, 2, 4, 5, 6)), 'div') else: node.text = AtomicString(m.group(3)) return _wrap_node(node, ''.join(m.group(2, 3, 4)), 'div') inlinemathpatterns = ( Pattern(r'(?<!\\|\$)(\$)([^\$]+)(\$)'), # $...$ Pattern(r'(?<!\\)(\\\()(.+?)(\\\))') # \(...\) ) mathpatterns = ( Pattern(r'(?<!\\)(\$\$)([^\$]+)(\$\$)'), # $$...$$ Pattern(r'(?<!\\)(\\\[)(.+?)(\\\])'), # \[...\] Pattern(r'(?<!\\)(\\begin{([a-z]+?\*?)})(.+?)(\\end{\3})') ) if not self.getConfig('enable_dollar_delimiter'): inlinemathpatterns = inlinemathpatterns[1:] if self.getConfig('use_asciimath'): mathpatterns = mathpatterns[:-1] # \begin...\end is TeX only for i, pattern in enumerate(mathpatterns): pattern.handleMatch = handle_match md.inlinePatterns.add('math-%d' % i, pattern, '<escape') for i, pattern in enumerate(inlinemathpatterns): pattern.handleMatch = handle_match_inline md.inlinePatterns.add('math-inline-%d' % i, pattern, '<escape') if self.getConfig('enable_dollar_delimiter'): md.ESCAPED_CHARS.append('$')
def extendMarkdown(self, md, md_globals): def _wrap_node(node, preview_text, wrapper_tag): if not self.getConfig("add_preview"): return node preview = etree.Element("span", {"class": "MathJax_Preview"}) preview.text = AtomicString(preview_text) wrapper = etree.Element(wrapper_tag) wrapper.extend([preview, node]) return wrapper def handle_match_inline(m): node = etree.Element("script") node.set("type", self._get_content_type()) node.text = AtomicString(m.group(3)) return _wrap_node(node, "".join(m.group(2, 3, 4)), "span") def handle_match(m): node = etree.Element("script") node.set("type", "%s; mode=display" % self._get_content_type()) if "\\begin" in m.group(2): node.text = AtomicString("".join(m.group(2, 4, 5))) return _wrap_node(node, "".join(m.group(1, 2, 4, 5, 6)), "div") else: node.text = AtomicString(m.group(3)) return _wrap_node(node, "".join(m.group(2, 3, 4)), "div") inlinemathpatterns = ( Pattern(r"(?<!\\|\$)(\$)([^\$]+)(\$)"), # $...$ Pattern(r"(?<!\\)(\\\()(.+?)(\\\))"), # \(...\) ) mathpatterns = ( Pattern(r"(?<!\\)(\$\$)([^\$]+)(\$\$)"), # $$...$$ Pattern(r"(?<!\\)(\\\[)(.+?)(\\\])"), # \[...\] Pattern(r"(?<!\\)(\\begin{([a-z]+?\*?)})(.+?)(\\end{\3})"), ) if not self.getConfig("enable_dollar_delimiter"): inlinemathpatterns = inlinemathpatterns[1:] for i, pattern in enumerate(mathpatterns): pattern.handleMatch = handle_match md.inlinePatterns.add("math-%d" % i, pattern, "<escape") for i, pattern in enumerate(inlinemathpatterns): pattern.handleMatch = handle_match_inline md.inlinePatterns.add("math-inline-%d" % i, pattern, "<escape") if self.getConfig("enable_dollar_delimiter"): md.ESCAPED_CHARS.append("$")
def extendMarkdown(self, md, md_globals): def _wrap_node(node, preview_text, wrapper_tag): if not self.getConfig('add_preview'): return node preview = etree.Element('span', {'class': 'MathJax_Preview'}) wrapper = etree.Element(wrapper_tag) wrapper.extend([preview, node]) return wrapper def handle_match_inline(m): node = etree.Element('script') node.set('type', self._get_content_type(m.group(2))) if m.group(2) in self.asciimath_delimiters: text = self._fix_html_entites(m.group(3)) if self.getConfig('asciimath_escape'): node.text = AtomicString(self._process_escape(text)) else: node.text = AtomicString(text) elif m.group(2) in self.latexmath_delimiters: text = self._fix_latex(m.group(3)) if self.getConfig('latexmath_escape'): node.text = AtomicString(self._process_escape(text)) else: node.text = AtomicString(text) else: text = m.group(3) node.text = AtomicString(text) return _wrap_node(node, m.group(2) + text + m.group(4), 'span') def handle_match(m): node = etree.Element('script') node.set('type', '%s; mode=display' % self._get_content_type(m.group(2))) if m.group(2) in self.asciimath_delimiters: text = self._fix_html_entites(m.group(3)) if self.getConfig('asciimath_escape'): node.text = AtomicString(self._process_escape(text)) else: node.text = AtomicString(text) elif m.group(2) in self.latexmath_delimiters: text = self._fix_latex(m.group(3)) if self.getConfig('latexmath_escape'): node.text = AtomicString(self._process_escape(text)) else: node.text = AtomicString(text) else: text = m.group(3) node.text = AtomicString(text) return _wrap_node(node, m.group(2) + text + m.group(4), 'div') inline_patterns = ( Pattern(r'(?<!\\)(\\\()(.+?)(\\\))'), # MathJax \(...\) Pattern(r'(?<!\\)(\\`)(.+?)(\\`)'), # AsciiMath \`...\` ) patterns = ( Pattern(r'(?<!\\)(\$\$)([^\$]+)(\$\$)'), # MathJax $$...$$ Pattern(r'(?<!\\)(\\\[)(.+?)(\\\])'), # MathJax \[...\] Pattern(r'(?<!\\)(\\`)(.+?)(\\`)'), # AsciiMath \`...\` ) for i, pattern in enumerate(patterns): pattern.handleMatch = handle_match md.inlinePatterns.add('mathjax-%d' % i, pattern, '<escape') for i, pattern in enumerate(inline_patterns): pattern.handleMatch = handle_match_inline md.inlinePatterns.add('mathjax-inline-%d' % i, pattern, '<escape')