blob: 1e67287c08482b5f01899ae9bccf6fc3fba5331b [file] [log] [blame]
Lennart Poettering9c4fa6e2012-07-16 17:19:39 +02001#!/usr/bin/env python
2
3from xml.etree.ElementTree import parse, Element, SubElement, tostring
Lennart Poettering88641112012-07-16 17:39:26 +02004from sys import argv, stdout
Lennart Poettering9c4fa6e2012-07-16 17:19:39 +02005
6index = {}
7
Kay Sievers7653b3c2012-07-16 21:27:06 +02008def prettify(elem, indent = 0):
9 s = "\n" + indent * " "
10 if len(elem):
11 if not elem.text or not elem.text.strip():
12 elem.text = s + " "
13 for e in elem:
14 prettify(e, indent + 1)
15 if not e.tail or not e.tail.strip():
16 e.tail = s + " "
17 if not e.tail or not e.tail.strip():
18 e.tail = s
19 else:
20 if indent and (not elem.tail or not elem.tail.strip()):
21 elem.tail = s
22
Lennart Poettering88641112012-07-16 17:39:26 +020023for p in argv[1:]:
Lennart Poettering9c4fa6e2012-07-16 17:19:39 +020024 t = parse(p)
Lennart Poettering88641112012-07-16 17:39:26 +020025 section = t.find('./refmeta/manvolnum').text
Kay Sievers7653b3c2012-07-16 21:27:06 +020026 purpose = ' '.join(t.find('./refnamediv/refpurpose').text.split())
Lennart Poettering9c4fa6e2012-07-16 17:19:39 +020027 for f in t.findall('./refnamediv/refname'):
Lennart Poettering88641112012-07-16 17:39:26 +020028 index[f.text] = (p, section, purpose)
Lennart Poettering9c4fa6e2012-07-16 17:19:39 +020029
30html = Element('html')
31
32head = SubElement(html, 'head')
33title = SubElement(head, 'title')
34title.text = 'Manual Page Index'
35
36body = SubElement(html, 'body')
37h1 = SubElement(body, 'h1')
38h1.text = 'Manual Page Index'
39
40letter = None
Lennart Poettering88641112012-07-16 17:39:26 +020041for n in sorted(index.keys(), key = str.lower):
42 path, section, purpose = index[n]
Lennart Poettering9c4fa6e2012-07-16 17:19:39 +020043
44 if path.endswith('.xml'):
45 path = path[:-4] + ".html"
46
47 c = path.rfind('/')
48 if c >= 0:
49 path = path[c+1:]
50
51 if letter is None or n[0].upper() != letter:
52 letter = n[0].upper()
53
Lennart Poetteringa6c9b1c2012-07-16 19:26:08 +020054 h2 = SubElement(body, 'h2')
Lennart Poettering9c4fa6e2012-07-16 17:19:39 +020055 h2.text = letter
56
57 ul = SubElement(body, 'ul')
58 ul.set('style', 'list-style-type:none')
59
Lennart Poettering92e1ecc2012-07-16 18:10:18 +020060 li = SubElement(ul, 'li')
Lennart Poettering9c4fa6e2012-07-16 17:19:39 +020061
Lennart Poettering92e1ecc2012-07-16 18:10:18 +020062 a = SubElement(li, 'a')
Lennart Poettering9c4fa6e2012-07-16 17:19:39 +020063 a.set('href', path)
64 a.text = n + '(' + section + ')'
Lennart Poettering92e1ecc2012-07-16 18:10:18 +020065 a.tail = ' -- '
66
67 i = SubElement(li, 'i')
68 i.text = purpose
Lennart Poettering9c4fa6e2012-07-16 17:19:39 +020069
Lennart Poettering051eaeb2012-07-16 19:11:10 +020070hr = SubElement(body, 'hr')
71
72p = SubElement(body, 'p')
73p.text = "This index contains %s entries, referring to %i individual manual pages." % (len(index), len(argv)-1)
74
Kay Sievers7653b3c2012-07-16 21:27:06 +020075prettify(html)
Lennart Poettering88641112012-07-16 17:39:26 +020076stdout.write(tostring(html))