diff options
Diffstat (limited to 'scripts/theme-studio/generate.py')
| -rw-r--r-- | scripts/theme-studio/generate.py | 57 |
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) |
