chiark / gitweb /
keymap: Add Sony VGN
[elogind.git] / make-man-index.py
1 #!/usr/bin/env python
2
3 from xml.etree.ElementTree import parse, Element, SubElement, tostring
4 from sys import argv, stdout
5
6 index = {}
7
8 def 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
23 for p in argv[1:]:
24         t = parse(p)
25         section = t.find('./refmeta/manvolnum').text
26         purpose = ' '.join(t.find('./refnamediv/refpurpose').text.split())
27         for f in t.findall('./refnamediv/refname'):
28                 index[f.text] = (p, section, purpose)
29
30 html = Element('html')
31
32 head = SubElement(html, 'head')
33 title = SubElement(head, 'title')
34 title.text = 'Manual Page Index'
35
36 body = SubElement(html, 'body')
37 h1 = SubElement(body, 'h1')
38 h1.text = 'Manual Page Index'
39
40 letter = None
41 for n in sorted(index.keys(), key = str.lower):
42         path, section, purpose = index[n]
43
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
54                 h2 = SubElement(body, 'h2')
55                 h2.text = letter
56
57                 ul = SubElement(body, 'ul')
58                 ul.set('style', 'list-style-type:none')
59
60         li = SubElement(ul, 'li')
61
62         a = SubElement(li, 'a')
63         a.set('href', path)
64         a.text = n + '(' + section + ')'
65         a.tail = ' -- '
66
67         i = SubElement(li, 'i')
68         i.text = purpose
69
70 hr = SubElement(body, 'hr')
71
72 p = SubElement(body, 'p')
73 p.text = "This index contains %s entries, referring to %i individual manual pages." % (len(index), len(argv)-1)
74
75 if hasattr(stdout, "buffer"):
76         stdout = stdout.buffer
77 prettify(html)
78 stdout.write(tostring(html))