diff options
| -rw-r--r-- | themes/dupre-color-palette.html | 248 | ||||
| -rw-r--r-- | themes/dupre-palette.png | bin | 138572 -> 46570 bytes | |||
| -rwxr-xr-x | themes/gen-palette-preview.py | 83 |
3 files changed, 156 insertions, 175 deletions
diff --git a/themes/dupre-color-palette.html b/themes/dupre-color-palette.html index 9bbbb951..f3d6ae31 100644 --- a/themes/dupre-color-palette.html +++ b/themes/dupre-color-palette.html @@ -1,183 +1,81 @@ <!DOCTYPE html> <html lang="en"> <head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Color Palette</title> - <style> - body { - font-family: 'Courier New', monospace; - background: #2a2a2a; - color: #f0f0f0; - padding: 20px; - margin: 0; - } - .palette { - display: flex; - flex-wrap: wrap; - gap: 12px; - max-width: 1200px; - } - .swatch { - display: flex; - align-items: center; - gap: 10px; - background: #1a1a1a; - padding: 8px 12px; - border-radius: 4px; - } - .color-box { - width: 4ch; - height: 4ch; - border: 1px solid #555; - border-radius: 2px; - flex-shrink: 0; - } - .label { - font-size: 12px; - line-height: 1.4; - } - .name { - font-weight: bold; - color: #fff; - } - .hex { - color: #999; - } - h1 { - margin-bottom: 20px; - font-size: 18px; - font-weight: normal; - } - </style> + <meta charset="UTF-8"> + <title>Dupre Theme Color Palette</title> + <style> + body { font-family: 'Courier New', monospace; background: #151311; color: #f0fef0; + padding: 28px; margin: 0; width: max-content; } + h1 { font-size: 20px; font-weight: bold; margin: 0 0 24px; } + .family { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 14px; } + .fam { width: 96px; text-align: right; padding-top: 46px; color: #b4b1a2; + font-size: 13px; flex-shrink: 0; } + .swatch { width: 120px; flex-shrink: 0; } + .box { width: 112px; height: 112px; border: 1px solid #474544; border-radius: 3px; } + .name { font-weight: bold; color: #f0fef0; font-size: 12px; margin-top: 5px; } + .hex { color: #969385; font-size: 11px; } + </style> </head> <body> - <h1>Color Palette Comparison</h1> - <div class="palette"> - <div class="swatch"> - <div class="color-box" style="background: #151311;"></div> - <div class="label"><span class="name">bg</span><br><span class="hex">#151311</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #252321;"></div> - <div class="label"><span class="name">bg+1</span><br><span class="hex">#252321</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #474544;"></div> - <div class="label"><span class="name">bg+2</span><br><span class="hex">#474544</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #58574e;"></div> - <div class="label"><span class="name">gray-2</span><br><span class="hex">#58574e</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #6c6a60;"></div> - <div class="label"><span class="name">gray-1</span><br><span class="hex">#6c6a60</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #969385;"></div> - <div class="label"><span class="name">gray</span><br><span class="hex">#969385</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #b4b1a2;"></div> - <div class="label"><span class="name">gray+1</span><br><span class="hex">#b4b1a2</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #d0cbc0;"></div> - <div class="label"><span class="name">gray+2</span><br><span class="hex">#d0cbc0</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #8a9496;"></div> - <div class="label"><span class="name">steel</span><br><span class="hex">#8a9496</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #acb0b3;"></div> - <div class="label"><span class="name">steel+1</span><br><span class="hex">#acb0b3</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #c0c7ca;"></div> - <div class="label"><span class="name">steel+2</span><br><span class="hex">#c0c7ca</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #67809c;"></div> - <div class="label"><span class="name">blue</span><br><span class="hex">#67809c</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #b2c3cc;"></div> - <div class="label"><span class="name">blue+1</span><br><span class="hex">#b2c3cc</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #d9e2ff;"></div> - <div class="label"><span class="name">blue+2</span><br><span class="hex">#d9e2ff</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #646d14;"></div> - <div class="label"><span class="name">green-2</span><br><span class="hex">#646d14</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #869038;"></div> - <div class="label"><span class="name">green-1</span><br><span class="hex">#869038</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #a4ac64;"></div> - <div class="label"><span class="name">green</span><br><span class="hex">#a4ac64</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #ccc768;"></div> - <div class="label"><span class="name">green+1</span><br><span class="hex">#ccc768</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #3f1c0f;"></div> - <div class="label"><span class="name">red-3</span><br><span class="hex">#3f1c0f</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #7c2a09;"></div> - <div class="label"><span class="name">red-2</span><br><span class="hex">#7c2a09</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #a7502d;"></div> - <div class="label"><span class="name">red-1</span><br><span class="hex">#a7502d</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #d47c59;"></div> - <div class="label"><span class="name">red</span><br><span class="hex">#d47c59</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #edb08f;"></div> - <div class="label"><span class="name">red+1</span><br><span class="hex">#edb08f</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #edbca2;"></div> - <div class="label"><span class="name">red+2</span><br><span class="hex">#edbca2</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #875f00;"></div> - <div class="label"><span class="name">yellow-2</span><br><span class="hex">#875f00</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #ffd700;"></div> - <div class="label"><span class="name">yellow-1</span><br><span class="hex">#ffd700</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #d7af5f;"></div> - <div class="label"><span class="name">yellow</span><br><span class="hex">#d7af5f</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #ffd75f;"></div> - <div class="label"><span class="name">yellow+1</span><br><span class="hex">#ffd75f</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #f9ee98;"></div> - <div class="label"><span class="name">yellow+2</span><br><span class="hex">#f9ee98</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #ff2a00;"></div> - <div class="label"><span class="name">intense-red</span><br><span class="hex">#ff2a00</span></div> - </div> - <div class="swatch"> - <div class="color-box" style="background: #f0fef0;"></div> - <div class="label"><span class="name">fg</span><br><span class="hex">#f0fef0</span></div> - </div> + <h1>Dupre Theme Color Palette</h1> + <div class="family"> + <div class="fam">bg</div> + <div class="swatch"><div class="box" style="background:#151311"></div><div class="name">bg</div><div class="hex">#151311</div></div> + <div class="swatch"><div class="box" style="background:#151311"></div><div class="name">bg+0</div><div class="hex">#151311</div></div> + <div class="swatch"><div class="box" style="background:#252321"></div><div class="name">bg+1</div><div class="hex">#252321</div></div> + <div class="swatch"><div class="box" style="background:#474544"></div><div class="name">bg+2</div><div class="hex">#474544</div></div> + </div> + <div class="family"> + <div class="fam">gray</div> + <div class="swatch"><div class="box" style="background:#58574e"></div><div class="name">gray-2</div><div class="hex">#58574e</div></div> + <div class="swatch"><div class="box" style="background:#6c6a60"></div><div class="name">gray-1</div><div class="hex">#6c6a60</div></div> + <div class="swatch"><div class="box" style="background:#969385"></div><div class="name">gray</div><div class="hex">#969385</div></div> + <div class="swatch"><div class="box" style="background:#b4b1a2"></div><div class="name">gray+1</div><div class="hex">#b4b1a2</div></div> + <div class="swatch"><div class="box" style="background:#d0cbc0"></div><div class="name">gray+2</div><div class="hex">#d0cbc0</div></div> + </div> + <div class="family"> + <div class="fam">steel</div> + <div class="swatch"><div class="box" style="background:#8a9496"></div><div class="name">steel</div><div class="hex">#8a9496</div></div> + <div class="swatch"><div class="box" style="background:#acb0b3"></div><div class="name">steel+1</div><div class="hex">#acb0b3</div></div> + <div class="swatch"><div class="box" style="background:#c0c7ca"></div><div class="name">steel+2</div><div class="hex">#c0c7ca</div></div> + </div> + <div class="family"> + <div class="fam">blue</div> + <div class="swatch"><div class="box" style="background:#67809c"></div><div class="name">blue</div><div class="hex">#67809c</div></div> + <div class="swatch"><div class="box" style="background:#b2c3cc"></div><div class="name">blue+1</div><div class="hex">#b2c3cc</div></div> + <div class="swatch"><div class="box" style="background:#d9e2ff"></div><div class="name">blue+2</div><div class="hex">#d9e2ff</div></div> + </div> + <div class="family"> + <div class="fam">green</div> + <div class="swatch"><div class="box" style="background:#646d14"></div><div class="name">green-2</div><div class="hex">#646d14</div></div> + <div class="swatch"><div class="box" style="background:#869038"></div><div class="name">green-1</div><div class="hex">#869038</div></div> + <div class="swatch"><div class="box" style="background:#a4ac64"></div><div class="name">green</div><div class="hex">#a4ac64</div></div> + <div class="swatch"><div class="box" style="background:#ccc768"></div><div class="name">green+1</div><div class="hex">#ccc768</div></div> + </div> + <div class="family"> + <div class="fam">red</div> + <div class="swatch"><div class="box" style="background:#3f1c0f"></div><div class="name">red-3</div><div class="hex">#3f1c0f</div></div> + <div class="swatch"><div class="box" style="background:#7c2a09"></div><div class="name">red-2</div><div class="hex">#7c2a09</div></div> + <div class="swatch"><div class="box" style="background:#a7502d"></div><div class="name">red-1</div><div class="hex">#a7502d</div></div> + <div class="swatch"><div class="box" style="background:#d47c59"></div><div class="name">red</div><div class="hex">#d47c59</div></div> + <div class="swatch"><div class="box" style="background:#edb08f"></div><div class="name">red+1</div><div class="hex">#edb08f</div></div> + <div class="swatch"><div class="box" style="background:#edbca2"></div><div class="name">red+2</div><div class="hex">#edbca2</div></div> + </div> + <div class="family"> + <div class="fam">yellow</div> + <div class="swatch"><div class="box" style="background:#875f00"></div><div class="name">yellow-2</div><div class="hex">#875f00</div></div> + <div class="swatch"><div class="box" style="background:#ffd700"></div><div class="name">yellow-1</div><div class="hex">#ffd700</div></div> + <div class="swatch"><div class="box" style="background:#d7af5f"></div><div class="name">yellow</div><div class="hex">#d7af5f</div></div> + <div class="swatch"><div class="box" style="background:#ffd75f"></div><div class="name">yellow+1</div><div class="hex">#ffd75f</div></div> + <div class="swatch"><div class="box" style="background:#f9ee98"></div><div class="name">yellow+2</div><div class="hex">#f9ee98</div></div> + </div> + <div class="family"> + <div class="fam">intense-red</div> + <div class="swatch"><div class="box" style="background:#ff2a00"></div><div class="name">intense-red</div><div class="hex">#ff2a00</div></div> + </div> + <div class="family"> + <div class="fam">fg</div> + <div class="swatch"><div class="box" style="background:#f0fef0"></div><div class="name">fg</div><div class="hex">#f0fef0</div></div> </div> </body> </html> diff --git a/themes/dupre-palette.png b/themes/dupre-palette.png Binary files differindex d0e78b5f..94bd084c 100644 --- a/themes/dupre-palette.png +++ b/themes/dupre-palette.png diff --git a/themes/gen-palette-preview.py b/themes/gen-palette-preview.py new file mode 100755 index 00000000..0b15f10b --- /dev/null +++ b/themes/gen-palette-preview.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 +"""Generate the Dupre palette preview HTML from dupre-palette.el. + +Reads the (name "#hex") pairs straight from the palette source so the preview +can't drift from the theme. Groups colors into one row per family (by name +prefix, e.g. gray-2/gray/gray+1 share the "gray" row), with fixed-width +swatches so columns line up across rows. + +Regenerate the PNG from the HTML afterwards: + + google-chrome-stable --headless=new --screenshot=themes/dupre-palette.png \\ + --window-size=975,1520 --hide-scrollbars --default-background-color=151311FF \\ + "file://$PWD/themes/dupre-color-palette.html" +""" +import re +from pathlib import Path + +HERE = Path(__file__).resolve().parent +SRC = HERE / "dupre-palette.el" +OUT = HERE / "dupre-color-palette.html" + +text = open(SRC).read() +# Only the dupre-palette defconst has (name "#hex") pairs; semantic mappings are +# (name colorname) with no hex, so this regex selects exactly the base palette. +pairs = re.findall(r'\(([a-z0-9]+(?:[+\-]\d+)?(?:-[a-z]+)?)\s+"(#[0-9a-fA-F]{6})"\)', text) + +def family(name): + m = re.match(r'^([a-z]+(?:-[a-z]+)??)(?:[+\-]\d+)?$', name) + return m.group(1) if m else name + +# Group consecutive same-family entries (palette.el already orders them so). +rows, cur_fam, cur = [], None, [] +for name, hexv in pairs: + fam = family(name) + if fam != cur_fam: + if cur: + rows.append((cur_fam, cur)) + cur_fam, cur = fam, [] + cur.append((name, hexv)) +if cur: + rows.append((cur_fam, cur)) + +def swatch(name, hexv): + return (f' <div class="swatch">' + f'<div class="box" style="background:{hexv}"></div>' + f'<div class="name">{name}</div>' + f'<div class="hex">{hexv}</div></div>') + +body = [] +for fam, items in rows: + body.append(' <div class="family">') + body.append(f' <div class="fam">{fam}</div>') + body.extend(swatch(n, h) for n, h in items) + body.append(' </div>') + +html = f"""<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>Dupre Theme Color Palette</title> + <style> + body {{ font-family: 'Courier New', monospace; background: #151311; color: #f0fef0; + padding: 28px; margin: 0; width: max-content; }} + h1 {{ font-size: 20px; font-weight: bold; margin: 0 0 24px; }} + .family {{ display: flex; align-items: flex-start; gap: 12px; margin-bottom: 14px; }} + .fam {{ width: 96px; text-align: right; padding-top: 46px; color: #b4b1a2; + font-size: 13px; flex-shrink: 0; }} + .swatch {{ width: 120px; flex-shrink: 0; }} + .box {{ width: 112px; height: 112px; border: 1px solid #474544; border-radius: 3px; }} + .name {{ font-weight: bold; color: #f0fef0; font-size: 12px; margin-top: 5px; }} + .hex {{ color: #969385; font-size: 11px; }} + </style> +</head> +<body> + <h1>Dupre Theme Color Palette</h1> +{chr(10).join(body)} +</body> +</html> +""" + +open(OUT, "w").write(html) +print(f"wrote {OUT}: {len(pairs)} colors in {len(rows)} family rows") +print("families:", ", ".join(f for f, _ in rows)) |
