test/node_modules/@vuepress/plugin-prismjs/lib/node/resolveHighlighter.js
2024-08-13 09:27:52 +08:00

39 lines
1.2 KiB
JavaScript

import Prism from 'prismjs';
import { loadLanguages } from './loadLanguages.js';
import { resolveLanguage } from './utils/index.js';
const languageNameMap = {
html: 'markup',
vue: 'markup',
};
// documentation language of corresponding language
const docLangMap = {
csharp: 'xml-doc',
fsharp: 'xml-doc',
java: 'javadoc',
javascript: 'jsdoc',
php: 'phpdoc',
typescript: 'jsdoc',
};
/**
* Resolve syntax highlighter for corresponding language
*/
export const resolveHighlighter = (language) => {
const languageInfo = resolveLanguage(language);
language = languageInfo.name;
// get the languages that need to be loaded
const lang = languageNameMap[language] || language;
const langsToLoad = [lang];
// doc language of current language
if (docLangMap[lang]) {
langsToLoad.push(docLangMap[lang]);
}
// try to load languages
loadLanguages(langsToLoad);
// return null if current language could not be loaded
// the doc language is not required so we don't check it here
if (!Prism.languages[lang]) {
return null;
}
return (code) => Prism.highlight(code, Prism.languages[lang], lang);
};