summaryrefslogtreecommitdiff
path: root/tools/makeindex.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/makeindex.py')
-rwxr-xr-xtools/makeindex.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/tools/makeindex.py b/tools/makeindex.py
new file mode 100755
index 0000000..76816b2
--- /dev/null
+++ b/tools/makeindex.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+# vim: set fileencoding=utf8 :
+
+"""
+Create package index
+"""
+
+if __name__ == '__main__':
+ import os
+ from operator import itemgetter
+ from itertools import groupby
+ from yarl import URL
+
+ pkgs = {}
+
+ for dirpath, dirnames, filenames in os.walk ('.'):
+ dirs = dirpath.split (os.sep)
+ if len (dirs) < 4:
+ continue
+
+ cat = dirs[1]
+ if cat not in {'app', 'devel', 'doc', 'lang', 'system'}:
+ continue
+ pkg = dirs[2]
+ ver = dirs[3]
+
+ i = (cat, pkg, ver)
+ pkgs.setdefault (i, [])
+
+ for f in filenames:
+ # not highlighting anything else currently (doc for example)
+ if dirs[-1] == 'src':
+ pkgs[i].append (os.path.join (*dirs[4:], f))
+
+ for cat, pkgs in groupby (sorted (pkgs.items(), key=itemgetter(0)), key=lambda x: x[0][0]):
+ print (f'{cat}\n{"^"*len(cat)}\n')
+ for (cat, pkg, ver), files in pkgs:
+ heading = f'{pkg}-{ver}'
+ print (f'\n{heading}\n{"*"*len(heading)}\n')
+ disklist = os.path.join (cat, pkg, ver, 'source-disk')
+ if os.path.exists (disklist):
+ with open (disklist) as fd:
+ diskfiles = [x.strip() for x in fd.readlines ()]
+ assert all (map (lambda x: os.path.isfile (os.path.join ('..', 'disks', x)), diskfiles)), diskfiles
+ disks = map (lambda x: URL('../disks/' + x.split('/')[0] + '.zip'), diskfiles)
+ print ('Source disk: ')
+ print (',\n'.join (map (lambda x: f'`{x[0]} <{x[1].raw_path}>`__', enumerate (disks, 1))))
+ print ('')
+ for f in sorted (files, key=lambda x: x.lower()):
+ u = URL (f'{cat}/{pkg}/{ver}/{f}.html')
+ print (f'- `{f} <{u.raw_path}>`__')
+ print ('')
+