diff options
Diffstat (limited to 'graphics/asymptote/generate_asy_list_file.py')
-rw-r--r-- | graphics/asymptote/generate_asy_list_file.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/graphics/asymptote/generate_asy_list_file.py b/graphics/asymptote/generate_asy_list_file.py new file mode 100644 index 0000000000..e28191590e --- /dev/null +++ b/graphics/asymptote/generate_asy_list_file.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +__doc__ = """ +Script to generate asy.list file. Equivalent to Makefile's asy-list.el file's logic +to generate asy.list. +""" + +import argparse +import pathlib +import subprocess as sp +from typing import Optional + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--asy-executable", required=True, help="Asymptote executable") + parser.add_argument("--asy-base-dir", required=True, help="Asymptote base dir") + parser.add_argument("--output-file", required=True, help="Output file") + return parser.parse_args() + + +def run_asy_list(asy_exec: str, base_dir: pathlib.Path, asy_file: Optional[str] = None): + base_args = [asy_exec, "-dir", str(base_dir), "-config", '""', "-render", "0", "-l"] + if asy_file is not None: + base_args.append(asy_file) + out_data = sp.run( + base_args, + stdout=sp.PIPE, + stderr=sp.PIPE, + universal_newlines=True, + check=True, + ) + return out_data.stdout + + +def base_file_to_be_included_in_list_file(base_file_name: str): + if base_file_name.startswith("plain") or base_file_name.startswith("three_"): + return False + if "map" in base_file_name: + return False + return True + + +def main(): + args = parse_args() + base_dir = pathlib.Path(args.asy_base_dir) + base_asy_list = run_asy_list(args.asy_executable, base_dir) + + base_file: pathlib.Path + base_files_to_generate_list = [ + base_file + for base_file in base_dir.glob("*.asy") + if base_file_to_be_included_in_list_file(base_file.name) + ] + base_file_asy_lists = [ + run_asy_list(args.asy_executable, base_dir, str(base_file)) + for base_file in base_files_to_generate_list + ] + with open(args.output_file, "w", encoding="utf-8") as fil: + fil.write(base_asy_list) + for asy_list_info in base_file_asy_lists: + fil.write(asy_list_info) + + +if __name__ == "__main__": + main() |