eric6/UI/Previewers/PreviewerHTML.py

changeset 7309
5a434813eef3
parent 7304
b072a364dd8d
child 7314
c32c24345ca7
equal deleted inserted replaced
7308:7b932d80c838 7309:5a434813eef3
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

eric ide

mercurial