summaryrefslogtreecommitdiff
path: root/graphics/asymptote/generate_asy_list_file.py
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/generate_asy_list_file.py')
-rw-r--r--graphics/asymptote/generate_asy_list_file.py65
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()