diff options
Diffstat (limited to 'pywal/export.py')
| -rw-r--r-- | pywal/export.py | 59 |
1 files changed, 32 insertions, 27 deletions
diff --git a/pywal/export.py b/pywal/export.py index b175c11..ae619cd 100644 --- a/pywal/export.py +++ b/pywal/export.py @@ -13,38 +13,43 @@ def template(colors, input_file, output_file=None): """Read template file, substitute markers and save the file elsewhere.""" template_data = util.read_file_raw(input_file) - matches = re.finditer(r"(?<=(?<!\{))(\{([^{}]+)\})(?=(?!\}))", "".join(template_data), re.MULTILINE) - print(colors) - for match in matches: - # Check that this color doesn't already exist - match_str = match.group(2) - color, _, funcs = match_str.partition(".") - #if len(funcs) != 0: - #print(funcs) - #print(colors[color].hex_color,input_file) - - '''if match_str not in colors: - # Extract original color and functions - attr, _, funcs = match_str.partition(".") - original_color = colors[attr] - funcs = funcs.split(".") - # Apply every function to the original color - for func in funcs: - # Check if this sub-color has already been generated - if not hasattr(original_color, func): - # Generate new color using function from util.py - func, arg = func.strip(")").split("(") - arg = arg.split(",") - new_color = util.Color( - getattr(util, func)(original_color.hex_color, *arg)) - setattr(original_color, func, new_color) - original_color = getattr(original_color, func)''' + for i in range(len(template_data)): + line = template_data[i] + matches = re.finditer(r"(?<=(?<!\{))(\{([^{}]+)\})(?=(?!\}))", line) + for match in matches: + # Check that this color doesn't already exist + color, _, funcs = match.group(2).partition(".") + if len(funcs) != 0: + to_replace = color + new_color = None + for func in funcs.split(")"): + if len(func) == 0: + continue + func_split = func.split("(") + if len(func_split) > 1: + args = func_split[1].split(",") + else: + args = [] + name = func_split[0] + if name[0] == '.': + name = name[1:] + x = getattr(colors[color], name) + if callable(x): + new_color = x(*args) + if func[0] != '.': + to_replace += "." + to_replace += func + ")" + else: + pass + if not new_color is None: + cname = "color" + new_color.strip + template_data[i] = line.replace(to_replace, cname) + colors[cname] = new_color try: template_data = "".join(template_data).format(**colors) except ValueError: logging.error("Syntax error in template file '%s'.", input_file) return - util.save_file(template_data, output_file) |
