From 05e70ea641688caf135cb73290cb83bdb0dce1fd Mon Sep 17 00:00:00 2001 From: Kuba Suder Date: Sun, 5 Jul 2026 03:59:57 +0200 Subject: [PATCH] extracted actual highlighting to a CodeBlock component --- src/components/CodeBlock.svelte | 129 ++++++++++++++++++++++++ src/components/PlainTextWithCode.svelte | 129 +----------------------- src/utils/code_markup_parser.ts | 2 +- 3 files changed, 133 insertions(+), 127 deletions(-) create mode 100644 src/components/CodeBlock.svelte diff --git a/src/components/CodeBlock.svelte b/src/components/CodeBlock.svelte new file mode 100644 index 0000000..4ab3a55 --- /dev/null +++ b/src/components/CodeBlock.svelte @@ -0,0 +1,129 @@ + + +{#if highlightResult.kind == 'highlighted'} +
{@html sanitizeHTML(highlightResult.html)}
+{:else} +
{highlightResult.text}
+{/if} + + diff --git a/src/components/PlainTextWithCode.svelte b/src/components/PlainTextWithCode.svelte index 3eaad59..c00139a 100644 --- a/src/components/PlainTextWithCode.svelte +++ b/src/components/PlainTextWithCode.svelte @@ -1,38 +1,11 @@ {#each segments as segment} @@ -45,13 +18,7 @@ {:else if segment.kind == 'inlineCode'} {segment.text} {:else} - {@const result = highlightCodeBlock(segment)} - - {#if result.kind == 'highlighted'} -
{@html sanitizeHTML(result.html)}
- {:else} -
{result.text}
- {/if} + {/if} {/each} @@ -64,99 +31,9 @@ padding: 1px 3px; } - pre { - overflow-x: auto; - max-width: 100%; - margin: 10px 0; - padding: 8px 10px; - border-radius: 6px; - background-color: rgba(0, 0, 0, 0.07); - } - - pre code { - display: block; - background-color: transparent; - border-radius: 0; - padding: 0; - white-space: pre; - } - - pre code :global(.hljs-keyword), - pre code :global(.hljs-selector-tag), - pre code :global(.hljs-title.function_) { - color: #9d174d; - } - - pre code :global(.hljs-built_in), - pre code :global(.hljs-title.class_), - pre code :global(.hljs-type) { - color: #7c3aed; - } - - pre code :global(.hljs-string), - pre code :global(.hljs-attr), - pre code :global(.hljs-symbol) { - color: #047857; - } - - pre code :global(.hljs-number), - pre code :global(.hljs-literal) { - color: #b45309; - } - - pre code :global(.hljs-comment), - pre code :global(.hljs-quote) { - color: #6b7280; - font-style: italic; - } - - pre code :global(.hljs-meta), - pre code :global(.hljs-tag), - pre code :global(.hljs-name) { - color: #0369a1; - } - @media (prefers-color-scheme: dark) { code { background-color: rgba(255, 255, 255, 0.12); } - - pre { - background-color: rgba(255, 255, 255, 0.1); - } - - pre code :global(.hljs-keyword), - pre code :global(.hljs-selector-tag), - pre code :global(.hljs-title.function_) { - color: #f472b6; - } - - pre code :global(.hljs-built_in), - pre code :global(.hljs-title.class_), - pre code :global(.hljs-type) { - color: #c4b5fd; - } - - pre code :global(.hljs-string), - pre code :global(.hljs-attr), - pre code :global(.hljs-symbol) { - color: #6ee7b7; - } - - pre code :global(.hljs-number), - pre code :global(.hljs-literal) { - color: #fbbf24; - } - - pre code :global(.hljs-comment), - pre code :global(.hljs-quote) { - color: #9ca3af; - } - - pre code :global(.hljs-meta), - pre code :global(.hljs-tag), - pre code :global(.hljs-name) { - color: #7dd3fc; - } } diff --git a/src/utils/code_markup_parser.ts b/src/utils/code_markup_parser.ts index f003105..34742bf 100644 --- a/src/utils/code_markup_parser.ts +++ b/src/utils/code_markup_parser.ts @@ -1,6 +1,6 @@ import type { ByteSlice, Facet } from '../../lib/rich_text_lite.js'; -export type Segment = { +type Segment = { kind: 'text' | 'inlineCode' | 'codeBlock'; text: string; start: number; -- 2.51.2