diff options
Diffstat (limited to 'node_modules/vuepress/lib/markdown/highlight.js')
| -rw-r--r-- | node_modules/vuepress/lib/markdown/highlight.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/node_modules/vuepress/lib/markdown/highlight.js b/node_modules/vuepress/lib/markdown/highlight.js new file mode 100644 index 00000000..02d5e3ff --- /dev/null +++ b/node_modules/vuepress/lib/markdown/highlight.js @@ -0,0 +1,47 @@ +const chalk = require('chalk') +const prism = require('prismjs') +const loadLanguages = require('prismjs/components/index') +const escapeHtml = require('escape-html') +const logger = require('../util/logger') + +// required to make embedded highlighting work... +loadLanguages(['markup', 'css', 'javascript']) + +function wrap (code, lang) { + if (lang === 'text') { + code = escapeHtml(code) + } + return `<pre v-pre class="language-${lang}"><code>${code}</code></pre>` +} + +module.exports = (str, lang) => { + if (!lang) { + return wrap(str, 'text') + } + lang = lang.toLowerCase() + const rawLang = lang + if (lang === 'vue' || lang === 'html') { + lang = 'markup' + } + if (lang === 'md') { + lang = 'markdown' + } + if (lang === 'ts') { + lang = 'typescript' + } + if (lang === 'py') { + lang = 'python' + } + if (!prism.languages[lang]) { + try { + loadLanguages([lang]) + } catch (e) { + logger.warn(chalk.yellow(`[vuepress] Syntax highlight for language "${lang}" is not supported.`)) + } + } + if (prism.languages[lang]) { + const code = prism.highlight(str, prism.languages[lang], lang) + return wrap(code, rawLang) + } + return wrap(str, 'text') +} |
