Add script used to generate theme colors

Theme colors are originally based on GitHub's theme.

This script (slightly) offsets them to match the color pallete of the
specified theme automatically, and prints them out.

While the adjustments are meant to be minor, color contrast should still
be verified.

Finally, a few themes should not be automated in this way. For example,
the high contrast themes are meant to be purely black & white.
ft.font-size
Gonçalo Silva 2019-03-26 14:24:58 +00:00
parent 95e6d89514
commit 152db98f8a
1 changed files with 102 additions and 0 deletions

View File

@ -0,0 +1,102 @@
#!/usr/bin/python3
#
# Generates color palettes based on the specified background/foreground colors.
#
# Usage: python color_palette_generator.py #fg_hex #bg_hex light|dark
#
# The light variant is based on GitHub's style, while the dark variant is based on pre-existing UberWriter styles.
#
# Accessibility is not accounted for, so make sure to verify contrast: https://webaim.org/resources/contrastchecker/
import operator
import os
import sys
def hex_to_tuple(h):
return tuple(int(h.lstrip('#')[i:i + 2], 16) for i in (0, 2, 4))
def tuple_to_hex(t):
(r, g, b) = t
if r < 0 or g < 0 or b < 0 or r > 255 or g > 255 or b > 255:
return '#%02x%02x%02x (clamped)' % tuple(map(lambda x: max(0, min(x, 255)), t))
else:
return '#%02x%02x%02x' % t
def sub_tuples(t1, t2):
return tuple(map(operator.sub, t1, t2))
if __name__ == '__main__':
if len(sys.argv) != 4:
print("Usage: {} foreground_color background_color light|dark\n" +
"Both colors must be in hexadecimal format, eg. #f6f5f4".format(os.path.basename(__file__)))
exit()
target_foreground_color = hex_to_tuple(sys.argv[1])
target_background_color = hex_to_tuple(sys.argv[2])
dark = sys.argv[3] == "dark"
gh_text_color = hex_to_tuple("#dbdbdb" if dark else "#24292e")
gh_background_color = hex_to_tuple("#353535" if dark else "#ffffff")
gh_alt_background_color = hex_to_tuple("#3a3a3a" if dark else "#f6f8fa")
gh_link_color = hex_to_tuple("#a2c7f8" if dark else "#0366d6")
gh_blockquote_text_color = hex_to_tuple("#959595" if dark else "#6a737d")
gh_blockquote_border_color = hex_to_tuple("#525252" if dark else "#dfe2e5")
gh_header_border_color = hex_to_tuple("#474747" if dark else "#eaecef")
gh_hr_background_color = hex_to_tuple("#505050" if dark else "#e1e4e8")
gh_table_tr_border_color = hex_to_tuple("#696969" if dark else "#c6cbd1")
gh_table_td_border_color = hex_to_tuple("#525252" if dark else "#dfe2e5")
gh_kbd_text_color = hex_to_tuple("#bbbbbb" if dark else "#444d56")
gh_kbd_background_color = hex_to_tuple("#3c3c3c" if dark else "#fafbfc")
gh_kbd_border_color = hex_to_tuple("#696969" if dark else "#c6cbd1")
gh_kbd_shadow_color = hex_to_tuple("#979797" if dark else "#959da5")
text_color_diff = sub_tuples(gh_text_color, target_foreground_color)
background_color_diff = sub_tuples(gh_background_color, target_background_color)
text_color = tuple_to_hex(target_foreground_color)
background_color = tuple_to_hex(target_background_color)
alt_background_color = tuple_to_hex(sub_tuples(gh_alt_background_color, background_color_diff))
link_color = tuple_to_hex(sub_tuples(gh_link_color, text_color_diff))
blockquote_text_color = tuple_to_hex(sub_tuples(gh_blockquote_text_color, text_color_diff))
blockquote_border_color = tuple_to_hex(sub_tuples(gh_blockquote_border_color, background_color_diff))
header_border_color = tuple_to_hex(sub_tuples(gh_header_border_color, background_color_diff))
hr_background_color = tuple_to_hex(sub_tuples(gh_hr_background_color, background_color_diff))
table_tr_border_color = tuple_to_hex(sub_tuples(gh_table_tr_border_color, background_color_diff))
table_td_border_color = tuple_to_hex(sub_tuples(gh_table_td_border_color, background_color_diff))
kbd_text_color = tuple_to_hex(sub_tuples(gh_kbd_text_color, text_color_diff))
kbd_background_color = tuple_to_hex(sub_tuples(gh_kbd_background_color, background_color_diff))
kbd_border_color = tuple_to_hex(sub_tuples(gh_kbd_border_color, background_color_diff))
kbd_shadow_color = tuple_to_hex(sub_tuples(gh_kbd_shadow_color, background_color_diff))
print(("--text-color: {};\n" +
"--background-color: {};\n" +
"--alt-background-color: {};\n" +
"--link-color: {};\n" +
"--blockquote-text-color: {};\n" +
"--blockquote-border-color: {};\n" +
"--header-border-color: {};\n" +
"--hr-background-color: {};\n" +
"--table-tr-border-color: {};\n" +
"--table-td-border-color: {};\n" +
"--kbd-text-color: {};\n" +
"--kbd-background-color: {};\n" +
"--kbd-border-color: {};\n" +
"--kbd-shadow-color: {};\n").format(
text_color,
background_color,
alt_background_color,
link_color,
blockquote_text_color,
blockquote_border_color,
header_border_color,
hr_background_color,
table_tr_border_color,
table_td_border_color,
kbd_text_color,
kbd_background_color,
kbd_border_color,
kbd_shadow_color))