From e892c9b9b86192f2bc8f6dcef9b69f6aaa2c86de Mon Sep 17 00:00:00 2001 From: Timothy Carambat Date: Wed, 19 Nov 2025 14:09:24 -0800 Subject: [PATCH] add `svelte` rendering to markdown renderer (#4663) * add `svelte` rendering to markdown renderer resolves #4586 closes #4588 * linting --- .../src/utils/chat/hljs-libraries/svelte.js | 48 +++++++++++++++++++ frontend/src/utils/chat/markdown.js | 4 ++ 2 files changed, 52 insertions(+) create mode 100644 frontend/src/utils/chat/hljs-libraries/svelte.js diff --git a/frontend/src/utils/chat/hljs-libraries/svelte.js b/frontend/src/utils/chat/hljs-libraries/svelte.js new file mode 100644 index 00000000..f8208377 --- /dev/null +++ b/frontend/src/utils/chat/hljs-libraries/svelte.js @@ -0,0 +1,48 @@ +export default function hljsDefineSvelte(hljs) { + return { + subLanguage: "xml", + contains: [ + hljs.COMMENT("", { + relevance: 10, + }), + { + begin: /^(\s*)()/gm, + end: /^(\s*)(<\/script>)/gm, + subLanguage: "javascript", + excludeBegin: true, + excludeEnd: true, + contains: [ + { + begin: /^(\s*)(\$:)/gm, + end: /(\s*)/gm, + className: "keyword", + }, + ], + }, + { + begin: /^(\s*)()/gm, + end: /^(\s*)(<\/style>)/gm, + subLanguage: "css", + excludeBegin: true, + excludeEnd: true, + }, + { + begin: /\{/gm, + end: /\}/gm, + subLanguage: "javascript", + contains: [ + { + begin: /[\{]/, + end: /[\}]/, + skip: true, + }, + { + begin: /([#:\/@])(if|else|each|await|then|catch|debug|html)/gm, + className: "keyword", + relevance: 10, + }, + ], + }, + ], + }; +} diff --git a/frontend/src/utils/chat/markdown.js b/frontend/src/utils/chat/markdown.js index 27e077a5..b97fc7be 100644 --- a/frontend/src/utils/chat/markdown.js +++ b/frontend/src/utils/chat/markdown.js @@ -7,6 +7,10 @@ import "./themes/github-dark.css"; import "./themes/github.css"; import { v4 } from "uuid"; +// Register custom lanaguages +import hljsDefineSvelte from "./hljs-libraries/svelte"; +hljs.registerLanguage("svelte", hljsDefineSvelte); + const markdown = markdownIt({ html: Appearance.get("renderHTML") ?? false, typographer: true,