--- a/eric6/UI/Previewers/PreviewerHTML.py Thu Oct 24 19:34:53 2019 +0200 +++ b/eric6/UI/Previewers/PreviewerHTML.py Fri Oct 25 20:15:51 2019 +0200 @@ -678,14 +678,16 @@ """<a href="http://pythonhosted.org/Markdown/install.html">""" """installation instructions.</a></p>""") + from . import PreviewerHTMLStyles + from . import MarkdownExtensions + extensions = [] + mermaidNeeded = False if Preferences.getEditor("PreviewMarkdownMermaid"): - try: - import md_mermaid # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ - extensions.append("md_mermaid") - except ImportError: - pass + if MarkdownExtensions.MermaidRegexFullText.search(text): + extensions.append(MarkdownExtensions.MermaidExtension()) + mermaidNeeded = True if convertNewLineToBreak: extensions.append('nl2br') @@ -697,6 +699,7 @@ # PyPI package is 'pymdown-extensions' extensions.extend([ + 'toc', 'pymdownx.extra', 'pymdownx.caret', 'pymdownx.emoji', 'pymdownx.mark', 'pymdownx.tilde', 'pymdownx.keys', 'pymdownx.tasklist', 'pymdownx.smartsymbols', @@ -714,74 +717,7 @@ (markdown.version_info[0] == 2 and markdown.version_info[1] > 0) ): - class _TildeExtension(markdown.Extension): - """ - Class is placed here, because it depends on imported - markdown, and markdown import is lazy. - - (see https://pythonhosted.org/Markdown/extensions/api.html - this page for details) - """ - DEL_RE = r'(~~)(.+?)~~' - SUB_RE = r'(~)(.+?)~' - - def extendMarkdown(self, md, md_globals): - # Create the sub pattern and insert it into markdown - # parser - sub_tag = markdown.inlinepatterns.SimpleTagPattern( - self.SUB_RE, 'sub') - md.inlinePatterns.add('sub', sub_tag, '>not_strong') - - # Create the del pattern and insert it into markdown - # parser - del_tag = markdown.inlinepatterns.SimpleTagPattern( - self.DEL_RE, 'del') - md.inlinePatterns.add('del', del_tag, '>not_strong') - - class _CaretExtension(markdown.Extension): - """ - Class is placed here, because it depends on imported - markdown, and markdown import is lazy. - - (see https://pythonhosted.org/Markdown/extensions/api.html - this page for details) - """ - INS_RE = r'(\^\^)(.*?)\^\^' - SUP_RE = r'(\^)(.*?)\^' - - def extendMarkdown(self, md, md_globals): - # Create the sup pattern and insert it into markdown - # parser - sup_tag = markdown.inlinepatterns.SimpleTagPattern( - self.SUP_RE, 'sup') - md.inlinePatterns.add('sup', sup_tag, '>not_strong') - - # Create the ins pattern and insert it into markdown - # parser - ins_tag = markdown.inlinepatterns.SimpleTagPattern( - self.INS_RE, 'ins') - md.inlinePatterns.add('ins', ins_tag, '>not_strong') - - class _MarkExtension(markdown.Extension): - """ - Class is placed here, because it depends on imported - markdown, and markdown import is lazy. - - (see https://pythonhosted.org/Markdown/extensions/api.html - this page for details) - """ - MARK_RE = r'(==)(.*?)==' - - def extendMarkdown(self, md, md_globals): - # Create the mark pattern and insert it into markdown - # parser - mark_tag = markdown.inlinepatterns.SimpleTagPattern( - self.MARK_RE, 'mark') - md.inlinePatterns.add('mark', mark_tag, '>not_strong') - - extensions.extend([ - _TildeExtension(), _CaretExtension(), _MarkExtension() - ]) + extensions.append(MarkdownExtensions.SimplePatternExtension()) if Preferences.getEditor("PreviewMarkdownMathJax"): mathjax = ( @@ -801,7 +737,7 @@ else: mathjax = "" - if Preferences.getEditor("PreviewMarkdownMermaid"): + if mermaidNeeded: mermaid = ( "<script type='text/javascript' id='Mermaid-script'" " src='https://unpkg.com/mermaid@8/dist/mermaid.min.js'>\n" @@ -836,9 +772,16 @@ '''content="text/html; charset=utf-8" />\n''' '''{0}''' '''{1}''' + '''<style type="text/css">''' + '''{2}''' + '''</style>\n''' '''</head>\n''' '''<body>\n''' - ).format(mathjax, mermaid) + ).format( + mathjax, mermaid, + PreviewerHTMLStyles.css_markdown + + PreviewerHTMLStyles.css_pygments + ) foot = '''\n</body>\n</html>\n'''