From 0066760f86e9895e49aa7378c1b5b961b01eed96 Mon Sep 17 00:00:00 2001 From: Morgan Date: Tue, 23 Apr 2024 09:10:57 +0900 Subject: [PATCH] Added KaTeX Rendering --- .env | 1 + .gitignore | 2 +- package-lock.json | 26 +++++++++++++ package.json | 1 + src/lib/Code.svelte | 26 +++++++++++-- src/lib/Codespan.svelte | 20 ++++++++++ src/lib/EditMessage.svelte | 76 ++++++++++++++++++++++++++++++++++++-- 7 files changed, 144 insertions(+), 8 deletions(-) create mode 100644 src/lib/Codespan.svelte diff --git a/.env b/.env index 38f7106..76bd0df 100644 --- a/.env +++ b/.env @@ -2,3 +2,4 @@ #VITE_API_BASE=http://localhost:5174 #VITE_ENDPOINT_COMPLETIONS=/v1/chat/completions #VITE_ENDPOINT_MODELS=/v1/models +#VITE_RENDER_LATEX=false diff --git a/.gitignore b/.gitignore index d8e5134..77b4273 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,7 @@ yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log* - +yarn.lock node_modules dist dist-ssr diff --git a/package-lock.json b/package-lock.json index 6f63e20..6e51f89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "eslint-plugin-svelte3": "^4.0.0", "flourite": "^1.2.4", "gpt-tokenizer": "^2.1.2", + "katex": "^0.16.10", "llama-tokenizer-js": "^1.1.3", "postcss": "^8.4.32", "sass": "^1.69.7", @@ -3273,6 +3274,31 @@ "json5": "lib/cli.js" } }, + "node_modules/katex": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.10.tgz", + "integrity": "sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==", + "dev": true, + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", diff --git a/package.json b/package.json index 84457fa..3080273 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "eslint-plugin-svelte3": "^4.0.0", "flourite": "^1.2.4", "gpt-tokenizer": "^2.1.2", + "katex": "^0.16.10", "llama-tokenizer-js": "^1.1.3", "postcss": "^8.4.32", "sass": "^1.69.7", diff --git a/src/lib/Code.svelte b/src/lib/Code.svelte index f570a10..8000981 100644 --- a/src/lib/Code.svelte +++ b/src/lib/Code.svelte @@ -27,12 +27,26 @@ type LanguageType } from 'svelte-highlight/languages/index' + import katex from 'katex' + import 'katex/contrib/mhchem' + export const type: 'code' = 'code' export const raw: string = '' export const codeBlockStyle: 'indented' | undefined = undefined export let lang: string | undefined export let text: string + let renderedMath: string | undefined + + $: if (lang === 'rendermath') { + renderedMath = katex.renderToString(text, { + throwOnError: false, + displayMode: true + }) + } else { + renderedMath = undefined + } + // Map lang string to LanguageType let language: LanguageType @@ -117,7 +131,11 @@ {@html style} -
- - -
+{#if lang === 'rendermath'} + {@html renderedMath} +{:else} +
+ + +
+{/if} \ No newline at end of file diff --git a/src/lib/Codespan.svelte b/src/lib/Codespan.svelte new file mode 100644 index 0000000..2ccf5cd --- /dev/null +++ b/src/lib/Codespan.svelte @@ -0,0 +1,20 @@ + + +{#if renderedMath} + {@html renderedMath} +{:else} + {raw.replace(/`/g, '')} +{/if} diff --git a/src/lib/EditMessage.svelte b/src/lib/EditMessage.svelte index 596c961..f737be1 100644 --- a/src/lib/EditMessage.svelte +++ b/src/lib/EditMessage.svelte @@ -1,18 +1,21 @@