rorvswild 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,933 @@
1
+ /* PrismJS 1.9.0
2
+ http://prismjs.com/download.html?themes=prism-twilight&languages=markup+css+clike+javascript+ruby+json+sql+yaml */
3
+ var _self = this
4
+
5
+ /**
6
+ * Prism: Lightweight, robust, elegant syntax highlighting
7
+ * MIT license http://www.opensource.org/licenses/mit-license.php/
8
+ * @author Lea Verou http://lea.verou.me
9
+ */
10
+
11
+ var Prism = (function(){
12
+
13
+ // Private helper vars
14
+ var lang = /\blang(?:uage)?-(\w+)\b/i;
15
+ var uniqueId = 0;
16
+
17
+ var _ = _self.Prism = {
18
+ manual: _self.Prism && _self.Prism.manual,
19
+ disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,
20
+ util: {
21
+ encode: function (tokens) {
22
+ if (tokens instanceof Token) {
23
+ return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);
24
+ } else if (_.util.type(tokens) === 'Array') {
25
+ return tokens.map(_.util.encode);
26
+ } else {
27
+ return tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\u00a0/g, ' ');
28
+ }
29
+ },
30
+
31
+ type: function (o) {
32
+ return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1];
33
+ },
34
+
35
+ objId: function (obj) {
36
+ if (!obj['__id']) {
37
+ Object.defineProperty(obj, '__id', { value: ++uniqueId });
38
+ }
39
+ return obj['__id'];
40
+ },
41
+
42
+ // Deep clone a language definition (e.g. to extend it)
43
+ clone: function (o) {
44
+ var type = _.util.type(o);
45
+
46
+ switch (type) {
47
+ case 'Object':
48
+ var clone = {};
49
+
50
+ for (var key in o) {
51
+ if (o.hasOwnProperty(key)) {
52
+ clone[key] = _.util.clone(o[key]);
53
+ }
54
+ }
55
+
56
+ return clone;
57
+
58
+ case 'Array':
59
+ return o.map(function(v) { return _.util.clone(v); });
60
+ }
61
+
62
+ return o;
63
+ }
64
+ },
65
+
66
+ languages: {
67
+ extend: function (id, redef) {
68
+ var lang = _.util.clone(_.languages[id]);
69
+
70
+ for (var key in redef) {
71
+ lang[key] = redef[key];
72
+ }
73
+
74
+ return lang;
75
+ },
76
+
77
+ /**
78
+ * Insert a token before another token in a language literal
79
+ * As this needs to recreate the object (we cannot actually insert before keys in object literals),
80
+ * we cannot just provide an object, we need anobject and a key.
81
+ * @param inside The key (or language id) of the parent
82
+ * @param before The key to insert before. If not provided, the function appends instead.
83
+ * @param insert Object with the key/value pairs to insert
84
+ * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.
85
+ */
86
+ insertBefore: function (inside, before, insert, root) {
87
+ root = root || _.languages;
88
+ var grammar = root[inside];
89
+
90
+ if (arguments.length == 2) {
91
+ insert = arguments[1];
92
+
93
+ for (var newToken in insert) {
94
+ if (insert.hasOwnProperty(newToken)) {
95
+ grammar[newToken] = insert[newToken];
96
+ }
97
+ }
98
+
99
+ return grammar;
100
+ }
101
+
102
+ var ret = {};
103
+
104
+ for (var token in grammar) {
105
+
106
+ if (grammar.hasOwnProperty(token)) {
107
+
108
+ if (token == before) {
109
+
110
+ for (var newToken in insert) {
111
+
112
+ if (insert.hasOwnProperty(newToken)) {
113
+ ret[newToken] = insert[newToken];
114
+ }
115
+ }
116
+ }
117
+
118
+ ret[token] = grammar[token];
119
+ }
120
+ }
121
+
122
+ // Update references in other language definitions
123
+ _.languages.DFS(_.languages, function(key, value) {
124
+ if (value === root[inside] && key != inside) {
125
+ this[key] = ret;
126
+ }
127
+ });
128
+
129
+ return root[inside] = ret;
130
+ },
131
+
132
+ // Traverse a language definition with Depth First Search
133
+ DFS: function(o, callback, type, visited) {
134
+ visited = visited || {};
135
+ for (var i in o) {
136
+ if (o.hasOwnProperty(i)) {
137
+ callback.call(o, i, o[i], type || i);
138
+
139
+ if (_.util.type(o[i]) === 'Object' && !visited[_.util.objId(o[i])]) {
140
+ visited[_.util.objId(o[i])] = true;
141
+ _.languages.DFS(o[i], callback, null, visited);
142
+ }
143
+ else if (_.util.type(o[i]) === 'Array' && !visited[_.util.objId(o[i])]) {
144
+ visited[_.util.objId(o[i])] = true;
145
+ _.languages.DFS(o[i], callback, i, visited);
146
+ }
147
+ }
148
+ }
149
+ }
150
+ },
151
+ plugins: {},
152
+
153
+ highlightAll: function(async, callback) {
154
+ _.highlightAllUnder(document, async, callback);
155
+ },
156
+
157
+ highlightAllUnder: function(container, async, callback) {
158
+ var env = {
159
+ callback: callback,
160
+ selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
161
+ };
162
+
163
+ _.hooks.run("before-highlightall", env);
164
+
165
+ var elements = env.elements || container.querySelectorAll(env.selector);
166
+
167
+ for (var i=0, element; element = elements[i++];) {
168
+ _.highlightElement(element, async === true, env.callback);
169
+ }
170
+ },
171
+
172
+ highlightElement: function(element, async, callback) {
173
+ // Find language
174
+ var language, grammar, parent = element;
175
+
176
+ while (parent && !lang.test(parent.className)) {
177
+ parent = parent.parentNode;
178
+ }
179
+
180
+ if (parent) {
181
+ language = (parent.className.match(lang) || [,''])[1].toLowerCase();
182
+ grammar = _.languages[language];
183
+ }
184
+
185
+ // Set language on the element, if not present
186
+ element.className = element.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
187
+
188
+ if (element.parentNode) {
189
+ // Set language on the parent, for styling
190
+ parent = element.parentNode;
191
+
192
+ if (/pre/i.test(parent.nodeName)) {
193
+ parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
194
+ }
195
+ }
196
+
197
+ var code = element.textContent;
198
+
199
+ var env = {
200
+ element: element,
201
+ language: language,
202
+ grammar: grammar,
203
+ code: code
204
+ };
205
+
206
+ _.hooks.run('before-sanity-check', env);
207
+
208
+ if (!env.code || !env.grammar) {
209
+ if (env.code) {
210
+ _.hooks.run('before-highlight', env);
211
+ env.element.textContent = env.code;
212
+ _.hooks.run('after-highlight', env);
213
+ }
214
+ _.hooks.run('complete', env);
215
+ return;
216
+ }
217
+
218
+ _.hooks.run('before-highlight', env);
219
+
220
+ if (async && _self.Worker) {
221
+ var worker = new Worker(_.filename);
222
+
223
+ worker.onmessage = function(evt) {
224
+ env.highlightedCode = evt.data;
225
+
226
+ _.hooks.run('before-insert', env);
227
+
228
+ env.element.innerHTML = env.highlightedCode;
229
+
230
+ callback && callback.call(env.element);
231
+ _.hooks.run('after-highlight', env);
232
+ _.hooks.run('complete', env);
233
+ };
234
+
235
+ worker.postMessage(JSON.stringify({
236
+ language: env.language,
237
+ code: env.code,
238
+ immediateClose: true
239
+ }));
240
+ }
241
+ else {
242
+ env.highlightedCode = _.highlight(env.code, env.grammar, env.language);
243
+
244
+ _.hooks.run('before-insert', env);
245
+
246
+ env.element.innerHTML = env.highlightedCode;
247
+
248
+ callback && callback.call(element);
249
+
250
+ _.hooks.run('after-highlight', env);
251
+ _.hooks.run('complete', env);
252
+ }
253
+ },
254
+
255
+ highlight: function (text, grammar, language) {
256
+ var tokens = _.tokenize(text, grammar);
257
+ return Token.stringify(_.util.encode(tokens), language);
258
+ },
259
+
260
+ matchGrammar: function (text, strarr, grammar, index, startPos, oneshot, target) {
261
+ var Token = _.Token;
262
+
263
+ for (var token in grammar) {
264
+ if(!grammar.hasOwnProperty(token) || !grammar[token]) {
265
+ continue;
266
+ }
267
+
268
+ if (token == target) {
269
+ return;
270
+ }
271
+
272
+ var patterns = grammar[token];
273
+ patterns = (_.util.type(patterns) === "Array") ? patterns : [patterns];
274
+
275
+ for (var j = 0; j < patterns.length; ++j) {
276
+ var pattern = patterns[j],
277
+ inside = pattern.inside,
278
+ lookbehind = !!pattern.lookbehind,
279
+ greedy = !!pattern.greedy,
280
+ lookbehindLength = 0,
281
+ alias = pattern.alias;
282
+
283
+ if (greedy && !pattern.pattern.global) {
284
+ // Without the global flag, lastIndex won't work
285
+ var flags = pattern.pattern.toString().match(/[imuy]*$/)[0];
286
+ pattern.pattern = RegExp(pattern.pattern.source, flags + "g");
287
+ }
288
+
289
+ pattern = pattern.pattern || pattern;
290
+
291
+ // Don’t cache length as it changes during the loop
292
+ for (var i = index, pos = startPos; i < strarr.length; pos += strarr[i].length, ++i) {
293
+
294
+ var str = strarr[i];
295
+
296
+ if (strarr.length > text.length) {
297
+ // Something went terribly wrong, ABORT, ABORT!
298
+ return;
299
+ }
300
+
301
+ if (str instanceof Token) {
302
+ continue;
303
+ }
304
+
305
+ pattern.lastIndex = 0;
306
+
307
+ var match = pattern.exec(str),
308
+ delNum = 1;
309
+
310
+ // Greedy patterns can override/remove up to two previously matched tokens
311
+ if (!match && greedy && i != strarr.length - 1) {
312
+ pattern.lastIndex = pos;
313
+ match = pattern.exec(text);
314
+ if (!match) {
315
+ break;
316
+ }
317
+
318
+ var from = match.index + (lookbehind ? match[1].length : 0),
319
+ to = match.index + match[0].length,
320
+ k = i,
321
+ p = pos;
322
+
323
+ for (var len = strarr.length; k < len && (p < to || (!strarr[k].type && !strarr[k - 1].greedy)); ++k) {
324
+ p += strarr[k].length;
325
+ // Move the index i to the element in strarr that is closest to from
326
+ if (from >= p) {
327
+ ++i;
328
+ pos = p;
329
+ }
330
+ }
331
+
332
+ /*
333
+ * If strarr[i] is a Token, then the match starts inside another Token, which is invalid
334
+ * If strarr[k - 1] is greedy we are in conflict with another greedy pattern
335
+ */
336
+ if (strarr[i] instanceof Token || strarr[k - 1].greedy) {
337
+ continue;
338
+ }
339
+
340
+ // Number of tokens to delete and replace with the new match
341
+ delNum = k - i;
342
+ str = text.slice(pos, p);
343
+ match.index -= pos;
344
+ }
345
+
346
+ if (!match) {
347
+ if (oneshot) {
348
+ break;
349
+ }
350
+
351
+ continue;
352
+ }
353
+
354
+ if(lookbehind) {
355
+ lookbehindLength = match[1].length;
356
+ }
357
+
358
+ var from = match.index + lookbehindLength,
359
+ match = match[0].slice(lookbehindLength),
360
+ to = from + match.length,
361
+ before = str.slice(0, from),
362
+ after = str.slice(to);
363
+
364
+ var args = [i, delNum];
365
+
366
+ if (before) {
367
+ ++i;
368
+ pos += before.length;
369
+ args.push(before);
370
+ }
371
+
372
+ var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy);
373
+
374
+ args.push(wrapped);
375
+
376
+ if (after) {
377
+ args.push(after);
378
+ }
379
+
380
+ Array.prototype.splice.apply(strarr, args);
381
+
382
+ if (delNum != 1)
383
+ _.matchGrammar(text, strarr, grammar, i, pos, true, token);
384
+
385
+ if (oneshot)
386
+ break;
387
+ }
388
+ }
389
+ }
390
+ },
391
+
392
+ tokenize: function(text, grammar, language) {
393
+ var strarr = [text];
394
+
395
+ var rest = grammar.rest;
396
+
397
+ if (rest) {
398
+ for (var token in rest) {
399
+ grammar[token] = rest[token];
400
+ }
401
+
402
+ delete grammar.rest;
403
+ }
404
+
405
+ _.matchGrammar(text, strarr, grammar, 0, 0, false);
406
+
407
+ return strarr;
408
+ },
409
+
410
+ hooks: {
411
+ all: {},
412
+
413
+ add: function (name, callback) {
414
+ var hooks = _.hooks.all;
415
+
416
+ hooks[name] = hooks[name] || [];
417
+
418
+ hooks[name].push(callback);
419
+ },
420
+
421
+ run: function (name, env) {
422
+ var callbacks = _.hooks.all[name];
423
+
424
+ if (!callbacks || !callbacks.length) {
425
+ return;
426
+ }
427
+
428
+ for (var i=0, callback; callback = callbacks[i++];) {
429
+ callback(env);
430
+ }
431
+ }
432
+ }
433
+ };
434
+
435
+ var Token = _.Token = function(type, content, alias, matchedStr, greedy) {
436
+ this.type = type;
437
+ this.content = content;
438
+ this.alias = alias;
439
+ // Copy of the full string this token was created from
440
+ this.length = (matchedStr || "").length|0;
441
+ this.greedy = !!greedy;
442
+ };
443
+
444
+ Token.stringify = function(o, language, parent) {
445
+ if (typeof o == 'string') {
446
+ return o;
447
+ }
448
+
449
+ if (_.util.type(o) === 'Array') {
450
+ return o.map(function(element) {
451
+ return Token.stringify(element, language, o);
452
+ }).join('');
453
+ }
454
+
455
+ var env = {
456
+ type: o.type,
457
+ content: Token.stringify(o.content, language, parent),
458
+ tag: 'span',
459
+ classes: ['token', o.type],
460
+ attributes: {},
461
+ language: language,
462
+ parent: parent
463
+ };
464
+
465
+ if (o.alias) {
466
+ var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];
467
+ Array.prototype.push.apply(env.classes, aliases);
468
+ }
469
+
470
+ _.hooks.run('wrap', env);
471
+
472
+ var attributes = Object.keys(env.attributes).map(function(name) {
473
+ return name + '="' + (env.attributes[name] || '').replace(/"/g, '&quot;') + '"';
474
+ }).join(' ');
475
+
476
+ return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + (attributes ? ' ' + attributes : '') + '>' + env.content + '</' + env.tag + '>';
477
+
478
+ };
479
+
480
+ if (!_self.document) {
481
+ if (!_self.addEventListener) {
482
+ // in Node.js
483
+ return _self.Prism;
484
+ }
485
+
486
+ if (!_.disableWorkerMessageHandler) {
487
+ // In worker
488
+ _self.addEventListener('message', function (evt) {
489
+ var message = JSON.parse(evt.data),
490
+ lang = message.language,
491
+ code = message.code,
492
+ immediateClose = message.immediateClose;
493
+
494
+ _self.postMessage(_.highlight(code, _.languages[lang], lang));
495
+ if (immediateClose) {
496
+ _self.close();
497
+ }
498
+ }, false);
499
+ }
500
+
501
+ return _self.Prism;
502
+ }
503
+
504
+ //Get current script and highlight
505
+ var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop();
506
+
507
+ if (script) {
508
+ _.filename = script.src;
509
+
510
+ if (!_.manual && !script.hasAttribute('data-manual')) {
511
+ if(document.readyState !== "loading") {
512
+ if (window.requestAnimationFrame) {
513
+ window.requestAnimationFrame(_.highlightAll);
514
+ } else {
515
+ window.setTimeout(_.highlightAll, 16);
516
+ }
517
+ }
518
+ else {
519
+ document.addEventListener('DOMContentLoaded', _.highlightAll);
520
+ }
521
+ }
522
+ }
523
+
524
+ return _self.Prism;
525
+
526
+ })();
527
+
528
+ if (typeof module !== 'undefined' && module.exports) {
529
+ module.exports = Prism;
530
+ }
531
+
532
+ // hack for components to work correctly in node.js
533
+ if (typeof global !== 'undefined') {
534
+ global.Prism = Prism;
535
+ }
536
+ ;
537
+ Prism.languages.markup = {
538
+ 'comment': /<!--[\s\S]*?-->/,
539
+ 'prolog': /<\?[\s\S]+?\?>/,
540
+ 'doctype': /<!DOCTYPE[\s\S]+?>/i,
541
+ 'cdata': /<!\[CDATA\[[\s\S]*?]]>/i,
542
+ 'tag': {
543
+ pattern: /<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,
544
+ inside: {
545
+ 'tag': {
546
+ pattern: /^<\/?[^\s>\/]+/i,
547
+ inside: {
548
+ 'punctuation': /^<\/?/,
549
+ 'namespace': /^[^\s>\/:]+:/
550
+ }
551
+ },
552
+ 'attr-value': {
553
+ pattern: /=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/i,
554
+ inside: {
555
+ 'punctuation': [
556
+ /^=/,
557
+ {
558
+ pattern: /(^|[^\\])["']/,
559
+ lookbehind: true
560
+ }
561
+ ]
562
+ }
563
+ },
564
+ 'punctuation': /\/?>/,
565
+ 'attr-name': {
566
+ pattern: /[^\s>\/]+/,
567
+ inside: {
568
+ 'namespace': /^[^\s>\/:]+:/
569
+ }
570
+ }
571
+
572
+ }
573
+ },
574
+ 'entity': /&#?[\da-z]{1,8};/i
575
+ };
576
+
577
+ Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] =
578
+ Prism.languages.markup['entity'];
579
+
580
+ // Plugin to make entity title show the real entity, idea by Roman Komarov
581
+ Prism.hooks.add('wrap', function(env) {
582
+
583
+ if (env.type === 'entity') {
584
+ env.attributes['title'] = env.content.replace(/&amp;/, '&');
585
+ }
586
+ });
587
+
588
+ Prism.languages.xml = Prism.languages.markup;
589
+ Prism.languages.html = Prism.languages.markup;
590
+ Prism.languages.mathml = Prism.languages.markup;
591
+ Prism.languages.svg = Prism.languages.markup;
592
+
593
+ Prism.languages.css = {
594
+ 'comment': /\/\*[\s\S]*?\*\//,
595
+ 'atrule': {
596
+ pattern: /@[\w-]+?.*?(?:;|(?=\s*\{))/i,
597
+ inside: {
598
+ 'rule': /@[\w-]+/
599
+ // See rest below
600
+ }
601
+ },
602
+ 'url': /url\((?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,
603
+ 'selector': /[^{}\s][^{};]*?(?=\s*\{)/,
604
+ 'string': {
605
+ pattern: /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
606
+ greedy: true
607
+ },
608
+ 'property': /[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,
609
+ 'important': /\B!important\b/i,
610
+ 'function': /[-a-z0-9]+(?=\()/i,
611
+ 'punctuation': /[(){};:]/
612
+ };
613
+
614
+ Prism.languages.css['atrule'].inside.rest = Prism.util.clone(Prism.languages.css);
615
+
616
+ if (Prism.languages.markup) {
617
+ Prism.languages.insertBefore('markup', 'tag', {
618
+ 'style': {
619
+ pattern: /(<style[\s\S]*?>)[\s\S]*?(?=<\/style>)/i,
620
+ lookbehind: true,
621
+ inside: Prism.languages.css,
622
+ alias: 'language-css',
623
+ greedy: true
624
+ }
625
+ });
626
+
627
+ Prism.languages.insertBefore('inside', 'attr-value', {
628
+ 'style-attr': {
629
+ pattern: /\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,
630
+ inside: {
631
+ 'attr-name': {
632
+ pattern: /^\s*style/i,
633
+ inside: Prism.languages.markup.tag.inside
634
+ },
635
+ 'punctuation': /^\s*=\s*['"]|['"]\s*$/,
636
+ 'attr-value': {
637
+ pattern: /.+/i,
638
+ inside: Prism.languages.css
639
+ }
640
+ },
641
+ alias: 'language-css'
642
+ }
643
+ }, Prism.languages.markup.tag);
644
+ };
645
+ Prism.languages.clike = {
646
+ 'comment': [
647
+ {
648
+ pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
649
+ lookbehind: true
650
+ },
651
+ {
652
+ pattern: /(^|[^\\:])\/\/.*/,
653
+ lookbehind: true
654
+ }
655
+ ],
656
+ 'string': {
657
+ pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
658
+ greedy: true
659
+ },
660
+ 'class-name': {
661
+ pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,
662
+ lookbehind: true,
663
+ inside: {
664
+ punctuation: /[.\\]/
665
+ }
666
+ },
667
+ 'keyword': /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,
668
+ 'boolean': /\b(?:true|false)\b/,
669
+ 'function': /[a-z0-9_]+(?=\()/i,
670
+ 'number': /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,
671
+ 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,
672
+ 'punctuation': /[{}[\];(),.:]/
673
+ };
674
+
675
+ Prism.languages.javascript = Prism.languages.extend('clike', {
676
+ '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/,
677
+ 'number': /\b-?(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|\d*\.?\d+(?:[Ee][+-]?\d+)?|NaN|Infinity)\b/,
678
+ // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)
679
+ 'function': /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i,
680
+ 'operator': /-[-=]?|\+[+=]?|!=?=?|<<?=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/
681
+ });
682
+
683
+ Prism.languages.insertBefore('javascript', 'keyword', {
684
+ 'regex': {
685
+ pattern: /(^|[^/])\/(?!\/)(\[[^\]\r\n]+]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,
686
+ lookbehind: true,
687
+ greedy: true
688
+ },
689
+ // This must be declared before keyword because we use "function" inside the look-forward
690
+ 'function-variable': {
691
+ pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,
692
+ alias: 'function'
693
+ }
694
+ });
695
+
696
+ Prism.languages.insertBefore('javascript', 'string', {
697
+ 'template-string': {
698
+ pattern: /`(?:\\[\s\S]|[^\\`])*`/,
699
+ greedy: true,
700
+ inside: {
701
+ 'interpolation': {
702
+ pattern: /\$\{[^}]+\}/,
703
+ inside: {
704
+ 'interpolation-punctuation': {
705
+ pattern: /^\$\{|\}$/,
706
+ alias: 'punctuation'
707
+ },
708
+ rest: Prism.languages.javascript
709
+ }
710
+ },
711
+ 'string': /[\s\S]+/
712
+ }
713
+ }
714
+ });
715
+
716
+ if (Prism.languages.markup) {
717
+ Prism.languages.insertBefore('markup', 'tag', {
718
+ 'script': {
719
+ pattern: /(<script[\s\S]*?>)[\s\S]*?(?=<\/script>)/i,
720
+ lookbehind: true,
721
+ inside: Prism.languages.javascript,
722
+ alias: 'language-javascript',
723
+ greedy: true
724
+ }
725
+ });
726
+ }
727
+
728
+ Prism.languages.js = Prism.languages.javascript;
729
+
730
+ /**
731
+ * Original by Samuel Flores
732
+ *
733
+ * Adds the following new token classes:
734
+ * constant, builtin, variable, symbol, regex
735
+ */
736
+ (function(Prism) {
737
+ Prism.languages.ruby = Prism.languages.extend('clike', {
738
+ 'comment': [
739
+ /#(?!\{[^\r\n]*?\}).*/,
740
+ /^=begin(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?=end/m
741
+ ],
742
+ 'keyword': /\b(?:alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/
743
+ });
744
+
745
+ var interpolation = {
746
+ pattern: /#\{[^}]+\}/,
747
+ inside: {
748
+ 'delimiter': {
749
+ pattern: /^#\{|\}$/,
750
+ alias: 'tag'
751
+ },
752
+ rest: Prism.util.clone(Prism.languages.ruby)
753
+ }
754
+ };
755
+
756
+ Prism.languages.insertBefore('ruby', 'keyword', {
757
+ 'regex': [
758
+ {
759
+ pattern: /%r([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[gim]{0,3}/,
760
+ greedy: true,
761
+ inside: {
762
+ 'interpolation': interpolation
763
+ }
764
+ },
765
+ {
766
+ pattern: /%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,
767
+ greedy: true,
768
+ inside: {
769
+ 'interpolation': interpolation
770
+ }
771
+ },
772
+ {
773
+ // Here we need to specifically allow interpolation
774
+ pattern: /%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,
775
+ greedy: true,
776
+ inside: {
777
+ 'interpolation': interpolation
778
+ }
779
+ },
780
+ {
781
+ pattern: /%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,
782
+ greedy: true,
783
+ inside: {
784
+ 'interpolation': interpolation
785
+ }
786
+ },
787
+ {
788
+ pattern: /%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,
789
+ greedy: true,
790
+ inside: {
791
+ 'interpolation': interpolation
792
+ }
793
+ },
794
+ {
795
+ pattern: /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,
796
+ lookbehind: true,
797
+ greedy: true
798
+ }
799
+ ],
800
+ 'variable': /[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,
801
+ 'symbol': /:[a-zA-Z_]\w*(?:[?!]|\b)/
802
+ });
803
+
804
+ Prism.languages.insertBefore('ruby', 'number', {
805
+ 'builtin': /\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,
806
+ 'constant': /\b[A-Z]\w*(?:[?!]|\b)/
807
+ });
808
+
809
+ Prism.languages.ruby.string = [
810
+ {
811
+ pattern: /%[qQiIwWxs]?([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/,
812
+ greedy: true,
813
+ inside: {
814
+ 'interpolation': interpolation
815
+ }
816
+ },
817
+ {
818
+ pattern: /%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,
819
+ greedy: true,
820
+ inside: {
821
+ 'interpolation': interpolation
822
+ }
823
+ },
824
+ {
825
+ // Here we need to specifically allow interpolation
826
+ pattern: /%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,
827
+ greedy: true,
828
+ inside: {
829
+ 'interpolation': interpolation
830
+ }
831
+ },
832
+ {
833
+ pattern: /%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,
834
+ greedy: true,
835
+ inside: {
836
+ 'interpolation': interpolation
837
+ }
838
+ },
839
+ {
840
+ pattern: /%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,
841
+ greedy: true,
842
+ inside: {
843
+ 'interpolation': interpolation
844
+ }
845
+ },
846
+ {
847
+ pattern: /("|')(?:#\{[^}]+\}|\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
848
+ greedy: true,
849
+ inside: {
850
+ 'interpolation': interpolation
851
+ }
852
+ }
853
+ ];
854
+ }(Prism));
855
+ Prism.languages.json = {
856
+ 'property': /"(?:\\.|[^\\"\r\n])*"(?=\s*:)/i,
857
+ 'string': {
858
+ pattern: /"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,
859
+ greedy: true
860
+ },
861
+ 'number': /\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee][+-]?\d+)?)\b/,
862
+ 'punctuation': /[{}[\]);,]/,
863
+ 'operator': /:/g,
864
+ 'boolean': /\b(?:true|false)\b/i,
865
+ 'null': /\bnull\b/i
866
+ };
867
+
868
+ Prism.languages.jsonp = Prism.languages.json;
869
+
870
+ Prism.languages.sql= {
871
+ 'comment': {
872
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,
873
+ lookbehind: true
874
+ },
875
+ 'string' : {
876
+ pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\])*\2/,
877
+ greedy: true,
878
+ lookbehind: true
879
+ },
880
+ 'variable': /@[\w.$]+|@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,
881
+ 'function': /\b(?:COUNT|SUM|AVG|MIN|MAX|FIRST|LAST|UCASE|LCASE|MID|LEN|ROUND|NOW|FORMAT)(?=\s*\()/i, // Should we highlight user defined functions too?
882
+ '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 VARYING|CHARACTER (?:SET|VARYING)|CHARSET|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|DATA(?:BASES?)?|DATE(?:TIME)?|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITER(?:S)?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE(?: PRECISION)?|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE KEY|ELSE|ENABLE|ENCLOSED BY|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPE(?:D BY)?|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|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTO|INVOKER|ISOLATION LEVEL|JOIN|KEYS?|KILL|LANGUAGE SQL|LAST|LEFT|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MODIFIES SQL DATA|MODIFY|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL(?: CHAR VARYING| CHARACTER(?: VARYING)?| VARCHAR)?|NATURAL|NCHAR(?: VARCHAR)?|NEXT|NO(?: SQL|CHECK|CYCLE)?|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|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READ(?:S SQL DATA|TEXT)?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEATABLE|REPLICATION|REQUIRE|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE MODE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|START(?:ING BY)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED BY|TEXT(?:SIZE)?|THEN|TIMESTAMP|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNPIVOT|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?)\b/i,
883
+ 'boolean': /\b(?:TRUE|FALSE|NULL)\b/i,
884
+ 'number': /\b-?(?:0x)?\d*\.?[\da-f]+\b/,
885
+ 'operator': /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,
886
+ 'punctuation': /[;[\]()`,.]/
887
+ };
888
+ Prism.languages.yaml = {
889
+ 'scalar': {
890
+ pattern: /([\-:]\s*(?:![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/,
891
+ lookbehind: true,
892
+ alias: 'string'
893
+ },
894
+ 'comment': /#.*/,
895
+ 'key': {
896
+ pattern: /(\s*(?:^|[:\-,[{\r\n?])[ \t]*(?:![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,
897
+ lookbehind: true,
898
+ alias: 'atrule'
899
+ },
900
+ 'directive': {
901
+ pattern: /(^[ \t]*)%.+/m,
902
+ lookbehind: true,
903
+ alias: 'important'
904
+ },
905
+ 'datetime': {
906
+ pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?)(?=[ \t]*(?:$|,|]|}))/m,
907
+ lookbehind: true,
908
+ alias: 'number'
909
+ },
910
+ 'boolean': {
911
+ pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:true|false)[ \t]*(?=$|,|]|})/im,
912
+ lookbehind: true,
913
+ alias: 'important'
914
+ },
915
+ 'null': {
916
+ pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:null|~)[ \t]*(?=$|,|]|})/im,
917
+ lookbehind: true,
918
+ alias: 'important'
919
+ },
920
+ 'string': {
921
+ pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}))/m,
922
+ lookbehind: true,
923
+ greedy: true
924
+ },
925
+ 'number': {
926
+ pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+\-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,
927
+ lookbehind: true
928
+ },
929
+ 'tag': /![^\s]+/,
930
+ 'important': /[&*][\w]+/,
931
+ 'punctuation': /---|[:[\]{}\-,|>?]|\.\.\./
932
+ };
933
+