From 12c98a21f03f8a119234bf776d315eaeda907833 Mon Sep 17 00:00:00 2001 From: luoliyan Date: Tue, 21 Feb 2017 17:27:50 +0930 Subject: [PATCH 1/3] Allow wildcard tag deletion --- anki/tags.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/anki/tags.py b/anki/tags.py index 306f182de..f494c5ba5 100644 --- a/anki/tags.py +++ b/anki/tags.py @@ -102,7 +102,7 @@ class TagManager: res = self.col.db.all( "select id, tags from notes where id in %s and (%s)" % ( ids2str(ids), lim), - **dict([("_%d" % x, '%% %s %%' % y) + **dict([("_%d" % x, '%% %s %%' % y.replace('*', '%')) for x, y in enumerate(newTags)])) # update tags nids = [] @@ -139,13 +139,16 @@ class TagManager: return self.join(self.canonify(currentTags)) def remFromStr(self, deltags, tags): - "Delete tags if they don't exists." + "Delete tags if they exist." + def wildcard(pat, str): + return '*' in pat and re.search( + pat.replace('*', '.*'), str, re.IGNORECASE) currentTags = self.split(tags) for tag in self.split(deltags): # find tags, ignoring case remove = [] for tx in currentTags: - if tag.lower() == tx.lower(): + if (tag.lower() == tx.lower()) or wildcard(tag, tx): remove.append(tx) # remove them for r in remove: From dee0fe28807cd10447ddefaf959ab22ecf867458 Mon Sep 17 00:00:00 2001 From: luoliyan Date: Wed, 22 Feb 2017 18:24:03 +0930 Subject: [PATCH 2/3] Escape unsupported regex chars --- anki/tags.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/anki/tags.py b/anki/tags.py index f494c5ba5..33cda6ef3 100644 --- a/anki/tags.py +++ b/anki/tags.py @@ -141,8 +141,8 @@ class TagManager: def remFromStr(self, deltags, tags): "Delete tags if they exist." def wildcard(pat, str): - return '*' in pat and re.search( - pat.replace('*', '.*'), str, re.IGNORECASE) + pat = re.escape(pat).replace('\\*', '.*') + return '*' in pat and re.search(pat, str, re.IGNORECASE) currentTags = self.split(tags) for tag in self.split(deltags): # find tags, ignoring case From 5b43222f526ce351dfc78c2b2f3231f52a22fe4c Mon Sep 17 00:00:00 2001 From: luoliyan Date: Wed, 22 Feb 2017 19:31:31 +0930 Subject: [PATCH 3/3] Remove unneeded condition --- anki/tags.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/anki/tags.py b/anki/tags.py index 33cda6ef3..2f5e0bbc8 100644 --- a/anki/tags.py +++ b/anki/tags.py @@ -142,7 +142,7 @@ class TagManager: "Delete tags if they exist." def wildcard(pat, str): pat = re.escape(pat).replace('\\*', '.*') - return '*' in pat and re.search(pat, str, re.IGNORECASE) + return re.search(pat, str, re.IGNORECASE) currentTags = self.split(tags) for tag in self.split(deltags): # find tags, ignoring case