import plantuml import sys import time import os f = open(sys.argv[1], 'r').readlines() p = plantuml.PlantUML(url="http://www.plantuml.com/plantuml/svg/") preamble = [] exported = set() def add_preamble(offset): for line in range(offset, len(f)): if "namespace" in f[line]: return line - 1 else: preamble.append(f[line]) def generate_svg(text, name=None): if name is None: name = text.split(' ') name = name[name.index('namespace') + 1] if name in exported: return exported.add(name) print(f"generating: {text}") try: res = p.processes(plantuml_text=('\n'.join(preamble) + text)) except Exception as e: print(e) print(p.get_url(plantuml_text=('\n'.join(preamble) + text))) return name = 'out/' + name open(name + '.svg', 'wb').write(res) os.system(f"inkscape {name + '.svg'} -o {name + '.pdf'}") time.sleep(1) def parse_namespace(offset): print(f"offset: {offset}") depth = 1 contains_subspaces = False for i in range(offset + 1, len(f)): #print(f[i]) depth += f[i].count("{") - f[i].count("}") if "namespace" in f[i]: print("parsing subnamespace") contains_subspaces = True parse_namespace(i) if depth == 0: if not contains_subspaces or True: lines = f[offset:i + 1] #lines = filter(lambda x: "hidden" not in x, lines) generate_svg(''.join(lines)) return i generate_svg(''.join(f), "all") offset = 0 offset = add_preamble(offset) while offset < len(f): #offset = add_preamble(offset) offset = parse_namespace(offset)