refactor: 适配tinymce编辑器获取到的数据

This commit is contained in:
2026-08-29 22:53:19 +08:00
parent 0e917adc3b
commit a4850e708f

View File

@@ -1,5 +1,5 @@
import { JSDOM } from "jsdom"; import {JSDOM} from "jsdom";
import { createHighlighter } from "shiki"; import {createHighlighter} from "shiki";
const DEFAULT_THEME = "github-dark-dimmed"; const DEFAULT_THEME = "github-dark-dimmed";
@@ -35,6 +35,15 @@ const loadedLangs = new Set<string>(["text"]);
const supportedSet = new Set<string>(SUPPORTED_LANGS); const supportedSet = new Set<string>(SUPPORTED_LANGS);
const LANG_MAP: Record<string, string> = {
markup: "html",
html: "html",
};
const normalizeLang = (lang: string): string => {
return LANG_MAP[lang] || lang;
};
const ensureLangLoaded = async (lang: string): Promise<string> => { const ensureLangLoaded = async (lang: string): Promise<string> => {
if (lang === "text" || loadedLangs.has(lang)) return lang; if (lang === "text" || loadedLangs.has(lang)) return lang;
if (!supportedSet.has(lang)) return "text"; if (!supportedSet.has(lang)) return "text";
@@ -55,18 +64,20 @@ async function processCodeBlocks(document: Document) {
if (!preEl || preEl.tagName !== "PRE") continue; if (!preEl || preEl.tagName !== "PRE") continue;
const codeContent = codeBlock.textContent || ""; const codeContent = codeBlock.textContent || "";
let lang = "text"; let rawLang = "text";
for (const cls of codeBlock.classList) { for (const cls of preEl.classList) {
if (cls.startsWith("language-")) { if (cls.startsWith("language-")) {
lang = cls.slice("language-".length); rawLang = cls.slice("language-".length);
break; break;
} }
} }
lang = await ensureLangLoaded(lang); const lang = normalizeLang(rawLang);
const loadedLang = await ensureLangLoaded(lang);
const highlighted = highlighter.codeToHtml(codeContent, { const highlighted = highlighter.codeToHtml(codeContent, {
lang, lang: loadedLang,
theme: DEFAULT_THEME, theme: DEFAULT_THEME,
}); });