@mantine/code-highlight
Version:
Code highlight with Mantine theme
43 lines (39 loc) • 1.28 kB
JavaScript
var shikiThemes = require('./shiki-themes.cjs');
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;
}
}
const striped = data.slice(0, openIndex) + data.slice(closeIndex + 1);
return striped.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 }) => ({
isHighlighted: true,
highlightedCode: stripShikiCodeBlocks(
ctx.codeToHtml(code, {
lang: language,
theme: forceColorScheme || (colorScheme === "light" ? shikiThemes.light : shikiThemes.dark)
})
)
});
}
};
};
exports.createShikiAdapter = createShikiAdapter;
exports.stripShikiCodeBlocks = stripShikiCodeBlocks;
//# sourceMappingURL=shiki-adapter.cjs.map
;