2 # Copyright (C) 2011 Sebastian Pipping <sebastian@pipping.org>
3 # Licensed under GPL v2 or later
11 _pattern_arch_generic = re.compile('^class arch_([a-z0-9_.-]+)\\(generic_([a-z0-9_.-]+)\\):')
12 _pattern_arch_arch = re.compile('^class arch_([a-z0-9_.-]+)\\(arch_([a-z0-9_.-]+)\\):')
13 _pattern_title = re.compile('"([a-z0-9_.-]+)"[ \\t]*:[ \\t]*arch_([a-z0-9_.-]+),?')
15 _pattern_arch_genericliases = {
23 def handle_line(line, subarch_title_to_subarch_id, subarch_id_to_pattern_arch_genericrch_id):
24 x = _pattern_arch_generic.search(line)
29 # Apply alias grouping
30 arch = _pattern_arch_genericliases.get(arch, arch)
32 assert(subarch not in subarch_id_to_pattern_arch_genericrch_id)
33 subarch_id_to_pattern_arch_genericrch_id[subarch] = arch
37 x = _pattern_arch_arch.search(line)
39 child_subarch = x.group(1)
40 parent_subarch = x.group(2)
42 assert(child_subarch not in subarch_id_to_pattern_arch_genericrch_id)
43 subarch_id_to_pattern_arch_genericrch_id[child_subarch] = subarch_id_to_pattern_arch_genericrch_id[parent_subarch]
47 for x in re.finditer(_pattern_title, line):
48 subarch_title = x.group(1)
49 subarch_id = x.group(2)
51 assert(subarch_title not in subarch_title_to_subarch_id)
52 subarch_title_to_subarch_id[subarch_title] = subarch_id
55 def handle_file(fn, subarch_title_to_subarch_id, subarch_id_to_pattern_arch_genericrch_id):
59 handle_line(line, subarch_title_to_subarch_id, subarch_id_to_pattern_arch_genericrch_id)
63 def dump(subarch_title_to_subarch_id, subarch_id_to_pattern_arch_genericrch_id):
64 arch_id_to_subarch_titles = dict()
65 for subarch_title, subarch_id in subarch_title_to_subarch_id.items():
66 arch_id = subarch_id_to_pattern_arch_genericrch_id.get(subarch_id, subarch_id)
68 if arch_id not in arch_id_to_subarch_titles:
69 arch_id_to_subarch_titles[arch_id] = set()
70 arch_id_to_subarch_titles[arch_id].add(subarch_title)
73 f = open('doc/subarches.generated.xml', 'w')
78 <th>Sub-architectures</th>
81 for arch_id, subarch_titles in sorted(arch_id_to_subarch_titles.items()):
86 """ % (arch_id, '\n'.join(textwrap.wrap(' '.join(sorted(subarch_titles)), 60))))
93 f = open('doc/subarches.generated.txt', 'w')
94 for arch_id, subarch_titles in sorted(arch_id_to_subarch_titles.items()):
95 f.write('*%s*::\n' % arch_id)
96 f.write(' %s\n' % ', '.join(sorted(subarch_titles)))
101 if __name__ == '__main__':
102 subarch_title_to_subarch_id = dict()
103 subarch_id_to_pattern_arch_genericrch_id = dict()
105 for (dirpath, dirnames, filenames) in os.walk('modules/catalyst/arch'):
106 for _fn in filenames:
107 if not _fn.endswith('.py'):
110 fn = os.path.join(dirpath, _fn)
111 handle_file(fn, subarch_title_to_subarch_id, subarch_id_to_pattern_arch_genericrch_id)
113 dump(subarch_title_to_subarch_id, subarch_id_to_pattern_arch_genericrch_id)