History

Update Prism.js to support Groovy syntax highlighting

Jasper van Merle committed 7 years ago

Commit b7964601 parent d0cf5d71 file · +364 −181Browse files

Showing the changes to assets/javascripts (1 of 1 file). Show all

Unified · Split

assets/javascripts/vendor/prism.js+364−181
@@ -1,5 +1,5 @@
11 /* PrismJS 1.15.0
2−https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+c+bash+cpp+coffeescript+ruby+d+dart+django+elixir+markup-templating+erlang+go+java+json+kotlin+lua+crystal+nginx+nim+perl+php+sql+scss+python+jsx+typescript+rust+yaml */
2+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+c+bash+cpp+coffeescript+ruby+d+dart+django+elixir+markup-templating+erlang+go+groovy+java+json+kotlin+lua+crystal+nginx+nim+perl+php+sql+scss+python+jsx+typescript+rust+yaml */
33 var _self = (typeof window !== 'undefined')
44 ? window // if in browser
55 : (
@@ -35,7 +35,7 @@ var _ = _self.Prism = { · 29 unmodified lines
3535 },
3636
3737 type: function (o) {
38− return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1];
38+ return Object.prototype.toString.call(o).slice(8, -1);
3939 },
4040
4141 objId: function (obj) {
@@ -98,56 +98,46 @@ var _ = _self.Prism = { · 56 unmodified lines
9898 /**
9999 * Insert a token before another token in a language literal
100100 * As this needs to recreate the object (we cannot actually insert before keys in object literals),
101− * we cannot just provide an object, we need anobject and a key.
101+ * we cannot just provide an object, we need an object and a key.
102102 * @param inside The key (or language id) of the parent
103− * @param before The key to insert before. If not provided, the function appends instead.
103+ * @param before The key to insert before.
104104 * @param insert Object with the key/value pairs to insert
105105 * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.
106106 */
107107 insertBefore: function (inside, before, insert, root) {
108108 root = root || _.languages;
109109 var grammar = root[inside];
110−
111− if (arguments.length == 2) {
112− insert = arguments[1];
113−
114− for (var newToken in insert) {
115− if (insert.hasOwnProperty(newToken)) {
116− grammar[newToken] = insert[newToken];
117− }
118− }
119−
120− return grammar;
121− }
122−
123110 var ret = {};
124111
125112 for (var token in grammar) {
126−
127113 if (grammar.hasOwnProperty(token)) {
128114
129115 if (token == before) {
130−
131116 for (var newToken in insert) {
132−
133117 if (insert.hasOwnProperty(newToken)) {
134118 ret[newToken] = insert[newToken];
135119 }
136120 }
137121 }
138122
139− ret[token] = grammar[token];
123+ // Do not insert token which also occur in insert. See #1525
124+ if (!insert.hasOwnProperty(token)) {
125+ ret[token] = grammar[token];
126+ }
140127 }
141128 }
142129
130+ var old = root[inside];
131+ root[inside] = ret;
132+
143133 // Update references in other language definitions
144134 _.languages.DFS(_.languages, function(key, value) {
145− if (value === root[inside] && key != inside) {
135+ if (value === old && key != inside) {
146136 this[key] = ret;
147137 }
148138 });
149139
150− return root[inside] = ret;
140+ return ret;
151141 },
152142
153143 // Traverse a language definition with Depth First Search
@@ -224,53 +214,48 @@ var _ = _self.Prism = { · 70 unmodified lines
224214 code: code
225215 };
226216
217+ var insertHighlightedCode = function (highlightedCode) {
218+ env.highlightedCode = highlightedCode;
219+
220+ _.hooks.run('before-insert', env);
221+
222+ env.element.innerHTML = env.highlightedCode;
223+
224+ _.hooks.run('after-highlight', env);
225+ _.hooks.run('complete', env);
226+ callback && callback.call(env.element);
227+ }
228+
227229 _.hooks.run('before-sanity-check', env);
228230
229− if (!env.code || !env.grammar) {
230− if (env.code) {
231− _.hooks.run('before-highlight', env);
232− env.element.textContent = env.code;
233− _.hooks.run('after-highlight', env);
234− }
231+ if (!env.code) {
235232 _.hooks.run('complete', env);
236233 return;
237234 }
238235
239236 _.hooks.run('before-highlight', env);
240237
241− // if (async && _self.Worker) {
242− // var worker = new Worker(_.filename);
243−
244− // worker.onmessage = function(evt) {
245− // env.highlightedCode = evt.data;
246−
247− // _.hooks.run('before-insert', env);
248−
249− // env.element.innerHTML = env.highlightedCode;
250−
251− // callback && callback.call(env.element);
252− // _.hooks.run('after-highlight', env);
253− // _.hooks.run('complete', env);
254− // };
255−
256− // worker.postMessage(JSON.stringify({
257− // language: env.language,
258− // code: env.code,
259− // immediateClose: true
260− // }));
261− // }
262− // else {
263− env.highlightedCode = _.highlight(env.code, env.grammar, env.language);
264−
265− _.hooks.run('before-insert', env);
238+ if (!env.grammar) {
239+ insertHighlightedCode(_.util.encode(env.code));
240+ return;
241+ }
266242
267− env.element.innerHTML = env.highlightedCode;
243+ if (async && _self.Worker) {
244+ var worker = new Worker(_.filename);
268245
269− callback && callback.call(element);
246+ worker.onmessage = function(evt) {
247+ insertHighlightedCode(evt.data);
248+ };
270249
271− _.hooks.run('after-highlight', env);
272− _.hooks.run('complete', env);
273− // }
250+ worker.postMessage(JSON.stringify({
251+ language: env.language,
252+ code: env.code,
253+ immediateClose: true
254+ }));
255+ }
256+ else {
257+ insertHighlightedCode(_.highlight(env.code, env.grammar, env.language));
258+ }
274259 },
275260
276261 highlight: function (text, grammar, language) {
@@ -413,7 +398,7 @@ var _ = _self.Prism = { · 136 unmodified lines
413398 }
414399 },
415400
416− tokenize: function(text, grammar, language) {
401+ tokenize: function(text, grammar) {
417402 var strarr = [text];
418403
419404 var rest = grammar.rest;
@@ -501,49 +486,49 @@ Token.stringify = function(o, language, parent) { · 81 unmodified lines
501486
502487 };
503488
504−// if (!_self.document) {
505−// if (!_self.addEventListener) {
506−// // in Node.js
507−// return _self.Prism;
508−// }
509−
510−// if (!_.disableWorkerMessageHandler) {
511−// // In worker
512−// _self.addEventListener('message', function (evt) {
513−// var message = JSON.parse(evt.data),
514−// lang = message.language,
515−// code = message.code,
516−// immediateClose = message.immediateClose;
517−
518−// _self.postMessage(_.highlight(code, _.languages[lang], lang));
519−// if (immediateClose) {
520−// _self.close();
521−// }
522−// }, false);
523−// }
524−
525−// return _self.Prism;
526−// }
527−
528−// //Get current script and highlight
529−// var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop();
530−
531−// if (script) {
532−// _.filename = script.src;
533−
534−// if (!_.manual && !script.hasAttribute('data-manual')) {
535−// if(document.readyState !== "loading") {
536−// if (window.requestAnimationFrame) {
537−// window.requestAnimationFrame(_.highlightAll);
538−// } else {
539−// window.setTimeout(_.highlightAll, 16);
540−// }
541−// }
542−// else {
543−// document.addEventListener('DOMContentLoaded', _.highlightAll);
544−// }
545−// }
546−// }
489+if (!_self.document) {
490+ if (!_self.addEventListener) {
491+ // in Node.js
492+ return _self.Prism;
493+ }
494+
495+ if (!_.disableWorkerMessageHandler) {
496+ // In worker
497+ _self.addEventListener('message', function (evt) {
498+ var message = JSON.parse(evt.data),
499+ lang = message.language,
500+ code = message.code,
501+ immediateClose = message.immediateClose;
502+
503+ _self.postMessage(_.highlight(code, _.languages[lang], lang));
504+ if (immediateClose) {
505+ _self.close();
506+ }
507+ }, false);
508+ }
509+
510+ return _self.Prism;
511+}
512+
513+//Get current script and highlight
514+var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop();
515+
516+if (script) {
517+ _.filename = script.src;
518+
519+ if (!_.manual && !script.hasAttribute('data-manual')) {
520+ if(document.readyState !== "loading") {
521+ if (window.requestAnimationFrame) {
522+ window.requestAnimationFrame(_.highlightAll);
523+ } else {
524+ window.setTimeout(_.highlightAll, 16);
525+ }
526+ }
527+ else {
528+ document.addEventListener('DOMContentLoaded', _.highlightAll);
529+ }
530+ }
531+}
547532
548533 return _self.Prism;
549534
@@ -610,7 +595,7 @@ Prism.hooks.add('wrap', function(env) { · 60 unmodified lines
610595 }
611596 });
612597
613−Prism.languages.xml = Prism.languages.markup;
598+Prism.languages.xml = Prism.languages.extend('markup', {});
614599 Prism.languages.html = Prism.languages.markup;
615600 Prism.languages.mathml = Prism.languages.markup;
616601 Prism.languages.svg = Prism.languages.markup;
@@ -618,7 +603,7 @@ Prism.languages.svg = Prism.languages.markup; · 1 unmodified line
618603 Prism.languages.css = {
619604 'comment': /\/\*[\s\S]*?\*\//,
620605 'atrule': {
621− pattern: /@[\w-]+?.*?(?:;|(?=\s*\{))/i,
606+ pattern: /@[\w-]+?[\s\S]*?(?:;|(?=\s*\{))/i,
622607 inside: {
623608 'rule': /@[\w-]+/
624609 // See rest below
@@ -631,9 +616,9 @@ Prism.languages.css = { · 6 unmodified lines
631616 greedy: true
632617 },
633618 'property': /[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,
634− 'important': /\B!important\b/i,
619+ 'important': /!important\b/i,
635620 'function': /[-a-z0-9]+(?=\()/i,
636− 'punctuation': /[(){};:]/
621+ 'punctuation': /[(){};:,]/
637622 };
638623
639624 Prism.languages.css['atrule'].inside.rest = Prism.languages.css;
@@ -666,7 +651,8 @@ if (Prism.languages.markup) { · 26 unmodified lines
666651 alias: 'language-css'
667652 }
668653 }, Prism.languages.markup.tag);
669−};
654+}
655+;
670656 Prism.languages.clike = {
671657 'comment': [
672658 {
@@ -692,31 +678,67 @@ Prism.languages.clike = { · 19 unmodified lines
692678 },
693679 'keyword': /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,
694680 'boolean': /\b(?:true|false)\b/,
695− 'function': /[a-z0-9_]+(?=\()/i,
681+ 'function': /\w+(?=\()/,
696682 'number': /\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,
697683 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,
698684 'punctuation': /[{}[\];(),.:]/
699685 };
700686
701687 Prism.languages.javascript = Prism.languages.extend('clike', {
702− 'keyword': /\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,
703− 'number': /\b(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,
688+ 'class-name': [
689+ Prism.languages.clike['class-name'],
690+ {
691+ pattern: /(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,
692+ lookbehind: true
693+ }
694+ ],
695+ 'keyword': [
696+ {
697+ pattern: /((?:^|})\s*)(?:catch|finally)\b/,
698+ lookbehind: true
699+ },
700+ /\b(?:as|async|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/
701+ ],
702+ 'number': /\b(?:(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+)n?|\d+n|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,
704703 // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)
705− 'function': /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i,
704+ 'function': /[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\(|\.(?:apply|bind|call)\()/,
706705 'operator': /-[-=]?|\+[+=]?|!=?=?|<<?=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/
707706 });
708707
708+Prism.languages.javascript['class-name'][0].pattern = /(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/
709+
709710 Prism.languages.insertBefore('javascript', 'keyword', {
710711 'regex': {
711− pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[[^\]\r\n]+]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/,
712+ pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/,
712713 lookbehind: true,
713714 greedy: true
714715 },
715716 // This must be declared before keyword because we use "function" inside the look-forward
716717 'function-variable': {
717− pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,
718+ pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,
718719 alias: 'function'
719720 },
721+ 'parameter': [
722+ {
723+ pattern: /(function(?:\s+[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)[^\s()][^()]*?(?=\s*\))/,
724+ lookbehind: true,
725+ inside: Prism.languages.javascript
726+ },
727+ {
728+ pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/,
729+ inside: Prism.languages.javascript
730+ },
731+ {
732+ pattern: /(\(\s*)[^\s()][^()]*?(?=\s*\)\s*=>)/,
733+ lookbehind: true,
734+ inside: Prism.languages.javascript
735+ },
736+ {
737+ pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)[^\s()][^()]*?(?=\s*\)\s*\{)/,
738+ lookbehind: true,
739+ inside: Prism.languages.javascript
740+ }
741+ ],
720742 'constant': /\b[A-Z][A-Z\d_]*\b/
721743 });
722744
@@ -732,14 +754,13 @@ Prism.languages.insertBefore('javascript', 'string', { · 9 unmodified lines
732754 pattern: /^\${|}$/,
733755 alias: 'punctuation'
734756 },
735− rest: null // See below
757+ rest: Prism.languages.javascript
736758 }
737759 },
738760 'string': /[\s\S]+/
739761 }
740762 }
741763 });
742−Prism.languages.javascript['template-string'].inside['interpolation'].inside.rest = Prism.languages.javascript;
743764
744765 if (Prism.languages.markup) {
745766 Prism.languages.insertBefore('markup', 'tag', {
@@ -756,9 +777,13 @@ if (Prism.languages.markup) { · 10 unmodified lines
756777 Prism.languages.js = Prism.languages.javascript;
757778
758779 Prism.languages.c = Prism.languages.extend('clike', {
780+ 'class-name': {
781+ pattern: /(\b(?:enum|struct)\s+)\w+/,
782+ lookbehind: true
783+ },
759784 'keyword': /\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,
760− 'operator': /-[>-]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/]/,
761− 'number': /(?:\b0x[\da-f]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i
785+ 'operator': />>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/,
786+ 'number': /(?:\b0x(?:[\da-f]+\.?[\da-f]*|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i
762787 });
763788
764789 Prism.languages.insertBefore('c', 'string', {
@@ -786,7 +811,6 @@ Prism.languages.insertBefore('c', 'string', { · 21 unmodified lines
786811 'constant': /\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/
787812 });
788813
789−delete Prism.languages.c['class-name'];
790814 delete Prism.languages.c['boolean'];
791815
792816 (function(Prism) {
@@ -848,7 +872,7 @@ delete Prism.languages.c['boolean']; · 55 unmodified lines
848872 'variable': insideString.variable,
849873 // Originally based on http://ss64.com/bash/
850874 'function': {
851− pattern: /(^|[\s;|&])(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|[\s;|&])/,
875+ pattern: /(^|[\s;|&])(?:alias|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|hash|head|help|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logout|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tail|tar|tee|test|time|timeout|times|top|touch|tr|traceroute|trap|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip|zypper)(?=$|[\s;|&])/,
852876 lookbehind: true
853877 },
854878 'keyword': {
@@ -875,16 +899,13 @@ delete Prism.languages.c['boolean']; · 20 unmodified lines
875899 })(Prism);
876900
877901 Prism.languages.cpp = Prism.languages.extend('c', {
878− 'keyword': /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,
879− 'boolean': /\b(?:true|false)\b/,
880− 'operator': /--?|\+\+?|!=?|<{1,2}=?|>{1,2}=?|->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|\|?|\?|\*|\/|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/
881−});
882−
883−Prism.languages.insertBefore('cpp', 'keyword', {
884902 'class-name': {
885− pattern: /(class\s+)\w+/i,
903+ pattern: /(\b(?:class|enum|struct)\s+)\w+/,
886904 lookbehind: true
887− }
905+ },
906+ 'keyword': /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,
907+ 'boolean': /\b(?:true|false)\b/,
908+ 'operator': />>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/
888909 });
889910
890911 Prism.languages.insertBefore('cpp', 'string', {
@@ -985,6 +1006,7 @@ Prism.languages.insertBefore('coffeescript', 'keyword', { · 94 unmodified lines
9851006
9861007 delete Prism.languages.coffeescript['template-string'];
9871008
1009+Prism.languages.coffee = Prism.languages.coffeescript;
9881010 }(Prism));
9891011 /**
9901012 * Original by Samuel Flores
@@ -1015,6 +1037,8 @@ delete Prism.languages.coffeescript['template-string']; · 24 unmodified lines
10151037 }
10161038 };
10171039
1040+ delete Prism.languages.ruby.function;
1041+
10181042 Prism.languages.insertBefore('ruby', 'keyword', {
10191043 'regex': [
10201044 {
@@ -1063,6 +1087,14 @@ delete Prism.languages.coffeescript['template-string']; · 42 unmodified lines
10631087 'symbol': {
10641088 pattern: /(^|[^:]):[a-zA-Z_]\w*(?:[?!]|\b)/,
10651089 lookbehind: true
1090+ },
1091+ 'method-definition': {
1092+ pattern: /(\bdef\s+)[\w.]+/,
1093+ lookbehind: true,
1094+ inside: {
1095+ 'function': /\w+$/,
1096+ rest: Prism.languages.ruby
1097+ }
10661098 }
10671099 });
10681100
@@ -1116,7 +1148,10 @@ delete Prism.languages.coffeescript['template-string']; · 47 unmodified lines
11161148 }
11171149 }
11181150 ];
1151+
1152+ Prism.languages.rb = Prism.languages.ruby;
11191153 }(Prism));
1154+
11201155 Prism.languages.d = Prism.languages.extend('clike', {
11211156 'string': [
11221157 // r"", x""
@@ -1487,16 +1522,38 @@ Prism.languages.go = Prism.languages.extend('clike', { · 364 unmodified lines
14871522 });
14881523 delete Prism.languages.go['class-name'];
14891524
1490−Prism.languages.java = Prism.languages.extend('clike', {
1491− 'keyword': /\b(?:abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,
1492− 'number': /\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp-]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?[df]?/i,
1525+Prism.languages.groovy = Prism.languages.extend('clike', {
1526+ 'keyword': /\b(?:as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,
1527+ 'string': [
1528+ {
1529+ pattern: /("""|''')[\s\S]*?\1|(?:\$\/)(?:\$\/\$|[\s\S])*?\/\$/,
1530+ greedy: true
1531+ },
1532+ {
1533+ pattern: /(["'\/])(?:\\.|(?!\1)[^\\\r\n])*\1/,
1534+ greedy: true
1535+ }
1536+ ],
1537+ 'number': /\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?[\d]+)?)[glidf]?\b/i,
14931538 'operator': {
1494− pattern: /(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,
1539+ pattern: /(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.{1,2}(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,
14951540 lookbehind: true
1541+ },
1542+ 'punctuation': /\.+|[{}[\];(),:$]/
1543+});
1544+
1545+Prism.languages.insertBefore('groovy', 'string', {
1546+ 'shebang': {
1547+ pattern: /#!.+/,
1548+ alias: 'comment'
14961549 }
14971550 });
14981551
1499−Prism.languages.insertBefore('java','function', {
1552+Prism.languages.insertBefore('groovy', 'punctuation', {
1553+ 'spock-block': /\b(?:setup|given|when|then|and|cleanup|expect|where):/
1554+});
1555+
1556+Prism.languages.insertBefore('groovy', 'function', {
15001557 'annotation': {
15011558 alias: 'punctuation',
15021559 pattern: /(^|[^.])@\w+/,
@@ -1504,28 +1561,103 @@ Prism.languages.insertBefore('java','function', { · 1 unmodified line
15041561 }
15051562 });
15061563
1507−Prism.languages.insertBefore('java', 'class-name', {
1508− 'generics': {
1509− pattern: /<\s*\w+(?:\.\w+)?(?:\s*,\s*\w+(?:\.\w+)?)*>/i,
1510− alias: 'function',
1511− inside: {
1512− keyword: Prism.languages.java.keyword,
1513− punctuation: /[<>(),.:]/
1564+// Handle string interpolation
1565+Prism.hooks.add('wrap', function(env) {
1566+ if (env.language === 'groovy' && env.type === 'string') {
1567+ var delimiter = env.content[0];
1568+
1569+ if (delimiter != "'") {
1570+ var pattern = /([^\\])(?:\$(?:\{.*?\}|[\w.]+))/;
1571+ if (delimiter === '$') {
1572+ pattern = /([^\$])(?:\$(?:\{.*?\}|[\w.]+))/;
1573+ }
1574+
1575+ // To prevent double HTML-encoding we have to decode env.content first
1576+ env.content = env.content.replace(/&lt;/g, '<').replace(/&amp;/g, '&');
1577+
1578+ env.content = Prism.highlight(env.content, {
1579+ 'expression': {
1580+ pattern: pattern,
1581+ lookbehind: true,
1582+ inside: Prism.languages.groovy
1583+ }
1584+ });
1585+
1586+ env.classes.push(delimiter === '/' ? 'regex' : 'gstring');
15141587 }
15151588 }
15161589 });
15171590
1591+(function (Prism) {
1592+
1593+ var keywords = /\b(?:abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while|var|null|exports|module|open|opens|provides|requires|to|transitive|uses|with)\b/;
1594+
1595+ // based on the java naming conventions
1596+ var className = /\b[A-Z](?:\w*[a-z]\w*)?\b/;
1597+
1598+ Prism.languages.java = Prism.languages.extend('clike', {
1599+ 'class-name': [
1600+ className,
1601+
1602+ // variables and parameters
1603+ // this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)
1604+ /\b[A-Z]\w*(?=\s+\w+\s*[;,=())])/
1605+ ],
1606+ 'keyword': keywords,
1607+ 'function': [
1608+ Prism.languages.clike.function,
1609+ {
1610+ pattern: /(\:\:)[a-z_]\w*/,
1611+ lookbehind: true
1612+ }
1613+ ],
1614+ 'number': /\b0b[01][01_]*L?\b|\b0x[\da-f_]*\.?[\da-f_p+-]+\b|(?:\b\d[\d_]*\.?[\d_]*|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,
1615+ 'operator': {
1616+ pattern: /(^|[^.])(?:<<=?|>>>?=?|->|([-+&|])\2|[?:~]|[-+*/%&|^!=<>]=?)/m,
1617+ lookbehind: true
1618+ }
1619+ });
1620+
1621+ Prism.languages.insertBefore('java', 'class-name', {
1622+ 'annotation': {
1623+ alias: 'punctuation',
1624+ pattern: /(^|[^.])@\w+/,
1625+ lookbehind: true
1626+ },
1627+ 'namespace': {
1628+ pattern: /(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)[a-z]\w*(\.[a-z]\w*)+/,
1629+ lookbehind: true,
1630+ inside: {
1631+ 'punctuation': /\./,
1632+ }
1633+ },
1634+ 'generics': {
1635+ pattern: /<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,
1636+ inside: {
1637+ 'class-name': className,
1638+ 'keyword': keywords,
1639+ 'punctuation': /[<>(),.:]/,
1640+ 'operator': /[?&|]/
1641+ }
1642+ }
1643+ });
1644+}(Prism));
1645+
15181646 Prism.languages.json = {
1519− 'property': /"(?:\\.|[^\\"\r\n])*"(?=\s*:)/i,
1647+ 'comment': /\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,
1648+ 'property': {
1649+ pattern: /"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,
1650+ greedy: true
1651+ },
15201652 'string': {
15211653 pattern: /"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,
15221654 greedy: true
15231655 },
1524− 'number': /-?\d+\.?\d*([Ee][+-]?\d+)?/,
1656+ 'number': /-?\d+\.?\d*(e[+-]?\d+)?/i,
15251657 'punctuation': /[{}[\],]/,
1526− 'operator': /:/g,
1527− 'boolean': /\b(?:true|false)\b/i,
1528− 'null': /\bnull\b/i
1658+ 'operator': /:/,
1659+ 'boolean': /\b(?:true|false)\b/,
1660+ 'null': /\bnull\b/
15291661 };
15301662
15311663 Prism.languages.jsonp = Prism.languages.json;
@@ -1670,12 +1802,13 @@ Prism.languages.nginx = Prism.languages.extend('clike', { · 138 unmodified lines
16701802 pattern: /(^|[^"{\\])#.*/,
16711803 lookbehind: true
16721804 },
1673− 'keyword': /\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|events|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types)\b/i
1805+ 'keyword': /\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|events|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types|ssl_session_tickets|ssl_stapling|ssl_stapling_verify|ssl_ecdh_curve|ssl_trusted_certificate|more_set_headers|ssl_early_data)\b/i
16741806 });
16751807
16761808 Prism.languages.insertBefore('nginx', 'keyword', {
16771809 'variable': /\$[a-z_]+/i
16781810 });
1811+
16791812 Prism.languages.nim = {
16801813 'comment': /#.*/,
16811814 // Double-quoted strings can be prefixed by an identifier (Generalized raw string literals)
@@ -1915,8 +2048,15 @@ Prism.languages.perl = { · 233 unmodified lines
19152048 */
19162049 (function (Prism) {
19172050 Prism.languages.php = Prism.languages.extend('clike', {
1918− 'keyword': /\b(?:and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,
1919− 'constant': /\b[A-Z0-9_]{2,}\b/,
2051+ 'keyword': /\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|finally|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|new|or|parent|print|private|protected|public|require|require_once|return|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i,
2052+ 'boolean': {
2053+ pattern: /\b(?:false|true)\b/i,
2054+ alias: 'constant'
2055+ },
2056+ 'constant': [
2057+ /\b[A-Z_][A-Z0-9_]*\b/,
2058+ /\b(?:null)\b/i,
2059+ ],
19202060 'comment': {
19212061 pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,
19222062 lookbehind: true
@@ -1954,6 +2094,14 @@ Prism.languages.perl = { · 31 unmodified lines
19542094 }
19552095 });
19562096
2097+ var string_interpolation = {
2098+ pattern: /{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[.+?]|->\w+)*)/,
2099+ lookbehind: true,
2100+ inside: {
2101+ rest: Prism.languages.php
2102+ }
2103+ };
2104+
19572105 Prism.languages.insertBefore('php', 'string', {
19582106 'nowdoc-string': {
19592107 pattern: /<<<'([^']+)'(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;/,
@@ -1981,7 +2129,7 @@ Prism.languages.perl = { · 21 unmodified lines
19812129 'punctuation': /^<<<"?|[";]$/
19822130 }
19832131 },
1984− 'interpolation': null // See below
2132+ 'interpolation': string_interpolation // See below
19852133 }
19862134 },
19872135 'single-quoted-string': {
@@ -1994,23 +2142,13 @@ Prism.languages.perl = { · 6 unmodified lines
19942142 greedy: true,
19952143 alias: 'string',
19962144 inside: {
1997− 'interpolation': null // See below
2145+ 'interpolation': string_interpolation // See below
19982146 }
19992147 }
20002148 });
20012149 // The different types of PHP strings "replace" the C-like standard string
20022150 delete Prism.languages.php['string'];
20032151
2004− var string_interpolation = {
2005− pattern: /{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[.+?]|->\w+)*)/,
2006− lookbehind: true,
2007− inside: {
2008− rest: Prism.languages.php
2009− }
2010− };
2011− Prism.languages.php['heredoc-string'].inside['interpolation'] = string_interpolation;
2012− Prism.languages.php['double-quoted-string'].inside['interpolation'] = string_interpolation;
2013−
20142152 Prism.hooks.add('before-tokenize', function(env) {
20152153 if (!/(?:<\?php|<\?)/ig.test(env.code)) {
20162154 return;
@@ -2025,17 +2163,23 @@ Prism.languages.perl = { · 8 unmodified lines
20252163 });
20262164
20272165 }(Prism));
2028−Prism.languages.sql= {
2166+Prism.languages.sql = {
20292167 'comment': {
20302168 pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,
20312169 lookbehind: true
20322170 },
2033− 'string' : {
2034− pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\])*\2/,
2171+ 'variable': [
2172+ {
2173+ pattern: /@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,
2174+ greedy: true
2175+ },
2176+ /@[\w.$]+/
2177+ ],
2178+ 'string': {
2179+ pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,
20352180 greedy: true,
20362181 lookbehind: true
20372182 },
2038− 'variable': /@[\w.$]+|@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,
20392183 'function': /\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i, // Should we highlight user defined functions too?
20402184 'keyword': /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,
20412185 'boolean': /\b(?:TRUE|FALSE|NULL)\b/i,
@@ -2043,6 +2187,7 @@ Prism.languages.sql= { · 1 unmodified line
20432187 'operator': /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,
20442188 'punctuation': /[;[\]()`,.]/
20452189 };
2190+
20462191 Prism.languages.scss = Prism.languages.extend('css', {
20472192 'comment': {
20482193 pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,
@@ -2066,7 +2211,7 @@ Prism.languages.scss = Prism.languages.extend('css', { · 17 unmodified lines
20662211 // this one was hard to do, so please be careful if you edit this one :)
20672212 'selector': {
20682213 // Initial look-ahead is used to prevent matching of blank selectors
2069− pattern: /(?=\S)[^@;{}()]?(?:[^@;{}()]|&|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}]+[:{][^}]+))/m,
2214+ pattern: /(?=\S)[^@;{}()]?(?:[^@;{}()]|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}]+[:{][^}]+))/m,
20702215 inside: {
20712216 'parent': {
20722217 pattern: /&/,
@@ -2075,6 +2220,12 @@ Prism.languages.scss = Prism.languages.extend('css', { · 2 unmodified lines
20752220 'placeholder': /%[-\w]+/,
20762221 'variable': /\$[-\w]+|#\{\$[-\w]+\}/
20772222 }
2223+ },
2224+ 'property': {
2225+ pattern: /(?:[\w-]|\$[-\w]+|#\{\$[-\w]+\})+(?=\s*:)/,
2226+ inside: {
2227+ 'variable': /\$[-\w]+|#\{\$[-\w]+\}/
2228+ }
20782229 }
20792230 });
20802231
@@ -2088,13 +2239,6 @@ Prism.languages.insertBefore('scss', 'atrule', { · 7 unmodified lines
20882239 ]
20892240 });
20902241
2091−Prism.languages.scss.property = {
2092− pattern: /(?:[\w-]|\$[-\w]+|#\{\$[-\w]+\})+(?=\s*:)/i,
2093− inside: {
2094− 'variable': /\$[-\w]+|#\{\$[-\w]+\}/
2095− }
2096−};
2097−
20982242 Prism.languages.insertBefore('scss', 'important', {
20992243 // var and interpolated vars
21002244 'variable': /\$[-\w]+|#\{\$[-\w]+\}/
@@ -2118,18 +2262,42 @@ Prism.languages.insertBefore('scss', 'function', { · 17 unmodified lines
21182262 });
21192263
21202264 Prism.languages.scss['atrule'].inside.rest = Prism.languages.scss;
2265+
21212266 Prism.languages.python = {
21222267 'comment': {
21232268 pattern: /(^|[^\\])#.*/,
21242269 lookbehind: true
21252270 },
2271+ 'string-interpolation': {
2272+ pattern: /(?:f|rf|fr)(?:("""|''')[\s\S]+?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,
2273+ greedy: true,
2274+ inside: {
2275+ 'interpolation': {
2276+ // "{" <expression> <optional "!s", "!r", or "!a"> <optional ":" format specifier> "}"
2277+ pattern: /((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,
2278+ lookbehind: true,
2279+ inside: {
2280+ 'format-spec': {
2281+ pattern: /(:)[^:(){}]+(?=}$)/,
2282+ lookbehind: true
2283+ },
2284+ 'conversion-option': {
2285+ pattern: /![sra](?=[:}]$)/,
2286+ alias: 'punctuation'
2287+ },
2288+ rest: null
2289+ }
2290+ },
2291+ 'string': /[\s\S]+/
2292+ }
2293+ },
21262294 'triple-quoted-string': {
2127− pattern: /("""|''')[\s\S]+?\1/,
2295+ pattern: /(?:[rub]|rb|br)?("""|''')[\s\S]+?\1/i,
21282296 greedy: true,
21292297 alias: 'string'
21302298 },
21312299 'string': {
2132− pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
2300+ pattern: /(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,
21332301 greedy: true
21342302 },
21352303 'function': {
@@ -2140,14 +2308,25 @@ Prism.languages.python = { · 4 unmodified lines
21402308 pattern: /(\bclass\s+)\w+/i,
21412309 lookbehind: true
21422310 },
2143− 'keyword': /\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|pass|print|raise|return|try|while|with|yield)\b/,
2144− 'builtin':/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,
2311+ 'decorator': {
2312+ pattern: /(^\s*)@\w+(?:\.\w+)*/i,
2313+ lookbehind: true,
2314+ alias: ['annotation', 'punctuation'],
2315+ inside: {
2316+ 'punctuation': /\./
2317+ }
2318+ },
2319+ 'keyword': /\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,
2320+ 'builtin': /\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,
21452321 'boolean': /\b(?:True|False|None)\b/,
21462322 'number': /(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,
2147− 'operator': /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,
2323+ 'operator': /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,
21482324 'punctuation': /[{}[\];(),.:]/
21492325 };
21502326
2327+Prism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;
2328+
2329+Prism.languages.py = Prism.languages.python;
21512330 (function(Prism) {
21522331
21532332 var javascript = Prism.util.clone(Prism.languages.javascript);
@@ -2157,6 +2336,7 @@ Prism.languages.jsx.tag.pattern= /<\/?(?:[\w.:-]+\s*(?:\s+(?:[\w.:-]+(?:=(?:("|' · 3 unmodified lines
21572336
21582337 Prism.languages.jsx.tag.inside['tag'].pattern = /^<\/?[^\s>\/]*/i;
21592338 Prism.languages.jsx.tag.inside['attr-value'].pattern = /=(?!\{)(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">]+)/i;
2339+Prism.languages.jsx.tag.inside['tag'].inside['class-name'] = /^[A-Z]\w*$/;
21602340
21612341 Prism.languages.insertBefore('inside', 'attr-name', {
21622342 'spread': {
@@ -2276,11 +2456,12 @@ Prism.hooks.add('after-tokenize', function (env) { · 113 unmodified lines
22762456
22772457 Prism.languages.typescript = Prism.languages.extend('javascript', {
22782458 // From JavaScript Prism keyword list and TypeScript language spec: https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#221-reserved-words
2279− 'keyword': /\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield|module|declare|constructor|namespace|abstract|require|type)\b/,
2280− 'builtin': /\b(?:string|Function|any|number|boolean|Array|symbol|console)\b/,
2459+ 'keyword': /\b(?:abstract|as|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|var|void|while|with|yield)\b/,
2460+ 'builtin': /\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/,
22812461 });
22822462
22832463 Prism.languages.ts = Prism.languages.typescript;
2464+
22842465 /* TODO
22852466 Add support for Markdown notation inside doc comments
22862467 Add support for nested block comments...
@@ -2317,7 +2498,7 @@ Prism.languages.rust = { · 30 unmodified lines
23172498 pattern: /'[^\s>']+/,
23182499 alias: 'symbol'
23192500 },
2320− 'keyword': /\b(?:abstract|alignof|as|be|box|break|const|continue|crate|do|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|match|mod|move|mut|offsetof|once|override|priv|pub|pure|ref|return|sizeof|static|self|struct|super|true|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\b/,
2501+ 'keyword': /\b(?:abstract|alignof|as|be|box|break|const|continue|crate|do|dyn|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|match|mod|move|mut|offsetof|once|override|priv|pub|pure|ref|return|sizeof|static|self|Self|struct|super|true|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,
23212502
23222503 'attribute': {
23232504 pattern: /#!?\[.+?\]/,
@@ -2382,7 +2563,7 @@ Prism.languages.yaml = { · 58 unmodified lines
23822563 alias: 'important'
23832564 },
23842565 'string': {
2385− pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}))/m,
2566+ pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}|\s*#))/m,
23862567 lookbehind: true,
23872568 greedy: true
23882569 },
@@ -2394,3 +2575,5 @@ Prism.languages.yaml = { · 5 unmodified lines
23942575 'important': /[&*][\w]+/,
23952576 'punctuation': /---|[:[\]{}\-,|>?]|\.\.\./
23962577 };
2578+
2579+Prism.languages.yml = Prism.languages.yaml;