From 98de6945b397e4f18b8a73b7e8b2215b32b2df0d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 26 Nov 2011 18:38:49 +0530 Subject: [PATCH] =?UTF-8?q?When=20searching=20for=20author=20names=20with?= =?UTF-8?q?=20accented=20characters,=20allow=20the=20non=20accented=20vers?= =?UTF-8?q?ion=20to=20match.=20For=20example,=20searching=20for=20Nino=20w?= =?UTF-8?q?ill=20now=20match=20Ni=C3=B1o.=20Fixes=20#879729=20([Enhancemen?= =?UTF-8?q?t]=20Searching=20for=20accented=20and=20non-standard=20letters)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/calibre/library/caches.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/calibre/library/caches.py b/src/calibre/library/caches.py index 81db8830b7..15d9123b81 100644 --- a/src/calibre/library/caches.py +++ b/src/calibre/library/caches.py @@ -15,7 +15,7 @@ from calibre.utils.config import tweaks, prefs from calibre.utils.date import parse_date, now, UNDEFINED_DATE, clean_date_for_sort from calibre.utils.search_query_parser import SearchQueryParser from calibre.utils.pyparsing import ParseException -from calibre.utils.localization import canonicalize_lang, lang_map +from calibre.utils.localization import canonicalize_lang, lang_map, get_udc from calibre.ebooks.metadata import title_sort, author_to_author_sort from calibre.ebooks.metadata.opf2 import metadata_to_opf from calibre import prints @@ -217,6 +217,7 @@ class ResultCache(SearchQueryParser): # {{{ self.FIELD_MAP = FIELD_MAP self.db_prefs = db_prefs self.composites = {} + self.udc = get_udc() for key in field_metadata: if field_metadata[key]['datatype'] == 'composite': self.composites[field_metadata[key]['rec_index']] = key @@ -261,6 +262,15 @@ class ResultCache(SearchQueryParser): # {{{ # Search functions {{{ + def ascii_name(self, name): + try: + ans = self.udc.decode(name) + if ans == name: + ans = False + except: + ans = False + return ans + def universal_set(self): return set([i[0] for i in self._data if i is not None]) @@ -734,6 +744,8 @@ class ResultCache(SearchQueryParser): # {{{ else: q = query + au_loc = self.FIELD_MAP['authors'] + for id_ in candidates: item = self._data[id_] if item is None: continue @@ -776,6 +788,9 @@ class ResultCache(SearchQueryParser): # {{{ if loc not in exclude_fields: # time for text matching if is_multiple_cols[loc] is not None: vals = [v.strip() for v in item[loc].split(is_multiple_cols[loc])] + if loc == au_loc: + vals += filter(None, map(self.ascii_name, + vals)) else: vals = [item[loc]] ### make into list to make _match happy if _match(q, vals, matchkind):