├── Plugin.php ├── README.md └── static ├── clipboard.min.js ├── prism.full.js ├── prism.js └── styles ├── coy.css ├── dark.css ├── default.css ├── funky.css ├── okaikia.css ├── solarized-light.css ├── tomorrow-night.css └── twilight.css /Plugin.php: -------------------------------------------------------------------------------- 1 | 可显示语言类型、行号,有复制功能
(请勿与其它同类插件同时启用,以免互相影响)
详细说明:https://github.com/Copterfly/CodeHighlighter-for-Typecho 4 | * 5 | * @package CodeHighlighter 6 | * @author Copterfly 7 | * @version 1.0.0 8 | * @link https://www.copterfly.cn 9 | */ 10 | class CodeHighlighter_Plugin implements Typecho_Plugin_Interface { 11 | /** 12 | * 激活插件方法,如果激活失败,直接抛出异常 13 | * 14 | * @access public 15 | * @return void 16 | * @throws Typecho_Plugin_Exception 17 | */ 18 | public static function activate() { 19 | Typecho_Plugin::factory('Widget_Archive')->header = array(__CLASS__, 'header'); 20 | Typecho_Plugin::factory('Widget_Archive')->footer = array(__CLASS__, 'footer'); 21 | } 22 | 23 | /** 24 | * 禁用插件方法,如果禁用失败,直接抛出异常 25 | * 26 | * @static 27 | * @access public 28 | * @return void 29 | * @throws Typecho_Plugin_Exception 30 | */ 31 | public static function deactivate(){} 32 | 33 | /** 34 | * 获取插件配置面板 35 | * 36 | * @access public 37 | * @param Typecho_Widget_Helper_Form $form 配置面板 38 | * @return void 39 | */ 40 | public static function config(Typecho_Widget_Helper_Form $form){ 41 | //设置代码风格样式 42 | $styles = array_map('basename', glob(dirname(__FILE__) . '/static/styles/*.css')); 43 | $styles = array_combine($styles, $styles); 44 | $name = new Typecho_Widget_Helper_Form_Element_Select('code_style', $styles, 'okaikia.css', _t('选择高亮主题风格')); 45 | $form->addInput($name->addRule('enum', _t('必须选择主题'), $styles)); 46 | $showLineNumber = new Typecho_Widget_Helper_Form_Element_Checkbox('showLineNumber', array('showLineNumber' => _t('显示行号')), array('showLineNumber'), _t('是否在代码左侧显示行号')); 47 | $form->addInput($showLineNumber); 48 | } 49 | 50 | /** 51 | * 个人用户的配置面板 52 | * 53 | * @access public 54 | * @param Typecho_Widget_Helper_Form $form 55 | * @return void 56 | */ 57 | public static function personalConfig(Typecho_Widget_Helper_Form $form){} 58 | 59 | /** 60 | * 插件实现方法 61 | * 62 | * @access public 63 | * @return void 64 | */ 65 | public static function render() { 66 | 67 | } 68 | 69 | /** 70 | *为header添加css文件 71 | *@return void 72 | */ 73 | public static function header() { 74 | $style = Helper::options()->plugin('CodeHighlighter')->code_style; 75 | $cssUrl = Helper::options()->pluginUrl . '/CodeHighlighter/static/styles/' . $style; 76 | echo ''; 77 | } 78 | 79 | /** 80 | *为footer添加js文件 81 | *@return void 82 | */ 83 | public static function footer() { 84 | $jsUrl = Helper::options()->pluginUrl . '/CodeHighlighter/static/prism.js'; 85 | $jsUrl_clipboard = Helper::options()->pluginUrl . '/CodeHighlighter/static/clipboard.min.js'; 86 | $showLineNumber = Helper::options()->plugin('CodeHighlighter')->showLineNumber; 87 | if ($showLineNumber) { 88 | echo << 90 | (function(){ 91 | var pres = document.querySelectorAll('pre'); 92 | var lineNumberClassName = 'line-numbers'; 93 | pres.forEach(function (item, index) { 94 | item.className = item.className == '' ? lineNumberClassName : item.className + ' ' + lineNumberClassName; 95 | }); 96 | })(); 97 | 98 | 99 | HTML; 100 | } 101 | echo << 103 | 104 | 105 | HTML; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CodeHighlighter-for-Typecho 2 | 3 | 基于 prismjs 的代码语法高亮插件 for Typecho,可显示语言类型、行号,有复制代码到剪切板功能。 4 | 5 | github开源地址:[https://github.com/Copterfly/CodeHighlighter-for-Typecho][1] 6 | 7 | ## 起始 8 | 9 | 本插件是基于 [prismjs][2] 的 `Typecho` 代码语法高亮显示插件。( Typecho 1.1版可用,其它版本请自行尝试) 10 | 11 | 可显示语言类型、行号,有复制功能。(请勿与其它同类插件同时启用,以免互相影响) 12 | 13 | ## 使用方法 14 | 15 | 第 1 步:下载本插件,解压,放到 `usr/plugins/` 目录中; 16 | 17 | 第 2 步:文件夹名改为 `CodeHighlighter`; 18 | 19 | 第 3 步:登录管理后台,激活插件; 20 | 21 | 第 4 步:设置:选择主题风格,是否显示行号等。 22 | 23 | **代码写法** 24 | 25 | ``` 26 | '''javascript (语言类型必填) 27 | // codes go here 28 | ''' 29 | ``` 30 | 31 | **高亮效果图** 32 | 33 | ![代码高亮.png][3] 34 | 35 | ## 重要说明 36 | 37 | ### 可设置项 38 | 39 | **1. 选择高亮主题风格** (官方提供的 8 种风格切换) 40 | 41 | - coy.css 42 | - dark.css 43 | - default.css 44 | - funky.css 45 | - okaikia.css (默认选中,因为比较顺眼) 46 | - solarized-light.css 47 | - tomorrow-night.css 48 | - twilight.css 49 | 50 | **2. 是否在代码左侧显示行号** (默认开启) 51 | 52 | ### 在插件中不方便实现的设置项 53 | 54 | 由于 `prismjs` 与 `highlightjs` 的插件扩展机制不同,所以本插件的有些扩展项是无法设置的。 55 | 56 | 本插件支持常见的一些语言高亮。您可以打开以下链接查看详情: 57 | 58 | [http://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+apacheconf+c+aspnet+bash+cpp+csharp+coffeescript+markup-templating+git+java+less+markdown+nginx+php+sql+python+smarty&plugins=line-numbers+toolbar+show-language+copy-to-clipboard][4] 59 | 60 | 如有需要,请勾选需要支持的语言定制您的 js 和 css 文件,下载好后,分别替换以下文件: 61 | 62 | `Typecho 插件目录\CodeHighlighter\static\prism.js` 63 | 64 | `Typecho 插件目录\CodeHighlighter\static\styles\改为对应的风格名.css` (如跟您博客样式有冲突,稍作修改此 `css` 即可) 65 | 66 | **建议** 67 | 68 | 插件 `Plugins` 最好至少勾选以下 4 项: 69 | 70 | - Line Numbers (在代码左侧显示行号) 71 | - Toolbar (代码块右上方工具条) 72 | - Show Language (显示代码是什么语言【依赖: Toolbar】) 73 | - Copy to Clipboard Button (复制代码功能【依赖: Toolbar】) 74 | 75 | ## 与我联系 76 | 77 | 作者:Copterfly 78 | 79 | 有问题请到博客留言交流:[http://www.copterfly.cn/server-side/php/typecho-code-highlighter.html][5] 80 | 81 | 82 | [1]: https://github.com/Copterfly/CodeHighlighter-for-Typecho 83 | [2]: http://prismjs.com/ 84 | [3]: http://www.copterfly.cn/usr/uploads/2018/05/2713638326.png 85 | [4]: http://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+apacheconf+c+aspnet+bash+cpp+csharp+coffeescript+markup-templating+git+java+less+markdown+nginx+php+sql+python+smarty&plugins=line-numbers+toolbar+show-language+copy-to-clipboard 86 | [5]: http://www.copterfly.cn/server-side/php/typecho-code-highlighter.html 87 | -------------------------------------------------------------------------------- /static/clipboard.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * clipboard.js v2.0.0 3 | * https://zenorocha.github.io/clipboard.js 4 | * 5 | * Licensed MIT © Zeno Rocha 6 | */ 7 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return t[o].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,o){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=3)}([function(t,e,n){var o,r,i;!function(a,c){r=[t,n(7)],o=c,void 0!==(i="function"==typeof o?o.apply(e,r):o)&&(t.exports=i)}(0,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var o=function(t){return t&&t.__esModule?t:{default:t}}(e),r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,o.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,o.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})},function(t,e,n){function o(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!c.string(e))throw new TypeError("Second argument must be a String");if(!c.fn(n))throw new TypeError("Third argument must be a Function");if(c.node(t))return r(t,e,n);if(c.nodeList(t))return i(t,e,n);if(c.string(t))return a(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function r(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function i(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function a(t,e,n){return u(document.body,t,e,n)}var c=n(6),u=n(5);t.exports=o},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function o(){r.off(t,o),e.apply(n,arguments)}var r=this;return o._=e,this.on(t,o,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;for(o;o0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,f.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return u("action",t)}},{key:"defaultTarget",value:function(t){var e=u("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return u("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(s.default);t.exports=p})},function(t,e){function n(t,e){for(;t&&t.nodeType!==o;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var o=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=n},function(t,e,n){function o(t,e,n,o,r){var a=i.apply(this,arguments);return t.addEventListener(n,a,r),{destroy:function(){t.removeEventListener(n,a,r)}}}function r(t,e,n,r,i){return"function"==typeof t.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return o(t,e,n,r,i)}))}function i(t,e,n,o){return function(n){n.delegateTarget=a(n.target,e),n.delegateTarget&&o.call(t,n)}}var a=n(4);t.exports=r},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e){function n(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}t.exports=n}])}); -------------------------------------------------------------------------------- /static/prism.full.js: -------------------------------------------------------------------------------- 1 | /* PrismJS 1.14.0 2 | http://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+apacheconf+c+aspnet+bash+cpp+csharp+coffeescript+markup-templating+git+java+less+markdown+nginx+php+sql+python+smarty&plugins=line-numbers+toolbar+show-language+copy-to-clipboard 3 | Modified by Copterfly 4 | */ 5 | var _self = (typeof window !== 'undefined') 6 | ? window // if in browser 7 | : ( 8 | (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) 9 | ? self // if in worker 10 | : {} // if in node js 11 | ); 12 | 13 | /** 14 | * Prism: Lightweight, robust, elegant syntax highlighting 15 | * MIT license http://www.opensource.org/licenses/mit-license.php/ 16 | * @author Lea Verou http://lea.verou.me 17 | */ 18 | 19 | var Prism = (function(){ 20 | 21 | // Private helper vars 22 | var lang = /\blang(?:uage)?-([\w-]+)\b/i; 23 | var uniqueId = 0; 24 | 25 | var _ = _self.Prism = { 26 | manual: _self.Prism && _self.Prism.manual, 27 | disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler, 28 | util: { 29 | encode: function (tokens) { 30 | if (tokens instanceof Token) { 31 | return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias); 32 | } else if (_.util.type(tokens) === 'Array') { 33 | return tokens.map(_.util.encode); 34 | } else { 35 | return tokens.replace(/&/g, '&').replace(/ text.length) { 327 | // Something went terribly wrong, ABORT, ABORT! 328 | return; 329 | } 330 | 331 | if (str instanceof Token) { 332 | continue; 333 | } 334 | 335 | if (greedy && i != strarr.length - 1) { 336 | pattern.lastIndex = pos; 337 | var match = pattern.exec(text); 338 | if (!match) { 339 | break; 340 | } 341 | 342 | var from = match.index + (lookbehind ? match[1].length : 0), 343 | to = match.index + match[0].length, 344 | k = i, 345 | p = pos; 346 | 347 | for (var len = strarr.length; k < len && (p < to || (!strarr[k].type && !strarr[k - 1].greedy)); ++k) { 348 | p += strarr[k].length; 349 | // Move the index i to the element in strarr that is closest to from 350 | if (from >= p) { 351 | ++i; 352 | pos = p; 353 | } 354 | } 355 | 356 | // If strarr[i] is a Token, then the match starts inside another Token, which is invalid 357 | if (strarr[i] instanceof Token) { 358 | continue; 359 | } 360 | 361 | // Number of tokens to delete and replace with the new match 362 | delNum = k - i; 363 | str = text.slice(pos, p); 364 | match.index -= pos; 365 | } else { 366 | pattern.lastIndex = 0; 367 | 368 | var match = pattern.exec(str), 369 | delNum = 1; 370 | } 371 | 372 | if (!match) { 373 | if (oneshot) { 374 | break; 375 | } 376 | 377 | continue; 378 | } 379 | 380 | if(lookbehind) { 381 | lookbehindLength = match[1] ? match[1].length : 0; 382 | } 383 | 384 | var from = match.index + lookbehindLength, 385 | match = match[0].slice(lookbehindLength), 386 | to = from + match.length, 387 | before = str.slice(0, from), 388 | after = str.slice(to); 389 | 390 | var args = [i, delNum]; 391 | 392 | if (before) { 393 | ++i; 394 | pos += before.length; 395 | args.push(before); 396 | } 397 | 398 | var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy); 399 | 400 | args.push(wrapped); 401 | 402 | if (after) { 403 | args.push(after); 404 | } 405 | 406 | Array.prototype.splice.apply(strarr, args); 407 | 408 | if (delNum != 1) 409 | _.matchGrammar(text, strarr, grammar, i, pos, true, token); 410 | 411 | if (oneshot) 412 | break; 413 | } 414 | } 415 | } 416 | }, 417 | 418 | tokenize: function(text, grammar, language) { 419 | var strarr = [text]; 420 | 421 | var rest = grammar.rest; 422 | 423 | if (rest) { 424 | for (var token in rest) { 425 | grammar[token] = rest[token]; 426 | } 427 | 428 | delete grammar.rest; 429 | } 430 | 431 | _.matchGrammar(text, strarr, grammar, 0, 0, false); 432 | 433 | return strarr; 434 | }, 435 | 436 | hooks: { 437 | all: {}, 438 | 439 | add: function (name, callback) { 440 | var hooks = _.hooks.all; 441 | 442 | hooks[name] = hooks[name] || []; 443 | 444 | hooks[name].push(callback); 445 | }, 446 | 447 | run: function (name, env) { 448 | var callbacks = _.hooks.all[name]; 449 | 450 | if (!callbacks || !callbacks.length) { 451 | return; 452 | } 453 | 454 | for (var i=0, callback; callback = callbacks[i++];) { 455 | callback(env); 456 | } 457 | } 458 | } 459 | }; 460 | 461 | var Token = _.Token = function(type, content, alias, matchedStr, greedy) { 462 | this.type = type; 463 | this.content = content; 464 | this.alias = alias; 465 | // Copy of the full string this token was created from 466 | this.length = (matchedStr || "").length|0; 467 | this.greedy = !!greedy; 468 | }; 469 | 470 | Token.stringify = function(o, language, parent) { 471 | if (typeof o == 'string') { 472 | return o; 473 | } 474 | 475 | if (_.util.type(o) === 'Array') { 476 | return o.map(function(element) { 477 | return Token.stringify(element, language, o); 478 | }).join(''); 479 | } 480 | 481 | var env = { 482 | type: o.type, 483 | content: Token.stringify(o.content, language, parent), 484 | tag: 'span', 485 | classes: ['token', o.type], 486 | attributes: {}, 487 | language: language, 488 | parent: parent 489 | }; 490 | 491 | if (o.alias) { 492 | var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias]; 493 | Array.prototype.push.apply(env.classes, aliases); 494 | } 495 | 496 | _.hooks.run('wrap', env); 497 | 498 | var attributes = Object.keys(env.attributes).map(function(name) { 499 | return name + '="' + (env.attributes[name] || '').replace(/"/g, '"') + '"'; 500 | }).join(' '); 501 | 502 | return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + (attributes ? ' ' + attributes : '') + '>' + env.content + ''; 503 | 504 | }; 505 | 506 | if (!_self.document) { 507 | if (!_self.addEventListener) { 508 | // in Node.js 509 | return _self.Prism; 510 | } 511 | 512 | if (!_.disableWorkerMessageHandler) { 513 | // In worker 514 | _self.addEventListener('message', function (evt) { 515 | var message = JSON.parse(evt.data), 516 | lang = message.language, 517 | code = message.code, 518 | immediateClose = message.immediateClose; 519 | 520 | _self.postMessage(_.highlight(code, _.languages[lang], lang)); 521 | if (immediateClose) { 522 | _self.close(); 523 | } 524 | }, false); 525 | } 526 | 527 | return _self.Prism; 528 | } 529 | 530 | //Get current script and highlight 531 | var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop(); 532 | 533 | if (script) { 534 | _.filename = script.src; 535 | 536 | if (!_.manual && !script.hasAttribute('data-manual')) { 537 | if(document.readyState !== "loading") { 538 | if (window.requestAnimationFrame) { 539 | window.requestAnimationFrame(_.highlightAll); 540 | } else { 541 | window.setTimeout(_.highlightAll, 16); 542 | } 543 | } 544 | else { 545 | document.addEventListener('DOMContentLoaded', _.highlightAll); 546 | } 547 | } 548 | } 549 | 550 | return _self.Prism; 551 | 552 | })(); 553 | 554 | if (typeof module !== 'undefined' && module.exports) { 555 | module.exports = Prism; 556 | } 557 | 558 | // hack for components to work correctly in node.js 559 | if (typeof global !== 'undefined') { 560 | global.Prism = Prism; 561 | } 562 | ; 563 | Prism.languages.markup = { 564 | 'comment': //, 565 | 'prolog': /<\?[\s\S]+?\?>/, 566 | 'doctype': //i, 567 | 'cdata': //i, 568 | 'tag': { 569 | pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i, 570 | greedy: true, 571 | inside: { 572 | 'tag': { 573 | pattern: /^<\/?[^\s>\/]+/i, 574 | inside: { 575 | 'punctuation': /^<\/?/, 576 | 'namespace': /^[^\s>\/:]+:/ 577 | } 578 | }, 579 | 'attr-value': { 580 | pattern: /=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/i, 581 | inside: { 582 | 'punctuation': [ 583 | /^=/, 584 | { 585 | pattern: /(^|[^\\])["']/, 586 | lookbehind: true 587 | } 588 | ] 589 | } 590 | }, 591 | 'punctuation': /\/?>/, 592 | 'attr-name': { 593 | pattern: /[^\s>\/]+/, 594 | inside: { 595 | 'namespace': /^[^\s>\/:]+:/ 596 | } 597 | } 598 | 599 | } 600 | }, 601 | 'entity': /&#?[\da-z]{1,8};/i 602 | }; 603 | 604 | Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] = 605 | Prism.languages.markup['entity']; 606 | 607 | // Plugin to make entity title show the real entity, idea by Roman Komarov 608 | Prism.hooks.add('wrap', function(env) { 609 | 610 | if (env.type === 'entity') { 611 | env.attributes['title'] = env.content.replace(/&/, '&'); 612 | } 613 | }); 614 | 615 | Prism.languages.xml = Prism.languages.markup; 616 | Prism.languages.html = Prism.languages.markup; 617 | Prism.languages.mathml = Prism.languages.markup; 618 | Prism.languages.svg = Prism.languages.markup; 619 | 620 | Prism.languages.css = { 621 | 'comment': /\/\*[\s\S]*?\*\//, 622 | 'atrule': { 623 | pattern: /@[\w-]+?.*?(?:;|(?=\s*\{))/i, 624 | inside: { 625 | 'rule': /@[\w-]+/ 626 | // See rest below 627 | } 628 | }, 629 | 'url': /url\((?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|.*?)\)/i, 630 | 'selector': /[^{}\s][^{};]*?(?=\s*\{)/, 631 | 'string': { 632 | pattern: /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, 633 | greedy: true 634 | }, 635 | 'property': /[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i, 636 | 'important': /\B!important\b/i, 637 | 'function': /[-a-z0-9]+(?=\()/i, 638 | 'punctuation': /[(){};:]/ 639 | }; 640 | 641 | Prism.languages.css['atrule'].inside.rest = Prism.languages.css; 642 | 643 | if (Prism.languages.markup) { 644 | Prism.languages.insertBefore('markup', 'tag', { 645 | 'style': { 646 | pattern: /()[\s\S]*?(?=<\/style>)/i, 647 | lookbehind: true, 648 | inside: Prism.languages.css, 649 | alias: 'language-css', 650 | greedy: true 651 | } 652 | }); 653 | 654 | Prism.languages.insertBefore('inside', 'attr-value', { 655 | 'style-attr': { 656 | pattern: /\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i, 657 | inside: { 658 | 'attr-name': { 659 | pattern: /^\s*style/i, 660 | inside: Prism.languages.markup.tag.inside 661 | }, 662 | 'punctuation': /^\s*=\s*['"]|['"]\s*$/, 663 | 'attr-value': { 664 | pattern: /.+/i, 665 | inside: Prism.languages.css 666 | } 667 | }, 668 | alias: 'language-css' 669 | } 670 | }, Prism.languages.markup.tag); 671 | }; 672 | Prism.languages.clike = { 673 | 'comment': [ 674 | { 675 | pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, 676 | lookbehind: true 677 | }, 678 | { 679 | pattern: /(^|[^\\:])\/\/.*/, 680 | lookbehind: true, 681 | greedy: true 682 | } 683 | ], 684 | 'string': { 685 | pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, 686 | greedy: true 687 | }, 688 | 'class-name': { 689 | pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i, 690 | lookbehind: true, 691 | inside: { 692 | punctuation: /[.\\]/ 693 | } 694 | }, 695 | 'keyword': /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, 696 | 'boolean': /\b(?:true|false)\b/, 697 | 'function': /[a-z0-9_]+(?=\()/i, 698 | 'number': /\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i, 699 | 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/, 700 | 'punctuation': /[{}[\];(),.:]/ 701 | }; 702 | 703 | Prism.languages.javascript = Prism.languages.extend('clike', { 704 | 'keyword': /\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/, 705 | 'object': /\b(?:ActiveXObject|Array|Audio|Boolean|Date|Debug|Enumerator|Error|FileReader|Function|Global|Image|JSON|Math|Number|Object|Option|RegExp|String|VBArray|arguments|WebSocket|Worker|XMLHttpRequest|window|document|options|console|_this|that|result)\b/, 706 | 'number': /\b(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/, 707 | // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444) 708 | 'function': /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i, 709 | 'operator': /-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\$|\.{3}/ 710 | }); 711 | 712 | Prism.languages.insertBefore('javascript', 'keyword', { 713 | 'regex': { 714 | pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[[^\]\r\n]+]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/, 715 | lookbehind: true, 716 | greedy: true 717 | }, 718 | // This must be declared before keyword because we use "function" inside the look-forward 719 | 'function-variable': { 720 | pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i, 721 | alias: 'function' 722 | }, 723 | 'constant': /\b[A-Z][A-Z\d_]*\b/ 724 | }); 725 | 726 | Prism.languages.insertBefore('javascript', 'string', { 727 | 'template-string': { 728 | pattern: /`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/, 729 | greedy: true, 730 | inside: { 731 | 'interpolation': { 732 | pattern: /\${[^}]+}/, 733 | inside: { 734 | 'interpolation-punctuation': { 735 | pattern: /^\${|}$/, 736 | alias: 'punctuation' 737 | }, 738 | rest: null // See below 739 | } 740 | }, 741 | 'string': /[\s\S]+/ 742 | } 743 | } 744 | }); 745 | Prism.languages.javascript['template-string'].inside['interpolation'].inside.rest = Prism.languages.javascript; 746 | 747 | if (Prism.languages.markup) { 748 | Prism.languages.insertBefore('markup', 'tag', { 749 | 'script': { 750 | pattern: /()[\s\S]*?(?=<\/script>)/i, 751 | lookbehind: true, 752 | inside: Prism.languages.javascript, 753 | alias: 'language-javascript', 754 | greedy: true 755 | } 756 | }); 757 | } 758 | 759 | Prism.languages.js = Prism.languages.javascript; 760 | 761 | Prism.languages.apacheconf = { 762 | 'comment': /#.*/, 763 | 'directive-inline': { 764 | pattern: /^(\s*)\b(?:AcceptFilter|AcceptPathInfo|AccessFileName|Action|AddAlt|AddAltByEncoding|AddAltByType|AddCharset|AddDefaultCharset|AddDescription|AddEncoding|AddHandler|AddIcon|AddIconByEncoding|AddIconByType|AddInputFilter|AddLanguage|AddModuleInfo|AddOutputFilter|AddOutputFilterByType|AddType|Alias|AliasMatch|Allow|AllowCONNECT|AllowEncodedSlashes|AllowMethods|AllowOverride|AllowOverrideList|Anonymous|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail|AsyncRequestWorkerFactor|AuthBasicAuthoritative|AuthBasicFake|AuthBasicProvider|AuthBasicUseDigestAlgorithm|AuthDBDUserPWQuery|AuthDBDUserRealmQuery|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile|AuthDigestAlgorithm|AuthDigestDomain|AuthDigestNonceLifetime|AuthDigestProvider|AuthDigestQop|AuthDigestShmemSize|AuthFormAuthoritative|AuthFormBody|AuthFormDisableNoStore|AuthFormFakeBasicAuth|AuthFormLocation|AuthFormLoginRequiredLocation|AuthFormLoginSuccessLocation|AuthFormLogoutLocation|AuthFormMethod|AuthFormMimetype|AuthFormPassword|AuthFormProvider|AuthFormSitePassphrase|AuthFormSize|AuthFormUsername|AuthGroupFile|AuthLDAPAuthorizePrefix|AuthLDAPBindAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareAsUser|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPInitialBindAsUser|AuthLDAPInitialBindPattern|AuthLDAPMaxSubGroupDepth|AuthLDAPRemoteUserAttribute|AuthLDAPRemoteUserIsDN|AuthLDAPSearchAsUser|AuthLDAPSubGroupAttribute|AuthLDAPSubGroupClass|AuthLDAPUrl|AuthMerging|AuthName|AuthnCacheContext|AuthnCacheEnable|AuthnCacheProvideFor|AuthnCacheSOCache|AuthnCacheTimeout|AuthnzFcgiCheckAuthnProvider|AuthnzFcgiDefineProvider|AuthType|AuthUserFile|AuthzDBDLoginToReferer|AuthzDBDQuery|AuthzDBDRedirectQuery|AuthzDBMType|AuthzSendForbiddenOnFailure|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|CacheDefaultExpire|CacheDetailHeader|CacheDirLength|CacheDirLevels|CacheDisable|CacheEnable|CacheFile|CacheHeader|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheIgnoreQueryString|CacheIgnoreURLSessionIdentifiers|CacheKeyBaseURL|CacheLastModifiedFactor|CacheLock|CacheLockMaxAge|CacheLockPath|CacheMaxExpire|CacheMaxFileSize|CacheMinExpire|CacheMinFileSize|CacheNegotiatedDocs|CacheQuickHandler|CacheReadSize|CacheReadTime|CacheRoot|CacheSocache|CacheSocacheMaxSize|CacheSocacheMaxTime|CacheSocacheMinTime|CacheSocacheReadSize|CacheSocacheReadTime|CacheStaleOnError|CacheStoreExpired|CacheStoreNoStore|CacheStorePrivate|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateInflateLimitRequestBody|DeflateInflateRatioBurst|DeflateInflateRatioLimit|DeflateMemLevel|DeflateWindowSize|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|HeartbeatAddress|HeartbeatListen|HeartbeatMaxServers|HeartbeatStorage|HeartbeatStorage|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|IndexHeadInsert|IndexIgnore|IndexIgnoreReset|IndexOptions|IndexOrderDefault|IndexStyleSheet|InputSed|ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer|KeepAlive|KeepAliveTimeout|KeptBodySize|LanguagePriority|LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionPoolTTL|LDAPConnectionTimeout|LDAPLibraryDebug|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPReferralHopLimit|LDAPReferrals|LDAPRetries|LDAPRetryDelay|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTimeout|LDAPTrustedClientCert|LDAPTrustedGlobalCert|LDAPTrustedMode|LDAPVerifyServerCert|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|LuaHookAccessChecker|LuaHookAuthChecker|LuaHookCheckUserID|LuaHookFixups|LuaHookInsertFilter|LuaHookLog|LuaHookMapToStorage|LuaHookTranslateName|LuaHookTypeChecker|LuaInherit|LuaInputFilter|LuaMapHandler|LuaOutputFilter|LuaPackageCPath|LuaPackagePath|LuaQuickHandler|LuaRoot|LuaScope|MaxConnectionsPerChild|MaxKeepAliveRequests|MaxMemFree|MaxRangeOverlaps|MaxRangeReversals|MaxRanges|MaxRequestWorkers|MaxSpareServers|MaxSpareThreads|MaxThreads|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|MMapFile|ModemStandard|ModMimeUsePathInfo|MultiviewsMatch|Mutex|NameVirtualHost|NoProxy|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|ProxyAddHeaders|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyExpressDBMFile|ProxyExpressDBMType|ProxyExpressEnable|ProxyFtpDirCharset|ProxyFtpEscapeWildcards|ProxyFtpListOnWildcard|ProxyHTMLBufSize|ProxyHTMLCharsetOut|ProxyHTMLDocType|ProxyHTMLEnable|ProxyHTMLEvents|ProxyHTMLExtended|ProxyHTMLFixups|ProxyHTMLInterp|ProxyHTMLLinks|ProxyHTMLMeta|ProxyHTMLStripComments|ProxyHTMLURLMap|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassInherit|ProxyPassInterpolateEnv|ProxyPassMatch|ProxyPassReverse|ProxyPassReverseCookieDomain|ProxyPassReverseCookiePath|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxySCGIInternalRedirect|ProxySCGISendfile|ProxySet|ProxySourceAddress|ProxyStatus|ProxyTimeout|ProxyVia|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIPHeader|RemoteIPInternalProxy|RemoteIPInternalProxyList|RemoteIPProxiesHeader|RemoteIPTrustedProxy|RemoteIPTrustedProxyList|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|RewriteBase|RewriteCond|RewriteEngine|RewriteMap|RewriteOptions|RewriteRule|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScoreBoardFile|Script|ScriptAlias|ScriptAliasMatch|ScriptInterpreterSource|ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock|SecureListen|SeeRequestTail|SendBufferSize|ServerAdmin|ServerAlias|ServerLimit|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|Session|SessionCookieName|SessionCookieName2|SessionCookieRemove|SessionCryptoCipher|SessionCryptoDriver|SessionCryptoPassphrase|SessionCryptoPassphraseFile|SessionDBDCookieName|SessionDBDCookieName2|SessionDBDCookieRemove|SessionDBDDeleteLabel|SessionDBDInsertLabel|SessionDBDPerUser|SessionDBDSelectLabel|SessionDBDUpdateLabel|SessionEnv|SessionExclude|SessionHeader|SessionInclude|SessionMaxAge|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIETag|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSLCACertificateFile|SSLCACertificatePath|SSLCADNRequestFile|SSLCADNRequestPath|SSLCARevocationCheck|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLCompression|SSLCryptoDevice|SSLEngine|SSLFIPS|SSLHonorCipherOrder|SSLInsecureRenegotiation|SSLOCSPDefaultResponder|SSLOCSPEnable|SSLOCSPOverrideResponder|SSLOCSPResponderTimeout|SSLOCSPResponseMaxAge|SSLOCSPResponseTimeSkew|SSLOCSPUseRequestNonce|SSLOpenSSLConfCmd|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationCheck|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCheckPeerCN|SSLProxyCheckPeerExpire|SSLProxyCheckPeerName|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateChainFile|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRenegBufferSize|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLSessionTicketKeyFile|SSLSRPUnknownUserSeed|SSLSRPVerifierFile|SSLStaplingCache|SSLStaplingErrorCacheTimeout|SSLStaplingFakeTryLater|SSLStaplingForceURL|SSLStaplingResponderTimeout|SSLStaplingResponseMaxAge|SSLStaplingResponseTimeSkew|SSLStaplingReturnResponderErrors|SSLStaplingStandardCacheTimeout|SSLStrictSNIVHostCheck|SSLUserName|SSLUseStapling|SSLVerifyClient|SSLVerifyDepth|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\b/mi, 765 | lookbehind: true, 766 | alias: 'property' 767 | }, 768 | 'directive-block': { 769 | pattern: /<\/?\b(?:AuthnProviderAlias|AuthzProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|RequireAll|RequireAny|RequireNone|VirtualHost)\b *.*>/i, 770 | inside: { 771 | 'directive-block': { 772 | pattern: /^<\/?\w+/, 773 | inside: { 774 | 'punctuation': /^<\/?/ 775 | }, 776 | alias: 'tag' 777 | }, 778 | 'directive-block-parameter': { 779 | pattern: /.*[^>]/, 780 | inside: { 781 | 'punctuation': /:/, 782 | 'string': { 783 | pattern: /("|').*\1/, 784 | inside: { 785 | 'variable': /[$%]\{?(?:\w\.?[-+:]?)+\}?/ 786 | } 787 | } 788 | }, 789 | alias: 'attr-value' 790 | }, 791 | 'punctuation': />/ 792 | }, 793 | alias: 'tag' 794 | }, 795 | 'directive-flags': { 796 | pattern: /\[(?:\w,?)+\]/, 797 | alias: 'keyword' 798 | }, 799 | 'string': { 800 | pattern: /("|').*\1/, 801 | inside: { 802 | 'variable': /[$%]\{?(?:\w\.?[-+:]?)+\}?/ 803 | } 804 | }, 805 | 'variable': /[$%]\{?(?:\w\.?[-+:]?)+\}?/, 806 | 'regex': /\^?.*\$|\^.*\$?/ 807 | }; 808 | 809 | Prism.languages.c = Prism.languages.extend('clike', { 810 | 'keyword': /\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/, 811 | 'operator': /-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/]/, 812 | 'number': /(?:\b0x[\da-f]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i 813 | }); 814 | 815 | Prism.languages.insertBefore('c', 'string', { 816 | 'macro': { 817 | // allow for multiline macro definitions 818 | // spaces after the # character compile fine with gcc 819 | pattern: /(^\s*)#\s*[a-z]+(?:[^\r\n\\]|\\(?:\r\n|[\s\S]))*/im, 820 | lookbehind: true, 821 | alias: 'property', 822 | inside: { 823 | // highlight the path of the include statement as a string 824 | 'string': { 825 | pattern: /(#\s*include\s*)(?:<.+?>|("|')(?:\\?.)+?\2)/, 826 | lookbehind: true 827 | }, 828 | // highlight macro directives as keywords 829 | 'directive': { 830 | pattern: /(#\s*)\b(?:define|defined|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/, 831 | lookbehind: true, 832 | alias: 'keyword' 833 | } 834 | } 835 | }, 836 | // highlight predefined macros as constants 837 | 'constant': /\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/ 838 | }); 839 | 840 | delete Prism.languages.c['class-name']; 841 | delete Prism.languages.c['boolean']; 842 | 843 | Prism.languages.aspnet = Prism.languages.extend('markup', { 844 | 'page-directive tag': { 845 | pattern: /<%\s*@.*%>/i, 846 | inside: { 847 | 'page-directive tag': /<%\s*@\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i, 848 | rest: Prism.languages.markup.tag.inside 849 | } 850 | }, 851 | 'directive tag': { 852 | pattern: /<%.*%>/i, 853 | inside: { 854 | 'directive tag': /<%\s*?[$=%#:]{0,2}|%>/i, 855 | rest: Prism.languages.csharp 856 | } 857 | } 858 | }); 859 | // Regexp copied from prism-markup, with a negative look-ahead added 860 | Prism.languages.aspnet.tag.pattern = /<(?!%)\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i; 861 | 862 | // match directives of attribute value foo="<% Bar %>" 863 | Prism.languages.insertBefore('inside', 'punctuation', { 864 | 'directive tag': Prism.languages.aspnet['directive tag'] 865 | }, Prism.languages.aspnet.tag.inside["attr-value"]); 866 | 867 | Prism.languages.insertBefore('aspnet', 'comment', { 868 | 'asp comment': /<%--[\s\S]*?--%>/ 869 | }); 870 | 871 | // script runat="server" contains csharp, not javascript 872 | Prism.languages.insertBefore('aspnet', Prism.languages.javascript ? 'script' : 'tag', { 873 | 'asp script': { 874 | pattern: /()[\s\S]*?(?=<\/script>)/i, 875 | lookbehind: true, 876 | inside: Prism.languages.csharp || {} 877 | } 878 | }); 879 | (function(Prism) { 880 | var insideString = { 881 | variable: [ 882 | // Arithmetic Environment 883 | { 884 | pattern: /\$?\(\([\s\S]+?\)\)/, 885 | inside: { 886 | // If there is a $ sign at the beginning highlight $(( and )) as variable 887 | variable: [{ 888 | pattern: /(^\$\(\([\s\S]+)\)\)/, 889 | lookbehind: true 890 | }, 891 | /^\$\(\(/ 892 | ], 893 | number: /\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/, 894 | // Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic 895 | operator: /--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/, 896 | // If there is no $ sign at the beginning highlight (( and )) as punctuation 897 | punctuation: /\(\(?|\)\)?|,|;/ 898 | } 899 | }, 900 | // Command Substitution 901 | { 902 | pattern: /\$\([^)]+\)|`[^`]+`/, 903 | greedy: true, 904 | inside: { 905 | variable: /^\$\(|^`|\)$|`$/ 906 | } 907 | }, 908 | /\$(?:[\w#?*!@]+|\{[^}]+\})/i 909 | ] 910 | }; 911 | 912 | Prism.languages.bash = { 913 | 'shebang': { 914 | pattern: /^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/, 915 | alias: 'important' 916 | }, 917 | 'comment': { 918 | pattern: /(^|[^"{\\])#.*/, 919 | lookbehind: true 920 | }, 921 | 'string': [ 922 | //Support for Here-Documents https://en.wikipedia.org/wiki/Here_document 923 | { 924 | pattern: /((?:^|[^<])<<\s*)["']?(\w+?)["']?\s*\r?\n(?:[\s\S])*?\r?\n\2/, 925 | lookbehind: true, 926 | greedy: true, 927 | inside: insideString 928 | }, 929 | { 930 | pattern: /(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/, 931 | greedy: true, 932 | inside: insideString 933 | } 934 | ], 935 | 'variable': insideString.variable, 936 | // Originally based on http://ss64.com/bash/ 937 | 'function': { 938 | pattern: /(^|[\s;|&])(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|[\s;|&])/, 939 | lookbehind: true 940 | }, 941 | 'keyword': { 942 | pattern: /(^|[\s;|&])(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|[\s;|&])/, 943 | lookbehind: true 944 | }, 945 | 'boolean': { 946 | pattern: /(^|[\s;|&])(?:true|false)(?=$|[\s;|&])/, 947 | lookbehind: true 948 | }, 949 | 'operator': /&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/, 950 | 'punctuation': /\$?\(\(?|\)\)?|\.\.|[{}[\];]/ 951 | }; 952 | 953 | var inside = insideString.variable[1].inside; 954 | inside.string = Prism.languages.bash.string; 955 | inside['function'] = Prism.languages.bash['function']; 956 | inside.keyword = Prism.languages.bash.keyword; 957 | inside['boolean'] = Prism.languages.bash['boolean']; 958 | inside.operator = Prism.languages.bash.operator; 959 | inside.punctuation = Prism.languages.bash.punctuation; 960 | 961 | Prism.languages.shell = Prism.languages.bash; 962 | })(Prism); 963 | 964 | Prism.languages.cpp = Prism.languages.extend('c', { 965 | 'keyword': /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/, 966 | 'boolean': /\b(?:true|false)\b/, 967 | 'operator': /--?|\+\+?|!=?|<{1,2}=?|>{1,2}=?|->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|\|?|\?|\*|\/|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/ 968 | }); 969 | 970 | Prism.languages.insertBefore('cpp', 'keyword', { 971 | 'class-name': { 972 | pattern: /(class\s+)\w+/i, 973 | lookbehind: true 974 | } 975 | }); 976 | 977 | Prism.languages.insertBefore('cpp', 'string', { 978 | 'raw-string': { 979 | pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/, 980 | alias: 'string', 981 | greedy: true 982 | } 983 | }); 984 | 985 | Prism.languages.csharp = Prism.languages.extend('clike', { 986 | 'keyword': /\b(?:abstract|add|alias|as|ascending|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|descending|do|double|dynamic|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|from|get|global|goto|group|if|implicit|in|int|interface|internal|into|is|join|let|lock|long|namespace|new|null|object|operator|orderby|out|override|params|partial|private|protected|public|readonly|ref|remove|return|sbyte|sealed|select|set|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|value|var|virtual|void|volatile|where|while|yield)\b/, 987 | 'string': [ 988 | { 989 | pattern: /@("|')(?:\1\1|\\[\s\S]|(?!\1)[^\\])*\1/, 990 | greedy: true 991 | }, 992 | { 993 | pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*?\1/, 994 | greedy: true 995 | } 996 | ], 997 | 'class-name': [ 998 | { 999 | // (Foo bar, Bar baz) 1000 | pattern: /\b[A-Z]\w*(?:\.\w+)*\b(?=\s+\w+)/, 1001 | inside: { 1002 | punctuation: /\./ 1003 | } 1004 | }, 1005 | { 1006 | // [Foo] 1007 | pattern: /(\[)[A-Z]\w*(?:\.\w+)*\b/, 1008 | lookbehind: true, 1009 | inside: { 1010 | punctuation: /\./ 1011 | } 1012 | }, 1013 | { 1014 | // class Foo : Bar 1015 | pattern: /(\b(?:class|interface)\s+[A-Z]\w*(?:\.\w+)*\s*:\s*)[A-Z]\w*(?:\.\w+)*\b/, 1016 | lookbehind: true, 1017 | inside: { 1018 | punctuation: /\./ 1019 | } 1020 | }, 1021 | { 1022 | // class Foo 1023 | pattern: /((?:\b(?:class|interface|new)\s+)|(?:catch\s+\())[A-Z]\w*(?:\.\w+)*\b/, 1024 | lookbehind: true, 1025 | inside: { 1026 | punctuation: /\./ 1027 | } 1028 | } 1029 | ], 1030 | 'number': /\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)f?/i 1031 | }); 1032 | 1033 | Prism.languages.insertBefore('csharp', 'class-name', { 1034 | 'generic-method': { 1035 | pattern: /\w+\s*<[^>\r\n]+?>\s*(?=\()/, 1036 | inside: { 1037 | function: /^\w+/, 1038 | 'class-name': { 1039 | pattern: /\b[A-Z]\w*(?:\.\w+)*\b/, 1040 | inside: { 1041 | punctuation: /\./ 1042 | } 1043 | }, 1044 | keyword: Prism.languages.csharp.keyword, 1045 | punctuation: /[<>(),.:]/ 1046 | } 1047 | }, 1048 | 'preprocessor': { 1049 | pattern: /(^\s*)#.*/m, 1050 | lookbehind: true, 1051 | alias: 'property', 1052 | inside: { 1053 | // highlight preprocessor directives as keywords 1054 | 'directive': { 1055 | pattern: /(\s*#)\b(?:define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/, 1056 | lookbehind: true, 1057 | alias: 'keyword' 1058 | } 1059 | } 1060 | } 1061 | }); 1062 | 1063 | Prism.languages.dotnet = Prism.languages.csharp; 1064 | (function(Prism) { 1065 | 1066 | // Ignore comments starting with { to privilege string interpolation highlighting 1067 | var comment = /#(?!\{).+/, 1068 | interpolation = { 1069 | pattern: /#\{[^}]+\}/, 1070 | alias: 'variable' 1071 | }; 1072 | 1073 | Prism.languages.coffeescript = Prism.languages.extend('javascript', { 1074 | 'comment': comment, 1075 | 'string': [ 1076 | 1077 | // Strings are multiline 1078 | { 1079 | pattern: /'(?:\\[\s\S]|[^\\'])*'/, 1080 | greedy: true 1081 | }, 1082 | 1083 | { 1084 | // Strings are multiline 1085 | pattern: /"(?:\\[\s\S]|[^\\"])*"/, 1086 | greedy: true, 1087 | inside: { 1088 | 'interpolation': interpolation 1089 | } 1090 | } 1091 | ], 1092 | 'keyword': /\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/, 1093 | 'class-member': { 1094 | pattern: /@(?!\d)\w+/, 1095 | alias: 'variable' 1096 | } 1097 | }); 1098 | 1099 | Prism.languages.insertBefore('coffeescript', 'comment', { 1100 | 'multiline-comment': { 1101 | pattern: /###[\s\S]+?###/, 1102 | alias: 'comment' 1103 | }, 1104 | 1105 | // Block regexp can contain comments and interpolation 1106 | 'block-regex': { 1107 | pattern: /\/{3}[\s\S]*?\/{3}/, 1108 | alias: 'regex', 1109 | inside: { 1110 | 'comment': comment, 1111 | 'interpolation': interpolation 1112 | } 1113 | } 1114 | }); 1115 | 1116 | Prism.languages.insertBefore('coffeescript', 'string', { 1117 | 'inline-javascript': { 1118 | pattern: /`(?:\\[\s\S]|[^\\`])*`/, 1119 | inside: { 1120 | 'delimiter': { 1121 | pattern: /^`|`$/, 1122 | alias: 'punctuation' 1123 | }, 1124 | rest: Prism.languages.javascript 1125 | } 1126 | }, 1127 | 1128 | // Block strings 1129 | 'multiline-string': [ 1130 | { 1131 | pattern: /'''[\s\S]*?'''/, 1132 | greedy: true, 1133 | alias: 'string' 1134 | }, 1135 | { 1136 | pattern: /"""[\s\S]*?"""/, 1137 | greedy: true, 1138 | alias: 'string', 1139 | inside: { 1140 | interpolation: interpolation 1141 | } 1142 | } 1143 | ] 1144 | 1145 | }); 1146 | 1147 | Prism.languages.insertBefore('coffeescript', 'keyword', { 1148 | // Object property 1149 | 'property': /(?!\d)\w+(?=\s*:(?!:))/ 1150 | }); 1151 | 1152 | delete Prism.languages.coffeescript['template-string']; 1153 | 1154 | }(Prism)); 1155 | Prism.languages['markup-templating'] = {}; 1156 | 1157 | Object.defineProperties(Prism.languages['markup-templating'], { 1158 | buildPlaceholders: { 1159 | // Tokenize all inline templating expressions matching placeholderPattern 1160 | // If the replaceFilter function is provided, it will be called with every match. 1161 | // If it returns false, the match will not be replaced. 1162 | value: function (env, language, placeholderPattern, replaceFilter) { 1163 | if (env.language !== language) { 1164 | return; 1165 | } 1166 | 1167 | env.tokenStack = []; 1168 | 1169 | env.code = env.code.replace(placeholderPattern, function(match) { 1170 | if (typeof replaceFilter === 'function' && !replaceFilter(match)) { 1171 | return match; 1172 | } 1173 | var i = env.tokenStack.length; 1174 | // Check for existing strings 1175 | while (env.code.indexOf('___' + language.toUpperCase() + i + '___') !== -1) 1176 | ++i; 1177 | 1178 | // Create a sparse array 1179 | env.tokenStack[i] = match; 1180 | 1181 | return '___' + language.toUpperCase() + i + '___'; 1182 | }); 1183 | 1184 | // Switch the grammar to markup 1185 | env.grammar = Prism.languages.markup; 1186 | } 1187 | }, 1188 | tokenizePlaceholders: { 1189 | // Replace placeholders with proper tokens after tokenizing 1190 | value: function (env, language) { 1191 | if (env.language !== language || !env.tokenStack) { 1192 | return; 1193 | } 1194 | 1195 | // Switch the grammar back 1196 | env.grammar = Prism.languages[language]; 1197 | 1198 | var j = 0; 1199 | var keys = Object.keys(env.tokenStack); 1200 | var walkTokens = function (tokens) { 1201 | if (j >= keys.length) { 1202 | return; 1203 | } 1204 | for (var i = 0; i < tokens.length; i++) { 1205 | var token = tokens[i]; 1206 | if (typeof token === 'string' || (token.content && typeof token.content === 'string')) { 1207 | var k = keys[j]; 1208 | var t = env.tokenStack[k]; 1209 | var s = typeof token === 'string' ? token : token.content; 1210 | 1211 | var index = s.indexOf('___' + language.toUpperCase() + k + '___'); 1212 | if (index > -1) { 1213 | ++j; 1214 | var before = s.substring(0, index); 1215 | var middle = new Prism.Token(language, Prism.tokenize(t, env.grammar, language), 'language-' + language, t); 1216 | var after = s.substring(index + ('___' + language.toUpperCase() + k + '___').length); 1217 | var replacement; 1218 | if (before || after) { 1219 | replacement = [before, middle, after].filter(function (v) { return !!v; }); 1220 | walkTokens(replacement); 1221 | } else { 1222 | replacement = middle; 1223 | } 1224 | if (typeof token === 'string') { 1225 | Array.prototype.splice.apply(tokens, [i, 1].concat(replacement)); 1226 | } else { 1227 | token.content = replacement; 1228 | } 1229 | 1230 | if (j >= keys.length) { 1231 | break; 1232 | } 1233 | } 1234 | } else if (token.content && typeof token.content !== 'string') { 1235 | walkTokens(token.content); 1236 | } 1237 | } 1238 | }; 1239 | 1240 | walkTokens(env.tokens); 1241 | } 1242 | } 1243 | }); 1244 | Prism.languages.git = { 1245 | /* 1246 | * A simple one line comment like in a git status command 1247 | * For instance: 1248 | * $ git status 1249 | * # On branch infinite-scroll 1250 | * # Your branch and 'origin/sharedBranches/frontendTeam/infinite-scroll' have diverged, 1251 | * # and have 1 and 2 different commits each, respectively. 1252 | * nothing to commit (working directory clean) 1253 | */ 1254 | 'comment': /^#.*/m, 1255 | 1256 | /* 1257 | * Regexp to match the changed lines in a git diff output. Check the example below. 1258 | */ 1259 | 'deleted': /^[-–].*/m, 1260 | 'inserted': /^\+.*/m, 1261 | 1262 | /* 1263 | * a string (double and simple quote) 1264 | */ 1265 | 'string': /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/m, 1266 | 1267 | /* 1268 | * a git command. It starts with a random prompt finishing by a $, then "git" then some other parameters 1269 | * For instance: 1270 | * $ git add file.txt 1271 | */ 1272 | 'command': { 1273 | pattern: /^.*\$ git .*$/m, 1274 | inside: { 1275 | /* 1276 | * A git command can contain a parameter starting by a single or a double dash followed by a string 1277 | * For instance: 1278 | * $ git diff --cached 1279 | * $ git log -p 1280 | */ 1281 | 'parameter': /\s--?\w+/m 1282 | } 1283 | }, 1284 | 1285 | /* 1286 | * Coordinates displayed in a git diff command 1287 | * For instance: 1288 | * $ git diff 1289 | * diff --git file.txt file.txt 1290 | * index 6214953..1d54a52 100644 1291 | * --- file.txt 1292 | * +++ file.txt 1293 | * @@ -1 +1,2 @@ 1294 | * -Here's my tetx file 1295 | * +Here's my text file 1296 | * +And this is the second line 1297 | */ 1298 | 'coord': /^@@.*@@$/m, 1299 | 1300 | /* 1301 | * Match a "commit [SHA1]" line in a git log output. 1302 | * For instance: 1303 | * $ git log 1304 | * commit a11a14ef7e26f2ca62d4b35eac455ce636d0dc09 1305 | * Author: lgiraudel 1306 | * Date: Mon Feb 17 11:18:34 2014 +0100 1307 | * 1308 | * Add of a new line 1309 | */ 1310 | 'commit_sha1': /^commit \w{40}$/m 1311 | }; 1312 | 1313 | Prism.languages.java = Prism.languages.extend('clike', { 1314 | 'keyword': /\b(?:abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/, 1315 | 'number': /\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp-]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?[df]?/i, 1316 | 'operator': { 1317 | pattern: /(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m, 1318 | lookbehind: true 1319 | } 1320 | }); 1321 | 1322 | Prism.languages.insertBefore('java','function', { 1323 | 'annotation': { 1324 | alias: 'punctuation', 1325 | pattern: /(^|[^.])@\w+/, 1326 | lookbehind: true 1327 | } 1328 | }); 1329 | 1330 | Prism.languages.insertBefore('java', 'class-name', { 1331 | 'generics': { 1332 | pattern: /<\s*\w+(?:\.\w+)?(?:\s*,\s*\w+(?:\.\w+)?)*>/i, 1333 | alias: 'function', 1334 | inside: { 1335 | keyword: Prism.languages.java.keyword, 1336 | punctuation: /[<>(),.:]/ 1337 | } 1338 | } 1339 | }); 1340 | 1341 | /* FIXME : 1342 | :extend() is not handled specifically : its highlighting is buggy. 1343 | Mixin usage must be inside a ruleset to be highlighted. 1344 | At-rules (e.g. import) containing interpolations are buggy. 1345 | Detached rulesets are highlighted as at-rules. 1346 | A comment before a mixin usage prevents the latter to be properly highlighted. 1347 | */ 1348 | 1349 | Prism.languages.less = Prism.languages.extend('css', { 1350 | 'comment': [ 1351 | /\/\*[\s\S]*?\*\//, 1352 | { 1353 | pattern: /(^|[^\\])\/\/.*/, 1354 | lookbehind: true 1355 | } 1356 | ], 1357 | 'atrule': { 1358 | pattern: /@[\w-]+?(?:\([^{}]+\)|[^(){};])*?(?=\s*\{)/i, 1359 | inside: { 1360 | 'punctuation': /[:()]/ 1361 | } 1362 | }, 1363 | // selectors and mixins are considered the same 1364 | 'selector': { 1365 | pattern: /(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\([^{}]*\)|[^{};@])*?(?=\s*\{)/, 1366 | inside: { 1367 | // mixin parameters 1368 | 'variable': /@+[\w-]+/ 1369 | } 1370 | }, 1371 | 1372 | 'property': /(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/i, 1373 | 'punctuation': /[{}();:,]/, 1374 | 'operator': /[+\-*\/]/ 1375 | }); 1376 | 1377 | // Invert function and punctuation positions 1378 | Prism.languages.insertBefore('less', 'punctuation', { 1379 | 'function': Prism.languages.less.function 1380 | }); 1381 | 1382 | Prism.languages.insertBefore('less', 'property', { 1383 | 'variable': [ 1384 | // Variable declaration (the colon must be consumed!) 1385 | { 1386 | pattern: /@[\w-]+\s*:/, 1387 | inside: { 1388 | "punctuation": /:/ 1389 | } 1390 | }, 1391 | 1392 | // Variable usage 1393 | /@@?[\w-]+/ 1394 | ], 1395 | 'mixin-usage': { 1396 | pattern: /([{;]\s*)[.#](?!\d)[\w-]+.*?(?=[(;])/, 1397 | lookbehind: true, 1398 | alias: 'function' 1399 | } 1400 | }); 1401 | 1402 | Prism.languages.markdown = Prism.languages.extend('markup', {}); 1403 | Prism.languages.insertBefore('markdown', 'prolog', { 1404 | 'blockquote': { 1405 | // > ... 1406 | pattern: /^>(?:[\t ]*>)*/m, 1407 | alias: 'punctuation' 1408 | }, 1409 | 'code': [ 1410 | { 1411 | // Prefixed by 4 spaces or 1 tab 1412 | pattern: /^(?: {4}|\t).+/m, 1413 | alias: 'keyword' 1414 | }, 1415 | { 1416 | // `code` 1417 | // ``code`` 1418 | pattern: /``.+?``|`[^`\n]+`/, 1419 | alias: 'keyword' 1420 | } 1421 | ], 1422 | 'title': [ 1423 | { 1424 | // title 1 1425 | // ======= 1426 | 1427 | // title 2 1428 | // ------- 1429 | pattern: /\w+.*(?:\r?\n|\r)(?:==+|--+)/, 1430 | alias: 'important', 1431 | inside: { 1432 | punctuation: /==+$|--+$/ 1433 | } 1434 | }, 1435 | { 1436 | // # title 1 1437 | // ###### title 6 1438 | pattern: /(^\s*)#+.+/m, 1439 | lookbehind: true, 1440 | alias: 'important', 1441 | inside: { 1442 | punctuation: /^#+|#+$/ 1443 | } 1444 | } 1445 | ], 1446 | 'hr': { 1447 | // *** 1448 | // --- 1449 | // * * * 1450 | // ----------- 1451 | pattern: /(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m, 1452 | lookbehind: true, 1453 | alias: 'punctuation' 1454 | }, 1455 | 'list': { 1456 | // * item 1457 | // + item 1458 | // - item 1459 | // 1. item 1460 | pattern: /(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m, 1461 | lookbehind: true, 1462 | alias: 'punctuation' 1463 | }, 1464 | 'url-reference': { 1465 | // [id]: http://example.com "Optional title" 1466 | // [id]: http://example.com 'Optional title' 1467 | // [id]: http://example.com (Optional title) 1468 | // [id]: "Optional title" 1469 | pattern: /!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/, 1470 | inside: { 1471 | 'variable': { 1472 | pattern: /^(!?\[)[^\]]+/, 1473 | lookbehind: true 1474 | }, 1475 | 'string': /(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/, 1476 | 'punctuation': /^[\[\]!:]|[<>]/ 1477 | }, 1478 | alias: 'url' 1479 | }, 1480 | 'bold': { 1481 | // **strong** 1482 | // __strong__ 1483 | 1484 | // Allow only one line break 1485 | pattern: /(^|[^\\])(\*\*|__)(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/, 1486 | lookbehind: true, 1487 | inside: { 1488 | 'punctuation': /^\*\*|^__|\*\*$|__$/ 1489 | } 1490 | }, 1491 | 'italic': { 1492 | // *em* 1493 | // _em_ 1494 | 1495 | // Allow only one line break 1496 | pattern: /(^|[^\\])([*_])(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/, 1497 | lookbehind: true, 1498 | inside: { 1499 | 'punctuation': /^[*_]|[*_]$/ 1500 | } 1501 | }, 1502 | 'url': { 1503 | // [example](http://example.com "Optional title") 1504 | // [example] [id] 1505 | pattern: /!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[[^\]\n]*\])/, 1506 | inside: { 1507 | 'variable': { 1508 | pattern: /(!?\[)[^\]]+(?=\]$)/, 1509 | lookbehind: true 1510 | }, 1511 | 'string': { 1512 | pattern: /"(?:\\.|[^"\\])*"(?=\)$)/ 1513 | } 1514 | } 1515 | } 1516 | }); 1517 | 1518 | Prism.languages.markdown['bold'].inside['url'] = Prism.languages.markdown['url']; 1519 | Prism.languages.markdown['italic'].inside['url'] = Prism.languages.markdown['url']; 1520 | Prism.languages.markdown['bold'].inside['italic'] = Prism.languages.markdown['italic']; 1521 | Prism.languages.markdown['italic'].inside['bold'] = Prism.languages.markdown['bold']; 1522 | Prism.languages.nginx = Prism.languages.extend('clike', { 1523 | 'comment': { 1524 | pattern: /(^|[^"{\\])#.*/, 1525 | lookbehind: true 1526 | }, 1527 | 'keyword': /\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|events|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types)\b/i 1528 | }); 1529 | 1530 | Prism.languages.insertBefore('nginx', 'keyword', { 1531 | 'variable': /\$[a-z_]+/i 1532 | }); 1533 | /** 1534 | * Original by Aaron Harun: http://aahacreative.com/2012/07/31/php-syntax-highlighting-prism/ 1535 | * Modified by Miles Johnson: http://milesj.me 1536 | * 1537 | * Supports the following: 1538 | * - Extends clike syntax 1539 | * - Support for PHP 5.3+ (namespaces, traits, generators, etc) 1540 | * - Smarter constant and function matching 1541 | * 1542 | * Adds the following new token classes: 1543 | * constant, delimiter, variable, function, package 1544 | */ 1545 | (function (Prism) { 1546 | Prism.languages.php = Prism.languages.extend('clike', { 1547 | 'keyword': /\b(?:and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i, 1548 | 'constant': /\b[A-Z0-9_]{2,}\b/, 1549 | 'comment': { 1550 | pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/, 1551 | lookbehind: true 1552 | } 1553 | }); 1554 | 1555 | Prism.languages.insertBefore('php', 'string', { 1556 | 'shell-comment': { 1557 | pattern: /(^|[^\\])#.*/, 1558 | lookbehind: true, 1559 | alias: 'comment' 1560 | } 1561 | }); 1562 | 1563 | Prism.languages.insertBefore('php', 'keyword', { 1564 | 'delimiter': { 1565 | pattern: /\?>|<\?(?:php|=)?/i, 1566 | alias: 'important' 1567 | }, 1568 | 'variable': /\$+(?:\w+\b|(?={))/i, 1569 | 'package': { 1570 | pattern: /(\\|namespace\s+|use\s+)[\w\\]+/, 1571 | lookbehind: true, 1572 | inside: { 1573 | punctuation: /\\/ 1574 | } 1575 | } 1576 | }); 1577 | 1578 | // Must be defined after the function pattern 1579 | Prism.languages.insertBefore('php', 'operator', { 1580 | 'property': { 1581 | pattern: /(->)[\w]+/, 1582 | lookbehind: true 1583 | } 1584 | }); 1585 | 1586 | Prism.languages.insertBefore('php', 'string', { 1587 | 'nowdoc-string': { 1588 | pattern: /<<<'([^']+)'(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;/, 1589 | greedy: true, 1590 | alias: 'string', 1591 | inside: { 1592 | 'delimiter': { 1593 | pattern: /^<<<'[^']+'|[a-z_]\w*;$/i, 1594 | alias: 'symbol', 1595 | inside: { 1596 | 'punctuation': /^<<<'?|[';]$/ 1597 | } 1598 | } 1599 | } 1600 | }, 1601 | 'heredoc-string': { 1602 | pattern: /<<<(?:"([^"]+)"(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;|([a-z_]\w*)(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\2;)/i, 1603 | greedy: true, 1604 | alias: 'string', 1605 | inside: { 1606 | 'delimiter': { 1607 | pattern: /^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i, 1608 | alias: 'symbol', 1609 | inside: { 1610 | 'punctuation': /^<<<"?|[";]$/ 1611 | } 1612 | }, 1613 | 'interpolation': null // See below 1614 | } 1615 | }, 1616 | 'single-quoted-string': { 1617 | pattern: /'(?:\\[\s\S]|[^\\'])*'/, 1618 | greedy: true, 1619 | alias: 'string' 1620 | }, 1621 | 'double-quoted-string': { 1622 | pattern: /"(?:\\[\s\S]|[^\\"])*"/, 1623 | greedy: true, 1624 | alias: 'string', 1625 | inside: { 1626 | 'interpolation': null // See below 1627 | } 1628 | } 1629 | }); 1630 | // The different types of PHP strings "replace" the C-like standard string 1631 | delete Prism.languages.php['string']; 1632 | 1633 | var string_interpolation = { 1634 | pattern: /{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[.+?]|->\w+)*)/, 1635 | lookbehind: true, 1636 | inside: { 1637 | rest: Prism.languages.php 1638 | } 1639 | }; 1640 | Prism.languages.php['heredoc-string'].inside['interpolation'] = string_interpolation; 1641 | Prism.languages.php['double-quoted-string'].inside['interpolation'] = string_interpolation; 1642 | 1643 | Prism.hooks.add('before-tokenize', function(env) { 1644 | if (!/(?:<\?php|<\?)/ig.test(env.code)) { 1645 | return; 1646 | } 1647 | 1648 | var phpPattern = /(?:<\?php|<\?)[\s\S]*?(?:\?>|$)/ig; 1649 | Prism.languages['markup-templating'].buildPlaceholders(env, 'php', phpPattern); 1650 | }); 1651 | 1652 | Prism.hooks.add('after-tokenize', function(env) { 1653 | Prism.languages['markup-templating'].tokenizePlaceholders(env, 'php'); 1654 | }); 1655 | 1656 | }(Prism)); 1657 | Prism.languages.sql= { 1658 | 'comment': { 1659 | pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/, 1660 | lookbehind: true 1661 | }, 1662 | 'string' : { 1663 | pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\])*\2/, 1664 | greedy: true, 1665 | lookbehind: true 1666 | }, 1667 | 'variable': /@[\w.$]+|@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/, 1668 | '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? 1669 | 'keyword': /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i, 1670 | 'boolean': /\b(?:TRUE|FALSE|NULL)\b/i, 1671 | 'number': /\b0x[\da-f]+\b|\b\d+\.?\d*|\B\.\d+\b/i, 1672 | 'operator': /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i, 1673 | 'punctuation': /[;[\]()`,.]/ 1674 | }; 1675 | Prism.languages.python = { 1676 | 'comment': { 1677 | pattern: /(^|[^\\])#.*/, 1678 | lookbehind: true 1679 | }, 1680 | 'triple-quoted-string': { 1681 | pattern: /("""|''')[\s\S]+?\1/, 1682 | greedy: true, 1683 | alias: 'string' 1684 | }, 1685 | 'string': { 1686 | pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/, 1687 | greedy: true 1688 | }, 1689 | 'function': { 1690 | pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g, 1691 | lookbehind: true 1692 | }, 1693 | 'class-name': { 1694 | pattern: /(\bclass\s+)\w+/i, 1695 | lookbehind: true 1696 | }, 1697 | 'keyword': /\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|pass|print|raise|return|try|while|with|yield|self)\b/, 1698 | 'module': /\b(?:exceptions|os|os.path|stat|string|re|math|cmath|operator|copy|sys|atexit|time|datetime|types|gc|io|functools|codecs|json|thread|threading|hashlib|shutil|md5|code|random)\b/, 1699 | '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|isfile|mkdir|makedirs|exists|strftime)\b/, 1700 | 'boolean': /\b(?:True|False|None)\b/, 1701 | 'number': /(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i, 1702 | 'operator': /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/, 1703 | 'punctuation': /[{}[\];(),.:]/ 1704 | }; 1705 | 1706 | /* TODO 1707 | Add support for variables inside double quoted strings 1708 | Add support for {php} 1709 | */ 1710 | 1711 | (function(Prism) { 1712 | 1713 | Prism.languages.smarty = { 1714 | 'comment': /\{\*[\s\S]*?\*\}/, 1715 | 'delimiter': { 1716 | pattern: /^\{|\}$/i, 1717 | alias: 'punctuation' 1718 | }, 1719 | 'string': /(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/, 1720 | 'number': /\b0x[\dA-Fa-f]+|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][-+]?\d+)?/, 1721 | 'variable': [ 1722 | /\$(?!\d)\w+/, 1723 | /#(?!\d)\w+#/, 1724 | { 1725 | pattern: /(\.|->)(?!\d)\w+/, 1726 | lookbehind: true 1727 | }, 1728 | { 1729 | pattern: /(\[)(?!\d)\w+(?=\])/, 1730 | lookbehind: true 1731 | } 1732 | ], 1733 | 'function': [ 1734 | { 1735 | pattern: /(\|\s*)@?(?!\d)\w+/, 1736 | lookbehind: true 1737 | }, 1738 | /^\/?(?!\d)\w+/, 1739 | /(?!\d)\w+(?=\()/ 1740 | ], 1741 | 'attr-name': { 1742 | // Value is made optional because it may have already been tokenized 1743 | pattern: /\w+\s*=\s*(?:(?!\d)\w+)?/, 1744 | inside: { 1745 | "variable": { 1746 | pattern: /(=\s*)(?!\d)\w+/, 1747 | lookbehind: true 1748 | }, 1749 | "operator": /=/ 1750 | } 1751 | }, 1752 | 'punctuation': [ 1753 | /[\[\]().,:`]|->/ 1754 | ], 1755 | 'operator': [ 1756 | /[+\-*\/%]|==?=?|[!<>]=?|&&|\|\|?/, 1757 | /\bis\s+(?:not\s+)?(?:div|even|odd)(?:\s+by)?\b/, 1758 | /\b(?:eq|neq?|gt|lt|gt?e|lt?e|not|mod|or|and)\b/ 1759 | ], 1760 | 'keyword': /\b(?:false|off|on|no|true|yes)\b/ 1761 | }; 1762 | 1763 | // Comments are inserted at top so that they can 1764 | // surround markup 1765 | Prism.languages.insertBefore('smarty', 'tag', { 1766 | 'smarty-comment': { 1767 | pattern: /\{\*[\s\S]*?\*\}/, 1768 | alias: ['smarty','comment'] 1769 | } 1770 | }); 1771 | 1772 | // Tokenize all inline Smarty expressions 1773 | Prism.hooks.add('before-tokenize', function(env) { 1774 | var smartyPattern = /\{\*[\s\S]*?\*\}|\{[\s\S]+?\}/g; 1775 | var smartyLitteralStart = '{literal}'; 1776 | var smartyLitteralEnd = '{/literal}'; 1777 | var smartyLitteralMode = false; 1778 | 1779 | Prism.languages['markup-templating'].buildPlaceholders(env, 'smarty', smartyPattern, function (match) { 1780 | // Smarty tags inside {literal} block are ignored 1781 | if(match === smartyLitteralEnd) { 1782 | smartyLitteralMode = false; 1783 | } 1784 | 1785 | if(!smartyLitteralMode) { 1786 | if(match === smartyLitteralStart) { 1787 | smartyLitteralMode = true; 1788 | } 1789 | 1790 | return true; 1791 | } 1792 | return false; 1793 | }); 1794 | }); 1795 | 1796 | // Re-insert the tokens after tokenizing 1797 | Prism.hooks.add('after-tokenize', function(env) { 1798 | Prism.languages['markup-templating'].tokenizePlaceholders(env, 'smarty'); 1799 | }); 1800 | 1801 | }(Prism)); 1802 | (function () { 1803 | 1804 | if (typeof self === 'undefined' || !self.Prism || !self.document) { 1805 | return; 1806 | } 1807 | 1808 | /** 1809 | * Plugin name which is used as a class name for
 which is activating the plugin
