refactor: 适配tinymce编辑器获取到的数据
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { JSDOM } from "jsdom";
|
||||
import { createHighlighter } from "shiki";
|
||||
import {JSDOM} from "jsdom";
|
||||
import {createHighlighter} from "shiki";
|
||||
|
||||
const DEFAULT_THEME = "github-dark-dimmed";
|
||||
|
||||
@@ -35,6 +35,15 @@ const loadedLangs = new Set<string>(["text"]);
|
||||
|
||||
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> => {
|
||||
if (lang === "text" || loadedLangs.has(lang)) return lang;
|
||||
if (!supportedSet.has(lang)) return "text";
|
||||
@@ -55,18 +64,20 @@ async function processCodeBlocks(document: Document) {
|
||||
if (!preEl || preEl.tagName !== "PRE") continue;
|
||||
|
||||
const codeContent = codeBlock.textContent || "";
|
||||
let lang = "text";
|
||||
for (const cls of codeBlock.classList) {
|
||||
let rawLang = "text";
|
||||
for (const cls of preEl.classList) {
|
||||
if (cls.startsWith("language-")) {
|
||||
lang = cls.slice("language-".length);
|
||||
rawLang = cls.slice("language-".length);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
lang = await ensureLangLoaded(lang);
|
||||
const lang = normalizeLang(rawLang);
|
||||
|
||||
const loadedLang = await ensureLangLoaded(lang);
|
||||
|
||||
const highlighted = highlighter.codeToHtml(codeContent, {
|
||||
lang,
|
||||
lang: loadedLang,
|
||||
theme: DEFAULT_THEME,
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user