2012-07-16 19:19:39 +04:00
#!/usr/bin/env python
2012-09-13 06:05:28 +04:00
# -*- 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/>.
2012-07-16 19:19:39 +04:00
from xml . etree . ElementTree import parse , Element , SubElement , tostring
2012-07-16 19:39:26 +04:00
from sys import argv , stdout
2012-07-16 19:19:39 +04:00
index = { }
2012-07-16 23:27:06 +04:00
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
2012-07-16 19:39:26 +04:00
for p in argv [ 1 : ] :
2012-07-16 19:19:39 +04:00
t = parse ( p )
2012-07-16 19:39:26 +04:00
section = t . find ( ' ./refmeta/manvolnum ' ) . text
2012-07-16 23:27:06 +04:00
purpose = ' ' . join ( t . find ( ' ./refnamediv/refpurpose ' ) . text . split ( ) )
2012-07-16 19:19:39 +04:00
for f in t . findall ( ' ./refnamediv/refname ' ) :
2012-07-16 19:39:26 +04:00
index [ f . text ] = ( p , section , purpose )
2012-07-16 19:19:39 +04:00
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
2012-07-16 19:39:26 +04:00
for n in sorted ( index . keys ( ) , key = str . lower ) :
path , section , purpose = index [ n ]
2012-07-16 19:19:39 +04:00
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 ( )
2012-07-16 21:26:08 +04:00
h2 = SubElement ( body , ' h2 ' )
2012-07-16 19:19:39 +04:00
h2 . text = letter
ul = SubElement ( body , ' ul ' )
ul . set ( ' style ' , ' list-style-type:none ' )
2012-07-16 20:10:18 +04:00
li = SubElement ( ul , ' li ' )
2012-07-16 19:19:39 +04:00
2012-07-16 20:10:18 +04:00
a = SubElement ( li , ' a ' )
2012-07-16 19:19:39 +04:00
a . set ( ' href ' , path )
a . text = n + ' ( ' + section + ' ) '
2012-07-16 20:10:18 +04:00
a . tail = ' -- '
i = SubElement ( li , ' i ' )
i . text = purpose
2012-07-16 19:19:39 +04:00
2012-07-16 21:11:10 +04:00
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 )
2012-07-25 03:59:28 +04:00
if hasattr ( stdout , " buffer " ) :
stdout = stdout . buffer
2012-07-16 23:27:06 +04:00
prettify ( html )
2012-07-16 19:39:26 +04:00
stdout . write ( tostring ( html ) )