From 028d2fc04b261db1da9f292c3e6606109f202714 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Mon, 14 Mar 2011 12:19:57 +0000 Subject: [PATCH] Currently searches for '..X' match only items exactly equal to '.X'. Change to make such a search match that and also any exactly-matching embedded hierarchical components, such as 'A.X' and 'A.X.Z'. This means that one cannot search for *only* '.X' if there is a hierarchical subitem with the name X, but I think this case will be exceedingly rare. --- src/calibre/library/caches.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/calibre/library/caches.py b/src/calibre/library/caches.py index 97ddaeb51a..119a5492e0 100644 --- a/src/calibre/library/caches.py +++ b/src/calibre/library/caches.py @@ -123,14 +123,23 @@ REGEXP_MATCH = 2 def _match(query, value, matchkind): if query.startswith('..'): query = query[1:] - prefix_match_ok = False + sq = query[1:] + internal_match_ok = True else: - prefix_match_ok = True + internal_match_ok = False for t in value: t = icu_lower(t) try: ### ignore regexp exceptions, required because search-ahead tries before typing is finished if (matchkind == EQUALS_MATCH): - if prefix_match_ok and query[0] == '.': + if internal_match_ok: + print query, t + if query == t: + return True + comps = [c.strip() for c in t.split('.') if c.strip()] + for comp in comps: + if sq == comp: + return True + elif query[0] == '.': if t.startswith(query[1:]): ql = len(query) - 1 if (len(t) == ql) or (t[ql:ql+1] == '.'):