From 17b812ea316edb1989164f9d617fc426ee782480 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 8 Apr 2020 22:56:42 +0530 Subject: [PATCH] Viewer: Allow leading and trailing whitespace in search expressions --- src/calibre/gui2/viewer/search.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/calibre/gui2/viewer/search.py b/src/calibre/gui2/viewer/search.py index 957c991846..bc8fe2a65f 100644 --- a/src/calibre/gui2/viewer/search.py +++ b/src/calibre/gui2/viewer/search.py @@ -56,8 +56,10 @@ spat = regex.compile(r'(\s+)') def text_to_regex(text): + has_leading = text.lstrip() != text + has_trailing = text.rstrip() != text ans = [] - for wpart in spat.split(text): + for wpart in spat.split(text.strip()): if not wpart.strip(): ans.append(r'\s+') else: @@ -67,6 +69,10 @@ def text_to_regex(text): ans.append('[' + r + ']') else: ans.append(regex.escape(part)) + if has_leading: + ans.insert(0, r'\s+') + if has_trailing: + ans.append(r'\s+') return ''.join(ans) @@ -282,14 +288,14 @@ class SearchInput(QWidget): # {{{ vprefs['saved-search-settings'] = sss def save_search_type(self): - text = self.search_box.currentText().strip() + text = self.search_box.currentText() if text and not self.ignore_search_type_changes: sss = vprefs.get('saved-search-settings') or {} sss[text] = {'case_sensitive': self.case_sensitive.isChecked(), 'mode': self.query_type.currentData()} vprefs['saved-search-settings'] = sss def saved_search_selected(self): - text = self.search_box.currentText().strip() + text = self.search_box.currentText() if text: s = (vprefs.get('saved-search-settings') or {}).get(text) if s: @@ -304,7 +310,7 @@ class SearchInput(QWidget): # {{{ self.find_next() def search_query(self, backwards=False): - text = self.search_box.currentText().strip() + text = self.search_box.currentText() if text: return Search( text, self.query_type.currentData() or 'normal',