diff --git a/packages/@vuepress/markdown/lib/highlight.js b/packages/@vuepress/markdown/lib/highlight.js index af57356330..fb32ce3251 100644 --- a/packages/@vuepress/markdown/lib/highlight.js +++ b/packages/@vuepress/markdown/lib/highlight.js @@ -24,12 +24,30 @@ function getLangCodeFromExtension (extension) { yml: 'yaml', styl: 'stylus', kt: 'kotlin', - rs: 'rust' + rs: 'rust', + cs: 'csharp', + fs: 'fsharp' } return extensionMap[extension] || extension } +function getDocLangCodeFromLang (lang) { + const docMap = { + 'js': 'jsdoc', + 'javascript': 'jsdoc', + 'typescript': 'jsdoc', + 'markup': 'jsdoc', + 'java': 'javadoc', + 'php': 'phpdoc', + 'csharp': 'xml-doc', + 'fsharp': 'xml-doc', + 'vbnet': 'xml-doc' + } + + return docMap[lang] +} + module.exports = (str, lang) => { if (!lang) { return wrap(str, 'text') @@ -46,6 +64,16 @@ module.exports = (str, lang) => { logger.warn(chalk.yellow(`[vuepress] Syntax highlight for language "${lang}" is not supported.`)) } } + + const docLang = getDocLangCodeFromLang(lang) + if (docLang && !prism.languages[docLang]) { + try { + loadLanguages([docLang]) + } catch (e) { + logger.warn(chalk.yellow(`[vuepress] Syntax highlight for language "${docLang}" is not supported.`)) + } + } + if (prism.languages[lang]) { const code = prism.highlight(str, prism.languages[lang], lang) return wrap(code, rawLang) diff --git a/packages/@vuepress/markdown/package.json b/packages/@vuepress/markdown/package.json index 28f80de928..fc82048a5e 100644 --- a/packages/@vuepress/markdown/package.json +++ b/packages/@vuepress/markdown/package.json @@ -28,7 +28,7 @@ "markdown-it-chain": "^1.3.0", "markdown-it-emoji": "^1.4.0", "markdown-it-table-of-contents": "^0.4.0", - "prismjs": "^1.13.0" + "prismjs": "^1.21.0" }, "publishConfig": { "access": "public"