UNPKG

estilo

Version:

Create color schemes for Vim, NeoVim, Airline and Lightline

60 lines (59 loc) 1.92 kB
import { Eta } from "../deps/jsr.io/@eta-dev/eta/3.5.0/src/index.js"; import denojson from "../deno.js"; import assets from "./assets.js"; import { crash } from "./util.js"; const eta = new Eta(); const version = denojson.version; function parseStatusColors(syntax, palette) { const out = {}; Object.keys(syntax).forEach((partName) => { const [fgName, bgName] = syntax[partName]; const fg = palette.colors[fgName]; const bg = palette.colors[bgName]; if (!fg) { crash("Missing foreground color", { palette: palette.filepath, color: fgName, }); } if (!bg) { crash("Missing background color", { palette: palette.filepath, color: bgName, }); } out[partName] = { fg, bg }; }); return out; } export function renderStatus(config, project, brand) { const palette = project.palettes[config.palette]; if (!palette) { crash("Palette does not exist", { palette: config.palette, brand, style: config.style, }); } const brandStyles = { airline: project.airlineStyles, lightline: project.lightlineStyles, }; const syntaxFile = brandStyles[brand][config.style]; if (!syntaxFile) { crash("Cannot find status style file", { name: config.name }); } const syntax = syntaxFile.syntax; const ctx = parseStatusColors(syntax, palette); const info = { name: config.name, description: config.description, url: project.config.url, author: project.config.author, license: project.config.license, version: project.config.version, estiloVersion: version, }; const context = Object.assign(ctx, { info }); return eta.renderString(assets.mustaches[brand], context); }