Add dotlinks.py
[lttng-docs.git] / tools / dotlinks.py
CommitLineData
ae307ea2
PP
1#!/usr/bin/env python3
2
3# The MIT License (MIT)
4#
5# Copyright (c) 2015 Philippe Proulx <pproulx@efficios.com>
6#
7# Permission is hereby granted, free of charge, to any person obtaining a copy
8# of this software and associated documentation files (the "Software"), to deal
9# in the Software without restriction, including without limitation the rights
10# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11# copies of the Software, and to permit persons to whom the Software is
12# furnished to do so, subject to the following conditions:
13#
14# The above copyright notice and this permission notice shall be included in
15# all copies or substantial portions of the Software.
16#
17# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23# THE SOFTWARE.
24
25import re
26import os
27import sys
28import json
29import graphviz
30
31
32def _get_section_infos(json_path):
33 with open(json_path) as f:
34 c = f.read()
35
36 return json.loads(c)
37
38
39def dotlinks():
40 section_infos = _get_section_infos(sys.argv[1])
41 digraph = graphviz.Digraph(format='png', engine='dot')
42 digraph.attr('node', fontname='Terminus', fontsize='8')
43
44 for sid, section_info in section_infos.items():
45 color = ''
46 style = ''
47 in_links_count = len(section_info['in-links'])
48 out_links_count = len(section_info['out-links'])
49
50 if in_links_count == 0 and out_links_count == 0:
51 color = '#e62739'
52 elif in_links_count == 0:
53 color = '#fae596'
54 elif out_links_count == 0:
55 color = '#6ed3cf'
56
57 if color:
58 style = 'filled'
59
60 digraph.node(sid, style=style, color=color)
61
62 for sid, section_info in section_infos.items():
63 out_links = section_info['out-links']
64
65 for out_link in out_links:
66 if 'section' in out_link:
67 dest = out_link['section']
68 digraph.edge(sid, dest)
69
70 digraph.render(filename='linkgraph')
71
72 return True
73
74
75if __name__ == '__main__':
76 sys.exit(0 if dotlinks() else 1)
This page took 0.024386 seconds and 4 git commands to generate.