@shikijs/markdown-it
Version:
markdown-it integration for shiki
51 lines (49 loc) • 1.26 kB
JavaScript
function setupMarkdownWithCodeToHtml(markdownit, codeToHtml, options) {
const {
parseMetaString,
trimEndingNewline = true,
defaultLanguage = "text"
} = options;
markdownit.options.highlight = async (code, lang = "text", attrs) => {
if (lang === "") {
lang = defaultLanguage;
}
const meta = parseMetaString?.(attrs, code, lang) || {};
const codeOptions = {
...options,
lang,
meta: {
...options.meta,
...meta,
__raw: attrs
}
};
const builtInTransformer = [];
builtInTransformer.push({
name: "@shikijs/markdown-it:block-class",
code(node) {
node.properties.class = `language-${lang}`;
}
});
if (trimEndingNewline) {
if (code.endsWith("\n"))
code = code.slice(0, -1);
}
return await codeToHtml(
code,
{
...codeOptions,
transformers: [
...builtInTransformer,
...codeOptions.transformers || []
]
}
);
};
}
function fromAsyncCodeToHtml(codeToHtml, options) {
return async function(markdownit) {
return setupMarkdownWithCodeToHtml(markdownit, codeToHtml, options);
};
}
export { fromAsyncCodeToHtml, setupMarkdownWithCodeToHtml };