diff --git a/zooms_generator.py b/zooms_generator.py index c9d7241..f31ff3d 100644 --- a/zooms_generator.py +++ b/zooms_generator.py @@ -18,60 +18,66 @@ def extract_zooms(src_folder): folder = Path(src_folder) zooms = {} - + max_width = 0 max_height = 0 - + idx = 0 for svg_path in folder.glob("*.svg"): - idx += 1 - + print(f"page {idx} : {svg_path.name}") - + zooms[idx] = { "name": svg_path.stem, "width": 0, "height": 0, "zooms": [], } - + tree = ET.parse(svg_path) root = tree.getroot() if "." in root.get("width"): - print(f"WARNING: file {svg_path} has a floating width, it will be rounded", file=sys.stderr) + print( + f"WARNING: file {svg_path} has a floating width, it will be rounded", + file=sys.stderr, + ) zooms[idx]["width"] = round(float(root.get("width"))) if "." in root.get("height"): - print(f"WARNING: file {svg_path} has a floating height, it will be rounded", file=sys.stderr) + print( + f"WARNING: file {svg_path} has a floating height, it will be rounded", + file=sys.stderr, + ) zooms[idx]["height"] = round(float(root.get("height"))) - - for area in root.findall('.//{*}rect'): - zooms[idx]["zooms"].append([ - float(area.get("width")), - float(area.get("height")), - float(area.get("x")), - float(area.get("y")), - ]) + + for area in root.findall(".//{*}rect"): + zooms[idx]["zooms"].append( + [ + float(area.get("width")), + float(area.get("height")), + float(area.get("x")), + float(area.get("y")), + ] + ) return zooms, max_width, max_height def write_json_or_js(zooms, dest_file, is_js): - with open(dest_file, "w") as data_file: - if is_js: data_file.write("PAGES_ZOOMS = ") data_file.write("[\n") first_coma_skiped = False for page_idx in sorted(zooms.keys()): for zoom in zooms[page_idx]["zooms"]: - - if zoom[2] < 0 or zoom[3] < 0 : - print(f"WARNING: negative pos x / pos y in page {page_idx} for zoom {zoom} (is the rectangle flipped?)") - + if zoom[2] < 0 or zoom[3] < 0: + print( + f"WARNING: negative pos x / pos y in page {page_idx} for zoom {zoom} (is the rectangle flipped?)" + ) + if first_coma_skiped: data_file.write(",\n") else: @@ -81,68 +87,86 @@ def write_json_or_js(zooms, dest_file, is_js): def write_html(zooms, dest_file, pages_width, pages_height, prefix, extention): - img_tags = "" for page_idx in sorted(zooms.keys()): img_url = f"{prefix}{zooms[page_idx]['name']}.{extention}" - zoom_html_data = [','.join([str(zoom) for zoom in page_zooms]) for page_zooms in zooms[page_idx]["zooms"]] - zoom_html_str = ';'.join(zoom_html_data) - img_tags = img_tags + f' \n' - + zoom_html_data = [ + ",".join([str(zoom) for zoom in page_zooms]) + for page_zooms in zooms[page_idx]["zooms"] + ] + zoom_html_str = ";".join(zoom_html_data) + img_tags = ( + img_tags + + f' \n' + ) + img_tags = img_tags.strip() - + with open(HTML_TEMPLATE) as template_file, open(dest_file, "w") as data_file: - data = template_file.read().replace(HTML_TO_REPLACE, img_tags) - + data_file.write(data) def generate_argparse(): - """ Generate Melpomene's generator input parser""" - + """Generate Melpomene's generator input parser""" + parser = argparse.ArgumentParser( description="Helper that can generate JSON / JS / HTML files for Melpomene webcomic reader" ) - - parser.add_argument("output_format", choices=["html", "json", "js"], help="The type of output to generate") + + parser.add_argument( + "output_format", + choices=["html", "json", "js"], + help="The type of output to generate", + ) parser.add_argument("svg_folders", help="Path of the folder containing the SVGs") - parser.add_argument("-o", metavar="dest_file", help="Where to write the generator output to") - parser.add_argument("-p", default="", metavar="img_url_prefix", help="What to prefix the URL of the images when using HTML format.") - parser.add_argument("-e", default="png", metavar="img_ext", help="What extention to use in the URL of the images when using HTML format.") - + parser.add_argument( + "-o", metavar="dest_file", help="Where to write the generator output to" + ) + parser.add_argument( + "-p", + default="", + metavar="img_url_prefix", + help="What to prefix the URL of the images when using HTML format.", + ) + parser.add_argument( + "-e", + default="png", + metavar="img_ext", + help="What extention to use in the URL of the images when using HTML format.", + ) + return parser if __name__ == "__main__": - args = generate_argparse().parse_args() - - + # Get the final outout name output = None - + if not args.o: output = "melpomene_data" else: output = args.o - + if args.output_format == "html" and not output.endswith(".html"): output += ".html" - + elif args.output_format == "json" and not output.endswith(".json"): output += ".json" - + elif args.output_format == "js" and not output.endswith(".js"): output += ".js" - + zooms, max_width, max_height = extract_zooms(args.svg_folders) if args.output_format == "html": write_html(zooms, output, max_width, max_height, args.p, args.e) - + elif args.output_format == "json": write_json_or_js(zooms, output, False) - + elif args.output_format == "js": write_json_or_js(zooms, output, True)