2019-10-07 13:38:30 -04:00
|
|
|
import yaml,re, sys
|
2019-10-06 23:05:44 -04:00
|
|
|
|
|
|
|
def configure(theme):
|
|
|
|
if "colors" in theme:
|
|
|
|
colors=theme["colors"]
|
|
|
|
window_colors=theme["window_colors"]
|
|
|
|
for key1,value1 in window_colors.items():
|
|
|
|
for key2,value2 in value1.items():
|
|
|
|
if re.match("#.*",value2) == None:
|
|
|
|
window_colors[key1][key2]=colors[value2]
|
|
|
|
theme["window_colors"]=window_colors
|
|
|
|
|
|
|
|
bar_colors=theme["bar_colors"]
|
|
|
|
for key1,value1 in bar_colors.items():
|
|
|
|
if isinstance(value1,dict):
|
|
|
|
for key2,value2 in value1.items():
|
|
|
|
if re.match("#.*",value2) == None:
|
|
|
|
bar_colors[key1][key2]=colors[value2]
|
|
|
|
else:
|
|
|
|
if re.match("#.*",value1) == None:
|
|
|
|
bar_colors[key1]=colors[value1]
|
|
|
|
theme["bar_colors"]=bar_colors
|
|
|
|
return(theme)
|
|
|
|
|
2019-10-07 13:38:30 -04:00
|
|
|
def validate(theme):
|
|
|
|
abort=lambda msg: sys.exit("Error while loading theme: "+msg)
|
|
|
|
inv_key=lambda key: abort("invalid key \""+key+"\"")
|
|
|
|
for key,value in theme.items():
|
|
|
|
if not(key in ["meta","colors","window_colors","bar_colors"]):
|
|
|
|
inv_key(key)
|
|
|
|
if key=="bar_colors":
|
|
|
|
for key,value in value.items():
|
|
|
|
if not(key in ["separator","background","statusline",
|
|
|
|
"focused_workspace","active_workspace","inactive_workspace","urgent_workspace"]):
|
|
|
|
inv_key(key)
|
|
|
|
if key=="window_colors":
|
|
|
|
for key,value in value.items():
|
|
|
|
if not(key in ["focused","focused_inactive","unfocused","urgent","child_border"]):
|
|
|
|
inv_key(key)
|
|
|
|
|
|
|
|
|
2019-10-06 23:05:44 -04:00
|
|
|
def load(theme_file):
|
|
|
|
f=open(theme_file,mode="r")
|
|
|
|
theme=yaml.load(f,Loader=yaml.FullLoader)
|
|
|
|
f.close()
|
2019-10-07 13:38:30 -04:00
|
|
|
theme=configure(theme)
|
|
|
|
validate(theme)
|
|
|
|
return(theme)
|