mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 09:21:26 +03:00
6b91ae13f2
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.
97 lines
2.9 KiB
Python
Executable File
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))
|