Add support for highlighting code, fixes #32

This commit is contained in:
Niek van der Maas 2023-03-10 11:17:01 +01:00
parent 4dd2a16d07
commit a23d0a5f73
2 changed files with 70 additions and 15 deletions

View File

@ -3,6 +3,7 @@
import { apiKeyStorage, chatsStorage, addMessage, clearMessages } from "./Storage.svelte";
import type { Request, Response, Message, Settings } from "./Types.svelte";
import Code from "./Code.svelte";
import { afterUpdate, onMount } from "svelte";
import SvelteMarkdown from "svelte-markdown";
@ -330,7 +331,7 @@
source={message.content}
options={markedownOptions}
renderers={{
/*code: Code*/
code: Code,
}}
/>
</div>
@ -342,7 +343,7 @@
source={message.content}
options={markedownOptions}
renderers={{
/*code: Code*/
code: Code,
}}
/>
</div>
@ -354,7 +355,7 @@
source={message.content}
options={markedownOptions}
renderers={{
/*code: Code*/
code: Code,
}}
/>
{#if message.usage}

View File

@ -1,23 +1,77 @@
<script lang="ts">
// Disabled for now - it blows up the size too much
import { HighlightAuto } from "svelte-highlight";
import style from "svelte-highlight/styles/edge-light";
import { Highlight } from "svelte-highlight";
export let type: "code";
export let raw: string;
export let codeBlockStyle: "indented" | undefined = undefined;
// Import both dark and light styles
import { github, githubDark } from "svelte-highlight/styles";
// Style depends on system theme
const style = window.matchMedia("(prefers-color-scheme: dark)").matches ? githubDark : github;
// Import all supported languages
import {
javascript,
python,
typescript,
ruby,
go,
java,
sql,
shell,
php,
plaintext,
type LanguageType,
} from "svelte-highlight/languages";
export const type: "code" = "code";
export const raw: string = "";
export const codeBlockStyle: "indented" | undefined = undefined;
export let lang: string | undefined = undefined;
export let text: string;
// Disable warnings
type = "code";
raw;
codeBlockStyle;
lang;
// Map lang string to LanguageType
let language: LanguageType<string>;
switch (lang) {
case "js":
case "javascript":
language = javascript;
break;
case "py":
case "python":
language = python;
break;
case "ts":
case "typescript":
language = typescript;
break;
case "rb":
case "ruby":
language = ruby;
break;
case "go":
case "golang":
language = go;
break;
case "java":
language = java;
break;
case "sql":
language = sql;
break;
case "sh":
case "shell":
case "bash":
language = shell;
break;
case "php":
language = php;
break;
default:
language = plaintext;
}
</script>
<svelte:head>
{@html style}
</svelte:head>
<HighlightAuto code={text} />
<Highlight code={text} {language} />