eric6/QScintilla/Exporters/ExporterHTML.py

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

eric ide

mercurial