1810 | 	 * @type {String}
1811 | 	 */
1812 | 	var PLUGIN_NAME = 'line-numbers';
1813 | 	
1814 | 	/**
1815 | 	 * Regular expression used for determining line breaks
1816 | 	 * @type {RegExp}
1817 | 	 */
1818 | 	var NEW_LINE_EXP = /\n(?!$)/g;
1819 | 
1820 | 	/**
1821 | 	 * Resizes line numbers spans according to height of line of code
1822 | 	 * @param {Element} element 
 element
1823 | 	 */
1824 | 	var _resizeElement = function (element) {
1825 | 		var codeStyles = getStyles(element);
1826 | 		var whiteSpace = codeStyles['white-space'];
1827 | 
1828 | 		if (whiteSpace === 'pre-wrap' || whiteSpace === 'pre-line') {
1829 | 			var codeElement = element.querySelector('code');
1830 | 			var lineNumbersWrapper = element.querySelector('.line-numbers-rows');
1831 | 			var lineNumberSizer = element.querySelector('.line-numbers-sizer');
1832 | 			var codeLines = codeElement.textContent.split(NEW_LINE_EXP);
1833 | 
1834 | 			if (!lineNumberSizer) {
1835 | 				lineNumberSizer = document.createElement('span');
1836 | 				lineNumberSizer.className = 'line-numbers-sizer';
1837 | 
1838 | 				codeElement.appendChild(lineNumberSizer);
1839 | 			}
1840 | 
1841 | 			lineNumberSizer.style.display = 'block';
1842 | 
1843 | 			codeLines.forEach(function (line, lineNumber) {
1844 | 				lineNumberSizer.textContent = line || '\n';
1845 | 				var lineSize = lineNumberSizer.getBoundingClientRect().height;
1846 | 				lineNumbersWrapper.children[lineNumber].style.height = lineSize + 'px';
1847 | 			});
1848 | 
1849 | 			lineNumberSizer.textContent = '';
1850 | 			lineNumberSizer.style.display = 'none';
1851 | 		}
1852 | 	};
1853 | 
1854 | 	/**
1855 | 	 * Returns style declarations for the element
1856 | 	 * @param {Element} element
1857 | 	 */
1858 | 	var getStyles = function (element) {
1859 | 		if (!element) {
1860 | 			return null;
1861 | 		}
1862 | 
1863 | 		return window.getComputedStyle ? getComputedStyle(element) : (element.currentStyle || null);
1864 | 	};
1865 | 
1866 | 	window.addEventListener('resize', function () {
1867 | 		Array.prototype.forEach.call(document.querySelectorAll('pre.' + PLUGIN_NAME), _resizeElement);
1868 | 	});
1869 | 
1870 | 	Prism.hooks.add('complete', function (env) {
1871 | 		if (!env.code) {
1872 | 			return;
1873 | 		}
1874 | 
1875 | 		// works only for  wrapped inside 
 (not inline)
1876 | 		var pre = env.element.parentNode;
1877 | 		var clsReg = /\s*\bline-numbers\b\s*/;
1878 | 		if (
1879 | 			!pre || !/pre/i.test(pre.nodeName) ||
1880 | 			// Abort only if nor the 
 nor the  have the class
1881 | 			(!clsReg.test(pre.className) && !clsReg.test(env.element.className))
1882 | 		) {
1883 | 			return;
1884 | 		}
1885 | 
1886 | 		if (env.element.querySelector('.line-numbers-rows')) {
1887 | 			// Abort if line numbers already exists
1888 | 			return;
1889 | 		}
1890 | 
1891 | 		if (clsReg.test(env.element.className)) {
1892 | 			// Remove the class 'line-numbers' from the 
1893 | 			env.element.className = env.element.className.replace(clsReg, ' ');
1894 | 		}
1895 | 		if (!clsReg.test(pre.className)) {
1896 | 			// Add the class 'line-numbers' to the 
1897 | 			pre.className += ' line-numbers';
1898 | 		}
1899 | 
1900 | 		var match = env.code.match(NEW_LINE_EXP);
1901 | 		var linesNum = match ? match.length + 1 : 1;
1902 | 		var lineNumbersWrapper;
1903 | 
1904 | 		var lines = new Array(linesNum + 1);
1905 | 		lines = lines.join('');
1906 | 
1907 | 		lineNumbersWrapper = document.createElement('span');
1908 | 		lineNumbersWrapper.setAttribute('aria-hidden', 'true');
1909 | 		lineNumbersWrapper.className = 'line-numbers-rows';
1910 | 		lineNumbersWrapper.innerHTML = lines;
1911 | 
1912 | 		if (pre.hasAttribute('data-start')) {
1913 | 			pre.style.counterReset = 'linenumber ' + (parseInt(pre.getAttribute('data-start'), 10) - 1);
1914 | 		}
1915 | 
1916 | 		env.element.appendChild(lineNumbersWrapper);
1917 | 
1918 | 		_resizeElement(pre);
1919 | 
1920 | 		Prism.hooks.run('line-numbers', env);
1921 | 	});
1922 | 
1923 | 	Prism.hooks.add('line-numbers', function (env) {
1924 | 		env.plugins = env.plugins || {};
1925 | 		env.plugins.lineNumbers = true;
1926 | 	});
1927 | 	
1928 | 	/**
1929 | 	 * Global exports
1930 | 	 */
1931 | 	Prism.plugins.lineNumbers = {
1932 | 		/**
1933 | 		 * Get node for provided line number
1934 | 		 * @param {Element} element pre element
1935 | 		 * @param {Number} number line number
1936 | 		 * @return {Element|undefined}
1937 | 		 */
1938 | 		getLine: function (element, number) {
1939 | 			if (element.tagName !== 'PRE' || !element.classList.contains(PLUGIN_NAME)) {
1940 | 				return;
1941 | 			}
1942 | 
1943 | 			var lineNumberRows = element.querySelector('.line-numbers-rows');
1944 | 			var lineNumberStart = parseInt(element.getAttribute('data-start'), 10) || 1;
1945 | 			var lineNumberEnd = lineNumberStart + (lineNumberRows.children.length - 1);
1946 | 
1947 | 			if (number < lineNumberStart) {
1948 | 				number = lineNumberStart;
1949 | 			}
1950 | 			if (number > lineNumberEnd) {
1951 | 				number = lineNumberEnd;
1952 | 			}
1953 | 
1954 | 			var lineIndex = number - lineNumberStart;
1955 | 
1956 | 			return lineNumberRows.children[lineIndex];
1957 | 		}
1958 | 	};
1959 | 
1960 | }());
1961 | (function(){
1962 | 	if (typeof self === 'undefined' || !self.Prism || !self.document) {
1963 | 		return;
1964 | 	}
1965 | 
1966 | 	var callbacks = [];
1967 | 	var map = {};
1968 | 	var noop = function() {};
1969 | 
1970 | 	Prism.plugins.toolbar = {};
1971 | 
1972 | 	/**
1973 | 	 * Register a button callback with the toolbar.
1974 | 	 *
1975 | 	 * @param {string} key
1976 | 	 * @param {Object|Function} opts
1977 | 	 */
1978 | 	var registerButton = Prism.plugins.toolbar.registerButton = function (key, opts) {
1979 | 		var callback;
1980 | 
1981 | 		if (typeof opts === 'function') {
1982 | 			callback = opts;
1983 | 		} else {
1984 | 			callback = function (env) {
1985 | 				var element;
1986 | 
1987 | 				if (typeof opts.onClick === 'function') {
1988 | 					element = document.createElement('button');
1989 | 					element.type = 'button';
1990 | 					element.addEventListener('click', function () {
1991 | 						opts.onClick.call(this, env);
1992 | 					});
1993 | 				} else if (typeof opts.url === 'string') {
1994 | 					element = document.createElement('a');
1995 | 					element.href = opts.url;
1996 | 				} else {
1997 | 					element = document.createElement('span');
1998 | 				}
1999 | 
2000 | 				element.textContent = opts.text;
2001 | 
2002 | 				return element;
2003 | 			};
2004 | 		}
2005 | 
2006 | 		callbacks.push(map[key] = callback);
2007 | 	};
2008 | 
2009 | 	/**
2010 | 	 * Post-highlight Prism hook callback.
2011 | 	 *
2012 | 	 * @param env
2013 | 	 */
2014 | 	var hook = Prism.plugins.toolbar.hook = function (env) {
2015 | 		// Check if inline or actual code block (credit to line-numbers plugin)
2016 | 		var pre = env.element.parentNode;
2017 | 		if (!pre || !/pre/i.test(pre.nodeName)) {
2018 | 			return;
2019 | 		}
2020 | 
2021 | 		// Autoloader rehighlights, so only do this once.
2022 | 		if (pre.parentNode.classList.contains('code-toolbar')) {
2023 | 			return;
2024 | 		}
2025 | 
2026 | 		// Create wrapper for 
 to prevent scrolling toolbar with content
2027 | 		var wrapper = document.createElement("div");
2028 | 		wrapper.classList.add("code-toolbar");
2029 | 		pre.parentNode.insertBefore(wrapper, pre);
2030 | 		wrapper.appendChild(pre);
2031 | 
2032 | 		// Setup the toolbar
2033 | 		var toolbar = document.createElement('div');
2034 | 		toolbar.classList.add('toolbar');
2035 | 
2036 | 		if (document.body.hasAttribute('data-toolbar-order')) {
2037 | 			callbacks = document.body.getAttribute('data-toolbar-order').split(',').map(function(key) {
2038 | 				return map[key] || noop;
2039 | 			});
2040 | 		}
2041 | 
2042 | 		callbacks.forEach(function(callback) {
2043 | 			var element = callback(env);
2044 | 
2045 | 			if (!element) {
2046 | 				return;
2047 | 			}
2048 | 
2049 | 			var item = document.createElement('div');
2050 | 			item.classList.add('toolbar-item');
2051 | 
2052 | 			item.appendChild(element);
2053 | 			toolbar.appendChild(item);
2054 | 		});
2055 | 
2056 | 		// Add our toolbar to the currently created wrapper of 
 tag
2057 | 		wrapper.appendChild(toolbar);
2058 | 	};
2059 | 
2060 | 	registerButton('label', function(env) {
2061 | 		var pre = env.element.parentNode;
2062 | 		if (!pre || !/pre/i.test(pre.nodeName)) {
2063 | 			return;
2064 | 		}
2065 | 
2066 | 		if (!pre.hasAttribute('data-label')) {
2067 | 			return;
2068 | 		}
2069 | 
2070 | 		var element, template;
2071 | 		var text = pre.getAttribute('data-label');
2072 | 		try {
2073 | 			// Any normal text will blow up this selector.
2074 | 			template = document.querySelector('template#' + text);
2075 | 		} catch (e) {}
2076 | 
2077 | 		if (template) {
2078 | 			element = template.content;
2079 | 		} else {
2080 | 			if (pre.hasAttribute('data-url')) {
2081 | 				element = document.createElement('a');
2082 | 				element.href = pre.getAttribute('data-url');
2083 | 			} else {
2084 | 				element = document.createElement('span');
2085 | 			}
2086 | 
2087 | 			element.textContent = text;
2088 | 		}
2089 | 
2090 | 		return element;
2091 | 	});
2092 | 
2093 | 	/**
2094 | 	 * Register the toolbar with Prism.
2095 | 	 */
2096 | 	Prism.hooks.add('complete', hook);
2097 | })();
2098 | 
2099 | (function(){
2100 | 
2101 | if (typeof self === 'undefined' || !self.Prism || !self.document) {
2102 | 	return;
2103 | }
2104 | 
2105 | if (!Prism.plugins.toolbar) {
2106 | 	console.warn('Show Languages plugin loaded before Toolbar plugin.');
2107 | 
2108 | 	return;
2109 | }
2110 | 
2111 | // The languages map is built automatically with gulp
2112 | var Languages = /*languages_placeholder[*/{"html":"HTML","xml":"XML","svg":"SVG","mathml":"MathML","css":"CSS","clike":"C-like","javascript":"JavaScript","abap":"ABAP","actionscript":"ActionScript","apacheconf":"Apache Configuration","apl":"APL","applescript":"AppleScript","arff":"ARFF","asciidoc":"AsciiDoc","asm6502":"6502 Assembly","aspnet":"ASP.NET (C#)","autohotkey":"AutoHotkey","autoit":"AutoIt","basic":"BASIC","csharp":"C#","cpp":"C++","coffeescript":"CoffeeScript","csp":"Content-Security-Policy","css-extras":"CSS Extras","django":"Django/Jinja2","erb":"ERB","fsharp":"F#","gedcom":"GEDCOM","glsl":"GLSL","graphql":"GraphQL","http":"HTTP","hpkp":"HTTP Public-Key-Pins","hsts":"HTTP Strict-Transport-Security","ichigojam":"IchigoJam","inform7":"Inform 7","json":"JSON","latex":"LaTeX","livescript":"LiveScript","lolcode":"LOLCODE","markup-templating":"Markup templating","matlab":"MATLAB","mel":"MEL","n4js":"N4JS","nasm":"NASM","nginx":"nginx","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","opencl":"OpenCL","parigp":"PARI/GP","php":"PHP","php-extras":"PHP Extras","plsql":"PL/SQL","powershell":"PowerShell","properties":".properties","protobuf":"Protocol Buffers","q":"Q (kdb+ database)","jsx":"React JSX","tsx":"React TSX","renpy":"Ren'py","rest":"reST (reStructuredText)","sas":"SAS","sass":"Sass (Sass)","scss":"Sass (Scss)","sql":"SQL","soy":"Soy (Closure Template)","typescript":"TypeScript","vbnet":"VB.Net","vhdl":"VHDL","vim":"vim","visual-basic":"Visual Basic","wasm":"WebAssembly","wiki":"Wiki markup","xojo":"Xojo (REALbasic)","yaml":"YAML"}/*]*/;
2113 | Prism.plugins.toolbar.registerButton('show-language', function(env) {
2114 | 	var pre = env.element.parentNode;
2115 | 	if (!pre || !/pre/i.test(pre.nodeName)) {
2116 | 		return;
2117 | 	}
2118 | 	var language = pre.getAttribute('data-language') || Languages[env.language] || (env.language && (env.language.substring(0, 1).toUpperCase() + env.language.substring(1)));
2119 | 
2120 | 	if(!language) {
2121 | 		return;
2122 | 	}
2123 | 	var element = document.createElement('span');
2124 | 	element.textContent = language;
2125 | 
2126 | 	return element;
2127 | });
2128 | 
2129 | })();
2130 | 
2131 | (function(){
2132 | 	if (typeof self === 'undefined' || !self.Prism || !self.document) {
2133 | 		return;
2134 | 	}
2135 | 
2136 | 	if (!Prism.plugins.toolbar) {
2137 | 		console.warn('Copy to Clipboard plugin loaded before Toolbar plugin.');
2138 | 
2139 | 		return;
2140 | 	}
2141 | 
2142 | 	var ClipboardJS = window.ClipboardJS || undefined;
2143 | 
2144 | 	if (!ClipboardJS && typeof require === 'function') {
2145 | 		ClipboardJS = require('clipboard');
2146 | 	}
2147 | 
2148 | 	var callbacks = [];
2149 | 
2150 | 	if (!ClipboardJS) {
2151 | 		var script = document.createElement('script');
2152 | 		var head = document.querySelector('head');
2153 | 
2154 | 		script.onload = function() {
2155 | 			ClipboardJS = window.ClipboardJS;
2156 | 
2157 | 			if (ClipboardJS) {
2158 | 				while (callbacks.length) {
2159 | 					callbacks.pop()();
2160 | 				}
2161 | 			}
2162 | 		};
2163 | 
2164 | 		script.src = 'https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js';
2165 | 		head.appendChild(script);
2166 | 	}
2167 | 
2168 | 	Prism.plugins.toolbar.registerButton('copy-to-clipboard', function (env) {
2169 | 		var linkCopy = document.createElement('a');
2170 | 		linkCopy.textContent = 'Copy';
2171 | 
2172 | 		if (!ClipboardJS) {
2173 | 			callbacks.push(registerClipboard);
2174 | 		} else {
2175 | 			registerClipboard();
2176 | 		}
2177 | 
2178 | 		return linkCopy;
2179 | 
2180 | 		function registerClipboard() {
2181 | 			var clip = new ClipboardJS(linkCopy, {
2182 | 				'text': function () {
2183 | 					return env.code;
2184 | 				}
2185 | 			});
2186 | 
2187 | 			clip.on('success', function() {
2188 | 				linkCopy.textContent = 'Copied!';
2189 | 
2190 | 				resetText();
2191 | 			});
2192 | 			clip.on('error', function () {
2193 | 				linkCopy.textContent = 'Press Ctrl+C to copy';
2194 | 
2195 | 				resetText();
2196 | 			});
2197 | 		}
2198 | 
2199 | 		function resetText() {
2200 | 			setTimeout(function () {
2201 | 				linkCopy.textContent = 'Copy';
2202 | 			}, 5000);
2203 | 		}
2204 | 	});
2205 | })();
2206 | 
2207 | 


