`;
+
+ // 添加复制按钮(右上角)
+ container += `
+
+ `;
+
+ if (lang && Prism.languages[lang]) {
+ // 使用 Prism 高亮代码
+ const highlightedCode = Prism.highlight(str, Prism.languages[lang], lang);
+ // 添加代码区域
+ container += `
${highlightedCode}
`;
+ } else {
+ // 普通代码块
+ container += `
${escapeHtml(str)}
`;
+ }
+
+ container += `
`;
+ return container;
+ } else {
+ return Prism.highlight(str, Prism.languages[lang], lang);
+ }
+ }
+}
+
+
// 全局复制函数
(window as any).copyCode = function (button: HTMLElement) {
const codeBlock = button.closest('.openmcp-code-block');
if (!codeBlock) return;
const codeElement = codeBlock.querySelector('code');
const code = codeElement?.textContent || '';
-
+
navigator.clipboard.writeText(code).then(() => {
const originalText = button.textContent;
button.textContent = '已复制';
diff --git a/renderer/src/components/main-panel/chat/markdown/markdown.ts b/renderer/src/components/main-panel/chat/markdown/markdown.ts
index 9c3f420..1535517 100644
--- a/renderer/src/components/main-panel/chat/markdown/markdown.ts
+++ b/renderer/src/components/main-panel/chat/markdown/markdown.ts
@@ -3,7 +3,7 @@ import MarkdownKatex from './markdown-katex';
import MarkdownHighlight from './markdown-highlight';
const md = new MarkdownIt({
- highlight: MarkdownHighlight,
+ highlight: MarkdownHighlight({ needTools: true }),
});
md.use(MarkdownKatex, {
@@ -18,6 +18,35 @@ export const markdownToHtml = (markdown: string) => {
return md.render(markdown);
};
+const pureHighLightMd = new MarkdownIt({
+ highlight: MarkdownHighlight({ needTools: false }),
+});
+
export const copyToClipboard = (text: string) => {
return navigator.clipboard.writeText(text);
};
+
+const tryParseJson = (text: string) => {
+ try {
+ return JSON.parse(text);
+ } catch (error) {
+ return text;
+ }
+}
+
+
+const prettifyObj = (obj: object | string) => {
+ const rawObj = typeof obj === 'string' ? tryParseJson(obj) : obj;
+ return JSON.stringify(rawObj, null, 2);
+}
+
+export const renderJson = (obj: object | string | undefined) => {
+ if (!obj) {
+ return '