diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/prismjs/components/index.js | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/prismjs/components/index.js')
| -rw-r--r-- | node_modules/prismjs/components/index.js | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/node_modules/prismjs/components/index.js b/node_modules/prismjs/components/index.js new file mode 100644 index 00000000..fe5940ae --- /dev/null +++ b/node_modules/prismjs/components/index.js @@ -0,0 +1,82 @@ +var components = require('../components.js'); +var peerDependentsMap = null; + +function getPeerDependentsMap() { + var peerDependentsMap = {}; + Object.keys(components.languages).forEach(function (language) { + if (language === 'meta') { + return false; + } + if (components.languages[language].peerDependencies) { + var peerDependencies = components.languages[language].peerDependencies; + if (!Array.isArray(peerDependencies)) { + peerDependencies = [peerDependencies]; + } + peerDependencies.forEach(function (peerDependency) { + if (!peerDependentsMap[peerDependency]) { + peerDependentsMap[peerDependency] = []; + } + peerDependentsMap[peerDependency].push(language); + }); + } + }); + return peerDependentsMap; +} + +function getPeerDependents(mainLanguage) { + if (!peerDependentsMap) { + peerDependentsMap = getPeerDependentsMap(); + } + return peerDependentsMap[mainLanguage] || []; +} + +function loadLanguages(arr, withoutDependencies) { + // If no argument is passed, load all components + if (!arr) { + arr = Object.keys(components.languages).filter(function (language) { + return language !== 'meta'; + }); + } + if (arr && !arr.length) { + return; + } + + if (!Array.isArray(arr)) { + arr = [arr]; + } + + arr.forEach(function (language) { + if (!components.languages[language]) { + console.warn('Language does not exist ' + language); + return; + } + // Load dependencies first + if (!withoutDependencies && components.languages[language].require) { + loadLanguages(components.languages[language].require); + } + + var pathToLanguage = './prism-' + language; + delete require.cache[require.resolve(pathToLanguage)]; + delete Prism.languages[language]; + require(pathToLanguage); + + // Reload dependents + var dependents = getPeerDependents(language).filter(function (dependent) { + // If dependent language was already loaded, + // we want to reload it. + if (Prism.languages[dependent]) { + delete Prism.languages[dependent]; + return true; + } + return false; + }); + if (dependents.length) { + loadLanguages(dependents, true); + } + }); +} + +module.exports = function (arr) { + // Don't expose withoutDependencies + loadLanguages(arr); +};
\ No newline at end of file |
