#!/usr/bin/env python3 """ Bootstraps a dark-mode icon for any light-mode icon """ import argparse import os import re # These were quickly chosen as a good starting point based on checking contrast against # some light- and dark-mode window backgrounds taken from Ubuntu: # light mode: #FCFCFC # dark mode: #484848 COLOR_MAP = { # "#ffffff": "#111111", # white # "#fff": "#111111", # white (short) "#333333": "#E0E0E0", # off black "#333": "#E0E0E0", # off black (short) "#545454": "#F4EFF3", # dark grey primary "#606060": "#F0EBF0", # dark grey large area "#909090": "#d0d0d0", # medium grey "#b9b9b9": "#8f8f8f", # light grey 1 "#c1c1c1": "#999999", # light grey 2 "#f3f3f3": "#545454", # off white 1 "#f5f5f5": "#545454", # off white 2 "#1A81C4": "#42B8EB", # primary blue "#39b4ea": "#1A81C4", # light blue "#bf2641": "#f2647e", # primary red } def process(src_dir, target_dir): for entry in os.scandir(src_dir): if entry.is_file() and entry.path.endswith(".svg"): processOne(os.path.abspath(entry.path), target_dir) def processOne(src, target_dir): #print('Processing {}'.format(src)) with open(src, 'r') as f: svg = f.read() for key in COLOR_MAP.keys(): expr = re.compile(r'({})'.format(key), re.I) svg = expr.sub(COLOR_MAP[key], svg) target_name = os.path.join(target_dir, os.path.basename(src)) with open(target_name, 'w') as out: out.write(svg) print('Wrote {}'.format(target_name)) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("source_dir") parser.add_argument("target_dir") args = parser.parse_args() process(args.source_dir, args.target_dir)