From c08dde04768bd69c55c5162004767d23f19631e9 Mon Sep 17 00:00:00 2001 From: Kuba Suder Date: Fri, 3 Jul 2026 23:37:49 +0200 Subject: [PATCH] mark inline code and code blocks --- src/components/PlainTextWithCode.svelte | 59 +++++++ src/components/RichTextFromFacets.svelte | 20 ++- src/components/posts/PostBody.svelte | 11 +- src/utils/code_markup_parser.ts | 192 +++++++++++++++++++++++ 4 files changed, 272 insertions(+), 10 deletions(-) create mode 100644 src/components/PlainTextWithCode.svelte create mode 100644 src/utils/code_markup_parser.ts diff --git a/src/components/PlainTextWithCode.svelte b/src/components/PlainTextWithCode.svelte new file mode 100644 index 0000000..7ef40f6 --- /dev/null +++ b/src/components/PlainTextWithCode.svelte @@ -0,0 +1,59 @@ + + +{#each segments as segment} + {#if segment.kind == 'text'} + {@const lines = segment.text.split("\n")} + + {#each lines as line, i} + {#if i > 0}
{/if}{line} + {/each} + {:else if segment.kind == 'inlineCode'} + {segment.text} + {:else} +
{segment.text}
+ {/if} +{/each} + + diff --git a/src/components/RichTextFromFacets.svelte b/src/components/RichTextFromFacets.svelte index 1ce8a38..c907cea 100644 --- a/src/components/RichTextFromFacets.svelte +++ b/src/components/RichTextFromFacets.svelte @@ -2,10 +2,20 @@ import { RichText, type Facet } from '../../lib/rich_text_lite.js'; import { linkToHashtagPage } from '../router.js'; import { isValidURL } from '../utils.js'; + import { CodeMarkupParser } from '../utils/code_markup_parser.js'; + import PlainTextWithCode from './PlainTextWithCode.svelte'; - let { text, facets }: { text: string, facets: Facet[] } = $props(); + type Props = { + text: string; + facets: Facet[] | undefined; + renderCode?: boolean; + } - let richText = $derived(new RichText({ text, facets })); + let { text, facets, renderCode = false }: Props = $props(); + + let parser = $derived(new CodeMarkupParser(text)); + let filteredFacets = $derived(renderCode ? parser.removeFacetsInCodeSegments(facets) : facets); + let richText = $derived(new RichText({ text, facets: filteredFacets })); let segments = $derived(richText.segments()); @@ -21,10 +31,6 @@ {:else if segment.tag} {segment.text} {:else} - {@const lines = segment.text.split("\n")} - - {#each lines as line, i} - {#if i > 0}
{/if}{line} - {/each} + {/if} {/each} diff --git a/src/components/posts/PostBody.svelte b/src/components/posts/PostBody.svelte index 583acc2..9925b64 100644 --- a/src/components/posts/PostBody.svelte +++ b/src/components/posts/PostBody.svelte @@ -67,12 +67,17 @@ {@html sanitizeHTML(post.originalFediContent)} {:else} -

- -

+
+ +
{/if}