-
Notifications
You must be signed in to change notification settings - Fork 0
/
extract_keyval_pairs.py
68 lines (49 loc) · 1.49 KB
/
extract_keyval_pairs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/env python3
from collections import defaultdict, OrderedDict
import re
import sys
import jinja2
PREFIX = """{% extends 'base.html' %}
{% set page = 'osm_tags' %}
{% block content %}
<h2>Available Tags</h2>
"""
BODY = """<ul>
{% for key, vals in tags.items() %}
{% for val in vals %}
<li><a href="https://wiki.openstreetmap.org/Tag:{{ key }}={{ val }}">{{ key }}={{ val }}</a></li>
{% endfor %}
{% endfor %}
</ul>
"""
SUFFIX = """{% endblock %}"""
def get_tags_in_mrl(mrl):
key_val_pairs = []
for match in re.finditer(r"keyval\('(?P<key>[^']+)','(?P<val>[^']+)'\)",
mrl):
key_val_pairs.append((match.group('key'), match.group('val')))
return key_val_pairs
def main(filename):
tags = defaultdict(set)
with open(filename) as f:
i = 0
for line in f:
for key, val in get_tags_in_mrl(line):
if key != 'name':
tags[key].add(val)
ordered_tags = OrderedDict()
for key in sorted(tags):
ordered_tags[key] = sorted(tags[key])
body_template = jinja2.Template(BODY, trim_blocks=True, lstrip_blocks=True)
body = body_template.render(tags=ordered_tags)
print(PREFIX)
print(body)
print(SUFFIX)
#all_tags = []
#for key, vals in tags.items():
# for val in vals:
# all_tags.append('{}={}'.format(key, val))
#for tag in sorted(all_tags):
# print(tag)
if __name__ == '__main__':
main(sys.argv[1])