def make_theme(theme): if not safe_python.test_safe(os.path.join(theme, "theme.txt"), ["Button", "Label", "WindowBar", "Window", "Menu", "ScrollBar", "Font", "Input"]): BadThemeError = "this theme is corrupted" raise BadThemeError global __cur __cur = {"button":None, "label":None, "window":None, "window_bar":None, "scroll_bar":None, "menu":None, "font":None, "input":None} global __theme __theme = theme data = open(os.path.join(__theme, "theme.txt"), "rU").read() exec data a = Theme(theme) a.compile_theme(__cur) return a
def load_theme(foldername): filename = os.path.join(foldername, "theme.txt") if not safe_python.test_safe(filename, all_functions): return False f = open(filename, "rU").read() f.replace("\r", "\n") data = {} current_widget = [None, {}] for line in f.split("\n"): values = get_values(line) if not values: continue if matches(values, ["{", "*", "}"]): data[values[1]] = {} if matches(values, ["{", "*", ":"]): #this is pushing the latest widget to a new one if current_widget[0] or current_widget[1]: data[current_widget[0]] = current_widget[1] current_widget = [values[1], {}] if matches(values, ["*", "=", "|", "*", "|"]): if values[3] == None or values[3] == "noimage": current_widget[1][values[0]] = values[3] else: current_widget[1][values[0]] = pygame.image.load(fix_path(foldername, values[3])) try: current_widget[1][values[0]] = current_widget[1][values[0]].convert_alpha() except: pass if matches(values, ["*", "=", "*"]): current_widget[1][values[0]] = values[2] elif matches(values, ["*", "=", "*->"]): current_widget[1][values[0]] = values[2::] if matches(values, ["*", "=", "$", "*", "*"]): current_widget[1][values[0]] = pygame.font.Font(fix_path(foldername, values[3]), values[4]) if values[-1] == "}": data[current_widget[0]] = current_widget[1] current_widget = [None, {}] if current_widget[0] or current_widget[1]: if not current_widget[0] in data: data[current_widget[0]] = current_widget[1] else: for i in current_widget[1]: data[current_widget[0]][i] = current_widget[1][i] return data