From c0a82400082934a2e0401a522d7f86089f4811bb Mon Sep 17 00:00:00 2001 From: ngc2207 Date: Wed, 8 Jan 2025 20:29:09 +0800 Subject: [PATCH] feat(playground): add syntax highlighting to output display and update UI components for localization --- package.json | 2 ++ src/actions/docker/run.ts | 8 +++++++- src/app/playground/components/banner.tsx | 2 +- src/app/playground/components/button/run.tsx | 2 +- src/app/playground/components/chat.tsx | 2 +- src/app/playground/components/nav.tsx | 2 +- src/app/playground/components/terminal.tsx | 6 +++--- .../playground/layout/terminal/components/message.tsx | 2 +- src/app/playground/layout/terminal/result.tsx | 9 +++++++-- 9 files changed, 24 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 5d5ccd9..bc42897 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "react": "^19.0.0", "react-dom": "^19.0.0", "react-resizable-panels": "^2.1.7", + "react-syntax-highlighter": "^15.6.1", "tailwind-merge": "^2.6.0", "tailwindcss-animate": "^1.0.7", "vscode-languageclient": "~8.1.0", @@ -50,6 +51,7 @@ "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", + "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", "eslint-config-next": "15.1.3", "postcss": "^8", diff --git a/src/actions/docker/run.ts b/src/actions/docker/run.ts index 2ea52f9..2a4ece0 100644 --- a/src/actions/docker/run.ts +++ b/src/actions/docker/run.ts @@ -58,10 +58,15 @@ async function getOutputAndResultType( ): Promise { return new Promise((resolve, reject) => { let output = ""; + stream.on("data", (chunk) => { + console.debug("Chunk received:", Buffer.from(chunk).toString("hex")); output += chunk.toString("utf8"); }); + stream.on("end", () => { + console.debug("Final output:", output); + const isSuccessful = !output.includes("error:"); const message = isSuccessful ? "运行成功:编译成功" @@ -69,11 +74,12 @@ async function getOutputAndResultType( resolve({ success: isSuccessful, - output, + output: output.replace(/[^\x20-\x7E\n\r]/g, ""), // 移除非打印字符 message, type: isSuccessful ? ResultType.Success : ResultType.CompilationError, }); }); + stream.on("error", (err) => { reject(err); }); diff --git a/src/app/playground/components/banner.tsx b/src/app/playground/components/banner.tsx index 29ff797..545cca7 100644 --- a/src/app/playground/components/banner.tsx +++ b/src/app/playground/components/banner.tsx @@ -6,7 +6,7 @@ export default function Banner() {

- Introducing to Judge4c + 了解更多关于 Judge4c 的信息

-

Chat with AI Assistant ✨

+

与 AI 助教交谈 ✨

diff --git a/src/app/playground/components/nav.tsx b/src/app/playground/components/nav.tsx index ac730b5..161ed0a 100644 --- a/src/app/playground/components/nav.tsx +++ b/src/app/playground/components/nav.tsx @@ -20,7 +20,7 @@ export default function Nav() { - Playground + 训练场 diff --git a/src/app/playground/components/terminal.tsx b/src/app/playground/components/terminal.tsx index 77c66ff..1f33337 100644 --- a/src/app/playground/components/terminal.tsx +++ b/src/app/playground/components/terminal.tsx @@ -20,7 +20,7 @@ export default function Terminal() { strokeWidth={2} aria-hidden="true" /> - Terminal + 终端
diff --git a/src/app/playground/layout/terminal/components/message.tsx b/src/app/playground/layout/terminal/components/message.tsx index 0ab6972..aea4d88 100644 --- a/src/app/playground/layout/terminal/components/message.tsx +++ b/src/app/playground/layout/terminal/components/message.tsx @@ -41,7 +41,7 @@ export function Message({ type, message }: MessageProps) { const { icon: Icon, colorClass } = messageTypeIconMap[type]; return ( -
+

{type && message && ( - + {output && ( -

{output}
+ + {output} + )} )}