524 """.html"> installation instructions.</a></p>""") |
524 """.html"> installation instructions.</a></p>""") |
525 ) |
525 ) |
526 return "" |
526 return "" |
527 |
527 |
528 extensions = [] |
528 extensions = [] |
|
529 |
|
530 if Preferences.getEditor("PreviewMarkdownMermaid"): |
|
531 try: |
|
532 import md_mermaid # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ |
|
533 extensions.append("md_mermaid") |
|
534 except ImportError: |
|
535 pass |
|
536 |
|
537 if Preferences.getEditor("PreviewMarkdownNLtoBR"): |
|
538 extensions.append('nl2br') |
|
539 |
|
540 pyMdown = False |
529 if Preferences.getEditor("PreviewMarkdownUsePyMdownExtensions"): |
541 if Preferences.getEditor("PreviewMarkdownUsePyMdownExtensions"): |
530 try: |
542 try: |
531 import pymdownx # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ |
543 import pymdownx # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ |
532 # PyPI package is 'pymdown-extensions' |
544 # PyPI package is 'pymdown-extensions' |
533 |
545 |
534 extensions = [ |
546 extensions.extend([ |
535 'pymdownx.extra', 'pymdownx.caret', 'pymdownx.emoji', |
547 'pymdownx.extra', 'pymdownx.caret', 'pymdownx.emoji', |
536 'pymdownx.mark', 'pymdownx.tilde', 'pymdownx.keys', |
548 'pymdownx.mark', 'pymdownx.tilde', 'pymdownx.keys', |
537 'pymdownx.tasklist', 'pymdownx.smartsymbols', |
549 'pymdownx.tasklist', 'pymdownx.smartsymbols', |
538 ] |
550 ]) |
539 if Preferences.getEditor("PreviewMarkdownNLtoBR"): |
551 pyMdown = True |
540 extensions.append('nl2br') |
|
541 except ImportError: |
552 except ImportError: |
542 pass |
553 pass |
543 if not extensions: |
554 |
544 if Preferences.getEditor("PreviewMarkdownNLtoBR"): |
555 if not pyMdown: |
545 extensions = ['fenced_code', 'nl2br', 'extra'] |
556 extensions.extend(['extra', 'toc']) |
546 else: |
|
547 extensions = ['fenced_code', 'extra'] |
|
548 |
557 |
549 # version 2.0 supports only extension names, not instances |
558 # version 2.0 supports only extension names, not instances |
550 if ( |
559 if ( |
551 markdown.version_info[0] > 2 or |
560 markdown.version_info[0] > 2 or |
552 (markdown.version_info[0] == 2 and |
561 (markdown.version_info[0] == 2 and |
619 |
628 |
620 extensions.extend([ |
629 extensions.extend([ |
621 _TildeExtension(), _CaretExtension(), _MarkExtension() |
630 _TildeExtension(), _CaretExtension(), _MarkExtension() |
622 ]) |
631 ]) |
623 |
632 |
|
633 text = self.editor.text() |
|
634 |
624 if Preferences.getEditor("PreviewMarkdownMathJax"): |
635 if Preferences.getEditor("PreviewMarkdownMathJax"): |
625 mathjax = ( |
636 mathjax = ( |
626 "<script type='text/javascript' id='MathJax-script' async" |
637 "<script type='text/javascript' id='MathJax-script' async" |
627 " src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/" |
638 " src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/" |
628 "tex-chtml.js'>\n" |
639 "tex-chtml.js'>\n" |
629 "</script>\n" |
640 "</script>\n" |
630 ) |
641 ) |
|
642 # prepare text for mathjax |
|
643 text = ( |
|
644 text |
|
645 .replace(r"\(", r"\\(") |
|
646 .replace(r"\)", r"\\)") |
|
647 .replace(r"\[", r"\\[") |
|
648 .replace(r"\]", r"\\]") |
|
649 ) |
631 else: |
650 else: |
632 mathjax = "" |
651 mathjax = "" |
633 |
652 |
|
653 if Preferences.getEditor("PreviewMarkdownMermaid"): |
|
654 mermaid = ( |
|
655 "<script type='text/javascript' id='Mermaid-script'" |
|
656 " src='https://unpkg.com/mermaid@8/dist/mermaid.min.js'>\n" |
|
657 "</script>\n" |
|
658 ) |
|
659 else: |
|
660 mermaid = "" |
|
661 |
634 htmlFormat = Preferences.getEditor("PreviewMarkdownHTMLFormat").lower() |
662 htmlFormat = Preferences.getEditor("PreviewMarkdownHTMLFormat").lower() |
635 body = markdown.markdown(self.editor.text(), |
663 body = markdown.markdown(text, extensions=extensions, |
636 extensions=extensions, |
|
637 output_format=htmlFormat) |
664 output_format=htmlFormat) |
638 |
665 |
639 if htmlFormat == "xhtml1": |
666 if htmlFormat == "xhtml1": |
640 head = ( |
667 head = ( |
641 '''<!DOCTYPE html PUBLIC "-//W3C//DTD''' |
668 '''<!DOCTYPE html PUBLIC "-//W3C//DTD''' |
661 head += ( |
688 head += ( |
662 '''<meta name="Generator" content="eric6" />\n''' |
689 '''<meta name="Generator" content="eric6" />\n''' |
663 '''<meta http-equiv="Content-Type" ''' |
690 '''<meta http-equiv="Content-Type" ''' |
664 '''content="text/html; charset=utf-8" />\n''' |
691 '''content="text/html; charset=utf-8" />\n''' |
665 '''{0}''' |
692 '''{0}''' |
|
693 '''{1}''' |
666 '''</head>\n''' |
694 '''</head>\n''' |
667 '''<body>\n''' |
695 '''<body>\n''' |
668 ).format(mathjax) |
696 ).format(mathjax, mermaid) |
669 |
697 |
670 foot = '''\n</body>\n</html>\n''' |
698 foot = '''\n</body>\n</html>\n''' |
671 |
699 |
672 return head + body + foot |
700 return head + body + foot |