#!/usr/bin/env python3 from argparse import ArgumentParser from os import path from subprocess import run from git import Repo from helpers import compute_directories def parse_arguments(): parser = ArgumentParser() parser.add_argument( 'extensions', type=str.split, help='File extensions to consider when recording pages.' ) parser.add_argument( 'target', help='Folder to generate an index for.' ) parser.add_argument( 'output', help='Path to the output file.' ) return parser.parse_args() def list_files(extensions, folder, repo): directories = compute_directories(extensions, repo) return directories[folder].subfolders, directories[folder].files def generate_index_page(title, directories, files, intro_file): intro_text = '' if intro_file is not None: with open(intro_file) as intro: intro_text = intro.read() dir_list = '\n'.join( f'- [{d}/]({d}/index.html)' for d in directories ) file_list = '\n'.join( f'- [{f}]({f}.html)' for f in files ) return f'''\ % {title} {intro_text} {dir_list} {file_list} ''' def convert_page(content, output): run( ('pandoc', '-s', '-o', output), input=content, check=True, text=True ) def main(arguments): repo = Repo(search_parent_directories=True) target_path = arguments.target extensions = arguments.extensions target = path.relpath(target_path, repo.working_dir) if target == '.': target ='' folders, files = list_files(extensions, target, repo) names = [] intro = None for f in files: name, _ = path.splitext(f) if name == 'README': intro = path.join(repo.working_dir, target, f) else: names.append(name) title = path.basename(target) if target else 'index' convert_page( generate_index_page(title, folders, names, intro), arguments.output ) if __name__ == '__main__': main(parse_arguments())