premiere-libtorrent/gen_todo.py

111 lines
2.8 KiB
Python
Raw Normal View History

import glob
import os
paths = ['src/*.cpp', 'src/kademlia/*.cpp', 'include/libtorrent/*.hpp', 'include/libtorrent/kademlia/*.hpp', 'include/libtorrent/aux_/*.hpp', 'include/libtorrent/extensions/*.hpp']
os.system('ctags %s 2>/dev/null' % ' '.join(paths))
files = []
for p in paths:
files.extend(glob.glob(p))
items = []
# keeps 20 non-comment lines, used to get more context around
# todo-items
context = []
for f in files:
h = open(f)
state = ''
line_no = 0
context_lines = 0
for l in h:
line_no += 1
line = l.strip()
if 'TODO:' in line and line.startswith('//'):
line = line.split('TODO:')[1].strip()
state = 'todo'
items.append({})
items[-1]['location'] = '%s:%d' % (f, line_no)
items[-1]['priority'] = 0
if line[0] in '0123456789':
items[-1]['priority'] = int(line[0])
line = line[1:].strip()
items[-1]['todo'] = line
continue
if state == '':
context.append(l)
if len(context) > 20: context.pop(0)
continue
if state == 'todo':
if line.strip().startswith('//'):
items[-1]['todo'] += '\n'
items[-1]['todo'] += line[2:].strip()
else:
state = 'context'
items[-1]['context'] = ''.join(context) + '<div style="background: #ffff00" width="100%">' + l + '</div>';
context_lines = 1
continue
if state == 'context':
items[-1]['context'] += l
context_lines += 1
if context_lines > 30: state = ''
h.close()
items.sort(key = lambda x: x['priority'], reverse = True)
#for i in items:
# print '\n\n', i['todo'], '\n'
# print i['location'], '\n'
# print 'prio: ', i['priority'], '\n'
# if 'context' in i:
# print i['context'], '\n'
out = open('docs/todo.html', 'w+')
out.write('''<html><head>
<script type="text/javascript">
/* <![CDATA[ */
var expanded = -1
function expand(id) {
if (expanded != -1) {
var ctx = document.getElementById(expanded);
ctx.style.display = "none";
// if we're expanding the field that's already
// expanded, just collapse it
var no_expand = id == expanded;
expanded = -1;
if (no_expand) return;
}
var ctx = document.getElementById(id);
ctx.style.display = "table-row";
expanded = id;
}
/* ]]> */
</script>
</head><body>
<h1>libtorrent todo-list</h1>
<table width="100%" border="1" style="border-collapse: collapse;">''')
index = 0
for i in items:
if not 'context' in i: i['context'] = ''
out.write('<tr><td>relevance&nbsp;%d</td><td><a href="javascript:expand(%d)">%s</a></td><td>%s</td></tr>' \
% (i['priority'], index, i['location'], i['todo'].replace('\n', ' ')))
out.write('<tr id="%d" style="display: none;" colspan="3"><td colspan="3"><h2>%s</h2><h4>%s</h4><pre style="background: #f6f6f6; border: solid 1px #ddd;">%s</pre></td></tr>' \
% (index, i['todo'], i['location'], i['context']))
index += 1
out.write('</table></body></html>')
out.close()