UNPKG

nehan-highlight

Version:
134 lines (129 loc) 2.83 kB
import * as hljs from 'highlight.js'; import { CssStyleSheet, DynamicStyleContext } from 'nehan'; // hljs.configure({ useBR: false }); interface DefaultArgs { selector?: string; }; // [TODO] // add color args for each comment, keyword etc. const defaultArgs: DefaultArgs = { selector: "pre>code", }; export function create(args: DefaultArgs): CssStyleSheet { const options = { ...defaultArgs, ...args }; const selector = options.selector || "pre>code"; return new CssStyleSheet({ [selector]: { display: "block", fontSize: "smaller", fontFamily: "monospace", lineHeight: "1.6", whiteSpace: "pre", "!dynamic": (ctx: DynamicStyleContext) => { const lang = ctx.element.className.replace("lang-", "") || "html"; let markup = (ctx.element.$node as HTMLElement).innerHTML.replace(/<br>/g, "\n").trim(); if (lang === "latex") { markup = markup.replace(/&amp;/g, "&"); } // console.log(`src(lang=${lang}):${markup}`); const markup2 = hljs.default.highlightAuto(markup, [lang]); // console.log("dst:", markup2.value); ctx.element.innerHTML = markup2.value; return {}; } }, // group1 ".hljs-comment": { color: "#008000" }, ".hljs-quote": { color: "#008000" }, ".hljs-variable": { color: "#008000" }, // group2 ".hljs-keyword": { color: "#00f" }, ".hljs-selector-tag": { color: "#00f" }, ".hljs-built_in": { color: "#00f" }, ".hljs-name": { color: "#00f" }, ".hljs-tag": { color: "#00f" }, // group3 ".hljs-string": { color: "#a31515" }, ".hljs-title": { color: "#a31515" }, ".hljs-section": { color: "#a31515" }, ".hljs-attribute": { color: "#a31515" }, ".hljs-literal": { color: "#a31515" }, ".hljs-template-tag": { color: "#a31515" }, ".hljs-template-variable": { color: "#a31515" }, ".hljs-type": { color: "#a31515" }, ".hljs-addition": { color: "#a31515" }, // group4 ".hljs-deletion": { color: "#2b91af" }, ".hljs-selector-attr": { color: "#2b91af" }, ".hljs-selector-pseudo": { color: "#2b91af" }, ".hljs-meta": { color: "#2b91af" }, // group5 ".hljs-doctag": { color: "#808080" }, // group6 ".hljs-attr": { color: "#f00", }, // group7 ".hljs-symbol": { color: "#00b0e8", }, ".hljs-bullet": { color: "#00b0e8", }, ".hljs-link": { color: "#00b0e8", }, // group8 ".hljs-emphasis": { fontStyle: "italic", }, // group9 ".hljs-strong": { fontWeight: "bold", } }); }