103 lines
2.7 KiB
Python
Executable File
103 lines
2.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#
|
|
# Copyright Amazon.com, Inc. or its affiliates. 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.
|
|
# A copy of the License is located at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# or in the "license" file accompanying this file. This file 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 pathlib
|
|
import re
|
|
|
|
import jinja2
|
|
|
|
|
|
CHAPTER_PAT_STR = r'.+"head-ltitle"\>[-\.\w]+\((?P<chap>\d)\)'
|
|
CHAPTER_PAT = re.compile(CHAPTER_PAT_STR)
|
|
|
|
|
|
def get_args():
|
|
pars = argparse.ArgumentParser()
|
|
for arg in [{
|
|
"flags": ["--html-manuals"],
|
|
"nargs": "+",
|
|
"required": True,
|
|
"type": pathlib.Path,
|
|
}, {
|
|
"flags": ["--roff-html-dir"],
|
|
"required": True,
|
|
"type": pathlib.Path,
|
|
}, {
|
|
"flags": ["--template-dir"],
|
|
"required": True,
|
|
"type": pathlib.Path,
|
|
}, {
|
|
"flags": ["--out-file"],
|
|
"required": True,
|
|
"type": pathlib.Path,
|
|
}]:
|
|
flags = arg.pop("flags")
|
|
pars.add_argument(*flags, **arg)
|
|
return pars.parse_args()
|
|
|
|
|
|
def get_manual(man, roff_html_dir):
|
|
record = {
|
|
"title": re.sub("litani-", "litani ", man.stem),
|
|
"anchor": man.stem,
|
|
"body": [],
|
|
"chapter": get_chapter(roff_html_dir / man.name),
|
|
}
|
|
with open(man) as handle:
|
|
for line in handle:
|
|
record["body"].append(line.rstrip())
|
|
return record
|
|
|
|
|
|
def get_chapter(man_html):
|
|
with open(man_html) as handle:
|
|
for line in handle:
|
|
m = CHAPTER_PAT.match(line)
|
|
if m:
|
|
return int(m["chap"])
|
|
raise UserWarning(
|
|
f"No line of roff html output '{man_html}' matched chapter pattern "
|
|
f"'{CHAPTER_PAT_STR}'")
|
|
|
|
|
|
def get_manuals(html_manuals, roff_html_dir):
|
|
ret = []
|
|
for man in html_manuals:
|
|
ret.append(get_manual(man, roff_html_dir))
|
|
return ret
|
|
|
|
|
|
def main():
|
|
args = get_args()
|
|
env = jinja2.Environment(
|
|
loader=jinja2.FileSystemLoader(str(args.template_dir)),
|
|
autoescape=jinja2.select_autoescape(
|
|
enabled_extensions=('html'),
|
|
default_for_string=True))
|
|
manuals = get_manuals(args.html_manuals, args.roff_html_dir)
|
|
|
|
templ = env.get_template("index.jinja.html")
|
|
page = templ.render(manuals=manuals)
|
|
|
|
with open(args.out_file, "w") as handle:
|
|
print(page, file=handle)
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|