]>
git.ipfire.org Git - thirdparty/systemd.git/blob - tools/make-man-index.py
2 # SPDX-License-Identifier: LGPL-2.1+
7 from xml_helper
import xml_parse
, xml_print
, tree
9 MDASH
= ' — ' if sys
.version_info
.major
>= 3 else ' -- '
12 <refentry id="systemd.index" conditional="HAVE_PYTHON">
15 <title>systemd.index</title>
16 <productname>systemd</productname>
20 <refentrytitle>systemd.index</refentrytitle>
21 <manvolnum>7</manvolnum>
25 <refname>systemd.index</refname>
26 <refpurpose>List all manpages from the systemd project</refpurpose>
33 <title>See Also</title>
35 <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
43 This index contains {count} entries, referring to {pages} individual manual pages.'
46 def check_id(page
, t
):
47 id = t
.getroot().get('id')
48 if not re
.search('/' + id + '[.]', page
):
49 raise ValueError("id='{}' is not the same as page name '{}'".format(id, page
))
51 def make_index(pages
):
52 index
= collections
.defaultdict(list)
56 section
= t
.find('./refmeta/manvolnum').text
57 refname
= t
.find('./refnamediv/refname').text
58 purpose
= ' '.join(t
.find('./refnamediv/refpurpose').text
.split())
59 for f
in t
.findall('./refnamediv/refname'):
60 infos
= (f
.text
, section
, purpose
, refname
)
61 index
[f
.text
[0].upper()].append(infos
)
64 def add_letter(template
, letter
, pages
):
65 refsect1
= tree
.SubElement(template
, 'refsect1')
66 title
= tree
.SubElement(refsect1
, 'title')
68 para
= tree
.SubElement(refsect1
, 'para')
69 for info
in sorted(pages
, key
=lambda info
: str.lower(info
[0])):
70 refname
, section
, purpose
, realname
= info
72 b
= tree
.SubElement(para
, 'citerefentry')
73 c
= tree
.SubElement(b
, 'refentrytitle')
75 d
= tree
.SubElement(b
, 'manvolnum')
78 b
.tail
= MDASH
+ purpose
# + ' (' + p + ')'
80 tree
.SubElement(para
, 'sbr')
82 def add_summary(template
, indexpages
):
85 for group
in indexpages
:
88 refname
, section
, purpose
, realname
= info
89 pages
.add((realname
, section
))
91 refsect1
= tree
.fromstring(SUMMARY
)
92 template
.append(refsect1
)
94 para
= template
.find(".//para[@id='counts']")
95 para
.text
= COUNTS
.format(count
=count
, pages
=len(pages
))
97 def make_page(*xml_files
):
98 template
= tree
.fromstring(TEMPLATE
)
99 index
= make_index(xml_files
)
101 for letter
in sorted(index
):
102 add_letter(template
, letter
, index
[letter
])
104 add_summary(template
, index
.values())
108 if __name__
== '__main__':
109 with
open(sys
.argv
[1], 'wb') as f
:
110 f
.write(xml_print(make_page(*sys
.argv
[2:])))