summaryrefslogtreecommitdiff
path: root/make-man-index.py
diff options
context:
space:
mode:
Diffstat (limited to 'make-man-index.py')
-rwxr-xr-xmake-man-index.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/make-man-index.py b/make-man-index.py
new file mode 100755
index 0000000000..b40c963f94
--- /dev/null
+++ b/make-man-index.py
@@ -0,0 +1,95 @@
+# -*- 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))