Add support for highlighting code, fixes #32
This commit is contained in:
		
							parent
							
								
									4dd2a16d07
								
							
						
					
					
						commit
						a23d0a5f73
					
				| 
						 | 
					@ -3,6 +3,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  import { apiKeyStorage, chatsStorage, addMessage, clearMessages } from "./Storage.svelte";
 | 
					  import { apiKeyStorage, chatsStorage, addMessage, clearMessages } from "./Storage.svelte";
 | 
				
			||||||
  import type { Request, Response, Message, Settings } from "./Types.svelte";
 | 
					  import type { Request, Response, Message, Settings } from "./Types.svelte";
 | 
				
			||||||
 | 
					  import Code from "./Code.svelte";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  import { afterUpdate, onMount } from "svelte";
 | 
					  import { afterUpdate, onMount } from "svelte";
 | 
				
			||||||
  import SvelteMarkdown from "svelte-markdown";
 | 
					  import SvelteMarkdown from "svelte-markdown";
 | 
				
			||||||
| 
						 | 
					@ -330,7 +331,7 @@
 | 
				
			||||||
          source={message.content}
 | 
					          source={message.content}
 | 
				
			||||||
          options={markedownOptions}
 | 
					          options={markedownOptions}
 | 
				
			||||||
          renderers={{
 | 
					          renderers={{
 | 
				
			||||||
            /*code: Code*/
 | 
					            code: Code,
 | 
				
			||||||
          }}
 | 
					          }}
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
| 
						 | 
					@ -342,7 +343,7 @@
 | 
				
			||||||
          source={message.content}
 | 
					          source={message.content}
 | 
				
			||||||
          options={markedownOptions}
 | 
					          options={markedownOptions}
 | 
				
			||||||
          renderers={{
 | 
					          renderers={{
 | 
				
			||||||
            /*code: Code*/
 | 
					            code: Code,
 | 
				
			||||||
          }}
 | 
					          }}
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
| 
						 | 
					@ -354,7 +355,7 @@
 | 
				
			||||||
          source={message.content}
 | 
					          source={message.content}
 | 
				
			||||||
          options={markedownOptions}
 | 
					          options={markedownOptions}
 | 
				
			||||||
          renderers={{
 | 
					          renderers={{
 | 
				
			||||||
            /*code: Code*/
 | 
					            code: Code,
 | 
				
			||||||
          }}
 | 
					          }}
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
        {#if message.usage}
 | 
					        {#if message.usage}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,23 +1,77 @@
 | 
				
			||||||
<script lang="ts">
 | 
					<script lang="ts">
 | 
				
			||||||
  // Disabled for now - it blows up the size too much
 | 
					  import { Highlight } from "svelte-highlight";
 | 
				
			||||||
  import { HighlightAuto } from "svelte-highlight";
 | 
					 | 
				
			||||||
  import style from "svelte-highlight/styles/edge-light";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  export let type: "code";
 | 
					  // Import both dark and light styles
 | 
				
			||||||
  export let raw: string;
 | 
					  import { github, githubDark } from "svelte-highlight/styles";
 | 
				
			||||||
  export let codeBlockStyle: "indented" | undefined = undefined;
 | 
					
 | 
				
			||||||
 | 
					  // 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 lang: string | undefined = undefined;
 | 
				
			||||||
  export let text: string;
 | 
					  export let text: string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Disable warnings
 | 
					  // Map lang string to LanguageType
 | 
				
			||||||
  type = "code";
 | 
					  let language: LanguageType<string>;
 | 
				
			||||||
  raw;
 | 
					  switch (lang) {
 | 
				
			||||||
  codeBlockStyle;
 | 
					    case "js":
 | 
				
			||||||
  lang;
 | 
					    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>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<svelte:head>
 | 
					<svelte:head>
 | 
				
			||||||
  {@html style}
 | 
					  {@html style}
 | 
				
			||||||
</svelte:head>
 | 
					</svelte:head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<HighlightAuto code={text} />
 | 
					<Highlight code={text} {language} />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue