Use different map structure for _vars.scss

after @hgiesel's idea: https://github.com/ankitects/anki/pull/2016#discussion_r947087871
This commit is contained in:
Matthias Metelka 2022-08-17 00:01:19 +02:00
parent d480e5ce5a
commit 59d618851d
2 changed files with 196 additions and 94 deletions

View file

@ -36,14 +36,27 @@ for line in open(colors_scss):
# TODO: recursive extraction of arbitrarily nested Sass maps? # TODO: recursive extraction of arbitrarily nested Sass maps?
reached_colors = False reached_colors = False
current_key = ""
for line in open(vars_scss): for line in open(vars_scss):
line = line.strip() line = line.strip()
if not line:
if not line or line == "props: (":
continue
if line == ":root {":
break
if line == "colors: (":
reached_colors = True
continue continue
if line == "themes: (": if m := re.match(r"^([^$]+): \(", line):
reached_colors = True current_key = m.group(1)
if reached_colors:
colors[current_key] = {}
else:
props[current_key] = {}
continue continue
if reached_colors: if reached_colors:
@ -53,14 +66,14 @@ for line in open(vars_scss):
line, line,
) )
if m := re.match(r"^(.+): ([^\(]+),$", line): if m := re.match(r"^(.+): (.+),$", line):
var = m.group(1) theme = m.group(1)
val = m.group(2) val = m.group(2)
if reached_colors: if reached_colors:
colors.setdefault(var, []).append(val) colors[current_key][theme] = val
else: else:
props.setdefault(var, []).append(val) props[current_key][theme] = val
copyright_notice = """\ copyright_notice = """\
@ -72,7 +85,10 @@ with open(colors_py, "w") as buf:
buf.write(copyright_notice) buf.write(copyright_notice)
buf.write("# this file is auto-generated from _vars.scss and _colors.scss\n") buf.write("# this file is auto-generated from _vars.scss and _colors.scss\n")
for color, (day, night) in colors.items(): for color, val in colors.items():
day = val["light"] if "light" in val else val["default"]
night = val["dark"] if len(val) > 1 else day
color = color.replace("-", "_").upper() color = color.replace("-", "_").upper()
buf.write(f'{color} = ("{day}", "{night}")\n') buf.write(f'{color} = ("{day}", "{night}")\n')
@ -82,8 +98,8 @@ with open(props_py, "w") as buf:
buf.write("# this file is auto-generated from _vars.scss\n") buf.write("# this file is auto-generated from _vars.scss\n")
for prop, val in props.items(): for prop, val in props.items():
day = val[0] day = val["light"] if "light" in val else val["default"]
night = val[1] if len(val) > 1 else day night = val["dark"] if "dark" in val else day
prop = prop.replace("-", "_").upper() prop = prop.replace("-", "_").upper()
buf.write(f'{prop} = ("{day}", "{night}")\n') buf.write(f'{prop} = ("{day}", "{night}")\n')

View file

@ -12,103 +12,189 @@
$vars: ( $vars: (
props: ( props: (
border-radius-default: 5px, border-radius: (
), default: 5px,
themes: (
light: (
text-fg: get($color, gray, 9),
window-bg: get($color, gray, 1),
frame-bg: get($color, gray, 0),
border: get($color, gray, 3),
faint-border: get($color, gray, 2),
link: get($color, blue, 9),
review-count: #0a0,
new-count: get($color, blue, 9),
learn-count: get($color, orange, 7),
zero-count: get($color, gray, 2),
slightly-grey-text: get($color, gray, 7),
highlight-bg: get($color, cyan, 2),
highlight-fg: black,
disabled: get($color, gray, 5),
card-view-bg: get($color, blue, 5),
note-view-bg: get($color, green, 5),
flag1-fg: get($color, red, 6),
flag2-fg: get($color, orange, 5),
flag3-fg: get($color, green, 5),
flag4-fg: get($color, blue, 5),
flag5-fg: get($color, fuchsia, 4),
flag6-fg: get($color, teal, 5),
flag7-fg: get($color, purple, 6),
flag1-bg: get($color, red, 5),
flag2-bg: get($color, orange, 3),
flag3-bg: get($color, green, 3),
flag4-bg: get($color, blue, 3),
flag5-bg: get($color, fuchsia, 2),
flag6-bg: get($color, teal, 4),
flag7-bg: get($color, purple, 4),
buried-fg: get($color, amber, 5),
suspended-fg: get($color, yellow, 4),
suspended-bg: get($color, yellow, 1),
marked-bg: get($color, indigo, 2),
tooltip-bg: get($color, gray, 0),
focus-border: get($color, indigo, 6),
), ),
dark: ( ),
text-fg: get($color, gray, 0), colors: (
window-bg: get($color, gray, 6), text-fg: (
frame-bg: get($color, gray, 7), light: get($color, gray, 9),
border: get($color, gray, 5), dark: get($color, gray, 0),
faint-border: get($color, gray, 8), ),
link: get($color, blue, 2), window-bg: (
review-count: get($color, green, 4), light: get($color, gray, 1),
new-count: get($color, blue, 2), dark: get($color, gray, 6),
learn-count: get($color, red, 4), ),
zero-count: get($color, gray, 7), frame-bg: (
slightly-grey-text: get($color, gray, 4), light: get($color, gray, 0),
highlight-bg: get($color, cyan, 2), dark: get($color, gray, 7),
highlight-fg: white, ),
disabled: get($color, gray, 6), border: (
card-view-bg: get($color, blue, 4), light: get($color, gray, 3),
note-view-bg: get($color, green, 4), dark: get($color, gray, 5),
flag1-fg: get($color, red, 4), ),
flag2-fg: get($color, orange, 4), faint-border: (
flag3-fg: get($color, green, 4), light: get($color, gray, 2),
flag4-fg: get($color, blue, 4), dark: get($color, gray, 8),
flag5-fg: get($color, fuchsia, 3), ),
flag6-fg: get($color, teal, 4), link: (
flag7-fg: get($color, purple, 5), light: get($color, blue, 9),
flag1-bg: get($color, red, 6), dark: get($color, blue, 2),
flag2-bg: get($color, orange, 5), ),
flag3-bg: get($color, green, 5), review-count: (
flag4-bg: get($color, blue, 5), light: get($color, green, 7),
flag5-bg: get($color, fuchsia, 5), dark: get($color, green, 4),
flag6-bg: get($color, teal, 5), ),
flag7-bg: get($color, purple, 7), new-count: (
buried-fg: get($color, amber, 8), light: get($color, blue, 9),
suspended-fg: get($color, yellow, 1), dark: get($color, blue, 2),
suspended-bg: get($color, yellow, 5), ),
marked-bg: get($color, purple, 5), learn-count: (
tooltip-bg: get($color, gray, 8), light: get($color, orange, 7),
focus-border: get($color, indigo, 5), dark: get($color, red, 4),
),
zero-count: (
light: get($color, gray, 2),
dark: get($color, gray, 7),
),
slightly-grey-text: (
light: get($color, gray, 7),
dark: get($color, gray, 4),
),
highlight-bg: (
light: get($color, cyan, 2),
dark: get($color, cyan, 2),
),
highlight-fg: (
light: black,
dark: white,
),
disabled: (
light: get($color, gray, 5),
dark: get($color, gray, 6),
),
card-view-bg: (
light: get($color, blue, 5),
dark: get($color, blue, 4),
),
note-view-bg: (
light: get($color, green, 5),
dark: get($color, green, 4),
),
flag1-fg: (
light: get($color, red, 6),
dark: get($color, red, 4),
),
flag2-fg: (
light: get($color, orange, 5),
dark: get($color, orange, 4),
),
flag3-fg: (
light: get($color, green, 5),
dark: get($color, green, 4),
),
flag4-fg: (
light: get($color, blue, 5),
dark: get($color, blue, 4),
),
flag5-fg: (
light: get($color, fuchsia, 4),
dark: get($color, fuchsia, 3),
),
flag6-fg: (
light: get($color, teal, 5),
dark: get($color, teal, 4),
),
flag7-fg: (
light: get($color, purple, 6),
dark: get($color, purple, 5),
),
flag1-bg: (
light: get($color, red, 5),
dark: get($color, red, 6),
),
flag2-bg: (
light: get($color, orange, 3),
dark: get($color, orange, 5),
),
flag3-bg: (
light: get($color, green, 3),
dark: get($color, green, 5),
),
flag4-bg: (
light: get($color, blue, 3),
dark: get($color, blue, 5),
),
flag5-bg: (
light: get($color, fuchsia, 2),
dark: get($color, fuchsia, 5),
),
flag6-bg: (
light: get($color, teal, 4),
dark: get($color, teal, 5),
),
flag7-bg: (
light: get($color, purple, 4),
dark: get($color, purple, 7),
),
buried-fg: (
light: get($color, amber, 5),
dark: get($color, amber, 8),
),
suspended-fg: (
light: get($color, yellow, 4),
dark: get($color, yellow, 1),
),
suspended-bg: (
light: get($color, yellow, 1),
dark: get($color, yellow, 5),
),
marked-bg: (
light: get($color, indigo, 2),
dark: get($color, purple, 5),
),
tooltip-bg: (
light: get($color, gray, 0),
dark: get($color, gray, 8),
),
focus-border: (
light: get($color, indigo, 6),
dark: get($color, indigo, 5),
), ),
), ),
); );
:root { :root {
@each $name, $value in get($vars, themes, light) { @each $name, $map in map-get($vars, colors) {
--#{$name}: #{$value}; --#{$name}: #{map-get($map, light)};
} }
&.night-mode { &.night-mode {
@each $name, $value in get($vars, themes, dark) { @each $name, $map in get($vars, colors) {
--#{$name}: #{$value}; --#{$name}: #{map-get($map, dark)};
} }
color-scheme: dark; color-scheme: dark;
} }
} }
/* separate rule for cleaner dev tools appearance */
:root { :root {
@each $name, $value in get($vars, props) { @each $name, $map in map-get($vars, props) {
--#{$name}: #{$value}; $val: map-get($map, default);
@if $val {
--#{$name}: #{$val};
}
}
@each $name, $map in map-get($vars, props) {
$val: map-get($map, light);
@if $val {
--#{$name}: #{$val};
}
}
&.night-mode {
@each $name, $map in map-get($vars, props) {
$val: map-get($map, dark);
@if $val {
--#{$name}: #{$val};
}
}
} }
} }