eudev/make-man-index.py
Lennart Poettering 6b91ae13f2 python: change license to LGPL 2.1
The original license has been MIT for this code, but David Strauss (its
original author) agreed to relicense it to LGPL 2.1 for inclusion in
systemd.
2012-09-13 04:06:11 +02:00

97 lines
2.9 KiB
Python
Executable File

#!/usr/bin/env python
# -*- Mode: python; indent-tabs-mode: nil -*- */
#
# This file is part of systemd.
#
# Copyright 2012 Lennart Poettering
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
from xml.etree.ElementTree import parse, Element, SubElement, tostring
from sys import argv, stdout
index = {}
def prettify(elem, indent = 0):
s = "\n" + indent * " "
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = s + " "
for e in elem:
prettify(e, indent + 1)
if not e.tail or not e.tail.strip():
e.tail = s + " "
if not e.tail or not e.tail.strip():
e.tail = s
else:
if indent and (not elem.tail or not elem.tail.strip()):
elem.tail = s
for p in argv[1:]:
t = parse(p)
section = t.find('./refmeta/manvolnum').text
purpose = ' '.join(t.find('./refnamediv/refpurpose').text.split())
for f in t.findall('./refnamediv/refname'):
index[f.text] = (p, section, purpose)
html = Element('html')
head = SubElement(html, 'head')
title = SubElement(head, 'title')
title.text = 'Manual Page Index'
body = SubElement(html, 'body')
h1 = SubElement(body, 'h1')
h1.text = 'Manual Page Index'
letter = None
for n in sorted(index.keys(), key = str.lower):
path, section, purpose = index[n]
if path.endswith('.xml'):
path = path[:-4] + ".html"
c = path.rfind('/')
if c >= 0:
path = path[c+1:]
if letter is None or n[0].upper() != letter:
letter = n[0].upper()
h2 = SubElement(body, 'h2')
h2.text = letter
ul = SubElement(body, 'ul')
ul.set('style', 'list-style-type:none')
li = SubElement(ul, 'li')
a = SubElement(li, 'a')
a.set('href', path)
a.text = n + '(' + section + ')'
a.tail = ' -- '
i = SubElement(li, 'i')
i.text = purpose
hr = SubElement(body, 'hr')
p = SubElement(body, 'p')
p.text = "This index contains %s entries, referring to %i individual manual pages." % (len(index), len(argv)-1)
if hasattr(stdout, "buffer"):
stdout = stdout.buffer
prettify(html)
stdout.write(tostring(html))