@mantine/code-highlight
Version:
Code highlight with Mantine theme
51 lines (47 loc) • 1.49 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 }) => {
let _colorScheme = colorScheme;
if (colorScheme === "light") {
_colorScheme = shikiThemes.light;
} else if (colorScheme === "dark") {
_colorScheme = shikiThemes.dark;
}
return {
isHighlighted: true,
highlightedCode: stripShikiCodeBlocks(
ctx.codeToHtml(code, {
lang: language,
theme: forceColorScheme || _colorScheme
})
)
};
};
}
};
};
exports.createShikiAdapter = createShikiAdapter;
exports.stripShikiCodeBlocks = stripShikiCodeBlocks;
//# sourceMappingURL=shiki-adapter.cjs.map