677 """ 'pip install Markdown' or see """ |
677 """ 'pip install Markdown' or see """ |
678 """<a href="http://pythonhosted.org/Markdown/install.html">""" |
678 """<a href="http://pythonhosted.org/Markdown/install.html">""" |
679 """installation instructions.</a></p>""") |
679 """installation instructions.</a></p>""") |
680 |
680 |
681 extensions = [] |
681 extensions = [] |
|
682 |
|
683 if Preferences.getEditor("PreviewMarkdownMermaid"): |
|
684 try: |
|
685 import md_mermaid # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ |
|
686 extensions.append("md_mermaid") |
|
687 except ImportError: |
|
688 pass |
|
689 |
|
690 if convertNewLineToBreak: |
|
691 extensions.append('nl2br') |
|
692 |
|
693 pyMdown = False |
682 if usePyMdownExtensions: |
694 if usePyMdownExtensions: |
683 try: |
695 try: |
684 import pymdownx # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ |
696 import pymdownx # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ |
685 # PyPI package is 'pymdown-extensions' |
697 # PyPI package is 'pymdown-extensions' |
686 |
698 |
687 extensions = [ |
699 extensions.extend([ |
688 'pymdownx.extra', 'pymdownx.caret', 'pymdownx.emoji', |
700 'pymdownx.extra', 'pymdownx.caret', 'pymdownx.emoji', |
689 'pymdownx.mark', 'pymdownx.tilde', 'pymdownx.keys', |
701 'pymdownx.mark', 'pymdownx.tilde', 'pymdownx.keys', |
690 'pymdownx.tasklist', 'pymdownx.smartsymbols', |
702 'pymdownx.tasklist', 'pymdownx.smartsymbols', |
691 ] |
703 ]) |
692 if convertNewLineToBreak: |
704 pyMdown = True |
693 extensions.append('nl2br') |
|
694 except ImportError: |
705 except ImportError: |
695 pass |
706 pass |
696 if not extensions: |
707 |
697 if convertNewLineToBreak: |
708 if not pyMdown: |
698 extensions = ['extra', 'toc', 'nl2br'] |
709 extensions.extend(['extra', 'toc']) |
699 else: |
|
700 extensions = ['extra', 'toc'] |
|
701 |
710 |
702 # version 2.0 supports only extension names, not instances |
711 # version 2.0 supports only extension names, not instances |
703 if ( |
712 if ( |
704 markdown.version_info[0] > 2 or |
713 markdown.version_info[0] > 2 or |
705 (markdown.version_info[0] == 2 and |
714 (markdown.version_info[0] == 2 and |
779 "<script type='text/javascript' id='MathJax-script' async" |
788 "<script type='text/javascript' id='MathJax-script' async" |
780 " src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/" |
789 " src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/" |
781 "tex-chtml.js'>\n" |
790 "tex-chtml.js'>\n" |
782 "</script>\n" |
791 "</script>\n" |
783 ) |
792 ) |
|
793 # prepare text for mathjax |
|
794 text = ( |
|
795 text |
|
796 .replace(r"\(", r"\\(") |
|
797 .replace(r"\)", r"\\)") |
|
798 .replace(r"\[", r"\\[") |
|
799 .replace(r"\]", r"\\]") |
|
800 ) |
784 else: |
801 else: |
785 mathjax = "" |
802 mathjax = "" |
|
803 |
|
804 if Preferences.getEditor("PreviewMarkdownMermaid"): |
|
805 mermaid = ( |
|
806 "<script type='text/javascript' id='Mermaid-script'" |
|
807 " src='https://unpkg.com/mermaid@8/dist/mermaid.min.js'>\n" |
|
808 "</script>\n" |
|
809 ) |
|
810 else: |
|
811 mermaid = "" |
786 |
812 |
787 htmlFormat = Preferences.getEditor("PreviewMarkdownHTMLFormat").lower() |
813 htmlFormat = Preferences.getEditor("PreviewMarkdownHTMLFormat").lower() |
788 body = markdown.markdown(text, extensions=extensions, |
814 body = markdown.markdown(text, extensions=extensions, |
789 output_format=htmlFormat.lower()) |
815 output_format=htmlFormat.lower()) |
790 |
816 |
807 head += ( |
833 head += ( |
808 '''<meta name="Generator" content="eric6" />\n''' |
834 '''<meta name="Generator" content="eric6" />\n''' |
809 '''<meta http-equiv="Content-Type" ''' |
835 '''<meta http-equiv="Content-Type" ''' |
810 '''content="text/html; charset=utf-8" />\n''' |
836 '''content="text/html; charset=utf-8" />\n''' |
811 '''{0}''' |
837 '''{0}''' |
|
838 '''{1}''' |
812 '''</head>\n''' |
839 '''</head>\n''' |
813 '''<body>\n''' |
840 '''<body>\n''' |
814 ).format(mathjax) |
841 ).format(mathjax, mermaid) |
815 |
842 |
816 foot = '''\n</body>\n</html>\n''' |
843 foot = '''\n</body>\n</html>\n''' |
817 |
844 |
818 return head + body + foot |
845 return head + body + foot |