@mantine/code-highlight
Version:
Code highlight with Mantine theme
42 lines (41 loc) • 1.42 kB
JavaScript
const require_shiki_themes = require("./shiki-themes.cjs");
//#region packages/@mantine/code-highlight/src/CodeHighlightProvider/adapters/shiki-adapter.ts
function stripElement(openTag, data) {
const openIndex = data.indexOf(`<${openTag}`);
let closeIndex = openIndex + openTag.length;
for (let i = openIndex; i < data.length; i++) if (data[i] === ">") {
closeIndex = i;
break;
}
return (data.slice(0, openIndex) + data.slice(closeIndex + 1)).replace(`</${openTag}>`, "");
}
function stripShikiCodeBlocks(data) {
return stripElement("code", stripElement("pre", data));
}
const createShikiAdapter = (loadShiki, { forceColorScheme } = {}) => {
return {
loadContext: loadShiki,
getHighlighter: (ctx) => {
if (!ctx) return ({ code }) => ({
highlightedCode: code,
isHighlighted: false
});
return ({ code, language, colorScheme }) => {
let _colorScheme = colorScheme;
if (colorScheme === "light") _colorScheme = require_shiki_themes.light;
else if (colorScheme === "dark") _colorScheme = require_shiki_themes.dark;
return {
isHighlighted: true,
highlightedCode: stripShikiCodeBlocks(ctx.codeToHtml(code, {
lang: language,
theme: forceColorScheme || _colorScheme
}))
};
};
}
};
};
//#endregion
exports.createShikiAdapter = createShikiAdapter;
exports.stripShikiCodeBlocks = stripShikiCodeBlocks;
//# sourceMappingURL=shiki-adapter.cjs.map