feat: 代码片段功能与 Markdown 内嵌片段渲染、文档截图等

This commit is contained in:
2026-10-09 18:53:38 +08:00
parent 5598e1cbb7
commit da72843c70
64 changed files with 7047 additions and 248 deletions

View File

@@ -14,14 +14,36 @@ export const SHIKI_LANG_IDS = [
"tsx",
"jsx",
"json",
"jsonc",
"yaml",
"toml",
"ini",
"bash",
"sql",
"html",
"css",
"scss",
"diff",
"rust",
"ruby",
"powershell",
"nginx",
"dockerfile",
"kotlin",
"java",
"c",
"cpp",
"csharp",
"php",
"swift",
"dart",
"lua",
"vue",
"graphql",
"xml",
"regex",
"makefile",
"prisma",
"plaintext",
] as const;
@@ -38,8 +60,44 @@ export const SHIKI_LANG_ALIAS: Record<string, string> = {
yml: "yaml",
text: "plaintext",
txt: "plaintext",
golang: "go",
rb: "ruby",
ps1: "powershell",
pwsh: "powershell",
"c++": "cpp",
cs: "csharp",
"c#": "csharp",
regexp: "regex",
docker: "dockerfile",
};
/**
* 白名单 id → @shikijs/langs grammar 内部注册名。
* 部分语言的 dist 文件只是别名重导出(如 bash.mjs = shellscript.mjs),
* HighlighterCore 按内部名注册,codeToHtml(lang:"bash") 会静默降级 plaintext。
*/
const INTERNAL_LANG_ALIAS: Record<string, string> = {
bash: "shellscript",
sh: "shellscript",
shell: "shellscript",
zsh: "shellscript",
dockerfile: "docker",
regex: "regexp",
makefile: "make",
};
/**
* createHighlighterCore 的 langAlias:输入别名 + 白名单 id 都要能落到 grammar 内部名。
* 注意 core 会校验别名链无环,且 docker/regexp 本身就是内部注册名,
* 不能再作为 alias 键(会与 dockerfile→docker、regex→regexp 互指成环)。
*/
function buildCoreLangAlias(): Record<string, string> {
const merged = { ...SHIKI_LANG_ALIAS, ...INTERNAL_LANG_ALIAS };
delete merged["docker"];
delete merged["regexp"];
return merged;
}
export const SHIKI_THEMES = {
light: "github-light",
dark: "github-dark-dimmed",
@@ -84,10 +142,30 @@ export function getSiteHighlighter(): Promise<HighlighterCore> {
import("@shikijs/langs/css"),
import("@shikijs/langs/scss"),
import("@shikijs/langs/diff"),
import("@shikijs/langs/rust"),
import("@shikijs/langs/ruby"),
import("@shikijs/langs/powershell"),
import("@shikijs/langs/nginx"),
import("@shikijs/langs/dockerfile"),
import("@shikijs/langs/kotlin"),
import("@shikijs/langs/java"),
import("@shikijs/langs/c"),
import("@shikijs/langs/cpp"),
import("@shikijs/langs/csharp"),
import("@shikijs/langs/php"),
import("@shikijs/langs/swift"),
import("@shikijs/langs/dart"),
import("@shikijs/langs/lua"),
import("@shikijs/langs/vue"),
import("@shikijs/langs/graphql"),
import("@shikijs/langs/xml"),
import("@shikijs/langs/regex"),
import("@shikijs/langs/makefile"),
import("@shikijs/langs/prisma"),
// plaintext / text / txt 为 Shiki 特殊语言,无需 grammar
aardioGrammar,
],
langAlias: SHIKI_LANG_ALIAS,
langAlias: buildCoreLangAlias(),
engine: createOnigurumaEngine(import("shiki/wasm")),
});
}