#!/usr/bin/env python3 # -*- coding: utf-8 -*- from __future__ import annotations import argparse import os from schema import InstructionSetSchema description = """Examples: - Default theme (black on white): python main.py schema.xml -o out.jpg - Dark theme (white on black): python main.py schema.xml -o out.jpg -c dark.json - Blueprint theme (white on blue): python main.py schema.xml -o out.jpg -c blueprint.json - Transparent background: python main.py schema.xml -o out.png -c transparent.json - Directory mode: python main.py -d -o images/ schemas/ """ def processFile(inPath: str, outPath: str, confPath: str, display: bool) -> None: schema = InstructionSetSchema(inPath, confPath, display) schema.save(outPath) if __name__ == "__main__": parser = argparse.ArgumentParser(description=description, formatter_class=argparse.RawTextHelpFormatter) parser.add_argument("schema", help="Path to the schema description. Accepted formats are: YAML, JSON and XML") parser.add_argument("-o", "--output", help="Output path. By default, the output file will have the same name as the schema description with the extension .png") parser.add_argument("-c", "--config", help="Path to the config file", default="config.json") parser.add_argument("-D", "--display", help="Enable pygame display of the result", action="store_true") parser.add_argument("-d", "--directory", help="Enable directory mode. If set, the input and output paths are directories and all files inside the input directory are processed", action="store_true") args = parser.parse_args() if args.directory: if not os.path.isdir(args.schema): print(f"{args.schema} is not a directory") exit(-1) output = args.output if output is None: output = args.schema if not os.path.isdir(output): print(f"{output} is not a directory") exit(-1) paths = os.listdir(args.schema) for path in paths: inPath = os.path.join(args.schema, path) outPath = os.path.join(output, path) outPath = os.path.splitext(outPath)[0] + ".png" processFile(inPath, outPath, args.config, args.display) else: output = args.output if output is None: output = os.path.splitext(args.schema)[0] + ".png" processFile(args.schema, output, args.config, args.display)