estilo
Version:
Create color schemes for Vim, NeoVim, Airline and Lightline
60 lines (59 loc) • 1.92 kB
JavaScript
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);
}