From f62c2f1e6e014d57ceddd19dd3f6e70dc350982e Mon Sep 17 00:00:00 2001 From: xinconan Date: Wed, 7 Sep 2022 15:35:59 +0800 Subject: [PATCH 1/2] feat: add highlight default lang --- docs/config/app-configs.md | 3 +++ src/node/markdown/markdown.ts | 5 ++++- src/node/markdown/plugins/highlight.ts | 5 +++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/config/app-configs.md b/docs/config/app-configs.md index 34d147f2b6b2..1d3b68d72208 100644 --- a/docs/config/app-configs.md +++ b/docs/config/app-configs.md @@ -160,6 +160,9 @@ interface MarkdownOptions extends MarkdownIt.Options { disable?: boolean } + // set highlight default lang if not provide + highlightDefaultLang?: string + // @mdit-vue/plugin-frontmatter plugin options. // See: https://github.com/mdit-vue/mdit-vue/tree/main/packages/plugin-frontmatter#options frontmatter?: FrontmatterPluginOptions diff --git a/src/node/markdown/markdown.ts b/src/node/markdown/markdown.ts index bd9c3aef2999..16f003035440 100644 --- a/src/node/markdown/markdown.ts +++ b/src/node/markdown/markdown.ts @@ -40,6 +40,7 @@ export interface MarkdownOptions extends MarkdownIt.Options { allowedAttributes?: string[] disable?: boolean } + highlightDefaultLang?: string frontmatter?: FrontmatterPluginOptions headers?: HeadersPluginOptions sfc?: SfcPluginOptions @@ -60,7 +61,9 @@ export const createMarkdownRenderer = async ( const md = MarkdownIt({ html: true, linkify: true, - highlight: options.highlight || (await highlight(options.theme)), + highlight: + options.highlight || + (await highlight(options.theme, options.highlightDefaultLang)), ...options }) as MarkdownRenderer diff --git a/src/node/markdown/plugins/highlight.ts b/src/node/markdown/plugins/highlight.ts index 761aff428f43..6c87be3cc6e5 100644 --- a/src/node/markdown/plugins/highlight.ts +++ b/src/node/markdown/plugins/highlight.ts @@ -33,7 +33,8 @@ const attrsToLines = (attrs: string): HtmlRendererOptions['lineOptions'] => { } export async function highlight( - theme: ThemeOptions = 'material-palenight' + theme: ThemeOptions = 'material-palenight', + defaultLang: string = '' ): Promise<(str: string, lang: string, attrs: string) => string> { const hasSingleTheme = typeof theme === 'string' || 'name' in theme const getThemeName = (themeValue: IThemeRegistration) => @@ -47,7 +48,7 @@ export async function highlight( return (str: string, lang: string, attrs: string) => { const vPre = vueRE.test(lang) ? '' : 'v-pre' - lang = lang.replace(vueRE, '').toLowerCase() + lang = lang.replace(vueRE, '').toLowerCase() || defaultLang const lineOptions = attrsToLines(attrs) From 24e85fe61afaebcae65513f7f71de14557347452 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Wed, 21 Dec 2022 16:00:47 +0530 Subject: [PATCH 2/2] rename option to `defaultHighlightLang` --- docs/config/app-configs.md | 13 +++++++++---- src/node/markdown/markdown.ts | 4 ++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/config/app-configs.md b/docs/config/app-configs.md index 36af210436c4..14b99d4dc376 100644 --- a/docs/config/app-configs.md +++ b/docs/config/app-configs.md @@ -69,7 +69,10 @@ Additional elements to render in the `` tag in the page HTML. The user-add ```ts export default { head: [ - ['link', { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' }] + [ + 'link', + { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' } + ] // would render: ] } @@ -164,8 +167,8 @@ interface MarkdownOptions extends MarkdownIt.Options { disable?: boolean } - // set highlight default lang if not provide - highlightDefaultLang?: string + // specify default language for syntax highlighter + defaultHighlightLang?: string // @mdit-vue/plugin-frontmatter plugin options. // See: https://github.com/mdit-vue/mdit-vue/tree/main/packages/plugin-frontmatter#options @@ -301,6 +304,7 @@ Don't mutate anything inside the `ctx`. ```ts export default { async transformHead(ctx) { + // ... } } ``` @@ -330,6 +334,7 @@ Don't mutate anything inside the `ctx`. Also, modifying the html content may cau ```ts export default { async transformHtml(code, id, context) { + // ... } } ``` @@ -340,7 +345,6 @@ export default { `transformPageData` is a hook to transform the `pageData` of each page. You can directly mutate `pageData` or return changed values which will be merged into PageData. - ```ts export default { async transformPageData(pageData) { @@ -365,6 +369,7 @@ export default { ```ts export default { async buildEnd(siteConfig) { + // ... } } ``` diff --git a/src/node/markdown/markdown.ts b/src/node/markdown/markdown.ts index 1012975342db..d01cf8a4351b 100644 --- a/src/node/markdown/markdown.ts +++ b/src/node/markdown/markdown.ts @@ -40,7 +40,7 @@ export interface MarkdownOptions extends MarkdownIt.Options { allowedAttributes?: string[] disable?: boolean } - highlightDefaultLang?: string + defaultHighlightLang?: string frontmatter?: FrontmatterPluginOptions headers?: HeadersPluginOptions sfc?: SfcPluginOptions @@ -63,7 +63,7 @@ export const createMarkdownRenderer = async ( linkify: true, highlight: options.highlight || - (await highlight(options.theme, options.highlightDefaultLang)), + (await highlight(options.theme, options.defaultHighlightLang)), ...options }) as MarkdownRenderer