14 import shutil |
14 import shutil |
15 import sys |
15 import sys |
16 import tempfile |
16 import tempfile |
17 import threading |
17 import threading |
18 |
18 |
19 from PyQt6.QtCore import Qt, QThread, QUrl, pyqtSignal, pyqtSlot |
19 from PyQt6.QtCore import QEventLoop, QPoint, Qt, QThread, QUrl, pyqtSignal, pyqtSlot |
20 from PyQt6.QtGui import QCursor, QGuiApplication |
20 from PyQt6.QtGui import QCursor, QGuiApplication |
21 from PyQt6.QtWidgets import ( |
21 from PyQt6.QtWidgets import ( |
22 QCheckBox, |
22 QCheckBox, |
23 QGridLayout, |
23 QGridLayout, |
24 QLabel, |
24 QLabel, |
56 self.__layout.addWidget(self.titleLabel) |
56 self.__layout.addWidget(self.titleLabel) |
57 |
57 |
58 self.__previewAvailable = True |
58 self.__previewAvailable = True |
59 |
59 |
60 try: |
60 try: |
61 from PyQt6.QtWebEngineWidgets import QWebEngineView |
61 from PyQt6.QtWebEngineWidgets import ( # __IGNORE_WARNING_I10__ |
|
62 QWebEngineView, |
|
63 ) |
62 |
64 |
63 self.previewView = QWebEngineView(self) |
65 self.previewView = QWebEngineView(self) |
64 self.previewView.page().linkHovered.connect(self.__showLink) |
66 self.previewView.page().linkHovered.connect(self.__showLink) |
65 except ImportError: |
67 except ImportError: |
66 self.__previewAvailable = False |
68 self.__previewAvailable = False |
284 |
286 |
285 def __saveScrollBarPositions(self): |
287 def __saveScrollBarPositions(self): |
286 """ |
288 """ |
287 Private method to save scroll bar positions for a previewed editor. |
289 Private method to save scroll bar positions for a previewed editor. |
288 """ |
290 """ |
289 from PyQt6.QtCore import QPoint |
|
290 |
|
291 try: |
291 try: |
292 pos = self.previewView.scrollPosition() |
292 pos = self.previewView.scrollPosition() |
293 except AttributeError: |
293 except AttributeError: |
294 pos = self.__execJavaScript( |
294 pos = self.__execJavaScript( |
295 "(function() {" |
295 "(function() {" |
326 @param script JavaScript script source to be executed |
326 @param script JavaScript script source to be executed |
327 @type str |
327 @type str |
328 @return result of the script |
328 @return result of the script |
329 @rtype depending upon script result |
329 @rtype depending upon script result |
330 """ |
330 """ |
331 from PyQt6.QtCore import QEventLoop |
|
332 |
|
333 loop = QEventLoop() |
331 loop = QEventLoop() |
334 resultDict = {"res": None} |
332 resultDict = {"res": None} |
335 |
333 |
336 def resultCallback(res, resDict=resultDict): |
334 def resultCallback(res, resDict=resultDict): |
337 if loop and loop.isRunning(): |
335 if loop and loop.isRunning(): |
634 |
632 |
635 @param text text to be processed (string) |
633 @param text text to be processed (string) |
636 @return processed HTML (string) |
634 @return processed HTML (string) |
637 """ |
635 """ |
638 try: |
636 try: |
639 from sphinx.application import Sphinx # __IGNORE_EXCEPTION__ |
637 from sphinx.application import ( # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ |
|
638 Sphinx, |
|
639 ) |
640 except ImportError: |
640 except ImportError: |
641 return self.tr( |
641 return self.tr( |
642 """<p>ReStructuredText preview requires the""" |
642 """<p>ReStructuredText preview requires the""" |
643 """ <b>sphinx</b> package.<br/>Install it with""" |
643 """ <b>sphinx</b> package.<br/>Install it with""" |
644 """ your package manager,'pip install Sphinx' or see""" |
644 """ your package manager,'pip install Sphinx' or see""" |
703 ] |
703 ] |
704 for key in unloadKeys: |
704 for key in unloadKeys: |
705 sys.modules.pop(key) |
705 sys.modules.pop(key) |
706 |
706 |
707 try: |
707 try: |
708 import docutils.core # __IGNORE_EXCEPTION__ |
708 import docutils.core # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I10__ |
709 import docutils.utils # __IGNORE_EXCEPTION__ |
709 import docutils.utils # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I10__ |
710 except ImportError: |
710 except ImportError: |
711 return self.tr( |
711 return self.tr( |
712 """<p>ReStructuredText preview requires the""" |
712 """<p>ReStructuredText preview requires the""" |
713 """ <b>python-docutils</b> package.<br/>Install it with""" |
713 """ <b>python-docutils</b> package.<br/>Install it with""" |
714 """ your package manager, 'pip install docutils' or see""" |
714 """ your package manager, 'pip install docutils' or see""" |
750 @type str |
750 @type str |
751 @return processed HTML |
751 @return processed HTML |
752 @rtype str |
752 @rtype str |
753 """ |
753 """ |
754 try: |
754 try: |
755 import markdown # __IGNORE_EXCEPTION__ |
755 import markdown # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I10__ |
756 except ImportError: |
756 except ImportError: |
757 return self.tr( |
757 return self.tr( |
758 """<p>Markdown preview requires the <b>Markdown</b> """ |
758 """<p>Markdown preview requires the <b>Markdown</b> """ |
759 """package.<br/>Install it with your package manager,""" |
759 """package.<br/>Install it with your package manager,""" |
760 """ 'pip install Markdown' or see """ |
760 """ 'pip install Markdown' or see """ |
761 """<a href="http://pythonhosted.org/Markdown/install.html">""" |
761 """<a href="http://pythonhosted.org/Markdown/install.html">""" |
762 """installation instructions.</a></p>""" |
762 """installation instructions.</a></p>""" |
763 ) |
763 ) |
764 |
764 |
765 from . import MarkdownExtensions, PreviewerHTMLStyles |
765 from . import MarkdownExtensions, PreviewerHTMLStyles # __IGNORE_WARNING_I101__ |
766 |
766 |
767 extensions = [] |
767 extensions = [] |
768 |
768 |
769 mermaidNeeded = False |
769 mermaidNeeded = False |
770 if Preferences.getEditor( |
770 if Preferences.getEditor( |