]> git.ipfire.org Git - thirdparty/systemd.git/blob - make-man-index.py
journal: include machine ID in QR code
[thirdparty/systemd.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))