From b13e87fad86a48d720e3c300e7e66a15d9ef9b21 Mon Sep 17 00:00:00 2001 From: Liam Ederzeel Date: Tue, 30 Jan 2024 22:44:16 +0100 Subject: [PATCH 1/3] fix: markdown-it-attrs behaviour in pre wrapper plugin --- src/node/markdown/plugins/preWrapper.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/node/markdown/plugins/preWrapper.ts b/src/node/markdown/plugins/preWrapper.ts index 906cac2a..d169ba8c 100644 --- a/src/node/markdown/plugins/preWrapper.ts +++ b/src/node/markdown/plugins/preWrapper.ts @@ -18,13 +18,24 @@ export function preWrapperPlugin(md: MarkdownIt, options: Options) { token.info = token.info.replace(/ active$/, '').replace(/ active /, ' ') const lang = extractLang(token.info) + const classes = `language-${lang}${getAdaptiveThemeMarker( + options + )}${active}` + const classAttr = token.attrs && token.attrs.find((x) => x[0] === 'class') + if (classAttr != null) { + classAttr[1] = `${classes} ${classAttr[1]}` + } else { + const attrs: Array<[string, string]> = [['class', classes]] + + token.attrs = token.attrs ? token.attrs.concat(attrs) : attrs + } + + const rawCode = fence(...args) return ( - `
` + + `
` + `` + - `${lang}` + - fence(...args) + - '
' + `${lang}${rawCode}
` ) } } From 2231893b1610cf88c09cb23ac4b7a1c7ab375769 Mon Sep 17 00:00:00 2001 From: Liam Ederzeel Date: Wed, 31 Jan 2024 13:47:34 +0100 Subject: [PATCH 2/3] fix: prevent preWrapper from rendering highlightLine syntax as attribute --- src/node/markdown/plugins/highlightLines.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/node/markdown/plugins/highlightLines.ts b/src/node/markdown/plugins/highlightLines.ts index f03ae617..e8f3ac4b 100644 --- a/src/node/markdown/plugins/highlightLines.ts +++ b/src/node/markdown/plugins/highlightLines.ts @@ -14,11 +14,22 @@ export const highlightLinePlugin = (md: MarkdownIt) => { // due to use of markdown-it-attrs, the {0} syntax would have been // converted to attrs on the token - const attr = token.attrs && token.attrs[0] + let highlightLineAttr + if (token.attrs) { + token.attrs = token.attrs.filter((x) => { + const isHighlightLineAttr = /^[\d,-]+$/.test(x[0]) + + if (isHighlightLineAttr) { + highlightLineAttr = x + } + + return !isHighlightLineAttr + }) + } let lines = null - if (!attr) { + if (!highlightLineAttr) { // markdown-it-attrs maybe disabled const rawInfo = token.info @@ -35,7 +46,7 @@ export const highlightLinePlugin = (md: MarkdownIt) => { } if (!lines) { - lines = attr![0] + lines = highlightLineAttr![0] if (!lines || !/[\d,-]+/.test(lines)) { return fence(...args) From 8f0b2a0eafed1dfde8c3440c2dbfa5f54ea04f42 Mon Sep 17 00:00:00 2001 From: Liam Ederzeel Date: Thu, 15 Aug 2024 21:34:19 +0200 Subject: [PATCH 3/3] refactor: simplefiy joining class attributes --- src/node/markdown/plugins/preWrapper.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/node/markdown/plugins/preWrapper.ts b/src/node/markdown/plugins/preWrapper.ts index d169ba8c..a7b00dc3 100644 --- a/src/node/markdown/plugins/preWrapper.ts +++ b/src/node/markdown/plugins/preWrapper.ts @@ -26,9 +26,7 @@ export function preWrapperPlugin(md: MarkdownIt, options: Options) { if (classAttr != null) { classAttr[1] = `${classes} ${classAttr[1]}` } else { - const attrs: Array<[string, string]> = [['class', classes]] - - token.attrs = token.attrs ? token.attrs.concat(attrs) : attrs + token.attrJoin('class', classes) } const rawCode = fence(...args)