eric6/UI/Previewers/PreviewerHTML.py

changeset 7309
5a434813eef3
parent 7304
b072a364dd8d
child 7314
c32c24345ca7
diff -r 7b932d80c838 -r 5a434813eef3 eric6/UI/Previewers/PreviewerHTML.py
--- a/eric6/UI/Previewers/PreviewerHTML.py	Wed Oct 23 20:06:12 2019 +0200
+++ b/eric6/UI/Previewers/PreviewerHTML.py	Thu Oct 24 19:30:01 2019 +0200
@@ -679,25 +679,34 @@
                 """installation instructions.</a></p>""")
         
         extensions = []
+        
+        if Preferences.getEditor("PreviewMarkdownMermaid"):
+            try:
+                import md_mermaid   # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
+                extensions.append("md_mermaid")
+            except ImportError:
+                pass
+        
+        if convertNewLineToBreak:
+            extensions.append('nl2br')
+        
+        pyMdown = False
         if usePyMdownExtensions:
             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 convertNewLineToBreak:
-                    extensions.append('nl2br')
+                ])
+                pyMdown = True
             except ImportError:
                 pass
-        if not extensions:
-            if convertNewLineToBreak:
-                extensions = ['extra', 'toc', 'nl2br']
-            else:
-                extensions = ['extra', 'toc']
+        
+        if not pyMdown:
+            extensions.extend(['extra', 'toc'])
             
             # version 2.0 supports only extension names, not instances
             if (
@@ -781,9 +790,26 @@
                 "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(text, extensions=extensions,
                                  output_format=htmlFormat.lower())
@@ -809,9 +835,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