--------------------------------------------------------------------------------
/static/prism.js:
--------------------------------------------------------------------------------
1 | /* PrismJS 1.14.0
2 | http://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+apacheconf+c+aspnet+bash+cpp+csharp+coffeescript+markup-templating+git+java+less+markdown+nginx+php+sql+python+smarty&plugins=line-numbers+toolbar+show-language+copy-to-clipboard
3 | Modified by Copterfly
4 | */
5 | var _self=(typeof window!=='undefined')?window:((typeof WorkerGlobalScope!=='undefined'&&self instanceof WorkerGlobalScope)?self:{});var Prism=(function(){var lang=/\blang(?:uage)?-([\w-]+)\b/i;var uniqueId=0;var _=_self.Prism={manual:_self.Prism&&_self.Prism.manual,disableWorkerMessageHandler:_self.Prism&&_self.Prism.disableWorkerMessageHandler,util:{encode:function(tokens){if(tokens instanceof Token){return new Token(tokens.type,_.util.encode(tokens.content),tokens.alias)}else if(_.util.type(tokens)==='Array'){return tokens.map(_.util.encode)}else{return tokens.replace(/&/g,'&').replace(/text.length){return}if(str instanceof Token){continue}if(greedy&&i!=strarr.length-1){pattern.lastIndex=pos;var match=pattern.exec(text);if(!match){break}var from=match.index+(lookbehind?match[1].length:0),to=match.index+match[0].length,k=i,p=pos;for(var len=strarr.length;k=p){++i;pos=p}}if(strarr[i]instanceof Token){continue}delNum=k-i;str=text.slice(pos,p);match.index-=pos}else{pattern.lastIndex=0;var match=pattern.exec(str),delNum=1}if(!match){if(oneshot){break}continue}if(lookbehind){lookbehindLength=match[1]?match[1].length:0}var from=match.index+lookbehindLength,match=match[0].slice(lookbehindLength),to=from+match.length,before=str.slice(0,from),after=str.slice(to);var args=[i,delNum];if(before){++i;pos+=before.length;args.push(before)}var wrapped=new Token(token,inside?_.tokenize(match,inside):match,alias,match,greedy);args.push(wrapped);if(after){args.push(after)}Array.prototype.splice.apply(strarr,args);if(delNum!=1)_.matchGrammar(text,strarr,grammar,i,pos,true,token);if(oneshot)break}}}},tokenize:function(text,grammar,language){var strarr=[text];var rest=grammar.rest;if(rest){for(var token in rest){grammar[token]=rest[token]}delete grammar.rest}_.matchGrammar(text,strarr,grammar,0,0,false);return strarr},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)}}}};var Token=_.Token=function(type,content,alias,matchedStr,greedy){this.type=type;this.content=content;this.alias=alias;this.length=(matchedStr||"").length|0;this.greedy=!!greedy};Token.stringify=function(o,language,parent){if(typeof o=='string'){return o}if(_.util.type(o)==='Array'){return o.map(function(element){return Token.stringify(element,language,o)}).join('')}var env={type:o.type,content:Token.stringify(o.content,language,parent),tag:'span',classes:['token',o.type],attributes:{},language:language,parent:parent};if(o.alias){var aliases=_.util.type(o.alias)==='Array'?o.alias:[o.alias];Array.prototype.push.apply(env.classes,aliases)}_.hooks.run('wrap',env);var attributes=Object.keys(env.attributes).map(function(name){return name+'="'+(env.attributes[name]||'').replace(/"/g,'"')+'"'}).join(' ');return'<'+env.tag+' class="'+env.classes.join(' ')+'"'+(attributes?' '+attributes:'')+'>'+env.content+''};if(!_self.document){if(!_self.addEventListener){return _self.Prism}if(!_.disableWorkerMessageHandler){_self.addEventListener('message',function(evt){var message=JSON.parse(evt.data),lang=message.language,code=message.code,immediateClose=message.immediateClose;_self.postMessage(_.highlight(code,_.languages[lang],lang));if(immediateClose){_self.close()}},false)}return _self.Prism}var script=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();if(script){_.filename=script.src;if(!_.manual&&!script.hasAttribute('data-manual')){if(document.readyState!=="loading"){if(window.requestAnimationFrame){window.requestAnimationFrame(_.highlightAll)}else{window.setTimeout(_.highlightAll,16)}}else{document.addEventListener('DOMContentLoaded',_.highlightAll)}}}return _self.Prism})();if(typeof module!=='undefined'&&module.exports){module.exports=Prism}if(typeof global!=='undefined'){global.Prism=Prism};Prism.languages.markup={'comment'://,'prolog':/<\?[\s\S]+?\?>/,'doctype'://i,'cdata'://i,'tag':{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,greedy:true,inside:{'tag':{pattern:/^<\/?[^\s>\/]+/i,inside:{'punctuation':/^<\/?/,'namespace':/^[^\s>\/:]+:/}},'attr-value':{pattern:/=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/i,inside:{'punctuation':[/^=/,{pattern:/(^|[^\\])["']/,lookbehind:true}]}},'punctuation':/\/?>/,'attr-name':{pattern:/[^\s>\/]+/,inside:{'namespace':/^[^\s>\/:]+:/}}}},'entity':/&#?[\da-z]{1,8};/i};Prism.languages.markup['tag'].inside['attr-value'].inside['entity']=Prism.languages.markup['entity'];Prism.hooks.add('wrap',function(env){if(env.type==='entity'){env.attributes['title']=env.content.replace(/&/,'&')}});Prism.languages.xml=Prism.languages.markup;Prism.languages.html=Prism.languages.markup;Prism.languages.mathml=Prism.languages.markup;Prism.languages.svg=Prism.languages.markup;Prism.languages.css={'comment':/\/\*[\s\S]*?\*\//,'atrule':{pattern:/@[\w-]+?.*?(?:;|(?=\s*\{))/i,inside:{'rule':/@[\w-]+/}},'url':/url\((?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,'selector':/[^{}\s][^{};]*?(?=\s*\{)/,'string':{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:true},'property':/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,'important':/\B!important\b/i,'function':/[-a-z0-9]+(?=\()/i,'punctuation':/[(){};:]/};Prism.languages.css['atrule'].inside.rest=Prism.languages.css;if(Prism.languages.markup){Prism.languages.insertBefore('markup','tag',{'style':{pattern:/()[\s\S]*?(?=<\/style>)/i,lookbehind:true,inside:Prism.languages.css,alias:'language-css',greedy:true}});Prism.languages.insertBefore('inside','attr-value',{'style-attr':{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{'attr-name':{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},'punctuation':/^\s*=\s*['"]|['"]\s*$/,'attr-value':{pattern:/.+/i,inside:Prism.languages.css}},alias:'language-css'}},Prism.languages.markup.tag)};Prism.languages.clike={'comment':[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:true},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:true,greedy:true}],'string':{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:true},'class-name':{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,lookbehind:true,inside:{punctuation:/[.\\]/}},'keyword':/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,'boolean':/\b(?:true|false)\b/,'function':/[a-z0-9_]+(?=\()/i,'number':/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,'operator':/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,'punctuation':/[{}[\];(),.:]/};Prism.languages.javascript=Prism.languages.extend('clike',{'keyword':/\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,'object':/\b(?:ActiveXObject|Array|Audio|Boolean|Date|Debug|Enumerator|Error|FileReader|Function|Global|Image|JSON|Math|Number|Object|Option|RegExp|String|VBArray|arguments|WebSocket|Worker|XMLHttpRequest|window|document|options|console|_this|that|result)\b/,'number':/\b(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,'function':/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i,'operator':/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\$|\.{3}/});Prism.languages.insertBefore('javascript','keyword',{'regex':{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[[^\]\r\n]+]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.})\]]))/,lookbehind:true,greedy:true},'function-variable':{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,alias:'function'},'constant':/\b[A-Z][A-Z\d_]*\b/});Prism.languages.insertBefore('javascript','string',{'template-string':{pattern:/`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/,greedy:true,inside:{'interpolation':{pattern:/\${[^}]+}/,inside:{'interpolation-punctuation':{pattern:/^\${|}$/,alias:'punctuation'},rest:null}},'string':/[\s\S]+/}}});Prism.languages.javascript['template-string'].inside['interpolation'].inside.rest=Prism.languages.javascript;if(Prism.languages.markup){Prism.languages.insertBefore('markup','tag',{'script':{pattern:/()[\s\S]*?(?=<\/script>)/i,lookbehind:true,inside:Prism.languages.javascript,alias:'language-javascript',greedy:true}})}Prism.languages.js=Prism.languages.javascript;Prism.languages.apacheconf={'comment':/#.*/,'directive-inline':{pattern:/^(\s*)\b(?:AcceptFilter|AcceptPathInfo|AccessFileName|Action|AddAlt|AddAltByEncoding|AddAltByType|AddCharset|AddDefaultCharset|AddDescription|AddEncoding|AddHandler|AddIcon|AddIconByEncoding|AddIconByType|AddInputFilter|AddLanguage|AddModuleInfo|AddOutputFilter|AddOutputFilterByType|AddType|Alias|AliasMatch|Allow|AllowCONNECT|AllowEncodedSlashes|AllowMethods|AllowOverride|AllowOverrideList|Anonymous|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail|AsyncRequestWorkerFactor|AuthBasicAuthoritative|AuthBasicFake|AuthBasicProvider|AuthBasicUseDigestAlgorithm|AuthDBDUserPWQuery|AuthDBDUserRealmQuery|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile|AuthDigestAlgorithm|AuthDigestDomain|AuthDigestNonceLifetime|AuthDigestProvider|AuthDigestQop|AuthDigestShmemSize|AuthFormAuthoritative|AuthFormBody|AuthFormDisableNoStore|AuthFormFakeBasicAuth|AuthFormLocation|AuthFormLoginRequiredLocation|AuthFormLoginSuccessLocation|AuthFormLogoutLocation|AuthFormMethod|AuthFormMimetype|AuthFormPassword|AuthFormProvider|AuthFormSitePassphrase|AuthFormSize|AuthFormUsername|AuthGroupFile|AuthLDAPAuthorizePrefix|AuthLDAPBindAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareAsUser|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPInitialBindAsUser|AuthLDAPInitialBindPattern|AuthLDAPMaxSubGroupDepth|AuthLDAPRemoteUserAttribute|AuthLDAPRemoteUserIsDN|AuthLDAPSearchAsUser|AuthLDAPSubGroupAttribute|AuthLDAPSubGroupClass|AuthLDAPUrl|AuthMerging|AuthName|AuthnCacheContext|AuthnCacheEnable|AuthnCacheProvideFor|AuthnCacheSOCache|AuthnCacheTimeout|AuthnzFcgiCheckAuthnProvider|AuthnzFcgiDefineProvider|AuthType|AuthUserFile|AuthzDBDLoginToReferer|AuthzDBDQuery|AuthzDBDRedirectQuery|AuthzDBMType|AuthzSendForbiddenOnFailure|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|CacheDefaultExpire|CacheDetailHeader|CacheDirLength|CacheDirLevels|CacheDisable|CacheEnable|CacheFile|CacheHeader|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheIgnoreQueryString|CacheIgnoreURLSessionIdentifiers|CacheKeyBaseURL|CacheLastModifiedFactor|CacheLock|CacheLockMaxAge|CacheLockPath|CacheMaxExpire|CacheMaxFileSize|CacheMinExpire|CacheMinFileSize|CacheNegotiatedDocs|CacheQuickHandler|CacheReadSize|CacheReadTime|CacheRoot|CacheSocache|CacheSocacheMaxSize|CacheSocacheMaxTime|CacheSocacheMinTime|CacheSocacheReadSize|CacheSocacheReadTime|CacheStaleOnError|CacheStoreExpired|CacheStoreNoStore|CacheStorePrivate|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateInflateLimitRequestBody|DeflateInflateRatioBurst|DeflateInflateRatioLimit|DeflateMemLevel|DeflateWindowSize|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|HeartbeatAddress|HeartbeatListen|HeartbeatMaxServers|HeartbeatStorage|HeartbeatStorage|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|IndexHeadInsert|IndexIgnore|IndexIgnoreReset|IndexOptions|IndexOrderDefault|IndexStyleSheet|InputSed|ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer|KeepAlive|KeepAliveTimeout|KeptBodySize|LanguagePriority|LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionPoolTTL|LDAPConnectionTimeout|LDAPLibraryDebug|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPReferralHopLimit|LDAPReferrals|LDAPRetries|LDAPRetryDelay|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTimeout|LDAPTrustedClientCert|LDAPTrustedGlobalCert|LDAPTrustedMode|LDAPVerifyServerCert|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|LuaHookAccessChecker|LuaHookAuthChecker|LuaHookCheckUserID|LuaHookFixups|LuaHookInsertFilter|LuaHookLog|LuaHookMapToStorage|LuaHookTranslateName|LuaHookTypeChecker|LuaInherit|LuaInputFilter|LuaMapHandler|LuaOutputFilter|LuaPackageCPath|LuaPackagePath|LuaQuickHandler|LuaRoot|LuaScope|MaxConnectionsPerChild|MaxKeepAliveRequests|MaxMemFree|MaxRangeOverlaps|MaxRangeReversals|MaxRanges|MaxRequestWorkers|MaxSpareServers|MaxSpareThreads|MaxThreads|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|MMapFile|ModemStandard|ModMimeUsePathInfo|MultiviewsMatch|Mutex|NameVirtualHost|NoProxy|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|ProxyAddHeaders|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyExpressDBMFile|ProxyExpressDBMType|ProxyExpressEnable|ProxyFtpDirCharset|ProxyFtpEscapeWildcards|ProxyFtpListOnWildcard|ProxyHTMLBufSize|ProxyHTMLCharsetOut|ProxyHTMLDocType|ProxyHTMLEnable|ProxyHTMLEvents|ProxyHTMLExtended|ProxyHTMLFixups|ProxyHTMLInterp|ProxyHTMLLinks|ProxyHTMLMeta|ProxyHTMLStripComments|ProxyHTMLURLMap|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassInherit|ProxyPassInterpolateEnv|ProxyPassMatch|ProxyPassReverse|ProxyPassReverseCookieDomain|ProxyPassReverseCookiePath|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxySCGIInternalRedirect|ProxySCGISendfile|ProxySet|ProxySourceAddress|ProxyStatus|ProxyTimeout|ProxyVia|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIPHeader|RemoteIPInternalProxy|RemoteIPInternalProxyList|RemoteIPProxiesHeader|RemoteIPTrustedProxy|RemoteIPTrustedProxyList|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|RewriteBase|RewriteCond|RewriteEngine|RewriteMap|RewriteOptions|RewriteRule|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScoreBoardFile|Script|ScriptAlias|ScriptAliasMatch|ScriptInterpreterSource|ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock|SecureListen|SeeRequestTail|SendBufferSize|ServerAdmin|ServerAlias|ServerLimit|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|Session|SessionCookieName|SessionCookieName2|SessionCookieRemove|SessionCryptoCipher|SessionCryptoDriver|SessionCryptoPassphrase|SessionCryptoPassphraseFile|SessionDBDCookieName|SessionDBDCookieName2|SessionDBDCookieRemove|SessionDBDDeleteLabel|SessionDBDInsertLabel|SessionDBDPerUser|SessionDBDSelectLabel|SessionDBDUpdateLabel|SessionEnv|SessionExclude|SessionHeader|SessionInclude|SessionMaxAge|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIETag|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSLCACertificateFile|SSLCACertificatePath|SSLCADNRequestFile|SSLCADNRequestPath|SSLCARevocationCheck|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLCompression|SSLCryptoDevice|SSLEngine|SSLFIPS|SSLHonorCipherOrder|SSLInsecureRenegotiation|SSLOCSPDefaultResponder|SSLOCSPEnable|SSLOCSPOverrideResponder|SSLOCSPResponderTimeout|SSLOCSPResponseMaxAge|SSLOCSPResponseTimeSkew|SSLOCSPUseRequestNonce|SSLOpenSSLConfCmd|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationCheck|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCheckPeerCN|SSLProxyCheckPeerExpire|SSLProxyCheckPeerName|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateChainFile|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRenegBufferSize|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLSessionTicketKeyFile|SSLSRPUnknownUserSeed|SSLSRPVerifierFile|SSLStaplingCache|SSLStaplingErrorCacheTimeout|SSLStaplingFakeTryLater|SSLStaplingForceURL|SSLStaplingResponderTimeout|SSLStaplingResponseMaxAge|SSLStaplingResponseTimeSkew|SSLStaplingReturnResponderErrors|SSLStaplingStandardCacheTimeout|SSLStrictSNIVHostCheck|SSLUserName|SSLUseStapling|SSLVerifyClient|SSLVerifyDepth|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\b/mi,lookbehind:true,alias:'property'},'directive-block':{pattern:/<\/?\b(?:AuthnProviderAlias|AuthzProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|RequireAll|RequireAny|RequireNone|VirtualHost)\b *.*>/i,inside:{'directive-block':{pattern:/^<\/?\w+/,inside:{'punctuation':/^<\/?/},alias:'tag'},'directive-block-parameter':{pattern:/.*[^>]/,inside:{'punctuation':/:/,'string':{pattern:/("|').*\1/,inside:{'variable':/[$%]\{?(?:\w\.?[-+:]?)+\}?/}}},alias:'attr-value'},'punctuation':/>/},alias:'tag'},'directive-flags':{pattern:/\[(?:\w,?)+\]/,alias:'keyword'},'string':{pattern:/("|').*\1/,inside:{'variable':/[$%]\{?(?:\w\.?[-+:]?)+\}?/}},'variable':/[$%]\{?(?:\w\.?[-+:]?)+\}?/,'regex':/\^?.*\$|\^.*\$?/};Prism.languages.c=Prism.languages.extend('clike',{'keyword':/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,'operator':/-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/]/,'number':/(?:\b0x[\da-f]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i});Prism.languages.insertBefore('c','string',{'macro':{pattern:/(^\s*)#\s*[a-z]+(?:[^\r\n\\]|\\(?:\r\n|[\s\S]))*/im,lookbehind:true,alias:'property',inside:{'string':{pattern:/(#\s*include\s*)(?:<.+?>|("|')(?:\\?.)+?\2)/,lookbehind:true},'directive':{pattern:/(#\s*)\b(?:define|defined|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,lookbehind:true,alias:'keyword'}}},'constant':/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/});delete Prism.languages.c['class-name'];delete Prism.languages.c['boolean'];Prism.languages.aspnet=Prism.languages.extend('markup',{'page-directive tag':{pattern:/<%\s*@.*%>/i,inside:{'page-directive tag':/<%\s*@\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,rest:Prism.languages.markup.tag.inside}},'directive tag':{pattern:/<%.*%>/i,inside:{'directive tag':/<%\s*?[$=%#:]{0,2}|%>/i,rest:Prism.languages.csharp}}});Prism.languages.aspnet.tag.pattern=/<(?!%)\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i;Prism.languages.insertBefore('inside','punctuation',{'directive tag':Prism.languages.aspnet['directive tag']},Prism.languages.aspnet.tag.inside["attr-value"]);Prism.languages.insertBefore('aspnet','comment',{'asp comment':/<%--[\s\S]*?--%>/});Prism.languages.insertBefore('aspnet',Prism.languages.javascript?'script':'tag',{'asp script':{pattern:/()[\s\S]*?(?=<\/script>)/i,lookbehind:true,inside:Prism.languages.csharp||{}}});(function(Prism){var insideString={variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:true},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\([^)]+\)|`[^`]+`/,greedy:true,inside:{variable:/^\$\(|^`|\)$|`$/}},/\$(?:[\w#?*!@]+|\{[^}]+\})/i]};Prism.languages.bash={'shebang':{pattern:/^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,alias:'important'},'comment':{pattern:/(^|[^"{\\])#.*/,lookbehind:true},'string':[{pattern:/((?:^|[^<])<<\s*)["']?(\w+?)["']?\s*\r?\n(?:[\s\S])*?\r?\n\2/,lookbehind:true,greedy:true,inside:insideString},{pattern:/(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/,greedy:true,inside:insideString}],'variable':insideString.variable,'function':{pattern:/(^|[\s;|&])(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|[\s;|&])/,lookbehind:true},'keyword':{pattern:/(^|[\s;|&])(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|[\s;|&])/,lookbehind:true},'boolean':{pattern:/(^|[\s;|&])(?:true|false)(?=$|[\s;|&])/,lookbehind:true},'operator':/&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/,'punctuation':/\$?\(\(?|\)\)?|\.\.|[{}[\];]/};var inside=insideString.variable[1].inside;inside.string=Prism.languages.bash.string;inside['function']=Prism.languages.bash['function'];inside.keyword=Prism.languages.bash.keyword;inside['boolean']=Prism.languages.bash['boolean'];inside.operator=Prism.languages.bash.operator;inside.punctuation=Prism.languages.bash.punctuation;Prism.languages.shell=Prism.languages.bash})(Prism);Prism.languages.cpp=Prism.languages.extend('c',{'keyword':/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,'boolean':/\b(?:true|false)\b/,'operator':/--?|\+\+?|!=?|<{1,2}=?|>{1,2}=?|->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|\|?|\?|\*|\/|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/});Prism.languages.insertBefore('cpp','keyword',{'class-name':{pattern:/(class\s+)\w+/i,lookbehind:true}});Prism.languages.insertBefore('cpp','string',{'raw-string':{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:'string',greedy:true}});Prism.languages.csharp=Prism.languages.extend('clike',{'keyword':/\b(?:abstract|add|alias|as|ascending|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|descending|do|double|dynamic|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|from|get|global|goto|group|if|implicit|in|int|interface|internal|into|is|join|let|lock|long|namespace|new|null|object|operator|orderby|out|override|params|partial|private|protected|public|readonly|ref|remove|return|sbyte|sealed|select|set|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|value|var|virtual|void|volatile|where|while|yield)\b/,'string':[{pattern:/@("|')(?:\1\1|\\[\s\S]|(?!\1)[^\\])*\1/,greedy:true},{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*?\1/,greedy:true}],'class-name':[{pattern:/\b[A-Z]\w*(?:\.\w+)*\b(?=\s+\w+)/,inside:{punctuation:/\./}},{pattern:/(\[)[A-Z]\w*(?:\.\w+)*\b/,lookbehind:true,inside:{punctuation:/\./}},{pattern:/(\b(?:class|interface)\s+[A-Z]\w*(?:\.\w+)*\s*:\s*)[A-Z]\w*(?:\.\w+)*\b/,lookbehind:true,inside:{punctuation:/\./}},{pattern:/((?:\b(?:class|interface|new)\s+)|(?:catch\s+\())[A-Z]\w*(?:\.\w+)*\b/,lookbehind:true,inside:{punctuation:/\./}}],'number':/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)f?/i});Prism.languages.insertBefore('csharp','class-name',{'generic-method':{pattern:/\w+\s*<[^>\r\n]+?>\s*(?=\()/,inside:{function:/^\w+/,'class-name':{pattern:/\b[A-Z]\w*(?:\.\w+)*\b/,inside:{punctuation:/\./}},keyword:Prism.languages.csharp.keyword,punctuation:/[<>(),.:]/}},'preprocessor':{pattern:/(^\s*)#.*/m,lookbehind:true,alias:'property',inside:{'directive':{pattern:/(\s*#)\b(?:define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:true,alias:'keyword'}}}});Prism.languages.dotnet=Prism.languages.csharp;(function(Prism){var comment=/#(?!\{).+/,interpolation={pattern:/#\{[^}]+\}/,alias:'variable'};Prism.languages.coffeescript=Prism.languages.extend('javascript',{'comment':comment,'string':[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:true},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:true,inside:{'interpolation':interpolation}}],'keyword':/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,'class-member':{pattern:/@(?!\d)\w+/,alias:'variable'}});Prism.languages.insertBefore('coffeescript','comment',{'multiline-comment':{pattern:/###[\s\S]+?###/,alias:'comment'},'block-regex':{pattern:/\/{3}[\s\S]*?\/{3}/,alias:'regex',inside:{'comment':comment,'interpolation':interpolation}}});Prism.languages.insertBefore('coffeescript','string',{'inline-javascript':{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{'delimiter':{pattern:/^`|`$/,alias:'punctuation'},rest:Prism.languages.javascript}},'multiline-string':[{pattern:/'''[\s\S]*?'''/,greedy:true,alias:'string'},{pattern:/"""[\s\S]*?"""/,greedy:true,alias:'string',inside:{interpolation:interpolation}}]});Prism.languages.insertBefore('coffeescript','keyword',{'property':/(?!\d)\w+(?=\s*:(?!:))/});delete Prism.languages.coffeescript['template-string']}(Prism));Prism.languages['markup-templating']={};Object.defineProperties(Prism.languages['markup-templating'],{buildPlaceholders:{value:function(env,language,placeholderPattern,replaceFilter){if(env.language!==language){return}env.tokenStack=[];env.code=env.code.replace(placeholderPattern,function(match){if(typeof replaceFilter==='function'&&!replaceFilter(match)){return match}var i=env.tokenStack.length;while(env.code.indexOf('___'+language.toUpperCase()+i+'___')!==-1)++i;env.tokenStack[i]=match;return'___'+language.toUpperCase()+i+'___'});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);var walkTokens=function(tokens){if(j>=keys.length){return}for(var i=0;i-1){++j;var before=s.substring(0,index);var middle=new Prism.Token(language,Prism.tokenize(t,env.grammar,language),'language-'+language,t);var after=s.substring(index+('___'+language.toUpperCase()+k+'___').length);var replacement;if(before||after){replacement=[before,middle,after].filter(function(v){return!!v});walkTokens(replacement)}else{replacement=middle}if(typeof token==='string'){Array.prototype.splice.apply(tokens,[i,1].concat(replacement))}else{token.content=replacement}if(j>=keys.length){break}}}else if(token.content&&typeof token.content!=='string'){walkTokens(token.content)}}};walkTokens(env.tokens)}}});Prism.languages.git={'comment':/^#.*/m,'deleted':/^[-–].*/m,'inserted':/^\+.*/m,'string':/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/m,'command':{pattern:/^.*\$ git .*$/m,inside:{'parameter':/\s--?\w+/m}},'coord':/^@@.*@@$/m,'commit_sha1':/^commit \w{40}$/m};Prism.languages.java=Prism.languages.extend('clike',{'keyword':/\b(?:abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,'number':/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp-]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?[df]?/i,'operator':{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:true}});Prism.languages.insertBefore('java','function',{'annotation':{alias:'punctuation',pattern:/(^|[^.])@\w+/,lookbehind:true}});Prism.languages.insertBefore('java','class-name',{'generics':{pattern:/<\s*\w+(?:\.\w+)?(?:\s*,\s*\w+(?:\.\w+)?)*>/i,alias:'function',inside:{keyword:Prism.languages.java.keyword,punctuation:/[<>(),.:]/}}});Prism.languages.less=Prism.languages.extend('css',{'comment':[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:true}],'atrule':{pattern:/@[\w-]+?(?:\([^{}]+\)|[^(){};])*?(?=\s*\{)/i,inside:{'punctuation':/[:()]/}},'selector':{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\([^{}]*\)|[^{};@])*?(?=\s*\{)/,inside:{'variable':/@+[\w-]+/}},'property':/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/i,'punctuation':/[{}();:,]/,'operator':/[+\-*\/]/});Prism.languages.insertBefore('less','punctuation',{'function':Prism.languages.less.function});Prism.languages.insertBefore('less','property',{'variable':[{pattern:/@[\w-]+\s*:/,inside:{"punctuation":/:/}},/@@?[\w-]+/],'mixin-usage':{pattern:/([{;]\s*)[.#](?!\d)[\w-]+.*?(?=[(;])/,lookbehind:true,alias:'function'}});Prism.languages.markdown=Prism.languages.extend('markup',{});Prism.languages.insertBefore('markdown','prolog',{'blockquote':{pattern:/^>(?:[\t ]*>)*/m,alias:'punctuation'},'code':[{pattern:/^(?: {4}|\t).+/m,alias:'keyword'},{pattern:/``.+?``|`[^`\n]+`/,alias:'keyword'}],'title':[{pattern:/\w+.*(?:\r?\n|\r)(?:==+|--+)/,alias:'important',inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:true,alias:'important',inside:{punctuation:/^#+|#+$/}}],'hr':{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:true,alias:'punctuation'},'list':{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:true,alias:'punctuation'},'url-reference':{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{'variable':{pattern:/^(!?\[)[^\]]+/,lookbehind:true},'string':/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,'punctuation':/^[\[\]!:]|[<>]/},alias:'url'},'bold':{pattern:/(^|[^\\])(\*\*|__)(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:true,inside:{'punctuation':/^\*\*|^__|\*\*$|__$/}},'italic':{pattern:/(^|[^\\])([*_])(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:true,inside:{'punctuation':/^[*_]|[*_]$/}},'url':{pattern:/!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[[^\]\n]*\])/,inside:{'variable':{pattern:/(!?\[)[^\]]+(?=\]$)/,lookbehind:true},'string':{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}});Prism.languages.markdown['bold'].inside['url']=Prism.languages.markdown['url'];Prism.languages.markdown['italic'].inside['url']=Prism.languages.markdown['url'];Prism.languages.markdown['bold'].inside['italic']=Prism.languages.markdown['italic'];Prism.languages.markdown['italic'].inside['bold']=Prism.languages.markdown['bold'];Prism.languages.nginx=Prism.languages.extend('clike',{'comment':{pattern:/(^|[^"{\\])#.*/,lookbehind:true},'keyword':/\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|events|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types)\b/i});Prism.languages.insertBefore('nginx','keyword',{'variable':/\$[a-z_]+/i});(function(Prism){Prism.languages.php=Prism.languages.extend('clike',{'keyword':/\b(?:and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,'constant':/\b[A-Z0-9_]{2,}\b/,'comment':{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:true}});Prism.languages.insertBefore('php','string',{'shell-comment':{pattern:/(^|[^\\])#.*/,lookbehind:true,alias:'comment'}});Prism.languages.insertBefore('php','keyword',{'delimiter':{pattern:/\?>|<\?(?:php|=)?/i,alias:'important'},'variable':/\$+(?:\w+\b|(?={))/i,'package':{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:true,inside:{punctuation:/\\/}}});Prism.languages.insertBefore('php','operator',{'property':{pattern:/(->)[\w]+/,lookbehind:true}});Prism.languages.insertBefore('php','string',{'nowdoc-string':{pattern:/<<<'([^']+)'(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;/,greedy:true,alias:'string',inside:{'delimiter':{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:'symbol',inside:{'punctuation':/^<<<'?|[';]$/}}}},'heredoc-string':{pattern:/<<<(?:"([^"]+)"(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;|([a-z_]\w*)(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\2;)/i,greedy:true,alias:'string',inside:{'delimiter':{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:'symbol',inside:{'punctuation':/^<<<"?|[";]$/}},'interpolation':null}},'single-quoted-string':{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:true,alias:'string'},'double-quoted-string':{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:true,alias:'string',inside:{'interpolation':null}}});delete Prism.languages.php['string'];var string_interpolation={pattern:/{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[.+?]|->\w+)*)/,lookbehind:true,inside:{rest:Prism.languages.php}};Prism.languages.php['heredoc-string'].inside['interpolation']=string_interpolation;Prism.languages.php['double-quoted-string'].inside['interpolation']=string_interpolation;Prism.hooks.add('before-tokenize',function(env){if(!/(?:<\?php|<\?)/ig.test(env.code)){return}var phpPattern=/(?:<\?php|<\?)[\s\S]*?(?:\?>|$)/ig;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.sql={'comment':{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:true},'string':{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\])*\2/,greedy:true,lookbehind:true},'variable':/@[\w.$]+|@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,'function':/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,'keyword':/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,'boolean':/\b(?:TRUE|FALSE|NULL)\b/i,'number':/\b0x[\da-f]+\b|\b\d+\.?\d*|\B\.\d+\b/i,'operator':/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,'punctuation':/[;[\]()`,.]/};Prism.languages.python={'comment':{pattern:/(^|[^\\])#.*/,lookbehind:true},'triple-quoted-string':{pattern:/("""|''')[\s\S]+?\1/,greedy:true,alias:'string'},'string':{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:true},'function':{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:true},'class-name':{pattern:/(\bclass\s+)\w+/i,lookbehind:true},'keyword':/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|pass|print|raise|return|try|while|with|yield|self)\b/,'module':/\b(?:exceptions|os|os.path|stat|string|re|math|cmath|operator|copy|sys|atexit|time|datetime|types|gc|io|functools|codecs|json|thread|threading|hashlib|shutil|md5|code|random)\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|isfile|mkdir|makedirs|exists|strftime)\b/,'boolean':/\b(?:True|False|None)\b/,'number':/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,'operator':/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,'punctuation':/[{}[\];(),.:]/};(function(Prism){Prism.languages.smarty={'comment':/\{\*[\s\S]*?\*\}/,'delimiter':{pattern:/^\{|\}$/i,alias:'punctuation'},'string':/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,'number':/\b0x[\dA-Fa-f]+|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][-+]?\d+)?/,'variable':[/\$(?!\d)\w+/,/#(?!\d)\w+#/,{pattern:/(\.|->)(?!\d)\w+/,lookbehind:true},{pattern:/(\[)(?!\d)\w+(?=\])/,lookbehind:true}],'function':[{pattern:/(\|\s*)@?(?!\d)\w+/,lookbehind:true},/^\/?(?!\d)\w+/,/(?!\d)\w+(?=\()/],'attr-name':{pattern:/\w+\s*=\s*(?:(?!\d)\w+)?/,inside:{"variable":{pattern:/(=\s*)(?!\d)\w+/,lookbehind:true},"operator":/=/}},'punctuation':[/[\[\]().,:`]|->/],'operator':[/[+\-*\/%]|==?=?|[!<>]=?|&&|\|\|?/,/\bis\s+(?:not\s+)?(?:div|even|odd)(?:\s+by)?\b/,/\b(?:eq|neq?|gt|lt|gt?e|lt?e|not|mod|or|and)\b/],'keyword':/\b(?:false|off|on|no|true|yes)\b/};Prism.languages.insertBefore('smarty','tag',{'smarty-comment':{pattern:/\{\*[\s\S]*?\*\}/,alias:['smarty','comment']}});Prism.hooks.add('before-tokenize',function(env){var smartyPattern=/\{\*[\s\S]*?\*\}|\{[\s\S]+?\}/g;var smartyLitteralStart='{literal}';var smartyLitteralEnd='{/literal}';var smartyLitteralMode=false;Prism.languages['markup-templating'].buildPlaceholders(env,'smarty',smartyPattern,function(match){if(match===smartyLitteralEnd){smartyLitteralMode=false}if(!smartyLitteralMode){if(match===smartyLitteralStart){smartyLitteralMode=true}return true}return false})});Prism.hooks.add('after-tokenize',function(env){Prism.languages['markup-templating'].tokenizePlaceholders(env,'smarty')})}(Prism));(function(){if(typeof self==='undefined'||!self.Prism||!self.document){return}var PLUGIN_NAME='line-numbers';var NEW_LINE_EXP=/\n(?!$)/g;var _resizeElement=function(element){var codeStyles=getStyles(element);var whiteSpace=codeStyles['white-space'];if(whiteSpace==='pre-wrap'||whiteSpace==='pre-line'){var codeElement=element.querySelector('code');var lineNumbersWrapper=element.querySelector('.line-numbers-rows');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.style.display='block';codeLines.forEach(function(line,lineNumber){lineNumberSizer.textContent=line||'\n';var lineSize=lineNumberSizer.getBoundingClientRect().height;lineNumbersWrapper.children[lineNumber].style.height=lineSize+'px'});lineNumberSizer.textContent='';lineNumberSizer.style.display='none'}};var getStyles=function(element){if(!element){return null}return window.getComputedStyle?getComputedStyle(element):(element.currentStyle||null)};window.addEventListener('resize',function(){Array.prototype.forEach.call(document.querySelectorAll('pre.'+PLUGIN_NAME),_resizeElement)});Prism.hooks.add('complete',function(env){if(!env.code){return}var pre=env.element.parentNode;var clsReg=/\s*\bline-numbers\b\s*/;if(!pre||!/pre/i.test(pre.nodeName)||(!clsReg.test(pre.className)&&!clsReg.test(env.element.className))){return}if(env.element.querySelector('.line-numbers-rows')){return}if(clsReg.test(env.element.className)){env.element.className=env.element.className.replace(clsReg,' ')}if(!clsReg.test(pre.className)){pre.className+=' line-numbers'}var match=env.code.match(NEW_LINE_EXP);var linesNum=match?match.length+1:1;var lineNumbersWrapper;var lines=new Array(linesNum+1);lines=lines.join('');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);_resizeElement(pre);Prism.hooks.run('line-numbers',env)});Prism.hooks.add('line-numbers',function(env){env.plugins=env.plugins||{};env.plugins.lineNumbers=true});Prism.plugins.lineNumbers={getLine:function(element,number){if(element.tagName!=='PRE'||!element.classList.contains(PLUGIN_NAME)){return}var lineNumberRows=element.querySelector('.line-numbers-rows');var lineNumberStart=parseInt(element.getAttribute('data-start'),10)||1;var lineNumberEnd=lineNumberStart+(lineNumberRows.children.length-1);if(numberlineNumberEnd){number=lineNumberEnd}var lineIndex=number-lineNumberStart;return lineNumberRows.children[lineIndex]}}}());(function(){if(typeof self==='undefined'||!self.Prism||!self.document){return}var callbacks=[];var map={};var noop=function(){};Prism.plugins.toolbar={};var registerButton=Prism.plugins.toolbar.registerButton=function(key,opts){var callback;if(typeof opts==='function'){callback=opts}else{callback=function(env){var element;if(typeof opts.onClick==='function'){element=document.createElement('button');element.type='button';element.addEventListener('click',function(){opts.onClick.call(this,env)})}else if(typeof opts.url==='string'){element=document.createElement('a');element.href=opts.url}else{element=document.createElement('span')}element.textContent=opts.text;return element}}callbacks.push(map[key]=callback)};var hook=Prism.plugins.toolbar.hook=function(env){var pre=env.element.parentNode;if(!pre||!/pre/i.test(pre.nodeName)){return}if(pre.parentNode.classList.contains('code-toolbar')){return}var wrapper=document.createElement("div");wrapper.classList.add("code-toolbar");pre.parentNode.insertBefore(wrapper,pre);wrapper.appendChild(pre);var toolbar=document.createElement('div');toolbar.classList.add('toolbar');if(document.body.hasAttribute('data-toolbar-order')){callbacks=document.body.getAttribute('data-toolbar-order').split(',').map(function(key){return map[key]||noop})}callbacks.forEach(function(callback){var element=callback(env);if(!element){return}var item=document.createElement('div');item.classList.add('toolbar-item');item.appendChild(element);toolbar.appendChild(item)});wrapper.appendChild(toolbar)};registerButton('label',function(env){var pre=env.element.parentNode;if(!pre||!/pre/i.test(pre.nodeName)){return}if(!pre.hasAttribute('data-label')){return}var element,template;var text=pre.getAttribute('data-label');try{template=document.querySelector('template#'+text)}catch(e){}if(template){element=template.content}else{if(pre.hasAttribute('data-url')){element=document.createElement('a');element.href=pre.getAttribute('data-url')}else{element=document.createElement('span')}element.textContent=text}return element});Prism.hooks.add('complete',hook)})();(function(){if(typeof self==='undefined'||!self.Prism||!self.document){return}if(!Prism.plugins.toolbar){console.warn('Show Languages plugin loaded before Toolbar plugin.');return}var Languages={"html":"HTML","xml":"XML","svg":"SVG","mathml":"MathML","css":"CSS","clike":"C-like","javascript":"JavaScript","abap":"ABAP","actionscript":"ActionScript","apacheconf":"Apache Configuration","apl":"APL","applescript":"AppleScript","arff":"ARFF","asciidoc":"AsciiDoc","asm6502":"6502 Assembly","aspnet":"ASP.NET (C#)","autohotkey":"AutoHotkey","autoit":"AutoIt","basic":"BASIC","csharp":"C#","cpp":"C++","coffeescript":"CoffeeScript","csp":"Content-Security-Policy","css-extras":"CSS Extras","django":"Django/Jinja2","erb":"ERB","fsharp":"F#","gedcom":"GEDCOM","glsl":"GLSL","graphql":"GraphQL","http":"HTTP","hpkp":"HTTP Public-Key-Pins","hsts":"HTTP Strict-Transport-Security","ichigojam":"IchigoJam","inform7":"Inform 7","json":"JSON","latex":"LaTeX","livescript":"LiveScript","lolcode":"LOLCODE","markup-templating":"Markup templating","matlab":"MATLAB","mel":"MEL","n4js":"N4JS","nasm":"NASM","nginx":"nginx","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","opencl":"OpenCL","parigp":"PARI/GP","php":"PHP","php-extras":"PHP Extras","plsql":"PL/SQL","powershell":"PowerShell","properties":".properties","protobuf":"Protocol Buffers","q":"Q (kdb+ database)","jsx":"React JSX","tsx":"React TSX","renpy":"Ren'py","rest":"reST (reStructuredText)","sas":"SAS","sass":"Sass (Sass)","scss":"Sass (Scss)","sql":"SQL","soy":"Soy (Closure Template)","typescript":"TypeScript","vbnet":"VB.Net","vhdl":"VHDL","vim":"vim","visual-basic":"Visual Basic","wasm":"WebAssembly","wiki":"Wiki markup","xojo":"Xojo (REALbasic)","yaml":"YAML"};Prism.plugins.toolbar.registerButton('show-language',function(env){var pre=env.element.parentNode;if(!pre||!/pre/i.test(pre.nodeName)){return}var language=pre.getAttribute('data-language')||Languages[env.language]||(env.language&&(env.language.substring(0,1).toUpperCase()+env.language.substring(1)));if(!language){return}var element=document.createElement('span');element.textContent=language;return element})})();(function(){if(typeof self==='undefined'||!self.Prism||!self.document){return}if(!Prism.plugins.toolbar){console.warn('Copy to Clipboard plugin loaded before Toolbar plugin.');return}var ClipboardJS=window.ClipboardJS||undefined;if(!ClipboardJS&&typeof require==='function'){ClipboardJS=require('clipboard')}var callbacks=[];if(!ClipboardJS){var script=document.createElement('script');var head=document.querySelector('head');script.onload=function(){ClipboardJS=window.ClipboardJS;if(ClipboardJS){while(callbacks.length){callbacks.pop()()}}};script.src='https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js';head.appendChild(script)}Prism.plugins.toolbar.registerButton('copy-to-clipboard',function(env){var linkCopy=document.createElement('a');linkCopy.textContent='Copy';if(!ClipboardJS){callbacks.push(registerClipboard)}else{registerClipboard()}return linkCopy;function registerClipboard(){var clip=new ClipboardJS(linkCopy,{'text':function(){return env.code}});clip.on('success',function(){linkCopy.textContent='Copied!';resetText()});clip.on('error',function(){linkCopy.textContent='Press Ctrl+C to copy';resetText()})}function resetText(){setTimeout(function(){linkCopy.textContent='Copy'},5000)}})})();


--------------------------------------------------------------------------------
/static/styles/coy.css:
--------------------------------------------------------------------------------
  1 | /* PrismJS 1.14.0
  2 | http://prismjs.com/download.html#themes=prism-coy&languages=markup+css+clike+javascript+apacheconf+c+aspnet+cpp+csharp+coffeescript+markup-templating+git+java+less+markdown+nginx+php+sql+python+smarty&plugins=line-numbers+toolbar+show-language+copy-to-clipboard */
  3 | /**
  4 |  * prism.js Coy theme for JavaScript, CoffeeScript, CSS and HTML
  5 |  * Based on https://github.com/tshedor/workshop-wp-theme (Example: http://workshop.kansan.com/category/sessions/basics or http://workshop.timshedor.com/category/sessions/basics);
  6 |  * @author Tim  Shedor
  7 |  */
  8 | 
  9 | code[class*="language-"],
 10 | pre[class*="language-"] {
 11 | 	color: black;
 12 | 	background: none;
 13 | 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 14 | 	text-align: left;
 15 | 	white-space: pre;
 16 | 	word-spacing: normal;
 17 | 	word-break: normal;
 18 | 	word-wrap: normal;
 19 | 	line-height: 1.5;
 20 | 
 21 | 	-moz-tab-size: 4;
 22 | 	-o-tab-size: 4;
 23 | 	tab-size: 4;
 24 | 
 25 | 	-webkit-hyphens: none;
 26 | 	-moz-hyphens: none;
 27 | 	-ms-hyphens: none;
 28 | 	hyphens: none;
 29 | }
 30 | 
 31 | /* Code blocks */
 32 | pre[class*="language-"] {
 33 | 	position: relative;
 34 | 	margin: .5em 0;
 35 | 	overflow: visible;
 36 | 	padding: 0;
 37 | }
 38 | pre[class*="language-"]>code {
 39 | 	position: relative;
 40 | 	border-left: 10px solid #358ccb;
 41 | 	box-shadow: -1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf;
 42 | 	background-color: #fdfdfd;
 43 | 	background-image: linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
 44 | 	background-size: 3em 3em;
 45 | 	background-origin: content-box;
 46 | 	background-attachment: local;
 47 | }
 48 | 
 49 | code[class*="language"] {
 50 | 	max-height: inherit;
 51 | 	height: inherit;
 52 | 	padding: 0 1em;
 53 | 	display: block;
 54 | 	overflow: auto;
 55 | }
 56 | 
 57 | /* Margin bottom to accomodate shadow */
 58 | :not(pre) > code[class*="language-"],
 59 | pre[class*="language-"] {
 60 | 	background-color: #fdfdfd;
 61 | 	-webkit-box-sizing: border-box;
 62 | 	-moz-box-sizing: border-box;
 63 | 	box-sizing: border-box;
 64 | 	margin-bottom: 1em;
 65 | }
 66 | 
 67 | /* Inline code */
 68 | :not(pre) > code[class*="language-"] {
 69 | 	position: relative;
 70 | 	padding: .2em;
 71 | 	border-radius: 0.3em;
 72 | 	color: #c92c2c;
 73 | 	border: 1px solid rgba(0, 0, 0, 0.1);
 74 | 	display: inline;
 75 | 	white-space: normal;
 76 | }
 77 | 
 78 | pre[class*="language-"]:before,
 79 | pre[class*="language-"]:after {
 80 | 	content: '';
 81 | 	z-index: -2;
 82 | 	display: block;
 83 | 	position: absolute;
 84 | 	bottom: 0.75em;
 85 | 	left: 0.18em;
 86 | 	width: 40%;
 87 | 	height: 20%;
 88 | 	max-height: 13em;
 89 | 	box-shadow: 0px 13px 8px #979797;
 90 | 	-webkit-transform: rotate(-2deg);
 91 | 	-moz-transform: rotate(-2deg);
 92 | 	-ms-transform: rotate(-2deg);
 93 | 	-o-transform: rotate(-2deg);
 94 | 	transform: rotate(-2deg);
 95 | }
 96 | 
 97 | :not(pre) > code[class*="language-"]:after,
 98 | pre[class*="language-"]:after {
 99 | 	right: 0.75em;
100 | 	left: auto;
101 | 	-webkit-transform: rotate(2deg);
102 | 	-moz-transform: rotate(2deg);
103 | 	-ms-transform: rotate(2deg);
104 | 	-o-transform: rotate(2deg);
105 | 	transform: rotate(2deg);
106 | }
107 | 
108 | .token.comment,
109 | .token.block-comment,
110 | .token.prolog,
111 | .token.doctype,
112 | .token.cdata {
113 | 	color: #7D8B99;
114 | }
115 | 
116 | .token.punctuation {
117 | 	color: #5F6364;
118 | }
119 | 
120 | .token.property,
121 | .token.tag,
122 | .token.boolean,
123 | .token.number,
124 | .token.function-name,
125 | .token.constant,
126 | .token.symbol,
127 | .token.deleted {
128 | 	color: #c92c2c;
129 | }
130 | 
131 | .token.selector,
132 | .token.attr-name,
133 | .token.string,
134 | .token.char,
135 | .token.function,
136 | .token.builtin,
137 | .token.inserted {
138 | 	color: #2f9c0a;
139 | }
140 | 
141 | .token.operator,
142 | .token.entity,
143 | .token.url,
144 | .token.variable {
145 | 	color: #a67f59;
146 | 	background: rgba(255, 255, 255, 0.5);
147 | }
148 | 
149 | .token.atrule,
150 | .token.attr-value,
151 | .token.keyword,
152 | .token.class-name {
153 | 	color: #1990b8;
154 | }
155 | 
156 | .token.regex,
157 | .token.important {
158 | 	color: #e90;
159 | }
160 | 
161 | .language-css .token.string,
162 | .style .token.string {
163 | 	color: #a67f59;
164 | 	background: rgba(255, 255, 255, 0.5);
165 | }
166 | 
167 | .token.important {
168 | 	font-weight: normal;
169 | }
170 | 
171 | .token.bold {
172 | 	font-weight: bold;
173 | }
174 | .token.italic {
175 | 	font-style: italic;
176 | }
177 | 
178 | .token.entity {
179 | 	cursor: help;
180 | }
181 | 
182 | .namespace {
183 | 	opacity: .7;
184 | }
185 | 
186 | @media screen and (max-width: 767px) {
187 | 	pre[class*="language-"]:before,
188 | 	pre[class*="language-"]:after {
189 | 		bottom: 14px;
190 | 		box-shadow: none;
191 | 	}
192 | 
193 | }
194 | 
195 | /* Plugin styles */
196 | .token.tab:not(:empty):before,
197 | .token.cr:before,
198 | .token.lf:before {
199 | 	color: #e0d7d1;
200 | }
201 | 
202 | /* Plugin styles: Line Numbers */
203 | pre[class*="language-"].line-numbers {
204 | 	padding-left: 0;
205 | }
206 | 
207 | pre[class*="language-"].line-numbers code {
208 | 	padding-left: 3.8em;
209 | }
210 | 
211 | pre[class*="language-"].line-numbers .line-numbers-rows {
212 | 	left: 0;
213 | }
214 | 
215 | /* Plugin styles: Line Highlight */
216 | pre[class*="language-"][data-line] {
217 | 	padding-top: 0;
218 | 	padding-bottom: 0;
219 | 	padding-left: 0;
220 | }
221 | pre[data-line] code {
222 | 	position: relative;
223 | 	padding-left: 4em;
224 | }
225 | pre .line-highlight {
226 | 	margin-top: 0;
227 | }
228 | 
229 | pre.line-numbers {
230 | 	position: relative;
231 | 	padding-left: 3.8em;
232 | 	counter-reset: linenumber;
233 | }
234 | 
235 | pre.line-numbers > code {
236 | 	position: relative;
237 |     white-space: inherit;
238 | }
239 | 
240 | .line-numbers .line-numbers-rows {
241 | 	position: absolute;
242 | 	pointer-events: none;
243 | 	top: 0;
244 | 	font-size: 100%;
245 | 	left: -3.8em;
246 | 	width: 3em; /* works for line-numbers below 1000 lines */
247 | 	letter-spacing: -1px;
248 | 	border-right: 1px solid #999;
249 | 
250 | 	-webkit-user-select: none;
251 | 	-moz-user-select: none;
252 | 	-ms-user-select: none;
253 | 	user-select: none;
254 | 
255 | }
256 | 
257 | 	.line-numbers-rows > span {
258 | 		pointer-events: none;
259 | 		display: block;
260 | 		counter-increment: linenumber;
261 | 	}
262 | 
263 | 		.line-numbers-rows > span:before {
264 | 			content: counter(linenumber);
265 | 			color: #999;
266 | 			display: block;
267 | 			padding-right: 0.8em;
268 | 			text-align: right;
269 | 		}
270 | div.code-toolbar {
271 | 	position: relative;
272 | }
273 | 
274 | div.code-toolbar > .toolbar {
275 | 	position: absolute;
276 | 	top: .3em;
277 | 	right: .2em;
278 | 	transition: opacity 0.3s ease-in-out;
279 | 	opacity: 0;
280 | }
281 | 
282 | div.code-toolbar:hover > .toolbar {
283 | 	opacity: 1;
284 | }
285 | 
286 | div.code-toolbar > .toolbar .toolbar-item {
287 | 	display: inline-block;
288 | }
289 | 
290 | div.code-toolbar > .toolbar a {
291 | 	cursor: pointer;
292 | }
293 | 
294 | div.code-toolbar > .toolbar button {
295 | 	background: none;
296 | 	border: 0;
297 | 	color: inherit;
298 | 	font: inherit;
299 | 	line-height: normal;
300 | 	overflow: visible;
301 | 	padding: 0;
302 | 	-webkit-user-select: none; /* for button */
303 | 	-moz-user-select: none;
304 | 	-ms-user-select: none;
305 | }
306 | 
307 | div.code-toolbar > .toolbar a,
308 | div.code-toolbar > .toolbar button,
309 | div.code-toolbar > .toolbar span {
310 | 	color: #bbb;
311 | 	font-size: .8em;
312 | 	padding: 0 .5em;
313 | 	background: #f5f2f0;
314 | 	background: rgba(224, 224, 224, 0.2);
315 | 	box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
316 | 	border-radius: .5em;
317 | }
318 | 
319 | div.code-toolbar > .toolbar a:hover,
320 | div.code-toolbar > .toolbar a:focus,
321 | div.code-toolbar > .toolbar button:hover,
322 | div.code-toolbar > .toolbar button:focus,
323 | div.code-toolbar > .toolbar span:hover,
324 | div.code-toolbar > .toolbar span:focus {
325 | 	color: inherit;
326 | 	text-decoration: none;
327 | }
328 | 
329 | 


--------------------------------------------------------------------------------
/static/styles/dark.css:
--------------------------------------------------------------------------------
  1 | /* PrismJS 1.14.0
  2 | http://prismjs.com/download.html#themes=prism-dark&languages=markup+css+clike+javascript+apacheconf+c+aspnet+cpp+csharp+coffeescript+markup-templating+git+java+less+markdown+nginx+php+sql+python+smarty&plugins=line-numbers+toolbar+show-language+copy-to-clipboard */
  3 | /**
  4 |  * prism.js Dark theme for JavaScript, CSS and HTML
  5 |  * Based on the slides of the talk “/Reg(exp){2}lained/”
  6 |  * @author Lea Verou
  7 |  */
  8 | 
  9 | code[class*="language-"],
 10 | pre[class*="language-"] {
 11 | 	color: white;
 12 | 	background: none;
 13 | 	text-shadow: 0 -.1em .2em black;
 14 | 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 15 | 	text-align: left;
 16 | 	white-space: pre;
 17 | 	word-spacing: normal;
 18 | 	word-break: normal;
 19 | 	word-wrap: normal;
 20 | 	line-height: 1.5;
 21 | 
 22 | 	-moz-tab-size: 4;
 23 | 	-o-tab-size: 4;
 24 | 	tab-size: 4;
 25 | 
 26 | 	-webkit-hyphens: none;
 27 | 	-moz-hyphens: none;
 28 | 	-ms-hyphens: none;
 29 | 	hyphens: none;
 30 | }
 31 | 
 32 | @media print {
 33 | 	code[class*="language-"],
 34 | 	pre[class*="language-"] {
 35 | 		text-shadow: none;
 36 | 	}
 37 | }
 38 | 
 39 | pre[class*="language-"],
 40 | :not(pre) > code[class*="language-"] {
 41 | 	background: hsl(30, 20%, 25%);
 42 | }
 43 | 
 44 | /* Code blocks */
 45 | pre[class*="language-"] {
 46 | 	padding: 1em;
 47 | 	margin: .5em 0;
 48 | 	overflow: auto;
 49 | 	border: .3em solid hsl(30, 20%, 40%);
 50 | 	border-radius: .5em;
 51 | 	box-shadow: 1px 1px .5em black inset;
 52 | }
 53 | 
 54 | /* Inline code */
 55 | :not(pre) > code[class*="language-"] {
 56 | 	padding: .15em .2em .05em;
 57 | 	border-radius: .3em;
 58 | 	border: .13em solid hsl(30, 20%, 40%);
 59 | 	box-shadow: 1px 1px .3em -.1em black inset;
 60 | 	white-space: normal;
 61 | }
 62 | 
 63 | .token.comment,
 64 | .token.prolog,
 65 | .token.doctype,
 66 | .token.cdata {
 67 | 	color: hsl(30, 20%, 50%);
 68 | }
 69 | 
 70 | .token.punctuation {
 71 | 	opacity: .7;
 72 | }
 73 | 
 74 | .namespace {
 75 | 	opacity: .7;
 76 | }
 77 | 
 78 | .token.property,
 79 | .token.tag,
 80 | .token.boolean,
 81 | .token.number,
 82 | .token.constant,
 83 | .token.symbol {
 84 | 	color: hsl(350, 40%, 70%);
 85 | }
 86 | 
 87 | .token.selector,
 88 | .token.attr-name,
 89 | .token.string,
 90 | .token.char,
 91 | .token.builtin,
 92 | .token.inserted {
 93 | 	color: hsl(75, 70%, 60%);
 94 | }
 95 | 
 96 | .token.operator,
 97 | .token.entity,
 98 | .token.url,
 99 | .language-css .token.string,
100 | .style .token.string,
101 | .token.variable {
102 | 	color: hsl(40, 90%, 60%);
103 | }
104 | 
105 | .token.atrule,
106 | .token.attr-value,
107 | .token.keyword {
108 | 	color: hsl(350, 40%, 70%);
109 | }
110 | 
111 | .token.regex,
112 | .token.important {
113 | 	color: #e90;
114 | }
115 | 
116 | .token.important,
117 | .token.bold {
118 | 	font-weight: bold;
119 | }
120 | .token.italic {
121 | 	font-style: italic;
122 | }
123 | 
124 | .token.entity {
125 | 	cursor: help;
126 | }
127 | 
128 | .token.deleted {
129 | 	color: red;
130 | }
131 | 
132 | pre.line-numbers {
133 | 	position: relative;
134 | 	padding-left: 3.8em;
135 | 	counter-reset: linenumber;
136 | }
137 | 
138 | pre.line-numbers > code {
139 | 	position: relative;
140 |     white-space: inherit;
141 | }
142 | 
143 | .line-numbers .line-numbers-rows {
144 | 	position: absolute;
145 | 	pointer-events: none;
146 | 	top: 0;
147 | 	font-size: 100%;
148 | 	left: -3.8em;
149 | 	width: 3em; /* works for line-numbers below 1000 lines */
150 | 	letter-spacing: -1px;
151 | 	border-right: 1px solid #999;
152 | 
153 | 	-webkit-user-select: none;
154 | 	-moz-user-select: none;
155 | 	-ms-user-select: none;
156 | 	user-select: none;
157 | 
158 | }
159 | 
160 | 	.line-numbers-rows > span {
161 | 		pointer-events: none;
162 | 		display: block;
163 | 		counter-increment: linenumber;
164 | 	}
165 | 
166 | 		.line-numbers-rows > span:before {
167 | 			content: counter(linenumber);
168 | 			color: #999;
169 | 			display: block;
170 | 			padding-right: 0.8em;
171 | 			text-align: right;
172 | 		}
173 | div.code-toolbar {
174 | 	position: relative;
175 | }
176 | 
177 | div.code-toolbar > .toolbar {
178 | 	position: absolute;
179 | 	top: .3em;
180 | 	right: .2em;
181 | 	transition: opacity 0.3s ease-in-out;
182 | 	opacity: 0;
183 | }
184 | 
185 | div.code-toolbar:hover > .toolbar {
186 | 	opacity: 1;
187 | }
188 | 
189 | div.code-toolbar > .toolbar .toolbar-item {
190 | 	display: inline-block;
191 | }
192 | 
193 | div.code-toolbar > .toolbar a {
194 | 	cursor: pointer;
195 | }
196 | 
197 | div.code-toolbar > .toolbar button {
198 | 	background: none;
199 | 	border: 0;
200 | 	color: inherit;
201 | 	font: inherit;
202 | 	line-height: normal;
203 | 	overflow: visible;
204 | 	padding: 0;
205 | 	-webkit-user-select: none; /* for button */
206 | 	-moz-user-select: none;
207 | 	-ms-user-select: none;
208 | }
209 | 
210 | div.code-toolbar > .toolbar a,
211 | div.code-toolbar > .toolbar button,
212 | div.code-toolbar > .toolbar span {
213 | 	color: #bbb;
214 | 	font-size: .8em;
215 | 	padding: 0 .5em;
216 | 	background: #f5f2f0;
217 | 	background: rgba(224, 224, 224, 0.2);
218 | 	box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
219 | 	border-radius: .5em;
220 | }
221 | 
222 | div.code-toolbar > .toolbar a:hover,
223 | div.code-toolbar > .toolbar a:focus,
224 | div.code-toolbar > .toolbar button:hover,
225 | div.code-toolbar > .toolbar button:focus,
226 | div.code-toolbar > .toolbar span:hover,
227 | div.code-toolbar > .toolbar span:focus {
228 | 	color: inherit;
229 | 	text-decoration: none;
230 | }
231 | 
232 | 


--------------------------------------------------------------------------------
/static/styles/default.css:
--------------------------------------------------------------------------------
  1 | /* PrismJS 1.14.0
  2 | http://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+apacheconf+c+aspnet+cpp+csharp+coffeescript+markup-templating+git+java+less+markdown+nginx+php+sql+python+smarty&plugins=line-numbers+toolbar+show-language+copy-to-clipboard */
  3 | /**
  4 |  * prism.js default theme for JavaScript, CSS and HTML
  5 |  * Based on dabblet (http://dabblet.com)
  6 |  * @author Lea Verou
  7 |  */
  8 | 
  9 | code[class*="language-"],
 10 | pre[class*="language-"] {
 11 | 	color: black;
 12 | 	background: none;
 13 | 	text-shadow: 0 1px white;
 14 | 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 15 | 	text-align: left;
 16 | 	white-space: pre;
 17 | 	word-spacing: normal;
 18 | 	word-break: normal;
 19 | 	word-wrap: normal;
 20 | 	line-height: 1.5;
 21 | 
 22 | 	-moz-tab-size: 4;
 23 | 	-o-tab-size: 4;
 24 | 	tab-size: 4;
 25 | 
 26 | 	-webkit-hyphens: none;
 27 | 	-moz-hyphens: none;
 28 | 	-ms-hyphens: none;
 29 | 	hyphens: none;
 30 | }
 31 | 
 32 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
 33 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
 34 | 	text-shadow: none;
 35 | 	background: #b3d4fc;
 36 | }
 37 | 
 38 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
 39 | code[class*="language-"]::selection, code[class*="language-"] ::selection {
 40 | 	text-shadow: none;
 41 | 	background: #b3d4fc;
 42 | }
 43 | 
 44 | @media print {
 45 | 	code[class*="language-"],
 46 | 	pre[class*="language-"] {
 47 | 		text-shadow: none;
 48 | 	}
 49 | }
 50 | 
 51 | /* Code blocks */
 52 | pre[class*="language-"] {
 53 | 	padding: 1em;
 54 | 	margin: .5em 0;
 55 | 	overflow: auto;
 56 | }
 57 | 
 58 | :not(pre) > code[class*="language-"],
 59 | pre[class*="language-"] {
 60 | 	background: #f5f2f0;
 61 | }
 62 | 
 63 | /* Inline code */
 64 | :not(pre) > code[class*="language-"] {
 65 | 	padding: .1em;
 66 | 	border-radius: .3em;
 67 | 	white-space: normal;
 68 | }
 69 | 
 70 | .token.comment,
 71 | .token.prolog,
 72 | .token.doctype,
 73 | .token.cdata {
 74 | 	color: slategray;
 75 | }
 76 | 
 77 | .token.punctuation {
 78 | 	color: #999;
 79 | }
 80 | 
 81 | .namespace {
 82 | 	opacity: .7;
 83 | }
 84 | 
 85 | .token.property,
 86 | .token.tag,
 87 | .token.boolean,
 88 | .token.number,
 89 | .token.constant,
 90 | .token.symbol,
 91 | .token.deleted {
 92 | 	color: #905;
 93 | }
 94 | 
 95 | .token.selector,
 96 | .token.attr-name,
 97 | .token.string,
 98 | .token.char,
 99 | .token.builtin,
100 | .token.inserted {
101 | 	color: #690;
102 | }
103 | 
104 | .token.operator,
105 | .token.entity,
106 | .token.url,
107 | .language-css .token.string,
108 | .style .token.string {
109 | 	color: #9a6e3a;
110 | 	background: hsla(0, 0%, 100%, .5);
111 | }
112 | 
113 | .token.atrule,
114 | .token.attr-value,
115 | .token.keyword {
116 | 	color: #07a;
117 | }
118 | 
119 | .token.function,
120 | .token.class-name {
121 | 	color: #DD4A68;
122 | }
123 | 
124 | .token.regex,
125 | .token.important,
126 | .token.variable {
127 | 	color: #e90;
128 | }
129 | 
130 | .token.important,
131 | .token.bold {
132 | 	font-weight: bold;
133 | }
134 | .token.italic {
135 | 	font-style: italic;
136 | }
137 | 
138 | .token.entity {
139 | 	cursor: help;
140 | }
141 | 
142 | pre.line-numbers {
143 | 	position: relative;
144 | 	padding-left: 3.8em;
145 | 	counter-reset: linenumber;
146 | }
147 | 
148 | pre.line-numbers > code {
149 | 	position: relative;
150 |     white-space: inherit;
151 | }
152 | 
153 | .line-numbers .line-numbers-rows {
154 | 	position: absolute;
155 | 	pointer-events: none;
156 | 	top: 0;
157 | 	font-size: 100%;
158 | 	left: -3.8em;
159 | 	width: 3em; /* works for line-numbers below 1000 lines */
160 | 	letter-spacing: -1px;
161 | 	border-right: 1px solid #999;
162 | 
163 | 	-webkit-user-select: none;
164 | 	-moz-user-select: none;
165 | 	-ms-user-select: none;
166 | 	user-select: none;
167 | 
168 | }
169 | 
170 | 	.line-numbers-rows > span {
171 | 		pointer-events: none;
172 | 		display: block;
173 | 		counter-increment: linenumber;
174 | 	}
175 | 
176 | 		.line-numbers-rows > span:before {
177 | 			content: counter(linenumber);
178 | 			color: #999;
179 | 			display: block;
180 | 			padding-right: 0.8em;
181 | 			text-align: right;
182 | 		}
183 | div.code-toolbar {
184 | 	position: relative;
185 | }
186 | 
187 | div.code-toolbar > .toolbar {
188 | 	position: absolute;
189 | 	top: .3em;
190 | 	right: .2em;
191 | 	transition: opacity 0.3s ease-in-out;
192 | 	opacity: 0;
193 | }
194 | 
195 | div.code-toolbar:hover > .toolbar {
196 | 	opacity: 1;
197 | }
198 | 
199 | div.code-toolbar > .toolbar .toolbar-item {
200 | 	display: inline-block;
201 | }
202 | 
203 | div.code-toolbar > .toolbar a {
204 | 	cursor: pointer;
205 | }
206 | 
207 | div.code-toolbar > .toolbar button {
208 | 	background: none;
209 | 	border: 0;
210 | 	color: inherit;
211 | 	font: inherit;
212 | 	line-height: normal;
213 | 	overflow: visible;
214 | 	padding: 0;
215 | 	-webkit-user-select: none; /* for button */
216 | 	-moz-user-select: none;
217 | 	-ms-user-select: none;
218 | }
219 | 
220 | div.code-toolbar > .toolbar a,
221 | div.code-toolbar > .toolbar button,
222 | div.code-toolbar > .toolbar span {
223 | 	color: #bbb;
224 | 	font-size: .8em;
225 | 	padding: 0 .5em;
226 | 	background: #f5f2f0;
227 | 	background: rgba(224, 224, 224, 0.2);
228 | 	box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
229 | 	border-radius: .5em;
230 | }
231 | 
232 | div.code-toolbar > .toolbar a:hover,
233 | div.code-toolbar > .toolbar a:focus,
234 | div.code-toolbar > .toolbar button:hover,
235 | div.code-toolbar > .toolbar button:focus,
236 | div.code-toolbar > .toolbar span:hover,
237 | div.code-toolbar > .toolbar span:focus {
238 | 	color: inherit;
239 | 	text-decoration: none;
240 | }
241 | 
242 | 


--------------------------------------------------------------------------------
/static/styles/funky.css:
--------------------------------------------------------------------------------
  1 | /* PrismJS 1.14.0
  2 | http://prismjs.com/download.html#themes=prism-funky&languages=markup+css+clike+javascript+apacheconf+c+aspnet+cpp+csharp+coffeescript+markup-templating+git+java+less+markdown+nginx+php+sql+python+smarty&plugins=line-numbers+toolbar+show-language+copy-to-clipboard */
  3 | /**
  4 |  * prism.js Funky theme
  5 |  * Based on “Polyfilling the gaps” talk slides http://lea.verou.me/polyfilling-the-gaps/
  6 |  * @author Lea Verou
  7 |  */
  8 | 
  9 | code[class*="language-"],
 10 | pre[class*="language-"] {
 11 | 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 12 | 	text-align: left;
 13 | 	white-space: pre;
 14 | 	word-spacing: normal;
 15 | 	word-break: normal;
 16 | 	word-wrap: normal;
 17 | 	line-height: 1.5;
 18 | 
 19 | 	-moz-tab-size: 4;
 20 | 	-o-tab-size: 4;
 21 | 	tab-size: 4;
 22 | 
 23 | 	-webkit-hyphens: none;
 24 | 	-moz-hyphens: none;
 25 | 	-ms-hyphens: none;
 26 | 	hyphens: none;
 27 | }
 28 | 
 29 | /* Code blocks */
 30 | pre[class*="language-"] {
 31 | 	padding: .4em .8em;
 32 | 	margin: .5em 0;
 33 | 	overflow: auto;
 34 | 	background: url('data:image/svg+xml;charset=utf-8,%0D%0A%0D%0A%0D%0A<%2Fsvg>');
 35 | 	background-size: 1em 1em;
 36 | }
 37 | 
 38 | code[class*="language-"] {
 39 | 	background: black;
 40 | 	color: white;
 41 | 	box-shadow: -.3em 0 0 .3em black, .3em 0 0 .3em black;
 42 | }
 43 | 
 44 | /* Inline code */
 45 | :not(pre) > code[class*="language-"] {
 46 | 	padding: .2em;
 47 | 	border-radius: .3em;
 48 | 	box-shadow: none;
 49 | 	white-space: normal;
 50 | }
 51 | 
 52 | .token.comment,
 53 | .token.prolog,
 54 | .token.doctype,
 55 | .token.cdata {
 56 | 	color: #aaa;
 57 | }
 58 | 
 59 | .token.punctuation {
 60 | 	color: #999;
 61 | }
 62 | 
 63 | .namespace {
 64 | 	opacity: .7;
 65 | }
 66 | 
 67 | .token.property,
 68 | .token.tag,
 69 | .token.boolean,
 70 | .token.number,
 71 | .token.constant,
 72 | .token.symbol {
 73 | 	color: #0cf;
 74 | }
 75 | 
 76 | .token.selector,
 77 | .token.attr-name,
 78 | .token.string,
 79 | .token.char,
 80 | .token.builtin {
 81 | 	color: yellow;
 82 | }
 83 | 
 84 | .token.operator,
 85 | .token.entity,
 86 | .token.url,
 87 | .language-css .token.string,
 88 | .toke.variable,
 89 | .token.inserted {
 90 | 	color: yellowgreen;
 91 | }
 92 | 
 93 | .token.atrule,
 94 | .token.attr-value,
 95 | .token.keyword {
 96 | 	color: deeppink;
 97 | }
 98 | 
 99 | .token.regex,
100 | .token.important {
101 | 	color: orange;
102 | }
103 | 
104 | .token.important,
105 | .token.bold {
106 | 	font-weight: bold;
107 | }
108 | .token.italic {
109 | 	font-style: italic;
110 | }
111 | 
112 | .token.entity {
113 | 	cursor: help;
114 | }
115 | 
116 | .token.deleted {
117 | 	color: red;
118 | }
119 | 
120 | pre.line-numbers {
121 | 	position: relative;
122 | 	padding-left: 3.8em;
123 | 	counter-reset: linenumber;
124 | }
125 | 
126 | pre.line-numbers > code {
127 | 	position: relative;
128 |     white-space: inherit;
129 | }
130 | 
131 | .line-numbers .line-numbers-rows {
132 | 	position: absolute;
133 | 	pointer-events: none;
134 | 	top: 0;
135 | 	font-size: 100%;
136 | 	left: -3.8em;
137 | 	width: 3em; /* works for line-numbers below 1000 lines */
138 | 	letter-spacing: -1px;
139 | 	border-right: 1px solid #999;
140 | 
141 | 	-webkit-user-select: none;
142 | 	-moz-user-select: none;
143 | 	-ms-user-select: none;
144 | 	user-select: none;
145 | 
146 | }
147 | 
148 | 	.line-numbers-rows > span {
149 | 		pointer-events: none;
150 | 		display: block;
151 | 		counter-increment: linenumber;
152 | 	}
153 | 
154 | 		.line-numbers-rows > span:before {
155 | 			content: counter(linenumber);
156 | 			color: #999;
157 | 			display: block;
158 | 			padding-right: 0.8em;
159 | 			text-align: right;
160 | 		}
161 | div.code-toolbar {
162 | 	position: relative;
163 | }
164 | 
165 | div.code-toolbar > .toolbar {
166 | 	position: absolute;
167 | 	top: .3em;
168 | 	right: .2em;
169 | 	transition: opacity 0.3s ease-in-out;
170 | 	opacity: 0;
171 | }
172 | 
173 | div.code-toolbar:hover > .toolbar {
174 | 	opacity: 1;
175 | }
176 | 
177 | div.code-toolbar > .toolbar .toolbar-item {
178 | 	display: inline-block;
179 | }
180 | 
181 | div.code-toolbar > .toolbar a {
182 | 	cursor: pointer;
183 | }
184 | 
185 | div.code-toolbar > .toolbar button {
186 | 	background: none;
187 | 	border: 0;
188 | 	color: inherit;
189 | 	font: inherit;
190 | 	line-height: normal;
191 | 	overflow: visible;
192 | 	padding: 0;
193 | 	-webkit-user-select: none; /* for button */
194 | 	-moz-user-select: none;
195 | 	-ms-user-select: none;
196 | }
197 | 
198 | div.code-toolbar > .toolbar a,
199 | div.code-toolbar > .toolbar button,
200 | div.code-toolbar > .toolbar span {
201 | 	color: #bbb;
202 | 	font-size: .8em;
203 | 	padding: 0 .5em;
204 | 	background: #f5f2f0;
205 | 	background: rgba(224, 224, 224, 0.2);
206 | 	box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
207 | 	border-radius: .5em;
208 | }
209 | 
210 | div.code-toolbar > .toolbar a:hover,
211 | div.code-toolbar > .toolbar a:focus,
212 | div.code-toolbar > .toolbar button:hover,
213 | div.code-toolbar > .toolbar button:focus,
214 | div.code-toolbar > .toolbar span:hover,
215 | div.code-toolbar > .toolbar span:focus {
216 | 	color: inherit;
217 | 	text-decoration: none;
218 | }
219 | 
220 | 


--------------------------------------------------------------------------------
/static/styles/okaikia.css:
--------------------------------------------------------------------------------
  1 | /* PrismJS 1.14.0
  2 | http://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+apacheconf+c+aspnet+cpp+csharp+coffeescript+markup-templating+git+java+less+markdown+nginx+php+sql+python+smarty&plugins=line-numbers+toolbar+show-language+copy-to-clipboard */
  3 | /**
  4 |  * okaidia theme for JavaScript, CSS and HTML
  5 |  * Loosely based on Monokai textmate theme by http://www.monokai.nl/
  6 |  * @author ocodia
  7 |  */
  8 | 
  9 | code[class*="language-"],
 10 | pre[class*="language-"] {
 11 | 	color: #f8f8f2;
 12 | 	background: none;
 13 | 	text-shadow: 0 1px rgba(0, 0, 0, 0.3);
 14 | 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 15 | 	text-align: left;
 16 | 	white-space: pre;
 17 | 	word-spacing: normal;
 18 | 	word-break: normal;
 19 | 	word-wrap: normal;
 20 | 	line-height: 1.5;
 21 | 
 22 | 	-moz-tab-size: 4;
 23 | 	-o-tab-size: 4;
 24 | 	tab-size: 4;
 25 | 
 26 | 	-webkit-hyphens: none;
 27 | 	-moz-hyphens: none;
 28 | 	-ms-hyphens: none;
 29 | 	hyphens: none;
 30 | }
 31 | 
 32 | /* Code blocks */
 33 | pre[class*="language-"] {
 34 | 	padding: 1em;
 35 | 	margin: .5em 0;
 36 | 	overflow: auto;
 37 | 	border-radius: 0.3em;
 38 | }
 39 | 
 40 | :not(pre) > code[class*="language-"],
 41 | pre[class*="language-"] {
 42 | 	background: #272822;
 43 | }
 44 | 
 45 | /* Inline code */
 46 | :not(pre) > code[class*="language-"] {
 47 | 	padding: .1em;
 48 | 	border-radius: .3em;
 49 | 	white-space: normal;
 50 | }
 51 | 
 52 | .token.comment,
 53 | .token.prolog,
 54 | .token.doctype,
 55 | .token.cdata {
 56 | 	color: slategray;
 57 | }
 58 | 
 59 | .token.punctuation {
 60 | 	color: #f8f8f2;
 61 | }
 62 | 
 63 | .namespace {
 64 | 	opacity: .7;
 65 | }
 66 | 
 67 | .token.property,
 68 | .token.tag,
 69 | .token.constant,
 70 | .token.symbol,
 71 | .token.deleted {
 72 | 	color: #f92672;
 73 | }
 74 | 
 75 | .token.boolean,
 76 | .token.number {
 77 | 	color: #ae81ff;
 78 | }
 79 | 
 80 | .token.selector,
 81 | .token.attr-name,
 82 | .token.string,
 83 | .token.char,
 84 | .token.builtin,
 85 | .token.inserted {
 86 | 	color: #a6e22e;
 87 | }
 88 | 
 89 | .token.operator,
 90 | .token.entity,
 91 | .token.url,
 92 | .language-css .token.string,
 93 | .style .token.string,
 94 | .token.variable {
 95 | 	color: #f8f8f2;
 96 | }
 97 | 
 98 | .token.atrule,
 99 | .token.attr-value,
100 | .token.function {
101 | 	color: #e6db74;
102 | }
103 | 
104 | .token.keyword {
105 | 	color: #66d9ef;
106 | }
107 | 
108 | .token.regex,
109 | .token.important {
110 | 	color: #fd971f;
111 | }
112 | 
113 | .token.important,
114 | .token.bold {
115 | 	font-weight: bold;
116 | }
117 | .token.italic {
118 | 	font-style: italic;
119 | }
120 | 
121 | .token.entity {
122 | 	cursor: help;
123 | }
124 | 
125 | pre.line-numbers {
126 | 	position: relative;
127 | 	padding-left: 3.8em;
128 | 	counter-reset: linenumber;
129 | }
130 | 
131 | pre.line-numbers > code {
132 | 	position: relative;
133 |     white-space: inherit;
134 | }
135 | 
136 | .line-numbers .line-numbers-rows {
137 | 	position: absolute;
138 | 	pointer-events: none;
139 | 	top: 0;
140 | 	font-size: 100%;
141 | 	left: -3.8em;
142 | 	width: 3em; /* works for line-numbers below 1000 lines */
143 | 	letter-spacing: -1px;
144 | 	border-right: 1px solid #999;
145 | 
146 | 	-webkit-user-select: none;
147 | 	-moz-user-select: none;
148 | 	-ms-user-select: none;
149 | 	user-select: none;
150 | 
151 | }
152 | 
153 | 	.line-numbers-rows > span {
154 | 		pointer-events: none;
155 | 		display: block;
156 | 		counter-increment: linenumber;
157 | 	}
158 | 
159 | 		.line-numbers-rows > span:before {
160 | 			content: counter(linenumber);
161 | 			color: #999;
162 | 			display: block;
163 | 			padding-right: 0.8em;
164 | 			text-align: right;
165 | 		}
166 | div.code-toolbar {
167 | 	position: relative;
168 | }
169 | 
170 | div.code-toolbar > .toolbar {
171 | 	position: absolute;
172 | 	top: .3em;
173 | 	right: .2em;
174 | 	transition: opacity 0.3s ease-in-out;
175 | 	opacity: 0;
176 | }
177 | 
178 | div.code-toolbar:hover > .toolbar {
179 | 	opacity: 1;
180 | }
181 | 
182 | div.code-toolbar > .toolbar .toolbar-item {
183 | 	display: inline-block;
184 | }
185 | 
186 | div.code-toolbar > .toolbar a {
187 | 	cursor: pointer;
188 | }
189 | 
190 | div.code-toolbar > .toolbar button {
191 | 	background: none;
192 | 	border: 0;
193 | 	color: inherit;
194 | 	font: inherit;
195 | 	line-height: normal;
196 | 	overflow: visible;
197 | 	padding: 0;
198 | 	-webkit-user-select: none; /* for button */
199 | 	-moz-user-select: none;
200 | 	-ms-user-select: none;
201 | }
202 | 
203 | div.code-toolbar > .toolbar a,
204 | div.code-toolbar > .toolbar button,
205 | div.code-toolbar > .toolbar span {
206 | 	color: #bbb;
207 | 	font-size: .8em;
208 | 	padding: 0 .5em;
209 | 	background: #f5f2f0;
210 | 	background: rgba(224, 224, 224, 0.2);
211 | 	box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
212 | 	border-radius: .5em;
213 | }
214 | 
215 | div.code-toolbar > .toolbar a:hover,
216 | div.code-toolbar > .toolbar a:focus,
217 | div.code-toolbar > .toolbar button:hover,
218 | div.code-toolbar > .toolbar button:focus,
219 | div.code-toolbar > .toolbar span:hover,
220 | div.code-toolbar > .toolbar span:focus {
221 | 	color: inherit;
222 | 	text-decoration: none;
223 | }
224 | 
225 | 


--------------------------------------------------------------------------------
/static/styles/solarized-light.css:
--------------------------------------------------------------------------------
  1 | /* PrismJS 1.14.0
  2 | http://prismjs.com/download.html#themes=prism-solarizedlight&languages=markup+css+clike+javascript+apacheconf+c+aspnet+cpp+csharp+coffeescript+markup-templating+git+java+less+markdown+nginx+php+sql+python+smarty&plugins=line-numbers+toolbar+show-language+copy-to-clipboard */
  3 | /*
  4 |  Solarized Color Schemes originally by Ethan Schoonover
  5 |  http://ethanschoonover.com/solarized
  6 | 
  7 |  Ported for PrismJS by Hector Matos
  8 |  Website: https://krakendev.io
  9 |  Twitter Handle: https://twitter.com/allonsykraken)
 10 | */
 11 | 
 12 | /*
 13 | SOLARIZED HEX
 14 | --------- -------
 15 | base03    #002b36
 16 | base02    #073642
 17 | base01    #586e75
 18 | base00    #657b83
 19 | base0     #839496
 20 | base1     #93a1a1
 21 | base2     #eee8d5
 22 | base3     #fdf6e3
 23 | yellow    #b58900
 24 | orange    #cb4b16
 25 | red       #dc322f
 26 | magenta   #d33682
 27 | violet    #6c71c4
 28 | blue      #268bd2
 29 | cyan      #2aa198
 30 | green     #859900
 31 | */
 32 | 
 33 | code[class*="language-"],
 34 | pre[class*="language-"] {
 35 | 	color: #657b83; /* base00 */
 36 | 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 37 | 	text-align: left;
 38 | 	white-space: pre;
 39 | 	word-spacing: normal;
 40 | 	word-break: normal;
 41 | 	word-wrap: normal;
 42 | 
 43 | 	line-height: 1.5;
 44 | 
 45 | 	-moz-tab-size: 4;
 46 | 	-o-tab-size: 4;
 47 | 	tab-size: 4;
 48 | 
 49 | 	-webkit-hyphens: none;
 50 | 	-moz-hyphens: none;
 51 | 	-ms-hyphens: none;
 52 | 	hyphens: none;
 53 | }
 54 | 
 55 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
 56 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
 57 | 	background: #073642; /* base02 */
 58 | }
 59 | 
 60 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
 61 | code[class*="language-"]::selection, code[class*="language-"] ::selection {
 62 | 	background: #073642; /* base02 */
 63 | }
 64 | 
 65 | /* Code blocks */
 66 | pre[class*="language-"] {
 67 | 	padding: 1em;
 68 | 	margin: .5em 0;
 69 | 	overflow: auto;
 70 | 	border-radius: 0.3em;
 71 | }
 72 | 
 73 | :not(pre) > code[class*="language-"],
 74 | pre[class*="language-"] {
 75 | 	background-color: #fdf6e3; /* base3 */
 76 | }
 77 | 
 78 | /* Inline code */
 79 | :not(pre) > code[class*="language-"] {
 80 | 	padding: .1em;
 81 | 	border-radius: .3em;
 82 | }
 83 | 
 84 | .token.comment,
 85 | .token.prolog,
 86 | .token.doctype,
 87 | .token.cdata {
 88 | 	color: #93a1a1; /* base1 */
 89 | }
 90 | 
 91 | .token.punctuation {
 92 | 	color: #586e75; /* base01 */
 93 | }
 94 | 
 95 | .namespace {
 96 | 	opacity: .7;
 97 | }
 98 | 
 99 | .token.property,
100 | .token.tag,
101 | .token.boolean,
102 | .token.number,
103 | .token.constant,
104 | .token.symbol,
105 | .token.deleted {
106 | 	color: #268bd2; /* blue */
107 | }
108 | 
109 | .token.selector,
110 | .token.attr-name,
111 | .token.string,
112 | .token.char,
113 | .token.builtin,
114 | .token.url,
115 | .token.inserted {
116 | 	color: #2aa198; /* cyan */
117 | }
118 | 
119 | .token.entity {
120 | 	color: #657b83; /* base00 */
121 | 	background: #eee8d5; /* base2 */
122 | }
123 | 
124 | .token.atrule,
125 | .token.attr-value,
126 | .token.keyword {
127 | 	color: #859900; /* green */
128 | }
129 | 
130 | .token.function {
131 | 	color: #b58900; /* yellow */
132 | }
133 | 
134 | .token.regex,
135 | .token.important,
136 | .token.variable {
137 | 	color: #cb4b16; /* orange */
138 | }
139 | 
140 | .token.important,
141 | .token.bold {
142 | 	font-weight: bold;
143 | }
144 | .token.italic {
145 | 	font-style: italic;
146 | }
147 | 
148 | .token.entity {
149 | 	cursor: help;
150 | }
151 | pre.line-numbers {
152 | 	position: relative;
153 | 	padding-left: 3.8em;
154 | 	counter-reset: linenumber;
155 | }
156 | 
157 | pre.line-numbers > code {
158 | 	position: relative;
159 |     white-space: inherit;
160 | }
161 | 
162 | .line-numbers .line-numbers-rows {
163 | 	position: absolute;
164 | 	pointer-events: none;
165 | 	top: 0;
166 | 	font-size: 100%;
167 | 	left: -3.8em;
168 | 	width: 3em; /* works for line-numbers below 1000 lines */
169 | 	letter-spacing: -1px;
170 | 	border-right: 1px solid #999;
171 | 
172 | 	-webkit-user-select: none;
173 | 	-moz-user-select: none;
174 | 	-ms-user-select: none;
175 | 	user-select: none;
176 | 
177 | }
178 | 
179 | 	.line-numbers-rows > span {
180 | 		pointer-events: none;
181 | 		display: block;
182 | 		counter-increment: linenumber;
183 | 	}
184 | 
185 | 		.line-numbers-rows > span:before {
186 | 			content: counter(linenumber);
187 | 			color: #999;
188 | 			display: block;
189 | 			padding-right: 0.8em;
190 | 			text-align: right;
191 | 		}
192 | div.code-toolbar {
193 | 	position: relative;
194 | }
195 | 
196 | div.code-toolbar > .toolbar {
197 | 	position: absolute;
198 | 	top: .3em;
199 | 	right: .2em;
200 | 	transition: opacity 0.3s ease-in-out;
201 | 	opacity: 0;
202 | }
203 | 
204 | div.code-toolbar:hover > .toolbar {
205 | 	opacity: 1;
206 | }
207 | 
208 | div.code-toolbar > .toolbar .toolbar-item {
209 | 	display: inline-block;
210 | }
211 | 
212 | div.code-toolbar > .toolbar a {
213 | 	cursor: pointer;
214 | }
215 | 
216 | div.code-toolbar > .toolbar button {
217 | 	background: none;
218 | 	border: 0;
219 | 	color: inherit;
220 | 	font: inherit;
221 | 	line-height: normal;
222 | 	overflow: visible;
223 | 	padding: 0;
224 | 	-webkit-user-select: none; /* for button */
225 | 	-moz-user-select: none;
226 | 	-ms-user-select: none;
227 | }
228 | 
229 | div.code-toolbar > .toolbar a,
230 | div.code-toolbar > .toolbar button,
231 | div.code-toolbar > .toolbar span {
232 | 	color: #bbb;
233 | 	font-size: .8em;
234 | 	padding: 0 .5em;
235 | 	background: #f5f2f0;
236 | 	background: rgba(224, 224, 224, 0.2);
237 | 	box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
238 | 	border-radius: .5em;
239 | }
240 | 
241 | div.code-toolbar > .toolbar a:hover,
242 | div.code-toolbar > .toolbar a:focus,
243 | div.code-toolbar > .toolbar button:hover,
244 | div.code-toolbar > .toolbar button:focus,
245 | div.code-toolbar > .toolbar span:hover,
246 | div.code-toolbar > .toolbar span:focus {
247 | 	color: inherit;
248 | 	text-decoration: none;
249 | }
250 | 
251 | 


--------------------------------------------------------------------------------
/static/styles/tomorrow-night.css:
--------------------------------------------------------------------------------
  1 | /* PrismJS 1.14.0
  2 | http://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+apacheconf+c+aspnet+cpp+csharp+coffeescript+markup-templating+git+java+less+markdown+nginx+php+sql+python+smarty&plugins=line-numbers+toolbar+show-language+copy-to-clipboard */
  3 | /**
  4 |  * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML
  5 |  * Based on https://github.com/chriskempson/tomorrow-theme
  6 |  * @author Rose Pritchard
  7 |  */
  8 | 
  9 | code[class*="language-"],
 10 | pre[class*="language-"] {
 11 | 	color: #ccc;
 12 | 	background: none;
 13 | 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 14 | 	text-align: left;
 15 | 	white-space: pre;
 16 | 	word-spacing: normal;
 17 | 	word-break: normal;
 18 | 	word-wrap: normal;
 19 | 	line-height: 1.5;
 20 | 
 21 | 	-moz-tab-size: 4;
 22 | 	-o-tab-size: 4;
 23 | 	tab-size: 4;
 24 | 
 25 | 	-webkit-hyphens: none;
 26 | 	-moz-hyphens: none;
 27 | 	-ms-hyphens: none;
 28 | 	hyphens: none;
 29 | 
 30 | }
 31 | 
 32 | /* Code blocks */
 33 | pre[class*="language-"] {
 34 | 	padding: 1em;
 35 | 	margin: .5em 0;
 36 | 	overflow: auto;
 37 | }
 38 | 
 39 | :not(pre) > code[class*="language-"],
 40 | pre[class*="language-"] {
 41 | 	background: #2d2d2d;
 42 | }
 43 | 
 44 | /* Inline code */
 45 | :not(pre) > code[class*="language-"] {
 46 | 	padding: .1em;
 47 | 	border-radius: .3em;
 48 | 	white-space: normal;
 49 | }
 50 | 
 51 | .token.comment,
 52 | .token.block-comment,
 53 | .token.prolog,
 54 | .token.doctype,
 55 | .token.cdata {
 56 | 	color: #999;
 57 | }
 58 | 
 59 | .token.punctuation {
 60 | 	color: #ccc;
 61 | }
 62 | 
 63 | .token.tag,
 64 | .token.attr-name,
 65 | .token.namespace,
 66 | .token.deleted {
 67 | 	color: #e2777a;
 68 | }
 69 | 
 70 | .token.function-name {
 71 | 	color: #6196cc;
 72 | }
 73 | 
 74 | .token.boolean,
 75 | .token.number,
 76 | .token.function {
 77 | 	color: #f08d49;
 78 | }
 79 | 
 80 | .token.property,
 81 | .token.class-name,
 82 | .token.constant,
 83 | .token.symbol {
 84 | 	color: #f8c555;
 85 | }
 86 | 
 87 | .token.selector,
 88 | .token.important,
 89 | .token.atrule,
 90 | .token.keyword,
 91 | .token.builtin {
 92 | 	color: #cc99cd;
 93 | }
 94 | 
 95 | .token.string,
 96 | .token.char,
 97 | .token.attr-value,
 98 | .token.regex,
 99 | .token.variable {
100 | 	color: #7ec699;
101 | }
102 | 
103 | .token.operator,
104 | .token.entity,
105 | .token.url {
106 | 	color: #67cdcc;
107 | }
108 | 
109 | .token.important,
110 | .token.bold {
111 | 	font-weight: bold;
112 | }
113 | .token.italic {
114 | 	font-style: italic;
115 | }
116 | 
117 | .token.entity {
118 | 	cursor: help;
119 | }
120 | 
121 | .token.inserted {
122 | 	color: green;
123 | }
124 | 
125 | pre.line-numbers {
126 | 	position: relative;
127 | 	padding-left: 3.8em;
128 | 	counter-reset: linenumber;
129 | }
130 | 
131 | pre.line-numbers > code {
132 | 	position: relative;
133 |     white-space: inherit;
134 | }
135 | 
136 | .line-numbers .line-numbers-rows {
137 | 	position: absolute;
138 | 	pointer-events: none;
139 | 	top: 0;
140 | 	font-size: 100%;
141 | 	left: -3.8em;
142 | 	width: 3em; /* works for line-numbers below 1000 lines */
143 | 	letter-spacing: -1px;
144 | 	border-right: 1px solid #999;
145 | 
146 | 	-webkit-user-select: none;
147 | 	-moz-user-select: none;
148 | 	-ms-user-select: none;
149 | 	user-select: none;
150 | 
151 | }
152 | 
153 | 	.line-numbers-rows > span {
154 | 		pointer-events: none;
155 | 		display: block;
156 | 		counter-increment: linenumber;
157 | 	}
158 | 
159 | 		.line-numbers-rows > span:before {
160 | 			content: counter(linenumber);
161 | 			color: #999;
162 | 			display: block;
163 | 			padding-right: 0.8em;
164 | 			text-align: right;
165 | 		}
166 | div.code-toolbar {
167 | 	position: relative;
168 | }
169 | 
170 | div.code-toolbar > .toolbar {
171 | 	position: absolute;
172 | 	top: .3em;
173 | 	right: .2em;
174 | 	transition: opacity 0.3s ease-in-out;
175 | 	opacity: 0;
176 | }
177 | 
178 | div.code-toolbar:hover > .toolbar {
179 | 	opacity: 1;
180 | }
181 | 
182 | div.code-toolbar > .toolbar .toolbar-item {
183 | 	display: inline-block;
184 | }
185 | 
186 | div.code-toolbar > .toolbar a {
187 | 	cursor: pointer;
188 | }
189 | 
190 | div.code-toolbar > .toolbar button {
191 | 	background: none;
192 | 	border: 0;
193 | 	color: inherit;
194 | 	font: inherit;
195 | 	line-height: normal;
196 | 	overflow: visible;
197 | 	padding: 0;
198 | 	-webkit-user-select: none; /* for button */
199 | 	-moz-user-select: none;
200 | 	-ms-user-select: none;
201 | }
202 | 
203 | div.code-toolbar > .toolbar a,
204 | div.code-toolbar > .toolbar button,
205 | div.code-toolbar > .toolbar span {
206 | 	color: #bbb;
207 | 	font-size: .8em;
208 | 	padding: 0 .5em;
209 | 	background: #f5f2f0;
210 | 	background: rgba(224, 224, 224, 0.2);
211 | 	box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
212 | 	border-radius: .5em;
213 | }
214 | 
215 | div.code-toolbar > .toolbar a:hover,
216 | div.code-toolbar > .toolbar a:focus,
217 | div.code-toolbar > .toolbar button:hover,
218 | div.code-toolbar > .toolbar button:focus,
219 | div.code-toolbar > .toolbar span:hover,
220 | div.code-toolbar > .toolbar span:focus {
221 | 	color: inherit;
222 | 	text-decoration: none;
223 | }
224 | 
225 | 


--------------------------------------------------------------------------------
/static/styles/twilight.css:
--------------------------------------------------------------------------------
  1 | /* PrismJS 1.14.0
  2 | http://prismjs.com/download.html#themes=prism-twilight&languages=markup+css+clike+javascript+apacheconf+c+aspnet+cpp+csharp+coffeescript+markup-templating+git+java+less+markdown+nginx+php+sql+python+smarty&plugins=line-numbers+toolbar+show-language+copy-to-clipboard */
  3 | /**
  4 |  * prism.js Twilight theme
  5 |  * Based (more or less) on the Twilight theme originally of Textmate fame.
  6 |  * @author Remy Bach
  7 |  */
  8 | code[class*="language-"],
  9 | pre[class*="language-"] {
 10 | 	color: white;
 11 | 	background: none;
 12 | 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 13 | 	text-align: left;
 14 | 	text-shadow: 0 -.1em .2em black;
 15 | 	white-space: pre;
 16 | 	word-spacing: normal;
 17 | 	word-break: normal;
 18 | 	word-wrap: normal;
 19 | 	line-height: 1.5;
 20 | 
 21 | 	-moz-tab-size: 4;
 22 | 	-o-tab-size: 4;
 23 | 	tab-size: 4;
 24 | 
 25 | 	-webkit-hyphens: none;
 26 | 	-moz-hyphens: none;
 27 | 	-ms-hyphens: none;
 28 | 	hyphens: none;
 29 | }
 30 | 
 31 | pre[class*="language-"],
 32 | :not(pre) > code[class*="language-"] {
 33 | 	background: hsl(0, 0%, 8%); /* #141414 */
 34 | }
 35 | 
 36 | /* Code blocks */
 37 | pre[class*="language-"] {
 38 | 	border-radius: .5em;
 39 | 	border: .3em solid hsl(0, 0%, 33%); /* #282A2B */
 40 | 	box-shadow: 1px 1px .5em black inset;
 41 | 	margin: .5em 0;
 42 | 	overflow: auto;
 43 | 	padding: 1em;
 44 | }
 45 | 
 46 | pre[class*="language-"]::-moz-selection {
 47 | 	/* Firefox */
 48 | 	background: hsl(200, 4%, 16%); /* #282A2B */
 49 | }
 50 | 
 51 | pre[class*="language-"]::selection {
 52 | 	/* Safari */
 53 | 	background: hsl(200, 4%, 16%); /* #282A2B */
 54 | }
 55 | 
 56 | /* Text Selection colour */
 57 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
 58 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
 59 | 	text-shadow: none;
 60 | 	background: hsla(0, 0%, 93%, 0.15); /* #EDEDED */
 61 | }
 62 | 
 63 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
 64 | code[class*="language-"]::selection, code[class*="language-"] ::selection {
 65 | 	text-shadow: none;
 66 | 	background: hsla(0, 0%, 93%, 0.15); /* #EDEDED */
 67 | }
 68 | 
 69 | /* Inline code */
 70 | :not(pre) > code[class*="language-"] {
 71 | 	border-radius: .3em;
 72 | 	border: .13em solid hsl(0, 0%, 33%); /* #545454 */
 73 | 	box-shadow: 1px 1px .3em -.1em black inset;
 74 | 	padding: .15em .2em .05em;
 75 | 	white-space: normal;
 76 | }
 77 | 
 78 | .token.comment,
 79 | .token.prolog,
 80 | .token.doctype,
 81 | .token.cdata {
 82 | 	color: hsl(0, 0%, 47%); /* #777777 */
 83 | }
 84 | 
 85 | .token.punctuation {
 86 | 	opacity: .7;
 87 | }
 88 | 
 89 | .namespace {
 90 | 	opacity: .7;
 91 | }
 92 | 
 93 | .token.tag,
 94 | .token.boolean,
 95 | .token.number,
 96 | .token.deleted {
 97 | 	color: hsl(14, 58%, 55%); /* #CF6A4C */
 98 | }
 99 | 
100 | .token.keyword,
101 | .token.property,
102 | .token.selector,
103 | .token.constant,
104 | .token.symbol,
105 | .token.builtin {
106 | 	color: hsl(53, 89%, 79%); /* #F9EE98 */
107 | }
108 | 
109 | .token.attr-name,
110 | .token.attr-value,
111 | .token.string,
112 | .token.char,
113 | .token.operator,
114 | .token.entity,
115 | .token.url,
116 | .language-css .token.string,
117 | .style .token.string,
118 | .token.variable,
119 | .token.inserted {
120 | 	color: hsl(76, 21%, 52%); /* #8F9D6A */
121 | }
122 | 
123 | .token.atrule {
124 | 	color: hsl(218, 22%, 55%); /* #7587A6 */
125 | }
126 | 
127 | .token.regex,
128 | .token.important {
129 | 	color: hsl(42, 75%, 65%); /* #E9C062 */
130 | }
131 | 
132 | .token.important,
133 | .token.bold {
134 | 	font-weight: bold;
135 | }
136 | .token.italic {
137 | 	font-style: italic;
138 | }
139 | 
140 | .token.entity {
141 | 	cursor: help;
142 | }
143 | 
144 | pre[data-line] {
145 | 	padding: 1em 0 1em 3em;
146 | 	position: relative;
147 | }
148 | 
149 | /* Markup */
150 | .language-markup .token.tag,
151 | .language-markup .token.attr-name,
152 | .language-markup .token.punctuation {
153 | 	color: hsl(33, 33%, 52%); /* #AC885B */
154 | }
155 | 
156 | /* Make the tokens sit above the line highlight so the colours don't look faded. */
157 | .token {
158 | 	position: relative;
159 | 	z-index: 1;
160 | }
161 | 
162 | .line-highlight {
163 | 	background: hsla(0, 0%, 33%, 0.25); /* #545454 */
164 | 	background: linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); /* #545454 */
165 | 	border-bottom: 1px dashed hsl(0, 0%, 33%); /* #545454 */
166 | 	border-top: 1px dashed hsl(0, 0%, 33%); /* #545454 */
167 | 	left: 0;
168 | 	line-height: inherit;
169 | 	margin-top: 0.75em; /* Same as .prism’s padding-top */
170 | 	padding: inherit 0;
171 | 	pointer-events: none;
172 | 	position: absolute;
173 | 	right: 0;
174 | 	white-space: pre;
175 | 	z-index: 0;
176 | }
177 | 
178 | .line-highlight:before,
179 | .line-highlight[data-end]:after {
180 | 	background-color: hsl(215, 15%, 59%); /* #8794A6 */
181 | 	border-radius: 999px;
182 | 	box-shadow: 0 1px white;
183 | 	color: hsl(24, 20%, 95%); /* #F5F2F0 */
184 | 	content: attr(data-start);
185 | 	font: bold 65%/1.5 sans-serif;
186 | 	left: .6em;
187 | 	min-width: 1em;
188 | 	padding: 0 .5em;
189 | 	position: absolute;
190 | 	text-align: center;
191 | 	text-shadow: none;
192 | 	top: .4em;
193 | 	vertical-align: .3em;
194 | }
195 | 
196 | .line-highlight[data-end]:after {
197 | 	bottom: .4em;
198 | 	content: attr(data-end);
199 | 	top: auto;
200 | }
201 | 
202 | pre.line-numbers {
203 | 	position: relative;
204 | 	padding-left: 3.8em;
205 | 	counter-reset: linenumber;
206 | }
207 | 
208 | pre.line-numbers > code {
209 | 	position: relative;
210 |     white-space: inherit;
211 | }
212 | 
213 | .line-numbers .line-numbers-rows {
214 | 	position: absolute;
215 | 	pointer-events: none;
216 | 	top: 0;
217 | 	font-size: 100%;
218 | 	left: -3.8em;
219 | 	width: 3em; /* works for line-numbers below 1000 lines */
220 | 	letter-spacing: -1px;
221 | 	border-right: 1px solid #999;
222 | 
223 | 	-webkit-user-select: none;
224 | 	-moz-user-select: none;
225 | 	-ms-user-select: none;
226 | 	user-select: none;
227 | 
228 | }
229 | 
230 | 	.line-numbers-rows > span {
231 | 		pointer-events: none;
232 | 		display: block;
233 | 		counter-increment: linenumber;
234 | 	}
235 | 
236 | 		.line-numbers-rows > span:before {
237 | 			content: counter(linenumber);
238 | 			color: #999;
239 | 			display: block;
240 | 			padding-right: 0.8em;
241 | 			text-align: right;
242 | 		}
243 | div.code-toolbar {
244 | 	position: relative;
245 | }
246 | 
247 | div.code-toolbar > .toolbar {
248 | 	position: absolute;
249 | 	top: .3em;
250 | 	right: .2em;
251 | 	transition: opacity 0.3s ease-in-out;
252 | 	opacity: 0;
253 | }
254 | 
255 | div.code-toolbar:hover > .toolbar {
256 | 	opacity: 1;
257 | }
258 | 
259 | div.code-toolbar > .toolbar .toolbar-item {
260 | 	display: inline-block;
261 | }
262 | 
263 | div.code-toolbar > .toolbar a {
264 | 	cursor: pointer;
265 | }
266 | 
267 | div.code-toolbar > .toolbar button {
268 | 	background: none;
269 | 	border: 0;
270 | 	color: inherit;
271 | 	font: inherit;
272 | 	line-height: normal;
273 | 	overflow: visible;
274 | 	padding: 0;
275 | 	-webkit-user-select: none; /* for button */
276 | 	-moz-user-select: none;
277 | 	-ms-user-select: none;
278 | }
279 | 
280 | div.code-toolbar > .toolbar a,
281 | div.code-toolbar > .toolbar button,
282 | div.code-toolbar > .toolbar span {
283 | 	color: #bbb;
284 | 	font-size: .8em;
285 | 	padding: 0 .5em;
286 | 	background: #f5f2f0;
287 | 	background: rgba(224, 224, 224, 0.2);
288 | 	box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
289 | 	border-radius: .5em;
290 | }
291 | 
292 | div.code-toolbar > .toolbar a:hover,
293 | div.code-toolbar > .toolbar a:focus,
294 | div.code-toolbar > .toolbar button:hover,
295 | div.code-toolbar > .toolbar button:focus,
296 | div.code-toolbar > .toolbar span:hover,
297 | div.code-toolbar > .toolbar span:focus {
298 | 	color: inherit;
299 | 	text-decoration: none;
300 | }
301 | 
302 | 


--------------------------------------------------------------------------------