chiark / gitweb /
journal: use _cleanup_
[elogind.git] / make-man-index.py
index 5fa90ae..d9ab5cc 100755 (executable)
 #  along with systemd; If not, see <http://www.gnu.org/licenses/>.
 
 import collections
-import xml.etree.ElementTree as tree
+try:
+    from lxml import etree as tree
+    PRETTY = dict(pretty_print=True)
+except ImportError:
+    import xml.etree.ElementTree as tree
+    PRETTY = {}
 import sys
+import re
+MDASH = ' — ' if sys.version_info.major >= 3 else ' -- '
 
 TEMPLATE = '''\
-<refentry id="systemd.index">
+<refentry id="systemd.index" conditional="HAVE_PYTHON">
 
   <refentryinfo>
     <title>systemd.index</title>
@@ -65,10 +72,16 @@ SUMMARY = '''\
 COUNTS = '\
 This index contains {count} entries, referring to {pages} individual manual pages.'
 
+def check_id(page, t):
+    id = t.getroot().get('id')
+    if not re.search('/' + id + '[.]', page):
+        raise ValueError("id='{}' is not the same as page name '{}'".format(id, page))
+
 def make_index(pages):
     index = collections.defaultdict(list)
     for p in pages:
         t = tree.parse(p)
+        check_id(p, t)
         section = t.find('./refmeta/manvolnum').text
         refname = t.find('./refnamediv/refname').text
         purpose = ' '.join(t.find('./refnamediv/refpurpose').text.split())
@@ -91,7 +104,7 @@ def add_letter(template, letter, pages):
         d = tree.SubElement(b, 'manvolnum')
         d.text = section
 
-        b.tail = ' — ' + purpose # + ' (' + p + ')'
+        b.tail = MDASH + purpose # + ' (' + p + ')'
 
         tree.SubElement(para, 'sbr')
 
@@ -122,4 +135,4 @@ def make_page(xml_files):
     return template
 
 if __name__ == '__main__':
-    tree.dump(make_page(sys.argv[1:]))
+    tree.dump(make_page(sys.argv[1:]), **PRETTY)