3 from xml
.etree
.ElementTree
import parse
, Element
, SubElement
, tostring
4 from sys
import argv
, stdout
8 def prettify(elem
, indent
= 0):
9 s
= "\n" + indent
* " "
11 if not elem
.text
or not elem
.text
.strip():
14 prettify(e
, indent
+ 1)
15 if not e
.tail
or not e
.tail
.strip():
17 if not e
.tail
or not e
.tail
.strip():
20 if indent
and (not elem
.tail
or not elem
.tail
.strip()):
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
)
30 html
= Element('html')
32 head
= SubElement(html
, 'head')
33 title
= SubElement(head
, 'title')
34 title
.text
= 'Manual Page Index'
36 body
= SubElement(html
, 'body')
37 h1
= SubElement(body
, 'h1')
38 h1
.text
= 'Manual Page Index'
41 for n
in sorted(index
.keys(), key
= str.lower
):
42 path
, section
, purpose
= index
[n
]
44 if path
.endswith('.xml'):
45 path
= path
[:-4] + ".html"
51 if letter
is None or n
[0].upper() != letter
:
54 h2
= SubElement(body
, 'h2')
57 ul
= SubElement(body
, 'ul')
58 ul
.set('style', 'list-style-type:none')
60 li
= SubElement(ul
, 'li')
62 a
= SubElement(li
, 'a')
64 a
.text
= n
+ '(' + section
+ ')'
67 i
= SubElement(li
, 'i')
70 hr
= SubElement(body
, 'hr')
72 p
= SubElement(body
, 'p')
73 p
.text
= "This index contains %s entries, referring to %i individual manual pages." % (len(index
), len(argv
)-1)
75 if hasattr(stdout
, "buffer"):
76 stdout
= stdout
.buffer
78 stdout
.write(tostring(html
))