aboutsummaryrefslogtreecommitdiff
path: root/scripts/theme-studio/generate.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/theme-studio/generate.py')
-rw-r--r--scripts/theme-studio/generate.py57
1 files changed, 17 insertions, 40 deletions
diff --git a/scripts/theme-studio/generate.py b/scripts/theme-studio/generate.py
index 347a21976..43ebf02c6 100644
--- a/scripts/theme-studio/generate.py
+++ b/scripts/theme-studio/generate.py
@@ -37,6 +37,9 @@ COLORMATH_BODY=strip_exports(read_text('colormath.js'))
# (MAP_J, PALETTE_J, COLORMATH_J, ...); those are filled after it is spliced in.
STYLES=read_text('styles.css')
APP_BODY=read_text('app.js')
+# Bespoke per-package preview renderers, spliced into the page <script> via the
+# PREVIEWS_J token in app.js. No imports/exports, so read raw.
+PREVIEWS_BODY=read_text('previews.js')
# Pure package-model + dropdown logic, inlined into the page (and unit-tested via
# test-app-core.mjs) the same way colormath.js is.
APP_CORE_BODY=strip_exports(read_text('app-core.js'))
@@ -174,25 +177,23 @@ def add_palette_color(palette,defaults,value,label=None):
name=base+'-'+str(n); n+=1
palette.append([value,name,column_id(name)])
+def _harvest_spec_colors(palette,defaults,spec):
+ """Add a face spec's fg, bg, and box color (if any) to the palette, in order."""
+ add_palette_color(palette,defaults,spec.get('fg'))
+ add_palette_color(palette,defaults,spec.get('bg'))
+ if spec.get('box'):
+ add_palette_color(palette,defaults,spec['box'].get('color'))
+
def add_default_palette_colors(palette,map_,syntax,uimap,apps,defaults):
for key,value in map_.items():
add_palette_color(palette,defaults,value,'bg' if key=='bg' else 'fg' if key=='p' else None)
for spec in syntax.values():
- add_palette_color(palette,defaults,spec.get('fg'))
- add_palette_color(palette,defaults,spec.get('bg'))
- if spec.get('box'):
- add_palette_color(palette,defaults,spec['box'].get('color'))
+ _harvest_spec_colors(palette,defaults,spec)
for _face,spec in uimap.items():
- add_palette_color(palette,defaults,spec.get('fg'))
- add_palette_color(palette,defaults,spec.get('bg'))
- if spec.get('box'):
- add_palette_color(palette,defaults,spec['box'].get('color'))
+ _harvest_spec_colors(palette,defaults,spec)
for app in apps.values():
for _face,_label,spec in app['faces']:
- add_palette_color(palette,defaults,spec.get('fg'))
- add_palette_color(palette,defaults,spec.get('bg'))
- if spec.get('box'):
- add_palette_color(palette,defaults,spec['box'].get('color'))
+ _harvest_spec_colors(palette,defaults,spec)
def apply_seed_packages(apps,data,seed):
if seed:
@@ -238,35 +239,10 @@ PALETTE,UIMAP,LOCKS=apply_seed_basics(_d,PALETTE,UIMAP,LOCKS)
PALETTE=normalize_palette(PALETTE)
SYNTAX=build_syntax(COLS,MAP,BOLD,ITALIC_MAP,DEFAULTS)
apply_syntax_seed(_d if _seed else {},SYNTAX,MAP)
-# Bespoke package face lists and seed defaults live in face_data.py. Each entry
-# is (key, label, preview, FACES, prefix, SEED); add an app by adding one row.
-_BESPOKE_APPS=[
- ("org-mode","org-mode","org",ORG_FACES,"org-",ORG_SEED),
- ("magit","magit","magit",MAGIT_FACES,"magit-",MAGIT_SEED),
- ("elfeed","elfeed","elfeed",ELFEED_FACES,"elfeed-",ELFEED_SEED),
- ("mu4e","mu4e","mu4e",MU4E_FACES,"mu4e-",MU4E_SEED),
- ("gnus","gnus (mu4e article view)","gnus",GNUS_FACES,"gnus-",GNUS_SEED),
- ("org-faces","org-faces","orgfaces",ORGFACES_FACES,"org-faces-",ORGFACES_SEED),
- ("ghostel","ghostel","ghostel",GHOSTEL_FACES,"ghostel-",GHOSTEL_SEED),
- ("auto-dim-other-buffers","auto-dim","autodim",AUTODIM_FACES,"auto-dim-other-buffers-",AUTODIM_SEED),
- ("dashboard","dashboard","dashboard",DASHBOARD_FACES,"dashboard-",DASHBOARD_SEED),
- ("lsp-mode","lsp-mode","lsp",LSP_FACES,"lsp-",LSP_SEED),
- ("git-gutter","git-gutter","gitgutter",GITGUTTER_FACES,"git-gutter:",GITGUTTER_SEED),
- ("flycheck","flycheck","flycheck",FLYCHECK_FACES,"flycheck-",FLYCHECK_SEED),
- ("dired","dired","dired",DIRED_FACES,"dired-",DIRED_SEED),
- ("dirvish","dirvish","dirvish",DIRVISH_FACES,"dirvish-",DIRVISH_SEED),
- ("calibredb","calibredb","calibredb",CALIBREDB_FACES,"calibredb-",CALIBREDB_SEED),
- ("erc","erc","erc",ERC_FACES,"erc-",ERC_SEED),
- ("org-drill","org-drill","orgdrill",ORGDRILL_FACES,"org-drill-",ORGDRILL_SEED),
- ("org-noter","org-noter","orgnoter",ORGNOTER_FACES,"org-noter-",ORGNOTER_SEED),
- ("signel","signel","signel",SIGNEL_FACES,"signel-",SIGNEL_SEED),
- ("pearl","pearl","pearl",PEARL_FACES,"pearl-",PEARL_SEED),
- ("slack","slack","slack",SLACK_FACES,"slack-",SLACK_SEED),
- ("telega","telega","telega",TELEGA_FACES,"telega-",TELEGA_SEED),
- ("shr","shr (HTML: nov/eww/mail)","shr",SHR_FACES,"shr-",SHR_SEED),
-]
+# Bespoke apps are single-sourced as BESPOKE_APP_SPECS in face_data.py (one
+# row per app: key, label, preview, FACES, prefix, SEED).
APPS={key:{"label":label,"preview":preview,"faces":face_rows(faces,prefix,seed)}
- for key,label,preview,faces,prefix,seed in _BESPOKE_APPS}
+ for key,label,preview,faces,prefix,seed in BESPOKE_APP_SPECS}
# Phase 6: merge the generated all-package inventory (refresh with build-inventory.el).
# Bespoke apps stay; every other installed package becomes an editable generic app.
_inv_path=os.path.join(HERE,"package-inventory.json")
@@ -290,6 +266,7 @@ HTML=read_text('theme-studio.template.html')
def fill_data(s):
return (s.replace("COLORMATH_J",COLORMATH_BODY)
.replace("APP_CORE_J",APP_CORE_BODY)
+ .replace("PREVIEWS_J",PREVIEWS_BODY)
.replace("APP_UTIL_J",APP_UTIL_BODY)
.replace("PALETTE_GENERATOR_CORE_J",PALETTE_GENERATOR_CORE_BODY)
.replace("PALETTE_GENERATOR_UI_J",PALETTE_GENERATOR_UI_BODY)