@@ -3,10 +3,13 @@ import { customElement, property } from 'lit/decorators.js';
33import { unsafeHTML } from 'lit/directives/unsafe-html.js' ;
44import { until } from 'lit/directives/until.js' ;
55import type { RendererObject , RendererThis , Tokens } from 'marked' ;
6- import { marked } from 'marked' ;
6+ import { Marked } from 'marked' ;
77import type { ThemeIcon } from 'vscode' ;
88import { ruleStyles } from '../../../plus/shared/components/vscode.css' ;
99
10+ let inlineMarked : Marked | undefined ;
11+ let blockMarked : Marked | undefined ;
12+
1013@customElement ( 'gl-markdown' )
1114export class GlMarkdown extends LitElement {
1215 static override styles = [
@@ -124,12 +127,16 @@ export class GlMarkdown extends LitElement {
124127 }
125128
126129 private async renderMarkdown ( markdown : string ) {
127- marked . setOptions ( { gfm : true } ) ;
128-
129- const renderer = this . inline ? getInlineMarkdownRenderer ( ) : getMarkdownRenderer ( ) ;
130- marked . use ( { renderer : renderer } ) ;
130+ let rendered ;
131+ if ( this . inline ) {
132+ inlineMarked ??= new Marked ( { breaks : false , gfm : true , renderer : getInlineMarkdownRenderer ( ) } ) ;
133+ // Not using parseInline here, since our custom inline renderer handles lists and other block elements manually for prettier formatting
134+ rendered = await inlineMarked . parse ( markdownEscapeEscapedIcons ( markdown ) ) ;
135+ } else {
136+ blockMarked ??= new Marked ( { breaks : true , gfm : true , renderer : getMarkdownRenderer ( ) } ) ;
137+ rendered = await blockMarked . parse ( markdownEscapeEscapedIcons ( markdown ) ) ;
138+ }
131139
132- let rendered = await marked . parse ( markdownEscapeEscapedIcons ( markdown ) ) ;
133140 rendered = renderThemeIconsWithinText ( rendered ) ;
134141 return unsafeHTML ( rendered ) ;
135142 }
0 commit comments