src/eric7/EricWidgets/EricSpellCheckedTextEdit.py

Sat, 10 Dec 2022 11:11:08 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 10 Dec 2022 11:11:08 +0100
branch
eric7
changeset 9600
367d1b4fcca8
parent 9473
3f23dbf37dbe
child 9643
10839ab864e0
permissions
-rw-r--r--

Added code to ignore an enchant error happening during eric shutdown.

8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
8881
54e42bc2437a Updated copyright for 2022.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8647
diff changeset
3 # Copyright (c) 2021 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing QTextEdit and QPlainTextEdit widgets with embedded spell
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 checking.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
11 import contextlib
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
13 try:
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
14 import enchant
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
15 import enchant.tokenize
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
16
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
17 from enchant.errors import DictNotFoundError, TokenizerNotFoundError
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
18 from enchant.utils import trim_suggestions
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
19
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
20 ENCHANT_AVAILABLE = True
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
21 except ImportError:
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
22 ENCHANT_AVAILABLE = False
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
24 from PyQt6.QtCore import QCoreApplication, Qt, pyqtSlot
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 from PyQt6.QtGui import (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
26 QAction,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
27 QActionGroup,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
28 QSyntaxHighlighter,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
29 QTextBlockUserData,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
30 QTextCharFormat,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
31 QTextCursor,
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 )
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
33 from PyQt6.QtWidgets import QMenu, QPlainTextEdit, QTextEdit
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
35 if ENCHANT_AVAILABLE:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
36
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
37 class SpellCheckMixin:
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
39 Class implementing the spell-check mixin for the widget classes.
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
41
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
42 # don't show more than this to keep the menu manageable
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
43 MaxSuggestions = 20
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
44
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
45 # default language to be used when no other is set
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
46 DefaultLanguage = None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
47
8431
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
48 # default user lists
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
49 DefaultUserWordList = None
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
50 DefaultUserExceptionList = None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
51
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
52 def __init__(self):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
53 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
54 Constructor
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
55 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
56 self.__highlighter = EnchantHighlighter(self.document())
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
57 try:
8431
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
58 # Start with a default dictionary based on the current locale
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
59 # or the configured default language.
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
60 spellDict = enchant.DictWithPWL(
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
61 SpellCheckMixin.DefaultLanguage,
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
62 SpellCheckMixin.DefaultUserWordList,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
63 SpellCheckMixin.DefaultUserExceptionList,
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
64 )
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
65 except DictNotFoundError:
8901
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
66 try:
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
67 # Use English dictionary if no locale dictionary is
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
68 # available or the default one could not be found.
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
69 spellDict = enchant.DictWithPWL(
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
70 "en",
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
71 SpellCheckMixin.DefaultUserWordList,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
72 SpellCheckMixin.DefaultUserExceptionList,
8901
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
73 )
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
74 except DictNotFoundError:
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
75 # Still no dictionary could be found. Forget about spell
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
76 # checking.
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
77 spellDict = None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
78
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
79 self.__highlighter.setDict(spellDict)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
80
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
81 def contextMenuEvent(self, evt):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
82 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
83 Protected method to handle context menu events to add a spelling
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
84 suggestions submenu.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
85
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
86 @param evt reference to the context menu event
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
87 @type QContextMenuEvent
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
88 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
89 menu = self.__createSpellcheckContextMenu(evt.pos())
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
90 menu.exec(evt.globalPos())
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
91
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
92 def __createSpellcheckContextMenu(self, pos):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
93 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
94 Private method to create the spell-check context menu.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
95
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
96 @param pos position of the mouse pointer
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
97 @type QPoint
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
98 @return context menu with additional spell-check entries
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
99 @rtype QMenu
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
100 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
101 menu = self.createStandardContextMenu(pos)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
102
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
103 # Add a submenu for setting the spell-check language and
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
104 # document format.
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
105 menu.addSeparator()
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
106 self.__addRemoveEntry(self.__cursorForPosition(pos), menu)
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
107 menu.addMenu(self.__createLanguagesMenu(menu))
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
108 menu.addMenu(self.__createFormatsMenu(menu))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
109
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
110 # Try to retrieve a menu of corrections for the right-clicked word
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
111 spellMenu = self.__createCorrectionsMenu(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
112 self.__cursorForMisspelling(pos), menu
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
113 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
114
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
115 if spellMenu:
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
116 menu.insertSeparator(menu.actions()[0])
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
117 menu.insertMenu(menu.actions()[0], spellMenu)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
118
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
119 return menu
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
120
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
121 def __createCorrectionsMenu(self, cursor, parent=None):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
122 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
123 Private method to create a menu for corrections of the selected
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
124 word.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
125
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
126 @param cursor reference to the text cursor
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
127 @type QTextCursor
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
128 @param parent reference to the parent widget (defaults to None)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
129 @type QWidget (optional)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
130 @return menu with corrections
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
131 @rtype QMenu
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
132 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
133 if cursor is None:
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
134 return None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
135
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
136 text = cursor.selectedText()
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
137 suggestions = trim_suggestions(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
138 text,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
139 self.__highlighter.dict().suggest(text),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
140 SpellCheckMixin.MaxSuggestions,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
141 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
142
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
143 spellMenu = QMenu(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
144 QCoreApplication.translate("SpellCheckMixin", "Spelling Suggestions"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
145 parent,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
146 )
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
147 for word in suggestions:
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
148 act = spellMenu.addAction(word)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
149 act.setData((cursor, word))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
150
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
151 if suggestions:
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
152 spellMenu.addSeparator()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
153
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
154 # add management entry
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
155 act = spellMenu.addAction(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
156 QCoreApplication.translate("SpellCheckMixin", "Add to Dictionary")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
157 )
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
158 act.setData((cursor, text, "add"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
159
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
160 spellMenu.triggered.connect(self.__spellMenuTriggered)
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
161 return spellMenu
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
162
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
163 def __addRemoveEntry(self, cursor, menu):
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
164 """
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
165 Private method to create a menu entry to remove the word at the
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
166 menu position.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
167
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
168 @param cursor reference to the text cursor for the misspelled word
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
169 @type QTextCursor
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
170 @param menu reference to the context menu
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
171 @type QMenu
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
172 """
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
173 if cursor is None:
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
174 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
175
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
176 text = cursor.selectedText()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
177 menu.addAction(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
178 QCoreApplication.translate(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
179 "SpellCheckMixin", "Remove '{0}' from Dictionary"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
180 ).format(text),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
181 lambda: self.__addToUserDict(text, "remove"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
182 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
183
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
184 def __createLanguagesMenu(self, parent=None):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
185 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
186 Private method to create a menu for selecting the spell-check
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
187 language.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
188
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
189 @param parent reference to the parent widget (defaults to None)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
190 @type QWidget (optional)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
191 @return menu with spell-check languages
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
192 @rtype QMenu
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
193 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
194 curLanguage = self.__highlighter.dict().tag.lower()
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
195 languageMenu = QMenu(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
196 QCoreApplication.translate("SpellCheckMixin", "Language"), parent
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
197 )
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
198 languageActions = QActionGroup(languageMenu)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
199
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
200 for language in sorted(enchant.list_languages()):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
201 act = QAction(language, languageActions)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
202 act.setCheckable(True)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
203 act.setChecked(language.lower() == curLanguage)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
204 act.setData(language)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
205 languageMenu.addAction(act)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
206
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
207 languageMenu.triggered.connect(self.__setLanguage)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
208 return languageMenu
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
209
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
210 def __createFormatsMenu(self, parent=None):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
211 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
212 Private method to create a menu for selecting the document format.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
213
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
214 @param parent reference to the parent widget (defaults to None)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
215 @type QWidget (optional)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
216 @return menu with document formats
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
217 @rtype QMenu
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
218 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
219 formatMenu = QMenu(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
220 QCoreApplication.translate("SpellCheckMixin", "Format"), parent
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
221 )
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
222 formatActions = QActionGroup(formatMenu)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
223
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
224 curFormat = self.__highlighter.chunkers()
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
225 for name, chunkers in (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
226 (QCoreApplication.translate("SpellCheckMixin", "Text"), []),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
227 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
228 QCoreApplication.translate("SpellCheckMixin", "HTML"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
229 [enchant.tokenize.HTMLChunker],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
230 ),
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
231 ):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
232 act = QAction(name, formatActions)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
233 act.setCheckable(True)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
234 act.setChecked(chunkers == curFormat)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
235 act.setData(chunkers)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
236 formatMenu.addAction(act)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
237
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
238 formatMenu.triggered.connect(self.__setFormat)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
239 return formatMenu
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
240
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
241 def __cursorForPosition(self, pos):
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
242 """
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
243 Private method to create a text cursor selecting the word at the
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
244 given position.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
245
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
246 @param pos position of the misspelled word
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
247 @type QPoint
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
248 @return text cursor for the word
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
249 @rtype QTextCursor
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
250 """
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
251 cursor = self.cursorForPosition(pos)
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
252 cursor.select(QTextCursor.SelectionType.WordUnderCursor)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
253
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
254 if cursor.hasSelection():
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
255 return cursor
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
256 else:
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
257 return None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
258
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
259 def __cursorForMisspelling(self, pos):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
260 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
261 Private method to create a text cursor selecting the misspelled
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
262 word.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
263
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
264 @param pos position of the misspelled word
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
265 @type QPoint
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
266 @return text cursor for the misspelled word
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
267 @rtype QTextCursor
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
268 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
269 cursor = self.cursorForPosition(pos)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
270 misspelledWords = getattr(cursor.block().userData(), "misspelled", [])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
271
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
272 # If the cursor is within a misspelling, select the word
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
273 for (start, end) in misspelledWords:
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
274 if start <= cursor.positionInBlock() <= end:
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
275 blockPosition = cursor.block().position()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
276
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
277 cursor.setPosition(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
278 blockPosition + start, QTextCursor.MoveMode.MoveAnchor
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
279 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
280 cursor.setPosition(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
281 blockPosition + end, QTextCursor.MoveMode.KeepAnchor
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
282 )
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
283 break
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
284
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
285 if cursor.hasSelection():
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
286 return cursor
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
287 else:
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
288 return None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
289
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
290 def __correctWord(self, cursor, word):
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
291 """
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
292 Private method to replace some misspelled text.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
293
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
294 @param cursor reference to the text cursor for the misspelled word
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
295 @type QTextCursor
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
296 @param word replacement text
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
297 @type str
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
298 """
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
299 cursor.beginEditBlock()
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
300 cursor.removeSelectedText()
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
301 cursor.insertText(word)
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
302 cursor.endEditBlock()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
303
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
304 def __addToUserDict(self, word, command):
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
305 """
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
306 Private method to add a word to the user word or exclude list.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
307
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
308 @param word text to be added
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
309 @type str
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
310 @param command command indicating the user dictionary type
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
311 @type str
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
312 """
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
313 if word:
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
314 dictionary = self.__highlighter.dict()
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
315 if command == "add":
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
316 dictionary.add(word)
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
317 elif command == "remove":
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
318 dictionary.remove(word)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
319
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
320 self.__highlighter.rehighlight()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
321
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
322 @pyqtSlot(QAction)
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
323 def __spellMenuTriggered(self, act):
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
324 """
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
325 Private slot to handle a selection of the spell menu.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
326
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
327 @param act reference to the selected action
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
328 @type QAction
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
329 """
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
330 data = act.data()
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
331 if len(data) == 2:
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
332 # replace the misspelled word
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
333 self.__correctWord(*data)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
334
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
335 elif len(data) == 3:
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
336 # dictionary management action
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
337 _, word, command = data
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
338 self.__addToUserDict(word, command)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
339
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
340 @pyqtSlot(QAction)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
341 def __setLanguage(self, act):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
342 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
343 Private slot to set the selected language.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
344
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
345 @param act reference to the selected action
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
346 @type QAction
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
347 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
348 language = act.data()
8629
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
349 self.setLanguage(language)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
350
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
351 @pyqtSlot(QAction)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
352 def __setFormat(self, act):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
353 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
354 Private slot to set the selected document format.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
355
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
356 @param act reference to the selected action
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
357 @type QAction
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
358 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
359 chunkers = act.data()
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
360 self.__highlighter.setChunkers(chunkers)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
361
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
362 def setFormat(self, formatName):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
363 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
364 Public method to set the document format.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
365
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
366 @param formatName name of the document format
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
367 @type str
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
368 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
369 self.__highlighter.setChunkers(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
370 [enchant.tokenize.HTMLChunker] if format == "html" else []
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
371 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
372
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
373 def dict(self):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
374 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
375 Public method to get a reference to the dictionary in use.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
376
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
377 @return reference to the current dictionary
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
378 @rtype enchant.Dict
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
379 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
380 return self.__highlighter.dict()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
381
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
382 def setDict(self, spellDict):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
383 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
384 Public method to set the dictionary to be used.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
385
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
386 @param spellDict reference to the spell-check dictionary
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
387 @type emchant.Dict
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
388 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
389 self.__highlighter.setDict(spellDict)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
390
8629
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
391 @pyqtSlot(str)
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
392 def setLanguage(self, language):
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
393 """
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
394 Public slot to set the spellchecker language.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
395
8629
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
396 @param language language to be set
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
397 @type str
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
398 """
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
399 epwl = self.dict().pwl
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
400 pwl = epwl.provider.file if isinstance(epwl, enchant.Dict) else None
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
401
8629
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
402 epel = self.dict().pel
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
403 pel = epel.provider.file if isinstance(epel, enchant.Dict) else None
8629
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
404 self.setLanguageWithPWL(language, pwl, pel)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
405
8629
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
406 @pyqtSlot(str, str, str)
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
407 def setLanguageWithPWL(self, language, pwl, pel):
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
408 """
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
409 Public slot to set the spellchecker language and associated user
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
410 word lists.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
411
8629
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
412 @param language language to be set
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
413 @type str
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
414 @param pwl file name of the personal word list
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
415 @type str
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
416 @param pel file name of the personal exclude list
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
417 @type str
1b58dc890b87 Extended the Quick Commit (and other commit alike dialogs) to respect the project spell check language settings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8432
diff changeset
418 """
9021
62d6f565f740 Handled an error situation where no spell check dictionary could be found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8901
diff changeset
419 try:
62d6f565f740 Handled an error situation where no spell check dictionary could be found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8901
diff changeset
420 spellDict = enchant.DictWithPWL(language, pwl, pel)
62d6f565f740 Handled an error situation where no spell check dictionary could be found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8901
diff changeset
421 except DictNotFoundError:
62d6f565f740 Handled an error situation where no spell check dictionary could be found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8901
diff changeset
422 try:
62d6f565f740 Handled an error situation where no spell check dictionary could be found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8901
diff changeset
423 # Use English dictionary if a dictionary for the given
62d6f565f740 Handled an error situation where no spell check dictionary could be found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8901
diff changeset
424 # language is not available.
62d6f565f740 Handled an error situation where no spell check dictionary could be found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8901
diff changeset
425 spellDict = enchant.DictWithPWL("en", pwl, pel)
62d6f565f740 Handled an error situation where no spell check dictionary could be found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8901
diff changeset
426 except DictNotFoundError:
62d6f565f740 Handled an error situation where no spell check dictionary could be found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8901
diff changeset
427 # Still no dictionary could be found. Forget about spell
62d6f565f740 Handled an error situation where no spell check dictionary could be found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8901
diff changeset
428 # checking.
62d6f565f740 Handled an error situation where no spell check dictionary could be found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8901
diff changeset
429 spellDict = None
62d6f565f740 Handled an error situation where no spell check dictionary could be found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8901
diff changeset
430 self.__highlighter.setDict(spellDict)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
431
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
432 @classmethod
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
433 def setDefaultLanguage(cls, language, pwl=None, pel=None):
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
434 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
435 Class method to set the default spell-check language.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
436
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
437 @param language language to be set as default
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
438 @type str
8431
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
439 @param pwl file name of the personal word list
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
440 @type str
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
441 @param pel file name of the personal exclude list
8431
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
442 @type str
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
443 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
444 with contextlib.suppress(DictNotFoundError):
8431
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
445 cls.DefaultUserWordList = pwl
bed315a45088 Started adding support for user word lists to the spell check text edits.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8428
diff changeset
446 cls.DefaultUserExceptionList = pel
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
447
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
448 # set default language only, if a dictionary is available
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
449 enchant.Dict(language)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
450 cls.DefaultLanguage = language
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
451
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
452 class EnchantHighlighter(QSyntaxHighlighter):
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453 """
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
454 Class implementing a QSyntaxHighlighter subclass that consults a
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
455 pyEnchant dictionary to highlight misspelled words.
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
457
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
458 TokenFilters = (enchant.tokenize.EmailFilter, enchant.tokenize.URLFilter)
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
460 # Define the spell-check style once and just assign it as necessary
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
461 ErrorFormat = QTextCharFormat()
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
462 ErrorFormat.setUnderlineColor(Qt.GlobalColor.red)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
463 ErrorFormat.setUnderlineStyle(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
464 QTextCharFormat.UnderlineStyle.SpellCheckUnderline
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
465 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
466
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
467 def __init__(self, *args):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
468 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
469 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
470
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
471 @param *args list of arguments for the QSyntaxHighlighter
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
472 @type list
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
473 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
474 QSyntaxHighlighter.__init__(self, *args)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
475
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
476 self.__spellDict = None
8901
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
477 self.__tokenizer = None
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
478 self.__chunkers = []
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
479
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
480 def chunkers(self):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
481 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
482 Public method to get the chunkers in use.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
483
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
484 @return list of chunkers in use
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
485 @rtype list
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
486 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
487 return self.__chunkers
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
488
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
489 def setChunkers(self, chunkers):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
490 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
491 Public method to set the chunkers to be used.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
492
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
493 @param chunkers chunkers to be used
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
494 @type list
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
495 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
496 self.__chunkers = chunkers
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
497 self.setDict(self.dict())
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
498
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
499 def dict(self):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
500 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
501 Public method to get the spelling dictionary in use.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
502
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
503 @return spelling dictionary
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
504 @rtype enchant.Dict
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
505 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
506 return self.__spellDict
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
507
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
508 def setDict(self, spellDict):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
509 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
510 Public method to set the spelling dictionary to be used.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
511
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
512 @param spellDict spelling dictionary
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
513 @type enchant.Dict
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
514 """
8901
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
515 if spellDict:
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
516 try:
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
517 self.__tokenizer = enchant.tokenize.get_tokenizer(
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
518 spellDict.tag,
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
519 chunkers=self.__chunkers,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
520 filters=EnchantHighlighter.TokenFilters,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
521 )
8901
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
522 except TokenizerNotFoundError:
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
523 # Fall back to the "good for most euro languages"
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
524 # English tokenizer
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
525 self.__tokenizer = enchant.tokenize.get_tokenizer(
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
526 chunkers=self.__chunkers,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
527 filters=EnchantHighlighter.TokenFilters,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
528 )
8901
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
529 else:
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
530 self.__tokenizer = None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
531
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
532 self.__spellDict = spellDict
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
533
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
534 self.rehighlight()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
535
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
536 def highlightBlock(self, text):
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
537 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
538 Public method to apply the text highlight.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
539
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
540 @param text text to be spell-checked
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
541 @type str
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
542 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
543 """Overridden QSyntaxHighlighter method to apply the highlight"""
8901
adc47f306e51 Added code to EricSpellCheckedTextEdit in order to cope with the situation where the spellchecking libraries (like aspell or hunspell) are not installed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
544 if self.__spellDict is None or self.__tokenizer is None:
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
545 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
546
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
547 # Build a list of all misspelled words and highlight them
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
548 misspellings = []
9600
367d1b4fcca8 Added code to ignore an enchant error happening during eric shutdown.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
549 with contextlib.suppress(enchant.errors.Error):
367d1b4fcca8 Added code to ignore an enchant error happening during eric shutdown.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
550 for (word, pos) in self.__tokenizer(text):
367d1b4fcca8 Added code to ignore an enchant error happening during eric shutdown.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
551 if not self.__spellDict.check(word):
367d1b4fcca8 Added code to ignore an enchant error happening during eric shutdown.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
552 self.setFormat(pos, len(word), EnchantHighlighter.ErrorFormat)
367d1b4fcca8 Added code to ignore an enchant error happening during eric shutdown.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
553 misspellings.append((pos, pos + len(word)))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
554
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
555 # Store the list so the context menu can reuse this tokenization
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
556 # pass (Block-relative values so editing other blocks won't
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
557 # invalidate them)
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
558 data = QTextBlockUserData()
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
559 data.misspelled = misspellings
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
560 self.setCurrentBlockUserData(data)
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
561
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
562 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
563
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
564 class SpellCheckMixin:
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
565 """
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
566 Class implementing the spell-check mixin for the widget classes.
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
567 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
568
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
569 #
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
570 # This is just a stub to provide the same API as the enchant enabled
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
571 # one.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
572 #
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
573 def __init__(self):
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
574 """
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
575 Constructor
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
576 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
577 pass
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
578
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
579 def setFormat(self, formatName):
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
580 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
581 Public method to set the document format.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
582
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
583 @param formatName name of the document format
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
584 @type str
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
585 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
586 pass
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
587
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
588 def dict(self):
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
589 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
590 Public method to get a reference to the dictionary in use.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
591
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
592 @return reference to the current dictionary
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
593 @rtype enchant.Dict
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
594 """
8647
cdbce48aded8 Corrected some int-type related issues unfolded by Python 3.10.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8639
diff changeset
595 pass
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
596
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
597 def setDict(self, spellDict):
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
598 """
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
599 Public method to set the dictionary to be used.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
600
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
601 @param spellDict reference to the spell-check dictionary
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
602 @type emchant.Dict
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
603 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
604 pass
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
605
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
606 @pyqtSlot(str)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
607 def setLanguage(self, language):
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
608 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
609 Public slot to set the spellchecker language.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
610
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
611 @param language language to be set
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
612 @type str
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
613 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
614 pass
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
615
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
616 @pyqtSlot(str, str, str)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
617 def setLanguageWithPWL(self, language, pwl, pel):
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
618 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
619 Public slot to set the spellchecker language and associated user
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
620 word lists.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
621
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
622 @param language language to be set
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
623 @type str
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
624 @param pwl file name of the personal word list
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
625 @type str
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
626 @param pel file name of the personal exclude list
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
627 @type str
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
628 """
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
629 pass
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
630
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
631 @classmethod
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
632 def setDefaultLanguage(cls, language, pwl=None, pel=None):
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
633 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
634 Class method to set the default spell-check language.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
635
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
636 @param language language to be set as default
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
637 @type str
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
638 @param pwl file name of the personal word list
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
639 @type str
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
640 @param pel file name of the personal exclude list
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
641 @type str
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
642 """
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
643 pass
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
644
8647
cdbce48aded8 Corrected some int-type related issues unfolded by Python 3.10.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8639
diff changeset
645
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
646 class EricSpellCheckedPlainTextEdit(QPlainTextEdit, SpellCheckMixin):
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
647 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
648 Class implementing a QPlainTextEdit with built-in spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
649 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
650
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
651 def __init__(self, *args):
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
652 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
653 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
654
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
655 @param *args list of arguments for the QPlainTextEdit constructor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
656 @type list
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
657 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
658 QPlainTextEdit.__init__(self, *args)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
659 SpellCheckMixin.__init__(self)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
660
8647
cdbce48aded8 Corrected some int-type related issues unfolded by Python 3.10.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8639
diff changeset
661
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
662 class EricSpellCheckedTextEdit(QTextEdit, SpellCheckMixin):
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
663 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
664 Class implementing a QTextEdit with built-in spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
665 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
666
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
667 def __init__(self, *args):
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
668 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
669 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
670
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
671 @param *args list of arguments for the QPlainTextEdit constructor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
672 @type list
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
673 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
674 QTextEdit.__init__(self, *args)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
675 SpellCheckMixin.__init__(self)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
676
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
677 self.setFormat("html")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
678
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
679 def setAcceptRichText(self, accept):
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
680 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
681 Public method to set the text edit mode.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
682
8639
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
683 @param accept flag indicating to accept rich text
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
684 @type bool
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
685 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
686 QTextEdit.setAcceptRichText(self, accept)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8629
diff changeset
687 self.setFormat("html" if accept else "text")
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
688
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
689
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
690 if __name__ == "__main__":
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
691 import os
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
692 import sys
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
693
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
694 from PyQt6.QtWidgets import QApplication
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
695
8428
2deec2f8a9ab Changed some dialogs to use the new QTextEdit and QPlainTextEdit subclasses with spell checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8427
diff changeset
696 if ENCHANT_AVAILABLE:
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
697 dictPath = os.path.expanduser(os.path.join("~", ".eric7", "spelling"))
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
698 SpellCheckMixin.setDefaultLanguage(
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
699 "en_US",
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
700 os.path.join(dictPath, "pwl.dic"),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
701 os.path.join(dictPath, "pel.dic"),
8432
074407b4c107 Extended the spellcheck text edits to add and remove words from user specific dictionaries.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8431
diff changeset
702 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
703
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
704 app = QApplication(sys.argv)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
705 spellEdit = EricSpellCheckedPlainTextEdit()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
706 spellEdit.show()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
707
8427
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
708 sys.exit(app.exec())

eric ide

mercurial