diff --git a/novelwriter/core/coretools.py b/novelwriter/core/coretools.py index 5b4dc6d7..72f6ca8e 100644 --- a/novelwriter/core/coretools.py +++ b/novelwriter/core/coretools.py @@ -343,7 +343,7 @@ class DocSearch: count = 0 capped = False results = [] - for match in re.finditer(self._regEx, text): + for match in self._regEx.finditer(text): pos = match.start(0) num = len(match.group(0)) lim = text[:pos].rfind("\n") + 1 diff --git a/novelwriter/core/tokenizer.py b/novelwriter/core/tokenizer.py index 4c90127a..8dc4f096 100644 --- a/novelwriter/core/tokenizer.py +++ b/novelwriter/core/tokenizer.py @@ -1109,14 +1109,14 @@ class Tokenizer(ABC): # Match Markdown for regEx, fmts in self._rxMarkdown: - for match in re.finditer(regEx, text): + for match in regEx.finditer(text): temp.extend( (match.start(n), match.end(n), fmt, "") for n, fmt in enumerate(fmts) if fmt > 0 ) # Match Shortcodes - for match in re.finditer(REGEX_PATTERNS.shortcodePlain, text): + for match in REGEX_PATTERNS.shortcodePlain.finditer(text): temp.append(( match.start(1), match.end(1), self._shortCodeFmt.get(match.group(1).lower(), 0), @@ -1125,7 +1125,7 @@ class Tokenizer(ABC): # Match Shortcode w/Values tHandle = self._handle or "" - for match in re.finditer(REGEX_PATTERNS.shortcodeValue, text): + for match in REGEX_PATTERNS.shortcodeValue.finditer(text): kind = self._shortCodeVals.get(match.group(1).lower(), 0) temp.append(( match.start(0), match.end(0), @@ -1136,7 +1136,7 @@ class Tokenizer(ABC): # Match Dialogue if self._rxDialogue and hDialog: for regEx, fmtB, fmtE in self._rxDialogue: - for match in re.finditer(regEx, text): + for match in regEx.finditer(text): temp.append((match.start(0), 0, fmtB, "")) temp.append((match.end(0), 0, fmtE, "")) diff --git a/novelwriter/gui/dochighlight.py b/novelwriter/gui/dochighlight.py index 1af885e2..a19e0945 100644 --- a/novelwriter/gui/dochighlight.py +++ b/novelwriter/gui/dochighlight.py @@ -483,20 +483,19 @@ class TextBlockData(QTextBlockUserData): """ if "[" in text: # Strip shortcodes - for rX in [RX_FMT_SC, RX_FMT_SV]: - for match in re.finditer(rX, text[offset:]): - iS = match.start(0) + offset - iE = match.end(0) + offset - if iS >= 0 and iE >= 0: - text = text[:iS] + " "*(iE - iS) + text[iE:] + for regEx in [RX_FMT_SC, RX_FMT_SV]: + for match in regEx.finditer(text, offset): + if (s := match.start(0)) >= 0 and (e := match.end(0)) >= 0: + pad = " "*(e - s) + text = f"{text[:s]}{pad}{text[e:]}" self._spellErrors = [] checker = SHARED.spelling - for match in re.finditer(RX_WORDS, text[offset:].replace("_", " ")): + for match in RX_WORDS.finditer(text.replace("_", " ")): if ( (word := match.group(0)) and not (word.isnumeric() or word.isupper() or checker.checkWord(word)) ): - self._spellErrors.append((match.start(0) + offset, match.end(0) + offset)) + self._spellErrors.append((match.start(0), match.end(0))) return self._spellErrors diff --git a/tests/test_text/test_text_patterns.py b/tests/test_text/test_text_patterns.py index 7f1def90..ae021169 100644 --- a/tests/test_text/test_text_patterns.py +++ b/tests/test_text/test_text_patterns.py @@ -32,7 +32,7 @@ from novelwriter.text.patterns import REGEX_PATTERNS def allMatches(regEx: re.Pattern, text: str) -> list[list[str]]: """Get all matches for a regex.""" result = [] - for match in re.finditer(regEx, text): + for match in regEx.finditer(text): result.append([ (match.group(n), match.start(n), match.end(n)) for n in range((match.lastindex or 0) + 1)