From 11db926a7b471e9477595786ef451a916174cc18 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Mon, 24 Aug 2026 19:20:24 -0400 Subject: [PATCH] refac --- .../Markdown/MarkdownInlineTokens.svelte | 2 ++ .../components/common/RichTextInput.svelte | 5 +++++ src/lib/utils/marked/extension.ts | 21 ++++++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/lib/components/chat/Messages/Markdown/MarkdownInlineTokens.svelte b/src/lib/components/chat/Messages/Markdown/MarkdownInlineTokens.svelte index 01536a7bef..a453653514 100644 --- a/src/lib/components/chat/Messages/Markdown/MarkdownInlineTokens.svelte +++ b/src/lib/components/chat/Messages/Markdown/MarkdownInlineTokens.svelte @@ -107,6 +107,8 @@
{:else if token.type === 'del'} + {:else if token.type === 'underline'} + {:else if token.type === 'inlineKatex'} {#if token.text} diff --git a/src/lib/components/common/RichTextInput.svelte b/src/lib/components/common/RichTextInput.svelte index 53a042b6f5..2654c319fd 100644 --- a/src/lib/components/common/RichTextInput.svelte +++ b/src/lib/components/common/RichTextInput.svelte @@ -125,6 +125,11 @@ } }); + turndownService.addRule('underline', { + filter: 'u', + replacement: (content) => `${content}` + }); + import { onMount, onDestroy, tick, getContext } from 'svelte'; import { createEventDispatcher } from 'svelte'; diff --git a/src/lib/utils/marked/extension.ts b/src/lib/utils/marked/extension.ts index 86939c9151..c3f69faada 100644 --- a/src/lib/utils/marked/extension.ts +++ b/src/lib/utils/marked/extension.ts @@ -102,11 +102,30 @@ function detailsExtension() { }; } +function underlineExtension() { + return { + name: 'underline', + level: 'inline', + start: (src: string) => src.indexOf(''), + tokenizer(this: any, src: string) { + const match = /^([\s\S]+?)<\/u>/.exec(src); + if (!match) return; + + return { + type: 'underline', + raw: match[0], + text: match[1], + tokens: this.lexer.inlineTokens(match[1]) + }; + } + }; +} + export default function (options = {}) { return { tokenizer: { lheading: lheadingTokenizer as any }, - extensions: [detailsExtension()] + extensions: [detailsExtension(), underlineExtension()] }; }