diff --git a/novelwriter/gui/dochighlight.py b/novelwriter/gui/dochighlight.py index c81291cf..d9919bb9 100644 --- a/novelwriter/gui/dochighlight.py +++ b/novelwriter/gui/dochighlight.py @@ -44,6 +44,10 @@ logger = logging.getLogger(__name__) SPELLRX = QRegularExpression(r"\b[^\s\-\+\/–—\[\]:]+\b") SPELLRX.setPatternOptions(QRegularExpression.UseUnicodePropertiesOption) +SPELLSC = QRegularExpression(nwRegEx.FMT_SC) +SPELLSC.setPatternOptions(QRegularExpression.UseUnicodePropertiesOption) +SPELLSV = QRegularExpression(nwRegEx.FMT_SV) +SPELLSV.setPatternOptions(QRegularExpression.UseUnicodePropertiesOption) BLOCK_NONE = 0 BLOCK_TEXT = 1 @@ -53,7 +57,8 @@ BLOCK_TITLE = 4 class GuiDocHighlighter(QSyntaxHighlighter): - __slots__ = ("_tItem", "_tHandle", "_spellCheck", "_spellErr", "_hRules", "_hStyles") + __slots__ = ("_tHandle", "_isInactive", "_spellCheck", "_spellErr", + "_hRules", "_hStyles", "_rxRules") def __init__(self, document: QTextDocument) -> None: super().__init__(document) @@ -67,6 +72,7 @@ class GuiDocHighlighter(QSyntaxHighlighter): self._hRules: list[tuple[str, dict]] = [] self._hStyles: dict[str, QTextCharFormat] = {} + self._rxRules: list[tuple[QRegularExpression, dict[str, QTextCharFormat]]] = [] self.initHighlighter() @@ -218,11 +224,11 @@ class GuiDocHighlighter(QSyntaxHighlighter): )) # Build a QRegExp for each highlight pattern - self.rxRules = [] + self._rxRules = [] for regEx, regRules in self._hRules: hReg = QRegularExpression(regEx) hReg.setPatternOptions(QRegularExpression.UseUnicodePropertiesOption) - self.rxRules.append((hReg, regRules)) + self._rxRules.append((hReg, regRules)) return @@ -358,7 +364,7 @@ class GuiDocHighlighter(QSyntaxHighlighter): # Regular Text self.setCurrentBlockState(BLOCK_TEXT) - for rX, xFmt in self.rxRules: + for rX, xFmt in self._rxRules: rxItt = rX.globalMatch(text, 0) while rxItt.hasNext(): rxMatch = rxItt.next() @@ -439,6 +445,17 @@ class TextBlockData(QTextBlockUserData): """Run the spell checker and cache the result, and return the list of spell check errors. """ + if "[" in text: + # Strip shortcodes + for rX in [SPELLSC, SPELLSV]: + rxItt = rX.globalMatch(text, 0) + while rxItt.hasNext(): + rxMatch = rxItt.next() + xPos = rxMatch.capturedStart(0) + xLen = rxMatch.capturedLength(0) + xEnd = rxMatch.capturedEnd(0) + text = text[:xPos] + " "*xLen + text[xEnd:] + self._spellErrors = [] rxSpell = SPELLRX.globalMatch(text.replace("_", " "), 0) while rxSpell.hasNext(): diff --git a/tests/reference/guiEditor_Main_Final_0000000000011.nwd b/tests/reference/guiEditor_Main_Final_0000000000011.nwd index ed7002ab..bd73dfd8 100644 --- a/tests/reference/guiEditor_Main_Final_0000000000011.nwd +++ b/tests/reference/guiEditor_Main_Final_0000000000011.nwd @@ -1,10 +1,10 @@ %%~name: New Note %%~path: 0000000000009/0000000000011 %%~kind: PLOT/NOTE -%%~hash: 8ff26f8a18ad6390c2ce725c441ab0c792a125cf -%%~date: 2023-08-25 18:15:35/2023-08-25 18:15:35 +%%~hash: 3d3697638a70fc86cc023df6d42202a262d93905 +%%~date: 2024-04-14 23:46:49/2024-04-14 23:46:49 # Main Plot @tag: MainPlot -This is a file detailing the main plot. +This is a file [i]detailing[/i] the main plot. diff --git a/tests/reference/guiEditor_Main_Final_nwProject.nwx b/tests/reference/guiEditor_Main_Final_nwProject.nwx index c3ee941f..75a5d460 100644 --- a/tests/reference/guiEditor_Main_Final_nwProject.nwx +++ b/tests/reference/guiEditor_Main_Final_nwProject.nwx @@ -1,5 +1,5 @@ - + New Project Jane Doe @@ -54,7 +54,7 @@ Plot - + New Note diff --git a/tests/test_gui/test_gui_guimain.py b/tests/test_gui/test_gui_guimain.py index 4de04a95..dc6ffcfc 100644 --- a/tests/test_gui/test_gui_guimain.py +++ b/tests/test_gui/test_gui_guimain.py @@ -274,7 +274,7 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, projPath, tstPaths, mockRnd): qtbot.keyClick(docEditor, c, delay=KEY_DELAY) qtbot.keyClick(docEditor, Qt.Key_Return, delay=KEY_DELAY) qtbot.keyClick(docEditor, Qt.Key_Return, delay=KEY_DELAY) - for c in "This is a file detailing the main plot.": + for c in "This is a file [i]detailing[/i] the main plot.": qtbot.keyClick(docEditor, c, delay=KEY_DELAY) qtbot.keyClick(docEditor, Qt.Key_Return, delay=KEY_DELAY)