237 lines
6.5 KiB
JavaScript
237 lines
6.5 KiB
JavaScript
function createCssVariablesTheme(options = {}) {
|
|
const {
|
|
name = "css-variables",
|
|
variablePrefix = "--shiki-",
|
|
fontStyle = true
|
|
} = options;
|
|
const variable = (name2) => {
|
|
if (options.variableDefaults?.[name2])
|
|
return `var(${variablePrefix}${name2}, ${options.variableDefaults[name2]})`;
|
|
return `var(${variablePrefix}${name2})`;
|
|
};
|
|
const theme = {
|
|
name,
|
|
type: "dark",
|
|
colors: {
|
|
"editor.foreground": variable("foreground"),
|
|
"editor.background": variable("background"),
|
|
"terminal.ansiBlack": variable("ansi-black"),
|
|
"terminal.ansiRed": variable("ansi-red"),
|
|
"terminal.ansiGreen": variable("ansi-green"),
|
|
"terminal.ansiYellow": variable("ansi-yellow"),
|
|
"terminal.ansiBlue": variable("ansi-blue"),
|
|
"terminal.ansiMagenta": variable("ansi-magenta"),
|
|
"terminal.ansiCyan": variable("ansi-cyan"),
|
|
"terminal.ansiWhite": variable("ansi-white"),
|
|
"terminal.ansiBrightBlack": variable("ansi-bright-black"),
|
|
"terminal.ansiBrightRed": variable("ansi-bright-red"),
|
|
"terminal.ansiBrightGreen": variable("ansi-bright-green"),
|
|
"terminal.ansiBrightYellow": variable("ansi-bright-yellow"),
|
|
"terminal.ansiBrightBlue": variable("ansi-bright-blue"),
|
|
"terminal.ansiBrightMagenta": variable("ansi-bright-magenta"),
|
|
"terminal.ansiBrightCyan": variable("ansi-bright-cyan"),
|
|
"terminal.ansiBrightWhite": variable("ansi-bright-white")
|
|
},
|
|
tokenColors: [
|
|
{
|
|
scope: [
|
|
"keyword.operator.accessor",
|
|
"meta.group.braces.round.function.arguments",
|
|
"meta.template.expression",
|
|
"markup.fenced_code meta.embedded.block"
|
|
],
|
|
settings: {
|
|
foreground: variable("foreground")
|
|
}
|
|
},
|
|
{
|
|
scope: "emphasis",
|
|
settings: {
|
|
fontStyle: "italic"
|
|
}
|
|
},
|
|
{
|
|
scope: ["strong", "markup.heading.markdown", "markup.bold.markdown"],
|
|
settings: {
|
|
fontStyle: "bold"
|
|
}
|
|
},
|
|
{
|
|
scope: ["markup.italic.markdown"],
|
|
settings: {
|
|
fontStyle: "italic"
|
|
}
|
|
},
|
|
{
|
|
scope: "meta.link.inline.markdown",
|
|
settings: {
|
|
fontStyle: "underline",
|
|
foreground: variable("token-link")
|
|
}
|
|
},
|
|
{
|
|
scope: ["string", "markup.fenced_code", "markup.inline"],
|
|
settings: {
|
|
foreground: variable("token-string")
|
|
}
|
|
},
|
|
{
|
|
scope: ["comment", "string.quoted.docstring.multi"],
|
|
settings: {
|
|
foreground: variable("token-comment")
|
|
}
|
|
},
|
|
{
|
|
scope: [
|
|
"constant.numeric",
|
|
"constant.language",
|
|
"constant.other.placeholder",
|
|
"constant.character.format.placeholder",
|
|
"variable.language.this",
|
|
"variable.other.object",
|
|
"variable.other.class",
|
|
"variable.other.constant",
|
|
"meta.property-name",
|
|
"meta.property-value",
|
|
"support"
|
|
],
|
|
settings: {
|
|
foreground: variable("token-constant")
|
|
}
|
|
},
|
|
{
|
|
scope: [
|
|
"keyword",
|
|
"storage.modifier",
|
|
"storage.type",
|
|
"storage.control.clojure",
|
|
"entity.name.function.clojure",
|
|
"entity.name.tag.yaml",
|
|
"support.function.node",
|
|
"support.type.property-name.json",
|
|
"punctuation.separator.key-value",
|
|
"punctuation.definition.template-expression"
|
|
],
|
|
settings: {
|
|
foreground: variable("token-keyword")
|
|
}
|
|
},
|
|
{
|
|
scope: "variable.parameter.function",
|
|
settings: {
|
|
foreground: variable("token-parameter")
|
|
}
|
|
},
|
|
{
|
|
scope: [
|
|
"support.function",
|
|
"entity.name.type",
|
|
"entity.other.inherited-class",
|
|
"meta.function-call",
|
|
"meta.instance.constructor",
|
|
"entity.other.attribute-name",
|
|
"entity.name.function",
|
|
"constant.keyword.clojure"
|
|
],
|
|
settings: {
|
|
foreground: variable("token-function")
|
|
}
|
|
},
|
|
{
|
|
scope: [
|
|
"entity.name.tag",
|
|
"string.quoted",
|
|
"string.regexp",
|
|
"string.interpolated",
|
|
"string.template",
|
|
"string.unquoted.plain.out.yaml",
|
|
"keyword.other.template"
|
|
],
|
|
settings: {
|
|
foreground: variable("token-string-expression")
|
|
}
|
|
},
|
|
{
|
|
scope: [
|
|
"punctuation.definition.arguments",
|
|
"punctuation.definition.dict",
|
|
"punctuation.separator",
|
|
"meta.function-call.arguments"
|
|
],
|
|
settings: {
|
|
foreground: variable("token-punctuation")
|
|
}
|
|
},
|
|
{
|
|
// [Custom] Markdown links
|
|
scope: [
|
|
"markup.underline.link",
|
|
"punctuation.definition.metadata.markdown"
|
|
],
|
|
settings: {
|
|
foreground: variable("token-link")
|
|
}
|
|
},
|
|
{
|
|
// [Custom] Markdown list
|
|
scope: ["beginning.punctuation.definition.list.markdown"],
|
|
settings: {
|
|
foreground: variable("token-string")
|
|
}
|
|
},
|
|
{
|
|
// [Custom] Markdown punctuation definition brackets
|
|
scope: [
|
|
"punctuation.definition.string.begin.markdown",
|
|
"punctuation.definition.string.end.markdown",
|
|
"string.other.link.title.markdown",
|
|
"string.other.link.description.markdown"
|
|
],
|
|
settings: {
|
|
foreground: variable("token-keyword")
|
|
}
|
|
},
|
|
{
|
|
// [Custom] Diff
|
|
scope: [
|
|
"markup.inserted",
|
|
"meta.diff.header.to-file",
|
|
"punctuation.definition.inserted"
|
|
],
|
|
settings: {
|
|
foreground: variable("token-inserted")
|
|
}
|
|
},
|
|
{
|
|
scope: [
|
|
"markup.deleted",
|
|
"meta.diff.header.from-file",
|
|
"punctuation.definition.deleted"
|
|
],
|
|
settings: {
|
|
foreground: variable("token-deleted")
|
|
}
|
|
},
|
|
{
|
|
scope: [
|
|
"markup.changed",
|
|
"punctuation.definition.changed"
|
|
],
|
|
settings: {
|
|
foreground: variable("token-changed")
|
|
}
|
|
}
|
|
]
|
|
};
|
|
if (!fontStyle) {
|
|
theme.tokenColors = theme.tokenColors?.map((tokenColor) => {
|
|
if (tokenColor.settings?.fontStyle)
|
|
delete tokenColor.settings.fontStyle;
|
|
return tokenColor;
|
|
});
|
|
}
|
|
return theme;
|
|
}
|
|
|
|
export { createCssVariablesTheme };
|