eric6/QScintilla/Exporters/ExporterHTML.py

changeset 7309
5a434813eef3
parent 7305
928858251f7a
child 7314
c32c24345ca7
--- a/eric6/QScintilla/Exporters/ExporterHTML.py	Wed Oct 23 20:06:12 2019 +0200
+++ b/eric6/QScintilla/Exporters/ExporterHTML.py	Thu Oct 24 19:30:01 2019 +0200
@@ -526,25 +526,34 @@
             return ""
         
         extensions = []
+        
+        if Preferences.getEditor("PreviewMarkdownMermaid"):
+            try:
+                import md_mermaid   # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
+                extensions.append("md_mermaid")
+            except ImportError:
+                pass
+        
+        if Preferences.getEditor("PreviewMarkdownNLtoBR"):
+            extensions.append('nl2br')
+        
+        pyMdown = False
         if Preferences.getEditor("PreviewMarkdownUsePyMdownExtensions"):
             try:
                 import pymdownx     # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
                 # PyPI package is 'pymdown-extensions'
                 
-                extensions = [
+                extensions.extend([
                     'pymdownx.extra', 'pymdownx.caret', 'pymdownx.emoji',
                     'pymdownx.mark', 'pymdownx.tilde', 'pymdownx.keys',
                     'pymdownx.tasklist', 'pymdownx.smartsymbols',
-                ]
-                if Preferences.getEditor("PreviewMarkdownNLtoBR"):
-                    extensions.append('nl2br')
+                ])
+                pyMdown = True
             except ImportError:
                 pass
-        if not extensions:
-            if Preferences.getEditor("PreviewMarkdownNLtoBR"):
-                extensions = ['fenced_code', 'nl2br', 'extra']
-            else:
-                extensions = ['fenced_code', 'extra']
+        
+        if not pyMdown:
+            extensions.extend(['extra', 'toc'])
             
             # version 2.0 supports only extension names, not instances
             if (
@@ -621,6 +630,8 @@
                     _TildeExtension(), _CaretExtension(), _MarkExtension()
                 ])
         
+        text = self.editor.text()
+        
         if Preferences.getEditor("PreviewMarkdownMathJax"):
             mathjax = (
                 "<script type='text/javascript' id='MathJax-script' async"
@@ -628,12 +639,28 @@
                 "tex-chtml.js'>\n"
                 "</script>\n"
             )
+            # prepare text for mathjax
+            text = (
+                text
+                .replace(r"\(", r"\\(")
+                .replace(r"\)", r"\\)")
+                .replace(r"\[", r"\\[")
+                .replace(r"\]", r"\\]")
+            )
         else:
             mathjax = ""
         
+        if Preferences.getEditor("PreviewMarkdownMermaid"):
+            mermaid = (
+                "<script type='text/javascript' id='Mermaid-script'"
+                " src='https://unpkg.com/mermaid@8/dist/mermaid.min.js'>\n"
+                "</script>\n"
+            )
+        else:
+            mermaid = ""
+        
         htmlFormat = Preferences.getEditor("PreviewMarkdownHTMLFormat").lower()
-        body = markdown.markdown(self.editor.text(),
-                                 extensions=extensions,
+        body = markdown.markdown(text, extensions=extensions,
                                  output_format=htmlFormat)
         
         if htmlFormat == "xhtml1":
@@ -663,9 +690,10 @@
             '''<meta http-equiv="Content-Type" '''
             '''content="text/html; charset=utf-8" />\n'''
             '''{0}'''
+            '''{1}'''
             '''</head>\n'''
             '''<body>\n'''
-        ).format(mathjax)
+        ).format(mathjax, mermaid)
         
         foot = '''\n</body>\n</html>\n'''
         

eric ide

mercurial