Download extensions/sd-model-organizer/javascript/tinymce/plugins/codesample/plugin.js from dikdimon/ext: direct link, hf CLI and curl.
- Browser
- Download file 93.9 kB
-
https://huggingface.co/dikdimon/ext/resolve/main/extensions/sd-model-organizer/javascript/tinymce/plugins/codesample/plugin.js
- Command line
-
hf download hf://dikdimon/ext/extensions/sd-model-organizer/javascript/tinymce/plugins/codesample/plugin.js
-
curl -L -o plugin.js https://huggingface.co/dikdimon/ext/resolve/main/extensions/sd-model-organizer/javascript/tinymce/plugins/codesample/plugin.js
93.9 kB
| /** | |
| * TinyMCE version 6.4.1 (2023-03-29) | |
| */ | |
| (function () { | |
| 'use strict'; | |
| var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager'); | |
| const isNullable = a => a === null || a === undefined; | |
| const isNonNullable = a => !isNullable(a); | |
| const constant = value => { | |
| return () => { | |
| return value; | |
| }; | |
| }; | |
| class Optional { | |
| constructor(tag, value) { | |
| this.tag = tag; | |
| this.value = value; | |
| } | |
| static some(value) { | |
| return new Optional(true, value); | |
| } | |
| static none() { | |
| return Optional.singletonNone; | |
| } | |
| fold(onNone, onSome) { | |
| if (this.tag) { | |
| return onSome(this.value); | |
| } else { | |
| return onNone(); | |
| } | |
| } | |
| isSome() { | |
| return this.tag; | |
| } | |
| isNone() { | |
| return !this.tag; | |
| } | |
| map(mapper) { | |
| if (this.tag) { | |
| return Optional.some(mapper(this.value)); | |
| } else { | |
| return Optional.none(); | |
| } | |
| } | |
| bind(binder) { | |
| if (this.tag) { | |
| return binder(this.value); | |
| } else { | |
| return Optional.none(); | |
| } | |
| } | |
| exists(predicate) { | |
| return this.tag && predicate(this.value); | |
| } | |
| forall(predicate) { | |
| return !this.tag || predicate(this.value); | |
| } | |
| filter(predicate) { | |
| if (!this.tag || predicate(this.value)) { | |
| return this; | |
| } else { | |
| return Optional.none(); | |
| } | |
| } | |
| getOr(replacement) { | |
| return this.tag ? this.value : replacement; | |
| } | |
| or(replacement) { | |
| return this.tag ? this : replacement; | |
| } | |
| getOrThunk(thunk) { | |
| return this.tag ? this.value : thunk(); | |
| } | |
| orThunk(thunk) { | |
| return this.tag ? this : thunk(); | |
| } | |
| getOrDie(message) { | |
| if (!this.tag) { | |
| throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None'); | |
| } else { | |
| return this.value; | |
| } | |
| } | |
| static from(value) { | |
| return isNonNullable(value) ? Optional.some(value) : Optional.none(); | |
| } | |
| getOrNull() { | |
| return this.tag ? this.value : null; | |
| } | |
| getOrUndefined() { | |
| return this.value; | |
| } | |
| each(worker) { | |
| if (this.tag) { | |
| worker(this.value); | |
| } | |
| } | |
| toArray() { | |
| return this.tag ? [this.value] : []; | |
| } | |
| toString() { | |
| return this.tag ? `some(${ this.value })` : 'none()'; | |
| } | |
| } | |
| Optional.singletonNone = new Optional(false); | |
| const get$1 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none(); | |
| const head = xs => get$1(xs, 0); | |
| var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); | |
| const Global = typeof window !== 'undefined' ? window : Function('return this;')(); | |
| const prismjs = function (global, module, exports) { | |
| const oldprism = window.Prism; | |
| window.Prism = { manual: true }; | |
| var _self = typeof window !== 'undefined' ? window : typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope ? self : {}; | |
| var Prism = function (_self) { | |
| var lang = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i; | |
| var uniqueId = 0; | |
| var plainTextGrammar = {}; | |
| var _ = { | |
| manual: _self.Prism && _self.Prism.manual, | |
| disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler, | |
| util: { | |
| encode: function encode(tokens) { | |
| if (tokens instanceof Token) { | |
| return new Token(tokens.type, encode(tokens.content), tokens.alias); | |
| } else if (Array.isArray(tokens)) { | |
| return tokens.map(encode); | |
| } else { | |
| return tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\u00a0/g, ' '); | |
| } | |
| }, | |
| type: function (o) { | |
| return Object.prototype.toString.call(o).slice(8, -1); | |
| }, | |
| objId: function (obj) { | |
| if (!obj['__id']) { | |
| Object.defineProperty(obj, '__id', { value: ++uniqueId }); | |
| } | |
| return obj['__id']; | |
| }, | |
| clone: function deepClone(o, visited) { | |
| visited = visited || {}; | |
| var clone; | |
| var id; | |
| switch (_.util.type(o)) { | |
| case 'Object': | |
| id = _.util.objId(o); | |
| if (visited[id]) { | |
| return visited[id]; | |
| } | |
| clone = {}; | |
| visited[id] = clone; | |
| for (var key in o) { | |
| if (o.hasOwnProperty(key)) { | |
| clone[key] = deepClone(o[key], visited); | |
| } | |
| } | |
| return clone; | |
| case 'Array': | |
| id = _.util.objId(o); | |
| if (visited[id]) { | |
| return visited[id]; | |
| } | |
| clone = []; | |
| visited[id] = clone; | |
| o.forEach(function (v, i) { | |
| clone[i] = deepClone(v, visited); | |
| }); | |
| return clone; | |
| default: | |
| return o; | |
| } | |
| }, | |
| getLanguage: function (element) { | |
| while (element) { | |
| var m = lang.exec(element.className); | |
| if (m) { | |
| return m[1].toLowerCase(); | |
| } | |
| element = element.parentElement; | |
| } | |
| return 'none'; | |
| }, | |
| setLanguage: function (element, language) { | |
| element.className = element.className.replace(RegExp(lang, 'gi'), ''); | |
| element.classList.add('language-' + language); | |
| }, | |
| currentScript: function () { | |
| if (typeof document === 'undefined') { | |
| return null; | |
| } | |
| if ('currentScript' in document && 1 < 2) { | |
| return document.currentScript; | |
| } | |
| try { | |
| throw new Error(); | |
| } catch (err) { | |
| var src = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(err.stack) || [])[1]; | |
| if (src) { | |
| var scripts = document.getElementsByTagName('script'); | |
| for (var i in scripts) { | |
| if (scripts[i].src == src) { | |
| return scripts[i]; | |
| } | |
| } | |
| } | |
| return null; | |
| } | |
| }, | |
| isActive: function (element, className, defaultActivation) { | |
| var no = 'no-' + className; | |
| while (element) { | |
| var classList = element.classList; | |
| if (classList.contains(className)) { | |
| return true; | |
| } | |
| if (classList.contains(no)) { | |
| return false; | |
| } | |
| element = element.parentElement; | |
| } | |
| return !!defaultActivation; | |
| } | |
| }, | |
| languages: { | |
| plain: plainTextGrammar, | |
| plaintext: plainTextGrammar, | |
| text: plainTextGrammar, | |
| txt: plainTextGrammar, | |
| extend: function (id, redef) { | |
| var lang = _.util.clone(_.languages[id]); | |
| for (var key in redef) { | |
| lang[key] = redef[key]; | |
| } | |
| return lang; | |
| }, | |
| insertBefore: function (inside, before, insert, root) { | |
| root = root || _.languages; | |
| var grammar = root[inside]; | |
| var ret = {}; | |
| for (var token in grammar) { | |
| if (grammar.hasOwnProperty(token)) { | |
| if (token == before) { | |
| for (var newToken in insert) { | |
| if (insert.hasOwnProperty(newToken)) { | |
| ret[newToken] = insert[newToken]; | |
| } | |
| } | |
| } | |
| if (!insert.hasOwnProperty(token)) { | |
| ret[token] = grammar[token]; | |
| } | |
| } | |
| } | |
| var old = root[inside]; | |
| root[inside] = ret; | |
| _.languages.DFS(_.languages, function (key, value) { | |
| if (value === old && key != inside) { | |
| this[key] = ret; | |
| } | |
| }); | |
| return ret; | |
| }, | |
| DFS: function DFS(o, callback, type, visited) { | |
| visited = visited || {}; | |
| var objId = _.util.objId; | |
| for (var i in o) { | |
| if (o.hasOwnProperty(i)) { | |
| callback.call(o, i, o[i], type || i); | |
| var property = o[i]; | |
| var propertyType = _.util.type(property); | |
| if (propertyType === 'Object' && !visited[objId(property)]) { | |
| visited[objId(property)] = true; | |
| DFS(property, callback, null, visited); | |
| } else if (propertyType === 'Array' && !visited[objId(property)]) { | |
| visited[objId(property)] = true; | |
| DFS(property, callback, i, visited); | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| plugins: {}, | |
| highlightAll: function (async, callback) { | |
| _.highlightAllUnder(document, async, callback); | |
| }, | |
| highlightAllUnder: function (container, async, callback) { | |
| var env = { | |
| callback: callback, | |
| container: container, | |
| selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code' | |
| }; | |
| _.hooks.run('before-highlightall', env); | |
| env.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector)); | |
| _.hooks.run('before-all-elements-highlight', env); | |
| for (var i = 0, element; element = env.elements[i++];) { | |
| _.highlightElement(element, async === true, env.callback); | |
| } | |
| }, | |
| highlightElement: function (element, async, callback) { | |
| var language = _.util.getLanguage(element); | |
| var grammar = _.languages[language]; | |
| _.util.setLanguage(element, language); | |
| var parent = element.parentElement; | |
| if (parent && parent.nodeName.toLowerCase() === 'pre') { | |
| _.util.setLanguage(parent, language); | |
| } | |
| var code = element.textContent; | |
| var env = { | |
| element: element, | |
| language: language, | |
| grammar: grammar, | |
| code: code | |
| }; | |
| function insertHighlightedCode(highlightedCode) { | |
| env.highlightedCode = highlightedCode; | |
| _.hooks.run('before-insert', env); | |
| env.element.innerHTML = env.highlightedCode; | |
| _.hooks.run('after-highlight', env); | |
| _.hooks.run('complete', env); | |
| callback && callback.call(env.element); | |
| } | |
| _.hooks.run('before-sanity-check', env); | |
| parent = env.element.parentElement; | |
| if (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) { | |
| parent.setAttribute('tabindex', '0'); | |
| } | |
| if (!env.code) { | |
| _.hooks.run('complete', env); | |
| callback && callback.call(env.element); | |
| return; | |
| } | |
| _.hooks.run('before-highlight', env); | |
| if (!env.grammar) { | |
| insertHighlightedCode(_.util.encode(env.code)); | |
| return; | |
| } | |
| if (async && _self.Worker) { | |
| var worker = new Worker(_.filename); | |
| worker.onmessage = function (evt) { | |
| insertHighlightedCode(evt.data); | |
| }; | |
| worker.postMessage(JSON.stringify({ | |
| language: env.language, | |
| code: env.code, | |
| immediateClose: true | |
| })); | |
| } else { | |
| insertHighlightedCode(_.highlight(env.code, env.grammar, env.language)); | |
| } | |
| }, | |
| highlight: function (text, grammar, language) { | |
| var env = { | |
| code: text, | |
| grammar: grammar, | |
| language: language | |
| }; | |
| _.hooks.run('before-tokenize', env); | |
| if (!env.grammar) { | |
| throw new Error('The language "' + env.language + '" has no grammar.'); | |
| } | |
| env.tokens = _.tokenize(env.code, env.grammar); | |
| _.hooks.run('after-tokenize', env); | |
| return Token.stringify(_.util.encode(env.tokens), env.language); | |
| }, | |
| tokenize: function (text, grammar) { | |
| var rest = grammar.rest; | |
| if (rest) { | |
| for (var token in rest) { | |
| grammar[token] = rest[token]; | |
| } | |
| delete grammar.rest; | |
| } | |
| var tokenList = new LinkedList(); | |
| addAfter(tokenList, tokenList.head, text); | |
| matchGrammar(text, tokenList, grammar, tokenList.head, 0); | |
| return toArray(tokenList); | |
| }, | |
| hooks: { | |
| all: {}, | |
| add: function (name, callback) { | |
| var hooks = _.hooks.all; | |
| hooks[name] = hooks[name] || []; | |
| hooks[name].push(callback); | |
| }, | |
| run: function (name, env) { | |
| var callbacks = _.hooks.all[name]; | |
| if (!callbacks || !callbacks.length) { | |
| return; | |
| } | |
| for (var i = 0, callback; callback = callbacks[i++];) { | |
| callback(env); | |
| } | |
| } | |
| }, | |
| Token: Token | |
| }; | |
| _self.Prism = _; | |
| function Token(type, content, alias, matchedStr) { | |
| this.type = type; | |
| this.content = content; | |
| this.alias = alias; | |
| this.length = (matchedStr || '').length | 0; | |
| } | |
| Token.stringify = function stringify(o, language) { | |
| if (typeof o == 'string') { | |
| return o; | |
| } | |
| if (Array.isArray(o)) { | |
| var s = ''; | |
| o.forEach(function (e) { | |
| s += stringify(e, language); | |
| }); | |
| return s; | |
| } | |
| var env = { | |
| type: o.type, | |
| content: stringify(o.content, language), | |
| tag: 'span', | |
| classes: [ | |
| 'token', | |
| o.type | |
| ], | |
| attributes: {}, | |
| language: language | |
| }; | |
| var aliases = o.alias; | |
| if (aliases) { | |
| if (Array.isArray(aliases)) { | |
| Array.prototype.push.apply(env.classes, aliases); | |
| } else { | |
| env.classes.push(aliases); | |
| } | |
| } | |
| _.hooks.run('wrap', env); | |
| var attributes = ''; | |
| for (var name in env.attributes) { | |
| attributes += ' ' + name + '="' + (env.attributes[name] || '').replace(/"/g, '"') + '"'; | |
| } | |
| return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + attributes + '>' + env.content + '</' + env.tag + '>'; | |
| }; | |
| function matchPattern(pattern, pos, text, lookbehind) { | |
| pattern.lastIndex = pos; | |
| var match = pattern.exec(text); | |
| if (match && lookbehind && match[1]) { | |
| var lookbehindLength = match[1].length; | |
| match.index += lookbehindLength; | |
| match[0] = match[0].slice(lookbehindLength); | |
| } | |
| return match; | |
| } | |
| function matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) { | |
| for (var token in grammar) { | |
| if (!grammar.hasOwnProperty(token) || !grammar[token]) { | |
| continue; | |
| } | |
| var patterns = grammar[token]; | |
| patterns = Array.isArray(patterns) ? patterns : [patterns]; | |
| for (var j = 0; j < patterns.length; ++j) { | |
| if (rematch && rematch.cause == token + ',' + j) { | |
| return; | |
| } | |
| var patternObj = patterns[j]; | |
| var inside = patternObj.inside; | |
| var lookbehind = !!patternObj.lookbehind; | |
| var greedy = !!patternObj.greedy; | |
| var alias = patternObj.alias; | |
| if (greedy && !patternObj.pattern.global) { | |
| var flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0]; | |
| patternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g'); | |
| } | |
| var pattern = patternObj.pattern || patternObj; | |
| for (var currentNode = startNode.next, pos = startPos; currentNode !== tokenList.tail; pos += currentNode.value.length, currentNode = currentNode.next) { | |
| if (rematch && pos >= rematch.reach) { | |
| break; | |
| } | |
| var str = currentNode.value; | |
| if (tokenList.length > text.length) { | |
| return; | |
| } | |
| if (str instanceof Token) { | |
| continue; | |
| } | |
| var removeCount = 1; | |
| var match; | |
| if (greedy) { | |
| match = matchPattern(pattern, pos, text, lookbehind); | |
| if (!match || match.index >= text.length) { | |
| break; | |
| } | |
| var from = match.index; | |
| var to = match.index + match[0].length; | |
| var p = pos; | |
| p += currentNode.value.length; | |
| while (from >= p) { | |
| currentNode = currentNode.next; | |
| p += currentNode.value.length; | |
| } | |
| p -= currentNode.value.length; | |
| pos = p; | |
| if (currentNode.value instanceof Token) { | |
| continue; | |
| } | |
| for (var k = currentNode; k !== tokenList.tail && (p < to || typeof k.value === 'string'); k = k.next) { | |
| removeCount++; | |
| p += k.value.length; | |
| } | |
| removeCount--; | |
| str = text.slice(pos, p); | |
| match.index -= pos; | |
| } else { | |
| match = matchPattern(pattern, 0, str, lookbehind); | |
| if (!match) { | |
| continue; | |
| } | |
| } | |
| var from = match.index; | |
| var matchStr = match[0]; | |
| var before = str.slice(0, from); | |
| var after = str.slice(from + matchStr.length); | |
| var reach = pos + str.length; | |
| if (rematch && reach > rematch.reach) { | |
| rematch.reach = reach; | |
| } | |
| var removeFrom = currentNode.prev; | |
| if (before) { | |
| removeFrom = addAfter(tokenList, removeFrom, before); | |
| pos += before.length; | |
| } | |
| removeRange(tokenList, removeFrom, removeCount); | |
| var wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr); | |
| currentNode = addAfter(tokenList, removeFrom, wrapped); | |
| if (after) { | |
| addAfter(tokenList, currentNode, after); | |
| } | |
| if (removeCount > 1) { | |
| var nestedRematch = { | |
| cause: token + ',' + j, | |
| reach: reach | |
| }; | |
| matchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch); | |
| if (rematch && nestedRematch.reach > rematch.reach) { | |
| rematch.reach = nestedRematch.reach; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| function LinkedList() { | |
| var head = { | |
| value: null, | |
| prev: null, | |
| next: null | |
| }; | |
| var tail = { | |
| value: null, | |
| prev: head, | |
| next: null | |
| }; | |
| head.next = tail; | |
| this.head = head; | |
| this.tail = tail; | |
| this.length = 0; | |
| } | |
| function addAfter(list, node, value) { | |
| var next = node.next; | |
| var newNode = { | |
| value: value, | |
| prev: node, | |
| next: next | |
| }; | |
| node.next = newNode; | |
| next.prev = newNode; | |
| list.length++; | |
| return newNode; | |
| } | |
| function removeRange(list, node, count) { | |
| var next = node.next; | |
| for (var i = 0; i < count && next !== list.tail; i++) { | |
| next = next.next; | |
| } | |
| node.next = next; | |
| next.prev = node; | |
| list.length -= i; | |
| } | |
| function toArray(list) { | |
| var array = []; | |
| var node = list.head.next; | |
| while (node !== list.tail) { | |
| array.push(node.value); | |
| node = node.next; | |
| } | |
| return array; | |
| } | |
| if (!_self.document) { | |
| if (!_self.addEventListener) { | |
| return _; | |
| } | |
| if (!_.disableWorkerMessageHandler) { | |
| _self.addEventListener('message', function (evt) { | |
| var message = JSON.parse(evt.data); | |
| var lang = message.language; | |
| var code = message.code; | |
| var immediateClose = message.immediateClose; | |
| _self.postMessage(_.highlight(code, _.languages[lang], lang)); | |
| if (immediateClose) { | |
| _self.close(); | |
| } | |
| }, false); | |
| } | |
| return _; | |
| } | |
| var script = _.util.currentScript(); | |
| if (script) { | |
| _.filename = script.src; | |
| if (script.hasAttribute('data-manual')) { | |
| _.manual = true; | |
| } | |
| } | |
| function highlightAutomaticallyCallback() { | |
| if (!_.manual) { | |
| _.highlightAll(); | |
| } | |
| } | |
| if (!_.manual) { | |
| var readyState = document.readyState; | |
| if (readyState === 'loading' || readyState === 'interactive' && script && script.defer) { | |
| document.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback); | |
| } else { | |
| if (window.requestAnimationFrame) { | |
| window.requestAnimationFrame(highlightAutomaticallyCallback); | |
| } else { | |
| window.setTimeout(highlightAutomaticallyCallback, 16); | |
| } | |
| } | |
| } | |
| return _; | |
| }(_self); | |
| if (typeof module !== 'undefined' && module.exports) { | |
| module.exports = Prism; | |
| } | |
| if (typeof global !== 'undefined') { | |
| global.Prism = Prism; | |
| } | |
| Prism.languages.clike = { | |
| 'comment': [ | |
| { | |
| pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, | |
| lookbehind: true, | |
| greedy: true | |
| }, | |
| { | |
| pattern: /(^|[^\\:])\/\/.*/, | |
| lookbehind: true, | |
| greedy: true | |
| } | |
| ], | |
| 'string': { | |
| pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, | |
| greedy: true | |
| }, | |
| 'class-name': { | |
| pattern: /(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i, | |
| lookbehind: true, | |
| inside: { 'punctuation': /[.\\]/ } | |
| }, | |
| 'keyword': /\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/, | |
| 'boolean': /\b(?:false|true)\b/, | |
| 'function': /\b\w+(?=\()/, | |
| 'number': /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i, | |
| 'operator': /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/, | |
| 'punctuation': /[{}[\];(),.:]/ | |
| }; | |
| (function (Prism) { | |
| function getPlaceholder(language, index) { | |
| return '___' + language.toUpperCase() + index + '___'; | |
| } | |
| Object.defineProperties(Prism.languages['markup-templating'] = {}, { | |
| buildPlaceholders: { | |
| value: function (env, language, placeholderPattern, replaceFilter) { | |
| if (env.language !== language) { | |
| return; | |
| } | |
| var tokenStack = env.tokenStack = []; | |
| env.code = env.code.replace(placeholderPattern, function (match) { | |
| if (typeof replaceFilter === 'function' && !replaceFilter(match)) { | |
| return match; | |
| } | |
| var i = tokenStack.length; | |
| var placeholder; | |
| while (env.code.indexOf(placeholder = getPlaceholder(language, i)) !== -1) { | |
| ++i; | |
| } | |
| tokenStack[i] = match; | |
| return placeholder; | |
| }); | |
| env.grammar = Prism.languages.markup; | |
| } | |
| }, | |
| tokenizePlaceholders: { | |
| value: function (env, language) { | |
| if (env.language !== language || !env.tokenStack) { | |
| return; | |
| } | |
| env.grammar = Prism.languages[language]; | |
| var j = 0; | |
| var keys = Object.keys(env.tokenStack); | |
| function walkTokens(tokens) { | |
| for (var i = 0; i < tokens.length; i++) { | |
| if (j >= keys.length) { | |
| break; | |
| } | |
| var token = tokens[i]; | |
| if (typeof token === 'string' || token.content && typeof token.content === 'string') { | |
| var k = keys[j]; | |
| var t = env.tokenStack[k]; | |
| var s = typeof token === 'string' ? token : token.content; | |
| var placeholder = getPlaceholder(language, k); | |
| var index = s.indexOf(placeholder); | |
| if (index > -1) { | |
| ++j; | |
| var before = s.substring(0, index); | |
| var middle = new Prism.Token(language, Prism.tokenize(t, env.grammar), 'language-' + language, t); | |
| var after = s.substring(index + placeholder.length); | |
| var replacement = []; | |
| if (before) { | |
| replacement.push.apply(replacement, walkTokens([before])); | |
| } | |
| replacement.push(middle); | |
| if (after) { | |
| replacement.push.apply(replacement, walkTokens([after])); | |
| } | |
| if (typeof token === 'string') { | |
| tokens.splice.apply(tokens, [ | |
| i, | |
| 1 | |
| ].concat(replacement)); | |
| } else { | |
| token.content = replacement; | |
| } | |
| } | |
| } else if (token.content) { | |
| walkTokens(token.content); | |
| } | |
| } | |
| return tokens; | |
| } | |
| walkTokens(env.tokens); | |
| } | |
| } | |
| }); | |
| }(Prism)); | |
| Prism.languages.c = Prism.languages.extend('clike', { | |
| 'comment': { | |
| pattern: /\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/, | |
| greedy: true | |
| }, | |
| 'string': { | |
| pattern: /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/, | |
| greedy: true | |
| }, | |
| 'class-name': { | |
| pattern: /(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/, | |
| lookbehind: true | |
| }, | |
| '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/, | |
| 'function': /\b[a-z_]\w*(?=\s*\()/i, | |
| 'number': /(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i, | |
| 'operator': />>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/ | |
| }); | |
| Prism.languages.insertBefore('c', 'string', { | |
| 'char': { | |
| pattern: /'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/, | |
| greedy: true | |
| } | |
| }); | |
| Prism.languages.insertBefore('c', 'string', { | |
| 'macro': { | |
| pattern: /(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im, | |
| lookbehind: true, | |
| greedy: true, | |
| alias: 'property', | |
| inside: { | |
| 'string': [ | |
| { | |
| pattern: /^(#\s*include\s*)<[^>]+>/, | |
| lookbehind: true | |
| }, | |
| Prism.languages.c['string'] | |
| ], | |
| 'char': Prism.languages.c['char'], | |
| 'comment': Prism.languages.c['comment'], | |
| 'macro-name': [ | |
| { | |
| pattern: /(^#\s*define\s+)\w+\b(?!\()/i, | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: /(^#\s*define\s+)\w+\b(?=\()/i, | |
| lookbehind: true, | |
| alias: 'function' | |
| } | |
| ], | |
| 'directive': { | |
| pattern: /^(#\s*)[a-z]+/, | |
| lookbehind: true, | |
| alias: 'keyword' | |
| }, | |
| 'directive-hash': /^#/, | |
| 'punctuation': /##|\\(?=[\r\n])/, | |
| 'expression': { | |
| pattern: /\S[\s\S]*/, | |
| inside: Prism.languages.c | |
| } | |
| } | |
| } | |
| }); | |
| 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/ }); | |
| delete Prism.languages.c['boolean']; | |
| (function (Prism) { | |
| 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/; | |
| var modName = /\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g, function () { | |
| return keyword.source; | |
| }); | |
| Prism.languages.cpp = Prism.languages.extend('c', { | |
| 'class-name': [ | |
| { | |
| pattern: RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g, function () { | |
| return keyword.source; | |
| })), | |
| lookbehind: true | |
| }, | |
| /\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/, | |
| /\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i, | |
| /\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/ | |
| ], | |
| 'keyword': keyword, | |
| 'number': { | |
| pattern: /(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i, | |
| greedy: true | |
| }, | |
| 'operator': />>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/, | |
| 'boolean': /\b(?:false|true)\b/ | |
| }); | |
| Prism.languages.insertBefore('cpp', 'string', { | |
| 'module': { | |
| 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 () { | |
| return modName; | |
| }) + ')'), | |
| lookbehind: true, | |
| greedy: true, | |
| inside: { | |
| 'string': /^[<"][\s\S]+/, | |
| 'operator': /:/, | |
| 'punctuation': /\./ | |
| } | |
| }, | |
| 'raw-string': { | |
| pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/, | |
| alias: 'string', | |
| greedy: true | |
| } | |
| }); | |
| Prism.languages.insertBefore('cpp', 'keyword', { | |
| 'generic-function': { | |
| pattern: /\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i, | |
| inside: { | |
| 'function': /^\w+/, | |
| 'generic': { | |
| pattern: /<[\s\S]+/, | |
| alias: 'class-name', | |
| inside: Prism.languages.cpp | |
| } | |
| } | |
| } | |
| }); | |
| Prism.languages.insertBefore('cpp', 'operator', { | |
| 'double-colon': { | |
| pattern: /::/, | |
| alias: 'punctuation' | |
| } | |
| }); | |
| Prism.languages.insertBefore('cpp', 'class-name', { | |
| 'base-clause': { | |
| pattern: /(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/, | |
| lookbehind: true, | |
| greedy: true, | |
| inside: Prism.languages.extend('cpp', {}) | |
| } | |
| }); | |
| Prism.languages.insertBefore('inside', 'double-colon', { 'class-name': /\b[a-z_]\w*\b(?!\s*::)/i }, Prism.languages.cpp['base-clause']); | |
| }(Prism)); | |
| (function (Prism) { | |
| function replace(pattern, replacements) { | |
| return pattern.replace(/<<(\d+)>>/g, function (m, index) { | |
| return '(?:' + replacements[+index] + ')'; | |
| }); | |
| } | |
| function re(pattern, replacements, flags) { | |
| return RegExp(replace(pattern, replacements), flags || ''); | |
| } | |
| function nested(pattern, depthLog2) { | |
| for (var i = 0; i < depthLog2; i++) { | |
| pattern = pattern.replace(/<<self>>/g, function () { | |
| return '(?:' + pattern + ')'; | |
| }); | |
| } | |
| return pattern.replace(/<<self>>/g, '[^\\s\\S]'); | |
| } | |
| var keywordKinds = { | |
| type: 'bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void', | |
| typeDeclaration: 'class enum interface record struct', | |
| 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*{)', | |
| 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' | |
| }; | |
| function keywordsToPattern(words) { | |
| return '\\b(?:' + words.trim().replace(/ /g, '|') + ')\\b'; | |
| } | |
| var typeDeclarationKeywords = keywordsToPattern(keywordKinds.typeDeclaration); | |
| var keywords = RegExp(keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.typeDeclaration + ' ' + keywordKinds.contextual + ' ' + keywordKinds.other)); | |
| var nonTypeKeywords = keywordsToPattern(keywordKinds.typeDeclaration + ' ' + keywordKinds.contextual + ' ' + keywordKinds.other); | |
| var nonContextualKeywords = keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.typeDeclaration + ' ' + keywordKinds.other); | |
| var generic = nested(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source, 2); | |
| var nestedRound = nested(/\((?:[^()]|<<self>>)*\)/.source, 2); | |
| var name = /@?\b[A-Za-z_]\w*\b/.source; | |
| var genericName = replace(/<<0>>(?:\s*<<1>>)?/.source, [ | |
| name, | |
| generic | |
| ]); | |
| var identifier = replace(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source, [ | |
| nonTypeKeywords, | |
| genericName | |
| ]); | |
| var array = /\[\s*(?:,\s*)*\]/.source; | |
| var typeExpressionWithoutTuple = replace(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source, [ | |
| identifier, | |
| array | |
| ]); | |
| var tupleElement = replace(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source, [ | |
| generic, | |
| nestedRound, | |
| array | |
| ]); | |
| var tuple = replace(/\(<<0>>+(?:,<<0>>+)+\)/.source, [tupleElement]); | |
| var typeExpression = replace(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source, [ | |
| tuple, | |
| identifier, | |
| array | |
| ]); | |
| var typeInside = { | |
| 'keyword': keywords, | |
| 'punctuation': /[<>()?,.:[\]]/ | |
| }; | |
| var character = /'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source; | |
| var regularString = /"(?:\\.|[^\\"\r\n])*"/.source; | |
| var verbatimString = /@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source; | |
| Prism.languages.csharp = Prism.languages.extend('clike', { | |
| 'string': [ | |
| { | |
| pattern: re(/(^|[^$\\])<<0>>/.source, [verbatimString]), | |
| lookbehind: true, | |
| greedy: true | |
| }, | |
| { | |
| pattern: re(/(^|[^@$\\])<<0>>/.source, [regularString]), | |
| lookbehind: true, | |
| greedy: true | |
| } | |
| ], | |
| 'class-name': [ | |
| { | |
| pattern: re(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source, [identifier]), | |
| lookbehind: true, | |
| inside: typeInside | |
| }, | |
| { | |
| pattern: re(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source, [ | |
| name, | |
| typeExpression | |
| ]), | |
| lookbehind: true, | |
| inside: typeInside | |
| }, | |
| { | |
| pattern: re(/(\busing\s+)<<0>>(?=\s*=)/.source, [name]), | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: re(/(\b<<0>>\s+)<<1>>/.source, [ | |
| typeDeclarationKeywords, | |
| genericName | |
| ]), | |
| lookbehind: true, | |
| inside: typeInside | |
| }, | |
| { | |
| pattern: re(/(\bcatch\s*\(\s*)<<0>>/.source, [identifier]), | |
| lookbehind: true, | |
| inside: typeInside | |
| }, | |
| { | |
| pattern: re(/(\bwhere\s+)<<0>>/.source, [name]), | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: re(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source, [typeExpressionWithoutTuple]), | |
| lookbehind: true, | |
| inside: typeInside | |
| }, | |
| { | |
| pattern: re(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source, [ | |
| typeExpression, | |
| nonContextualKeywords, | |
| name | |
| ]), | |
| inside: typeInside | |
| } | |
| ], | |
| 'keyword': keywords, | |
| '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, | |
| 'operator': />>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/, | |
| 'punctuation': /\?\.?|::|[{}[\];(),.:]/ | |
| }); | |
| Prism.languages.insertBefore('csharp', 'number', { | |
| 'range': { | |
| pattern: /\.\./, | |
| alias: 'operator' | |
| } | |
| }); | |
| Prism.languages.insertBefore('csharp', 'punctuation', { | |
| 'named-parameter': { | |
| pattern: re(/([(,]\s*)<<0>>(?=\s*:)/.source, [name]), | |
| lookbehind: true, | |
| alias: 'punctuation' | |
| } | |
| }); | |
| Prism.languages.insertBefore('csharp', 'class-name', { | |
| 'namespace': { | |
| pattern: re(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source, [name]), | |
| lookbehind: true, | |
| inside: { 'punctuation': /\./ } | |
| }, | |
| 'type-expression': { | |
| pattern: re(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source, [nestedRound]), | |
| lookbehind: true, | |
| alias: 'class-name', | |
| inside: typeInside | |
| }, | |
| 'return-type': { | |
| pattern: re(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source, [ | |
| typeExpression, | |
| identifier | |
| ]), | |
| inside: typeInside, | |
| alias: 'class-name' | |
| }, | |
| 'constructor-invocation': { | |
| pattern: re(/(\bnew\s+)<<0>>(?=\s*[[({])/.source, [typeExpression]), | |
| lookbehind: true, | |
| inside: typeInside, | |
| alias: 'class-name' | |
| }, | |
| 'generic-method': { | |
| pattern: re(/<<0>>\s*<<1>>(?=\s*\()/.source, [ | |
| name, | |
| generic | |
| ]), | |
| inside: { | |
| 'function': re(/^<<0>>/.source, [name]), | |
| 'generic': { | |
| pattern: RegExp(generic), | |
| alias: 'class-name', | |
| inside: typeInside | |
| } | |
| } | |
| }, | |
| 'type-list': { | |
| 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, [ | |
| typeDeclarationKeywords, | |
| genericName, | |
| name, | |
| typeExpression, | |
| keywords.source, | |
| nestedRound, | |
| /\bnew\s*\(\s*\)/.source | |
| ]), | |
| lookbehind: true, | |
| inside: { | |
| 'record-arguments': { | |
| pattern: re(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source, [ | |
| genericName, | |
| nestedRound | |
| ]), | |
| lookbehind: true, | |
| greedy: true, | |
| inside: Prism.languages.csharp | |
| }, | |
| 'keyword': keywords, | |
| 'class-name': { | |
| pattern: RegExp(typeExpression), | |
| greedy: true, | |
| inside: typeInside | |
| }, | |
| 'punctuation': /[,()]/ | |
| } | |
| }, | |
| 'preprocessor': { | |
| pattern: /(^[\t ]*)#.*/m, | |
| lookbehind: true, | |
| alias: 'property', | |
| inside: { | |
| 'directive': { | |
| pattern: /(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/, | |
| lookbehind: true, | |
| alias: 'keyword' | |
| } | |
| } | |
| } | |
| }); | |
| var regularStringOrCharacter = regularString + '|' + character; | |
| var regularStringCharacterOrComment = replace(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source, [regularStringOrCharacter]); | |
| var roundExpression = nested(replace(/[^"'/()]|<<0>>|\(<<self>>*\)/.source, [regularStringCharacterOrComment]), 2); | |
| var attrTarget = /\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source; | |
| var attr = replace(/<<0>>(?:\s*\(<<1>>*\))?/.source, [ | |
| identifier, | |
| roundExpression | |
| ]); | |
| Prism.languages.insertBefore('csharp', 'class-name', { | |
| 'attribute': { | |
| pattern: re(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source, [ | |
| attrTarget, | |
| attr | |
| ]), | |
| lookbehind: true, | |
| greedy: true, | |
| inside: { | |
| 'target': { | |
| pattern: re(/^<<0>>(?=\s*:)/.source, [attrTarget]), | |
| alias: 'keyword' | |
| }, | |
| 'attribute-arguments': { | |
| pattern: re(/\(<<0>>*\)/.source, [roundExpression]), | |
| inside: Prism.languages.csharp | |
| }, | |
| 'class-name': { | |
| pattern: RegExp(identifier), | |
| inside: { 'punctuation': /\./ } | |
| }, | |
| 'punctuation': /[:,]/ | |
| } | |
| } | |
| }); | |
| var formatString = /:[^}\r\n]+/.source; | |
| var mInterpolationRound = nested(replace(/[^"'/()]|<<0>>|\(<<self>>*\)/.source, [regularStringCharacterOrComment]), 2); | |
| var mInterpolation = replace(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source, [ | |
| mInterpolationRound, | |
| formatString | |
| ]); | |
| var sInterpolationRound = nested(replace(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source, [regularStringOrCharacter]), 2); | |
| var sInterpolation = replace(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source, [ | |
| sInterpolationRound, | |
| formatString | |
| ]); | |
| function createInterpolationInside(interpolation, interpolationRound) { | |
| return { | |
| 'interpolation': { | |
| pattern: re(/((?:^|[^{])(?:\{\{)*)<<0>>/.source, [interpolation]), | |
| lookbehind: true, | |
| inside: { | |
| 'format-string': { | |
| pattern: re(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source, [ | |
| interpolationRound, | |
| formatString | |
| ]), | |
| lookbehind: true, | |
| inside: { 'punctuation': /^:/ } | |
| }, | |
| 'punctuation': /^\{|\}$/, | |
| 'expression': { | |
| pattern: /[\s\S]+/, | |
| alias: 'language-csharp', | |
| inside: Prism.languages.csharp | |
| } | |
| } | |
| }, | |
| 'string': /[\s\S]+/ | |
| }; | |
| } | |
| Prism.languages.insertBefore('csharp', 'string', { | |
| 'interpolation-string': [ | |
| { | |
| pattern: re(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source, [mInterpolation]), | |
| lookbehind: true, | |
| greedy: true, | |
| inside: createInterpolationInside(mInterpolation, mInterpolationRound) | |
| }, | |
| { | |
| pattern: re(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source, [sInterpolation]), | |
| lookbehind: true, | |
| greedy: true, | |
| inside: createInterpolationInside(sInterpolation, sInterpolationRound) | |
| } | |
| ], | |
| 'char': { | |
| pattern: RegExp(character), | |
| greedy: true | |
| } | |
| }); | |
| Prism.languages.dotnet = Prism.languages.cs = Prism.languages.csharp; | |
| }(Prism)); | |
| (function (Prism) { | |
| var string = /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/; | |
| Prism.languages.css = { | |
| 'comment': /\/\*[\s\S]*?\*\//, | |
| 'atrule': { | |
| pattern: /@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/, | |
| inside: { | |
| 'rule': /^@[\w-]+/, | |
| 'selector-function-argument': { | |
| pattern: /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/, | |
| lookbehind: true, | |
| alias: 'selector' | |
| }, | |
| 'keyword': { | |
| pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/, | |
| lookbehind: true | |
| } | |
| } | |
| }, | |
| 'url': { | |
| pattern: RegExp('\\burl\\((?:' + string.source + '|' + /(?:[^\\\r\n()"']|\\[\s\S])*/.source + ')\\)', 'i'), | |
| greedy: true, | |
| inside: { | |
| 'function': /^url/i, | |
| 'punctuation': /^\(|\)$/, | |
| 'string': { | |
| pattern: RegExp('^' + string.source + '$'), | |
| alias: 'url' | |
| } | |
| } | |
| }, | |
| 'selector': { | |
| pattern: RegExp('(^|[{}\\s])[^{}\\s](?:[^{};"\'\\s]|\\s+(?![\\s{])|' + string.source + ')*(?=\\s*\\{)'), | |
| lookbehind: true | |
| }, | |
| 'string': { | |
| pattern: string, | |
| greedy: true | |
| }, | |
| 'property': { | |
| pattern: /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i, | |
| lookbehind: true | |
| }, | |
| 'important': /!important\b/i, | |
| 'function': { | |
| pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i, | |
| lookbehind: true | |
| }, | |
| 'punctuation': /[(){};:,]/ | |
| }; | |
| Prism.languages.css['atrule'].inside.rest = Prism.languages.css; | |
| var markup = Prism.languages.markup; | |
| if (markup) { | |
| markup.tag.addInlined('style', 'css'); | |
| markup.tag.addAttribute('style', 'css'); | |
| } | |
| }(Prism)); | |
| (function (Prism) { | |
| 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/; | |
| var classNamePrefix = /(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source; | |
| var className = { | |
| pattern: RegExp(/(^|[^\w.])/.source + classNamePrefix + /[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source), | |
| lookbehind: true, | |
| inside: { | |
| 'namespace': { | |
| pattern: /^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/, | |
| inside: { 'punctuation': /\./ } | |
| }, | |
| 'punctuation': /\./ | |
| } | |
| }; | |
| Prism.languages.java = Prism.languages.extend('clike', { | |
| 'string': { | |
| pattern: /(^|[^\\])"(?:\\.|[^"\\\r\n])*"/, | |
| lookbehind: true, | |
| greedy: true | |
| }, | |
| 'class-name': [ | |
| className, | |
| { | |
| pattern: RegExp(/(^|[^\w.])/.source + classNamePrefix + /[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source), | |
| lookbehind: true, | |
| inside: className.inside | |
| }, | |
| { | |
| pattern: RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source + classNamePrefix + /[A-Z]\w*\b/.source), | |
| lookbehind: true, | |
| inside: className.inside | |
| } | |
| ], | |
| 'keyword': keywords, | |
| 'function': [ | |
| Prism.languages.clike.function, | |
| { | |
| pattern: /(::\s*)[a-z_]\w*/, | |
| lookbehind: true | |
| } | |
| ], | |
| '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, | |
| 'operator': { | |
| pattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m, | |
| lookbehind: true | |
| } | |
| }); | |
| Prism.languages.insertBefore('java', 'string', { | |
| 'triple-quoted-string': { | |
| pattern: /"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/, | |
| greedy: true, | |
| alias: 'string' | |
| }, | |
| 'char': { | |
| pattern: /'(?:\\.|[^'\\\r\n]){1,6}'/, | |
| greedy: true | |
| } | |
| }); | |
| Prism.languages.insertBefore('java', 'class-name', { | |
| 'annotation': { | |
| pattern: /(^|[^.])@\w+(?:\s*\.\s*\w+)*/, | |
| lookbehind: true, | |
| alias: 'punctuation' | |
| }, | |
| 'generics': { | |
| pattern: /<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/, | |
| inside: { | |
| 'class-name': className, | |
| 'keyword': keywords, | |
| 'punctuation': /[<>(),.:]/, | |
| 'operator': /[?&|]/ | |
| } | |
| }, | |
| 'import': [ | |
| { | |
| pattern: RegExp(/(\bimport\s+)/.source + classNamePrefix + /(?:[A-Z]\w*|\*)(?=\s*;)/.source), | |
| lookbehind: true, | |
| inside: { | |
| 'namespace': className.inside.namespace, | |
| 'punctuation': /\./, | |
| 'operator': /\*/, | |
| 'class-name': /\w+/ | |
| } | |
| }, | |
| { | |
| pattern: RegExp(/(\bimport\s+static\s+)/.source + classNamePrefix + /(?:\w+|\*)(?=\s*;)/.source), | |
| lookbehind: true, | |
| alias: 'static', | |
| inside: { | |
| 'namespace': className.inside.namespace, | |
| 'static': /\b\w+$/, | |
| 'punctuation': /\./, | |
| 'operator': /\*/, | |
| 'class-name': /\w+/ | |
| } | |
| } | |
| ], | |
| 'namespace': { | |
| 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 () { | |
| return keywords.source; | |
| })), | |
| lookbehind: true, | |
| inside: { 'punctuation': /\./ } | |
| } | |
| }); | |
| }(Prism)); | |
| Prism.languages.javascript = Prism.languages.extend('clike', { | |
| 'class-name': [ | |
| Prism.languages.clike['class-name'], | |
| { | |
| pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/, | |
| lookbehind: true | |
| } | |
| ], | |
| 'keyword': [ | |
| { | |
| pattern: /((?:^|\})\s*)catch\b/, | |
| lookbehind: true | |
| }, | |
| { | |
| 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/, | |
| lookbehind: true | |
| } | |
| ], | |
| 'function': /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/, | |
| 'number': { | |
| 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), | |
| lookbehind: true | |
| }, | |
| 'operator': /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/ | |
| }); | |
| Prism.languages.javascript['class-name'][0].pattern = /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/; | |
| Prism.languages.insertBefore('javascript', 'keyword', { | |
| 'regex': { | |
| 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), | |
| lookbehind: true, | |
| greedy: true, | |
| inside: { | |
| 'regex-source': { | |
| pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/, | |
| lookbehind: true, | |
| alias: 'language-regex', | |
| inside: Prism.languages.regex | |
| }, | |
| 'regex-delimiter': /^\/|\/$/, | |
| 'regex-flags': /^[a-z]+$/ | |
| } | |
| }, | |
| 'function-variable': { | |
| 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*=>))/, | |
| alias: 'function' | |
| }, | |
| 'parameter': [ | |
| { | |
| pattern: /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/, | |
| lookbehind: true, | |
| inside: Prism.languages.javascript | |
| }, | |
| { | |
| pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i, | |
| lookbehind: true, | |
| inside: Prism.languages.javascript | |
| }, | |
| { | |
| pattern: /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/, | |
| lookbehind: true, | |
| inside: Prism.languages.javascript | |
| }, | |
| { | |
| 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*\{)/, | |
| lookbehind: true, | |
| inside: Prism.languages.javascript | |
| } | |
| ], | |
| 'constant': /\b[A-Z](?:[A-Z_]|\dx?)*\b/ | |
| }); | |
| Prism.languages.insertBefore('javascript', 'string', { | |
| 'hashbang': { | |
| pattern: /^#!.*/, | |
| greedy: true, | |
| alias: 'comment' | |
| }, | |
| 'template-string': { | |
| pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/, | |
| greedy: true, | |
| inside: { | |
| 'template-punctuation': { | |
| pattern: /^`|`$/, | |
| alias: 'string' | |
| }, | |
| 'interpolation': { | |
| pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/, | |
| lookbehind: true, | |
| inside: { | |
| 'interpolation-punctuation': { | |
| pattern: /^\$\{|\}$/, | |
| alias: 'punctuation' | |
| }, | |
| rest: Prism.languages.javascript | |
| } | |
| }, | |
| 'string': /[\s\S]+/ | |
| } | |
| }, | |
| 'string-property': { | |
| pattern: /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m, | |
| lookbehind: true, | |
| greedy: true, | |
| alias: 'property' | |
| } | |
| }); | |
| Prism.languages.insertBefore('javascript', 'operator', { | |
| 'literal-property': { | |
| pattern: /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m, | |
| lookbehind: true, | |
| alias: 'property' | |
| } | |
| }); | |
| if (Prism.languages.markup) { | |
| Prism.languages.markup.tag.addInlined('script', 'javascript'); | |
| 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'); | |
| } | |
| Prism.languages.js = Prism.languages.javascript; | |
| Prism.languages.markup = { | |
| 'comment': { | |
| pattern: /<!--(?:(?!<!--)[\s\S])*?-->/, | |
| greedy: true | |
| }, | |
| 'prolog': { | |
| pattern: /<\?[\s\S]+?\?>/, | |
| greedy: true | |
| }, | |
| 'doctype': { | |
| pattern: /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i, | |
| greedy: true, | |
| inside: { | |
| 'internal-subset': { | |
| pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/, | |
| lookbehind: true, | |
| greedy: true, | |
| inside: null | |
| }, | |
| 'string': { | |
| pattern: /"[^"]*"|'[^']*'/, | |
| greedy: true | |
| }, | |
| 'punctuation': /^<!|>$|[[\]]/, | |
| 'doctype-tag': /^DOCTYPE/i, | |
| 'name': /[^\s<>'"]+/ | |
| } | |
| }, | |
| 'cdata': { | |
| pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i, | |
| greedy: true | |
| }, | |
| 'tag': { | |
| pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/, | |
| greedy: true, | |
| inside: { | |
| 'tag': { | |
| pattern: /^<\/?[^\s>\/]+/, | |
| inside: { | |
| 'punctuation': /^<\/?/, | |
| 'namespace': /^[^\s>\/:]+:/ | |
| } | |
| }, | |
| 'special-attr': [], | |
| 'attr-value': { | |
| pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/, | |
| inside: { | |
| 'punctuation': [ | |
| { | |
| pattern: /^=/, | |
| alias: 'attr-equals' | |
| }, | |
| /"|'/ | |
| ] | |
| } | |
| }, | |
| 'punctuation': /\/?>/, | |
| 'attr-name': { | |
| pattern: /[^\s>\/]+/, | |
| inside: { 'namespace': /^[^\s>\/:]+:/ } | |
| } | |
| } | |
| }, | |
| 'entity': [ | |
| { | |
| pattern: /&[\da-z]{1,8};/i, | |
| alias: 'named-entity' | |
| }, | |
| /&#x?[\da-f]{1,8};/i | |
| ] | |
| }; | |
| Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] = Prism.languages.markup['entity']; | |
| Prism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup; | |
| Prism.hooks.add('wrap', function (env) { | |
| if (env.type === 'entity') { | |
| env.attributes['title'] = env.content.replace(/&/, '&'); | |
| } | |
| }); | |
| Object.defineProperty(Prism.languages.markup.tag, 'addInlined', { | |
| value: function addInlined(tagName, lang) { | |
| var includedCdataInside = {}; | |
| includedCdataInside['language-' + lang] = { | |
| pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i, | |
| lookbehind: true, | |
| inside: Prism.languages[lang] | |
| }; | |
| includedCdataInside['cdata'] = /^<!\[CDATA\[|\]\]>$/i; | |
| var inside = { | |
| 'included-cdata': { | |
| pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i, | |
| inside: includedCdataInside | |
| } | |
| }; | |
| inside['language-' + lang] = { | |
| pattern: /[\s\S]+/, | |
| inside: Prism.languages[lang] | |
| }; | |
| var def = {}; | |
| def[tagName] = { | |
| pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function () { | |
| return tagName; | |
| }), 'i'), | |
| lookbehind: true, | |
| greedy: true, | |
| inside: inside | |
| }; | |
| Prism.languages.insertBefore('markup', 'cdata', def); | |
| } | |
| }); | |
| Object.defineProperty(Prism.languages.markup.tag, 'addAttribute', { | |
| value: function (attrName, lang) { | |
| Prism.languages.markup.tag.inside['special-attr'].push({ | |
| pattern: RegExp(/(^|["'\s])/.source + '(?:' + attrName + ')' + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source, 'i'), | |
| lookbehind: true, | |
| inside: { | |
| 'attr-name': /^[^\s=]+/, | |
| 'attr-value': { | |
| pattern: /=[\s\S]+/, | |
| inside: { | |
| 'value': { | |
| pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/, | |
| lookbehind: true, | |
| alias: [ | |
| lang, | |
| 'language-' + lang | |
| ], | |
| inside: Prism.languages[lang] | |
| }, | |
| 'punctuation': [ | |
| { | |
| pattern: /^=/, | |
| alias: 'attr-equals' | |
| }, | |
| /"|'/ | |
| ] | |
| } | |
| } | |
| } | |
| }); | |
| } | |
| }); | |
| Prism.languages.html = Prism.languages.markup; | |
| Prism.languages.mathml = Prism.languages.markup; | |
| Prism.languages.svg = Prism.languages.markup; | |
| Prism.languages.xml = Prism.languages.extend('markup', {}); | |
| Prism.languages.ssml = Prism.languages.xml; | |
| Prism.languages.atom = Prism.languages.xml; | |
| Prism.languages.rss = Prism.languages.xml; | |
| (function (Prism) { | |
| var comment = /\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/; | |
| var constant = [ | |
| { | |
| pattern: /\b(?:false|true)\b/i, | |
| alias: 'boolean' | |
| }, | |
| { | |
| pattern: /(::\s*)\b[a-z_]\w*\b(?!\s*\()/i, | |
| greedy: true, | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: /(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i, | |
| greedy: true, | |
| lookbehind: true | |
| }, | |
| /\b(?:null)\b/i, | |
| /\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/ | |
| ]; | |
| 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; | |
| var operator = /<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/; | |
| var punctuation = /[{}\[\](),:;]/; | |
| Prism.languages.php = { | |
| 'delimiter': { | |
| pattern: /\?>$|^<\?(?:php(?=\s)|=)?/i, | |
| alias: 'important' | |
| }, | |
| 'comment': comment, | |
| 'variable': /\$+(?:\w+\b|(?=\{))/, | |
| 'package': { | |
| pattern: /(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i, | |
| lookbehind: true, | |
| inside: { 'punctuation': /\\/ } | |
| }, | |
| 'class-name-definition': { | |
| pattern: /(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i, | |
| lookbehind: true, | |
| alias: 'class-name' | |
| }, | |
| 'function-definition': { | |
| pattern: /(\bfunction\s+)[a-z_]\w*(?=\s*\()/i, | |
| lookbehind: true, | |
| alias: 'function' | |
| }, | |
| 'keyword': [ | |
| { | |
| pattern: /(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i, | |
| alias: 'type-casting', | |
| greedy: true, | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: /([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i, | |
| alias: 'type-hint', | |
| greedy: true, | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: /(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i, | |
| alias: 'return-type', | |
| greedy: true, | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: /\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i, | |
| alias: 'type-declaration', | |
| greedy: true | |
| }, | |
| { | |
| pattern: /(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i, | |
| alias: 'type-declaration', | |
| greedy: true, | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: /\b(?:parent|self|static)(?=\s*::)/i, | |
| alias: 'static-context', | |
| greedy: true | |
| }, | |
| { | |
| pattern: /(\byield\s+)from\b/i, | |
| lookbehind: true | |
| }, | |
| /\bclass\b/i, | |
| { | |
| 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, | |
| lookbehind: true | |
| } | |
| ], | |
| 'argument-name': { | |
| pattern: /([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i, | |
| lookbehind: true | |
| }, | |
| 'class-name': [ | |
| { | |
| pattern: /(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i, | |
| greedy: true, | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: /(\|\s*)\b[a-z_]\w*(?!\\)\b/i, | |
| greedy: true, | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: /\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i, | |
| greedy: true | |
| }, | |
| { | |
| pattern: /(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i, | |
| alias: 'class-name-fully-qualified', | |
| greedy: true, | |
| lookbehind: true, | |
| inside: { 'punctuation': /\\/ } | |
| }, | |
| { | |
| pattern: /(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i, | |
| alias: 'class-name-fully-qualified', | |
| greedy: true, | |
| inside: { 'punctuation': /\\/ } | |
| }, | |
| { | |
| pattern: /(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i, | |
| alias: 'class-name-fully-qualified', | |
| greedy: true, | |
| lookbehind: true, | |
| inside: { 'punctuation': /\\/ } | |
| }, | |
| { | |
| pattern: /\b[a-z_]\w*(?=\s*\$)/i, | |
| alias: 'type-declaration', | |
| greedy: true | |
| }, | |
| { | |
| pattern: /(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i, | |
| alias: [ | |
| 'class-name-fully-qualified', | |
| 'type-declaration' | |
| ], | |
| greedy: true, | |
| inside: { 'punctuation': /\\/ } | |
| }, | |
| { | |
| pattern: /\b[a-z_]\w*(?=\s*::)/i, | |
| alias: 'static-context', | |
| greedy: true | |
| }, | |
| { | |
| pattern: /(?:\\?\b[a-z_]\w*)+(?=\s*::)/i, | |
| alias: [ | |
| 'class-name-fully-qualified', | |
| 'static-context' | |
| ], | |
| greedy: true, | |
| inside: { 'punctuation': /\\/ } | |
| }, | |
| { | |
| pattern: /([(,?]\s*)[a-z_]\w*(?=\s*\$)/i, | |
| alias: 'type-hint', | |
| greedy: true, | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: /([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i, | |
| alias: [ | |
| 'class-name-fully-qualified', | |
| 'type-hint' | |
| ], | |
| greedy: true, | |
| lookbehind: true, | |
| inside: { 'punctuation': /\\/ } | |
| }, | |
| { | |
| pattern: /(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i, | |
| alias: 'return-type', | |
| greedy: true, | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: /(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i, | |
| alias: [ | |
| 'class-name-fully-qualified', | |
| 'return-type' | |
| ], | |
| greedy: true, | |
| lookbehind: true, | |
| inside: { 'punctuation': /\\/ } | |
| } | |
| ], | |
| 'constant': constant, | |
| 'function': { | |
| pattern: /(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i, | |
| lookbehind: true, | |
| inside: { 'punctuation': /\\/ } | |
| }, | |
| 'property': { | |
| pattern: /(->\s*)\w+/, | |
| lookbehind: true | |
| }, | |
| 'number': number, | |
| 'operator': operator, | |
| 'punctuation': punctuation | |
| }; | |
| var string_interpolation = { | |
| pattern: /\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/, | |
| lookbehind: true, | |
| inside: Prism.languages.php | |
| }; | |
| var string = [ | |
| { | |
| pattern: /<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/, | |
| alias: 'nowdoc-string', | |
| greedy: true, | |
| inside: { | |
| 'delimiter': { | |
| pattern: /^<<<'[^']+'|[a-z_]\w*;$/i, | |
| alias: 'symbol', | |
| inside: { 'punctuation': /^<<<'?|[';]$/ } | |
| } | |
| } | |
| }, | |
| { | |
| pattern: /<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i, | |
| alias: 'heredoc-string', | |
| greedy: true, | |
| inside: { | |
| 'delimiter': { | |
| pattern: /^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i, | |
| alias: 'symbol', | |
| inside: { 'punctuation': /^<<<"?|[";]$/ } | |
| }, | |
| 'interpolation': string_interpolation | |
| } | |
| }, | |
| { | |
| pattern: /`(?:\\[\s\S]|[^\\`])*`/, | |
| alias: 'backtick-quoted-string', | |
| greedy: true | |
| }, | |
| { | |
| pattern: /'(?:\\[\s\S]|[^\\'])*'/, | |
| alias: 'single-quoted-string', | |
| greedy: true | |
| }, | |
| { | |
| pattern: /"(?:\\[\s\S]|[^\\"])*"/, | |
| alias: 'double-quoted-string', | |
| greedy: true, | |
| inside: { 'interpolation': string_interpolation } | |
| } | |
| ]; | |
| Prism.languages.insertBefore('php', 'variable', { | |
| 'string': string, | |
| 'attribute': { | |
| pattern: /#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im, | |
| greedy: true, | |
| inside: { | |
| 'attribute-content': { | |
| pattern: /^(#\[)[\s\S]+(?=\]$)/, | |
| lookbehind: true, | |
| inside: { | |
| 'comment': comment, | |
| 'string': string, | |
| 'attribute-class-name': [ | |
| { | |
| pattern: /([^:]|^)\b[a-z_]\w*(?!\\)\b/i, | |
| alias: 'class-name', | |
| greedy: true, | |
| lookbehind: true | |
| }, | |
| { | |
| pattern: /([^:]|^)(?:\\?\b[a-z_]\w*)+/i, | |
| alias: [ | |
| 'class-name', | |
| 'class-name-fully-qualified' | |
| ], | |
| greedy: true, | |
| lookbehind: true, | |
| inside: { 'punctuation': /\\/ } | |
| } | |
| ], | |
| 'constant': constant, | |
| 'number': number, | |
| 'operator': operator, | |
| 'punctuation': punctuation | |
| } | |
| }, | |
| 'delimiter': { | |
| pattern: /^#\[|\]$/, | |
| alias: 'punctuation' | |
| } | |
| } | |
| } | |
| }); | |
| Prism.hooks.add('before-tokenize', function (env) { | |
| if (!/<\?/.test(env.code)) { | |
| return; | |
| } | |
| var phpPattern = /<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g; | |
| Prism.languages['markup-templating'].buildPlaceholders(env, 'php', phpPattern); | |
| }); | |
| Prism.hooks.add('after-tokenize', function (env) { | |
| Prism.languages['markup-templating'].tokenizePlaceholders(env, 'php'); | |
| }); | |
| }(Prism)); | |
| Prism.languages.python = { | |
| 'comment': { | |
| pattern: /(^|[^\\])#.*/, | |
| lookbehind: true, | |
| greedy: true | |
| }, | |
| 'string-interpolation': { | |
| pattern: /(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i, | |
| greedy: true, | |
| inside: { | |
| 'interpolation': { | |
| pattern: /((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/, | |
| lookbehind: true, | |
| inside: { | |
| 'format-spec': { | |
| pattern: /(:)[^:(){}]+(?=\}$)/, | |
| lookbehind: true | |
| }, | |
| 'conversion-option': { | |
| pattern: //, | |
| alias: 'punctuation' | |
| }, | |
| rest: null | |
| } | |
| }, | |
| 'string': /[\s\S]+/ | |
| } | |
| }, | |
| 'triple-quoted-string': { | |
| pattern: /(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i, | |
| greedy: true, | |
| alias: 'string' | |
| }, | |
| 'string': { | |
| pattern: /(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i, | |
| greedy: true | |
| }, | |
| 'function': { | |
| pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g, | |
| lookbehind: true | |
| }, | |
| 'class-name': { | |
| pattern: /(\bclass\s+)\w+/i, | |
| lookbehind: true | |
| }, | |
| 'decorator': { | |
| pattern: /(^[\t ]*)@\w+(?:\.\w+)*/m, | |
| lookbehind: true, | |
| alias: [ | |
| 'annotation', | |
| 'punctuation' | |
| ], | |
| inside: { 'punctuation': /\./ } | |
| }, | |
| '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/, | |
| '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/, | |
| 'boolean': /\b(?:False|None|True)\b/, | |
| '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, | |
| 'operator': /[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/, | |
| 'punctuation': /[{}[\];(),.:]/ | |
| }; | |
| Prism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python; | |
| Prism.languages.py = Prism.languages.python; | |
| (function (Prism) { | |
| Prism.languages.ruby = Prism.languages.extend('clike', { | |
| 'comment': { | |
| pattern: /#.*|^=begin\s[\s\S]*?^=end/m, | |
| greedy: true | |
| }, | |
| 'class-name': { | |
| pattern: /(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/, | |
| lookbehind: true, | |
| inside: { 'punctuation': /[.\\]/ } | |
| }, | |
| '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/, | |
| 'operator': /\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/, | |
| 'punctuation': /[(){}[\].,;]/ | |
| }); | |
| Prism.languages.insertBefore('ruby', 'operator', { | |
| 'double-colon': { | |
| pattern: /::/, | |
| alias: 'punctuation' | |
| } | |
| }); | |
| var interpolation = { | |
| pattern: /((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/, | |
| lookbehind: true, | |
| inside: { | |
| 'content': { | |
| pattern: /^(#\{)[\s\S]+(?=\}$)/, | |
| lookbehind: true, | |
| inside: Prism.languages.ruby | |
| }, | |
| 'delimiter': { | |
| pattern: /^#\{|\}$/, | |
| alias: 'punctuation' | |
| } | |
| } | |
| }; | |
| delete Prism.languages.ruby.function; | |
| var percentExpression = '(?:' + [ | |
| /([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source, | |
| /\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source, | |
| /\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source, | |
| /\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source, | |
| /<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source | |
| ].join('|') + ')'; | |
| var symbolName = /(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source; | |
| Prism.languages.insertBefore('ruby', 'keyword', { | |
| 'regex-literal': [ | |
| { | |
| pattern: RegExp(/%r/.source + percentExpression + /[egimnosux]{0,6}/.source), | |
| greedy: true, | |
| inside: { | |
| 'interpolation': interpolation, | |
| 'regex': /[\s\S]+/ | |
| } | |
| }, | |
| { | |
| pattern: /(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/, | |
| lookbehind: true, | |
| greedy: true, | |
| inside: { | |
| 'interpolation': interpolation, | |
| 'regex': /[\s\S]+/ | |
| } | |
| } | |
| ], | |
| 'variable': /[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/, | |
| 'symbol': [ | |
| { | |
| pattern: RegExp(/(^|[^:]):/.source + symbolName), | |
| lookbehind: true, | |
| greedy: true | |
| }, | |
| { | |
| pattern: RegExp(/([\r\n{(,][ \t]*)/.source + symbolName + /(?=:(?!:))/.source), | |
| lookbehind: true, | |
| greedy: true | |
| } | |
| ], | |
| 'method-definition': { | |
| pattern: /(\bdef\s+)\w+(?:\s*\.\s*\w+)?/, | |
| lookbehind: true, | |
| inside: { | |
| 'function': /\b\w+$/, | |
| 'keyword': /^self\b/, | |
| 'class-name': /^\w+/, | |
| 'punctuation': /\./ | |
| } | |
| } | |
| }); | |
| Prism.languages.insertBefore('ruby', 'string', { | |
| 'string-literal': [ | |
| { | |
| pattern: RegExp(/%[qQiIwWs]?/.source + percentExpression), | |
| greedy: true, | |
| inside: { | |
| 'interpolation': interpolation, | |
| 'string': /[\s\S]+/ | |
| } | |
| }, | |
| { | |
| pattern: /("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/, | |
| greedy: true, | |
| inside: { | |
| 'interpolation': interpolation, | |
| 'string': /[\s\S]+/ | |
| } | |
| }, | |
| { | |
| pattern: /<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i, | |
| alias: 'heredoc-string', | |
| greedy: true, | |
| inside: { | |
| 'delimiter': { | |
| pattern: /^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i, | |
| inside: { | |
| 'symbol': /\b\w+/, | |
| 'punctuation': /^<<[-~]?/ | |
| } | |
| }, | |
| 'interpolation': interpolation, | |
| 'string': /[\s\S]+/ | |
| } | |
| }, | |
| { | |
| pattern: /<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i, | |
| alias: 'heredoc-string', | |
| greedy: true, | |
| inside: { | |
| 'delimiter': { | |
| pattern: /^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i, | |
| inside: { | |
| 'symbol': /\b\w+/, | |
| 'punctuation': /^<<[-~]?'|'$/ | |
| } | |
| }, | |
| 'string': /[\s\S]+/ | |
| } | |
| } | |
| ], | |
| 'command-literal': [ | |
| { | |
| pattern: RegExp(/%x/.source + percentExpression), | |
| greedy: true, | |
| inside: { | |
| 'interpolation': interpolation, | |
| 'command': { | |
| pattern: /[\s\S]+/, | |
| alias: 'string' | |
| } | |
| } | |
| }, | |
| { | |
| pattern: /`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/, | |
| greedy: true, | |
| inside: { | |
| 'interpolation': interpolation, | |
| 'command': { | |
| pattern: /[\s\S]+/, | |
| alias: 'string' | |
| } | |
| } | |
| } | |
| ] | |
| }); | |
| delete Prism.languages.ruby.string; | |
| Prism.languages.insertBefore('ruby', 'number', { | |
| '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/, | |
| 'constant': /\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/ | |
| }); | |
| Prism.languages.rb = Prism.languages.ruby; | |
| }(Prism)); | |
| window.Prism = oldprism; | |
| return Prism; | |
| }(undefined, undefined); | |
| const option = name => editor => editor.options.get(name); | |
| const register$2 = editor => { | |
| const registerOption = editor.options.register; | |
| registerOption('codesample_languages', { processor: 'object[]' }); | |
| registerOption('codesample_global_prismjs', { | |
| processor: 'boolean', | |
| default: false | |
| }); | |
| }; | |
| const getLanguages$1 = option('codesample_languages'); | |
| const useGlobalPrismJS = option('codesample_global_prismjs'); | |
| const get = editor => Global.Prism && useGlobalPrismJS(editor) ? Global.Prism : prismjs; | |
| const isCodeSample = elm => { | |
| return isNonNullable(elm) && elm.nodeName === 'PRE' && elm.className.indexOf('language-') !== -1; | |
| }; | |
| const getSelectedCodeSample = editor => { | |
| const node = editor.selection ? editor.selection.getNode() : null; | |
| return isCodeSample(node) ? Optional.some(node) : Optional.none(); | |
| }; | |
| const insertCodeSample = (editor, language, code) => { | |
| const dom = editor.dom; | |
| editor.undoManager.transact(() => { | |
| const node = getSelectedCodeSample(editor); | |
| code = global$1.DOM.encode(code); | |
| return node.fold(() => { | |
| editor.insertContent('<pre id="__new" class="language-' + language + '">' + code + '</pre>'); | |
| const newPre = dom.select('#__new')[0]; | |
| dom.setAttrib(newPre, 'id', null); | |
| editor.selection.select(newPre); | |
| }, n => { | |
| dom.setAttrib(n, 'class', 'language-' + language); | |
| n.innerHTML = code; | |
| get(editor).highlightElement(n); | |
| editor.selection.select(n); | |
| }); | |
| }); | |
| }; | |
| const getCurrentCode = editor => { | |
| const node = getSelectedCodeSample(editor); | |
| return node.bind(n => Optional.from(n.textContent)).getOr(''); | |
| }; | |
| const getLanguages = editor => { | |
| const defaultLanguages = [ | |
| { | |
| text: 'HTML/XML', | |
| value: 'markup' | |
| }, | |
| { | |
| text: 'JavaScript', | |
| value: 'javascript' | |
| }, | |
| { | |
| text: 'CSS', | |
| value: 'css' | |
| }, | |
| { | |
| text: 'PHP', | |
| value: 'php' | |
| }, | |
| { | |
| text: 'Ruby', | |
| value: 'ruby' | |
| }, | |
| { | |
| text: 'Python', | |
| value: 'python' | |
| }, | |
| { | |
| text: 'Java', | |
| value: 'java' | |
| }, | |
| { | |
| text: 'C', | |
| value: 'c' | |
| }, | |
| { | |
| text: 'C#', | |
| value: 'csharp' | |
| }, | |
| { | |
| text: 'C++', | |
| value: 'cpp' | |
| } | |
| ]; | |
| const customLanguages = getLanguages$1(editor); | |
| return customLanguages ? customLanguages : defaultLanguages; | |
| }; | |
| const getCurrentLanguage = (editor, fallback) => { | |
| const node = getSelectedCodeSample(editor); | |
| return node.fold(() => fallback, n => { | |
| const matches = n.className.match(/language-(\w+)/); | |
| return matches ? matches[1] : fallback; | |
| }); | |
| }; | |
| const open = editor => { | |
| const languages = getLanguages(editor); | |
| const defaultLanguage = head(languages).fold(constant(''), l => l.value); | |
| const currentLanguage = getCurrentLanguage(editor, defaultLanguage); | |
| const currentCode = getCurrentCode(editor); | |
| editor.windowManager.open({ | |
| title: 'Insert/Edit Code Sample', | |
| size: 'large', | |
| body: { | |
| type: 'panel', | |
| items: [ | |
| { | |
| type: 'selectbox', | |
| name: 'language', | |
| label: 'Language', | |
| items: languages | |
| }, | |
| { | |
| type: 'textarea', | |
| name: 'code', | |
| label: 'Code view' | |
| } | |
| ] | |
| }, | |
| buttons: [ | |
| { | |
| type: 'cancel', | |
| name: 'cancel', | |
| text: 'Cancel' | |
| }, | |
| { | |
| type: 'submit', | |
| name: 'save', | |
| text: 'Save', | |
| primary: true | |
| } | |
| ], | |
| initialData: { | |
| language: currentLanguage, | |
| code: currentCode | |
| }, | |
| onSubmit: api => { | |
| const data = api.getData(); | |
| insertCodeSample(editor, data.language, data.code); | |
| api.close(); | |
| } | |
| }); | |
| }; | |
| const register$1 = editor => { | |
| editor.addCommand('codesample', () => { | |
| const node = editor.selection.getNode(); | |
| if (editor.selection.isCollapsed() || isCodeSample(node)) { | |
| open(editor); | |
| } else { | |
| editor.formatter.toggle('code'); | |
| } | |
| }); | |
| }; | |
| const blank = r => s => s.replace(r, ''); | |
| const trim = blank(/^\s+|\s+$/g); | |
| var global = tinymce.util.Tools.resolve('tinymce.util.Tools'); | |
| const setup = editor => { | |
| editor.on('PreProcess', e => { | |
| const dom = editor.dom; | |
| const pres = dom.select('pre[contenteditable=false]', e.node); | |
| global.each(global.grep(pres, isCodeSample), elm => { | |
| const code = elm.textContent; | |
| dom.setAttrib(elm, 'class', trim(dom.getAttrib(elm, 'class'))); | |
| dom.setAttrib(elm, 'contentEditable', null); | |
| dom.setAttrib(elm, 'data-mce-highlighted', null); | |
| let child; | |
| while (child = elm.firstChild) { | |
| elm.removeChild(child); | |
| } | |
| const codeElm = dom.add(elm, 'code'); | |
| codeElm.textContent = code; | |
| }); | |
| }); | |
| editor.on('SetContent', () => { | |
| const dom = editor.dom; | |
| const unprocessedCodeSamples = global.grep(dom.select('pre'), elm => { | |
| return isCodeSample(elm) && dom.getAttrib(elm, 'data-mce-highlighted') !== 'true'; | |
| }); | |
| if (unprocessedCodeSamples.length) { | |
| editor.undoManager.transact(() => { | |
| global.each(unprocessedCodeSamples, elm => { | |
| var _a; | |
| global.each(dom.select('br', elm), elm => { | |
| dom.replace(editor.getDoc().createTextNode('\n'), elm); | |
| }); | |
| elm.innerHTML = dom.encode((_a = elm.textContent) !== null && _a !== void 0 ? _a : ''); | |
| get(editor).highlightElement(elm); | |
| dom.setAttrib(elm, 'data-mce-highlighted', true); | |
| elm.className = trim(elm.className); | |
| }); | |
| }); | |
| } | |
| }); | |
| editor.on('PreInit', () => { | |
| editor.parser.addNodeFilter('pre', nodes => { | |
| var _a; | |
| for (let i = 0, l = nodes.length; i < l; i++) { | |
| const node = nodes[i]; | |
| const isCodeSample = ((_a = node.attr('class')) !== null && _a !== void 0 ? _a : '').indexOf('language-') !== -1; | |
| if (isCodeSample) { | |
| node.attr('contenteditable', 'false'); | |
| node.attr('data-mce-highlighted', 'false'); | |
| } | |
| } | |
| }); | |
| }); | |
| }; | |
| const isCodeSampleSelection = editor => { | |
| const node = editor.selection.getStart(); | |
| return editor.dom.is(node, 'pre[class*="language-"]'); | |
| }; | |
| const register = editor => { | |
| const onAction = () => editor.execCommand('codesample'); | |
| editor.ui.registry.addToggleButton('codesample', { | |
| icon: 'code-sample', | |
| tooltip: 'Insert/edit code sample', | |
| onAction, | |
| onSetup: api => { | |
| const nodeChangeHandler = () => { | |
| api.setActive(isCodeSampleSelection(editor)); | |
| }; | |
| editor.on('NodeChange', nodeChangeHandler); | |
| return () => editor.off('NodeChange', nodeChangeHandler); | |
| } | |
| }); | |
| editor.ui.registry.addMenuItem('codesample', { | |
| text: 'Code sample...', | |
| icon: 'code-sample', | |
| onAction | |
| }); | |
| }; | |
| var Plugin = () => { | |
| global$2.add('codesample', editor => { | |
| register$2(editor); | |
| setup(editor); | |
| register(editor); | |
| register$1(editor); | |
| editor.on('dblclick', ev => { | |
| if (isCodeSample(ev.target)) { | |
| open(editor); | |
| } | |
| }); | |
| }); | |
| }; | |
| Plugin(); | |
| })(); | |