source: node_modules/prismjs/plugins/autoloader/prism-autoloader.js

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 11.6 KB
Line 
1(function () {
2
3 if (typeof Prism === 'undefined' || typeof document === 'undefined') {
4 return;
5 }
6
7 /* eslint-disable */
8
9 /**
10 * The dependencies map is built automatically with gulp.
11 *
12 * @type {Object<string, string | string[]>}
13 */
14 var lang_dependencies = /*dependencies_placeholder[*/{
15 "javascript": "clike",
16 "actionscript": "javascript",
17 "apex": [
18 "clike",
19 "sql"
20 ],
21 "arduino": "cpp",
22 "aspnet": [
23 "markup",
24 "csharp"
25 ],
26 "birb": "clike",
27 "bison": "c",
28 "c": "clike",
29 "csharp": "clike",
30 "cpp": "c",
31 "cfscript": "clike",
32 "chaiscript": [
33 "clike",
34 "cpp"
35 ],
36 "cilkc": "c",
37 "cilkcpp": "cpp",
38 "coffeescript": "javascript",
39 "crystal": "ruby",
40 "css-extras": "css",
41 "d": "clike",
42 "dart": "clike",
43 "django": "markup-templating",
44 "ejs": [
45 "javascript",
46 "markup-templating"
47 ],
48 "etlua": [
49 "lua",
50 "markup-templating"
51 ],
52 "erb": [
53 "ruby",
54 "markup-templating"
55 ],
56 "fsharp": "clike",
57 "firestore-security-rules": "clike",
58 "flow": "javascript",
59 "ftl": "markup-templating",
60 "gml": "clike",
61 "glsl": "c",
62 "go": "clike",
63 "gradle": "clike",
64 "groovy": "clike",
65 "haml": "ruby",
66 "handlebars": "markup-templating",
67 "haxe": "clike",
68 "hlsl": "c",
69 "idris": "haskell",
70 "java": "clike",
71 "javadoc": [
72 "markup",
73 "java",
74 "javadoclike"
75 ],
76 "jolie": "clike",
77 "jsdoc": [
78 "javascript",
79 "javadoclike",
80 "typescript"
81 ],
82 "js-extras": "javascript",
83 "json5": "json",
84 "jsonp": "json",
85 "js-templates": "javascript",
86 "kotlin": "clike",
87 "latte": [
88 "clike",
89 "markup-templating",
90 "php"
91 ],
92 "less": "css",
93 "lilypond": "scheme",
94 "liquid": "markup-templating",
95 "markdown": "markup",
96 "markup-templating": "markup",
97 "mongodb": "javascript",
98 "n4js": "javascript",
99 "objectivec": "c",
100 "opencl": "c",
101 "parser": "markup",
102 "php": "markup-templating",
103 "phpdoc": [
104 "php",
105 "javadoclike"
106 ],
107 "php-extras": "php",
108 "plsql": "sql",
109 "processing": "clike",
110 "protobuf": "clike",
111 "pug": [
112 "markup",
113 "javascript"
114 ],
115 "purebasic": "clike",
116 "purescript": "haskell",
117 "qsharp": "clike",
118 "qml": "javascript",
119 "qore": "clike",
120 "racket": "scheme",
121 "cshtml": [
122 "markup",
123 "csharp"
124 ],
125 "jsx": [
126 "markup",
127 "javascript"
128 ],
129 "tsx": [
130 "jsx",
131 "typescript"
132 ],
133 "reason": "clike",
134 "ruby": "clike",
135 "sass": "css",
136 "scss": "css",
137 "scala": "java",
138 "shell-session": "bash",
139 "smarty": "markup-templating",
140 "solidity": "clike",
141 "soy": "markup-templating",
142 "sparql": "turtle",
143 "sqf": "clike",
144 "squirrel": "clike",
145 "stata": [
146 "mata",
147 "java",
148 "python"
149 ],
150 "t4-cs": [
151 "t4-templating",
152 "csharp"
153 ],
154 "t4-vb": [
155 "t4-templating",
156 "vbnet"
157 ],
158 "tap": "yaml",
159 "tt2": [
160 "clike",
161 "markup-templating"
162 ],
163 "textile": "markup",
164 "twig": "markup-templating",
165 "typescript": "javascript",
166 "v": "clike",
167 "vala": "clike",
168 "vbnet": "basic",
169 "velocity": "markup",
170 "wiki": "markup",
171 "xeora": "markup",
172 "xml-doc": "markup",
173 "xquery": "markup"
174 }/*]*/;
175
176 var lang_aliases = /*aliases_placeholder[*/{
177 "html": "markup",
178 "xml": "markup",
179 "svg": "markup",
180 "mathml": "markup",
181 "ssml": "markup",
182 "atom": "markup",
183 "rss": "markup",
184 "js": "javascript",
185 "g4": "antlr4",
186 "ino": "arduino",
187 "arm-asm": "armasm",
188 "art": "arturo",
189 "adoc": "asciidoc",
190 "avs": "avisynth",
191 "avdl": "avro-idl",
192 "gawk": "awk",
193 "sh": "bash",
194 "shell": "bash",
195 "shortcode": "bbcode",
196 "rbnf": "bnf",
197 "oscript": "bsl",
198 "cs": "csharp",
199 "dotnet": "csharp",
200 "cfc": "cfscript",
201 "cilk-c": "cilkc",
202 "cilk-cpp": "cilkcpp",
203 "cilk": "cilkcpp",
204 "coffee": "coffeescript",
205 "conc": "concurnas",
206 "jinja2": "django",
207 "dns-zone": "dns-zone-file",
208 "dockerfile": "docker",
209 "gv": "dot",
210 "eta": "ejs",
211 "xlsx": "excel-formula",
212 "xls": "excel-formula",
213 "gamemakerlanguage": "gml",
214 "po": "gettext",
215 "gni": "gn",
216 "ld": "linker-script",
217 "go-mod": "go-module",
218 "hbs": "handlebars",
219 "mustache": "handlebars",
220 "hs": "haskell",
221 "idr": "idris",
222 "gitignore": "ignore",
223 "hgignore": "ignore",
224 "npmignore": "ignore",
225 "webmanifest": "json",
226 "kt": "kotlin",
227 "kts": "kotlin",
228 "kum": "kumir",
229 "tex": "latex",
230 "context": "latex",
231 "ly": "lilypond",
232 "emacs": "lisp",
233 "elisp": "lisp",
234 "emacs-lisp": "lisp",
235 "md": "markdown",
236 "moon": "moonscript",
237 "n4jsd": "n4js",
238 "nani": "naniscript",
239 "objc": "objectivec",
240 "qasm": "openqasm",
241 "objectpascal": "pascal",
242 "px": "pcaxis",
243 "pcode": "peoplecode",
244 "plantuml": "plant-uml",
245 "pq": "powerquery",
246 "mscript": "powerquery",
247 "pbfasm": "purebasic",
248 "purs": "purescript",
249 "py": "python",
250 "qs": "qsharp",
251 "rkt": "racket",
252 "razor": "cshtml",
253 "rpy": "renpy",
254 "res": "rescript",
255 "robot": "robotframework",
256 "rb": "ruby",
257 "sh-session": "shell-session",
258 "shellsession": "shell-session",
259 "smlnj": "sml",
260 "sol": "solidity",
261 "sln": "solution-file",
262 "rq": "sparql",
263 "sclang": "supercollider",
264 "t4": "t4-cs",
265 "trickle": "tremor",
266 "troy": "tremor",
267 "trig": "turtle",
268 "ts": "typescript",
269 "tsconfig": "typoscript",
270 "uscript": "unrealscript",
271 "uc": "unrealscript",
272 "url": "uri",
273 "vb": "visual-basic",
274 "vba": "visual-basic",
275 "webidl": "web-idl",
276 "mathematica": "wolfram",
277 "nb": "wolfram",
278 "wl": "wolfram",
279 "xeoracube": "xeora",
280 "yml": "yaml"
281 }/*]*/;
282
283 /* eslint-enable */
284
285 /**
286 * @typedef LangDataItem
287 * @property {{ success?: () => void, error?: () => void }[]} callbacks
288 * @property {boolean} [error]
289 * @property {boolean} [loading]
290 */
291 /** @type {Object<string, LangDataItem>} */
292 var lang_data = {};
293
294 var ignored_language = 'none';
295 var languages_path = 'components/';
296
297 var script = Prism.util.currentScript();
298 if (script) {
299 var autoloaderFile = /\bplugins\/autoloader\/prism-autoloader\.(?:min\.)?js(?:\?[^\r\n/]*)?$/i;
300 var prismFile = /(^|\/)[\w-]+\.(?:min\.)?js(?:\?[^\r\n/]*)?$/i;
301
302 var autoloaderPath = script.getAttribute('data-autoloader-path');
303 if (autoloaderPath != null) {
304 // data-autoloader-path is set, so just use it
305 languages_path = autoloaderPath.trim().replace(/\/?$/, '/');
306 } else {
307 var src = script.src;
308 if (autoloaderFile.test(src)) {
309 // the script is the original autoloader script in the usual Prism project structure
310 languages_path = src.replace(autoloaderFile, 'components/');
311 } else if (prismFile.test(src)) {
312 // the script is part of a bundle like a custom prism.js from the download page
313 languages_path = src.replace(prismFile, '$1components/');
314 }
315 }
316 }
317
318 var config = Prism.plugins.autoloader = {
319 languages_path: languages_path,
320 use_minified: true,
321 loadLanguages: loadLanguages
322 };
323
324
325 /**
326 * Lazily loads an external script.
327 *
328 * @param {string} src
329 * @param {() => void} [success]
330 * @param {() => void} [error]
331 */
332 function addScript(src, success, error) {
333 var s = document.createElement('script');
334 s.src = src;
335 s.async = true;
336 s.onload = function () {
337 document.body.removeChild(s);
338 success && success();
339 };
340 s.onerror = function () {
341 document.body.removeChild(s);
342 error && error();
343 };
344 document.body.appendChild(s);
345 }
346
347 /**
348 * Returns all additional dependencies of the given element defined by the `data-dependencies` attribute.
349 *
350 * @param {Element} element
351 * @returns {string[]}
352 */
353 function getDependencies(element) {
354 var deps = (element.getAttribute('data-dependencies') || '').trim();
355 if (!deps) {
356 var parent = element.parentElement;
357 if (parent && parent.tagName.toLowerCase() === 'pre') {
358 deps = (parent.getAttribute('data-dependencies') || '').trim();
359 }
360 }
361 return deps ? deps.split(/\s*,\s*/g) : [];
362 }
363
364 /**
365 * Returns whether the given language is currently loaded.
366 *
367 * @param {string} lang
368 * @returns {boolean}
369 */
370 function isLoaded(lang) {
371 if (lang.indexOf('!') >= 0) {
372 // forced reload
373 return false;
374 }
375
376 lang = lang_aliases[lang] || lang; // resolve alias
377
378 if (lang in Prism.languages) {
379 // the given language is already loaded
380 return true;
381 }
382
383 // this will catch extensions like CSS extras that don't add a grammar to Prism.languages
384 var data = lang_data[lang];
385 return data && !data.error && data.loading === false;
386 }
387
388 /**
389 * Returns the path to a grammar, using the language_path and use_minified config keys.
390 *
391 * @param {string} lang
392 * @returns {string}
393 */
394 function getLanguagePath(lang) {
395 return config.languages_path + 'prism-' + lang + (config.use_minified ? '.min' : '') + '.js';
396 }
397
398 /**
399 * Loads all given grammars concurrently.
400 *
401 * @param {string[]|string} languages
402 * @param {(languages: string[]) => void} [success]
403 * @param {(language: string) => void} [error] This callback will be invoked on the first language to fail.
404 */
405 function loadLanguages(languages, success, error) {
406 if (typeof languages === 'string') {
407 languages = [languages];
408 }
409
410 var total = languages.length;
411 var completed = 0;
412 var failed = false;
413
414 if (total === 0) {
415 if (success) {
416 setTimeout(success, 0);
417 }
418 return;
419 }
420
421 function successCallback() {
422 if (failed) {
423 return;
424 }
425 completed++;
426 if (completed === total) {
427 success && success(languages);
428 }
429 }
430
431 languages.forEach(function (lang) {
432 loadLanguage(lang, successCallback, function () {
433 if (failed) {
434 return;
435 }
436 failed = true;
437 error && error(lang);
438 });
439 });
440 }
441
442 /**
443 * Loads a grammar with its dependencies.
444 *
445 * @param {string} lang
446 * @param {() => void} [success]
447 * @param {() => void} [error]
448 */
449 function loadLanguage(lang, success, error) {
450 var force = lang.indexOf('!') >= 0;
451
452 lang = lang.replace('!', '');
453 lang = lang_aliases[lang] || lang;
454
455 function load() {
456 var data = lang_data[lang];
457 if (!data) {
458 data = lang_data[lang] = {
459 callbacks: []
460 };
461 }
462 data.callbacks.push({
463 success: success,
464 error: error
465 });
466
467 if (!force && isLoaded(lang)) {
468 // the language is already loaded and we aren't forced to reload
469 languageCallback(lang, 'success');
470 } else if (!force && data.error) {
471 // the language failed to load before and we don't reload
472 languageCallback(lang, 'error');
473 } else if (force || !data.loading) {
474 // the language isn't currently loading and/or we are forced to reload
475 data.loading = true;
476 data.error = false;
477
478 addScript(getLanguagePath(lang), function () {
479 data.loading = false;
480 languageCallback(lang, 'success');
481
482 }, function () {
483 data.loading = false;
484 data.error = true;
485 languageCallback(lang, 'error');
486 });
487 }
488 }
489
490 var dependencies = lang_dependencies[lang];
491 if (dependencies && dependencies.length) {
492 loadLanguages(dependencies, load, error);
493 } else {
494 load();
495 }
496 }
497
498 /**
499 * Runs all callbacks of the given type for the given language.
500 *
501 * @param {string} lang
502 * @param {"success" | "error"} type
503 */
504 function languageCallback(lang, type) {
505 if (lang_data[lang]) {
506 var callbacks = lang_data[lang].callbacks;
507 for (var i = 0, l = callbacks.length; i < l; i++) {
508 var callback = callbacks[i][type];
509 if (callback) {
510 setTimeout(callback, 0);
511 }
512 }
513 callbacks.length = 0;
514 }
515 }
516
517 Prism.hooks.add('complete', function (env) {
518 var element = env.element;
519 var language = env.language;
520 if (!element || !language || language === ignored_language) {
521 return;
522 }
523
524 var deps = getDependencies(element);
525 if (/^diff-./i.test(language)) {
526 // the "diff-xxxx" format is used by the Diff Highlight plugin
527 deps.push('diff');
528 deps.push(language.substr('diff-'.length));
529 } else {
530 deps.push(language);
531 }
532
533 if (!deps.every(isLoaded)) {
534 // the language or some dependencies aren't loaded
535 loadLanguages(deps, function () {
536 Prism.highlightElement(element);
537 });
538 }
539 });
540
541}());
Note: See TracBrowser for help on using the repository browser.