eric7/EricWidgets/EricSpellCheckedTextEdit.py

Tue, 15 Jun 2021 19:42:36 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 15 Jun 2021 19:42:36 +0200
branch
eric7
changeset 8427
5ccf32f95805
child 8428
2deec2f8a9ab
permissions
-rw-r--r--

EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.

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
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
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
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import sys
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 import enchant
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from enchant import tokenize
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from enchant.errors import TokenizerNotFoundError, DictNotFoundError
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from enchant.utils import trim_suggestions
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from PyQt6.QtCore import pyqtSlot, Qt, QCoreApplication
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 from PyQt6.QtGui import (
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 QAction, QActionGroup, QSyntaxHighlighter, QTextBlockUserData,
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 QTextCharFormat, QTextCursor
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 )
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 from PyQt6.QtWidgets import QMenu, QTextEdit, QPlainTextEdit
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 # TODO: add user dictionaries with respective menu entries
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 class SpellCheckMixin():
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 Class implementing the spell-check mixin for the widget classes.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 # don't show more than this to keep the menu manageable
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 MaxSuggestions = 20
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 def __init__(self):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Constructor
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 self.__highlighter = EnchantHighlighter(self.document())
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 try:
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 # Start with a default dictionary based on the current locale.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 spellDict = enchant.Dict()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 except DictNotFoundError:
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 # Use English dictionary if no locale dictionary is available.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 spellDict = enchant.Dict("en")
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 self.__highlighter.setDict(spellDict)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 def contextMenuEvent(self, evt):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 Protected method to handle context menu events to add a spelling
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 suggestions submenu.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 @param evt reference to the context menu event
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 @type QContextMenuEvent
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 menu = self.__createSpellcheckContextMenu(evt.pos())
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 menu.exec(evt.globalPos())
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 def __createSpellcheckContextMenu(self, pos):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 Private method to create the spell-check context menu.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 @param pos position of the mouse pointer
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 @type QPoint
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 @return context menu with additional spell-check entries
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 @rtype QMenu
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 menu = self.createStandardContextMenu(pos)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 # Add a submenu for setting the spell-check language and
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 # document format.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 menu.addSeparator()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 menu.addMenu(self.__createLanguagesMenu(menu))
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 menu.addMenu(self.__createFormatsMenu(menu))
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 # Try to retrieve a menu of corrections for the right-clicked word
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 spellMenu = self.__createCorrectionsMenu(
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 self.__cursorForMisspelling(pos), menu)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 if spellMenu:
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 menu.insertSeparator(menu.actions()[0])
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 menu.insertMenu(menu.actions()[0], spellMenu)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 return menu
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 def __createCorrectionsMenu(self, cursor, parent=None):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 Private method to create a menu for corrections of the selected word.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 @param cursor reference to the text cursor
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 @type QTextCursor
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 @param parent reference to the parent widget (defaults to None)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 @type QWidget (optional)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 @return menu with corrections
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 @rtype QMenu
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 if cursor is None:
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 return None
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 text = cursor.selectedText()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 suggestions = trim_suggestions(text,
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 self.__highlighter.dict().suggest(text),
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 SpellCheckMixin.MaxSuggestions)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 spellMenu = QMenu(
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 QCoreApplication.translate("SpellCheckMixin",
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 "Spelling Suggestions"),
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 parent)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 for word in suggestions:
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 act = spellMenu.addAction(word)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 act.setData((cursor, word))
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 # Only return the menu if it's non-empty
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 if spellMenu.actions():
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 spellMenu.triggered.connect(self.__correctWord)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 return spellMenu
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 return None
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 def __createLanguagesMenu(self, parent=None):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 Private method to create a menu for selecting the spell-check language.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 @param parent reference to the parent widget (defaults to None)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 @type QWidget (optional)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 @return menu with spell-check languages
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 @rtype QMenu
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 curLanguage = self.__highlighter.dict().tag
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 languageMenu = QMenu(
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 QCoreApplication.translate("SpellCheckMixin", "Language"),
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 parent)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 languageActions = QActionGroup(languageMenu)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 for language in enchant.list_languages():
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 act = QAction(language, languageActions)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 act.setCheckable(True)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 act.setChecked(language == curLanguage)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 act.setData(language)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 languageMenu.addAction(act)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 languageMenu.triggered.connect(self.__setLanguage)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 return languageMenu
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 def __createFormatsMenu(self, parent=None):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 Private method to create a menu for selecting the document format.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 @param parent reference to the parent widget (defaults to None)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 @type QWidget (optional)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 @return menu with document formats
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 @rtype QMenu
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 formatMenu = QMenu(
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 QCoreApplication.translate("SpellCheckMixin", "Format"),
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 parent)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 formatActions = QActionGroup(formatMenu)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 curFormat = self.__highlighter.chunkers()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 for name, chunkers in (
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 (QCoreApplication.translate("SpellCheckMixin", "Text"),
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 []),
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 (QCoreApplication.translate("SpellCheckMixin", "HTML"),
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 [tokenize.HTMLChunker])
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 ):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 act = QAction(name, formatActions)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 act.setCheckable(True)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 act.setChecked(chunkers == curFormat)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 act.setData(chunkers)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 formatMenu.addAction(act)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 formatMenu.triggered.connect(self.__setFormat)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 return formatMenu
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 def __cursorForMisspelling(self, pos):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 Private method to create a text cursor selecting the misspelled word.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 @param pos position of the misspelled word
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 @type QPoint
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 @return text cursor for the misspelled word
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 @rtype QTextCursor
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 cursor = self.cursorForPosition(pos)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 misspelledWords = getattr(cursor.block().userData(), "misspelled", [])
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 # If the cursor is within a misspelling, select the word
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 for (start, end) in misspelledWords:
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 if start <= cursor.positionInBlock() <= end:
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 blockPosition = cursor.block().position()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 cursor.setPosition(blockPosition + start,
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 QTextCursor.MoveMode.MoveAnchor)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 cursor.setPosition(blockPosition + end,
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 QTextCursor.MoveMode.KeepAnchor)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 break
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 if cursor.hasSelection():
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 return cursor
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 else:
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 return None
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 @pyqtSlot(QAction)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 def __correctWord(self, act):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 Private slot to correct the misspelled word with the selected
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 correction.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 @param act reference to the selected action
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 @type QAction
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 cursor, word = act.data()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 cursor.beginEditBlock()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 cursor.removeSelectedText()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 cursor.insertText(word)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 cursor.endEditBlock()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 @pyqtSlot(QAction)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 def __setLanguage(self, act):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 Private slot to set the selected language.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 @param act reference to the selected action
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 @type QAction
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 language = act.data()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 self.__highlighter.setDict(enchant.Dict(language))
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 @pyqtSlot(QAction)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 def __setFormat(self, act):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 Private slot to set the selected document format.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 @param act reference to the selected action
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 @type QAction
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 chunkers = act.data()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 self.__highlighter.setChunkers(chunkers)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 def setFormat(self, formatName):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 Public method to set the document format.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 @param formatName name of the document format
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 @type str
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 self.__highlighter.setChunkers(
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 [tokenize.HTMLChunker]
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 if format == "html" else
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 []
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 )
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 def dict(self):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 Public method to get a reference to the dictionary in use.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 @return reference to the current dictionary
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 @rtype enchant.Dict
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 return self.__highlighter.dict()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 def setDict(self, spellDict):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 Public method to set the dictionary to be used.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 @param spellDict reference to the spell-check dictionary
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 @type emchant.Dict
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 self.__highlighter.setDict(spellDict)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 class EnchantHighlighter(QSyntaxHighlighter):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 Class implementing a QSyntaxHighlighter subclass that consults a
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 pyEnchant dictionary to highlight misspelled words.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 TokenFilters = (tokenize.EmailFilter, tokenize.URLFilter)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 # Define the spell-check style once and just assign it as necessary
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 ErrorFormat = QTextCharFormat()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 ErrorFormat.setUnderlineColor(Qt.GlobalColor.red)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 ErrorFormat.setUnderlineStyle(
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 QTextCharFormat.UnderlineStyle.SpellCheckUnderline)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 def __init__(self, *args):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 Constructor
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 @param *args list of arguments for the QSyntaxHighlighter
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 @type list
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 QSyntaxHighlighter.__init__(self, *args)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 self.__spellDict = None
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 self.__chunkers = []
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 def chunkers(self):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 Public method to get the chunkers in use.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 @return list of chunkers in use
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 @rtype list
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 return self.__chunkers
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 def setChunkers(self, chunkers):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 Public method to set the chunkers to be used.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 @param chunkers chunkers to be used
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 @type list
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 self.__chunkers = chunkers
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 self.setDict(self.dict())
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 def dict(self):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 Public method to get the spelling dictionary in use.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 @return spelling dictionary
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 @rtype enchant.Dict
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 return self.__spellDict
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 def setDict(self, spellDict):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 Public method to set the spelling dictionary to be used.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 @param spellDict spelling dictionary
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 @type enchant.Dict
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 try:
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 self.__tokenizer = tokenize.get_tokenizer(
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 spellDict.tag,
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 chunkers=self.__chunkers,
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 filters=EnchantHighlighter.TokenFilters)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 except TokenizerNotFoundError:
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 # Fall back to the "good for most euro languages" English tokenizer
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 self.__tokenizer = tokenize.get_tokenizer(
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 chunkers=self.__chunkers,
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 filters=EnchantHighlighter.TokenFilters)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 self.__spellDict = spellDict
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 self.rehighlight()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 def highlightBlock(self, text):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 Public method to apply the text highlight.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 @param text text to be spell-checked
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 @type str
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 """Overridden QSyntaxHighlighter method to apply the highlight"""
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 if not self.__spellDict:
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 return
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 # Build a list of all misspelled words and highlight them
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 misspellings = []
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 for (word, pos) in self.__tokenizer(text):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 if not self.__spellDict.check(word):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 self.setFormat(pos, len(word), EnchantHighlighter.ErrorFormat)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 misspellings.append((pos, pos + len(word)))
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 # Store the list so the context menu can reuse this tokenization pass
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 # (Block-relative values so editing other blocks won't invalidate them)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 data = QTextBlockUserData()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 data.misspelled = misspellings
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 self.setCurrentBlockUserData(data)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 class EricSpellCheckedPlainTextEdit(QPlainTextEdit, SpellCheckMixin):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 Class implementing a QPlainTextEdit with built-in spell checker.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 def __init__(self, *args):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 Constructor
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 @param *args list of arguments for the QPlainTextEdit constructor.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 @type list
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 QPlainTextEdit.__init__(self, *args)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 SpellCheckMixin.__init__(self)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 class EricSpellCheckedTextEdit(QTextEdit, SpellCheckMixin):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 Class implementing a QTextEdit with built-in spell checker.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 def __init__(self, *args):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 Constructor
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 @param *args list of arguments for the QPlainTextEdit constructor.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396 @type list
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 QTextEdit.__init__(self, *args)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399 SpellCheckMixin.__init__(self)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 self.setFormat("html")
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 def setAcceptRichText(self, accept):
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405 Public method to set the text edit mode.
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 @param accept flag indicating to accept rich text
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 @type bool
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 """
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 QTextEdit.setAcceptRichText(accept)
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 self.setFormat("html" if accept else "text")
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 if __name__ == '__main__':
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 from PyQt6.QtWidgets import QApplication
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 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
417 spellEdit = EricSpellCheckedPlainTextEdit()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 spellEdit.show()
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419
5ccf32f95805 EricWidgets: added a QTextEdit and QPlainTextEdit subclass with built-in spell-checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 sys.exit(app.exec())

eric ide

mercurial