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 | }());
|
---|