From 4d9dddd8b5d3032314ae94b732a01db8a0a848fa Mon Sep 17 00:00:00 2001 From: tianyaxiang Date: Sun, 2 Feb 2025 11:17:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=9D=97=E4=B8=BB=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/markdown.ts | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/lib/markdown.ts b/src/lib/markdown.ts index bf66b6e..26de77d 100644 --- a/src/lib/markdown.ts +++ b/src/lib/markdown.ts @@ -145,7 +145,6 @@ function getTokenStyles(theme: CodeThemeId, tokenType: string): string { const tokenColor = themeConfig.theme[tokenType as keyof typeof themeConfig.theme] if (!tokenColor) return '' - return `color: ${tokenColor};` } @@ -196,29 +195,35 @@ export function convertToWechat(markdown: string, options: RendererOptions = def } // 重写 code 方法 - renderer.code = function({ text, lang }: Tokens.Code) { + renderer.code = function({ text, lang }: Tokens.Code) { + const codeStyle = (mergedOptions.block?.code_pre || {}) as StyleOptions const style: StyleOptions = { ...codeStyle, ...getCodeThemeStyles(mergedOptions.codeTheme) } const styleStr = cssPropertiesToString(style) - // 代码高亮处理 let highlighted = text if (lang && Prism.languages[lang]) { + // Helper function to recursively process tokens + const processToken = (token: string | Prism.Token): string => { + if (typeof token === 'string') { + return token + } + + const tokenStyle = getTokenStyles(mergedOptions.codeTheme, token.type) + const content = Array.isArray(token.content) + ? token.content.map(t => processToken(t)).join('') + : processToken(token.content) + + return `${content}` + } + try { const grammar = Prism.languages[lang] const tokens = Prism.tokenize(text, grammar) - - highlighted = tokens.map(token => { - if (typeof token === 'string') { - return token - } - - const tokenStyle = getTokenStyles(mergedOptions.codeTheme, token.type) - return `${token.content}` - }).join('') + highlighted = tokens.map(processToken).join('') } catch (error) { console.error(`Error highlighting code: ${error}`) } @@ -228,7 +233,8 @@ export function convertToWechat(markdown: string, options: RendererOptions = def } // 重写 codespan 方法 - renderer.codespan = function({ text }: Tokens.Codespan) { + renderer.codespan = function({ text }: Tokens.Codespan) { + const codespanStyle = (mergedOptions.inline?.codespan || {}) as StyleOptions const style: StyleOptions = { ...codespanStyle