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