123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304 |
- 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.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'
- },
- {
- pattern: /^(\s*)["']|["']$/,
- lookbehind: true
- }
- ]
- }
- },
- '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;
- // Plugin to make entity title show the real entity, idea by Roman Komarov
- Prism.hooks.add('wrap', function (env) {
- if (env.type === 'entity') {
- env.attributes['title'] = env.content.replace(/&/, '&');
- }
- });
- Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {
- /**
- * Adds an inlined language to markup.
- *
- * An example of an inlined language is CSS with `<style>` tags.
- *
- * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as
- * case insensitive.
- * @param {string} lang The language key.
- * @example
- * addInlined('style', 'css');
- */
- 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 string = /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;
- Prism.languages.css = {
- 'comment': /\/\*[\s\S]*?\*\//,
- 'atrule': {
- pattern: RegExp('@[\\w-](?:' + /[^;{\s"']|\s+(?!\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\s*\{))/.source),
- 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));
- 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': /[{}[\];(),.:]/
- };
- 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.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;
- Prism.languages.sql = {
- 'comment': {
- pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,
- lookbehind: true
- },
- 'variable': [
- {
- pattern: /@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,
- greedy: true
- },
- /@[\w.$]+/
- ],
- 'string': {
- pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,
- greedy: true,
- lookbehind: true
- },
- 'identifier': {
- pattern: /(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,
- greedy: true,
- lookbehind: true,
- inside: {
- 'punctuation': /^`|`$/
- }
- },
- 'function': /\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i, // Should we highlight user defined functions too?
- 'keyword': /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,
- 'boolean': /\b(?:FALSE|NULL|TRUE)\b/i,
- 'number': /\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,
- 'operator': /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,
- 'punctuation': /[;[\]()`,.]/
- };
- Prism.languages['visual-basic'] = {
- 'comment': {
- pattern: /(?:['‘’]|REM\b)(?:[^\r\n_]|_(?:\r\n?|\n)?)*/i,
- inside: {
- 'keyword': /^REM/i
- }
- },
- 'directive': {
- pattern: /#(?:Const|Else|ElseIf|End|ExternalChecksum|ExternalSource|If|Region)(?:\b_[ \t]*(?:\r\n?|\n)|.)+/i,
- alias: 'property',
- greedy: true
- },
- 'string': {
- pattern: /\$?["“”](?:["“”]{2}|[^"“”])*["“”]C?/i,
- greedy: true
- },
- 'date': {
- pattern: /#[ \t]*(?:\d+([/-])\d+\1\d+(?:[ \t]+(?:\d+[ \t]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[ \t]*(?:AM|PM))?))?|\d+[ \t]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[ \t]*(?:AM|PM))?)[ \t]*#/i,
- alias: 'number'
- },
- 'number': /(?:(?:\b\d+(?:\.\d+)?|\.\d+)(?:E[+-]?\d+)?|&[HO][\dA-F]+)(?:[FRD]|U?[ILS])?/i,
- 'boolean': /\b(?:False|Nothing|True)\b/i,
- 'keyword': /\b(?:AddHandler|AddressOf|Alias|And(?:Also)?|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|C(?:Bool|Byte|Char|Date|Dbl|Dec|Int|Lng|Obj|SByte|Short|Sng|Str|Type|UInt|ULng|UShort)|Char|Class|Const|Continue|Currency|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else(?:If)?|End(?:If)?|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get(?:Type|XMLNamespace)?|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|Must(?:Inherit|Override)|My(?:Base|Class)|Namespace|Narrowing|New|Next|Not(?:Inheritable|Overridable)?|Object|Of|On|Operator|Option(?:al)?|Or(?:Else)?|Out|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TryCast|Type|TypeOf|U(?:Integer|Long|Short)|Until|Using|Variant|Wend|When|While|Widening|With(?:Events)?|WriteOnly|Xor)\b/i,
- 'operator': /[+\-*/\\^<=>&#@$%!]|\b_(?=[ \t]*[\r\n])/,
- 'punctuation': /[{}().,:?]/
- };
- Prism.languages.vb = Prism.languages['visual-basic'];
- Prism.languages.vba = Prism.languages['visual-basic'];
- (function () {
- if (typeof Prism === 'undefined' || typeof document === 'undefined') {
- return;
- }
- /**
- * Plugin name which is used as a class name for <pre> which is activating the plugin
- *
- * @type {string}
- */
- var PLUGIN_NAME = 'line-numbers';
- /**
- * Regular expression used for determining line breaks
- *
- * @type {RegExp}
- */
- var NEW_LINE_EXP = /\n(?!$)/g;
- /**
- * Global exports
- */
- var config = Prism.plugins.lineNumbers = {
- /**
- * Get node for provided line number
- *
- * @param {Element} element pre element
- * @param {number} number line number
- * @returns {Element|undefined}
- */
- getLine: function (element, number) {
- if (element.tagName !== 'PRE' || !element.classList.contains(PLUGIN_NAME)) {
- return;
- }
- var lineNumberRows = element.querySelector('.line-numbers-rows');
- if (!lineNumberRows) {
- return;
- }
- var lineNumberStart = parseInt(element.getAttribute('data-start'), 10) || 1;
- var lineNumberEnd = lineNumberStart + (lineNumberRows.children.length - 1);
- if (number < lineNumberStart) {
- number = lineNumberStart;
- }
- if (number > lineNumberEnd) {
- number = lineNumberEnd;
- }
- var lineIndex = number - lineNumberStart;
- return lineNumberRows.children[lineIndex];
- },
- /**
- * Resizes the line numbers of the given element.
- *
- * This function will not add line numbers. It will only resize existing ones.
- *
- * @param {HTMLElement} element A `<pre>` element with line numbers.
- * @returns {void}
- */
- resize: function (element) {
- resizeElements([element]);
- },
- /**
- * Whether the plugin can assume that the units font sizes and margins are not depended on the size of
- * the current viewport.
- *
- * Setting this to `true` will allow the plugin to do certain optimizations for better performance.
- *
- * Set this to `false` if you use any of the following CSS units: `vh`, `vw`, `vmin`, `vmax`.
- *
- * @type {boolean}
- */
- assumeViewportIndependence: true
- };
- /**
- * Resizes the given elements.
- *
- * @param {HTMLElement[]} elements
- */
- function resizeElements(elements) {
- elements = elements.filter(function (e) {
- var codeStyles = getStyles(e);
- var whiteSpace = codeStyles['white-space'];
- return whiteSpace === 'pre-wrap' || whiteSpace === 'pre-line';
- });
- if (elements.length == 0) {
- return;
- }
- var infos = elements.map(function (element) {
- var codeElement = element.querySelector('code');
- var lineNumbersWrapper = element.querySelector('.line-numbers-rows');
- if (!codeElement || !lineNumbersWrapper) {
- return undefined;
- }
- /** @type {HTMLElement} */
- var lineNumberSizer = element.querySelector('.line-numbers-sizer');
- var codeLines = codeElement.textContent.split(NEW_LINE_EXP);
- if (!lineNumberSizer) {
- lineNumberSizer = document.createElement('span');
- lineNumberSizer.className = 'line-numbers-sizer';
- codeElement.appendChild(lineNumberSizer);
- }
- lineNumberSizer.innerHTML = '0';
- lineNumberSizer.style.display = 'block';
- var oneLinerHeight = lineNumberSizer.getBoundingClientRect().height;
- lineNumberSizer.innerHTML = '';
- return {
- element: element,
- lines: codeLines,
- lineHeights: [],
- oneLinerHeight: oneLinerHeight,
- sizer: lineNumberSizer,
- };
- }).filter(Boolean);
- infos.forEach(function (info) {
- var lineNumberSizer = info.sizer;
- var lines = info.lines;
- var lineHeights = info.lineHeights;
- var oneLinerHeight = info.oneLinerHeight;
- lineHeights[lines.length - 1] = undefined;
- lines.forEach(function (line, index) {
- if (line && line.length > 1) {
- var e = lineNumberSizer.appendChild(document.createElement('span'));
- e.style.display = 'block';
- e.textContent = line;
- } else {
- lineHeights[index] = oneLinerHeight;
- }
- });
- });
- infos.forEach(function (info) {
- var lineNumberSizer = info.sizer;
- var lineHeights = info.lineHeights;
- var childIndex = 0;
- for (var i = 0; i < lineHeights.length; i++) {
- if (lineHeights[i] === undefined) {
- lineHeights[i] = lineNumberSizer.children[childIndex++].getBoundingClientRect().height;
- }
- }
- });
- infos.forEach(function (info) {
- var lineNumberSizer = info.sizer;
- var wrapper = info.element.querySelector('.line-numbers-rows');
- lineNumberSizer.style.display = 'none';
- lineNumberSizer.innerHTML = '';
- info.lineHeights.forEach(function (height, lineNumber) {
- wrapper.children[lineNumber].style.height = height + 'px';
- });
- });
- }
- /**
- * Returns style declarations for the element
- *
- * @param {Element} element
- */
- function getStyles(element) {
- if (!element) {
- return null;
- }
- return window.getComputedStyle ? getComputedStyle(element) : (element.currentStyle || null);
- }
- var lastWidth = undefined;
- window.addEventListener('resize', function () {
- if (config.assumeViewportIndependence && lastWidth === window.innerWidth) {
- return;
- }
- lastWidth = window.innerWidth;
- resizeElements(Array.prototype.slice.call(document.querySelectorAll('pre.' + PLUGIN_NAME)));
- });
- Prism.hooks.add('complete', function (env) {
- if (!env.code) {
- return;
- }
- var code = /** @type {Element} */ (env.element);
- var pre = /** @type {HTMLElement} */ (code.parentNode);
- // works only for <code> wrapped inside <pre> (not inline)
- if (!pre || !/pre/i.test(pre.nodeName)) {
- return;
- }
- // Abort if line numbers already exists
- if (code.querySelector('.line-numbers-rows')) {
- return;
- }
- // only add line numbers if <code> or one of its ancestors has the `line-numbers` class
- if (!Prism.util.isActive(code, PLUGIN_NAME)) {
- return;
- }
- // Remove the class 'line-numbers' from the <code>
- code.classList.remove(PLUGIN_NAME);
- // Add the class 'line-numbers' to the <pre>
- pre.classList.add(PLUGIN_NAME);
- var match = env.code.match(NEW_LINE_EXP);
- var linesNum = match ? match.length + 1 : 1;
- var lineNumbersWrapper;
- var lines = new Array(linesNum + 1).join('<span></span>');
- lineNumbersWrapper = document.createElement('span');
- lineNumbersWrapper.setAttribute('aria-hidden', 'true');
- lineNumbersWrapper.className = 'line-numbers-rows';
- lineNumbersWrapper.innerHTML = lines;
- if (pre.hasAttribute('data-start')) {
- pre.style.counterReset = 'linenumber ' + (parseInt(pre.getAttribute('data-start'), 10) - 1);
- }
- env.element.appendChild(lineNumbersWrapper);
- resizeElements([pre]);
- Prism.hooks.run('line-numbers', env);
- });
- Prism.hooks.add('line-numbers', function (env) {
- env.plugins = env.plugins || {};
- env.plugins.lineNumbers = true;
- });
- }());
- (function () {
- if (typeof Prism === 'undefined') {
- return;
- }
- var assign = Object.assign || function (obj1, obj2) {
- for (var name in obj2) {
- if (obj2.hasOwnProperty(name)) {
- obj1[name] = obj2[name];
- }
- }
- return obj1;
- };
- function NormalizeWhitespace(defaults) {
- this.defaults = assign({}, defaults);
- }
- function toCamelCase(value) {
- return value.replace(/-(\w)/g, function (match, firstChar) {
- return firstChar.toUpperCase();
- });
- }
- function tabLen(str) {
- var res = 0;
- for (var i = 0; i < str.length; ++i) {
- if (str.charCodeAt(i) == '\t'.charCodeAt(0)) {
- res += 3;
- }
- }
- return str.length + res;
- }
- NormalizeWhitespace.prototype = {
- setDefaults: function (defaults) {
- this.defaults = assign(this.defaults, defaults);
- },
- normalize: function (input, settings) {
- settings = assign(this.defaults, settings);
- for (var name in settings) {
- var methodName = toCamelCase(name);
- if (name !== 'normalize' && methodName !== 'setDefaults' &&
- settings[name] && this[methodName]) {
- input = this[methodName].call(this, input, settings[name]);
- }
- }
- return input;
- },
- /*
- * Normalization methods
- */
- leftTrim: function (input) {
- return input.replace(/^\s+/, '');
- },
- rightTrim: function (input) {
- return input.replace(/\s+$/, '');
- },
- tabsToSpaces: function (input, spaces) {
- spaces = spaces|0 || 4;
- return input.replace(/\t/g, new Array(++spaces).join(' '));
- },
- spacesToTabs: function (input, spaces) {
- spaces = spaces|0 || 4;
- return input.replace(RegExp(' {' + spaces + '}', 'g'), '\t');
- },
- removeTrailing: function (input) {
- return input.replace(/\s*?$/gm, '');
- },
- // Support for deprecated plugin remove-initial-line-feed
- removeInitialLineFeed: function (input) {
- return input.replace(/^(?:\r?\n|\r)/, '');
- },
- removeIndent: function (input) {
- var indents = input.match(/^[^\S\n\r]*(?=\S)/gm);
- if (!indents || !indents[0].length) {
- return input;
- }
- indents.sort(function (a, b) { return a.length - b.length; });
- if (!indents[0].length) {
- return input;
- }
- return input.replace(RegExp('^' + indents[0], 'gm'), '');
- },
- indent: function (input, tabs) {
- return input.replace(/^[^\S\n\r]*(?=\S)/gm, new Array(++tabs).join('\t') + '$&');
- },
- breakLines: function (input, characters) {
- characters = (characters === true) ? 80 : characters|0 || 80;
- var lines = input.split('\n');
- for (var i = 0; i < lines.length; ++i) {
- if (tabLen(lines[i]) <= characters) {
- continue;
- }
- var line = lines[i].split(/(\s+)/g);
- var len = 0;
- for (var j = 0; j < line.length; ++j) {
- var tl = tabLen(line[j]);
- len += tl;
- if (len > characters) {
- line[j] = '\n' + line[j];
- len = tl;
- }
- }
- lines[i] = line.join('');
- }
- return lines.join('\n');
- }
- };
- // Support node modules
- if (typeof module !== 'undefined' && module.exports) {
- module.exports = NormalizeWhitespace;
- }
- Prism.plugins.NormalizeWhitespace = new NormalizeWhitespace({
- 'remove-trailing': true,
- 'remove-indent': true,
- 'left-trim': true,
- 'right-trim': true,
- /*'break-lines': 80,
- 'indent': 2,
- 'remove-initial-line-feed': false,
- 'tabs-to-spaces': 4,
- 'spaces-to-tabs': 4*/
- });
- Prism.hooks.add('before-sanity-check', function (env) {
- var Normalizer = Prism.plugins.NormalizeWhitespace;
- // Check settings
- if (env.settings && env.settings['whitespace-normalization'] === false) {
- return;
- }
- // Check classes
- if (!Prism.util.isActive(env.element, 'whitespace-normalization', true)) {
- return;
- }
- // Simple mode if there is no env.element
- if ((!env.element || !env.element.parentNode) && env.code) {
- env.code = Normalizer.normalize(env.code, env.settings);
- return;
- }
- // Normal mode
- var pre = env.element.parentNode;
- if (!env.code || !pre || pre.nodeName.toLowerCase() !== 'pre') {
- return;
- }
- var children = pre.childNodes;
- var before = '';
- var after = '';
- var codeFound = false;
- // Move surrounding whitespace from the <pre> tag into the <code> tag
- for (var i = 0; i < children.length; ++i) {
- var node = children[i];
- if (node == env.element) {
- codeFound = true;
- } else if (node.nodeName === '#text') {
- if (codeFound) {
- after += node.nodeValue;
- } else {
- before += node.nodeValue;
- }
- pre.removeChild(node);
- --i;
- }
- }
- if (!env.element.children.length || !Prism.plugins.KeepMarkup) {
- env.code = before + env.code + after;
- env.code = Normalizer.normalize(env.code, env.settings);
- } else {
- // Preserve markup for keep-markup plugin
- var html = before + env.element.innerHTML + after;
- env.element.innerHTML = Normalizer.normalize(html, env.settings);
- env.code = env.element.textContent;
- }
- });
- }());
|