Add man_pages.py generator script
Signed-off-by: George Melikov <mail@gmelikov.ru>
This commit is contained in:
143
scripts/man_pages.py
Executable file
143
scripts/man_pages.py
Executable file
@@ -0,0 +1,143 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||||
|
#
|
||||||
|
# Copyright 2020 George Melikov <mail@gmelikov.ru>
|
||||||
|
#
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
|
man_sections = {
|
||||||
|
'1': 'User Commands',
|
||||||
|
'2': 'System Calls',
|
||||||
|
'3': 'C Library Functions',
|
||||||
|
'4': 'Devices and Special Files',
|
||||||
|
'5': 'File Formats and Conventions',
|
||||||
|
'6': 'Games',
|
||||||
|
'7': 'Miscellaneous',
|
||||||
|
'8': 'System Administration Commands',
|
||||||
|
}
|
||||||
|
|
||||||
|
man_section_dir = 'man'
|
||||||
|
man_section_name = 'Man Pages'
|
||||||
|
|
||||||
|
build_dir = '_build/man'
|
||||||
|
|
||||||
|
|
||||||
|
def run(in_dir, out_dir):
|
||||||
|
pages = {num: [] for num in man_sections}
|
||||||
|
for subdir, dirs, _ in os.walk(in_dir):
|
||||||
|
for section in dirs:
|
||||||
|
section_num = section.replace('man', '')
|
||||||
|
section_suffix = '.' + section_num
|
||||||
|
if section_num not in man_sections:
|
||||||
|
continue
|
||||||
|
out_section_dir = os.path.join(out_dir, build_dir, section)
|
||||||
|
os.makedirs(out_section_dir, exist_ok=True)
|
||||||
|
for page in os.listdir(os.path.join(subdir, section)):
|
||||||
|
if not page.endswith(section_suffix):
|
||||||
|
continue
|
||||||
|
print(page)
|
||||||
|
pages[section_num].append(page)
|
||||||
|
page_file = os.path.join(out_section_dir, page + '.html')
|
||||||
|
with open(page_file, "w") as f:
|
||||||
|
subprocess.run(
|
||||||
|
['mandoc', '-T', 'html', '-O', 'fragment',
|
||||||
|
os.path.join(subdir, section, page)], stdout=f,
|
||||||
|
check=True)
|
||||||
|
break
|
||||||
|
|
||||||
|
man_path = os.path.join(out_dir, man_section_dir)
|
||||||
|
os.makedirs(man_path, exist_ok=True)
|
||||||
|
with open(os.path.join(man_path, 'index.rst'), "w") as f:
|
||||||
|
f.write(
|
||||||
|
"""
|
||||||
|
.. THIS FILE IS AUTOGENERATED, DO NOT EDIT!
|
||||||
|
|
||||||
|
{name}
|
||||||
|
{name_sub}
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
:glob:
|
||||||
|
|
||||||
|
*/index
|
||||||
|
""".format(name=man_section_name,
|
||||||
|
name_sub="=" * len(man_section_name))
|
||||||
|
)
|
||||||
|
|
||||||
|
for section_num, section_pages in pages.items():
|
||||||
|
if not section_pages:
|
||||||
|
continue
|
||||||
|
rst_dir = os.path.join(out_dir, man_section_dir, section_num)
|
||||||
|
os.makedirs(rst_dir, exist_ok=True)
|
||||||
|
section_name = man_sections[section_num]
|
||||||
|
section_name_with_num = '{name} ({num})'.format(
|
||||||
|
name=section_name, num=section_num)
|
||||||
|
with open(os.path.join(rst_dir, 'index.rst'), "w") as f:
|
||||||
|
f.write(
|
||||||
|
"""
|
||||||
|
.. THIS FILE IS AUTOGENERATED, DO NOT EDIT!
|
||||||
|
|
||||||
|
{name}
|
||||||
|
{name_sub}
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
:glob:
|
||||||
|
|
||||||
|
*
|
||||||
|
""".format(name=section_name_with_num,
|
||||||
|
name_sub="=" * len(section_name_with_num))
|
||||||
|
)
|
||||||
|
for page in section_pages:
|
||||||
|
with open(os.path.join(rst_dir, page + '.rst'), "w") as f:
|
||||||
|
f.write(
|
||||||
|
"""
|
||||||
|
.. THIS FILE IS AUTOGENERATED, DO NOT EDIT!
|
||||||
|
|
||||||
|
{name}
|
||||||
|
{name_sub}
|
||||||
|
.. raw:: html
|
||||||
|
|
||||||
|
<div class="man_container">
|
||||||
|
|
||||||
|
.. raw:: html
|
||||||
|
:file: ../../{build_dir}/man{section_num}/{name}.html
|
||||||
|
|
||||||
|
.. raw:: html
|
||||||
|
|
||||||
|
</div>
|
||||||
|
""".format(name=page,
|
||||||
|
build_dir=build_dir,
|
||||||
|
section_num=section_num,
|
||||||
|
name_sub="=" * len(page))
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('man_dir',
|
||||||
|
help='Man pages dir')
|
||||||
|
parser.add_argument('out_dir',
|
||||||
|
help='Sphinx docs dir')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
run(args.man_dir, args.out_dir)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user