#!/usr/bin/env python # This script will format "settingtypes.txt" file found at the root # of 3d_armor modpack into a format readable by LDoc. import sys, os, errno, codecs path = os.path.realpath(__file__) script = os.path.basename(path) d_root = os.path.dirname(os.path.dirname(path)) d_ldoc = os.path.join(d_root, ".ldoc") f_settings = os.path.join(d_root, "settingtypes.txt") if not os.path.isfile(f_settings): print("settingtypes.txt does not exist") sys.exit(errno.ENOENT) i_stream = codecs.open(f_settings, "r", "utf-8") data_in = i_stream.read() i_stream.close() data_in = data_in.replace("\r", "") sets = data_in.split("\n\n") for idx in reversed(range(len(sets))): set = sets[idx] lines = set.split("\n") for idx2 in reversed(range(len(lines))): li = lines[idx2].strip(" \t") if li == "" or li[0] == "[": lines.pop(idx2) if len(lines) == 0: sets.pop(idx) else: sets[idx] = "\n".join(lines) filtered = [] for set in sets: comment = False lines = set.split("\n") new_lines = [] for li in lines: if li[0] == "#": new_lines.append(li) else: new_lines.append(li) filtered.append("\n".join(new_lines)) new_lines = [] settings = [] def parse_setting(set): desc = [] setting = summary = stype = sdefault = soptions = None for li in set.split("\n"): if li[0] == "#": desc.append("-- {}".format(li.lstrip(" #"))) else: setting = li.split(" ")[0] summary = li.split(")")[0].split("(")[-1] li = li.split(")")[-1].strip() rem = li.split(" ") stype = rem[0] rem.pop(0) if len(rem) > 0: sdefault = rem[0] rem.pop(0) if len(rem) > 0: soptions = " ".join(rem) if not setting: return st = "---" if summary: if summary[-1] != ".": summary = "{}.".format(summary) st = "{} {}".format(st, summary) st = "{}\n--".format(st) if len(desc) > 0: st = "{}\n{}\n--".format(st, "\n".join(desc)) st = "{}\n-- @setting {}".format(st, setting) if stype: st = "{}\n-- @settype {}".format(st, stype) if sdefault: st = "{}\n-- @default {}".format(st, sdefault) # TODO: add options settings.append(st) for f in filtered: parse_setting(f) outfile = os.path.join(d_ldoc, "settings.luadoc") data_out = "\n--- 3D Armor Settings\n--\n-- @topic settings\n\n\n{}\n".format("\n\n".join(settings)) o_stream = codecs.open(outfile, "w", "utf-8") if not o_stream: print("ERROR: could not open file for writing: {}".format(outfile)) sys.exit(errno.EIO) o_stream.write(data_out) o_stream.close() print("settings exported to\t{}".format(outfile))