# blog_dict is a mapping
# (year, month, day) => [list of (file, title, lead, tags)]
-def tag_exists(tag):
+# Add lower-case tags
+_new_dict = {}
+for (year, month, day), posts in blog_dict.items():
+ _new_dict[year, month, day] = _posts = []
+ for _file, _title, _lead, _tags in posts:
+ tags_lower = [tag.lower().replace(' ', '_') for tag in _tags]
+ _posts.append((_file, _title, _lead, _tags, tags_lower))
+blog_dict = _new_dict
+
+
+def real_tag(tag):
+ ltag = tag.lower().replace(' ', '_')
for posts in blog_dict.values():
- for _file, _title, _lead, _tags in posts:
- if tag in _tags:
- return True
- return False
+ for _file, _title, _lead, _tags, _tags_lower in posts:
+ try:
+ ix = _tags_lower.index(ltag)
+ except ValueError:
+ continue
+ else:
+ return _tags[ix].replace(' ', '_')
def _test_post(post, tree):
if op == 'NAME':
tag = tree[1]
assert isinstance(tag, str)
- _tags = post[3]
- return tag in _tags
+ return tag.lower().replace(' ', '_') in post[4]
elif op in ('AND', 'OR'):
value1 = _test_post(post, tree[1])
value2 = _test_post(post, tree[2])