From 8cde0b47b8e22f20f6cd7c077b0d66d841549f5e Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 26 May 1997 16:35:46 +0000 Subject: [PATCH] Added keyword searching. --- Tools/faqwiz/faqwiz.py | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/Tools/faqwiz/faqwiz.py b/Tools/faqwiz/faqwiz.py index 22764985742..17a79d6ced9 100644 --- a/Tools/faqwiz/faqwiz.py +++ b/Tools/faqwiz/faqwiz.py @@ -386,22 +386,43 @@ def do_search(self): if not query: self.error("Empty query string!") return - self.prologue(T_SEARCH) - if self.ui.querytype != 'regex': + if self.ui.querytype == 'simple': for c in '\\.[]?+^$*': if c in query: query = replace(query, c, '\\'+c) - if self.ui.casefold == 'no': - p = regex.compile(query) + queries = [query] + elif self.ui.querytype in ('anykeywords', 'allkeywords'): + import regsub + words = string.split(regsub.gsub('[^a-zA-Z0-9]+', ' ', query)) + if not words: + self.error("No keywords specified!") + return + words = map(lambda w: '\<%s\>' % w, words) + if self.ui.querytype[:3] == 'any': + queries = [string.join(words, '\|')] + else: + queries = words else: - p = regex.compile(query, regex.casefold) + # Default to regex + queries = [query] + self.prologue(T_SEARCH) + progs = [] + for query in queries: + if self.ui.casefold == 'no': + p = regex.compile(query) + else: + p = regex.compile(query, regex.casefold) + progs.append(p) hits = [] for file in self.dir.list(): try: entry = self.dir.open(file) except FileError: constants - if p.search(entry.title) >= 0 or p.search(entry.body) >= 0: + for p in progs: + if p.search(entry.title) < 0 and p.search(entry.body) < 0: + break + else: hits.append(file) if not hits: emit(NO_HITS, self.ui, count=0)