1 |
efrain |
1 |
/**
|
|
|
2 |
* TinyMCE version 6.8.3 (2024-02-08)
|
|
|
3 |
*/
|
|
|
4 |
|
|
|
5 |
(function () {
|
|
|
6 |
'use strict';
|
|
|
7 |
|
|
|
8 |
var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');
|
|
|
9 |
|
|
|
10 |
const isNullable = a => a === null || a === undefined;
|
|
|
11 |
const isNonNullable = a => !isNullable(a);
|
|
|
12 |
|
|
|
13 |
const noop = () => {
|
|
|
14 |
};
|
|
|
15 |
const constant = value => {
|
|
|
16 |
return () => {
|
|
|
17 |
return value;
|
|
|
18 |
};
|
|
|
19 |
};
|
|
|
20 |
|
|
|
21 |
class Optional {
|
|
|
22 |
constructor(tag, value) {
|
|
|
23 |
this.tag = tag;
|
|
|
24 |
this.value = value;
|
|
|
25 |
}
|
|
|
26 |
static some(value) {
|
|
|
27 |
return new Optional(true, value);
|
|
|
28 |
}
|
|
|
29 |
static none() {
|
|
|
30 |
return Optional.singletonNone;
|
|
|
31 |
}
|
|
|
32 |
fold(onNone, onSome) {
|
|
|
33 |
if (this.tag) {
|
|
|
34 |
return onSome(this.value);
|
|
|
35 |
} else {
|
|
|
36 |
return onNone();
|
|
|
37 |
}
|
|
|
38 |
}
|
|
|
39 |
isSome() {
|
|
|
40 |
return this.tag;
|
|
|
41 |
}
|
|
|
42 |
isNone() {
|
|
|
43 |
return !this.tag;
|
|
|
44 |
}
|
|
|
45 |
map(mapper) {
|
|
|
46 |
if (this.tag) {
|
|
|
47 |
return Optional.some(mapper(this.value));
|
|
|
48 |
} else {
|
|
|
49 |
return Optional.none();
|
|
|
50 |
}
|
|
|
51 |
}
|
|
|
52 |
bind(binder) {
|
|
|
53 |
if (this.tag) {
|
|
|
54 |
return binder(this.value);
|
|
|
55 |
} else {
|
|
|
56 |
return Optional.none();
|
|
|
57 |
}
|
|
|
58 |
}
|
|
|
59 |
exists(predicate) {
|
|
|
60 |
return this.tag && predicate(this.value);
|
|
|
61 |
}
|
|
|
62 |
forall(predicate) {
|
|
|
63 |
return !this.tag || predicate(this.value);
|
|
|
64 |
}
|
|
|
65 |
filter(predicate) {
|
|
|
66 |
if (!this.tag || predicate(this.value)) {
|
|
|
67 |
return this;
|
|
|
68 |
} else {
|
|
|
69 |
return Optional.none();
|
|
|
70 |
}
|
|
|
71 |
}
|
|
|
72 |
getOr(replacement) {
|
|
|
73 |
return this.tag ? this.value : replacement;
|
|
|
74 |
}
|
|
|
75 |
or(replacement) {
|
|
|
76 |
return this.tag ? this : replacement;
|
|
|
77 |
}
|
|
|
78 |
getOrThunk(thunk) {
|
|
|
79 |
return this.tag ? this.value : thunk();
|
|
|
80 |
}
|
|
|
81 |
orThunk(thunk) {
|
|
|
82 |
return this.tag ? this : thunk();
|
|
|
83 |
}
|
|
|
84 |
getOrDie(message) {
|
|
|
85 |
if (!this.tag) {
|
|
|
86 |
throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');
|
|
|
87 |
} else {
|
|
|
88 |
return this.value;
|
|
|
89 |
}
|
|
|
90 |
}
|
|
|
91 |
static from(value) {
|
|
|
92 |
return isNonNullable(value) ? Optional.some(value) : Optional.none();
|
|
|
93 |
}
|
|
|
94 |
getOrNull() {
|
|
|
95 |
return this.tag ? this.value : null;
|
|
|
96 |
}
|
|
|
97 |
getOrUndefined() {
|
|
|
98 |
return this.value;
|
|
|
99 |
}
|
|
|
100 |
each(worker) {
|
|
|
101 |
if (this.tag) {
|
|
|
102 |
worker(this.value);
|
|
|
103 |
}
|
|
|
104 |
}
|
|
|
105 |
toArray() {
|
|
|
106 |
return this.tag ? [this.value] : [];
|
|
|
107 |
}
|
|
|
108 |
toString() {
|
|
|
109 |
return this.tag ? `some(${ this.value })` : 'none()';
|
|
|
110 |
}
|
|
|
111 |
}
|
|
|
112 |
Optional.singletonNone = new Optional(false);
|
|
|
113 |
|
|
|
114 |
const get$1 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();
|
|
|
115 |
const head = xs => get$1(xs, 0);
|
|
|
116 |
|
|
|
117 |
var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
|
|
|
118 |
|
|
|
119 |
const Global = typeof window !== 'undefined' ? window : Function('return this;')();
|
|
|
120 |
|
|
|
121 |
const prismjs = function (global, module, exports) {
|
|
|
122 |
const oldprism = window.Prism;
|
|
|
123 |
window.Prism = { manual: true };
|
|
|
124 |
var _self = typeof window !== 'undefined' ? window : typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope ? self : {};
|
|
|
125 |
var Prism = function (_self) {
|
|
|
126 |
var lang = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i;
|
|
|
127 |
var uniqueId = 0;
|
|
|
128 |
var plainTextGrammar = {};
|
|
|
129 |
var _ = {
|
|
|
130 |
manual: _self.Prism && _self.Prism.manual,
|
|
|
131 |
disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,
|
|
|
132 |
util: {
|
|
|
133 |
encode: function encode(tokens) {
|
|
|
134 |
if (tokens instanceof Token) {
|
|
|
135 |
return new Token(tokens.type, encode(tokens.content), tokens.alias);
|
|
|
136 |
} else if (Array.isArray(tokens)) {
|
|
|
137 |
return tokens.map(encode);
|
|
|
138 |
} else {
|
|
|
139 |
return tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\u00a0/g, ' ');
|
|
|
140 |
}
|
|
|
141 |
},
|
|
|
142 |
type: function (o) {
|
|
|
143 |
return Object.prototype.toString.call(o).slice(8, -1);
|
|
|
144 |
},
|
|
|
145 |
objId: function (obj) {
|
|
|
146 |
if (!obj['__id']) {
|
|
|
147 |
Object.defineProperty(obj, '__id', { value: ++uniqueId });
|
|
|
148 |
}
|
|
|
149 |
return obj['__id'];
|
|
|
150 |
},
|
|
|
151 |
clone: function deepClone(o, visited) {
|
|
|
152 |
visited = visited || {};
|
|
|
153 |
var clone;
|
|
|
154 |
var id;
|
|
|
155 |
switch (_.util.type(o)) {
|
|
|
156 |
case 'Object':
|
|
|
157 |
id = _.util.objId(o);
|
|
|
158 |
if (visited[id]) {
|
|
|
159 |
return visited[id];
|
|
|
160 |
}
|
|
|
161 |
clone = {};
|
|
|
162 |
visited[id] = clone;
|
|
|
163 |
for (var key in o) {
|
|
|
164 |
if (o.hasOwnProperty(key)) {
|
|
|
165 |
clone[key] = deepClone(o[key], visited);
|
|
|
166 |
}
|
|
|
167 |
}
|
|
|
168 |
return clone;
|
|
|
169 |
case 'Array':
|
|
|
170 |
id = _.util.objId(o);
|
|
|
171 |
if (visited[id]) {
|
|
|
172 |
return visited[id];
|
|
|
173 |
}
|
|
|
174 |
clone = [];
|
|
|
175 |
visited[id] = clone;
|
|
|
176 |
o.forEach(function (v, i) {
|
|
|
177 |
clone[i] = deepClone(v, visited);
|
|
|
178 |
});
|
|
|
179 |
return clone;
|
|
|
180 |
default:
|
|
|
181 |
return o;
|
|
|
182 |
}
|
|
|
183 |
},
|
|
|
184 |
getLanguage: function (element) {
|
|
|
185 |
while (element) {
|
|
|
186 |
var m = lang.exec(element.className);
|
|
|
187 |
if (m) {
|
|
|
188 |
return m[1].toLowerCase();
|
|
|
189 |
}
|
|
|
190 |
element = element.parentElement;
|
|
|
191 |
}
|
|
|
192 |
return 'none';
|
|
|
193 |
},
|
|
|
194 |
setLanguage: function (element, language) {
|
|
|
195 |
element.className = element.className.replace(RegExp(lang, 'gi'), '');
|
|
|
196 |
element.classList.add('language-' + language);
|
|
|
197 |
},
|
|
|
198 |
currentScript: function () {
|
|
|
199 |
if (typeof document === 'undefined') {
|
|
|
200 |
return null;
|
|
|
201 |
}
|
|
|
202 |
if ('currentScript' in document && 1 < 2) {
|
|
|
203 |
return document.currentScript;
|
|
|
204 |
}
|
|
|
205 |
try {
|
|
|
206 |
throw new Error();
|
|
|
207 |
} catch (err) {
|
|
|
208 |
var src = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(err.stack) || [])[1];
|
|
|
209 |
if (src) {
|
|
|
210 |
var scripts = document.getElementsByTagName('script');
|
|
|
211 |
for (var i in scripts) {
|
|
|
212 |
if (scripts[i].src == src) {
|
|
|
213 |
return scripts[i];
|
|
|
214 |
}
|
|
|
215 |
}
|
|
|
216 |
}
|
|
|
217 |
return null;
|
|
|
218 |
}
|
|
|
219 |
},
|
|
|
220 |
isActive: function (element, className, defaultActivation) {
|
|
|
221 |
var no = 'no-' + className;
|
|
|
222 |
while (element) {
|
|
|
223 |
var classList = element.classList;
|
|
|
224 |
if (classList.contains(className)) {
|
|
|
225 |
return true;
|
|
|
226 |
}
|
|
|
227 |
if (classList.contains(no)) {
|
|
|
228 |
return false;
|
|
|
229 |
}
|
|
|
230 |
element = element.parentElement;
|
|
|
231 |
}
|
|
|
232 |
return !!defaultActivation;
|
|
|
233 |
}
|
|
|
234 |
},
|
|
|
235 |
languages: {
|
|
|
236 |
plain: plainTextGrammar,
|
|
|
237 |
plaintext: plainTextGrammar,
|
|
|
238 |
text: plainTextGrammar,
|
|
|
239 |
txt: plainTextGrammar,
|
|
|
240 |
extend: function (id, redef) {
|
|
|
241 |
var lang = _.util.clone(_.languages[id]);
|
|
|
242 |
for (var key in redef) {
|
|
|
243 |
lang[key] = redef[key];
|
|
|
244 |
}
|
|
|
245 |
return lang;
|
|
|
246 |
},
|
|
|
247 |
insertBefore: function (inside, before, insert, root) {
|
|
|
248 |
root = root || _.languages;
|
|
|
249 |
var grammar = root[inside];
|
|
|
250 |
var ret = {};
|
|
|
251 |
for (var token in grammar) {
|
|
|
252 |
if (grammar.hasOwnProperty(token)) {
|
|
|
253 |
if (token == before) {
|
|
|
254 |
for (var newToken in insert) {
|
|
|
255 |
if (insert.hasOwnProperty(newToken)) {
|
|
|
256 |
ret[newToken] = insert[newToken];
|
|
|
257 |
}
|
|
|
258 |
}
|
|
|
259 |
}
|
|
|
260 |
if (!insert.hasOwnProperty(token)) {
|
|
|
261 |
ret[token] = grammar[token];
|
|
|
262 |
}
|
|
|
263 |
}
|
|
|
264 |
}
|
|
|
265 |
var old = root[inside];
|
|
|
266 |
root[inside] = ret;
|
|
|
267 |
_.languages.DFS(_.languages, function (key, value) {
|
|
|
268 |
if (value === old && key != inside) {
|
|
|
269 |
this[key] = ret;
|
|
|
270 |
}
|
|
|
271 |
});
|
|
|
272 |
return ret;
|
|
|
273 |
},
|
|
|
274 |
DFS: function DFS(o, callback, type, visited) {
|
|
|
275 |
visited = visited || {};
|
|
|
276 |
var objId = _.util.objId;
|
|
|
277 |
for (var i in o) {
|
|
|
278 |
if (o.hasOwnProperty(i)) {
|
|
|
279 |
callback.call(o, i, o[i], type || i);
|
|
|
280 |
var property = o[i];
|
|
|
281 |
var propertyType = _.util.type(property);
|
|
|
282 |
if (propertyType === 'Object' && !visited[objId(property)]) {
|
|
|
283 |
visited[objId(property)] = true;
|
|
|
284 |
DFS(property, callback, null, visited);
|
|
|
285 |
} else if (propertyType === 'Array' && !visited[objId(property)]) {
|
|
|
286 |
visited[objId(property)] = true;
|
|
|
287 |
DFS(property, callback, i, visited);
|
|
|
288 |
}
|
|
|
289 |
}
|
|
|
290 |
}
|
|
|
291 |
}
|
|
|
292 |
},
|
|
|
293 |
plugins: {},
|
|
|
294 |
highlightAll: function (async, callback) {
|
|
|
295 |
_.highlightAllUnder(document, async, callback);
|
|
|
296 |
},
|
|
|
297 |
highlightAllUnder: function (container, async, callback) {
|
|
|
298 |
var env = {
|
|
|
299 |
callback: callback,
|
|
|
300 |
container: container,
|
|
|
301 |
selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
|
|
|
302 |
};
|
|
|
303 |
_.hooks.run('before-highlightall', env);
|
|
|
304 |
env.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));
|
|
|
305 |
_.hooks.run('before-all-elements-highlight', env);
|
|
|
306 |
for (var i = 0, element; element = env.elements[i++];) {
|
|
|
307 |
_.highlightElement(element, async === true, env.callback);
|
|
|
308 |
}
|
|
|
309 |
},
|
|
|
310 |
highlightElement: function (element, async, callback) {
|
|
|
311 |
var language = _.util.getLanguage(element);
|
|
|
312 |
var grammar = _.languages[language];
|
|
|
313 |
_.util.setLanguage(element, language);
|
|
|
314 |
var parent = element.parentElement;
|
|
|
315 |
if (parent && parent.nodeName.toLowerCase() === 'pre') {
|
|
|
316 |
_.util.setLanguage(parent, language);
|
|
|
317 |
}
|
|
|
318 |
var code = element.textContent;
|
|
|
319 |
var env = {
|
|
|
320 |
element: element,
|
|
|
321 |
language: language,
|
|
|
322 |
grammar: grammar,
|
|
|
323 |
code: code
|
|
|
324 |
};
|
|
|
325 |
function insertHighlightedCode(highlightedCode) {
|
|
|
326 |
env.highlightedCode = highlightedCode;
|
|
|
327 |
_.hooks.run('before-insert', env);
|
|
|
328 |
env.element.innerHTML = env.highlightedCode;
|
|
|
329 |
_.hooks.run('after-highlight', env);
|
|
|
330 |
_.hooks.run('complete', env);
|
|
|
331 |
callback && callback.call(env.element);
|
|
|
332 |
}
|
|
|
333 |
_.hooks.run('before-sanity-check', env);
|
|
|
334 |
parent = env.element.parentElement;
|
|
|
335 |
if (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {
|
|
|
336 |
parent.setAttribute('tabindex', '0');
|
|
|
337 |
}
|
|
|
338 |
if (!env.code) {
|
|
|
339 |
_.hooks.run('complete', env);
|
|
|
340 |
callback && callback.call(env.element);
|
|
|
341 |
return;
|
|
|
342 |
}
|
|
|
343 |
_.hooks.run('before-highlight', env);
|
|
|
344 |
if (!env.grammar) {
|
|
|
345 |
insertHighlightedCode(_.util.encode(env.code));
|
|
|
346 |
return;
|
|
|
347 |
}
|
|
|
348 |
if (async && _self.Worker) {
|
|
|
349 |
var worker = new Worker(_.filename);
|
|
|
350 |
worker.onmessage = function (evt) {
|
|
|
351 |
insertHighlightedCode(evt.data);
|
|
|
352 |
};
|
|
|
353 |
worker.postMessage(JSON.stringify({
|
|
|
354 |
language: env.language,
|
|
|
355 |
code: env.code,
|
|
|
356 |
immediateClose: true
|
|
|
357 |
}));
|
|
|
358 |
} else {
|
|
|
359 |
insertHighlightedCode(_.highlight(env.code, env.grammar, env.language));
|
|
|
360 |
}
|
|
|
361 |
},
|
|
|
362 |
highlight: function (text, grammar, language) {
|
|
|
363 |
var env = {
|
|
|
364 |
code: text,
|
|
|
365 |
grammar: grammar,
|
|
|
366 |
language: language
|
|
|
367 |
};
|
|
|
368 |
_.hooks.run('before-tokenize', env);
|
|
|
369 |
if (!env.grammar) {
|
|
|
370 |
throw new Error('The language "' + env.language + '" has no grammar.');
|
|
|
371 |
}
|
|
|
372 |
env.tokens = _.tokenize(env.code, env.grammar);
|
|
|
373 |
_.hooks.run('after-tokenize', env);
|
|
|
374 |
return Token.stringify(_.util.encode(env.tokens), env.language);
|
|
|
375 |
},
|
|
|
376 |
tokenize: function (text, grammar) {
|
|
|
377 |
var rest = grammar.rest;
|
|
|
378 |
if (rest) {
|
|
|
379 |
for (var token in rest) {
|
|
|
380 |
grammar[token] = rest[token];
|
|
|
381 |
}
|
|
|
382 |
delete grammar.rest;
|
|
|
383 |
}
|
|
|
384 |
var tokenList = new LinkedList();
|
|
|
385 |
addAfter(tokenList, tokenList.head, text);
|
|
|
386 |
matchGrammar(text, tokenList, grammar, tokenList.head, 0);
|
|
|
387 |
return toArray(tokenList);
|
|
|
388 |
},
|
|
|
389 |
hooks: {
|
|
|
390 |
all: {},
|
|
|
391 |
add: function (name, callback) {
|
|
|
392 |
var hooks = _.hooks.all;
|
|
|
393 |
hooks[name] = hooks[name] || [];
|
|
|
394 |
hooks[name].push(callback);
|
|
|
395 |
},
|
|
|
396 |
run: function (name, env) {
|
|
|
397 |
var callbacks = _.hooks.all[name];
|
|
|
398 |
if (!callbacks || !callbacks.length) {
|
|
|
399 |
return;
|
|
|
400 |
}
|
|
|
401 |
for (var i = 0, callback; callback = callbacks[i++];) {
|
|
|
402 |
callback(env);
|
|
|
403 |
}
|
|
|
404 |
}
|
|
|
405 |
},
|
|
|
406 |
Token: Token
|
|
|
407 |
};
|
|
|
408 |
_self.Prism = _;
|
|
|
409 |
function Token(type, content, alias, matchedStr) {
|
|
|
410 |
this.type = type;
|
|
|
411 |
this.content = content;
|
|
|
412 |
this.alias = alias;
|
|
|
413 |
this.length = (matchedStr || '').length | 0;
|
|
|
414 |
}
|
|
|
415 |
Token.stringify = function stringify(o, language) {
|
|
|
416 |
if (typeof o == 'string') {
|
|
|
417 |
return o;
|
|
|
418 |
}
|
|
|
419 |
if (Array.isArray(o)) {
|
|
|
420 |
var s = '';
|
|
|
421 |
o.forEach(function (e) {
|
|
|
422 |
s += stringify(e, language);
|
|
|
423 |
});
|
|
|
424 |
return s;
|
|
|
425 |
}
|
|
|
426 |
var env = {
|
|
|
427 |
type: o.type,
|
|
|
428 |
content: stringify(o.content, language),
|
|
|
429 |
tag: 'span',
|
|
|
430 |
classes: [
|
|
|
431 |
'token',
|
|
|
432 |
o.type
|
|
|
433 |
],
|
|
|
434 |
attributes: {},
|
|
|
435 |
language: language
|
|
|
436 |
};
|
|
|
437 |
var aliases = o.alias;
|
|
|
438 |
if (aliases) {
|
|
|
439 |
if (Array.isArray(aliases)) {
|
|
|
440 |
Array.prototype.push.apply(env.classes, aliases);
|
|
|
441 |
} else {
|
|
|
442 |
env.classes.push(aliases);
|
|
|
443 |
}
|
|
|
444 |
}
|
|
|
445 |
_.hooks.run('wrap', env);
|
|
|
446 |
var attributes = '';
|
|
|
447 |
for (var name in env.attributes) {
|
|
|
448 |
attributes += ' ' + name + '="' + (env.attributes[name] || '').replace(/"/g, '"') + '"';
|
|
|
449 |
}
|
|
|
450 |
return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + attributes + '>' + env.content + '</' + env.tag + '>';
|
|
|
451 |
};
|
|
|
452 |
function matchPattern(pattern, pos, text, lookbehind) {
|
|
|
453 |
pattern.lastIndex = pos;
|
|
|
454 |
var match = pattern.exec(text);
|
|
|
455 |
if (match && lookbehind && match[1]) {
|
|
|
456 |
var lookbehindLength = match[1].length;
|
|
|
457 |
match.index += lookbehindLength;
|
|
|
458 |
match[0] = match[0].slice(lookbehindLength);
|
|
|
459 |
}
|
|
|
460 |
return match;
|
|
|
461 |
}
|
|
|
462 |
function matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {
|
|
|
463 |
for (var token in grammar) {
|
|
|
464 |
if (!grammar.hasOwnProperty(token) || !grammar[token]) {
|
|
|
465 |
continue;
|
|
|
466 |
}
|
|
|
467 |
var patterns = grammar[token];
|
|
|
468 |
patterns = Array.isArray(patterns) ? patterns : [patterns];
|
|
|
469 |
for (var j = 0; j < patterns.length; ++j) {
|
|
|
470 |
if (rematch && rematch.cause == token + ',' + j) {
|
|
|
471 |
return;
|
|
|
472 |
}
|
|
|
473 |
var patternObj = patterns[j];
|
|
|
474 |
var inside = patternObj.inside;
|
|
|
475 |
var lookbehind = !!patternObj.lookbehind;
|
|
|
476 |
var greedy = !!patternObj.greedy;
|
|
|
477 |
var alias = patternObj.alias;
|
|
|
478 |
if (greedy && !patternObj.pattern.global) {
|
|
|
479 |
var flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];
|
|
|
480 |
patternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');
|
|
|
481 |
}
|
|
|
482 |
var pattern = patternObj.pattern || patternObj;
|
|
|
483 |
for (var currentNode = startNode.next, pos = startPos; currentNode !== tokenList.tail; pos += currentNode.value.length, currentNode = currentNode.next) {
|
|
|
484 |
if (rematch && pos >= rematch.reach) {
|
|
|
485 |
break;
|
|
|
486 |
}
|
|
|
487 |
var str = currentNode.value;
|
|
|
488 |
if (tokenList.length > text.length) {
|
|
|
489 |
return;
|
|
|
490 |
}
|
|
|
491 |
if (str instanceof Token) {
|
|
|
492 |
continue;
|
|
|
493 |
}
|
|
|
494 |
var removeCount = 1;
|
|
|
495 |
var match;
|
|
|
496 |
if (greedy) {
|
|
|
497 |
match = matchPattern(pattern, pos, text, lookbehind);
|
|
|
498 |
if (!match || match.index >= text.length) {
|
|
|
499 |
break;
|
|
|
500 |
}
|
|
|
501 |
var from = match.index;
|
|
|
502 |
var to = match.index + match[0].length;
|
|
|
503 |
var p = pos;
|
|
|
504 |
p += currentNode.value.length;
|
|
|
505 |
while (from >= p) {
|
|
|
506 |
currentNode = currentNode.next;
|
|
|
507 |
p += currentNode.value.length;
|
|
|
508 |
}
|
|
|
509 |
p -= currentNode.value.length;
|
|
|
510 |
pos = p;
|
|
|
511 |
if (currentNode.value instanceof Token) {
|
|
|
512 |
continue;
|
|
|
513 |
}
|
|
|
514 |
for (var k = currentNode; k !== tokenList.tail && (p < to || typeof k.value === 'string'); k = k.next) {
|
|
|
515 |
removeCount++;
|
|
|
516 |
p += k.value.length;
|
|
|
517 |
}
|
|
|
518 |
removeCount--;
|
|
|
519 |
str = text.slice(pos, p);
|
|
|
520 |
match.index -= pos;
|
|
|
521 |
} else {
|
|
|
522 |
match = matchPattern(pattern, 0, str, lookbehind);
|
|
|
523 |
if (!match) {
|
|
|
524 |
continue;
|
|
|
525 |
}
|
|
|
526 |
}
|
|
|
527 |
var from = match.index;
|
|
|
528 |
var matchStr = match[0];
|
|
|
529 |
var before = str.slice(0, from);
|
|
|
530 |
var after = str.slice(from + matchStr.length);
|
|
|
531 |
var reach = pos + str.length;
|
|
|
532 |
if (rematch && reach > rematch.reach) {
|
|
|
533 |
rematch.reach = reach;
|
|
|
534 |
}
|
|
|
535 |
var removeFrom = currentNode.prev;
|
|
|
536 |
if (before) {
|
|
|
537 |
removeFrom = addAfter(tokenList, removeFrom, before);
|
|
|
538 |
pos += before.length;
|
|
|
539 |
}
|
|
|
540 |
removeRange(tokenList, removeFrom, removeCount);
|
|
|
541 |
var wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);
|
|
|
542 |
currentNode = addAfter(tokenList, removeFrom, wrapped);
|
|
|
543 |
if (after) {
|
|
|
544 |
addAfter(tokenList, currentNode, after);
|
|
|
545 |
}
|
|
|
546 |
if (removeCount > 1) {
|
|
|
547 |
var nestedRematch = {
|
|
|
548 |
cause: token + ',' + j,
|
|
|
549 |
reach: reach
|
|
|
550 |
};
|
|
|
551 |
matchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);
|
|
|
552 |
if (rematch && nestedRematch.reach > rematch.reach) {
|
|
|
553 |
rematch.reach = nestedRematch.reach;
|
|
|
554 |
}
|
|
|
555 |
}
|
|
|
556 |
}
|
|
|
557 |
}
|
|
|
558 |
}
|
|
|
559 |
}
|
|
|
560 |
function LinkedList() {
|
|
|
561 |
var head = {
|
|
|
562 |
value: null,
|
|
|
563 |
prev: null,
|
|
|
564 |
next: null
|
|
|
565 |
};
|
|
|
566 |
var tail = {
|
|
|
567 |
value: null,
|
|
|
568 |
prev: head,
|
|
|
569 |
next: null
|
|
|
570 |
};
|
|
|
571 |
head.next = tail;
|
|
|
572 |
this.head = head;
|
|
|
573 |
this.tail = tail;
|
|
|
574 |
this.length = 0;
|
|
|
575 |
}
|
|
|
576 |
function addAfter(list, node, value) {
|
|
|
577 |
var next = node.next;
|
|
|
578 |
var newNode = {
|
|
|
579 |
value: value,
|
|
|
580 |
prev: node,
|
|
|
581 |
next: next
|
|
|
582 |
};
|
|
|
583 |
node.next = newNode;
|
|
|
584 |
next.prev = newNode;
|
|
|
585 |
list.length++;
|
|
|
586 |
return newNode;
|
|
|
587 |
}
|
|
|
588 |
function removeRange(list, node, count) {
|
|
|
589 |
var next = node.next;
|
|
|
590 |
for (var i = 0; i < count && next !== list.tail; i++) {
|
|
|
591 |
next = next.next;
|
|
|
592 |
}
|
|
|
593 |
node.next = next;
|
|
|
594 |
next.prev = node;
|
|
|
595 |
list.length -= i;
|
|
|
596 |
}
|
|
|
597 |
function toArray(list) {
|
|
|
598 |
var array = [];
|
|
|
599 |
var node = list.head.next;
|
|
|
600 |
while (node !== list.tail) {
|
|
|
601 |
array.push(node.value);
|
|
|
602 |
node = node.next;
|
|
|
603 |
}
|
|
|
604 |
return array;
|
|
|
605 |
}
|
|
|
606 |
if (!_self.document) {
|
|
|
607 |
if (!_self.addEventListener) {
|
|
|
608 |
return _;
|
|
|
609 |
}
|
|
|
610 |
if (!_.disableWorkerMessageHandler) {
|
|
|
611 |
_self.addEventListener('message', function (evt) {
|
|
|
612 |
var message = JSON.parse(evt.data);
|
|
|
613 |
var lang = message.language;
|
|
|
614 |
var code = message.code;
|
|
|
615 |
var immediateClose = message.immediateClose;
|
|
|
616 |
_self.postMessage(_.highlight(code, _.languages[lang], lang));
|
|
|
617 |
if (immediateClose) {
|
|
|
618 |
_self.close();
|
|
|
619 |
}
|
|
|
620 |
}, false);
|
|
|
621 |
}
|
|
|
622 |
return _;
|
|
|
623 |
}
|
|
|
624 |
var script = _.util.currentScript();
|
|
|
625 |
if (script) {
|
|
|
626 |
_.filename = script.src;
|
|
|
627 |
if (script.hasAttribute('data-manual')) {
|
|
|
628 |
_.manual = true;
|
|
|
629 |
}
|
|
|
630 |
}
|
|
|
631 |
function highlightAutomaticallyCallback() {
|
|
|
632 |
if (!_.manual) {
|
|
|
633 |
_.highlightAll();
|
|
|
634 |
}
|
|
|
635 |
}
|
|
|
636 |
if (!_.manual) {
|
|
|
637 |
var readyState = document.readyState;
|
|
|
638 |
if (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {
|
|
|
639 |
document.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);
|
|
|
640 |
} else {
|
|
|
641 |
if (window.requestAnimationFrame) {
|
|
|
642 |
window.requestAnimationFrame(highlightAutomaticallyCallback);
|
|
|
643 |
} else {
|
|
|
644 |
window.setTimeout(highlightAutomaticallyCallback, 16);
|
|
|
645 |
}
|
|
|
646 |
}
|
|
|
647 |
}
|
|
|
648 |
return _;
|
|
|
649 |
}(_self);
|
|
|
650 |
if (typeof module !== 'undefined' && module.exports) {
|
|
|
651 |
module.exports = Prism;
|
|
|
652 |
}
|
|
|
653 |
if (typeof global !== 'undefined') {
|
|
|
654 |
global.Prism = Prism;
|
|
|
655 |
}
|
|
|
656 |
Prism.languages.clike = {
|
|
|
657 |
'comment': [
|
|
|
658 |
{
|
|
|
659 |
pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
|
|
|
660 |
lookbehind: true,
|
|
|
661 |
greedy: true
|
|
|
662 |
},
|
|
|
663 |
{
|
|
|
664 |
pattern: /(^|[^\\:])\/\/.*/,
|
|
|
665 |
lookbehind: true,
|
|
|
666 |
greedy: true
|
|
|
667 |
}
|
|
|
668 |
],
|
|
|
669 |
'string': {
|
|
|
670 |
pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
|
|
|
671 |
greedy: true
|
|
|
672 |
},
|
|
|
673 |
'class-name': {
|
|
|
674 |
pattern: /(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,
|
|
|
675 |
lookbehind: true,
|
|
|
676 |
inside: { 'punctuation': /[.\\]/ }
|
|
|
677 |
},
|
|
|
678 |
'keyword': /\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,
|
|
|
679 |
'boolean': /\b(?:false|true)\b/,
|
|
|
680 |
'function': /\b\w+(?=\()/,
|
|
|
681 |
'number': /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,
|
|
|
682 |
'operator': /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,
|
|
|
683 |
'punctuation': /[{}[\];(),.:]/
|
|
|
684 |
};
|
|
|
685 |
(function (Prism) {
|
|
|
686 |
function getPlaceholder(language, index) {
|
|
|
687 |
return '___' + language.toUpperCase() + index + '___';
|
|
|
688 |
}
|
|
|
689 |
Object.defineProperties(Prism.languages['markup-templating'] = {}, {
|
|
|
690 |
buildPlaceholders: {
|
|
|
691 |
value: function (env, language, placeholderPattern, replaceFilter) {
|
|
|
692 |
if (env.language !== language) {
|
|
|
693 |
return;
|
|
|
694 |
}
|
|
|
695 |
var tokenStack = env.tokenStack = [];
|
|
|
696 |
env.code = env.code.replace(placeholderPattern, function (match) {
|
|
|
697 |
if (typeof replaceFilter === 'function' && !replaceFilter(match)) {
|
|
|
698 |
return match;
|
|
|
699 |
}
|
|
|
700 |
var i = tokenStack.length;
|
|
|
701 |
var placeholder;
|
|
|
702 |
while (env.code.indexOf(placeholder = getPlaceholder(language, i)) !== -1) {
|
|
|
703 |
++i;
|
|
|
704 |
}
|
|
|
705 |
tokenStack[i] = match;
|
|
|
706 |
return placeholder;
|
|
|
707 |
});
|
|
|
708 |
env.grammar = Prism.languages.markup;
|
|
|
709 |
}
|
|
|
710 |
},
|
|
|
711 |
tokenizePlaceholders: {
|
|
|
712 |
value: function (env, language) {
|
|
|
713 |
if (env.language !== language || !env.tokenStack) {
|
|
|
714 |
return;
|
|
|
715 |
}
|
|
|
716 |
env.grammar = Prism.languages[language];
|
|
|
717 |
var j = 0;
|
|
|
718 |
var keys = Object.keys(env.tokenStack);
|
|
|
719 |
function walkTokens(tokens) {
|
|
|
720 |
for (var i = 0; i < tokens.length; i++) {
|
|
|
721 |
if (j >= keys.length) {
|
|
|
722 |
break;
|
|
|
723 |
}
|
|
|
724 |
var token = tokens[i];
|
|
|
725 |
if (typeof token === 'string' || token.content && typeof token.content === 'string') {
|
|
|
726 |
var k = keys[j];
|
|
|
727 |
var t = env.tokenStack[k];
|
|
|
728 |
var s = typeof token === 'string' ? token : token.content;
|
|
|
729 |
var placeholder = getPlaceholder(language, k);
|
|
|
730 |
var index = s.indexOf(placeholder);
|
|
|
731 |
if (index > -1) {
|
|
|
732 |
++j;
|
|
|
733 |
var before = s.substring(0, index);
|
|
|
734 |
var middle = new Prism.Token(language, Prism.tokenize(t, env.grammar), 'language-' + language, t);
|
|
|
735 |
var after = s.substring(index + placeholder.length);
|
|
|
736 |
var replacement = [];
|
|
|
737 |
if (before) {
|
|
|
738 |
replacement.push.apply(replacement, walkTokens([before]));
|
|
|
739 |
}
|
|
|
740 |
replacement.push(middle);
|
|
|
741 |
if (after) {
|
|
|
742 |
replacement.push.apply(replacement, walkTokens([after]));
|
|
|
743 |
}
|
|
|
744 |
if (typeof token === 'string') {
|
|
|
745 |
tokens.splice.apply(tokens, [
|
|
|
746 |
i,
|
|
|
747 |
1
|
|
|
748 |
].concat(replacement));
|
|
|
749 |
} else {
|
|
|
750 |
token.content = replacement;
|
|
|
751 |
}
|
|
|
752 |
}
|
|
|
753 |
} else if (token.content) {
|
|
|
754 |
walkTokens(token.content);
|
|
|
755 |
}
|
|
|
756 |
}
|
|
|
757 |
return tokens;
|
|
|
758 |
}
|
|
|
759 |
walkTokens(env.tokens);
|
|
|
760 |
}
|
|
|
761 |
}
|
|
|
762 |
});
|
|
|
763 |
}(Prism));
|
|
|
764 |
Prism.languages.c = Prism.languages.extend('clike', {
|
|
|
765 |
'comment': {
|
|
|
766 |
pattern: /\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,
|
|
|
767 |
greedy: true
|
|
|
768 |
},
|
|
|
769 |
'string': {
|
|
|
770 |
pattern: /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,
|
|
|
771 |
greedy: true
|
|
|
772 |
},
|
|
|
773 |
'class-name': {
|
|
|
774 |
pattern: /(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,
|
|
|
775 |
lookbehind: true
|
|
|
776 |
},
|
|
|
777 |
'keyword': /\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,
|
|
|
778 |
'function': /\b[a-z_]\w*(?=\s*\()/i,
|
|
|
779 |
'number': /(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,
|
|
|
780 |
'operator': />>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/
|
|
|
781 |
});
|
|
|
782 |
Prism.languages.insertBefore('c', 'string', {
|
|
|
783 |
'char': {
|
|
|
784 |
pattern: /'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,
|
|
|
785 |
greedy: true
|
|
|
786 |
}
|
|
|
787 |
});
|
|
|
788 |
Prism.languages.insertBefore('c', 'string', {
|
|
|
789 |
'macro': {
|
|
|
790 |
pattern: /(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,
|
|
|
791 |
lookbehind: true,
|
|
|
792 |
greedy: true,
|
|
|
793 |
alias: 'property',
|
|
|
794 |
inside: {
|
|
|
795 |
'string': [
|
|
|
796 |
{
|
|
|
797 |
pattern: /^(#\s*include\s*)<[^>]+>/,
|
|
|
798 |
lookbehind: true
|
|
|
799 |
},
|
|
|
800 |
Prism.languages.c['string']
|
|
|
801 |
],
|
|
|
802 |
'char': Prism.languages.c['char'],
|
|
|
803 |
'comment': Prism.languages.c['comment'],
|
|
|
804 |
'macro-name': [
|
|
|
805 |
{
|
|
|
806 |
pattern: /(^#\s*define\s+)\w+\b(?!\()/i,
|
|
|
807 |
lookbehind: true
|
|
|
808 |
},
|
|
|
809 |
{
|
|
|
810 |
pattern: /(^#\s*define\s+)\w+\b(?=\()/i,
|
|
|
811 |
lookbehind: true,
|
|
|
812 |
alias: 'function'
|
|
|
813 |
}
|
|
|
814 |
],
|
|
|
815 |
'directive': {
|
|
|
816 |
pattern: /^(#\s*)[a-z]+/,
|
|
|
817 |
lookbehind: true,
|
|
|
818 |
alias: 'keyword'
|
|
|
819 |
},
|
|
|
820 |
'directive-hash': /^#/,
|
|
|
821 |
'punctuation': /##|\\(?=[\r\n])/,
|
|
|
822 |
'expression': {
|
|
|
823 |
pattern: /\S[\s\S]*/,
|
|
|
824 |
inside: Prism.languages.c
|
|
|
825 |
}
|
|
|
826 |
}
|
|
|
827 |
}
|
|
|
828 |
});
|
|
|
829 |
Prism.languages.insertBefore('c', 'function', { 'constant': /\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/ });
|
|
|
830 |
delete Prism.languages.c['boolean'];
|
|
|
831 |
(function (Prism) {
|
|
|
832 |
var keyword = /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;
|
|
|
833 |
var modName = /\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g, function () {
|
|
|
834 |
return keyword.source;
|
|
|
835 |
});
|
|
|
836 |
Prism.languages.cpp = Prism.languages.extend('c', {
|
|
|
837 |
'class-name': [
|
|
|
838 |
{
|
|
|
839 |
pattern: RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g, function () {
|
|
|
840 |
return keyword.source;
|
|
|
841 |
})),
|
|
|
842 |
lookbehind: true
|
|
|
843 |
},
|
|
|
844 |
/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,
|
|
|
845 |
/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,
|
|
|
846 |
/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/
|
|
|
847 |
],
|
|
|
848 |
'keyword': keyword,
|
|
|
849 |
'number': {
|
|
|
850 |
pattern: /(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,
|
|
|
851 |
greedy: true
|
|
|
852 |
},
|
|
|
853 |
'operator': />>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,
|
|
|
854 |
'boolean': /\b(?:false|true)\b/
|
|
|
855 |
});
|
|
|
856 |
Prism.languages.insertBefore('cpp', 'string', {
|
|
|
857 |
'module': {
|
|
|
858 |
pattern: RegExp(/(\b(?:import|module)\s+)/.source + '(?:' + /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source + '|' + /<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g, function () {
|
|
|
859 |
return modName;
|
|
|
860 |
}) + ')'),
|
|
|
861 |
lookbehind: true,
|
|
|
862 |
greedy: true,
|
|
|
863 |
inside: {
|
|
|
864 |
'string': /^[<"][\s\S]+/,
|
|
|
865 |
'operator': /:/,
|
|
|
866 |
'punctuation': /\./
|
|
|
867 |
}
|
|
|
868 |
},
|
|
|
869 |
'raw-string': {
|
|
|
870 |
pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,
|
|
|
871 |
alias: 'string',
|
|
|
872 |
greedy: true
|
|
|
873 |
}
|
|
|
874 |
});
|
|
|
875 |
Prism.languages.insertBefore('cpp', 'keyword', {
|
|
|
876 |
'generic-function': {
|
|
|
877 |
pattern: /\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,
|
|
|
878 |
inside: {
|
|
|
879 |
'function': /^\w+/,
|
|
|
880 |
'generic': {
|
|
|
881 |
pattern: /<[\s\S]+/,
|
|
|
882 |
alias: 'class-name',
|
|
|
883 |
inside: Prism.languages.cpp
|
|
|
884 |
}
|
|
|
885 |
}
|
|
|
886 |
}
|
|
|
887 |
});
|
|
|
888 |
Prism.languages.insertBefore('cpp', 'operator', {
|
|
|
889 |
'double-colon': {
|
|
|
890 |
pattern: /::/,
|
|
|
891 |
alias: 'punctuation'
|
|
|
892 |
}
|
|
|
893 |
});
|
|
|
894 |
Prism.languages.insertBefore('cpp', 'class-name', {
|
|
|
895 |
'base-clause': {
|
|
|
896 |
pattern: /(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,
|
|
|
897 |
lookbehind: true,
|
|
|
898 |
greedy: true,
|
|
|
899 |
inside: Prism.languages.extend('cpp', {})
|
|
|
900 |
}
|
|
|
901 |
});
|
|
|
902 |
Prism.languages.insertBefore('inside', 'double-colon', { 'class-name': /\b[a-z_]\w*\b(?!\s*::)/i }, Prism.languages.cpp['base-clause']);
|
|
|
903 |
}(Prism));
|
|
|
904 |
(function (Prism) {
|
|
|
905 |
function replace(pattern, replacements) {
|
|
|
906 |
return pattern.replace(/<<(\d+)>>/g, function (m, index) {
|
|
|
907 |
return '(?:' + replacements[+index] + ')';
|
|
|
908 |
});
|
|
|
909 |
}
|
|
|
910 |
function re(pattern, replacements, flags) {
|
|
|
911 |
return RegExp(replace(pattern, replacements), flags || '');
|
|
|
912 |
}
|
|
|
913 |
function nested(pattern, depthLog2) {
|
|
|
914 |
for (var i = 0; i < depthLog2; i++) {
|
|
|
915 |
pattern = pattern.replace(/<<self>>/g, function () {
|
|
|
916 |
return '(?:' + pattern + ')';
|
|
|
917 |
});
|
|
|
918 |
}
|
|
|
919 |
return pattern.replace(/<<self>>/g, '[^\\s\\S]');
|
|
|
920 |
}
|
|
|
921 |
var keywordKinds = {
|
|
|
922 |
type: 'bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void',
|
|
|
923 |
typeDeclaration: 'class enum interface record struct',
|
|
|
924 |
contextual: 'add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)',
|
|
|
925 |
other: 'abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield'
|
|
|
926 |
};
|
|
|
927 |
function keywordsToPattern(words) {
|
|
|
928 |
return '\\b(?:' + words.trim().replace(/ /g, '|') + ')\\b';
|
|
|
929 |
}
|
|
|
930 |
var typeDeclarationKeywords = keywordsToPattern(keywordKinds.typeDeclaration);
|
|
|
931 |
var keywords = RegExp(keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.typeDeclaration + ' ' + keywordKinds.contextual + ' ' + keywordKinds.other));
|
|
|
932 |
var nonTypeKeywords = keywordsToPattern(keywordKinds.typeDeclaration + ' ' + keywordKinds.contextual + ' ' + keywordKinds.other);
|
|
|
933 |
var nonContextualKeywords = keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.typeDeclaration + ' ' + keywordKinds.other);
|
|
|
934 |
var generic = nested(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source, 2);
|
|
|
935 |
var nestedRound = nested(/\((?:[^()]|<<self>>)*\)/.source, 2);
|
|
|
936 |
var name = /@?\b[A-Za-z_]\w*\b/.source;
|
|
|
937 |
var genericName = replace(/<<0>>(?:\s*<<1>>)?/.source, [
|
|
|
938 |
name,
|
|
|
939 |
generic
|
|
|
940 |
]);
|
|
|
941 |
var identifier = replace(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source, [
|
|
|
942 |
nonTypeKeywords,
|
|
|
943 |
genericName
|
|
|
944 |
]);
|
|
|
945 |
var array = /\[\s*(?:,\s*)*\]/.source;
|
|
|
946 |
var typeExpressionWithoutTuple = replace(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source, [
|
|
|
947 |
identifier,
|
|
|
948 |
array
|
|
|
949 |
]);
|
|
|
950 |
var tupleElement = replace(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source, [
|
|
|
951 |
generic,
|
|
|
952 |
nestedRound,
|
|
|
953 |
array
|
|
|
954 |
]);
|
|
|
955 |
var tuple = replace(/\(<<0>>+(?:,<<0>>+)+\)/.source, [tupleElement]);
|
|
|
956 |
var typeExpression = replace(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source, [
|
|
|
957 |
tuple,
|
|
|
958 |
identifier,
|
|
|
959 |
array
|
|
|
960 |
]);
|
|
|
961 |
var typeInside = {
|
|
|
962 |
'keyword': keywords,
|
|
|
963 |
'punctuation': /[<>()?,.:[\]]/
|
|
|
964 |
};
|
|
|
965 |
var character = /'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source;
|
|
|
966 |
var regularString = /"(?:\\.|[^\\"\r\n])*"/.source;
|
|
|
967 |
var verbatimString = /@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;
|
|
|
968 |
Prism.languages.csharp = Prism.languages.extend('clike', {
|
|
|
969 |
'string': [
|
|
|
970 |
{
|
|
|
971 |
pattern: re(/(^|[^$\\])<<0>>/.source, [verbatimString]),
|
|
|
972 |
lookbehind: true,
|
|
|
973 |
greedy: true
|
|
|
974 |
},
|
|
|
975 |
{
|
|
|
976 |
pattern: re(/(^|[^@$\\])<<0>>/.source, [regularString]),
|
|
|
977 |
lookbehind: true,
|
|
|
978 |
greedy: true
|
|
|
979 |
}
|
|
|
980 |
],
|
|
|
981 |
'class-name': [
|
|
|
982 |
{
|
|
|
983 |
pattern: re(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source, [identifier]),
|
|
|
984 |
lookbehind: true,
|
|
|
985 |
inside: typeInside
|
|
|
986 |
},
|
|
|
987 |
{
|
|
|
988 |
pattern: re(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source, [
|
|
|
989 |
name,
|
|
|
990 |
typeExpression
|
|
|
991 |
]),
|
|
|
992 |
lookbehind: true,
|
|
|
993 |
inside: typeInside
|
|
|
994 |
},
|
|
|
995 |
{
|
|
|
996 |
pattern: re(/(\busing\s+)<<0>>(?=\s*=)/.source, [name]),
|
|
|
997 |
lookbehind: true
|
|
|
998 |
},
|
|
|
999 |
{
|
|
|
1000 |
pattern: re(/(\b<<0>>\s+)<<1>>/.source, [
|
|
|
1001 |
typeDeclarationKeywords,
|
|
|
1002 |
genericName
|
|
|
1003 |
]),
|
|
|
1004 |
lookbehind: true,
|
|
|
1005 |
inside: typeInside
|
|
|
1006 |
},
|
|
|
1007 |
{
|
|
|
1008 |
pattern: re(/(\bcatch\s*\(\s*)<<0>>/.source, [identifier]),
|
|
|
1009 |
lookbehind: true,
|
|
|
1010 |
inside: typeInside
|
|
|
1011 |
},
|
|
|
1012 |
{
|
|
|
1013 |
pattern: re(/(\bwhere\s+)<<0>>/.source, [name]),
|
|
|
1014 |
lookbehind: true
|
|
|
1015 |
},
|
|
|
1016 |
{
|
|
|
1017 |
pattern: re(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source, [typeExpressionWithoutTuple]),
|
|
|
1018 |
lookbehind: true,
|
|
|
1019 |
inside: typeInside
|
|
|
1020 |
},
|
|
|
1021 |
{
|
|
|
1022 |
pattern: re(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source, [
|
|
|
1023 |
typeExpression,
|
|
|
1024 |
nonContextualKeywords,
|
|
|
1025 |
name
|
|
|
1026 |
]),
|
|
|
1027 |
inside: typeInside
|
|
|
1028 |
}
|
|
|
1029 |
],
|
|
|
1030 |
'keyword': keywords,
|
|
|
1031 |
'number': /(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,
|
|
|
1032 |
'operator': />>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,
|
|
|
1033 |
'punctuation': /\?\.?|::|[{}[\];(),.:]/
|
|
|
1034 |
});
|
|
|
1035 |
Prism.languages.insertBefore('csharp', 'number', {
|
|
|
1036 |
'range': {
|
|
|
1037 |
pattern: /\.\./,
|
|
|
1038 |
alias: 'operator'
|
|
|
1039 |
}
|
|
|
1040 |
});
|
|
|
1041 |
Prism.languages.insertBefore('csharp', 'punctuation', {
|
|
|
1042 |
'named-parameter': {
|
|
|
1043 |
pattern: re(/([(,]\s*)<<0>>(?=\s*:)/.source, [name]),
|
|
|
1044 |
lookbehind: true,
|
|
|
1045 |
alias: 'punctuation'
|
|
|
1046 |
}
|
|
|
1047 |
});
|
|
|
1048 |
Prism.languages.insertBefore('csharp', 'class-name', {
|
|
|
1049 |
'namespace': {
|
|
|
1050 |
pattern: re(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source, [name]),
|
|
|
1051 |
lookbehind: true,
|
|
|
1052 |
inside: { 'punctuation': /\./ }
|
|
|
1053 |
},
|
|
|
1054 |
'type-expression': {
|
|
|
1055 |
pattern: re(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source, [nestedRound]),
|
|
|
1056 |
lookbehind: true,
|
|
|
1057 |
alias: 'class-name',
|
|
|
1058 |
inside: typeInside
|
|
|
1059 |
},
|
|
|
1060 |
'return-type': {
|
|
|
1061 |
pattern: re(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source, [
|
|
|
1062 |
typeExpression,
|
|
|
1063 |
identifier
|
|
|
1064 |
]),
|
|
|
1065 |
inside: typeInside,
|
|
|
1066 |
alias: 'class-name'
|
|
|
1067 |
},
|
|
|
1068 |
'constructor-invocation': {
|
|
|
1069 |
pattern: re(/(\bnew\s+)<<0>>(?=\s*[[({])/.source, [typeExpression]),
|
|
|
1070 |
lookbehind: true,
|
|
|
1071 |
inside: typeInside,
|
|
|
1072 |
alias: 'class-name'
|
|
|
1073 |
},
|
|
|
1074 |
'generic-method': {
|
|
|
1075 |
pattern: re(/<<0>>\s*<<1>>(?=\s*\()/.source, [
|
|
|
1076 |
name,
|
|
|
1077 |
generic
|
|
|
1078 |
]),
|
|
|
1079 |
inside: {
|
|
|
1080 |
'function': re(/^<<0>>/.source, [name]),
|
|
|
1081 |
'generic': {
|
|
|
1082 |
pattern: RegExp(generic),
|
|
|
1083 |
alias: 'class-name',
|
|
|
1084 |
inside: typeInside
|
|
|
1085 |
}
|
|
|
1086 |
}
|
|
|
1087 |
},
|
|
|
1088 |
'type-list': {
|
|
|
1089 |
pattern: re(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source, [
|
|
|
1090 |
typeDeclarationKeywords,
|
|
|
1091 |
genericName,
|
|
|
1092 |
name,
|
|
|
1093 |
typeExpression,
|
|
|
1094 |
keywords.source,
|
|
|
1095 |
nestedRound,
|
|
|
1096 |
/\bnew\s*\(\s*\)/.source
|
|
|
1097 |
]),
|
|
|
1098 |
lookbehind: true,
|
|
|
1099 |
inside: {
|
|
|
1100 |
'record-arguments': {
|
|
|
1101 |
pattern: re(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source, [
|
|
|
1102 |
genericName,
|
|
|
1103 |
nestedRound
|
|
|
1104 |
]),
|
|
|
1105 |
lookbehind: true,
|
|
|
1106 |
greedy: true,
|
|
|
1107 |
inside: Prism.languages.csharp
|
|
|
1108 |
},
|
|
|
1109 |
'keyword': keywords,
|
|
|
1110 |
'class-name': {
|
|
|
1111 |
pattern: RegExp(typeExpression),
|
|
|
1112 |
greedy: true,
|
|
|
1113 |
inside: typeInside
|
|
|
1114 |
},
|
|
|
1115 |
'punctuation': /[,()]/
|
|
|
1116 |
}
|
|
|
1117 |
},
|
|
|
1118 |
'preprocessor': {
|
|
|
1119 |
pattern: /(^[\t ]*)#.*/m,
|
|
|
1120 |
lookbehind: true,
|
|
|
1121 |
alias: 'property',
|
|
|
1122 |
inside: {
|
|
|
1123 |
'directive': {
|
|
|
1124 |
pattern: /(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,
|
|
|
1125 |
lookbehind: true,
|
|
|
1126 |
alias: 'keyword'
|
|
|
1127 |
}
|
|
|
1128 |
}
|
|
|
1129 |
}
|
|
|
1130 |
});
|
|
|
1131 |
var regularStringOrCharacter = regularString + '|' + character;
|
|
|
1132 |
var regularStringCharacterOrComment = replace(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source, [regularStringOrCharacter]);
|
|
|
1133 |
var roundExpression = nested(replace(/[^"'/()]|<<0>>|\(<<self>>*\)/.source, [regularStringCharacterOrComment]), 2);
|
|
|
1134 |
var attrTarget = /\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source;
|
|
|
1135 |
var attr = replace(/<<0>>(?:\s*\(<<1>>*\))?/.source, [
|
|
|
1136 |
identifier,
|
|
|
1137 |
roundExpression
|
|
|
1138 |
]);
|
|
|
1139 |
Prism.languages.insertBefore('csharp', 'class-name', {
|
|
|
1140 |
'attribute': {
|
|
|
1141 |
pattern: re(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source, [
|
|
|
1142 |
attrTarget,
|
|
|
1143 |
attr
|
|
|
1144 |
]),
|
|
|
1145 |
lookbehind: true,
|
|
|
1146 |
greedy: true,
|
|
|
1147 |
inside: {
|
|
|
1148 |
'target': {
|
|
|
1149 |
pattern: re(/^<<0>>(?=\s*:)/.source, [attrTarget]),
|
|
|
1150 |
alias: 'keyword'
|
|
|
1151 |
},
|
|
|
1152 |
'attribute-arguments': {
|
|
|
1153 |
pattern: re(/\(<<0>>*\)/.source, [roundExpression]),
|
|
|
1154 |
inside: Prism.languages.csharp
|
|
|
1155 |
},
|
|
|
1156 |
'class-name': {
|
|
|
1157 |
pattern: RegExp(identifier),
|
|
|
1158 |
inside: { 'punctuation': /\./ }
|
|
|
1159 |
},
|
|
|
1160 |
'punctuation': /[:,]/
|
|
|
1161 |
}
|
|
|
1162 |
}
|
|
|
1163 |
});
|
|
|
1164 |
var formatString = /:[^}\r\n]+/.source;
|
|
|
1165 |
var mInterpolationRound = nested(replace(/[^"'/()]|<<0>>|\(<<self>>*\)/.source, [regularStringCharacterOrComment]), 2);
|
|
|
1166 |
var mInterpolation = replace(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source, [
|
|
|
1167 |
mInterpolationRound,
|
|
|
1168 |
formatString
|
|
|
1169 |
]);
|
|
|
1170 |
var sInterpolationRound = nested(replace(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source, [regularStringOrCharacter]), 2);
|
|
|
1171 |
var sInterpolation = replace(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source, [
|
|
|
1172 |
sInterpolationRound,
|
|
|
1173 |
formatString
|
|
|
1174 |
]);
|
|
|
1175 |
function createInterpolationInside(interpolation, interpolationRound) {
|
|
|
1176 |
return {
|
|
|
1177 |
'interpolation': {
|
|
|
1178 |
pattern: re(/((?:^|[^{])(?:\{\{)*)<<0>>/.source, [interpolation]),
|
|
|
1179 |
lookbehind: true,
|
|
|
1180 |
inside: {
|
|
|
1181 |
'format-string': {
|
|
|
1182 |
pattern: re(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source, [
|
|
|
1183 |
interpolationRound,
|
|
|
1184 |
formatString
|
|
|
1185 |
]),
|
|
|
1186 |
lookbehind: true,
|
|
|
1187 |
inside: { 'punctuation': /^:/ }
|
|
|
1188 |
},
|
|
|
1189 |
'punctuation': /^\{|\}$/,
|
|
|
1190 |
'expression': {
|
|
|
1191 |
pattern: /[\s\S]+/,
|
|
|
1192 |
alias: 'language-csharp',
|
|
|
1193 |
inside: Prism.languages.csharp
|
|
|
1194 |
}
|
|
|
1195 |
}
|
|
|
1196 |
},
|
|
|
1197 |
'string': /[\s\S]+/
|
|
|
1198 |
};
|
|
|
1199 |
}
|
|
|
1200 |
Prism.languages.insertBefore('csharp', 'string', {
|
|
|
1201 |
'interpolation-string': [
|
|
|
1202 |
{
|
|
|
1203 |
pattern: re(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source, [mInterpolation]),
|
|
|
1204 |
lookbehind: true,
|
|
|
1205 |
greedy: true,
|
|
|
1206 |
inside: createInterpolationInside(mInterpolation, mInterpolationRound)
|
|
|
1207 |
},
|
|
|
1208 |
{
|
|
|
1209 |
pattern: re(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source, [sInterpolation]),
|
|
|
1210 |
lookbehind: true,
|
|
|
1211 |
greedy: true,
|
|
|
1212 |
inside: createInterpolationInside(sInterpolation, sInterpolationRound)
|
|
|
1213 |
}
|
|
|
1214 |
],
|
|
|
1215 |
'char': {
|
|
|
1216 |
pattern: RegExp(character),
|
|
|
1217 |
greedy: true
|
|
|
1218 |
}
|
|
|
1219 |
});
|
|
|
1220 |
Prism.languages.dotnet = Prism.languages.cs = Prism.languages.csharp;
|
|
|
1221 |
}(Prism));
|
|
|
1222 |
(function (Prism) {
|
|
|
1223 |
var string = /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;
|
|
|
1224 |
Prism.languages.css = {
|
|
|
1225 |
'comment': /\/\*[\s\S]*?\*\//,
|
|
|
1226 |
'atrule': {
|
|
|
1227 |
pattern: RegExp('@[\\w-](?:' + /[^;{\s"']|\s+(?!\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\s*\{))/.source),
|
|
|
1228 |
inside: {
|
|
|
1229 |
'rule': /^@[\w-]+/,
|
|
|
1230 |
'selector-function-argument': {
|
|
|
1231 |
pattern: /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,
|
|
|
1232 |
lookbehind: true,
|
|
|
1233 |
alias: 'selector'
|
|
|
1234 |
},
|
|
|
1235 |
'keyword': {
|
|
|
1236 |
pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/,
|
|
|
1237 |
lookbehind: true
|
|
|
1238 |
}
|
|
|
1239 |
}
|
|
|
1240 |
},
|
|
|
1241 |
'url': {
|
|
|
1242 |
pattern: RegExp('\\burl\\((?:' + string.source + '|' + /(?:[^\\\r\n()"']|\\[\s\S])*/.source + ')\\)', 'i'),
|
|
|
1243 |
greedy: true,
|
|
|
1244 |
inside: {
|
|
|
1245 |
'function': /^url/i,
|
|
|
1246 |
'punctuation': /^\(|\)$/,
|
|
|
1247 |
'string': {
|
|
|
1248 |
pattern: RegExp('^' + string.source + '$'),
|
|
|
1249 |
alias: 'url'
|
|
|
1250 |
}
|
|
|
1251 |
}
|
|
|
1252 |
},
|
|
|
1253 |
'selector': {
|
|
|
1254 |
pattern: RegExp('(^|[{}\\s])[^{}\\s](?:[^{};"\'\\s]|\\s+(?![\\s{])|' + string.source + ')*(?=\\s*\\{)'),
|
|
|
1255 |
lookbehind: true
|
|
|
1256 |
},
|
|
|
1257 |
'string': {
|
|
|
1258 |
pattern: string,
|
|
|
1259 |
greedy: true
|
|
|
1260 |
},
|
|
|
1261 |
'property': {
|
|
|
1262 |
pattern: /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,
|
|
|
1263 |
lookbehind: true
|
|
|
1264 |
},
|
|
|
1265 |
'important': /!important\b/i,
|
|
|
1266 |
'function': {
|
|
|
1267 |
pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,
|
|
|
1268 |
lookbehind: true
|
|
|
1269 |
},
|
|
|
1270 |
'punctuation': /[(){};:,]/
|
|
|
1271 |
};
|
|
|
1272 |
Prism.languages.css['atrule'].inside.rest = Prism.languages.css;
|
|
|
1273 |
var markup = Prism.languages.markup;
|
|
|
1274 |
if (markup) {
|
|
|
1275 |
markup.tag.addInlined('style', 'css');
|
|
|
1276 |
markup.tag.addAttribute('style', 'css');
|
|
|
1277 |
}
|
|
|
1278 |
}(Prism));
|
|
|
1279 |
(function (Prism) {
|
|
|
1280 |
var keywords = /\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/;
|
|
|
1281 |
var classNamePrefix = /(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source;
|
|
|
1282 |
var className = {
|
|
|
1283 |
pattern: RegExp(/(^|[^\w.])/.source + classNamePrefix + /[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),
|
|
|
1284 |
lookbehind: true,
|
|
|
1285 |
inside: {
|
|
|
1286 |
'namespace': {
|
|
|
1287 |
pattern: /^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,
|
|
|
1288 |
inside: { 'punctuation': /\./ }
|
|
|
1289 |
},
|
|
|
1290 |
'punctuation': /\./
|
|
|
1291 |
}
|
|
|
1292 |
};
|
|
|
1293 |
Prism.languages.java = Prism.languages.extend('clike', {
|
|
|
1294 |
'string': {
|
|
|
1295 |
pattern: /(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,
|
|
|
1296 |
lookbehind: true,
|
|
|
1297 |
greedy: true
|
|
|
1298 |
},
|
|
|
1299 |
'class-name': [
|
|
|
1300 |
className,
|
|
|
1301 |
{
|
|
|
1302 |
pattern: RegExp(/(^|[^\w.])/.source + classNamePrefix + /[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),
|
|
|
1303 |
lookbehind: true,
|
|
|
1304 |
inside: className.inside
|
|
|
1305 |
},
|
|
|
1306 |
{
|
|
|
1307 |
pattern: RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source + classNamePrefix + /[A-Z]\w*\b/.source),
|
|
|
1308 |
lookbehind: true,
|
|
|
1309 |
inside: className.inside
|
|
|
1310 |
}
|
|
|
1311 |
],
|
|
|
1312 |
'keyword': keywords,
|
|
|
1313 |
'function': [
|
|
|
1314 |
Prism.languages.clike.function,
|
|
|
1315 |
{
|
|
|
1316 |
pattern: /(::\s*)[a-z_]\w*/,
|
|
|
1317 |
lookbehind: true
|
|
|
1318 |
}
|
|
|
1319 |
],
|
|
|
1320 |
'number': /\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,
|
|
|
1321 |
'operator': {
|
|
|
1322 |
pattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,
|
|
|
1323 |
lookbehind: true
|
|
|
1324 |
},
|
|
|
1325 |
'constant': /\b[A-Z][A-Z_\d]+\b/
|
|
|
1326 |
});
|
|
|
1327 |
Prism.languages.insertBefore('java', 'string', {
|
|
|
1328 |
'triple-quoted-string': {
|
|
|
1329 |
pattern: /"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,
|
|
|
1330 |
greedy: true,
|
|
|
1331 |
alias: 'string'
|
|
|
1332 |
},
|
|
|
1333 |
'char': {
|
|
|
1334 |
pattern: /'(?:\\.|[^'\\\r\n]){1,6}'/,
|
|
|
1335 |
greedy: true
|
|
|
1336 |
}
|
|
|
1337 |
});
|
|
|
1338 |
Prism.languages.insertBefore('java', 'class-name', {
|
|
|
1339 |
'annotation': {
|
|
|
1340 |
pattern: /(^|[^.])@\w+(?:\s*\.\s*\w+)*/,
|
|
|
1341 |
lookbehind: true,
|
|
|
1342 |
alias: 'punctuation'
|
|
|
1343 |
},
|
|
|
1344 |
'generics': {
|
|
|
1345 |
pattern: /<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,
|
|
|
1346 |
inside: {
|
|
|
1347 |
'class-name': className,
|
|
|
1348 |
'keyword': keywords,
|
|
|
1349 |
'punctuation': /[<>(),.:]/,
|
|
|
1350 |
'operator': /[?&|]/
|
|
|
1351 |
}
|
|
|
1352 |
},
|
|
|
1353 |
'import': [
|
|
|
1354 |
{
|
|
|
1355 |
pattern: RegExp(/(\bimport\s+)/.source + classNamePrefix + /(?:[A-Z]\w*|\*)(?=\s*;)/.source),
|
|
|
1356 |
lookbehind: true,
|
|
|
1357 |
inside: {
|
|
|
1358 |
'namespace': className.inside.namespace,
|
|
|
1359 |
'punctuation': /\./,
|
|
|
1360 |
'operator': /\*/,
|
|
|
1361 |
'class-name': /\w+/
|
|
|
1362 |
}
|
|
|
1363 |
},
|
|
|
1364 |
{
|
|
|
1365 |
pattern: RegExp(/(\bimport\s+static\s+)/.source + classNamePrefix + /(?:\w+|\*)(?=\s*;)/.source),
|
|
|
1366 |
lookbehind: true,
|
|
|
1367 |
alias: 'static',
|
|
|
1368 |
inside: {
|
|
|
1369 |
'namespace': className.inside.namespace,
|
|
|
1370 |
'static': /\b\w+$/,
|
|
|
1371 |
'punctuation': /\./,
|
|
|
1372 |
'operator': /\*/,
|
|
|
1373 |
'class-name': /\w+/
|
|
|
1374 |
}
|
|
|
1375 |
}
|
|
|
1376 |
],
|
|
|
1377 |
'namespace': {
|
|
|
1378 |
pattern: RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g, function () {
|
|
|
1379 |
return keywords.source;
|
|
|
1380 |
})),
|
|
|
1381 |
lookbehind: true,
|
|
|
1382 |
inside: { 'punctuation': /\./ }
|
|
|
1383 |
}
|
|
|
1384 |
});
|
|
|
1385 |
}(Prism));
|
|
|
1386 |
Prism.languages.javascript = Prism.languages.extend('clike', {
|
|
|
1387 |
'class-name': [
|
|
|
1388 |
Prism.languages.clike['class-name'],
|
|
|
1389 |
{
|
|
|
1390 |
pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,
|
|
|
1391 |
lookbehind: true
|
|
|
1392 |
}
|
|
|
1393 |
],
|
|
|
1394 |
'keyword': [
|
|
|
1395 |
{
|
|
|
1396 |
pattern: /((?:^|\})\s*)catch\b/,
|
|
|
1397 |
lookbehind: true
|
|
|
1398 |
},
|
|
|
1399 |
{
|
|
|
1400 |
pattern: /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,
|
|
|
1401 |
lookbehind: true
|
|
|
1402 |
}
|
|
|
1403 |
],
|
|
|
1404 |
'function': /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
|
|
|
1405 |
'number': {
|
|
|
1406 |
pattern: RegExp(/(^|[^\w$])/.source + '(?:' + (/NaN|Infinity/.source + '|' + /0[bB][01]+(?:_[01]+)*n?/.source + '|' + /0[oO][0-7]+(?:_[0-7]+)*n?/.source + '|' + /0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source + '|' + /\d+(?:_\d+)*n/.source + '|' + /(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source) + ')' + /(?![\w$])/.source),
|
|
|
1407 |
lookbehind: true
|
|
|
1408 |
},
|
|
|
1409 |
'operator': /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/
|
|
|
1410 |
});
|
|
|
1411 |
Prism.languages.javascript['class-name'][0].pattern = /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/;
|
|
|
1412 |
Prism.languages.insertBefore('javascript', 'keyword', {
|
|
|
1413 |
'regex': {
|
|
|
1414 |
pattern: RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source + /\//.source + '(?:' + /(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source + '|' + /(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source + ')' + /(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),
|
|
|
1415 |
lookbehind: true,
|
|
|
1416 |
greedy: true,
|
|
|
1417 |
inside: {
|
|
|
1418 |
'regex-source': {
|
|
|
1419 |
pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
|
|
|
1420 |
lookbehind: true,
|
|
|
1421 |
alias: 'language-regex',
|
|
|
1422 |
inside: Prism.languages.regex
|
|
|
1423 |
},
|
|
|
1424 |
'regex-delimiter': /^\/|\/$/,
|
|
|
1425 |
'regex-flags': /^[a-z]+$/
|
|
|
1426 |
}
|
|
|
1427 |
},
|
|
|
1428 |
'function-variable': {
|
|
|
1429 |
pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,
|
|
|
1430 |
alias: 'function'
|
|
|
1431 |
},
|
|
|
1432 |
'parameter': [
|
|
|
1433 |
{
|
|
|
1434 |
pattern: /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,
|
|
|
1435 |
lookbehind: true,
|
|
|
1436 |
inside: Prism.languages.javascript
|
|
|
1437 |
},
|
|
|
1438 |
{
|
|
|
1439 |
pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,
|
|
|
1440 |
lookbehind: true,
|
|
|
1441 |
inside: Prism.languages.javascript
|
|
|
1442 |
},
|
|
|
1443 |
{
|
|
|
1444 |
pattern: /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,
|
|
|
1445 |
lookbehind: true,
|
|
|
1446 |
inside: Prism.languages.javascript
|
|
|
1447 |
},
|
|
|
1448 |
{
|
|
|
1449 |
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|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,
|
|
|
1450 |
lookbehind: true,
|
|
|
1451 |
inside: Prism.languages.javascript
|
|
|
1452 |
}
|
|
|
1453 |
],
|
|
|
1454 |
'constant': /\b[A-Z](?:[A-Z_]|\dx?)*\b/
|
|
|
1455 |
});
|
|
|
1456 |
Prism.languages.insertBefore('javascript', 'string', {
|
|
|
1457 |
'hashbang': {
|
|
|
1458 |
pattern: /^#!.*/,
|
|
|
1459 |
greedy: true,
|
|
|
1460 |
alias: 'comment'
|
|
|
1461 |
},
|
|
|
1462 |
'template-string': {
|
|
|
1463 |
pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,
|
|
|
1464 |
greedy: true,
|
|
|
1465 |
inside: {
|
|
|
1466 |
'template-punctuation': {
|
|
|
1467 |
pattern: /^`|`$/,
|
|
|
1468 |
alias: 'string'
|
|
|
1469 |
},
|
|
|
1470 |
'interpolation': {
|
|
|
1471 |
pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,
|
|
|
1472 |
lookbehind: true,
|
|
|
1473 |
inside: {
|
|
|
1474 |
'interpolation-punctuation': {
|
|
|
1475 |
pattern: /^\$\{|\}$/,
|
|
|
1476 |
alias: 'punctuation'
|
|
|
1477 |
},
|
|
|
1478 |
rest: Prism.languages.javascript
|
|
|
1479 |
}
|
|
|
1480 |
},
|
|
|
1481 |
'string': /[\s\S]+/
|
|
|
1482 |
}
|
|
|
1483 |
},
|
|
|
1484 |
'string-property': {
|
|
|
1485 |
pattern: /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,
|
|
|
1486 |
lookbehind: true,
|
|
|
1487 |
greedy: true,
|
|
|
1488 |
alias: 'property'
|
|
|
1489 |
}
|
|
|
1490 |
});
|
|
|
1491 |
Prism.languages.insertBefore('javascript', 'operator', {
|
|
|
1492 |
'literal-property': {
|
|
|
1493 |
pattern: /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,
|
|
|
1494 |
lookbehind: true,
|
|
|
1495 |
alias: 'property'
|
|
|
1496 |
}
|
|
|
1497 |
});
|
|
|
1498 |
if (Prism.languages.markup) {
|
|
|
1499 |
Prism.languages.markup.tag.addInlined('script', 'javascript');
|
|
|
1500 |
Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source, 'javascript');
|
|
|
1501 |
}
|
|
|
1502 |
Prism.languages.js = Prism.languages.javascript;
|
|
|
1503 |
Prism.languages.markup = {
|
|
|
1504 |
'comment': {
|
|
|
1505 |
pattern: /<!--(?:(?!<!--)[\s\S])*?-->/,
|
|
|
1506 |
greedy: true
|
|
|
1507 |
},
|
|
|
1508 |
'prolog': {
|
|
|
1509 |
pattern: /<\?[\s\S]+?\?>/,
|
|
|
1510 |
greedy: true
|
|
|
1511 |
},
|
|
|
1512 |
'doctype': {
|
|
|
1513 |
pattern: /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,
|
|
|
1514 |
greedy: true,
|
|
|
1515 |
inside: {
|
|
|
1516 |
'internal-subset': {
|
|
|
1517 |
pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/,
|
|
|
1518 |
lookbehind: true,
|
|
|
1519 |
greedy: true,
|
|
|
1520 |
inside: null
|
|
|
1521 |
},
|
|
|
1522 |
'string': {
|
|
|
1523 |
pattern: /"[^"]*"|'[^']*'/,
|
|
|
1524 |
greedy: true
|
|
|
1525 |
},
|
|
|
1526 |
'punctuation': /^<!|>$|[[\]]/,
|
|
|
1527 |
'doctype-tag': /^DOCTYPE/i,
|
|
|
1528 |
'name': /[^\s<>'"]+/
|
|
|
1529 |
}
|
|
|
1530 |
},
|
|
|
1531 |
'cdata': {
|
|
|
1532 |
pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
|
|
|
1533 |
greedy: true
|
|
|
1534 |
},
|
|
|
1535 |
'tag': {
|
|
|
1536 |
pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,
|
|
|
1537 |
greedy: true,
|
|
|
1538 |
inside: {
|
|
|
1539 |
'tag': {
|
|
|
1540 |
pattern: /^<\/?[^\s>\/]+/,
|
|
|
1541 |
inside: {
|
|
|
1542 |
'punctuation': /^<\/?/,
|
|
|
1543 |
'namespace': /^[^\s>\/:]+:/
|
|
|
1544 |
}
|
|
|
1545 |
},
|
|
|
1546 |
'special-attr': [],
|
|
|
1547 |
'attr-value': {
|
|
|
1548 |
pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,
|
|
|
1549 |
inside: {
|
|
|
1550 |
'punctuation': [
|
|
|
1551 |
{
|
|
|
1552 |
pattern: /^=/,
|
|
|
1553 |
alias: 'attr-equals'
|
|
|
1554 |
},
|
|
|
1555 |
{
|
|
|
1556 |
pattern: /^(\s*)["']|["']$/,
|
|
|
1557 |
lookbehind: true
|
|
|
1558 |
}
|
|
|
1559 |
]
|
|
|
1560 |
}
|
|
|
1561 |
},
|
|
|
1562 |
'punctuation': /\/?>/,
|
|
|
1563 |
'attr-name': {
|
|
|
1564 |
pattern: /[^\s>\/]+/,
|
|
|
1565 |
inside: { 'namespace': /^[^\s>\/:]+:/ }
|
|
|
1566 |
}
|
|
|
1567 |
}
|
|
|
1568 |
},
|
|
|
1569 |
'entity': [
|
|
|
1570 |
{
|
|
|
1571 |
pattern: /&[\da-z]{1,8};/i,
|
|
|
1572 |
alias: 'named-entity'
|
|
|
1573 |
},
|
|
|
1574 |
/&#x?[\da-f]{1,8};/i
|
|
|
1575 |
]
|
|
|
1576 |
};
|
|
|
1577 |
Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] = Prism.languages.markup['entity'];
|
|
|
1578 |
Prism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;
|
|
|
1579 |
Prism.hooks.add('wrap', function (env) {
|
|
|
1580 |
if (env.type === 'entity') {
|
|
|
1581 |
env.attributes['title'] = env.content.replace(/&/, '&');
|
|
|
1582 |
}
|
|
|
1583 |
});
|
|
|
1584 |
Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {
|
|
|
1585 |
value: function addInlined(tagName, lang) {
|
|
|
1586 |
var includedCdataInside = {};
|
|
|
1587 |
includedCdataInside['language-' + lang] = {
|
|
|
1588 |
pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,
|
|
|
1589 |
lookbehind: true,
|
|
|
1590 |
inside: Prism.languages[lang]
|
|
|
1591 |
};
|
|
|
1592 |
includedCdataInside['cdata'] = /^<!\[CDATA\[|\]\]>$/i;
|
|
|
1593 |
var inside = {
|
|
|
1594 |
'included-cdata': {
|
|
|
1595 |
pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
|
|
|
1596 |
inside: includedCdataInside
|
|
|
1597 |
}
|
|
|
1598 |
};
|
|
|
1599 |
inside['language-' + lang] = {
|
|
|
1600 |
pattern: /[\s\S]+/,
|
|
|
1601 |
inside: Prism.languages[lang]
|
|
|
1602 |
};
|
|
|
1603 |
var def = {};
|
|
|
1604 |
def[tagName] = {
|
|
|
1605 |
pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function () {
|
|
|
1606 |
return tagName;
|
|
|
1607 |
}), 'i'),
|
|
|
1608 |
lookbehind: true,
|
|
|
1609 |
greedy: true,
|
|
|
1610 |
inside: inside
|
|
|
1611 |
};
|
|
|
1612 |
Prism.languages.insertBefore('markup', 'cdata', def);
|
|
|
1613 |
}
|
|
|
1614 |
});
|
|
|
1615 |
Object.defineProperty(Prism.languages.markup.tag, 'addAttribute', {
|
|
|
1616 |
value: function (attrName, lang) {
|
|
|
1617 |
Prism.languages.markup.tag.inside['special-attr'].push({
|
|
|
1618 |
pattern: RegExp(/(^|["'\s])/.source + '(?:' + attrName + ')' + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source, 'i'),
|
|
|
1619 |
lookbehind: true,
|
|
|
1620 |
inside: {
|
|
|
1621 |
'attr-name': /^[^\s=]+/,
|
|
|
1622 |
'attr-value': {
|
|
|
1623 |
pattern: /=[\s\S]+/,
|
|
|
1624 |
inside: {
|
|
|
1625 |
'value': {
|
|
|
1626 |
pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,
|
|
|
1627 |
lookbehind: true,
|
|
|
1628 |
alias: [
|
|
|
1629 |
lang,
|
|
|
1630 |
'language-' + lang
|
|
|
1631 |
],
|
|
|
1632 |
inside: Prism.languages[lang]
|
|
|
1633 |
},
|
|
|
1634 |
'punctuation': [
|
|
|
1635 |
{
|
|
|
1636 |
pattern: /^=/,
|
|
|
1637 |
alias: 'attr-equals'
|
|
|
1638 |
},
|
|
|
1639 |
/"|'/
|
|
|
1640 |
]
|
|
|
1641 |
}
|
|
|
1642 |
}
|
|
|
1643 |
}
|
|
|
1644 |
});
|
|
|
1645 |
}
|
|
|
1646 |
});
|
|
|
1647 |
Prism.languages.html = Prism.languages.markup;
|
|
|
1648 |
Prism.languages.mathml = Prism.languages.markup;
|
|
|
1649 |
Prism.languages.svg = Prism.languages.markup;
|
|
|
1650 |
Prism.languages.xml = Prism.languages.extend('markup', {});
|
|
|
1651 |
Prism.languages.ssml = Prism.languages.xml;
|
|
|
1652 |
Prism.languages.atom = Prism.languages.xml;
|
|
|
1653 |
Prism.languages.rss = Prism.languages.xml;
|
|
|
1654 |
(function (Prism) {
|
|
|
1655 |
var comment = /\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/;
|
|
|
1656 |
var constant = [
|
|
|
1657 |
{
|
|
|
1658 |
pattern: /\b(?:false|true)\b/i,
|
|
|
1659 |
alias: 'boolean'
|
|
|
1660 |
},
|
|
|
1661 |
{
|
|
|
1662 |
pattern: /(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,
|
|
|
1663 |
greedy: true,
|
|
|
1664 |
lookbehind: true
|
|
|
1665 |
},
|
|
|
1666 |
{
|
|
|
1667 |
pattern: /(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,
|
|
|
1668 |
greedy: true,
|
|
|
1669 |
lookbehind: true
|
|
|
1670 |
},
|
|
|
1671 |
/\b(?:null)\b/i,
|
|
|
1672 |
/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/
|
|
|
1673 |
];
|
|
|
1674 |
var number = /\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i;
|
|
|
1675 |
var operator = /<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/;
|
|
|
1676 |
var punctuation = /[{}\[\](),:;]/;
|
|
|
1677 |
Prism.languages.php = {
|
|
|
1678 |
'delimiter': {
|
|
|
1679 |
pattern: /\?>$|^<\?(?:php(?=\s)|=)?/i,
|
|
|
1680 |
alias: 'important'
|
|
|
1681 |
},
|
|
|
1682 |
'comment': comment,
|
|
|
1683 |
'variable': /\$+(?:\w+\b|(?=\{))/,
|
|
|
1684 |
'package': {
|
|
|
1685 |
pattern: /(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,
|
|
|
1686 |
lookbehind: true,
|
|
|
1687 |
inside: { 'punctuation': /\\/ }
|
|
|
1688 |
},
|
|
|
1689 |
'class-name-definition': {
|
|
|
1690 |
pattern: /(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,
|
|
|
1691 |
lookbehind: true,
|
|
|
1692 |
alias: 'class-name'
|
|
|
1693 |
},
|
|
|
1694 |
'function-definition': {
|
|
|
1695 |
pattern: /(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,
|
|
|
1696 |
lookbehind: true,
|
|
|
1697 |
alias: 'function'
|
|
|
1698 |
},
|
|
|
1699 |
'keyword': [
|
|
|
1700 |
{
|
|
|
1701 |
pattern: /(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,
|
|
|
1702 |
alias: 'type-casting',
|
|
|
1703 |
greedy: true,
|
|
|
1704 |
lookbehind: true
|
|
|
1705 |
},
|
|
|
1706 |
{
|
|
|
1707 |
pattern: /([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,
|
|
|
1708 |
alias: 'type-hint',
|
|
|
1709 |
greedy: true,
|
|
|
1710 |
lookbehind: true
|
|
|
1711 |
},
|
|
|
1712 |
{
|
|
|
1713 |
pattern: /(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,
|
|
|
1714 |
alias: 'return-type',
|
|
|
1715 |
greedy: true,
|
|
|
1716 |
lookbehind: true
|
|
|
1717 |
},
|
|
|
1718 |
{
|
|
|
1719 |
pattern: /\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,
|
|
|
1720 |
alias: 'type-declaration',
|
|
|
1721 |
greedy: true
|
|
|
1722 |
},
|
|
|
1723 |
{
|
|
|
1724 |
pattern: /(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,
|
|
|
1725 |
alias: 'type-declaration',
|
|
|
1726 |
greedy: true,
|
|
|
1727 |
lookbehind: true
|
|
|
1728 |
},
|
|
|
1729 |
{
|
|
|
1730 |
pattern: /\b(?:parent|self|static)(?=\s*::)/i,
|
|
|
1731 |
alias: 'static-context',
|
|
|
1732 |
greedy: true
|
|
|
1733 |
},
|
|
|
1734 |
{
|
|
|
1735 |
pattern: /(\byield\s+)from\b/i,
|
|
|
1736 |
lookbehind: true
|
|
|
1737 |
},
|
|
|
1738 |
/\bclass\b/i,
|
|
|
1739 |
{
|
|
|
1740 |
pattern: /((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,
|
|
|
1741 |
lookbehind: true
|
|
|
1742 |
}
|
|
|
1743 |
],
|
|
|
1744 |
'argument-name': {
|
|
|
1745 |
pattern: /([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,
|
|
|
1746 |
lookbehind: true
|
|
|
1747 |
},
|
|
|
1748 |
'class-name': [
|
|
|
1749 |
{
|
|
|
1750 |
pattern: /(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,
|
|
|
1751 |
greedy: true,
|
|
|
1752 |
lookbehind: true
|
|
|
1753 |
},
|
|
|
1754 |
{
|
|
|
1755 |
pattern: /(\|\s*)\b[a-z_]\w*(?!\\)\b/i,
|
|
|
1756 |
greedy: true,
|
|
|
1757 |
lookbehind: true
|
|
|
1758 |
},
|
|
|
1759 |
{
|
|
|
1760 |
pattern: /\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,
|
|
|
1761 |
greedy: true
|
|
|
1762 |
},
|
|
|
1763 |
{
|
|
|
1764 |
pattern: /(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,
|
|
|
1765 |
alias: 'class-name-fully-qualified',
|
|
|
1766 |
greedy: true,
|
|
|
1767 |
lookbehind: true,
|
|
|
1768 |
inside: { 'punctuation': /\\/ }
|
|
|
1769 |
},
|
|
|
1770 |
{
|
|
|
1771 |
pattern: /(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,
|
|
|
1772 |
alias: 'class-name-fully-qualified',
|
|
|
1773 |
greedy: true,
|
|
|
1774 |
inside: { 'punctuation': /\\/ }
|
|
|
1775 |
},
|
|
|
1776 |
{
|
|
|
1777 |
pattern: /(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,
|
|
|
1778 |
alias: 'class-name-fully-qualified',
|
|
|
1779 |
greedy: true,
|
|
|
1780 |
lookbehind: true,
|
|
|
1781 |
inside: { 'punctuation': /\\/ }
|
|
|
1782 |
},
|
|
|
1783 |
{
|
|
|
1784 |
pattern: /\b[a-z_]\w*(?=\s*\$)/i,
|
|
|
1785 |
alias: 'type-declaration',
|
|
|
1786 |
greedy: true
|
|
|
1787 |
},
|
|
|
1788 |
{
|
|
|
1789 |
pattern: /(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,
|
|
|
1790 |
alias: [
|
|
|
1791 |
'class-name-fully-qualified',
|
|
|
1792 |
'type-declaration'
|
|
|
1793 |
],
|
|
|
1794 |
greedy: true,
|
|
|
1795 |
inside: { 'punctuation': /\\/ }
|
|
|
1796 |
},
|
|
|
1797 |
{
|
|
|
1798 |
pattern: /\b[a-z_]\w*(?=\s*::)/i,
|
|
|
1799 |
alias: 'static-context',
|
|
|
1800 |
greedy: true
|
|
|
1801 |
},
|
|
|
1802 |
{
|
|
|
1803 |
pattern: /(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,
|
|
|
1804 |
alias: [
|
|
|
1805 |
'class-name-fully-qualified',
|
|
|
1806 |
'static-context'
|
|
|
1807 |
],
|
|
|
1808 |
greedy: true,
|
|
|
1809 |
inside: { 'punctuation': /\\/ }
|
|
|
1810 |
},
|
|
|
1811 |
{
|
|
|
1812 |
pattern: /([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,
|
|
|
1813 |
alias: 'type-hint',
|
|
|
1814 |
greedy: true,
|
|
|
1815 |
lookbehind: true
|
|
|
1816 |
},
|
|
|
1817 |
{
|
|
|
1818 |
pattern: /([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,
|
|
|
1819 |
alias: [
|
|
|
1820 |
'class-name-fully-qualified',
|
|
|
1821 |
'type-hint'
|
|
|
1822 |
],
|
|
|
1823 |
greedy: true,
|
|
|
1824 |
lookbehind: true,
|
|
|
1825 |
inside: { 'punctuation': /\\/ }
|
|
|
1826 |
},
|
|
|
1827 |
{
|
|
|
1828 |
pattern: /(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,
|
|
|
1829 |
alias: 'return-type',
|
|
|
1830 |
greedy: true,
|
|
|
1831 |
lookbehind: true
|
|
|
1832 |
},
|
|
|
1833 |
{
|
|
|
1834 |
pattern: /(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,
|
|
|
1835 |
alias: [
|
|
|
1836 |
'class-name-fully-qualified',
|
|
|
1837 |
'return-type'
|
|
|
1838 |
],
|
|
|
1839 |
greedy: true,
|
|
|
1840 |
lookbehind: true,
|
|
|
1841 |
inside: { 'punctuation': /\\/ }
|
|
|
1842 |
}
|
|
|
1843 |
],
|
|
|
1844 |
'constant': constant,
|
|
|
1845 |
'function': {
|
|
|
1846 |
pattern: /(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,
|
|
|
1847 |
lookbehind: true,
|
|
|
1848 |
inside: { 'punctuation': /\\/ }
|
|
|
1849 |
},
|
|
|
1850 |
'property': {
|
|
|
1851 |
pattern: /(->\s*)\w+/,
|
|
|
1852 |
lookbehind: true
|
|
|
1853 |
},
|
|
|
1854 |
'number': number,
|
|
|
1855 |
'operator': operator,
|
|
|
1856 |
'punctuation': punctuation
|
|
|
1857 |
};
|
|
|
1858 |
var string_interpolation = {
|
|
|
1859 |
pattern: /\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,
|
|
|
1860 |
lookbehind: true,
|
|
|
1861 |
inside: Prism.languages.php
|
|
|
1862 |
};
|
|
|
1863 |
var string = [
|
|
|
1864 |
{
|
|
|
1865 |
pattern: /<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,
|
|
|
1866 |
alias: 'nowdoc-string',
|
|
|
1867 |
greedy: true,
|
|
|
1868 |
inside: {
|
|
|
1869 |
'delimiter': {
|
|
|
1870 |
pattern: /^<<<'[^']+'|[a-z_]\w*;$/i,
|
|
|
1871 |
alias: 'symbol',
|
|
|
1872 |
inside: { 'punctuation': /^<<<'?|[';]$/ }
|
|
|
1873 |
}
|
|
|
1874 |
}
|
|
|
1875 |
},
|
|
|
1876 |
{
|
|
|
1877 |
pattern: /<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,
|
|
|
1878 |
alias: 'heredoc-string',
|
|
|
1879 |
greedy: true,
|
|
|
1880 |
inside: {
|
|
|
1881 |
'delimiter': {
|
|
|
1882 |
pattern: /^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,
|
|
|
1883 |
alias: 'symbol',
|
|
|
1884 |
inside: { 'punctuation': /^<<<"?|[";]$/ }
|
|
|
1885 |
},
|
|
|
1886 |
'interpolation': string_interpolation
|
|
|
1887 |
}
|
|
|
1888 |
},
|
|
|
1889 |
{
|
|
|
1890 |
pattern: /`(?:\\[\s\S]|[^\\`])*`/,
|
|
|
1891 |
alias: 'backtick-quoted-string',
|
|
|
1892 |
greedy: true
|
|
|
1893 |
},
|
|
|
1894 |
{
|
|
|
1895 |
pattern: /'(?:\\[\s\S]|[^\\'])*'/,
|
|
|
1896 |
alias: 'single-quoted-string',
|
|
|
1897 |
greedy: true
|
|
|
1898 |
},
|
|
|
1899 |
{
|
|
|
1900 |
pattern: /"(?:\\[\s\S]|[^\\"])*"/,
|
|
|
1901 |
alias: 'double-quoted-string',
|
|
|
1902 |
greedy: true,
|
|
|
1903 |
inside: { 'interpolation': string_interpolation }
|
|
|
1904 |
}
|
|
|
1905 |
];
|
|
|
1906 |
Prism.languages.insertBefore('php', 'variable', {
|
|
|
1907 |
'string': string,
|
|
|
1908 |
'attribute': {
|
|
|
1909 |
pattern: /#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,
|
|
|
1910 |
greedy: true,
|
|
|
1911 |
inside: {
|
|
|
1912 |
'attribute-content': {
|
|
|
1913 |
pattern: /^(#\[)[\s\S]+(?=\]$)/,
|
|
|
1914 |
lookbehind: true,
|
|
|
1915 |
inside: {
|
|
|
1916 |
'comment': comment,
|
|
|
1917 |
'string': string,
|
|
|
1918 |
'attribute-class-name': [
|
|
|
1919 |
{
|
|
|
1920 |
pattern: /([^:]|^)\b[a-z_]\w*(?!\\)\b/i,
|
|
|
1921 |
alias: 'class-name',
|
|
|
1922 |
greedy: true,
|
|
|
1923 |
lookbehind: true
|
|
|
1924 |
},
|
|
|
1925 |
{
|
|
|
1926 |
pattern: /([^:]|^)(?:\\?\b[a-z_]\w*)+/i,
|
|
|
1927 |
alias: [
|
|
|
1928 |
'class-name',
|
|
|
1929 |
'class-name-fully-qualified'
|
|
|
1930 |
],
|
|
|
1931 |
greedy: true,
|
|
|
1932 |
lookbehind: true,
|
|
|
1933 |
inside: { 'punctuation': /\\/ }
|
|
|
1934 |
}
|
|
|
1935 |
],
|
|
|
1936 |
'constant': constant,
|
|
|
1937 |
'number': number,
|
|
|
1938 |
'operator': operator,
|
|
|
1939 |
'punctuation': punctuation
|
|
|
1940 |
}
|
|
|
1941 |
},
|
|
|
1942 |
'delimiter': {
|
|
|
1943 |
pattern: /^#\[|\]$/,
|
|
|
1944 |
alias: 'punctuation'
|
|
|
1945 |
}
|
|
|
1946 |
}
|
|
|
1947 |
}
|
|
|
1948 |
});
|
|
|
1949 |
Prism.hooks.add('before-tokenize', function (env) {
|
|
|
1950 |
if (!/<\?/.test(env.code)) {
|
|
|
1951 |
return;
|
|
|
1952 |
}
|
|
|
1953 |
var phpPattern = /<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g;
|
|
|
1954 |
Prism.languages['markup-templating'].buildPlaceholders(env, 'php', phpPattern);
|
|
|
1955 |
});
|
|
|
1956 |
Prism.hooks.add('after-tokenize', function (env) {
|
|
|
1957 |
Prism.languages['markup-templating'].tokenizePlaceholders(env, 'php');
|
|
|
1958 |
});
|
|
|
1959 |
}(Prism));
|
|
|
1960 |
Prism.languages.python = {
|
|
|
1961 |
'comment': {
|
|
|
1962 |
pattern: /(^|[^\\])#.*/,
|
|
|
1963 |
lookbehind: true,
|
|
|
1964 |
greedy: true
|
|
|
1965 |
},
|
|
|
1966 |
'string-interpolation': {
|
|
|
1967 |
pattern: /(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,
|
|
|
1968 |
greedy: true,
|
|
|
1969 |
inside: {
|
|
|
1970 |
'interpolation': {
|
|
|
1971 |
pattern: /((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,
|
|
|
1972 |
lookbehind: true,
|
|
|
1973 |
inside: {
|
|
|
1974 |
'format-spec': {
|
|
|
1975 |
pattern: /(:)[^:(){}]+(?=\}$)/,
|
|
|
1976 |
lookbehind: true
|
|
|
1977 |
},
|
|
|
1978 |
'conversion-option': {
|
|
|
1979 |
pattern: //,
|
|
|
1980 |
alias: 'punctuation'
|
|
|
1981 |
},
|
|
|
1982 |
rest: null
|
|
|
1983 |
}
|
|
|
1984 |
},
|
|
|
1985 |
'string': /[\s\S]+/
|
|
|
1986 |
}
|
|
|
1987 |
},
|
|
|
1988 |
'triple-quoted-string': {
|
|
|
1989 |
pattern: /(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,
|
|
|
1990 |
greedy: true,
|
|
|
1991 |
alias: 'string'
|
|
|
1992 |
},
|
|
|
1993 |
'string': {
|
|
|
1994 |
pattern: /(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,
|
|
|
1995 |
greedy: true
|
|
|
1996 |
},
|
|
|
1997 |
'function': {
|
|
|
1998 |
pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,
|
|
|
1999 |
lookbehind: true
|
|
|
2000 |
},
|
|
|
2001 |
'class-name': {
|
|
|
2002 |
pattern: /(\bclass\s+)\w+/i,
|
|
|
2003 |
lookbehind: true
|
|
|
2004 |
},
|
|
|
2005 |
'decorator': {
|
|
|
2006 |
pattern: /(^[\t ]*)@\w+(?:\.\w+)*/m,
|
|
|
2007 |
lookbehind: true,
|
|
|
2008 |
alias: [
|
|
|
2009 |
'annotation',
|
|
|
2010 |
'punctuation'
|
|
|
2011 |
],
|
|
|
2012 |
inside: { 'punctuation': /\./ }
|
|
|
2013 |
},
|
|
|
2014 |
'keyword': /\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,
|
|
|
2015 |
'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/,
|
|
|
2016 |
'boolean': /\b(?:False|None|True)\b/,
|
|
|
2017 |
'number': /\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,
|
|
|
2018 |
'operator': /[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,
|
|
|
2019 |
'punctuation': /[{}[\];(),.:]/
|
|
|
2020 |
};
|
|
|
2021 |
Prism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;
|
|
|
2022 |
Prism.languages.py = Prism.languages.python;
|
|
|
2023 |
(function (Prism) {
|
|
|
2024 |
Prism.languages.ruby = Prism.languages.extend('clike', {
|
|
|
2025 |
'comment': {
|
|
|
2026 |
pattern: /#.*|^=begin\s[\s\S]*?^=end/m,
|
|
|
2027 |
greedy: true
|
|
|
2028 |
},
|
|
|
2029 |
'class-name': {
|
|
|
2030 |
pattern: /(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,
|
|
|
2031 |
lookbehind: true,
|
|
|
2032 |
inside: { 'punctuation': /[.\\]/ }
|
|
|
2033 |
},
|
|
|
2034 |
'keyword': /\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,
|
|
|
2035 |
'operator': /\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,
|
|
|
2036 |
'punctuation': /[(){}[\].,;]/
|
|
|
2037 |
});
|
|
|
2038 |
Prism.languages.insertBefore('ruby', 'operator', {
|
|
|
2039 |
'double-colon': {
|
|
|
2040 |
pattern: /::/,
|
|
|
2041 |
alias: 'punctuation'
|
|
|
2042 |
}
|
|
|
2043 |
});
|
|
|
2044 |
var interpolation = {
|
|
|
2045 |
pattern: /((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,
|
|
|
2046 |
lookbehind: true,
|
|
|
2047 |
inside: {
|
|
|
2048 |
'content': {
|
|
|
2049 |
pattern: /^(#\{)[\s\S]+(?=\}$)/,
|
|
|
2050 |
lookbehind: true,
|
|
|
2051 |
inside: Prism.languages.ruby
|
|
|
2052 |
},
|
|
|
2053 |
'delimiter': {
|
|
|
2054 |
pattern: /^#\{|\}$/,
|
|
|
2055 |
alias: 'punctuation'
|
|
|
2056 |
}
|
|
|
2057 |
}
|
|
|
2058 |
};
|
|
|
2059 |
delete Prism.languages.ruby.function;
|
|
|
2060 |
var percentExpression = '(?:' + [
|
|
|
2061 |
/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,
|
|
|
2062 |
/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,
|
|
|
2063 |
/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,
|
|
|
2064 |
/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,
|
|
|
2065 |
/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source
|
|
|
2066 |
].join('|') + ')';
|
|
|
2067 |
var symbolName = /(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;
|
|
|
2068 |
Prism.languages.insertBefore('ruby', 'keyword', {
|
|
|
2069 |
'regex-literal': [
|
|
|
2070 |
{
|
|
|
2071 |
pattern: RegExp(/%r/.source + percentExpression + /[egimnosux]{0,6}/.source),
|
|
|
2072 |
greedy: true,
|
|
|
2073 |
inside: {
|
|
|
2074 |
'interpolation': interpolation,
|
|
|
2075 |
'regex': /[\s\S]+/
|
|
|
2076 |
}
|
|
|
2077 |
},
|
|
|
2078 |
{
|
|
|
2079 |
pattern: /(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,
|
|
|
2080 |
lookbehind: true,
|
|
|
2081 |
greedy: true,
|
|
|
2082 |
inside: {
|
|
|
2083 |
'interpolation': interpolation,
|
|
|
2084 |
'regex': /[\s\S]+/
|
|
|
2085 |
}
|
|
|
2086 |
}
|
|
|
2087 |
],
|
|
|
2088 |
'variable': /[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,
|
|
|
2089 |
'symbol': [
|
|
|
2090 |
{
|
|
|
2091 |
pattern: RegExp(/(^|[^:]):/.source + symbolName),
|
|
|
2092 |
lookbehind: true,
|
|
|
2093 |
greedy: true
|
|
|
2094 |
},
|
|
|
2095 |
{
|
|
|
2096 |
pattern: RegExp(/([\r\n{(,][ \t]*)/.source + symbolName + /(?=:(?!:))/.source),
|
|
|
2097 |
lookbehind: true,
|
|
|
2098 |
greedy: true
|
|
|
2099 |
}
|
|
|
2100 |
],
|
|
|
2101 |
'method-definition': {
|
|
|
2102 |
pattern: /(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,
|
|
|
2103 |
lookbehind: true,
|
|
|
2104 |
inside: {
|
|
|
2105 |
'function': /\b\w+$/,
|
|
|
2106 |
'keyword': /^self\b/,
|
|
|
2107 |
'class-name': /^\w+/,
|
|
|
2108 |
'punctuation': /\./
|
|
|
2109 |
}
|
|
|
2110 |
}
|
|
|
2111 |
});
|
|
|
2112 |
Prism.languages.insertBefore('ruby', 'string', {
|
|
|
2113 |
'string-literal': [
|
|
|
2114 |
{
|
|
|
2115 |
pattern: RegExp(/%[qQiIwWs]?/.source + percentExpression),
|
|
|
2116 |
greedy: true,
|
|
|
2117 |
inside: {
|
|
|
2118 |
'interpolation': interpolation,
|
|
|
2119 |
'string': /[\s\S]+/
|
|
|
2120 |
}
|
|
|
2121 |
},
|
|
|
2122 |
{
|
|
|
2123 |
pattern: /("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,
|
|
|
2124 |
greedy: true,
|
|
|
2125 |
inside: {
|
|
|
2126 |
'interpolation': interpolation,
|
|
|
2127 |
'string': /[\s\S]+/
|
|
|
2128 |
}
|
|
|
2129 |
},
|
|
|
2130 |
{
|
|
|
2131 |
pattern: /<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,
|
|
|
2132 |
alias: 'heredoc-string',
|
|
|
2133 |
greedy: true,
|
|
|
2134 |
inside: {
|
|
|
2135 |
'delimiter': {
|
|
|
2136 |
pattern: /^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,
|
|
|
2137 |
inside: {
|
|
|
2138 |
'symbol': /\b\w+/,
|
|
|
2139 |
'punctuation': /^<<[-~]?/
|
|
|
2140 |
}
|
|
|
2141 |
},
|
|
|
2142 |
'interpolation': interpolation,
|
|
|
2143 |
'string': /[\s\S]+/
|
|
|
2144 |
}
|
|
|
2145 |
},
|
|
|
2146 |
{
|
|
|
2147 |
pattern: /<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,
|
|
|
2148 |
alias: 'heredoc-string',
|
|
|
2149 |
greedy: true,
|
|
|
2150 |
inside: {
|
|
|
2151 |
'delimiter': {
|
|
|
2152 |
pattern: /^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,
|
|
|
2153 |
inside: {
|
|
|
2154 |
'symbol': /\b\w+/,
|
|
|
2155 |
'punctuation': /^<<[-~]?'|'$/
|
|
|
2156 |
}
|
|
|
2157 |
},
|
|
|
2158 |
'string': /[\s\S]+/
|
|
|
2159 |
}
|
|
|
2160 |
}
|
|
|
2161 |
],
|
|
|
2162 |
'command-literal': [
|
|
|
2163 |
{
|
|
|
2164 |
pattern: RegExp(/%x/.source + percentExpression),
|
|
|
2165 |
greedy: true,
|
|
|
2166 |
inside: {
|
|
|
2167 |
'interpolation': interpolation,
|
|
|
2168 |
'command': {
|
|
|
2169 |
pattern: /[\s\S]+/,
|
|
|
2170 |
alias: 'string'
|
|
|
2171 |
}
|
|
|
2172 |
}
|
|
|
2173 |
},
|
|
|
2174 |
{
|
|
|
2175 |
pattern: /`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,
|
|
|
2176 |
greedy: true,
|
|
|
2177 |
inside: {
|
|
|
2178 |
'interpolation': interpolation,
|
|
|
2179 |
'command': {
|
|
|
2180 |
pattern: /[\s\S]+/,
|
|
|
2181 |
alias: 'string'
|
|
|
2182 |
}
|
|
|
2183 |
}
|
|
|
2184 |
}
|
|
|
2185 |
]
|
|
|
2186 |
});
|
|
|
2187 |
delete Prism.languages.ruby.string;
|
|
|
2188 |
Prism.languages.insertBefore('ruby', 'number', {
|
|
|
2189 |
'builtin': /\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,
|
|
|
2190 |
'constant': /\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/
|
|
|
2191 |
});
|
|
|
2192 |
Prism.languages.rb = Prism.languages.ruby;
|
|
|
2193 |
}(Prism));
|
|
|
2194 |
window.Prism = oldprism;
|
|
|
2195 |
return Prism;
|
|
|
2196 |
}(undefined, undefined);
|
|
|
2197 |
|
|
|
2198 |
const option = name => editor => editor.options.get(name);
|
|
|
2199 |
const register$2 = editor => {
|
|
|
2200 |
const registerOption = editor.options.register;
|
|
|
2201 |
registerOption('codesample_languages', { processor: 'object[]' });
|
|
|
2202 |
registerOption('codesample_global_prismjs', {
|
|
|
2203 |
processor: 'boolean',
|
|
|
2204 |
default: false
|
|
|
2205 |
});
|
|
|
2206 |
};
|
|
|
2207 |
const getLanguages$1 = option('codesample_languages');
|
|
|
2208 |
const useGlobalPrismJS = option('codesample_global_prismjs');
|
|
|
2209 |
|
|
|
2210 |
const get = editor => Global.Prism && useGlobalPrismJS(editor) ? Global.Prism : prismjs;
|
|
|
2211 |
|
|
|
2212 |
const isCodeSample = elm => {
|
|
|
2213 |
return isNonNullable(elm) && elm.nodeName === 'PRE' && elm.className.indexOf('language-') !== -1;
|
|
|
2214 |
};
|
|
|
2215 |
|
|
|
2216 |
const getSelectedCodeSample = editor => {
|
|
|
2217 |
const node = editor.selection ? editor.selection.getNode() : null;
|
|
|
2218 |
return isCodeSample(node) ? Optional.some(node) : Optional.none();
|
|
|
2219 |
};
|
|
|
2220 |
const insertCodeSample = (editor, language, code) => {
|
|
|
2221 |
const dom = editor.dom;
|
|
|
2222 |
editor.undoManager.transact(() => {
|
|
|
2223 |
const node = getSelectedCodeSample(editor);
|
|
|
2224 |
code = global$1.DOM.encode(code);
|
|
|
2225 |
return node.fold(() => {
|
|
|
2226 |
editor.insertContent('<pre id="__new" class="language-' + language + '">' + code + '</pre>');
|
|
|
2227 |
const newPre = dom.select('#__new')[0];
|
|
|
2228 |
dom.setAttrib(newPre, 'id', null);
|
|
|
2229 |
editor.selection.select(newPre);
|
|
|
2230 |
}, n => {
|
|
|
2231 |
dom.setAttrib(n, 'class', 'language-' + language);
|
|
|
2232 |
n.innerHTML = code;
|
|
|
2233 |
get(editor).highlightElement(n);
|
|
|
2234 |
editor.selection.select(n);
|
|
|
2235 |
});
|
|
|
2236 |
});
|
|
|
2237 |
};
|
|
|
2238 |
const getCurrentCode = editor => {
|
|
|
2239 |
const node = getSelectedCodeSample(editor);
|
|
|
2240 |
return node.bind(n => Optional.from(n.textContent)).getOr('');
|
|
|
2241 |
};
|
|
|
2242 |
|
|
|
2243 |
const getLanguages = editor => {
|
|
|
2244 |
const defaultLanguages = [
|
|
|
2245 |
{
|
|
|
2246 |
text: 'HTML/XML',
|
|
|
2247 |
value: 'markup'
|
|
|
2248 |
},
|
|
|
2249 |
{
|
|
|
2250 |
text: 'JavaScript',
|
|
|
2251 |
value: 'javascript'
|
|
|
2252 |
},
|
|
|
2253 |
{
|
|
|
2254 |
text: 'CSS',
|
|
|
2255 |
value: 'css'
|
|
|
2256 |
},
|
|
|
2257 |
{
|
|
|
2258 |
text: 'PHP',
|
|
|
2259 |
value: 'php'
|
|
|
2260 |
},
|
|
|
2261 |
{
|
|
|
2262 |
text: 'Ruby',
|
|
|
2263 |
value: 'ruby'
|
|
|
2264 |
},
|
|
|
2265 |
{
|
|
|
2266 |
text: 'Python',
|
|
|
2267 |
value: 'python'
|
|
|
2268 |
},
|
|
|
2269 |
{
|
|
|
2270 |
text: 'Java',
|
|
|
2271 |
value: 'java'
|
|
|
2272 |
},
|
|
|
2273 |
{
|
|
|
2274 |
text: 'C',
|
|
|
2275 |
value: 'c'
|
|
|
2276 |
},
|
|
|
2277 |
{
|
|
|
2278 |
text: 'C#',
|
|
|
2279 |
value: 'csharp'
|
|
|
2280 |
},
|
|
|
2281 |
{
|
|
|
2282 |
text: 'C++',
|
|
|
2283 |
value: 'cpp'
|
|
|
2284 |
}
|
|
|
2285 |
];
|
|
|
2286 |
const customLanguages = getLanguages$1(editor);
|
|
|
2287 |
return customLanguages ? customLanguages : defaultLanguages;
|
|
|
2288 |
};
|
|
|
2289 |
const getCurrentLanguage = (editor, fallback) => {
|
|
|
2290 |
const node = getSelectedCodeSample(editor);
|
|
|
2291 |
return node.fold(() => fallback, n => {
|
|
|
2292 |
const matches = n.className.match(/language-(\w+)/);
|
|
|
2293 |
return matches ? matches[1] : fallback;
|
|
|
2294 |
});
|
|
|
2295 |
};
|
|
|
2296 |
|
|
|
2297 |
const open = editor => {
|
|
|
2298 |
const languages = getLanguages(editor);
|
|
|
2299 |
const defaultLanguage = head(languages).fold(constant(''), l => l.value);
|
|
|
2300 |
const currentLanguage = getCurrentLanguage(editor, defaultLanguage);
|
|
|
2301 |
const currentCode = getCurrentCode(editor);
|
|
|
2302 |
editor.windowManager.open({
|
|
|
2303 |
title: 'Insert/Edit Code Sample',
|
|
|
2304 |
size: 'large',
|
|
|
2305 |
body: {
|
|
|
2306 |
type: 'panel',
|
|
|
2307 |
items: [
|
|
|
2308 |
{
|
|
|
2309 |
type: 'listbox',
|
|
|
2310 |
name: 'language',
|
|
|
2311 |
label: 'Language',
|
|
|
2312 |
items: languages
|
|
|
2313 |
},
|
|
|
2314 |
{
|
|
|
2315 |
type: 'textarea',
|
|
|
2316 |
name: 'code',
|
|
|
2317 |
label: 'Code view'
|
|
|
2318 |
}
|
|
|
2319 |
]
|
|
|
2320 |
},
|
|
|
2321 |
buttons: [
|
|
|
2322 |
{
|
|
|
2323 |
type: 'cancel',
|
|
|
2324 |
name: 'cancel',
|
|
|
2325 |
text: 'Cancel'
|
|
|
2326 |
},
|
|
|
2327 |
{
|
|
|
2328 |
type: 'submit',
|
|
|
2329 |
name: 'save',
|
|
|
2330 |
text: 'Save',
|
|
|
2331 |
primary: true
|
|
|
2332 |
}
|
|
|
2333 |
],
|
|
|
2334 |
initialData: {
|
|
|
2335 |
language: currentLanguage,
|
|
|
2336 |
code: currentCode
|
|
|
2337 |
},
|
|
|
2338 |
onSubmit: api => {
|
|
|
2339 |
const data = api.getData();
|
|
|
2340 |
insertCodeSample(editor, data.language, data.code);
|
|
|
2341 |
api.close();
|
|
|
2342 |
}
|
|
|
2343 |
});
|
|
|
2344 |
};
|
|
|
2345 |
|
|
|
2346 |
const register$1 = editor => {
|
|
|
2347 |
editor.addCommand('codesample', () => {
|
|
|
2348 |
const node = editor.selection.getNode();
|
|
|
2349 |
if (editor.selection.isCollapsed() || isCodeSample(node)) {
|
|
|
2350 |
open(editor);
|
|
|
2351 |
} else {
|
|
|
2352 |
editor.formatter.toggle('code');
|
|
|
2353 |
}
|
|
|
2354 |
});
|
|
|
2355 |
};
|
|
|
2356 |
|
|
|
2357 |
const blank = r => s => s.replace(r, '');
|
|
|
2358 |
const trim = blank(/^\s+|\s+$/g);
|
|
|
2359 |
|
|
|
2360 |
var global = tinymce.util.Tools.resolve('tinymce.util.Tools');
|
|
|
2361 |
|
|
|
2362 |
const setup = editor => {
|
|
|
2363 |
editor.on('PreProcess', e => {
|
|
|
2364 |
const dom = editor.dom;
|
|
|
2365 |
const pres = dom.select('pre[contenteditable=false]', e.node);
|
|
|
2366 |
global.each(global.grep(pres, isCodeSample), elm => {
|
|
|
2367 |
const code = elm.textContent;
|
|
|
2368 |
dom.setAttrib(elm, 'class', trim(dom.getAttrib(elm, 'class')));
|
|
|
2369 |
dom.setAttrib(elm, 'contentEditable', null);
|
|
|
2370 |
dom.setAttrib(elm, 'data-mce-highlighted', null);
|
|
|
2371 |
let child;
|
|
|
2372 |
while (child = elm.firstChild) {
|
|
|
2373 |
elm.removeChild(child);
|
|
|
2374 |
}
|
|
|
2375 |
const codeElm = dom.add(elm, 'code');
|
|
|
2376 |
codeElm.textContent = code;
|
|
|
2377 |
});
|
|
|
2378 |
});
|
|
|
2379 |
editor.on('SetContent', () => {
|
|
|
2380 |
const dom = editor.dom;
|
|
|
2381 |
const unprocessedCodeSamples = global.grep(dom.select('pre'), elm => {
|
|
|
2382 |
return isCodeSample(elm) && dom.getAttrib(elm, 'data-mce-highlighted') !== 'true';
|
|
|
2383 |
});
|
|
|
2384 |
if (unprocessedCodeSamples.length) {
|
|
|
2385 |
editor.undoManager.transact(() => {
|
|
|
2386 |
global.each(unprocessedCodeSamples, elm => {
|
|
|
2387 |
var _a;
|
|
|
2388 |
global.each(dom.select('br', elm), elm => {
|
|
|
2389 |
dom.replace(editor.getDoc().createTextNode('\n'), elm);
|
|
|
2390 |
});
|
|
|
2391 |
elm.innerHTML = dom.encode((_a = elm.textContent) !== null && _a !== void 0 ? _a : '');
|
|
|
2392 |
get(editor).highlightElement(elm);
|
|
|
2393 |
dom.setAttrib(elm, 'data-mce-highlighted', true);
|
|
|
2394 |
elm.className = trim(elm.className);
|
|
|
2395 |
});
|
|
|
2396 |
});
|
|
|
2397 |
}
|
|
|
2398 |
});
|
|
|
2399 |
editor.on('PreInit', () => {
|
|
|
2400 |
editor.parser.addNodeFilter('pre', nodes => {
|
|
|
2401 |
var _a;
|
|
|
2402 |
for (let i = 0, l = nodes.length; i < l; i++) {
|
|
|
2403 |
const node = nodes[i];
|
|
|
2404 |
const isCodeSample = ((_a = node.attr('class')) !== null && _a !== void 0 ? _a : '').indexOf('language-') !== -1;
|
|
|
2405 |
if (isCodeSample) {
|
|
|
2406 |
node.attr('contenteditable', 'false');
|
|
|
2407 |
node.attr('data-mce-highlighted', 'false');
|
|
|
2408 |
}
|
|
|
2409 |
}
|
|
|
2410 |
});
|
|
|
2411 |
});
|
|
|
2412 |
};
|
|
|
2413 |
|
|
|
2414 |
const onSetupEditable = (editor, onChanged = noop) => api => {
|
|
|
2415 |
const nodeChanged = () => {
|
|
|
2416 |
api.setEnabled(editor.selection.isEditable());
|
|
|
2417 |
onChanged(api);
|
|
|
2418 |
};
|
|
|
2419 |
editor.on('NodeChange', nodeChanged);
|
|
|
2420 |
nodeChanged();
|
|
|
2421 |
return () => {
|
|
|
2422 |
editor.off('NodeChange', nodeChanged);
|
|
|
2423 |
};
|
|
|
2424 |
};
|
|
|
2425 |
const isCodeSampleSelection = editor => {
|
|
|
2426 |
const node = editor.selection.getStart();
|
|
|
2427 |
return editor.dom.is(node, 'pre[class*="language-"]');
|
|
|
2428 |
};
|
|
|
2429 |
const register = editor => {
|
|
|
2430 |
const onAction = () => editor.execCommand('codesample');
|
|
|
2431 |
editor.ui.registry.addToggleButton('codesample', {
|
|
|
2432 |
icon: 'code-sample',
|
|
|
2433 |
tooltip: 'Insert/edit code sample',
|
|
|
2434 |
onAction,
|
|
|
2435 |
onSetup: onSetupEditable(editor, api => {
|
|
|
2436 |
api.setActive(isCodeSampleSelection(editor));
|
|
|
2437 |
})
|
|
|
2438 |
});
|
|
|
2439 |
editor.ui.registry.addMenuItem('codesample', {
|
|
|
2440 |
text: 'Code sample...',
|
|
|
2441 |
icon: 'code-sample',
|
|
|
2442 |
onAction,
|
|
|
2443 |
onSetup: onSetupEditable(editor)
|
|
|
2444 |
});
|
|
|
2445 |
};
|
|
|
2446 |
|
|
|
2447 |
var Plugin = () => {
|
|
|
2448 |
global$2.add('codesample', editor => {
|
|
|
2449 |
register$2(editor);
|
|
|
2450 |
setup(editor);
|
|
|
2451 |
register(editor);
|
|
|
2452 |
register$1(editor);
|
|
|
2453 |
editor.on('dblclick', ev => {
|
|
|
2454 |
if (isCodeSample(ev.target)) {
|
|
|
2455 |
open(editor);
|
|
|
2456 |
}
|
|
|
2457 |
});
|
|
|
2458 |
});
|
|
|
2459 |
};
|
|
|
2460 |
|
|
|
2461 |
Plugin();
|
|
|
2462 |
|
|
|
2463 |
})();
|