|
1 # This Source Code Form is subject to the terms of the Mozilla Public |
|
2 # License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
|
4 |
|
5 """ |
|
6 Take the *.framedata files from graph-frameclasses.js and combine them |
|
7 into a single graphviz file. |
|
8 |
|
9 stdin: a list of .framedata file names (e.g. from xargs) |
|
10 stdout: a graphviz file |
|
11 |
|
12 e.g. `find <objdir> -name "*.framedata" | python aggregate-frameclasses.py | |
|
13 dot -Tpng -o frameclasses-graph.png -` |
|
14 """ |
|
15 |
|
16 import sys |
|
17 |
|
18 classdict = {} |
|
19 |
|
20 for line in sys.stdin: |
|
21 file = line.strip() |
|
22 fd = open(file) |
|
23 |
|
24 output = None |
|
25 for line in fd: |
|
26 if line.startswith('CLASS-DEF: '): |
|
27 cname = line[11:-1] |
|
28 if cname not in classdict: |
|
29 output = classdict[cname] = [] |
|
30 else: |
|
31 output = None |
|
32 elif output is not None: |
|
33 output.append(line) |
|
34 |
|
35 sys.stdout.write('digraph g {\n') |
|
36 |
|
37 for olist in classdict.itervalues(): |
|
38 for line in olist: |
|
39 sys.stdout.write(line) |
|
40 |
|
41 sys.stdout.write('}\n') |