feature: vor und nachteile

This commit is contained in:
Hikyu
2026-05-31 13:54:31 +02:00
parent 552a947a1c
commit e3dad17446
23270 changed files with 3024794 additions and 200 deletions
+34
View File
@@ -0,0 +1,34 @@
import MarkdownIt from 'markdown-it';
import { LanguageInput, BuiltinLanguage, CodeOptionsThemes, BuiltinTheme, TransformerOptions, CodeOptionsMeta, HighlighterGeneric } from 'shiki';
interface MarkdownItShikiExtraOptions {
/**
* Custom meta string parser
* Return an object to merge with `meta`
*/
parseMetaString?: (metaString: string, code: string, lang: string) => Record<string, any> | undefined | null;
/**
* markdown-it's highlight function will add a trailing newline to the code.
*
* This integration removes the trailing newline to the code by default,
* you can turn this off by passing false.
*
* @default true
*/
trimEndingNewline?: boolean;
/**
* When lang of code block is empty string, it will work.
*
* @default 'text'
*/
defaultLanguage?: LanguageInput | BuiltinLanguage;
/**
* When lang of code block is not included in langs of options, it will be as a fallback lang.
*/
fallbackLanguage?: LanguageInput | BuiltinLanguage;
}
type MarkdownItShikiSetupOptions = CodeOptionsThemes<BuiltinTheme> & TransformerOptions & CodeOptionsMeta & MarkdownItShikiExtraOptions;
declare function setupMarkdownIt(markdownit: MarkdownIt, highlighter: HighlighterGeneric<any, any>, options: MarkdownItShikiSetupOptions): void;
declare function fromHighlighter(highlighter: HighlighterGeneric<any, any>, options: MarkdownItShikiSetupOptions): (markdownit: MarkdownIt) => void;
export { type MarkdownItShikiExtraOptions, type MarkdownItShikiSetupOptions, fromHighlighter, setupMarkdownIt };
+34
View File
@@ -0,0 +1,34 @@
import MarkdownIt from 'markdown-it';
import { LanguageInput, BuiltinLanguage, CodeOptionsThemes, BuiltinTheme, TransformerOptions, CodeOptionsMeta, HighlighterGeneric } from 'shiki';
interface MarkdownItShikiExtraOptions {
/**
* Custom meta string parser
* Return an object to merge with `meta`
*/
parseMetaString?: (metaString: string, code: string, lang: string) => Record<string, any> | undefined | null;
/**
* markdown-it's highlight function will add a trailing newline to the code.
*
* This integration removes the trailing newline to the code by default,
* you can turn this off by passing false.
*
* @default true
*/
trimEndingNewline?: boolean;
/**
* When lang of code block is empty string, it will work.
*
* @default 'text'
*/
defaultLanguage?: LanguageInput | BuiltinLanguage;
/**
* When lang of code block is not included in langs of options, it will be as a fallback lang.
*/
fallbackLanguage?: LanguageInput | BuiltinLanguage;
}
type MarkdownItShikiSetupOptions = CodeOptionsThemes<BuiltinTheme> & TransformerOptions & CodeOptionsMeta & MarkdownItShikiExtraOptions;
declare function setupMarkdownIt(markdownit: MarkdownIt, highlighter: HighlighterGeneric<any, any>, options: MarkdownItShikiSetupOptions): void;
declare function fromHighlighter(highlighter: HighlighterGeneric<any, any>, options: MarkdownItShikiSetupOptions): (markdownit: MarkdownIt) => void;
export { type MarkdownItShikiExtraOptions, type MarkdownItShikiSetupOptions, fromHighlighter, setupMarkdownIt };
+55
View File
@@ -0,0 +1,55 @@
function setupMarkdownIt(markdownit, highlighter, options) {
const {
parseMetaString,
trimEndingNewline = true,
defaultLanguage = "text",
fallbackLanguage
} = options;
const langs = highlighter.getLoadedLanguages();
markdownit.options.highlight = (code, lang = "text", attrs) => {
if (lang === "") {
lang = defaultLanguage;
}
if (fallbackLanguage && !langs.includes(lang)) {
lang = fallbackLanguage;
}
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 highlighter.codeToHtml(
code,
{
...codeOptions,
transformers: [
...builtInTransformer,
...codeOptions.transformers || []
]
}
);
};
}
function fromHighlighter(highlighter, options) {
return function(markdownit) {
setupMarkdownIt(markdownit, highlighter, options);
};
}
export { fromHighlighter, setupMarkdownIt };
+16
View File
@@ -0,0 +1,16 @@
import MarkdownIt from 'markdown-it';
import { LanguageInput, BuiltinLanguage } from 'shiki';
import { MarkdownItShikiSetupOptions } from './core.mjs';
export { MarkdownItShikiExtraOptions, fromHighlighter, setupMarkdownIt } from './core.mjs';
type MarkdownItShikiOptions = MarkdownItShikiSetupOptions & {
/**
* Language names to include.
*
* @default Object.keys(bundledLanguages)
*/
langs?: Array<LanguageInput | BuiltinLanguage>;
};
declare function markdownItShiki(options: MarkdownItShikiOptions): Promise<(markdownit: MarkdownIt) => void>;
export { type MarkdownItShikiOptions, MarkdownItShikiSetupOptions, markdownItShiki as default };
+16
View File
@@ -0,0 +1,16 @@
import MarkdownIt from 'markdown-it';
import { LanguageInput, BuiltinLanguage } from 'shiki';
import { MarkdownItShikiSetupOptions } from './core.js';
export { MarkdownItShikiExtraOptions, fromHighlighter, setupMarkdownIt } from './core.js';
type MarkdownItShikiOptions = MarkdownItShikiSetupOptions & {
/**
* Language names to include.
*
* @default Object.keys(bundledLanguages)
*/
langs?: Array<LanguageInput | BuiltinLanguage>;
};
declare function markdownItShiki(options: MarkdownItShikiOptions): Promise<(markdownit: MarkdownIt) => void>;
export { type MarkdownItShikiOptions, MarkdownItShikiSetupOptions, markdownItShiki as default };
+16
View File
@@ -0,0 +1,16 @@
import { createHighlighter, bundledLanguages } from 'shiki';
import { setupMarkdownIt } from './core.mjs';
export { fromHighlighter } from './core.mjs';
async function markdownItShiki(options) {
const themeNames = ("themes" in options ? Object.values(options.themes) : [options.theme]).filter(Boolean);
const highlighter = await createHighlighter({
themes: themeNames,
langs: options.langs || Object.keys(bundledLanguages)
});
return function(markdownit) {
setupMarkdownIt(markdownit, highlighter, options);
};
}
export { markdownItShiki as default, setupMarkdownIt };