12 import re |
12 import re |
13 import shutil |
13 import shutil |
14 import tempfile |
14 import tempfile |
15 import sys |
15 import sys |
16 import io |
16 import io |
|
17 import contextlib |
17 |
18 |
18 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QThread |
19 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QThread |
19 from PyQt5.QtGui import QCursor |
20 from PyQt5.QtGui import QCursor |
20 from PyQt5.QtWidgets import ( |
21 from PyQt5.QtWidgets import ( |
21 QWidget, QVBoxLayout, QLabel, QCheckBox, QSizePolicy, QToolTip |
22 QWidget, QVBoxLayout, QLabel, QCheckBox, QSizePolicy, QToolTip |
695 if convertNewLineToBreak: |
696 if convertNewLineToBreak: |
696 extensions.append('nl2br') |
697 extensions.append('nl2br') |
697 |
698 |
698 pyMdown = False |
699 pyMdown = False |
699 if usePyMdownExtensions: |
700 if usePyMdownExtensions: |
700 try: |
701 with contextlib.suppress(ImportError): |
701 import pymdownx # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ |
702 import pymdownx # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ |
702 # PyPI package is 'pymdown-extensions' |
703 # PyPI package is 'pymdown-extensions' |
703 |
704 |
704 extensions.extend([ |
705 extensions.extend([ |
705 'toc', |
706 'toc', |
706 'pymdownx.extra', 'pymdownx.caret', 'pymdownx.emoji', |
707 'pymdownx.extra', 'pymdownx.caret', 'pymdownx.emoji', |
707 'pymdownx.mark', 'pymdownx.tilde', 'pymdownx.keys', |
708 'pymdownx.mark', 'pymdownx.tilde', 'pymdownx.keys', |
708 'pymdownx.tasklist', 'pymdownx.smartsymbols', |
709 'pymdownx.tasklist', 'pymdownx.smartsymbols', |
709 ]) |
710 ]) |
710 pyMdown = True |
711 pyMdown = True |
711 except ImportError: |
|
712 pass |
|
713 |
712 |
714 if not pyMdown: |
713 if not pyMdown: |
715 extensions.extend(['extra', 'toc']) |
714 extensions.extend(['extra', 'toc']) |
716 |
715 |
717 # version 2.0 supports only extension names, not instances |
716 # version 2.0 supports only extension names, not instances |