Esempio n. 1
0
    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')
Esempio n. 2
0
    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('$')
Esempio n. 3
0
    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("$")
Esempio n. 4
0
    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')