Source code for webviz._markdown

import jinja2
import markdown
from os import path, walk
from re import sub
from shutil import copytree
from ._page_element import PageElement
from ._header_element import HeaderElement


def contains_math(string):
    if any(x in string for x in ['$$', '\\begin', '\\end']):
        return True


[docs]class Markdown(PageElement): """ A page element for adding `markdown`. """ def __init__(self, md): """ :param md: Markdown written in triple-quote string. """ super(Markdown, self).__init__() self._md = md extension = markdown.Markdown( extensions=[ 'markdown.extensions.tables', 'markdown.extensions.codehilite', 'mdx_math' ], extension_configs={ 'mdx-math': {'enable_dollar_delimiter': True} } ) if contains_math(self._md): self.header_elements.add(HeaderElement( tag='script', attributes={ 'type': 'text/x-mathjax-config' }, content=""" MathJax.Hub.Config({ jax: ["input/TeX","input/MathML","output/CommonHTML"], extensions: [ "tex2jax.js", "mml2jax.js", "MathMenu.js", "MathZoom.js", "AssistiveMML.js", "a11y/accessibility-menu.js" ], TeX: { equationNumbers: {autoNumber: "all"}, extensions: [ "AMSmath.js", "AMSsymbols.js", "noErrors.js", "noUndefined.js" ] } }); """ )) mathjax_location = path.abspath(path.join( path.dirname(__file__), 'resources', 'js', 'mathjax' )) for root, subdirs, files in walk(mathjax_location): if len(files) > 0: self.add_mathjax(root, files) self._rendered = extension.convert(self._md) self.add_css_file(path.join( path.dirname(__file__), 'resources', 'css', 'codehilite.css' )) def add_mathjax(self, src, files): subdir = sub(r'.*resources/js/', '', str(src)) for file in files: self.add_resource(path.join( src, file ), subdir='js/' + str(subdir)) self.header_elements.add(HeaderElement( tag='script', attributes={ 'src': path.join( '{root_folder}', 'resources', 'js', 'mathjax', 'MathJax.js' ) } ))
[docs] def get_template(self): return jinja2.Template(self._rendered)