[d24f17c] | 1 | const components = require('../components.js');
|
---|
| 2 | const getLoader = require('../dependencies');
|
---|
| 3 |
|
---|
| 4 |
|
---|
| 5 | /**
|
---|
| 6 | * The set of all languages which have been loaded using the below function.
|
---|
| 7 | *
|
---|
| 8 | * @type {Set<string>}
|
---|
| 9 | */
|
---|
| 10 | const loadedLanguages = new Set();
|
---|
| 11 |
|
---|
| 12 | /**
|
---|
| 13 | * Loads the given languages and adds them to the current Prism instance.
|
---|
| 14 | *
|
---|
| 15 | * If no languages are provided, __all__ Prism languages will be loaded.
|
---|
| 16 | *
|
---|
| 17 | * @param {string|string[]} [languages]
|
---|
| 18 | * @returns {void}
|
---|
| 19 | */
|
---|
| 20 | function loadLanguages(languages) {
|
---|
| 21 | if (languages === undefined) {
|
---|
| 22 | languages = Object.keys(components.languages).filter(l => l != 'meta');
|
---|
| 23 | } else if (!Array.isArray(languages)) {
|
---|
| 24 | languages = [languages];
|
---|
| 25 | }
|
---|
| 26 |
|
---|
| 27 | // the user might have loaded languages via some other way or used `prism.js` which already includes some
|
---|
| 28 | // we don't need to validate the ids because `getLoader` will ignore invalid ones
|
---|
| 29 | const loaded = [...loadedLanguages, ...Object.keys(Prism.languages)];
|
---|
| 30 |
|
---|
| 31 | getLoader(components, languages, loaded).load(lang => {
|
---|
| 32 | if (!(lang in components.languages)) {
|
---|
| 33 | if (!loadLanguages.silent) {
|
---|
| 34 | console.warn('Language does not exist: ' + lang);
|
---|
| 35 | }
|
---|
| 36 | return;
|
---|
| 37 | }
|
---|
| 38 |
|
---|
| 39 | const pathToLanguage = './prism-' + lang;
|
---|
| 40 |
|
---|
| 41 | // remove from require cache and from Prism
|
---|
| 42 | delete require.cache[require.resolve(pathToLanguage)];
|
---|
| 43 | delete Prism.languages[lang];
|
---|
| 44 |
|
---|
| 45 | require(pathToLanguage);
|
---|
| 46 |
|
---|
| 47 | loadedLanguages.add(lang);
|
---|
| 48 | });
|
---|
| 49 | }
|
---|
| 50 |
|
---|
| 51 | /**
|
---|
| 52 | * Set this to `true` to prevent all warning messages `loadLanguages` logs.
|
---|
| 53 | */
|
---|
| 54 | loadLanguages.silent = false;
|
---|
| 55 |
|
---|
| 56 | module.exports = loadLanguages;
|
---|