summaryrefslogtreecommitdiff
path: root/pywal/export.py
diff options
context:
space:
mode:
authordylan <dylan.araps@gmail.com>2020-01-23 10:38:33 +0200
committerGitHub <noreply@github.com>2020-01-23 10:38:33 +0200
commitc1d90676f9074cf4131f8cb94aeb2344d6fc8ecc (patch)
tree63e7fe384b10449fd893b5a2da3e90199df21dae /pywal/export.py
parent7ecc2ffd39d1c01639da666dd4dbe0aa4789f85c (diff)
parent3537e8cc8f2af2051dd695ef1ca7247e76e0f74f (diff)
Merge branch 'master' into add-vs-code-support
Diffstat (limited to 'pywal/export.py')
-rw-r--r--pywal/export.py56
1 files changed, 52 insertions, 4 deletions
diff --git a/pywal/export.py b/pywal/export.py
index c67cca0..0c71a76 100644
--- a/pywal/export.py
+++ b/pywal/export.py
@@ -3,17 +3,60 @@ Export colors in various formats.
"""
import logging
import os
+import re
-from .settings import CACHE_DIR, MODULE_DIR, CONF_DIR
from . import util
+from .settings import CACHE_DIR, CONF_DIR, MODULE_DIR
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)
- template_data = "".join(template_data).format(**colors)
-
+ for i, l in enumerate(template_data):
+ for match in re.finditer(r"(?<=(?<!\{))(\{([^{}]+)\})(?=(?!\}))", l):
+ # Get the color, and the functions associated with it
+ cname, _, funcs = match.group(2).partition(".")
+ # Check that functions are needed for this color
+ if len(funcs) == 0:
+ continue
+ # Build up a string which will be replaced with the new color
+ replace_str = cname
+ # Color to be modified copied into new one
+ new_color = util.Color(colors[cname].hex_color)
+ # Execute each function to be done
+ for func in filter(None, funcs.split(")")):
+ # Get function name and arguments
+ func = func.split("(")
+ fname = func[0]
+ if fname[0] == '.':
+ fname = fname[1:]
+ if not hasattr(new_color, fname):
+ logging.error(
+ "Syntax error in template file '%s' on line '%s'",
+ input_file, i)
+ function = getattr(new_color, fname)
+
+ # If the function is callable, call it
+ if callable(function):
+ if len(func) > 1:
+ new_color = function(*func[1].split(","))
+ else:
+ new_color = function()
+ # string to replace generated colors
+ if func[0] != '.':
+ replace_str += "."
+ replace_str += "(".join(func) + ")"
+ # If the color was changed, replace with a unique identifier.
+ if new_color is not colors[cname]:
+ template_data[i] = l.replace(
+ replace_str, "color" + new_color.strip)
+ colors["color" + new_color.strip] = 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)
@@ -31,21 +74,26 @@ def get_export_type(export_type):
"""Convert template type to the right filename."""
return {
"css": "colors.css",
+ "dmenu": "colors-wal-dmenu.h",
"dwm": "colors-wal-dwm.h",
"st": "colors-wal-st.h",
"tabbed": "colors-wal-tabbed.h",
"gtk2": "colors-gtk2.rc",
"json": "colors.json",
"konsole": "colors-konsole.colorscheme",
+ "kitty": "colors-kitty.conf",
"plain": "colors",
"putty": "colors-putty.reg",
"rofi": "colors-rofi.Xresources",
"scss": "colors.scss",
"shell": "colors.sh",
+ "speedcrunch": "colors-speedcrunch.json",
"sway": "colors-sway",
"tty": "colors-tty.sh",
"vscode": "colors-vscode.json",
+ "waybar": "colors-waybar.css",
"xresources": "colors.Xresources",
+ "xmonad": "colors.hs",
"yaml": "colors.yml",
}.get(export_type, export_type)
@@ -60,7 +108,7 @@ def every(colors, output_dir=CACHE_DIR):
join = os.path.join # Minor optimization.
for file in [*os.scandir(template_dir),
*os.scandir(template_dir_user)]:
- if file.name != ".DS_Store":
+ if file.name != ".DS_Store" and not file.name.endswith(".swp"):
template(colors, file.path, join(output_dir, file.name))
logging.info("Exported all files.")