From 536e828cc6dcb410107bfbc7e7a3337b4a6c90d3 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Thu, 28 Mar 2024 13:40:15 +0100 Subject: [PATCH] Refactor doc search class to allow single document search --- novelwriter/core/coretools.py | 40 +++++++++++++++++------------------ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/novelwriter/core/coretools.py b/novelwriter/core/coretools.py index 7b26f71e..f6558600 100644 --- a/novelwriter/core/coretools.py +++ b/novelwriter/core/coretools.py @@ -337,32 +337,32 @@ class DocSearch: """Iteratively search through documents in a project.""" self._regEx.setPattern(self._buildPattern(search)) logger.debug("Searching with pattern '%s'", self._regEx.pattern()) - - num = len(search) storage = project.storage for item in project.tree: if item.isFileType(): - text = storage.getDocumentText(item.itemHandle) - rxItt = self._regEx.globalMatch(text) - count = 0 - capped = False - results = [] - while rxItt.hasNext(): - rxMatch = rxItt.next() - pos = rxMatch.capturedStart() - num = rxMatch.capturedLength() - context = text[pos:pos+100].partition("\n")[0] - if context: - results.append((pos, num, context)) - count += 1 - if count >= nwConst.MAX_SEARCH_RESULT: - capped = True - break - + results, capped = self.searchText(storage.getDocumentText(item.itemHandle)) yield item, results, capped - return + def searchText(self, text: str) -> tuple[list[tuple[int, int, str]], bool]: + """Search a piece of text for RegEx matches.""" + rxItt = self._regEx.globalMatch(text) + count = 0 + capped = False + results = [] + while rxItt.hasNext(): + rxMatch = rxItt.next() + pos = rxMatch.capturedStart() + num = rxMatch.capturedLength() + context = text[pos:pos+100].partition("\n")[0] + if context: + results.append((pos, num, context)) + count += 1 + if count >= nwConst.MAX_SEARCH_RESULT: + capped = True + break + return results, capped + ## # Internal Functions ##