import json path = "/home/quant/.local/share/Steam/steamapps/common/Noita/tools_modding/lua_api_documentation.html" lines = open(path).readlines() lines_iter = iter(lines) parsed = [] def parse_arg(arg_s): if "|" in arg_s: raise ValueError("multiple argument types not supported") other, *default = arg_s.split(" = ", maxsplit=1) if default: default = default[0] else: default = None name, typ = other.split(":", maxsplit=1) return { "name": name, "typ": typ, "default": default, } def parse_ret(ret_s): if not ret_s: return None optional = ret_s.endswith("|nil") ret_s = ret_s.removesuffix("|nil") if "|" in ret_s: raise ValueError("multiple return types not supported") if "{" in ret_s: raise ValueError("tables in returns not supported") typ = other name = None if ":" in other: name, typ = other.split(":", maxsplit=1) if name == "entity_id": typ = "entity_id" return { "name": name, "typ": typ, "optional": optional } ignore = { } skipped = 0 # 2 lazy 2 parse xml properly try: while True: line = next(lines_iter) if line.startswith('