-
Notifications
You must be signed in to change notification settings - Fork 78
/
Copy pathmditor.min.js.map
1 lines (1 loc) · 825 KB
/
mditor.min.js.map
1
{"version":3,"sources":["webpack:///js/mditor.min.js","webpack:///webpack/bootstrap 20da7393c667ba2c5e38","webpack:///./src/client/index.js","webpack:///./~/.3.0.15@mokit/lib/index.js","webpack:///./~/.3.0.15@mokit/lib/info.json","webpack:///./~/.2.0.14@ntils/index.js","webpack:///./~/.2.1.11@cify/index.js","webpack:///./~/.3.0.15@mokit/lib/watcher/index.js","webpack:///./~/.3.0.15@mokit/lib/observer/index.js","webpack:///./~/.3.0.15@mokit/lib/events/index.js","webpack:///./~/.3.0.15@mokit/lib/template/index.js","webpack:///./~/.3.0.15@mokit/lib/template/compiler.js","webpack:///./~/.3.0.15@mokit/lib/template/directive.js","webpack:///./~/.3.0.15@mokit/lib/template/expression.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/index.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/text.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/each.js","webpack:///./~/.3.0.15@mokit/lib/template/scope.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/if.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/prop.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/attr.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/on.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/inner-html.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/inner-text.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/prevent.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/id.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/cloak.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/show.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/model/index.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/model/select.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/model/editable.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/model/input.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/model/radio.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/model/checkbox.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/model/prop.js","webpack:///./~/.3.0.15@mokit/lib/template/directives/attribute.js","webpack:///./~/.3.0.15@mokit/lib/template/template.js","webpack:///./~/.3.0.15@mokit/lib/component/index.js","webpack:///./~/.3.0.15@mokit/lib/component/component.js","webpack:///./~/.3.0.15@mokit/lib/component/component-directive.js","webpack:///./~/.3.0.15@mokit/lib/component/components/index.js","webpack:///./~/.3.0.15@mokit/lib/component/components/view.js","webpack:///./src/toolbar/index.js","webpack:///./src/toolbar/items.js","webpack:///./src/toolbar/index.html","webpack:///./src/editor/index.js","webpack:///./~/.2.0.15@ntils/index.js","webpack:///./src/editor/stack.js","webpack:///./~/cify/index.js","webpack:///./src/editor/commands.js","webpack:///./src/editor/index.html","webpack:///./src/viewer/index.js","webpack:///./src/viewer/index.html","webpack:///./src/finder/index.js","webpack:///./src/finder/index.html","webpack:///./src/client/shortcut.js","webpack:///./~/.1.0.0@shortcut-key/index.js","webpack:///./src/common/parser.js","webpack:///./~/marked/lib/marked.js","webpack:///./~/.1.6.0@prismjs/prism.js","webpack:///./~/.1.6.0@prismjs/components/prism-java.js","webpack:///./~/.1.6.0@prismjs/components/prism-csharp.js","webpack:///./~/.1.6.0@prismjs/components/prism-php.js","webpack:///./~/.1.6.0@prismjs/components/prism-python.js","webpack:///./~/.1.6.0@prismjs/components/prism-json.js","webpack:///./~/.1.6.0@prismjs/components/prism-jade.js","webpack:///./~/.1.6.0@prismjs/components/prism-yaml.min.js","webpack:///./~/.1.6.0@prismjs/components/prism-perl.js","webpack:///./~/.1.6.0@prismjs/components/prism-go.js","webpack:///./~/.1.6.0@prismjs/components/prism-bash.js","webpack:///./~/.1.6.0@prismjs/components/prism-fsharp.js","webpack:///./~/.1.6.0@prismjs/components/prism-typescript.js","webpack:///./~/.1.6.0@prismjs/components/prism-stylus.js","webpack:///./~/.1.6.0@prismjs/components/prism-less.js","webpack:///./~/.1.6.0@prismjs/components/prism-sass.js","webpack:///./~/.1.6.0@prismjs/components/prism-handlebars.js","webpack:///./~/.1.6.0@prismjs/components/prism-applescript.js","webpack:///./~/.1.6.0@prismjs/components/prism-actionscript.js","webpack:///./~/.1.6.0@prismjs/components/prism-aspnet.js","webpack:///./~/.1.6.0@prismjs/components/prism-basic.js","webpack:///./~/.1.6.0@prismjs/components/prism-c.js","webpack:///./~/.1.6.0@prismjs/components/prism-pascal.js","webpack:///./~/.1.6.0@prismjs/components/prism-vim.js","webpack:///./~/.1.6.0@prismjs/components/prism-swift.js","webpack:///./~/.1.6.0@prismjs/components/prism-objectivec.js","webpack:///./~/.1.6.0@prismjs/components/prism-sql.js","webpack:///./~/.1.6.0@prismjs/components/prism-scheme.js","webpack:///./~/.1.6.0@prismjs/components/prism-ruby.js","webpack:///./~/.1.6.0@prismjs/components/prism-smarty.js","webpack:///./~/.1.6.0@prismjs/components/prism-smalltalk.js","webpack:///./~/.1.6.0@prismjs/components/prism-rust.js","webpack:///./~/.1.6.0@prismjs/components/prism-r.js","webpack:///./~/.1.6.0@prismjs/components/prism-d.js","webpack:///./~/.1.6.0@prismjs/components/prism-dart.js","webpack:///./~/.1.6.0@prismjs/components/prism-coffeescript.js","webpack:///./~/.1.6.0@prismjs/components/prism-batch.js","webpack:///./~/.1.6.0@prismjs/components/prism-cpp.js","webpack:///./~/.1.6.0@prismjs/components/prism-lua.js","webpack:///./~/.1.6.0@prismjs/components/prism-livescript.js","webpack:///./~/.1.6.0@prismjs/components/prism-latex.js","webpack:///./~/.1.6.0@prismjs/components/prism-groovy.js","webpack:///./~/.1.6.0@prismjs/components/prism-graphql.js","webpack:///./~/.1.6.0@prismjs/components/prism-nginx.js","webpack:///./~/.1.6.0@prismjs/components/prism-erlang.js","webpack:///./~/.1.6.0@prismjs/components/prism-powershell.js","webpack:///./~/.1.6.0@prismjs/components/prism-makefile.js","webpack:///./~/.1.6.0@prismjs/components/prism-markdown.js","webpack:///./src/client/index.html"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","mokit","Toolbar","Editor","Viewer","Finder","Shortcut","Parser","HIDDEN_CLASS_NAME","Mditor","Component","template","onInit","this","PLATFORM","navigator","platform","toLowerCase","EOL","CMD","indexOf","INDENT","shortcut","parser","onReady","_this","bind","editor","addIndent","removeIndent","event","_ulAndQuoteAutoComplete","_olAutoComplete","_keepIndent","setTimeout","$emit","components","props","height","width","preview","split","fullscreen","data","self","value","find","text","finder","show","syncScroll","offsetHeight","textarea","editorScrollHeight","scrollHeight","viewerScrollHeight","viewer","$element","editorScrollTop","scrollTop","viewerScrollTop","onChanged","onInput","onHeadDblClick","target","tagName","getBeforeTextInLine","parts","length","count","buffer","push","insertBeforeText","join","preventDefault","prefix","substr","selectBeforeText","setSelectText","exp","trimedText","trim","test","num","parseInt","focus","blur","addCommand","item","name","handler","commands","key","allowDefault","owner","removeCommand","unbind","execCommand","mditor","toolbar","fromTextarea","classList","add","$watch","$mount","switchTextarea","contains","remove","window","info","utils","Class","Watcher","Observer","Template","EventEmitter","copy","version","use","plugin","install","isFunction","Error","ntils","noop","isNull","obj","str","replace","str1","str2","RegExp","startWith","endWith","has","hasProperty","hasOwnProperty","isString","String","isNumber","Number","isBoolean","Boolean","isElement","Element","nodeType","nodeName","attributes","ownerDocument","isText","Text","isObject","isArray","v1","Object","prototype","toString","v2","Array","v3","splice","v4","isDate","val","Date","isRegexp","toArray","array","slice","toDate","each","list","scope","listLength","i","rs","formatDate","date","format","dict","placeholder","M+","getMonth","d+","getDate","h+","getHours","m+","getMinutes","s+","getSeconds","w+","getDay","q+","Math","floor","S","getMilliseconds","$1","getFullYear","src","dst","igonres","getOwnPropertyDescriptor","defineProperty","ex","clone","objClone","constructor","forEach","defineFreezeProp","mix","mode","keys","enumerable","configurable","writable","err","create","proto","Cotr","setPrototypeOf","__proto__","getPrototypeOf","deepEqual","a","b","aKeys","bKeys","allKeys","concat","checkedMap","result","fromTo","fromNum","toNum","step","abs","newGuid","S4","random","substring","map","fn","setByPath","path","index","getByPath","unique","newArray","getFunctionArgumentNames","filter","short","maxLength","strLength","trimLength","firstUpper","parseDom","_PDD_","document","createElement","innerHTML","firstNode","childNodes","cloneNode","ClassFactory","options","$name","$extends","$static","superPrototype","$super","_super_called_","_super_ret_","apply","arguments","$extend","calcor","first","calc","force","newValue","OBSERVER_PROP_NAME","CHANGE_EVENT_NAME","EVENT_MAX_DISPATCH_LAYER","IGNORE_REGEXPS","observer","set","isIgnore","get","shadow","oldValue","childObserver","addChild","removeChild","emitChange","_wrapArray","names","_getPropertyNames","desc","clearReference","child","dispatch","eventName","_src_","_layer_","emit","parents","parent","parentEvent","root","foundIndex","items","pop","shift","startIndex","endIndex","observe","word","some","re","Function","emitter","_emitter_","_isNative_","_isNativeObject","_target_","_listeners_","on","$on","$addListener","addListener","off","$off","$removeListener","removeListener","addEventListener","removeEventListener","dispatchEvent","listener","capture","_addNativeEventListener","_maxListeners","_removeNativeEventListener","_listener","canBubble","cancelAble","_emitNativeEvent","stopPropagation","descriptor","_events","createEvent","initEvent","register","Compiler","Directive","Expression","directives","commonDirectives","DEFAULT_PREFIX","elementDirectives","attributeDirectives","registerDirectives","directive","fullName","type","TE","toUpperCase","_parseAttrInfo","attrName","decorates","_createDirectiveInstance","compiler","_bindHandler","sort","level","boundDirectives","attribute","node","removeAttribute","final","_compileElement","ElementDirective","_compileAttributes","attrInfo","AttrDirective","directiveOptions","expression","literal","mixed","_compileChildren","childNode","_compiled_","childHandler","compile","children","execute","dispose","element","classOptions","TA","LG","DirectiveClass","instanceOptions","update","_value_","LP","LS","LE","LA","LC","code","func","_compileMixedCode","_compileCode","_escapeEOL","_wrapCode","_createFunction","statements","_parseMixedCode","token","isExpr","tokens","char","nextChar","_escapeCode","#text","if","prop","attr","html","prevent","cloak","model","*","expr","nodeValue","Scope","mountNode","createTextNode","parentNode","insertBefore","parseExpr","eachItems","eachType","fnText","keyName","valueName","currentEachKeys","itemsFragment","createDocumentFragment","eachTarget","newScope","oldItem","newItem","appendChild","k","_handler","$substitute","$target","setAttribute","attrValue","eventTarget","emiter","$event","innerText","style","display","SelectDirective","EditableDirective","InputDirective","RadioDirective","CheckboxDirective","PropDirective","getAttribute","isContentEditable","backExpr","selectedOptions","multiple","option","selected","checked","bindProp","watcher","$unWatch","computedName","computedValue","nameExpr","valueExpr","newComputedName","newComputeValue","render","_update","_updateTimer","clearTimeout","_onBind","_bound","disableFirst","$self","component","classOpts","mixes","extendComponent","extend","mixedClassOpts","mixItem","$options","ComponentClass","instanceOpts","$class","_onTemplateUpdate_","_createdData_","_createProperties_","properties","_createWatches_","watches","watch","$directives","_importDirectives_","$components","_importComponents_","$setParent","$callHook","$compile","$parent","$removeChild","$addChild","$children","$root","ComponentDirective","args","$data","$properties","hasGetterOrSetter","_observer_","_watchers_","calcer","findIndex","w","_createElement_","_created_","$template","_template_","deferReady","append","_mounted_","_mountNode","_removed_","$appendTo","$remove","$dispatch","$broadcast","$dispose","methods","start","handleAttrs","handleContents","attrs","directiveRegexp","placeHandlers","places","querySelectorAll","place","contents","selector","content","_ready_","View","_transitioning","newComponentInstance","oldComponentInstance","componentInstance","transition","prep","go","_Component","_transition","clean","init","switchTo","newComponent","oldComponent","done","bindCommands","isActive","state","exec","getItem","removeItem","addItem","replaceItem","title","wrapSelectText","icon","selectText","getSelectText","textArray","line","lang","before","after","range","getSelectRange","end","setSelectRange","open","control","_split","Stack","ua","userAgent","isIE","match","isWinPhone","markExp","stack","textareaEmitter","getValue","_bindCommands","_this2","onCompositionStart","_compositionLock","onCompositionEnd","_this3","_this4","_changedTimer","undo","_this5","last","valGap","redo","_this6","onPaste","onDragover","onDrop","onScroll","disTwice","_this7","marks","scrollLeft","applyMarks","activeMark","activeMarkIndex","mark","scrollToMark","offsetTop","setValue","getActiveElement","activeElement","box","selectionStart","selectionEnd","setSelectionRange","_this8","setRangeText","undefined","newStart","newEnd","insertAfterText","getBeforeText","getBeforeFirstCharIndex","lastIndexOf","getBeforeWord","_this9","chars","selectAfterText","selectBeforeTextInLine","_this10","lineCount","_this11","indentRegExp","clearSelected","escapeRegExp","undoList","redoList","alert","_value","parse","onClick","tag","href","CHECK_REGEXP","active","findWord","replaceWord","hide","findBox","parseRegexp","forceStr","onFindEnter","keyCode","onReplaceEnter","shortcuts","_inRegion","cmd","global","compareArray","a1","a2","updateModifierKey","_mods","modifierMap","modifiersMatch","_downKeys","_MODIFIERS","assignKey","_handlers","getScope","mods","method","returnValue","cancelBubble","clearModifier","resetModifiers","getKeys","getMods","unbindKey","multipleKeys","j","isPressed","getPressedKeyCodes","srcElement","setScope","_scope","deleteScope","handlers","mi","addEvent","object","attachEvent","noConflict","previousKey","16","18","17","91","⇧","⌥","alt","⌃","ctrl","⌘","command","_MAP","backspace","tab","clear","enter","return","esc","escape","space","left","up","right","down","del","delete","home","pageup","pagedown",",",".","/","`","-","=",";","'","[","]","\\","x","charCodeAt","marked","Prism","languages","js","javascript","csharp","fsharp","sh","bash","md","markdown","py","python","yml","yaml","rb","ruby","highlights","Lexer","rules","gfm","heading","tables","renderer","Renderer","setOptions","breaks","pedantic","sanitize","smartLists","smartypants","mangle","highlight","callback","mdText","links","defaults","block","normal","InlineLexer","inline","encode","unescape","_","n","charAt","fromCharCode","regex","opt","source","merge","pending","lex","e","out","escaped","message","silent","newline","fences","hr","nptable","lheading","blockquote","def","table","paragraph","bullet","_tag","lexer","top","bq","next","loose","cap","bull","l","depth","header","align","cells","ordered","pre","sanitizer","autolink","url","link","reflink","nolink","strong","em","br","_inside","_href","output","inLink","outputLink","codespan","image","ch","langPrefix","quote","raw","headerPrefix","xhtml","body","listitem","tablerow","tablecell","flags","prot","decodeURIComponent","reverse","tok","peek","parseText","row","cell","inlineLexer","_self","WorkerGlobalScope","uniqueId","util","Token","alias","o","objId","v","redef","inside","insert","grammar","newToken","ret","DFS","visited","plugins","highlightAll","async","env","hooks","run","elements","highlightElement","language","className","textContent","Worker","worker","filename","onmessage","evt","highlightedCode","postMessage","JSON","stringify","immediateClose","tokenize","strarr","rest","tokenloop","patterns","pattern","lookbehind","greedy","lookbehindLength","pos","lastIndex","delNum","from","to","len","wrapped","all","callbacks","matchedStr","classes","aliases","close","script","currentScript","getElementsByTagName","hasAttribute","readyState","requestAnimationFrame","markup","comment","prolog","doctype","cdata","punctuation","namespace","attr-value","attr-name","entity","xml","mathml","svg","css","atrule","rule","string","property","important","function","style-attr","clike","class-name","keyword","boolean","number","operator","template-string","interpolation","interpolation-punctuation","querySelector","fileHighlight","Extensions","ps1","psm1","bat","h","tex","extension","xhr","XMLHttpRequest","onreadystatechange","status","responseText","statusText","send","java","annotation","generic-method","preprocessor","php","constant","shell-comment","delimiter","variable","package","tokenStack","backupCode","t","triple-quoted-string","json","null","jsonp","jade","multiline-script","filter-name","multiline-plain-text","flow-control","branch","mixin","plain-text","filter_pattern","filters","all_filters","scalar","datetime","perl","filehandle","vstring","builtin","insideString","shebang","typescript","ts","hexcode","stylus","atrule-declaration","variable-declaration","statement","property-declaration","less","mixin-usage","sass","atrule-line","variable-line","property-line","handlebars_pattern","handlebars","brackets","handlebars-comment","applescript","class","actionscript","aspnet","page-directive tag","directive tag","asp comment","asp script","basic","macro","pascal","vim","swift","objectivec","sql","scheme","symbol","smarty_pattern","smarty_litteral_start","smarty_litteral_end","smarty_litteral_mode","smarty","smarty-comment","smalltalk","block-arguments","temporary-variables","character","rust","macro-rules","closure-params","r","percent-operator","ellipsis","d","token-string","dart","metadata","coffeescript","class-member","multiline-comment","block-regex","inline-javascript","multiline-string","parameter","batch","label","cpp","lua","livescript","interpolated-string","keyword-operator","argument","identifier","funcPattern","insideEqu","equation-command","latex","equation","headline","groovy","spock-block","graphql","nginx","erlang","quoted-function","quoted-atom","atom","powershell","makefile","url-reference","bold","italic"],"mappings":"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","file":"js/mditor.min.js","sourcesContent":["/*!\n * Mditor embed version 1.1.12\n * Homepage: http://mditor.com\n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar mokit = __webpack_require__(1);\n\tvar Toolbar = __webpack_require__(40);\n\tvar Editor = __webpack_require__(45);\n\tvar Viewer = __webpack_require__(52);\n\tvar Finder = __webpack_require__(55);\n\tvar Shortcut = __webpack_require__(58);\n\tvar Parser = __webpack_require__(60);\n\t\n\t__webpack_require__(110);\n\t__webpack_require__(117);\n\t__webpack_require__(118);\n\t__webpack_require__(119);\n\t\n\tvar HIDDEN_CLASS_NAME = 'mditor-hidden';\n\t\n\tvar Mditor = new mokit.Component({\n\t template: __webpack_require__(121),\n\t\n\t /*istanbul ignore next*/onInit: function onInit() {\n\t this.PLATFORM = navigator.platform.toLowerCase();\n\t this.EOL = this.PLATFORM == 'win32' ? '\\r\\n' : '\\n';\n\t this.CMD = this.PLATFORM.indexOf('mac') > -1 ? 'command' : 'ctrl';\n\t this.INDENT = ' ';\n\t this.shortcut = new Shortcut(this);\n\t this.Parser = Parser;\n\t this.parser = new Parser(this);\n\t },\n\t /*istanbul ignore next*/onReady: function onReady() {\n\t /*istanbul ignore next*/var _this = this;\n\t\n\t this.shortcut.bind('tab', this.editor.addIndent.bind(this.editor));\n\t this.shortcut.bind('shift+tab', this.editor.removeIndent.bind(this.editor));\n\t this.shortcut.bind('enter', function (event) {\n\t /*istanbul ignore next*/_this._ulAndQuoteAutoComplete(event);\n\t /*istanbul ignore next*/_this._olAutoComplete(event);\n\t /*istanbul ignore next*/_this._keepIndent(event);\n\t }, true);\n\t setTimeout(function () {\n\t /*istanbul ignore next*/_this.$emit('ready');\n\t }, 0);\n\t },\n\t\n\t\n\t components: {\n\t Toolbar: Toolbar,\n\t Editor: Editor,\n\t Viewer: Viewer,\n\t Finder: Finder\n\t },\n\t\n\t props: {\n\t height: '400px',\n\t width: 'auto',\n\t preview: false,\n\t split: true,\n\t fullscreen: false\n\t },\n\t\n\t /*istanbul ignore next*/data: function data() {\n\t return {\n\t self: this,\n\t value: ''\n\t };\n\t },\n\t /*istanbul ignore next*/find: function find(text) {\n\t this.finder.show(text);\n\t },\n\t /*istanbul ignore next*/syncScroll: function syncScroll() {\n\t if (!this.split || this.preview) return;\n\t var offsetHeight = this.editor.textarea.offsetHeight;\n\t var editorScrollHeight = this.editor.textarea.scrollHeight;\n\t var viewerScrollHeight = this.viewer.$element.scrollHeight;\n\t var editorScrollTop = this.editor.textarea.scrollTop;\n\t var viewerScrollTop = editorScrollTop * (viewerScrollHeight - offsetHeight) / (editorScrollHeight - offsetHeight);\n\t this.viewer.$element.scrollTop = viewerScrollTop;\n\t },\n\t /*istanbul ignore next*/onChanged: function onChanged() {\n\t this.$emit('changed');\n\t this.syncScroll();\n\t },\n\t /*istanbul ignore next*/onInput: function onInput() {\n\t this.$emit('input');\n\t },\n\t /*istanbul ignore next*/onHeadDblClick: function onHeadDblClick(event) {\n\t if (event.target.tagName == 'I') return;\n\t this.$emit('head-dblclick');\n\t },\n\t /*istanbul ignore next*/_keepIndent: function _keepIndent(event) {\n\t var text = this.editor.getBeforeTextInLine();\n\t var parts = text.split(this.INDENT);\n\t if (parts.length < 2) return;\n\t var count = 0;\n\t var buffer = [this.EOL];\n\t while (parts[count] === '' && count < parts.length - 1) {\n\t count++;\n\t buffer.push(this.INDENT);\n\t }\n\t this.editor.insertBeforeText(buffer.join(''));\n\t event.preventDefault();\n\t },\n\t /*istanbul ignore next*/_ulAndQuoteAutoComplete: function _ulAndQuoteAutoComplete(event) {\n\t var text = this.editor.getBeforeTextInLine();\n\t var prefix = text.substr(0, 2);\n\t if (prefix != '- ' && prefix != '* ' && prefix != '> ') return;\n\t if (text.length > prefix.length) {\n\t this.editor.insertBeforeText(this.EOL + prefix);\n\t } else {\n\t this.editor.selectBeforeText(prefix.length);\n\t this.editor.setSelectText('');\n\t }\n\t event.preventDefault();\n\t },\n\t /*istanbul ignore next*/_olAutoComplete: function _olAutoComplete(event) {\n\t var exp = /^\\d+\\./;\n\t var text = this.editor.getBeforeTextInLine();\n\t var trimedText = text.trim();\n\t if (!exp.test(trimedText)) return;\n\t var num = trimedText.split('.')[0];\n\t if (trimedText.length > num.length + 1) {\n\t this.editor.insertBeforeText(this.EOL + (parseInt(num) + 1) + '. ');\n\t } else {\n\t this.editor.selectBeforeText(text.length);\n\t this.editor.setSelectText('');\n\t }\n\t event.preventDefault();\n\t },\n\t /*istanbul ignore next*/focus: function focus() {\n\t if (this.preview) {\n\t this.$element.focus();\n\t } else {\n\t this.editor.focus();\n\t }\n\t },\n\t /*istanbul ignore next*/blur: function blur() {\n\t this.editor.blur();\n\t },\n\t /*istanbul ignore next*/addCommand: function addCommand(item) {\n\t if (!item.name || !item.handler) return;\n\t this.commands = this.commands || {};\n\t this.commands[item.name] = item;\n\t if (item.key) {\n\t this.shortcut.bind(item.key, item.name, item.allowDefault, item.owner);\n\t }\n\t },\n\t /*istanbul ignore next*/removeCommand: function removeCommand(name) {\n\t this.commands = this.commands || {};\n\t var item = this.commands[name];\n\t if (!item) return;\n\t this.shortcut.unbind(item.key);\n\t this.commands[name] = null;\n\t delete this.commands[name];\n\t },\n\t /*istanbul ignore next*/execCommand: function execCommand(name, event) {\n\t event = event || {};\n\t event.mditor = this;\n\t event.toolbar = this.toolbar;\n\t event.editor = this.editor;\n\t this.commands[name].handler.call(this, event);\n\t }\n\t});\n\t\n\tMditor.fromTextarea = function (textarea) {\n\t textarea.classList.add(HIDDEN_CLASS_NAME);\n\t var mditor = new Mditor();\n\t mditor.value = textarea.value;\n\t mditor.$watch('value', function () {\n\t textarea.value = mditor.value;\n\t });\n\t mditor.$mount(textarea);\n\t mditor.switchTextarea = function () {\n\t if (textarea.classList.contains(HIDDEN_CLASS_NAME)) {\n\t textarea.value = mditor.value;\n\t mditor.$element.classList.add(HIDDEN_CLASS_NAME);\n\t textarea.classList.remove(HIDDEN_CLASS_NAME);\n\t } else {\n\t mditor.value = textarea.value;\n\t textarea.classList.add(HIDDEN_CLASS_NAME);\n\t mditor.$element.classList.remove(HIDDEN_CLASS_NAME);\n\t }\n\t };\n\t return mditor;\n\t};\n\t\n\tMditor.Parser = Parser;\n\t\n\tmodule.exports = window.Mditor = Mditor;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar info = __webpack_require__(2);\n\tvar utils = __webpack_require__(3);\n\tvar Class = __webpack_require__(4);\n\tvar Watcher = __webpack_require__(5);\n\tvar Observer = __webpack_require__(6);\n\tvar Template = __webpack_require__(8);\n\tvar Component = __webpack_require__(35);\n\tvar EventEmitter = __webpack_require__(7);\n\t\n\t//持载模板相关对象\n\tutils.copy(Template, Component);\n\t\n\tComponent.version = info.version;\n\tComponent.Template = Template;\n\tComponent.Watcher = Watcher;\n\tComponent.Observer = Observer;\n\tComponent.EventEmitter = EventEmitter;\n\tComponent.utils = utils;\n\tComponent.Class = Class;\n\t\n\t//定义安装插件的方法\n\tComponent.use = function (plugin) {\n\t var install = plugin.install || plugin;\n\t if (!utils.isFunction(install)) {\n\t throw new Error('Invalid Plugin');\n\t }\n\t return install.call(plugin, this);\n\t};\n\t\n\t//安装内置的路由插件\n\t//Component.use(Router);\n\t\n\tmodule.exports = Component;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = {\n\t\t\"name\": \"mokit\",\n\t\t\"version\": \"3.0.15\"\n\t};\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t(function (ntils) {\n\t\n\t /**\n\t * 空函数\n\t */\n\t ntils.noop = function () { };\n\t\n\t /**\n\t * 验证一个对象是否为NULL\n\t * @method isNull\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isNull = function (obj) {\n\t return obj === null || typeof obj === \"undefined\";\n\t };\n\t\n\t /**\n\t * 除去字符串两端的空格\n\t * @method trim\n\t * @param {String} str 源字符串\n\t * @return {String} 结果字符串\n\t * @static\n\t */\n\t ntils.trim = function (str) {\n\t if (this.isNull(str)) return str;\n\t if (str.trim) {\n\t return str.trim();\n\t } else {\n\t return str.replace(/(^[\\\\s]*)|([\\\\s]*$)/g, \"\");\n\t }\n\t };\n\t\n\t /**\n\t * 替换所有\n\t * @method replace\n\t * @param {String} str 源字符串\n\t * @param {String} str1 要替换的字符串\n\t * @param {String} str2 替换为的字符串\n\t * @static\n\t */\n\t ntils.replace = function (str, str1, str2) {\n\t if (this.isNull(str)) return str;\n\t return str.replace(new RegExp(str1, 'g'), str2);\n\t };\n\t\n\t /**\n\t * 从字符串开头匹配\n\t * @method startWith\n\t * @param {String} str1 源字符串\n\t * @param {String} str2 要匹配的字符串\n\t * @return {Boolean} 匹配结果\n\t * @static\n\t */\n\t ntils.startWith = function (str1, str2) {\n\t if (this.isNull(str1) || this.isNull(str2)) return false;\n\t return str1.indexOf(str2) === 0;\n\t };\n\t\n\t /**\n\t * 是否包含\n\t * @method contains\n\t * @param {String} str1 源字符串\n\t * @param {String} str2 检查包括字符串\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.contains = function (str1, str2) {\n\t var self = this;\n\t if (this.isNull(str1) || this.isNull(str2)) return false;\n\t return str1.indexOf(str2) > -1;\n\t };\n\t\n\t /**\n\t * 从字符串结束匹配\n\t * @method endWidth\n\t * @param {String} str1 源字符串\n\t * @param {String} str2 匹配字符串\n\t * @return {Boolean} 匹配结果\n\t * @static\n\t */\n\t ntils.endWith = function (str1, str2) {\n\t if (this.isNull(str1) || this.isNull(str2)) return false;\n\t return str1.indexOf(str2) === (str1.length - str2.length);\n\t };\n\t\n\t /**\n\t * 是否包含属性\n\t * @method hasProperty\n\t * @param {Object} obj 对象\n\t * @param {String} name 属性名\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.has = ntils.hasProperty = function (obj, name) {\n\t if (this.isNull(obj) || this.isNull(name)) return false;\n\t return (name in obj) || (obj.hasOwnProperty(name));\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为Function\n\t * @method isFunction\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isFunction = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t return typeof obj === \"function\";\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为String\n\t * @method isString\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isString = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t return typeof obj === 'string' || obj instanceof String;\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为Number\n\t * @method isNumber\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isNumber = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t return typeof obj === 'number' || obj instanceof Number;\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为Boolean\n\t * @method isBoolean\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isBoolean = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t return typeof obj === 'boolean' || obj instanceof Boolean;\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为HTML Element\n\t * @method isElement\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isElement = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t if (window.Element) {\n\t return obj instanceof Element;\n\t } else {\n\t return (obj.tagName && obj.nodeType && obj.nodeName && obj.attributes && obj.ownerDocument);\n\t }\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为HTML Text Element\n\t * @method isText\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isText = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t return obj instanceof Text;\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为Object\n\t * @method isObject\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isObject = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t return typeof obj === \"object\";\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为Array或伪Array\n\t * @method isArray\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isArray = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t var v1 = Object.prototype.toString.call(obj) === '[object Array]';\n\t var v2 = obj instanceof Array;\n\t var v3 = !this.isString(obj) && this.isNumber(obj.length) && this.isFunction(obj.splice);\n\t var v4 = !this.isString(obj) && this.isNumber(obj.length) && obj[0];\n\t return v1 || v2 || v3 || v4;\n\t };\n\t\n\t /**\n\t * 验证是不是一个日期对象\n\t * @method isDate\n\t * @param {Object} val 要检查的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isDate = function (val) {\n\t if (this.isNull(val)) return false;\n\t return val instanceof Date;\n\t };\n\t\n\t /**\n\t * 验证是不是一个正则对象\n\t * @method isDate\n\t * @param {Object} val 要检查的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isRegexp = function (val) {\n\t return val instanceof RegExp;\n\t };\n\t\n\t /**\n\t * 转换为数组\n\t * @method toArray\n\t * @param {Array|Object} array 伪数组\n\t * @return {Array} 转换结果数组\n\t * @static\n\t */\n\t ntils.toArray = function (array) {\n\t if (this.isNull(array)) return [];\n\t return Array.prototype.slice.call(array);\n\t };\n\t\n\t /**\n\t * 转为日期格式\n\t * @method toDate\n\t * @param {Number|String} val 日期字符串或整型数值\n\t * @return {Date} 日期对象\n\t * @static\n\t */\n\t ntils.toDate = function (val) {\n\t var self = this;\n\t if (self.isNumber(val))\n\t return new Date(val);\n\t else if (self.isString(val))\n\t return new Date(self.replace(self.replace(val, '-', '/'), 'T', ' '));\n\t else if (self.isDate(val))\n\t return val;\n\t else\n\t return null;\n\t };\n\t\n\t /**\n\t * 遍历一个对像或数组\n\t * @method each\n\t * @param {Object or Array} obj 要遍历的数组或对象\n\t * @param {Function} fn 处理函数\n\t * @return {void} 无返回值\n\t * @static\n\t */\n\t ntils.each = function (list, handler, scope) {\n\t if (this.isNull(list) || this.isNull(handler)) return;\n\t if (this.isArray(list)) {\n\t var listLength = list.length;\n\t for (var i = 0; i < listLength; i++) {\n\t var rs = handler.call(scope || list[i], i, list[i]);\n\t if (!this.isNull(rs)) return rs;\n\t }\n\t } else {\n\t for (var key in list) {\n\t var rs = handler.call(scope || list[key], key, list[key]);\n\t if (!this.isNull(rs)) return rs;\n\t }\n\t }\n\t };\n\t\n\t /**\n\t * 格式化日期\n\t * @method formatDate\n\t * @param {Date|String|Number} date 日期\n\t * @param {String} format 格式化字符串\n\t * @param {object} dict 反译字典\n\t * @return {String} 格式化结果\n\t * @static\n\t */\n\t ntils.formatDate = function (date, format, dict) {\n\t if (this.isNull(format) || this.isNull(date)) return date;\n\t date = this.toDate(date);\n\t dict = dict || {};\n\t var placeholder = {\n\t \"M+\": date.getMonth() + 1, //month\n\t \"d+\": date.getDate(), //day\n\t \"h+\": date.getHours(), //hour\n\t \"m+\": date.getMinutes(), //minute\n\t \"s+\": date.getSeconds(), //second\n\t \"w+\": date.getDay(), //week\n\t \"q+\": Math.floor((date.getMonth() + 3) / 3), //quarter\n\t \"S\": date.getMilliseconds() //millisecond\n\t }\n\t if (/(y+)/.test(format)) {\n\t format = format.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n\t }\n\t for (var key in placeholder) {\n\t if (new RegExp(\"(\" + key + \")\").test(format)) {\n\t var value = placeholder[key];\n\t value = dict[value] || value;\n\t format = format.replace(RegExp.$1, RegExp.$1.length == 1\n\t ? value : (\"00\" + value).substr((\"\" + value).length));\n\t }\n\t }\n\t return format;\n\t };\n\t\n\t /**\n\t * 拷贝对象\n\t * @method copy\n\t * @param {Object} src 源对象\n\t * @param {Object} dst 目标对象\n\t * @static\n\t */\n\t ntils.copy = function (src, dst, igonres) {\n\t dst = dst || (this.isArray(src) ? [] : {});\n\t this.each(src, function (key) {\n\t if (igonres && igonres.indexOf(key) > -1) return;\n\t delete dst[key];\n\t if (Object.getOwnPropertyDescriptor) {\n\t try {\n\t Object.defineProperty(dst, key, Object.getOwnPropertyDescriptor(src, key));\n\t } catch (ex) {\n\t dst[key] = src[key];\n\t }\n\t } else {\n\t dst[key] = src[key];\n\t }\n\t })\n\t return dst;\n\t };\n\t\n\t /**\n\t * 深度克隆对象\n\t * @method clone\n\t * @param {Object} src 源对象\n\t * @return {Object} 新对象\n\t * @static\n\t */\n\t ntils.clone = function (src, igonres) {\n\t if (this.isNull(src) ||\n\t this.isString(src) ||\n\t this.isNumber(src) ||\n\t this.isBoolean(src) ||\n\t this.isDate(src)) {\n\t return src;\n\t }\n\t var objClone = src;\n\t try {\n\t objClone = new src.constructor();\n\t } catch (ex) { }\n\t this.each(src, function (key, value) {\n\t if (objClone[key] != value && !this.contains(igonres, key)) {\n\t if (this.isObject(value)) {\n\t objClone[key] = this.clone(value, igonres);\n\t } else {\n\t objClone[key] = value;\n\t }\n\t }\n\t }, this);\n\t ['toString', 'valueOf'].forEach(function (key) {\n\t if (this.contains(igonres, key)) return;\n\t this.defineFreezeProp(objClone, key, src[key]);\n\t }, this);\n\t return objClone;\n\t };\n\t\n\t /**\n\t * 合并对象\n\t * @method mix\n\t * @return 合并后的对象\n\t * @param {Object} dst 目标对象\n\t * @param {Object} src 源对象\n\t * @param {Array} igonres 忽略的属性名,\n\t * @param {Number} mode 模式\n\t */\n\t ntils.mix = function (dst, src, igonres, mode) {\n\t //根据模式来判断,默认是Obj to Obj的 \n\t if (mode) {\n\t switch (mode) {\n\t case 1: // proto to proto \n\t return ntils.mix(dst.prototype, src.prototype, igonres, 0);\n\t case 2: // object to object and proto to proto \n\t ntils.mix(dst.prototype, src.prototype, igonres, 0);\n\t break; // pass through \n\t case 3: // proto to static \n\t return ntils.mix(dst, src.prototype, igonres, 0);\n\t case 4: // static to proto \n\t return ntils.mix(dst.prototype, src, igonres, 0);\n\t default: // object to object is what happens below \n\t }\n\t }\n\t //---\n\t src = src || {};\n\t dst = dst || (this.isArray(src) ? [] : {});\n\t this.keys(src).forEach(function (key) {\n\t if (this.contains(igonres, key)) return;\n\t if (this.isObject(src[key]) &&\n\t (src[key].constructor == Object ||\n\t src[key].constructor == Array ||\n\t src[key].constructor == null)) {\n\t dst[key] = ntils.mix(dst[key], src[key], igonres, 0);\n\t } else {\n\t dst[key] = src[key];\n\t }\n\t }, this);\n\t return dst;\n\t };\n\t\n\t /**\n\t * 定义不可遍历的属性\n\t **/\n\t ntils.defineFreezeProp = function (obj, name, value) {\n\t try {\n\t Object.defineProperty(obj, name, {\n\t value: value,\n\t enumerable: false,\n\t configurable: true, //能不能重写定义\n\t writable: false //能不能用「赋值」运算更改\n\t });\n\t } catch (err) {\n\t obj[name] = value;\n\t }\n\t };\n\t\n\t /**\n\t * 获取所有 key \n\t */\n\t ntils.keys = function (obj) {\n\t if (Object.keys) return Object.keys(obj);\n\t var keys = [];\n\t this.each(obj, function (key) {\n\t keys.push(key);\n\t });\n\t return keys;\n\t };\n\t\n\t /**\n\t * 创建一个对象\n\t */\n\t ntils.create = function (proto, props) {\n\t if (Object.create) return Object.create(proto, props);\n\t var Cotr = function () { };\n\t Cotr.prototype = proto;\n\t var obj = new Cotr();\n\t if (props) this.copy(props, obj);\n\t return obj;\n\t };\n\t\n\t /**\n\t * 设置 proto\n\t * 在不支持 setPrototypeOf 也不支持 __proto__ 的浏览器\n\t * 中,会采用 copy 方式\n\t */\n\t ntils.setPrototypeOf = function (obj, proto) {\n\t if (Object.setPrototypeOf) {\n\t return Object.setPrototypeOf(obj, proto || this.create(null));\n\t } else {\n\t if (!('__proto__' in Object)) this.copy(proto, obj);\n\t obj.__proto__ = proto;\n\t }\n\t };\n\t\n\t /**\n\t * 获取 proto\n\t */\n\t ntils.getPrototypeOf = function (obj) {\n\t if (obj.__proto__) return obj.__proto__;\n\t if (Object.getPrototypeOf) return Object.getPrototypeOf(obj);\n\t if (obj.constructor) return obj.constructor.prototype;\n\t };\n\t\n\t /**\n\t * 是否深度相等\n\t */\n\t ntils.deepEqual = function (a, b) {\n\t if (a === b) return true;\n\t if (!this.isObject(a) || !this.isObject(b)) return false;\n\t var aKeys = this.keys(a);\n\t var bKeys = this.keys(b);\n\t if (aKeys.length !== bKeys.length) return false;\n\t var allKeys = aKeys.concat(bKeys);\n\t var checkedMap = this.create(null);\n\t var result = true;\n\t this.each(allKeys, function (i, key) {\n\t if (checkedMap[key]) return;\n\t if (!this.deepEqual(a[key], b[key])) result = false;\n\t checkedMap[key] = true;\n\t }, this);\n\t return result;\n\t };\n\t\n\t /**\n\t * 从一个数值循环到别一个数\n\t * @param {number} fromNum 开始数值\n\t * @param {Number} toNum 结束数值\n\t * @param {Number} step 步长值\n\t * @param {function} handler 执行函数\n\t * @returns {void} 无返回\n\t */\n\t ntils.fromTo = function (fromNum, toNum, step, handler) {\n\t if (!handler) handler = [step, step = handler][0];\n\t step = Math.abs(step || 1);\n\t if (fromNum < toNum) {\n\t for (var i = fromNum; i <= toNum; i += step) handler(i);\n\t } else {\n\t for (var i = fromNum; i >= toNum; i -= step) handler(i);\n\t }\n\t };\n\t\n\t /**\n\t * 生成一个Guid\n\t * @method newGuid\n\t * @return {String} GUID字符串\n\t * @static\n\t */\n\t ntils.newGuid = function () {\n\t var S4 = function () {\n\t return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n\t };\n\t return (S4() + S4() + \"-\" + S4() + \"-\" + S4() + \"-\" + S4() + \"-\" + S4() + S4() + S4());\n\t };\n\t\n\t /**\n\t * 对象变换\n\t **/\n\t ntils.map = function (list, fn) {\n\t var buffer = this.isArray(list) ? [] : {};\n\t this.each(list, function (name, value) {\n\t buffer[name] = fn(name, value);\n\t });\n\t return buffer;\n\t };\n\t\n\t /**\n\t * 通过路径设置属性值\n\t */\n\t ntils.setByPath = function (obj, path, value) {\n\t if (this.isNull(obj) || this.isNull(path) || path === '') {\n\t return;\n\t }\n\t if (!this.isArray(path)) {\n\t path = path.replace(/\\[/, '.').replace(/\\]/, '.').split('.');\n\t }\n\t this.each(path, function (index, name) {\n\t if (this.isNull(name) || name.length < 1) return;\n\t if (index === path.length - 1) {\n\t obj[name] = value;\n\t } else {\n\t obj[name] = obj[name] || {};\n\t obj = obj[name];\n\t }\n\t }, this);\n\t };\n\t\n\t /**\n\t * 通过路径获取属性值\n\t */\n\t ntils.getByPath = function (obj, path) {\n\t if (this.isNull(obj) || this.isNull(path) || path === '') {\n\t return obj;\n\t }\n\t if (!this.isArray(path)) {\n\t path = path.replace(/\\[/, '.').replace(/\\]/, '.').split('.');\n\t }\n\t this.each(path, function (index, name) {\n\t if (this.isNull(name) || name.length < 1) return;\n\t if (!this.isNull(obj)) obj = obj[name];\n\t }, this);\n\t return obj;\n\t };\n\t\n\t /**\n\t * 数组去重\n\t **/\n\t ntils.unique = function (array) {\n\t if (this.isNull(array)) return array;\n\t var newArray = [];\n\t this.each(array, function (i, value) {\n\t if (newArray.indexOf(value) > -1) return;\n\t newArray.push(value);\n\t });\n\t return newArray;\n\t };\n\t\n\t /**\n\t * 解析 function 的参数列表\n\t **/\n\t ntils.getFunctionArgumentNames = function (fn) {\n\t if (!fn) return [];\n\t var src = fn.toString();\n\t var parts = src.split(')')[0].split('=>')[0].split('(');\n\t return (parts[1] || parts[0]).split(',').map(function (name) {\n\t return name.trim();\n\t }).filter(function (name) {\n\t return name != 'function';\n\t });\n\t };\n\t\n\t /**\n\t * 缩短字符串\n\t */\n\t ntils.short = function (str, maxLength) {\n\t if (!str) return str;\n\t maxLength = maxLength || 40;\n\t var strLength = str.length;\n\t var trimLength = maxLength / 2;\n\t return strLength > maxLength ? str.substr(0, trimLength) + '...' + str.substr(strLength - trimLength) : str;\n\t };\n\t\n\t /**\n\t * 首字母大写\n\t */\n\t ntils.firstUpper = function (str) {\n\t if (this.isNull(str)) return;\n\t str[0] = str[0].toLowerCase();\n\t return str;\n\t };\n\t\n\t /**\n\t * 解析字符串为 dom \n\t * @param {string} str 字符串\n\t * @returns {HTMLNode} 解析后的 DOM \n\t */\n\t ntils.parseDom = function (str) {\n\t this._PDD_ = this._PDD_ || document.createElement('div');\n\t this._PDD_.innerHTML = ntils.trim(str);\n\t var firstNode = this._PDD_.childNodes[0];\n\t //先 clone 一份再通过 innerHTML 清空\n\t //否则 IE9 下,清空时会导出返回的 DOM 没有子结点\n\t if (firstNode) firstNode = firstNode.cloneNode(true);\n\t this._PDD_.innerHTML = '';\n\t return firstNode;\n\t };\n\t\n\t})(( false) ? (window.ntils = {}) : exports);\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tconst utils = __webpack_require__(3);\n\t\n\tfunction ClassFactory(options) {\n\t //处理 options\n\t options = options || utils.create(null);\n\t options.$name = options.$name || 'Class';\n\t options.$extends = options.$extends || ClassFactory;\n\t options.$static = options.$static || utils.create(null);\n\t //处理父类 prototype\n\t var superPrototype = utils.isFunction(options.$extends) ?\n\t options.$extends.prototype : options.$extends;\n\t //定义新类\n\t var Class = function () {\n\t //处理 super\n\t if (!this.$super) {\n\t utils.defineFreezeProp(this, '$super', function () {\n\t if (this._super_called_) return this._super_ret_;\n\t this._super_called_ = true;\n\t if (utils.isFunction(options.$extends)) {\n\t this._super_ret_ = options.$extends.apply(this, arguments);\n\t //这几行确保可继承于数组\n\t if (this._super_ret_) {\n\t var proto = utils.getPrototypeOf(this);\n\t utils.setPrototypeOf(proto, this._super_ret_);\n\t }\n\t } else {\n\t this._super_ret_ = options.$extends;\n\t }\n\t return this._super_ret_;\n\t });\n\t for (var name in superPrototype) {\n\t var value = superPrototype[name];\n\t if (utils.isFunction(value)) {\n\t this.$super[name] = value.bind(this);\n\t } else {\n\t this.$super[name] = value;\n\t }\n\t }\n\t }\n\t //调用构造\n\t if (utils.isFunction(options.constructor) &&\n\t options.constructor !== Object) {\n\t return options.constructor.apply(this, arguments);\n\t } else {\n\t //如果没有实现 constructor 则调用父类构造\n\t this.$super.apply(this, arguments);\n\t }\n\t };\n\t //处理 prototype\n\t Class.prototype = utils.create(superPrototype);\n\t utils.copy(options, Class.prototype);\n\t utils.defineFreezeProp(Class.prototype, '$class', Class);\n\t //处理静态成员\n\t utils.copy(options.$static, Class);\n\t if (utils.isFunction(options.$extends)) {\n\t utils.setPrototypeOf(Class, options.$extends);\n\t }\n\t if (!options.$extends.$extend) {\n\t utils.copy(ClassFactory, Class);\n\t }\n\t utils.defineFreezeProp(Class, '$super', options.$extends);\n\t //--\n\t return Class;\n\t}\n\t\n\t//定义扩展方法\n\tClassFactory.$extend = function (options) {\n\t options.$extends = this;\n\t return new ClassFactory(options);\n\t};\n\t\n\tClassFactory.Class = ClassFactory;\n\tmodule.exports = ClassFactory;\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Class = __webpack_require__(4);\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * Watcher 类\n\t * 通过「计算函数」、「执行函数」可以创建一个 Watcher 实例\n\t */\n\tvar Watcher = new Class({\n\t\n\t /**\n\t * 通过「计算函数」、「执行函数」构建一个 Watcher 实例\n\t * @param {function} calcor 计算函数\n\t * @param {function} handler 处理函数\n\t * @param {boolean} first 是否自动执行第一次\n\t * @returns {void} 无返回\n\t */\n\t constructor: function /*istanbul ignore next*/constructor(calcor, handler, first) {\n\t if (!utils.isFunction(calcor) || !utils.isFunction(handler)) {\n\t throw new Error('Invalid parameters');\n\t }\n\t this.calcor = calcor;\n\t this.handler = handler;\n\t if (first) this.calc(true);\n\t },\n\t\n\t /**\n\t * 执行计算\n\t * @param {boolean} force 是否强制触发「计算函数」\n\t * @returns {Object} 计算后的值\n\t */\n\t calc: function /*istanbul ignore next*/calc(force) {\n\t var newValue = this.calcor();\n\t if (force || !utils.deepEqual(newValue, this.value)) {\n\t this.handler(newValue, this.value);\n\t }\n\t this.value = utils.clone(newValue);\n\t }\n\t\n\t});\n\t\n\tmodule.exports = Watcher;\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Class = __webpack_require__(4);\n\tvar utils = __webpack_require__(3);\n\tvar EventEmitter = __webpack_require__(7);\n\t\n\tvar OBSERVER_PROP_NAME = '_observer_';\n\tvar CHANGE_EVENT_NAME = 'change';\n\tvar EVENT_MAX_DISPATCH_LAYER = 10;\n\tvar IGNORE_REGEXPS = [/^\\_(.*)\\_$/i, /^\\_\\_/i];\n\t\n\t/**\n\t * 对象观察类,可以监控对象变化\n\t * 目前方案问题:\n\t * 对于父子关系和事件冒泡,目前方案如果用 delete 删除一个属性,无关真实删除关系,\n\t * 即便调用 clearReference 也无法再清除关系,子对象的 parents 中会一直有一个引用,当前方案最高效\n\t * 其它方法一:\n\t * 将「关系」放入全局数组中,然后将 ob.parents 变成一个「属性」从全局数组件中 filter 出来,\n\t * 基本和目前方法类似,但是关系在外部存领教,所以 clearReference 可清除。\n\t * 其它方案二: \n\t * 构造时添加到全局数组,每一个 observer change 时都让放到全局的 observer 遍历自身的,\n\t * 检果事件源是不是自已的子对象,如果是则触发自身 change 事件,这样 ob 对象本身没有相关引用\n\t * clearReference 时只从全局清除掉就行了,并且 delete 操作也不会影响,但效率稍差。\n\t * 其它方案三: \n\t * 给构造函数添加一个 deep 属性,只有 deep 的 ob 对象,才放入到全局数组中,检查时逻辑同方案二\n\t * 但是因为要检查的对象会少很多,效率会更高一点。\n\t */\n\tvar Observer = new Class({\n\t $extends: EventEmitter,\n\t\n\t /**\n\t * 通过目标对象构造一个观察对象\n\t * @param {Object} target 目标对象\n\t * @param {Object} options 选项\n\t * @returns {void} 无返回\n\t */\n\t constructor: function /*istanbul ignore next*/constructor(target, options) {\n\t if (utils.isNull(target)) {\n\t throw new Error('Invalid target');\n\t }\n\t options = options || {};\n\t var observer = target[OBSERVER_PROP_NAME];\n\t if (observer) {\n\t utils.copy(options, observer.options);\n\t //当时一个组件 A 的为组件 B 的 prop 时,A 更新不会触发 B 更新\n\t //所在暂注释这里,另一种方法是更新 prop 指令,重写 excute 方法,而不是现在的 update 方法\n\t // if (observer.options.root) {\n\t // observer.parents.length = 0;\n\t // }\n\t observer.apply();\n\t return observer;\n\t }\n\t EventEmitter.call(this);\n\t utils.defineFreezeProp(this, 'options', options);\n\t utils.defineFreezeProp(this, 'shadow', {});\n\t utils.defineFreezeProp(this, 'target', target);\n\t utils.defineFreezeProp(this, 'parents', []);\n\t utils.defineFreezeProp(target, OBSERVER_PROP_NAME, this);\n\t this.apply();\n\t },\n\t\n\t /**\n\t * 添加一个属性,动态添中的属性,无法被观察,\n\t * 但是通过 set 方法添加的属性可能被观察。\n\t * @param {string} name 名称\n\t * @param {Object} value 值\n\t * @returns {void} 无返回\n\t */\n\t set: function /*istanbul ignore next*/set(name, value) {\n\t if (utils.isFunction(value) || Observer.isIgnore(name)) {\n\t return;\n\t }\n\t Object.defineProperty(this.target, name, {\n\t get: function /*istanbul ignore next*/get() {\n\t return this[OBSERVER_PROP_NAME].shadow[name];\n\t },\n\t set: function /*istanbul ignore next*/set(value) {\n\t var observer = this[OBSERVER_PROP_NAME];\n\t var oldValue = observer.shadow[name];\n\t if (oldValue === value) return;\n\t if (utils.isObject(value)) {\n\t var childObserver = new Observer(value);\n\t observer.addChild(childObserver, name);\n\t }\n\t //移除旧值的父引用\n\t //如果用 delete 删除属性将无法移除父子引用\n\t if (oldValue && oldValue[OBSERVER_PROP_NAME]) {\n\t observer.removeChild(oldValue[OBSERVER_PROP_NAME], name);\n\t }\n\t observer.shadow[name] = value;\n\t observer.emitChange({ path: name, value: value });\n\t },\n\t configurable: true,\n\t enumerable: true\n\t });\n\t this.target[name] = value;\n\t },\n\t\n\t /**\n\t * 自动应用所有动态添加的属性\n\t * @returns {void} 无返回\n\t */\n\t apply: function /*istanbul ignore next*/apply() {\n\t if (utils.isArray(this.target)) {\n\t this._wrapArray(this.target);\n\t }\n\t var names = this._getPropertyNames(this.target);\n\t names.forEach(function (name) {\n\t var desc = Object.getOwnPropertyDescriptor(this.target, name);\n\t if (!('value' in desc)) return;\n\t this.set(name, this.target[name]);\n\t }, this);\n\t },\n\t\n\t /**\n\t * 清除所有父子引用\n\t * @returns {void} 无返回\n\t */\n\t clearReference: function /*istanbul ignore next*/clearReference() {\n\t utils.each(this.target, function (name, value) {\n\t if (utils.isNull(value)) return;\n\t var child = value[OBSERVER_PROP_NAME];\n\t if (child) this.removeChild(child);\n\t }, this);\n\t },\n\t\n\t /**\n\t * 派发一个事件,事件会向父级对象冒泡\n\t * @param {string} eventName 事件名称\n\t * @param {Object} event 事件对象\n\t * @returns {void} 无返回\n\t */\n\t dispatch: function /*istanbul ignore next*/dispatch(eventName, event) {\n\t if (event._src_ === this) return;\n\t event._src_ = event._src_ || this;\n\t event._layer_ = event._layer_ || 0;\n\t if (event._layer_++ >= EVENT_MAX_DISPATCH_LAYER) return;\n\t this.emit(eventName, event);\n\t if (!this.parents || this.parents.length < 1) return;\n\t this.parents.forEach(function (item) {\n\t if (!(item.name in item.parent.target)) {\n\t return item.parent.removeChild(this);\n\t }\n\t var parentEvent = utils.copy(event);\n\t parentEvent.path = item.name + '.' + event.path;\n\t item.parent.dispatch(eventName, parentEvent);\n\t }, this);\n\t },\n\t\n\t /**\n\t * 添子观察者对象\n\t * @param {Object} child 父对象\n\t * @param {String} name 属性名\n\t * @returns {void} 无返回\n\t */\n\t addChild: function /*istanbul ignore next*/addChild(child, name) {\n\t if (utils.isNull(child) || utils.isNull(name)) {\n\t throw new Error('Invalid paramaters');\n\t }\n\t if (child.options.root) return;\n\t child.parents.push({ parent: this, name: name });\n\t },\n\t\n\t /**\n\t * 移除子对象\n\t * @param {Object} child 父对象\n\t * @param {String} name 属性名\n\t * @returns {void} 无返回\n\t */\n\t removeChild: function /*istanbul ignore next*/removeChild(child, name) {\n\t if (utils.isNull(child)) {\n\t throw new Error('Invalid paramaters');\n\t }\n\t var foundIndex = -1;\n\t child.parents.forEach(function (item, index) {\n\t if (item.parent === this && item.name === name) {\n\t foundIndex = index;\n\t }\n\t }, this);\n\t if (foundIndex > -1) {\n\t child.parents.splice(foundIndex, 1);\n\t }\n\t },\n\t\n\t /**\n\t * 触发 change 事件\n\t * @param {Object} event 事件对象\n\t * @returns {void} 无返回\n\t */\n\t emitChange: function /*istanbul ignore next*/emitChange(event) {\n\t this.dispatch(CHANGE_EVENT_NAME, event);\n\t },\n\t\n\t /**\n\t * 获取所有成员名称列表\n\t * @returns {Array} 所有成员名称列表\n\t */\n\t _getPropertyNames: function /*istanbul ignore next*/_getPropertyNames() {\n\t var names = utils.isArray(this.target) ? this.target.map(function (item, index) {\n\t return index;\n\t }) : Object.keys(this.target);\n\t return names.filter(function (name) {\n\t return name !== OBSERVER_PROP_NAME;\n\t });\n\t },\n\t\n\t /**\n\t * 包裹数组\n\t * @param {array} array 源数组\n\t * @returns {array} 处理后的数组\n\t */\n\t _wrapArray: function /*istanbul ignore next*/_wrapArray(array) {\n\t utils.defineFreezeProp(array, 'push', function () {\n\t var items = [].slice.call(arguments);\n\t items.forEach(function (item) {\n\t //这里也会触发对应 index 的 change 事件\n\t this[OBSERVER_PROP_NAME].set(array.length, item);\n\t }, this);\n\t this[OBSERVER_PROP_NAME].emitChange({ path: 'length', value: this.length });\n\t });\n\t utils.defineFreezeProp(array, 'pop', function () {\n\t var item = [].pop.apply(this, arguments);\n\t this[OBSERVER_PROP_NAME].emitChange({ path: this.length, value: item });\n\t this[OBSERVER_PROP_NAME].emitChange({ path: 'length', value: this.length });\n\t return item;\n\t });\n\t utils.defineFreezeProp(array, 'unshift', function () {\n\t var items = [].slice.call(arguments);\n\t items.forEach(function (item) {\n\t //这里也会触发对应 index 的 change 事件\n\t this[OBSERVER_PROP_NAME].set(0, item);\n\t }, this);\n\t this[OBSERVER_PROP_NAME].emitChange({ path: 'length', value: this.length });\n\t });\n\t utils.defineFreezeProp(array, 'shift', function () {\n\t var item = [].shift.apply(this, arguments);\n\t this[OBSERVER_PROP_NAME].emitChange({ path: 0, value: item });\n\t this[OBSERVER_PROP_NAME].emitChange({ path: 'length', value: this.length });\n\t return item;\n\t });\n\t utils.defineFreezeProp(array, 'splice', function () {\n\t var startIndex = arguments[0];\n\t var endIndex = utils.isNull(arguments[1]) ? startIndex + arguments[1] : this.length - 1;\n\t var items = [].splice.apply(this, arguments);\n\t for (var i = startIndex; i <= endIndex; i++) {\n\t this[OBSERVER_PROP_NAME].emitChange({ path: i, value: items[i - startIndex] });\n\t }\n\t this[OBSERVER_PROP_NAME].emitChange({ path: 'length', value: this.length });\n\t return items;\n\t });\n\t utils.defineFreezeProp(array, 'set', function (index, value) {\n\t if (index >= this.length) {\n\t this[OBSERVER_PROP_NAME].emitChange({ path: 'length', value: this.length });\n\t }\n\t this[OBSERVER_PROP_NAME].set(index, value);\n\t });\n\t }\n\t\n\t});\n\t\n\t/**\n\t * 观察一个对象\n\t * @param {Object} target 目标对象\n\t * @return {Observer} 观察者对象\n\t */\n\tObserver.observe = function (target) {\n\t return new Observer(target);\n\t};\n\t\n\t/**\n\t * 检查是不是忽略的属性名\n\t * @param {string} word 待检查的字符串\n\t * @returns {void} 无返回\n\t */\n\tObserver.isIgnore = function (word) {\n\t return IGNORE_REGEXPS.some(function (re) /*istanbul ignore next*/{\n\t return re.test(word);\n\t });\n\t};\n\t\n\tmodule.exports = Observer;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\tvar Class = __webpack_require__(4);\n\t\n\t/**\n\t * 事件触发器基类\n\t */\n\tvar EventEmitter = new Class({\n\t $extends: Function,\n\t\n\t /**\n\t * 构建一个一个事修的触发器对象\n\t * @param {object} target 将代理的目标对象可以省略\n\t * @returns {void} 无返回\n\t */\n\t constructor: function /*istanbul ignore next*/constructor(target) {\n\t target = target || this;\n\t var emitter = target._emitter_;\n\t if (emitter) return emitter;\n\t utils.defineFreezeProp(this, '_target_', target);\n\t utils.defineFreezeProp(target, '_emitter_', this);\n\t this._isNative_ = this._isNativeObject(this._target_);\n\t this._listeners_ = this._listeners_ || {};\n\t this.on = this.$on = this.$addListener = this.addListener;\n\t this.off = this.$off = this.$removeListener = this.removeListener;\n\t this.$emit = this.emit;\n\t },\n\t\n\t /**\n\t * 检查是否原生支持事件\n\t * @param {object} obj 对象\n\t * @returns {void} 检查结果\n\t */\n\t _isNativeObject: function /*istanbul ignore next*/_isNativeObject(obj) {\n\t return obj.addEventListener && obj.removeEventListener && obj.dispatchEvent;\n\t },\n\t\n\t /**\n\t * 添加一个事件监听函数\n\t * @param {string} name 事件名称\n\t * @param {function} listener 事件处理函数\n\t * @param {capture} capture 是否是捕获阶段事件(只在代理 dom 对象时有效)\n\t * @returns {void} 无返回\n\t */\n\t addListener: function /*istanbul ignore next*/addListener(name, listener, capture) {\n\t if (this._isNative_) {\n\t this._addNativeEventListener(name, listener, capture);\n\t }\n\t this._listeners_[name] = this._listeners_[name] || [];\n\t this._listeners_[name].push(listener);\n\t if (this._listeners_[name].length > EventEmitter._maxListeners) {\n\t throw new Error('The `' + name + '` event listener is not more than 10');\n\t }\n\t },\n\t\n\t /**\n\t * 移除「一个/一组/所有」事件监听函数\n\t * @param {string} name 事件名称\n\t * @param {function} listener 事件处理函数\n\t * @param {capture} capture 是否是捕获阶段事件(只在代理 dom 对象时有效)\n\t * @returns {void} 无返回\n\t */\n\t removeListener: function /*istanbul ignore next*/removeListener(name, listener, capture) {\n\t if (name && listener) {\n\t if (this._isNative_) {\n\t this._removeNativeEventListener(name, listener, capture);\n\t }\n\t if (!this._listeners_[name]) return;\n\t var index = this._listeners_[name].indexOf(listener);\n\t this._listeners_[name].splice(index, 1);\n\t } else if (name) {\n\t if (this._isNative_ && this._listeners_[name]) {\n\t this._listeners_[name].forEach(function (_listener) {\n\t this.removeListener(name, _listener, capture);\n\t }, this);\n\t }\n\t delete this._listeners_[name];\n\t } else {\n\t utils.each(this._listeners_, function (name) {\n\t this.removeListener(name, null, capture);\n\t }, this);\n\t this._listeners_ = {};\n\t }\n\t },\n\t\n\t /**\n\t * 触发自身的一个事件\n\t * @param {string} name 事件名称\n\t * @param {object} data 传递的对象\n\t * @param {string} canBubble 能否冒泡(只在代理 dom 对象时有效)\n\t * @param {object} cancelAble 能否取消(只在代理 dom 对象时有效)\n\t * @returns {void} 无返回\n\t */\n\t emit: function /*istanbul ignore next*/emit(name, data, canBubble, cancelAble) {\n\t if (this._isNative_) {\n\t return this._emitNativeEvent(name, data, canBubble, cancelAble);\n\t }\n\t if (!this._listeners_[name]) return;\n\t var stopPropagation = false;\n\t this._listeners_[name].forEach(function (handler) {\n\t var rs = handler.call(this._target_, data);\n\t if (rs === false) stopPropagation = true;\n\t }, this);\n\t return stopPropagation;\n\t },\n\t\n\t /**\n\t * 添加 DOM 元素事件\n\t * @param {string} name 事件名称\n\t * @param {function} listener 事件处理函数\n\t * @param {capture} capture 是否是捕获阶段事件\n\t * @returns {void} 无返回\n\t */\n\t _addNativeEventListener: function /*istanbul ignore next*/_addNativeEventListener(name, listener, capture) {\n\t this._target_.addEventListener(name, listener, capture);\n\t //如果存在已注册的自定义 “组合事件”\n\t var descriptor = EventEmitter._events[name];\n\t if (descriptor) {\n\t descriptor.addListener = descriptor.addListener || descriptor.on;\n\t descriptor.addListener(this, name, listener, capture);\n\t }\n\t },\n\t\n\t /**\n\t * 移除 DOM 元素事件\n\t * @param {string} name 事件名称\n\t * @param {function} listener 事件处理函数\n\t * @param {capture} capture 是否是捕获阶段事件\n\t * @returns {void} 无返回\n\t */\n\t _removeNativeEventListener: function /*istanbul ignore next*/_removeNativeEventListener(name, listener, capture) {\n\t this._target_.removeEventListener(name, listener, capture);\n\t //如果存在已注册的自定义 “组合事件”\n\t var descriptor = EventEmitter._events[name];\n\t if (descriptor) {\n\t descriptor.removeListener = descriptor.removeListener || descriptor.off;\n\t descriptor.removeListener(this, name, listener, capture);\n\t }\n\t },\n\t\n\t /**\n\t * 触发 DOM 元素事件\n\t * @param {string} name 事件名称\n\t * @param {object} data 传递的对象\n\t * @param {string} canBubble 能否冒泡\n\t * @param {object} cancelAble 能否取消\n\t * @returns {void} 无返回\n\t */\n\t _emitNativeEvent: function /*istanbul ignore next*/_emitNativeEvent(name, data, canBubble, cancelAble) {\n\t var event = document.createEvent('HTMLEvents');\n\t event.initEvent(name, canBubble, cancelAble);\n\t utils.copy(data, event, ['data']);\n\t event.data = data;\n\t return this._target_.dispatchEvent(event);\n\t }\n\t\n\t});\n\t\n\t//最多添加多少个 listener\n\tEventEmitter._maxListeners = 10;\n\t\n\t//所有自定义事件\n\tEventEmitter._events = [];\n\t\n\t/**\n\t * 注册自定义事件(只在代理 dom 对象时有效)\n\t * @param {object} descriptor 事件定义\n\t * @returns {void} 无返回\n\t */\n\tEventEmitter.register = function (descriptor) {\n\t var names = descriptor.name;\n\t if (!names) return;\n\t if (!utils.isArray(names)) names = names.split(',');\n\t names.forEach(function (name) {\n\t this._events[name] = descriptor;\n\t }, this);\n\t};\n\t\n\tmodule.exports = EventEmitter;\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Compiler = __webpack_require__(9);\n\tvar Directive = __webpack_require__(10);\n\tvar Expression = __webpack_require__(11);\n\tvar Template = __webpack_require__(34);\n\tvar directives = __webpack_require__(12);\n\t\n\tTemplate.Template = Template;\n\tTemplate.Compiler = Compiler;\n\tTemplate.Directive = Directive;\n\tTemplate.directives = directives;\n\tTemplate.Expression = Expression;\n\t\n\tmodule.exports = Template;\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Class = __webpack_require__(4);\n\tvar Directive = __webpack_require__(10);\n\tvar utils = __webpack_require__(3);\n\tvar Expression = __webpack_require__(11);\n\tvar commonDirectives = __webpack_require__(12);\n\t\n\tvar DEFAULT_PREFIX = 'm';\n\t\n\t/**\n\t * 模板编译器\n\t * 可以通过指定「前缀」或「指令集」构建实例\n\t */\n\tvar Compiler = new Class({\n\t\n\t /**\n\t * 构造一个编译器\n\t * @param {Object} options 选项\n\t * @returns {void} 无返回\n\t */\n\t constructor: function /*istanbul ignore next*/constructor(options) {\n\t options = options || {};\n\t this.prefix = options.prefix || DEFAULT_PREFIX;\n\t this.elementDirectives = {};\n\t this.attributeDirectives = {};\n\t this.registerDirectives(commonDirectives);\n\t this.registerDirectives(options.directives);\n\t },\n\t\n\t /**\n\t * 添加指令\n\t * @param {Object} directives 指令集 \n\t * @returns {void} 无返回\n\t */\n\t registerDirectives: function /*istanbul ignore next*/registerDirectives(directives) {\n\t utils.each(directives, function (name, directive) {\n\t name = name.replace(/([A-Z])/g, '-$1');\n\t if (name[0] == '-') name = name.slice(1);\n\t var fullName = directive.options.prefix === false ? name : /*istanbul ignore next*/this.prefix + ':' + name;\n\t if (directive.options.type == Directive.TE) {\n\t this.elementDirectives[fullName.toUpperCase()] = directive;\n\t } else {\n\t this.attributeDirectives[fullName] = directive;\n\t }\n\t }, this);\n\t },\n\t\n\t /**\n\t * 解析要 attr 指令信息\n\t * @param {string} attrName 要解析的名称字符串\n\t * @returns {Object} 解析后的对象\n\t */\n\t _parseAttrInfo: function /*istanbul ignore next*/_parseAttrInfo(attrName) {\n\t var parts = attrName.toLowerCase().split(':');\n\t var info = {};\n\t if (parts.length > 1) {\n\t info.name = /*istanbul ignore next*/parts[0] + ':' + parts[1];\n\t info.decorates = parts.slice(2);\n\t } else {\n\t info.name = parts[0];\n\t info.decorates = [];\n\t }\n\t return info;\n\t },\n\t\n\t /**\n\t * 创建一个指令实例\n\t * @param {Directive} Directive 指令类\n\t * @param {Object} options 指令构建选项\n\t * @returns {Directive} 指令实例\n\t */\n\t _createDirectiveInstance: function /*istanbul ignore next*/_createDirectiveInstance(Directive, options) {\n\t options.compiler = this;\n\t options.prefix = this.prefix;\n\t return new Directive(options);\n\t },\n\t\n\t /**\n\t * 初始化一个编译完成的 handler\n\t * @param {function} handler 编译后的的模板函数\n\t * @returns {void} 无返回\n\t */\n\t _bindHandler: function /*istanbul ignore next*/_bindHandler(handler) {\n\t //排序 directives\n\t handler.directives = handler.directives.sort(function (a, b) {\n\t return b.level - a.level;\n\t });\n\t //初始化 directives\n\t var boundDirectives = [];\n\t utils.each(handler.directives, function (index, directive) {\n\t directive.index = index;\n\t directive.bind();\n\t boundDirectives.push(directive);\n\t //移除完成绑定的指令对应的 attribute\n\t if (directive.remove !== false && directive.attribute) {\n\t directive.node.removeAttribute(directive.attribute.name);\n\t }\n\t //如果遇到一个「终态」指令,停止向下初始化\n\t if (directive.final) {\n\t return handler.final = true;\n\t }\n\t }, this);\n\t handler.directives = boundDirectives;\n\t },\n\t\n\t /**\n\t * 编译一个元素本身\n\t * @param {function} handler 当前模板函数\n\t * @param {HTMLNode} node 当前 HTML 结点\n\t * @returns {void} 无返回\n\t */\n\t _compileElement: function /*istanbul ignore next*/_compileElement(handler, node) {\n\t var ElementDirective = this.elementDirectives[node.nodeName.toUpperCase()];\n\t if (!ElementDirective) return;\n\t handler.directives.push(this._createDirectiveInstance(ElementDirective, {\n\t handler: handler,\n\t node: node\n\t }));\n\t },\n\t\n\t /**\n\t * 编译一个元素所有 attributes \n\t * @param {function} handler 当前模板函数\n\t * @param {HTMLNode} node 当前 HTML 结点\n\t * @returns {void} 无返回\n\t */\n\t _compileAttributes: function /*istanbul ignore next*/_compileAttributes(handler, node) {\n\t utils.toArray(node.attributes).forEach(function (attribute) {\n\t var attrInfo = this._parseAttrInfo(attribute.name);\n\t var AttrDirective = this.attributeDirectives[attrInfo.name] || this.attributeDirectives['*'];\n\t if (!AttrDirective) return;\n\t var directiveOptions = AttrDirective.options;\n\t handler.directives.push(this._createDirectiveInstance(AttrDirective, {\n\t handler: handler,\n\t node: node,\n\t attribute: attribute,\n\t expression: directiveOptions.literal ? attribute.value : new Expression(attribute.value, directiveOptions.mixed),\n\t decorates: attrInfo.decorates\n\t }));\n\t }, this);\n\t },\n\t\n\t /**\n\t * 编译所有子结点\n\t * @param {function} handler 当前模板函数\n\t * @param {HTMLNode} node 当前 HTML 结点\n\t * @returns {void} 无返回\n\t */\n\t _compileChildren: function /*istanbul ignore next*/_compileChildren(handler, node) {\n\t if (handler.final) return;\n\t utils.toArray(node.childNodes).forEach(function (childNode) {\n\t if (childNode._compiled_) return;\n\t var childHandler = this.compile(childNode);\n\t childHandler.parent = this;\n\t handler.children.push(childHandler);\n\t }, this);\n\t },\n\t\n\t /**\n\t * 编译一个模板\n\t * @param {HTMLNode} node 模板根元素\n\t * @param {Object} options 选项\n\t * @returns {function} 模板函数\n\t */\n\t compile: function /*istanbul ignore next*/compile(node, options) {\n\t if (!node) {\n\t throw new Error('Invalid node for compile');\n\t }\n\t node._compiled_ = true;\n\t options = options || {};\n\t //定义编译结果函数\n\t var handler = function handler(scope) {\n\t if (utils.isNull(scope)) scope = {};\n\t handler.directives.forEach(function (directive) {\n\t directive.scope = scope;\n\t directive.execute(scope);\n\t }, this);\n\t handler.children.forEach(function (childHandler) {\n\t childHandler(scope);\n\t }, this);\n\t };\n\t //--\n\t handler.dispose = function () {\n\t handler.directives.forEach(function (directive) {\n\t directive.unbind();\n\t }, this);\n\t handler.children.forEach(function (childHandler) {\n\t childHandler.dispose();\n\t }, this);\n\t };\n\t handler.node = node;\n\t //定义 children & directives \n\t handler.directives = [];\n\t handler.children = [];\n\t //编译相关指令\n\t if (options.element !== false) this._compileElement(handler, node);\n\t if (options.attribute !== false) this._compileAttributes(handler, node);\n\t this._bindHandler(handler);\n\t if (options.children !== false) this._compileChildren(handler, node);\n\t //返回编译后函数\n\t return handler;\n\t }\n\t\n\t});\n\t\n\tmodule.exports = Compiler;\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Class = __webpack_require__(4);\n\tvar utils = __webpack_require__(3);\n\tvar Expression = __webpack_require__(11);\n\t\n\t/**\n\t * 指令定义工场函数\n\t * @param {Object} classOptions 选项\n\t * @returns {Directive} 指令类\n\t */\n\tfunction Directive(classOptions) {\n\t //处理指令选项\n\t classOptions = classOptions || {};\n\t classOptions.type = classOptions.type || Directive.TA;\n\t classOptions.level = classOptions.level || Directive.LG;\n\t\n\t //生成指令类\n\t var DirectiveClass = new Class({\n\t\n\t $extends: classOptions,\n\t //指令构建函数\n\t constructor: function /*istanbul ignore next*/constructor(instanceOptions) {\n\t utils.copy(instanceOptions, this);\n\t },\n\t //挂载实例上的 options\n\t options: classOptions,\n\t //挂载实例核心方法\n\t bind: classOptions.bind || utils.noop,\n\t execute: classOptions.execute || function (scope) {\n\t this.scope = scope;\n\t if (this.options.type === Directive.TE) {\n\t return this.update();\n\t }\n\t var newValue = this.options.literal ? this.attribute.value : this.expression.execute(scope);\n\t if (!utils.deepEqual(this._value_, newValue)) {\n\t this.update(newValue, this._value_);\n\t this._value_ = newValue;\n\t }\n\t },\n\t update: classOptions.update || utils.noop,\n\t unbind: classOptions.unbind || utils.noop,\n\t //挂载指令常用的类型\n\t utils: utils,\n\t Expression: Expression\n\t });\n\t //向指令类添加「指令定义信息」\n\t DirectiveClass.options = classOptions;\n\t utils.setPrototypeOf(DirectiveClass, classOptions);\n\t return DirectiveClass;\n\t}\n\t\n\t//指令类型\n\tDirective.TA = 'A';\n\tDirective.TE = 'E';\n\t\n\t//指令级别\n\tDirective.LP = 3000; //prevent\n\tDirective.LS = 2000; //statement\n\tDirective.LE = 1000; //eleemtn\n\tDirective.LG = 0; //general\n\tDirective.LA = -1000; //any attribute\n\tDirective.LC = -2000; //cloak\n\t\n\tmodule.exports = Directive;\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Class = __webpack_require__(4);\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * 表达式类型,将字符串构析为可执行表达式实例\n\t */\n\tvar Expression = new Class({\n\t\n\t /**\n\t * 通过字符串构造一个表达式实例\n\t * @param {string} code 代码字符串\n\t * @param {boolean} mix 是否是混合代码\n\t * @returns {void} 无返回\n\t */\n\t constructor: function /*istanbul ignore next*/constructor(code, mix) {\n\t this.func = mix ? this._compileMixedCode(code) : this._compileCode(code);\n\t },\n\t\n\t /**\n\t * 编译普通表达式代码\n\t * @param {string} code 代码字符串\n\t * @returns {function} 编辑后的函数\n\t */\n\t _compileCode: function /*istanbul ignore next*/_compileCode(code) {\n\t code = this._escapeEOL(this._wrapCode(code));\n\t return this._createFunction(code);\n\t },\n\t\n\t /**\n\t * 编辑混合的表达式代码\n\t * @param {string} code 代码字符串\n\t * @returns {function} 编辑后的函数\n\t */\n\t _compileMixedCode: function /*istanbul ignore next*/_compileMixedCode(code) {\n\t var statements = this._parseMixedCode(code);\n\t code = this._escapeEOL(statements.join('+'));\n\t return this._createFunction(code);\n\t },\n\t\n\t /**\n\t * 通过符串代码创建一个可执行函数\n\t * @param {string} code 代码字符串\n\t * @returns {function} 创建的函数\n\t */\n\t _createFunction: function /*istanbul ignore next*/_createFunction(code) {\n\t var func = new Function('utils', 'scope', 'with(scope){return ' + code + '}');\n\t return func.bind(null, utils);\n\t },\n\t\n\t /**\n\t * 解析混合代码字符串\n\t * @param {string} code 混合代码字符串\n\t * @returns {Array} 解析后的「token」列表\n\t */\n\t _parseMixedCode: function /*istanbul ignore next*/_parseMixedCode(code) {\n\t var index = 0,\n\t length = code.length;\n\t var token = '',\n\t isExpr = false,\n\t tokens = [];\n\t while (index <= length) {\n\t var char = code[index++];\n\t var nextChar = code[index];\n\t if (utils.isNull(char)) {\n\t if (token.length > 0) {\n\t tokens.push('\"' + this._escapeCode(token) + '\"');\n\t }\n\t token = '';\n\t isExpr = false;\n\t } else if (!isExpr && char + nextChar == '{{') {\n\t if (token.length > 0) {\n\t tokens.push('\"' + this._escapeCode(token) + '\"');\n\t }\n\t token = '';\n\t isExpr = true;\n\t index++;\n\t } else if (isExpr && char + nextChar == '}}') {\n\t if (token.length > 0) {\n\t tokens.push(this._wrapCode(token));\n\t }\n\t token = '';\n\t isExpr = false;\n\t index++;\n\t } else {\n\t token += char;\n\t }\n\t }\n\t return tokens;\n\t },\n\t\n\t /**\n\t * 转义处理代码字符串\n\t * @param {string} code 源字符串\n\t * @returns {string} 处理后的字符串\n\t */\n\t _escapeCode: function /*istanbul ignore next*/_escapeCode(code) {\n\t return code.replace(/\"/, '\\\\\"').replace('\\r\\n', '\\\\r\\\\n').replace('\\n', '\\\\n');\n\t },\n\t\n\t /**\n\t * 转义换行符\n\t * @param {string} code 源字符串\n\t * @returns {string} 处理后的字符串\n\t */\n\t _escapeEOL: function /*istanbul ignore next*/_escapeEOL(code) {\n\t return code.replace(/\\n/gm, '\\\\\\n');\n\t },\n\t\n\t /**\n\t * 通过闭包和 try/cache 包裹代码\n\t * 将模板中错误的代码直接显示在「模板中用到的位置」,更易于定位错误。\n\t * @param {string} code 源字符串\n\t * @returns {string} 处理后的字符串\n\t */\n\t _wrapCode: function /*istanbul ignore next*/_wrapCode(code) {\n\t return '((function(){try{return (' + code + ')}catch(err){console.error(err);return err;}})())';\n\t },\n\t\n\t /**\n\t * 通过 scope 对象执行表达式\n\t * @param {Object} scope 上下文对象\n\t * @returns {Object} 执行结果\n\t */\n\t execute: function /*istanbul ignore next*/execute(scope) {\n\t if (utils.isNull(scope)) {\n\t scope = {};\n\t }\n\t return this.func.call(scope, scope);\n\t }\n\t\n\t});\n\t\n\tmodule.exports = Expression;\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tmodule.exports = {\n\t '#text': __webpack_require__(13),\n\t 'each': __webpack_require__(14),\n\t 'if': __webpack_require__(16),\n\t 'prop': __webpack_require__(17),\n\t 'attr': __webpack_require__(18),\n\t 'on': __webpack_require__(19),\n\t 'html': __webpack_require__(20),\n\t 'text': __webpack_require__(21),\n\t 'prevent': __webpack_require__(22),\n\t 'id': __webpack_require__(23),\n\t 'cloak': __webpack_require__(24),\n\t 'show': __webpack_require__(25),\n\t 'model': __webpack_require__(26),\n\t '*': __webpack_require__(33) //处理所有未知 attr\n\t};\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\tvar Expression = __webpack_require__(11);\n\t\n\tmodule.exports = new Directive({\n\t type: Directive.TE,\n\t prefix: false,\n\t\n\t /**\n\t * 初始化指令\n\t * @returns {void} 无返回\n\t */\n\t bind: function /*istanbul ignore next*/bind() {\n\t this.expr = new Expression(this.node.nodeValue, true);\n\t this.node.nodeValue = '';\n\t },\n\t\n\t execute: function /*istanbul ignore next*/execute(scope) {\n\t this.scope = scope;\n\t var newValue = this.expr.execute(scope);\n\t if (this.node.nodeValue !== newValue) {\n\t this.node.nodeValue = newValue;\n\t }\n\t }\n\t\n\t});\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\tvar utils = __webpack_require__(3);\n\tvar Scope = __webpack_require__(15);\n\t\n\tmodule.exports = new Directive({\n\t level: Directive.LS + 1, //比 if 要高一个权重\n\t final: true,\n\t literal: true,\n\t\n\t /**\n\t * 初始化指令\n\t * @returns {void} 无返回\n\t */\n\t bind: function /*istanbul ignore next*/bind() {\n\t this.mountNode = document.createTextNode('');\n\t this.node.parentNode.insertBefore(this.mountNode, this.node);\n\t //虽然,bind 完成后,也会进行 attribute 的移除,\n\t //但 each 指令必须先移除,否再进行 item 编译时 each 还会生效\n\t this.node.removeAttribute(this.attribute.name);\n\t this.node.parentNode.removeChild(this.node);\n\t this.parseExpr();\n\t this.eachItems = {};\n\t },\n\t\n\t parseExpr: function /*istanbul ignore next*/parseExpr() {\n\t this.eachType = this.attribute.value.indexOf(' in ') > -1 ? 'in' : 'of';\n\t var tokens = this.attribute.value.split(' ' + this.eachType + ' ');\n\t var fnText = /*istanbul ignore next*/'with(scope){utils.each(' + tokens[1] + ',fn.bind(this,' + tokens[1] + '))}';\n\t this.each = new Function('utils', 'scope', 'fn', fnText).bind(null, this.utils);\n\t var names = tokens[0].split(',').map(function (name) {\n\t return name.trim();\n\t });\n\t if (this.eachType == 'in') {\n\t this.keyName = names[0];\n\t this.valueName = names[1];\n\t } else {\n\t this.keyName = names[1];\n\t this.valueName = names[0];\n\t }\n\t },\n\t\n\t execute: function /*istanbul ignore next*/execute(scope) {\n\t /*istanbul ignore next*/var _this = this;\n\t\n\t var currentEachKeys = [];\n\t var itemsFragment = document.createDocumentFragment();\n\t var self = this;\n\t this.each(scope, function (eachTarget, key) {\n\t //创建新 scope,必须选创建再设置 prototype 或采用定义「属性」的方式\n\t //因为指令参数指定的名称有可能和 scope 原有变量冲突\n\t //将导致针对 watch 变量的赋值,从引用发循环\n\t var newScope = new Scope(this.scope);\n\t if (self.keyName) {\n\t Object.defineProperty(newScope, self.keyName, {\n\t /*istanbul ignore next*/get: function get() {\n\t return key;\n\t }\n\t });\n\t }\n\t //value 采用「属性」进行代理,否则将会使「双向」绑定无把回设值\n\t if (self.valueName) {\n\t Object.defineProperty(newScope, self.valueName, {\n\t /*istanbul ignore next*/get: function get() {\n\t return eachTarget[key];\n\t },\n\t /*istanbul ignore next*/set: function set(value) {\n\t eachTarget[key] = value;\n\t }\n\t });\n\t }\n\t var oldItem = this.eachItems[key];\n\t if (oldItem) {\n\t oldItem.handler(newScope);\n\t } else {\n\t var newItem = {};\n\t //创建新元素\n\t newItem.node = this.node.cloneNode(true);\n\t itemsFragment.appendChild(newItem.node);\n\t newItem.handler = this.compiler.compile(newItem.node);\n\t newItem.handler(newScope);\n\t this.eachItems[key] = newItem;\n\t }\n\t currentEachKeys.push(key);\n\t }.bind(this));\n\t utils.each(this.eachItems, function (key, item) {\n\t if (currentEachKeys.some(function (k) /*istanbul ignore next*/{\n\t return k == key;\n\t })) return;\n\t if (item.node.parentNode) {\n\t item.node.parentNode.removeChild(item.node);\n\t }\n\t delete /*istanbul ignore next*/_this.eachItems[key];\n\t }, this);\n\t if (itemsFragment.childNodes.length > 0) {\n\t this.mountNode.parentNode.insertBefore(itemsFragment, this.mountNode);\n\t }\n\t }\n\t\n\t});\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\t\n\tvar Scope = function Scope(parent, props) {\n\t //新的 scope 因为「继承」了 _observer_ \n\t //所以在新 scope 上进行双向绑定时,将将值成功回写\n\t //如果有天不须用 utils.cteate 继承法,需要注意 _observer_ \n\t //或在新 scope 上 defineProperty 代理 parentScope\n\t var scope = utils.create(parent);\n\t utils.copy(props, scope);\n\t //将 func 绑定到原 scope 上;\n\t utils.each(parent, function (key, value) {\n\t if (!utils.isFunction(value)) return;\n\t scope[key] = value.bind(parent);\n\t });\n\t return scope;\n\t};\n\t\n\tmodule.exports = Scope;\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\t\n\tmodule.exports = new Directive({\n\t level: Directive.LS,\n\t final: true,\n\t\n\t /**\n\t * 初始化指令\n\t * @returns {void} 无返回\n\t */\n\t bind: function /*istanbul ignore next*/bind() {\n\t this.mountNode = document.createTextNode('');\n\t this.node.parentNode.insertBefore(this.mountNode, this.node);\n\t //虽然,bind 完成后,也会进行 attribute 的移除,\n\t //但 if 指令必须先移除,否再进行 item 编译时 if 还会生效\n\t this.node.removeAttribute(this.attribute.name);\n\t this.node.parentNode.removeChild(this.node);\n\t },\n\t\n\t execute: function /*istanbul ignore next*/execute(scope) {\n\t var newValue = this.expression.execute(scope);\n\t if (newValue) {\n\t //如果新计算的结果为 true 才执行 \n\t this._handler = this._handler || this.compiler.compile(this.node);\n\t this._handler(scope);\n\t var node = this.node.$substitute || this.node;\n\t if (!node.parentNode) {\n\t this.mountNode.parentNode.insertBefore(node, this.mountNode);\n\t }\n\t } else {\n\t var _node = this.node.$substitute || this.node;\n\t if (_node.parentNode) _node.parentNode.removeChild(_node);\n\t }\n\t }\n\t\n\t});\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\t\n\tmodule.exports = new Directive({\n\t update: function /*istanbul ignore next*/update(value) {\n\t var target = this.node.$target || this.node;\n\t target[this.decorates[0]] = value;\n\t }\n\t // execute: function (scope) {\n\t // this.scope = scope;\n\t // let newValue = this.expression.execute(scope);\n\t // let target = this.node.$target || this.node;\n\t // target[this.decorates[0]] = newValue;\n\t // }\n\t});\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\t\n\tmodule.exports = new Directive({\n\t update: function /*istanbul ignore next*/update(value) {\n\t var target = this.node.$target || this.node;\n\t if (target.setAttribute) {\n\t target.setAttribute(this.decorates[0], value);\n\t } else {\n\t target[this.decorates[0]] = value;\n\t }\n\t }\n\t});\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\tvar EventEmitter = __webpack_require__(7);\n\tvar Scope = __webpack_require__(15);\n\t\n\tmodule.exports = new Directive({\n\t literal: true,\n\t\n\t /**\n\t * 初始化指令\n\t * @returns {void} 无返回\n\t */\n\t bind: function /*istanbul ignore next*/bind() {\n\t var attrValue = this.attribute.value || '';\n\t if (attrValue.indexOf('(') < 0 && attrValue.indexOf(')') < 0) {\n\t attrValue += '($event)';\n\t }\n\t this.expr = new this.Expression(attrValue);\n\t var eventTarget = this.node.$target || this.node;\n\t this.emiter = new EventEmitter(eventTarget);\n\t this.emiter.addListener(this.decorates[0], function (event) {\n\t if (this.utils.isNull(this.scope)) return;\n\t this.expr.execute(new Scope(this.scope, {\n\t $event: event\n\t }));\n\t }.bind(this), false);\n\t },\n\t\n\t unbind: function /*istanbul ignore next*/unbind() {\n\t this.emiter.removeListener();\n\t },\n\t\n\t execute: function /*istanbul ignore next*/execute(scope) {\n\t this.scope = scope;\n\t }\n\t\n\t});\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\t\n\tmodule.exports = new Directive({\n\t update: function /*istanbul ignore next*/update(newValue) {\n\t this.node.innerHTML = newValue;\n\t }\n\t});\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\t\n\tmodule.exports = new Directive({\n\t update: function /*istanbul ignore next*/update(newValue) {\n\t this.node.innerText = newValue;\n\t }\n\t});\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\t\n\tmodule.exports = new Directive({\n\t level: Directive.LP,\n\t final: true\n\t});\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\t\n\tmodule.exports = new Directive({\n\t literal: true,\n\t\n\t update: function /*istanbul ignore next*/update(id) {\n\t if (id in this.scope) {\n\t throw new Error('Conflicting component id `' + id + '`');\n\t }\n\t this.scope[id] = this.node.$target || this.node;\n\t }\n\t\n\t});\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\t\n\tmodule.exports = new Directive({\n\t level: Directive.LC,\n\t literal: true,\n\t prefix: false,\n\t\n\t bind: function /*istanbul ignore next*/bind() {\n\t this.node.removeAttribute(this.attribute.name);\n\t }\n\t\n\t});\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\t\n\tmodule.exports = new Directive({\n\t update: function /*istanbul ignore next*/update(value) {\n\t this.node.style.display = value ? '' : 'none';\n\t }\n\t});\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar SelectDirective = __webpack_require__(27);\n\tvar EditableDirective = __webpack_require__(28);\n\tvar InputDirective = __webpack_require__(29);\n\tvar RadioDirective = __webpack_require__(30);\n\tvar CheckboxDirective = __webpack_require__(31);\n\tvar PropDirective = __webpack_require__(32);\n\t\n\tvar Directive = function Directive(options) {\n\t var node = options.node;\n\t var tagName = node.tagName;\n\t if (options.decorates[0]) {\n\t return new PropDirective(options);\n\t } else if (tagName == 'INPUT') {\n\t var type = node.getAttribute('type');\n\t if (type == 'radio') {\n\t return new RadioDirective(options);\n\t } else if (type == 'checkbox') {\n\t return new CheckboxDirective(options);\n\t } else {\n\t return new InputDirective(options);\n\t }\n\t } else if (tagName == 'TEXTAREA') {\n\t return new InputDirective(options);\n\t } else if (tagName == 'SELECT') {\n\t return new SelectDirective(options);\n\t } else if (node.isContentEditable) {\n\t return new EditableDirective(options);\n\t } else {\n\t throw new Error( /*istanbul ignore next*/'Directive `model` cannot be used on `' + tagName + '`');\n\t }\n\t};\n\t\n\t//手动添加 classOptions\n\tDirective.options = {\n\t level: Directive.LA\n\t};\n\t\n\tmodule.exports = Directive;\n\n/***/ },\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\tvar EventEmitter = __webpack_require__(7);\n\tvar Scope = __webpack_require__(15);\n\t\n\tmodule.exports = new Directive({\n\t final: true,\n\t\n\t /**\n\t * 初始化指令\n\t * @returns {void} 无返回\n\t */\n\t bind: function /*istanbul ignore next*/bind() {\n\t this.backExpr = new this.Expression( /*istanbul ignore next*/this.attribute.value + '=_value_');\n\t this.node.removeAttribute(this.attribute.name);\n\t this._handler = this.compiler.compile(this.node);\n\t this.emiter = new EventEmitter(this.node);\n\t this.emiter.addListener('change', function () {\n\t if (this.utils.isNull(this.scope)) return;\n\t var selectedOptions = this.node.selectedOptions;\n\t var value = this.node.multiple ? [].slice.call(selectedOptions).map(function (option) {\n\t return option.value;\n\t }, this) : selectedOptions[0].value;\n\t this.backExpr.execute(new Scope(this.scope, {\n\t _value_: value\n\t }));\n\t }.bind(this), false);\n\t },\n\t\n\t unbind: function /*istanbul ignore next*/unbind() {\n\t this.emiter.removeListener();\n\t },\n\t\n\t execute: function /*istanbul ignore next*/execute(scope) {\n\t this.scope = scope;\n\t this._handler(scope);\n\t var value = this.expression.execute(scope);\n\t if (!this.utils.isArray(value)) value = [value];\n\t [].slice.call(this.node.options).forEach(function (option) {\n\t option.selected = value.indexOf(option.value) > -1;\n\t }, this);\n\t }\n\t\n\t});\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\tvar EventEmitter = __webpack_require__(7);\n\tvar Scope = __webpack_require__(15);\n\t\n\tmodule.exports = new Directive({\n\t\n\t /**\n\t * 初始化指令\n\t * @returns {void} 无返回\n\t */\n\t bind: function /*istanbul ignore next*/bind() {\n\t this.backExpr = new this.Expression( /*istanbul ignore next*/this.attribute.value + '=_value_');\n\t this.emiter = new EventEmitter(this.node);\n\t this.emiter.addListener('input', function () {\n\t if (this.utils.isNull(this.scope)) return;\n\t this.backExpr.execute(new Scope(this.scope, {\n\t _value_: this.node.innerHTML\n\t }));\n\t }.bind(this), false);\n\t },\n\t\n\t unbind: function /*istanbul ignore next*/unbind() {\n\t this.emiter.removeListener();\n\t },\n\t\n\t execute: function /*istanbul ignore next*/execute(scope) {\n\t var value = this.expression.execute(scope);\n\t if (this.node.innerHTML !== value) {\n\t this.node.innerHTML = value;\n\t }\n\t }\n\t\n\t});\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\tvar EventEmitter = __webpack_require__(7);\n\tvar Scope = __webpack_require__(15);\n\t\n\tmodule.exports = new Directive({\n\t\n\t /**\n\t * 初始化指令\n\t * @returns {void} 无返回\n\t */\n\t bind: function /*istanbul ignore next*/bind() {\n\t this.backExpr = new this.Expression( /*istanbul ignore next*/this.attribute.value + '=_value_');\n\t this.emiter = new EventEmitter(this.node);\n\t this.emiter.addListener('input', function () {\n\t if (this.utils.isNull(this.scope)) return;\n\t this.backExpr.execute(new Scope(this.scope, {\n\t _value_: this.node.value\n\t }));\n\t }.bind(this), false);\n\t },\n\t\n\t unbind: function /*istanbul ignore next*/unbind() {\n\t this.emiter.removeListener();\n\t },\n\t\n\t execute: function /*istanbul ignore next*/execute(scope) {\n\t var value = this.expression.execute(scope);\n\t if (this.node.value !== value) {\n\t this.node.value = value;\n\t }\n\t }\n\t\n\t});\n\n/***/ },\n/* 30 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\tvar EventEmitter = __webpack_require__(7);\n\tvar Scope = __webpack_require__(15);\n\t\n\tmodule.exports = new Directive({\n\t /**\n\t * 初始化指令\n\t * @returns {void} 无返回\n\t */\n\t bind: function /*istanbul ignore next*/bind() {\n\t this.backExpr = new this.Expression( /*istanbul ignore next*/this.attribute.value + '=_value_');\n\t this.emiter = new EventEmitter(this.node);\n\t this.emiter.addListener('change', function () {\n\t if (this.utils.isNull(this.scope)) return;\n\t this.backExpr.execute(new Scope(this.scope, {\n\t _value_: this.node.value\n\t }));\n\t }.bind(this), false);\n\t },\n\t\n\t unbind: function /*istanbul ignore next*/unbind() {\n\t this.emiter.removeListener();\n\t },\n\t\n\t execute: function /*istanbul ignore next*/execute(scope) {\n\t this.scope = scope;\n\t var value = this.expression.execute(scope);\n\t this.node.checked = value == this.node.value;\n\t }\n\t\n\t});\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\tvar EventEmitter = __webpack_require__(7);\n\tvar Scope = __webpack_require__(15);\n\t\n\tmodule.exports = new Directive({\n\t\n\t /**\n\t * 初始化指令\n\t * @returns {void} 无返回\n\t */\n\t bind: function /*istanbul ignore next*/bind() {\n\t this.backExpr = new this.Expression( /*istanbul ignore next*/this.attribute.value + '=_value_');\n\t this.emiter = new EventEmitter(this.node);\n\t this.emiter.addListener('change', function () {\n\t if (this.utils.isNull(this.scope)) return;\n\t var value = this.expression.execute(this.scope);\n\t if (this.utils.isArray(value) && this.node.checked) {\n\t value.push(this.node.value);\n\t } else if (this.utils.isArray(value) && !this.node.checked) {\n\t var index = value.indexOf(this.node.value);\n\t value.splice(index, 1);\n\t } else {\n\t this.backExpr.execute(new Scope(this.scope, {\n\t _value_: this.node.checked\n\t }));\n\t }\n\t }.bind(this), false);\n\t },\n\t\n\t unbind: function /*istanbul ignore next*/unbind() {\n\t this.emiter.removeListener();\n\t },\n\t\n\t execute: function /*istanbul ignore next*/execute(scope) {\n\t this.scope = scope;\n\t var value = this.expression.execute(scope);\n\t if (this.utils.isArray(value)) {\n\t this.node.checked = value.indexOf(this.node.value) > -1;\n\t } else {\n\t this.node.checked = value;\n\t }\n\t }\n\t\n\t});\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\tvar Scope = __webpack_require__(15);\n\t\n\tmodule.exports = new Directive({\n\t\n\t /**\n\t * 初始化指令\n\t * @returns {void} 无返回\n\t */\n\t bind: function /*istanbul ignore next*/bind() {\n\t /*istanbul ignore next*/var _this = this;\n\t\n\t this.target = this.node.$target;\n\t this.backExpr = new this.Expression( /*istanbul ignore next*/this.attribute.value + '=_value_');\n\t this.bindProp = this.decorates[0];\n\t if (!this.target) {\n\t throw new Error( /*istanbul ignore next*/'Directive `model:' + this.bindProp + '` cannot be used on `' + this.node.tagName + '`');\n\t }\n\t this.watcher = this.target.$watch(this.bindProp, function (value) {\n\t if ( /*istanbul ignore next*/_this.utils.isNull( /*istanbul ignore next*/_this.scope)) return;\n\t /*istanbul ignore next*/_this.backExpr.execute(new Scope( /*istanbul ignore next*/_this.scope, {\n\t _value_: value\n\t }));\n\t });\n\t },\n\t\n\t unbind: function /*istanbul ignore next*/unbind() {\n\t this.target.$unWatch(this.watcher);\n\t },\n\t\n\t update: function /*istanbul ignore next*/update(value) {\n\t this.target[this.bindProp] = value;\n\t }\n\t\n\t});\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Directive = __webpack_require__(10);\n\t\n\t/**\n\t * 通用的 attribute 指令\n\t * 用于所有 attribute 的处理\n\t * 例如:\n\t * <div attr1=\"{{expr1}}\" {{expr2}} {{attr3}}=\"{{expr3}}\">\n\t * </div>\n\t */\n\tmodule.exports = new Directive({\n\t level: Directive.LA,\n\t prefix: false,\n\t literal: true,\n\t remove: false,\n\t\n\t /**\n\t * 初始化指令\n\t * @returns {void} 无返回\n\t */\n\t bind: function /*istanbul ignore next*/bind() {\n\t this.computedName = this.attribute.name;\n\t this.computedValue = this.attribute.value;\n\t this.nameExpr = new this.Expression(this.attribute.name, true);\n\t this.valueExpr = new this.Expression(this.attribute.value, true);\n\t },\n\t\n\t execute: function /*istanbul ignore next*/execute(scope) {\n\t var target = this.node.$target || this.node;\n\t var newComputedName = this.nameExpr.execute(scope);\n\t if (this.computedName !== newComputedName) {\n\t //移除旧名称\n\t if (target.removeAttribute) {\n\t target.removeAttribute(this.computedName);\n\t }\n\t //设置新名称\n\t this.computedName = newComputedName;\n\t if (!this.utils.isNull(this.computedName) && this.computedName.length > 0) {\n\t if (target.setAttribute) {\n\t target.setAttribute(this.computedName, this.computedValue || '');\n\t }\n\t }\n\t }\n\t var newComputeValue = this.valueExpr.execute(scope);\n\t if (this.computedValue !== newComputeValue) {\n\t this.computedValue = newComputeValue;\n\t if (target.setAttribute) {\n\t target.setAttribute(this.computedName, this.computedValue || '');\n\t } else {\n\t target[this.computedName] = this.computedValue;\n\t }\n\t }\n\t }\n\t\n\t});\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Class = __webpack_require__(4);\n\tvar Observer = __webpack_require__(6);\n\tvar EventEmitter = __webpack_require__(7);\n\tvar Compiler = __webpack_require__(9);\n\t\n\t/**\n\t * 模板类\n\t * 可能通过 element 作为参数,创建一个模板实例\n\t */\n\tvar Template = new Class({\n\t\n\t $extends: EventEmitter,\n\t\n\t /**\n\t * 构建一个模板板实例\n\t * @param {HTMLNode} element HTML 元素\n\t * @param {Object} options 选项\n\t * @returns {void} 无返回\n\t */\n\t constructor: function /*istanbul ignore next*/constructor(element, options) {\n\t options = options || {};\n\t EventEmitter.call(this);\n\t this.options = options;\n\t this.element = element;\n\t this.compiler = options.compiler || new Compiler(options);\n\t this.render = this.compiler.compile(this.element);\n\t this.update = this.update.bind(this);\n\t this._update = this._update.bind(this);\n\t this._updateTimer = 0;\n\t },\n\t\n\t /**\n\t * 更新当前模板 (会过滤不必要的更新)\n\t * @returns {void} 无返回\n\t */\n\t update: function /*istanbul ignore next*/update() {\n\t if (this._updateTimer) {\n\t clearTimeout(this._updateTimer);\n\t this._updateTimer = null;\n\t }\n\t this._updateTimer = setTimeout(this._update, 0);\n\t },\n\t\n\t /**\n\t * 更新当前模板内部方法 \n\t * @returns {void} 无返回\n\t */\n\t _update: function /*istanbul ignore next*/_update() {\n\t if (!this._updateTimer || !this.observer) return;\n\t this.emit('update', this);\n\t this.render(this.observer.target);\n\t this._onBind();\n\t },\n\t\n\t /**\n\t * 在绑定成功时\n\t * @returns {void} 无返回\n\t */\n\t _onBind: function /*istanbul ignore next*/_onBind() {\n\t if (this._bound) return;\n\t this._bound = true;\n\t this.emit('bind', this);\n\t },\n\t\n\t /**\n\t * 将模板绑定到一个 scope\n\t * @param {Object} scope 绑定的上下文对象\n\t * @param {boolean} disableFirst 是否禁用第一次的自动渲染\n\t * @returns {void} 无返回\n\t */\n\t bind: function /*istanbul ignore next*/bind(scope, disableFirst) {\n\t if (!scope) return;\n\t this.unbind();\n\t this.observer = new Observer(scope, {\n\t root: this.options.root\n\t });\n\t scope.$self = scope;\n\t this.observer.on('change', this.update);\n\t if (disableFirst) {\n\t this._onBind();\n\t } else {\n\t this.update();\n\t }\n\t },\n\t\n\t /**\n\t * 解绑定\n\t * @returns {void} 无返回\n\t */\n\t unbind: function /*istanbul ignore next*/unbind() {\n\t if (!this.observer) return;\n\t this.observer.removeListener('change', this.update);\n\t this.observer.clearReference();\n\t this.observer = null;\n\t },\n\t\n\t /**\n\t * 释放\n\t * @returns {void} 无返回\n\t */\n\t dispose: function /*istanbul ignore next*/dispose() {\n\t this.unbind();\n\t this.render.dispose();\n\t }\n\t\n\t});\n\t\n\tmodule.exports = Template;\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Component = __webpack_require__(36);\n\tvar components = __webpack_require__(38);\n\tvar directives = __webpack_require__(8).directives;\n\t\n\tComponent.components = components;\n\tComponent.Component = Component;\n\t\n\tComponent.component = function (name, component) {\n\t if (!component) return components[name];\n\t components[name] = component;\n\t};\n\t\n\tComponent.directive = function (name, directive) {\n\t if (!directive) return directives[name];\n\t directives[name] = directive;\n\t};\n\t\n\tmodule.exports = Component;\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Class = __webpack_require__(4);\n\tvar Template = __webpack_require__(8);\n\tvar Watcher = __webpack_require__(5);\n\tvar utils = __webpack_require__(3);\n\tvar EventEmitter = __webpack_require__(7);\n\tvar Observer = __webpack_require__(6);\n\tvar ComponentDirective = __webpack_require__(37);\n\t\n\t/**\n\t * 组件类\n\t * 用于定义一个新的组件\n\t * @param {Object} classOpts 类选项\n\t * @returns {Component} 组件类\n\t */\n\tfunction Component(classOpts) {\n\t\n\t //处理组件选项\n\t classOpts = classOpts || {};\n\t\n\t //处理「继承」,目前的机制,只能用「合并类选项」\n\t var mixes = classOpts.mixes;\n\t delete classOpts.mixes;\n\t if (mixes && !utils.isArray(mixes)) {\n\t mixes = [mixes];\n\t } else {\n\t mixes = [];\n\t }\n\t var extendComponent = classOpts.extend || Component;\n\t delete classOpts.extend;\n\t //extend 会覆盖 mixes 中的同名成员\n\t mixes.push(extendComponent);\n\t //classOpts 会覆盖 extend 或 mixes 中的同名成员\n\t mixes.push(classOpts);\n\t var mixedClassOpts = {};\n\t mixes.forEach(function (mixItem) {\n\t if (mixItem instanceof Component || mixItem == Component) {\n\t mixItem = mixItem.$options || {};\n\t }\n\t utils.mix(mixedClassOpts, mixItem);\n\t });\n\t classOpts = mixedClassOpts;\n\t\n\t /**\n\t * 定义组件类\n\t * 可以通过 new ComponentClass() 创建组件实例\n\t */\n\t var ComponentClass = new Class({\n\t $extends: extendComponent,\n\t\n\t /**\n\t * 组件类构造函数\n\t * @param {object} instanceOpts 实例选项\n\t * @returns {void} 无返回\n\t */\n\t constructor: function /*istanbul ignore next*/constructor(instanceOpts) {\n\t /*istanbul ignore next*/var _this = this;\n\t\n\t if (this == window) return new this.$class(instanceOpts);\n\t EventEmitter.call(this);\n\t instanceOpts = instanceOpts || {};\n\t //创建组件实例时可以给实例添加成员\n\t utils.each(instanceOpts, function (key, value) {\n\t if (key in /*istanbul ignore next*/_this) return;\n\t /*istanbul ignore next*/_this[key] = value;\n\t });\n\t this._onTemplateUpdate_ = this._onTemplateUpdate_.bind(this);\n\t this._createdData_(classOpts.data);\n\t this._createProperties_(classOpts.properties || classOpts.props);\n\t this._createWatches_(classOpts.watches || classOpts.watch);\n\t this.$directives = this.$directives || {};\n\t this._importDirectives_(classOpts.directives);\n\t this.$components = this.$components || {};\n\t this._importComponents_(__webpack_require__(38));\n\t this._importComponents_({\n\t 'self': ComponentClass\n\t });\n\t this._importComponents_(classOpts.components);\n\t utils.defineFreezeProp(this, '$children', []);\n\t if (instanceOpts.parent) this.$setParent(instanceOpts.parent);\n\t this.$callHook('onInit', [instanceOpts]);\n\t Observer.observe(this);\n\t if (classOpts.element) {\n\t this.$mount();\n\t } else {\n\t this.$compile();\n\t }\n\t },\n\t\n\t /**\n\t * 设定父组件\n\t * @param {Object} parent 父组件\n\t * @returns {void} 无返回\n\t */\n\t $setParent: function /*istanbul ignore next*/$setParent(parent) {\n\t if (this.$parent === parent) return;\n\t if (this.$parent) {\n\t this.$parent.$removeChild(this);\n\t }\n\t if (parent) {\n\t parent.$addChild(this);\n\t }\n\t },\n\t\n\t /**\n\t * 添加子组件\n\t * @param {Object} child 子组件\n\t * @returns {void} 无返回\n\t */\n\t $addChild: function /*istanbul ignore next*/$addChild(child) {\n\t if (!(child instanceof Component)) return;\n\t this.$children.push(child);\n\t utils.defineFreezeProp(child, '$parent', this);\n\t utils.defineFreezeProp(child, '$root', this.$root || this);\n\t },\n\t\n\t /**\n\t * 移除子组件\n\t * @param {Object} child 子组件\n\t * @returns {void} 无返回\n\t */\n\t $removeChild: function /*istanbul ignore next*/$removeChild(child) {\n\t var index = this.$children.indexOf(child);\n\t this.$children.splice(index, 1);\n\t utils.defineFreezeProp(child, '$parent', null);\n\t //utils.defineFreezeProp(child, '$root', null);\n\t },\n\t\n\t /**\n\t * 获取根组件, 为了能通过 polyfill 处理 IE8 暂不用这种方式\n\t */\n\t get $root() {\n\t if (this.$parent) {\n\t return this.$parent.$root;\n\t } else {\n\t return this;\n\t }\n\t },\n\t\n\t /**\n\t * 导入用到的子组件类\n\t * @param {Object} components 引入的组件\n\t * @returns {void} 无返回\n\t */\n\t _importComponents_: function /*istanbul ignore next*/_importComponents_(components) {\n\t utils.each(components, function (name, component) {\n\t if (!component) return;\n\t this.$components[name] = component;\n\t this.$directives[name] = new ComponentDirective({\n\t name: name,\n\t component: component,\n\t parent: this\n\t });\n\t }, this);\n\t },\n\t\n\t /**\n\t * 导入一个用到的指令\n\t * @param {Object} directives 引入的指令\n\t * @returns {void} 无返回\n\t */\n\t _importDirectives_: function /*istanbul ignore next*/_importDirectives_(directives) {\n\t utils.each(directives, function (name, directive) {\n\t if (!directive) return;\n\t this.$directives[name] = directive;\n\t }, this);\n\t },\n\t\n\t /**\n\t * 调用生命周期 hook\n\t * @param {string} name 调用的 hook 名称\n\t * @param {Array} args 调用 hook 的参数列表\n\t * @returns {void} 无反回\n\t */\n\t $callHook: function /*istanbul ignore next*/$callHook(name, args) {\n\t if (!utils.isFunction(this[name])) return;\n\t this[name].apply(this, args || []);\n\t },\n\t\n\t /**\n\t * 创建数据对象\n\t * @param {Object} data 组件数据对象\n\t * @returns {void} 无返回\n\t */\n\t _createdData_: function /*istanbul ignore next*/_createdData_(data) {\n\t if (utils.isFunction(data)) {\n\t this.$data = data.call(this);\n\t } else {\n\t this.$data = data || {};\n\t }\n\t utils.each(this.$data, function (name) {\n\t Object.defineProperty(this, name, {\n\t configurable: true,\n\t enumerable: true,\n\t get: function /*istanbul ignore next*/get() {\n\t if (!this.$data) return;\n\t return this.$data[name];\n\t },\n\t set: function /*istanbul ignore next*/set(value) {\n\t if (!this.$data) return;\n\t this.$data[name] = value;\n\t }\n\t });\n\t }, this);\n\t },\n\t\n\t /**\n\t * 创建组件属性\n\t * @param {Object} properties 属性定义对象\n\t * @returns {void} 无返回\n\t */\n\t _createProperties_: function /*istanbul ignore next*/_createProperties_(properties) {\n\t this.$properties = {};\n\t utils.each(properties, function (name, descriptor) {\n\t if (utils.isFunction(descriptor)) {\n\t descriptor = {\n\t get: descriptor\n\t };\n\t } else if (!utils.isObject(descriptor)) {\n\t descriptor = {\n\t value: descriptor\n\t };\n\t } else {\n\t //不能直接用 descriptor,\n\t //因为为会导到多个组件实例间的影响\n\t descriptor = utils.copy(descriptor);\n\t }\n\t var hasGetterOrSetter = !!descriptor.get || !!descriptor.set;\n\t if (!hasGetterOrSetter) {\n\t descriptor.value = descriptor.value || null;\n\t descriptor.get = function () {\n\t return descriptor.value;\n\t };\n\t descriptor.set = function (value) {\n\t descriptor.value = value;\n\t };\n\t }\n\t Object.defineProperty(this, name, {\n\t configurable: true,\n\t enumerable: true,\n\t get: function /*istanbul ignore next*/get() {\n\t if (!descriptor.get) {\n\t throw new Error('Property `' + name + '` cannot be read');\n\t }\n\t return descriptor.get.call(this);\n\t },\n\t set: function /*istanbul ignore next*/set(value) {\n\t if (!descriptor.set) {\n\t throw new Error('Property `' + name + '` cannot be written');\n\t }\n\t if (descriptor.test && !descriptor.test(value)) {\n\t throw new Error('Invalid value `' + value + '` for property `' + name + '`');\n\t }\n\t descriptor.set.call(this, value);\n\t if (this._observer_) {\n\t this._observer_.emitChange({\n\t path: name,\n\t value: value\n\t });\n\t }\n\t }\n\t });\n\t this.$properties[name] = descriptor;\n\t }, this);\n\t },\n\t\n\t /**\n\t * 创建监控\n\t * 为什么用 watches 而不是 watchers 或其它?\n\t * 因为,这里仅是「监控配置」并且是「复数」\n\t * @param {Object} watches 监控定义对象\n\t * @returns {void} 无返回\n\t */\n\t _createWatches_: function /*istanbul ignore next*/_createWatches_(watches) {\n\t this._watchers_ = this._watchers_ || [];\n\t utils.each(watches, function (name, handler) {\n\t this.$watch(name, handler);\n\t }, this);\n\t },\n\t\n\t /**\n\t * 在模板发生更新时\n\t * @returns {void} 无返回\n\t */\n\t _onTemplateUpdate_: function /*istanbul ignore next*/_onTemplateUpdate_() {\n\t this._watchers_.forEach(function (watcher) {\n\t watcher.calc();\n\t }, this);\n\t },\n\t\n\t /**\n\t * 添加一个监控\n\t * @param {string|function} path 计算函数或路径\n\t * @param {function} handler 处理函数\n\t * @returns {void} 无返回\n\t */\n\t $watch: function /*istanbul ignore next*/$watch(path, handler) {\n\t if (!utils.isFunction(handler)) return;\n\t var calcer = path;\n\t if (!utils.isFunction(path)) {\n\t calcer = function /*istanbul ignore next*/calcer() {\n\t return utils.getByPath(this, path);\n\t };\n\t }\n\t var watcher = new Watcher(calcer.bind(this), handler.bind(this));\n\t this._watchers_.push(watcher);\n\t return watcher;\n\t },\n\t\n\t /**\n\t * 取消一个 watcher 对象\n\t * @param {object} watcher 监控对象实例\n\t * @returns {void} 无返回\n\t */\n\t $unWatch: function /*istanbul ignore next*/$unWatch(watcher) {\n\t var index = this._watchers_.findIndex(function (w) /*istanbul ignore next*/{\n\t return w === watcher;\n\t });\n\t this._watchers_.splice(index, 1);\n\t },\n\t\n\t /**\n\t * 创建元素\n\t * @returns {void} 无返回\n\t */\n\t _createElement_: function /*istanbul ignore next*/_createElement_() {\n\t if (this._created_) return;\n\t this._created_ = true;\n\t this.$callHook('onCreate');\n\t utils.defineFreezeProp(this, '$element', this.element || ComponentClass.$template.cloneNode(true));\n\t if (!this.$element || this.$element.nodeName === '#text') {\n\t throw new Error('Invalid component template');\n\t }\n\t this.$callHook('onCreated');\n\t },\n\t\n\t /**\n\t * 编译自身模板并完成绑定\n\t * @returns {void} 无返回\n\t */\n\t $compile: function /*istanbul ignore next*/$compile() {\n\t if (this._compiled_) return;\n\t this._compiled_ = true;\n\t this._createElement_();\n\t utils.defineFreezeProp(this, '_template_', new Template(this.$element, {\n\t directives: this.$directives,\n\t root: true\n\t }));\n\t this._template_.bind(this);\n\t this._template_.on('update', this._onTemplateUpdate_);\n\t this._template_.on('bind', function () {\n\t if (!this.deferReady) this.$callHook('onReady');\n\t }.bind(this));\n\t },\n\t\n\t /**\n\t * 向 DOM tree 中挂截组件\n\t * @param {HTMLNode} mountNode 挂载点元素\n\t * @param {append} append 是否 append 到挂载元素内\n\t * @returns {void} 无返回 \n\t */\n\t $mount: function /*istanbul ignore next*/$mount(mountNode, append) {\n\t if (this._mounted_) return;\n\t this.$compile();\n\t this.$callHook('onMount');\n\t if (mountNode) {\n\t mountNode.$substitute = this.$element;\n\t this.$element._mountNode = mountNode;\n\t if (append) {\n\t mountNode.appendChild(this.$element);\n\t } else if (mountNode.parentNode) {\n\t mountNode.parentNode.insertBefore(this.$element, mountNode);\n\t }\n\t }\n\t this._mounted_ = true;\n\t this._removed_ = false;\n\t this.$callHook('onMounted');\n\t },\n\t\n\t /**\n\t * 将组件添加到指定容器元素内\n\t * @param {HTMLNode} node 容器元素\n\t * @returns {void} 无返回 \n\t */\n\t $appendTo: function /*istanbul ignore next*/$appendTo(node) {\n\t this.$mount(node, true);\n\t },\n\t\n\t /**\n\t * 移除组件\n\t * @returns {void} 无返回\n\t */\n\t $remove: function /*istanbul ignore next*/$remove() {\n\t if (this._removed_ || !this._mounted_) return;\n\t this.$callHook('onRemove');\n\t if (this.$element.parentNode) {\n\t this.$element.parentNode.removeChild(this.$element);\n\t }\n\t this._removed_ = true;\n\t this._mounted_ = false;\n\t this.$callHook('onRemoved');\n\t },\n\t\n\t /**\n\t * 触发自身的一个事件并向上冒泡\n\t * @param {string} name 事件名称\n\t * @param {object} data 传递的对象\n\t * @returns {void} 无返回\n\t */\n\t $dispatch: function /*istanbul ignore next*/$dispatch(name, data) {\n\t var stopPropagation = this.$emit(name, data);\n\t if (!stopPropagation && this.$parent) {\n\t this.$parent.$dispatch(name, data);\n\t }\n\t },\n\t\n\t /**\n\t * 触发自身的一个事件并向下广播\n\t * @param {string} name 事件名称\n\t * @param {object} data 传递的对象\n\t * @returns {void} 无返回\n\t */\n\t $broadcast: function /*istanbul ignore next*/$broadcast(name, data) {\n\t var stopPropagation = this.$emit(name, data);\n\t if (!stopPropagation && this.$children && this.$children.length > 0) {\n\t this.$children.forEach(function (child) {\n\t child.$broadcast(name, data);\n\t }, this);\n\t }\n\t },\n\t\n\t /**\n\t * 释放组件\n\t * @returns {void} 无返回\n\t */\n\t $dispose: function /*istanbul ignore next*/$dispose() {\n\t this.$remove();\n\t this._emitter_.off();\n\t this.$children.forEach(function (child) {\n\t child.$dispose();\n\t }, this);\n\t if (this.$parent) {\n\t var index = this.$parent.$children.indexOf(this);\n\t this.$parent.$children.splice(index, 1);\n\t }\n\t this.$callHook('onDispose');\n\t if (this._compiled_) {\n\t this._template_.unbind();\n\t }\n\t this.$callHook('onDisposed');\n\t for (var key in this) {\n\t delete this[key];\n\t }\n\t ['_observer_', '$element', '$children', '$parent', '_template_'].forEach(function (key) {\n\t delete this[key];\n\t }, this);\n\t utils.setPrototypeOf(this, null);\n\t }\n\t\n\t });\n\t\n\t //保存类选项\n\t ComponentClass.$options = classOpts;\n\t ComponentClass.$template = utils.parseDom(classOpts.template);\n\t\n\t //向 ComponentClass.prototype 上拷贝成员\n\t utils.copy(classOpts, ComponentClass.prototype);\n\t utils.copy(classOpts.methods, ComponentClass.prototype);\n\t\n\t //使 ComponentClass instanceof Component === true \n\t //IE9/10 下为 false,并且动态为 Component.prototype 添加的成员不会在 ComponentClass 上生效\n\t utils.setPrototypeOf(ComponentClass, Component.prototype);\n\t\n\t return ComponentClass;\n\t}\n\t\n\t//继承自 EventEmitter\n\tComponent.prototype = utils.create(EventEmitter.prototype);\n\t\n\t//组件扩展方法,简单封装 extends\n\tComponent.extend = function (classOpts) {\n\t return new Component(classOpts);\n\t};\n\t\n\t//定义扩展方法\n\tComponent.prototype.extend = function (classOpts) {\n\t classOpts = classOpts || {};\n\t classOpts.extend = this;\n\t return new Component(classOpts);\n\t};\n\t\n\t//创建实例的方法\n\tComponent.prototype.create = function (instanceOpts) {\n\t return new this(instanceOpts);\n\t};\n\t\n\t//针对包括 element 组件类的启动方法\n\tComponent.prototype.start = function (instanceOpts) {\n\t if (!this.$options || !this.$options.element) {\n\t throw new Error('Start method cannot be called');\n\t }\n\t return this.create(instanceOpts);\n\t};\n\t\n\tmodule.exports = Component;\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Template = __webpack_require__(8);\n\tvar Directive = Template.Directive;\n\t\n\t/**\n\t * 创建一个组件指令\n\t * @param {object} options 选项\n\t * @returns {object} 组件指令\n\t */\n\tfunction ComponentDirective(options) {\n\t\n\t return new Directive({\n\t type: Directive.TE,\n\t literal: true,\n\t final: true,\n\t level: Directive.LE,\n\t\n\t bind: function /*istanbul ignore next*/bind() {\n\t this.component = new options.component({\n\t deferReady: true,\n\t parent: options.parent || this.scope\n\t });\n\t this.handleAttrs();\n\t this.node.$target = this.component;\n\t this.handler = this.compiler.compile(this.node, {\n\t element: false,\n\t children: false\n\t });\n\t this.handleContents();\n\t this.component.$mount(this.node);\n\t if (this.node.parentNode) {\n\t this.node.parentNode.removeChild(this.node);\n\t }\n\t },\n\t\n\t handleAttrs: function /*istanbul ignore next*/handleAttrs() {\n\t this.attrs = [].slice.call(this.node.attributes);\n\t var directiveRegexp = new RegExp('^' + this.prefix + ':', 'i');\n\t this.attrs.forEach(function (attr) {\n\t if (directiveRegexp.test(attr.name)) return;\n\t if (attr.name in this.component.$properties) return;\n\t this.component.$element.setAttribute(attr.name, attr.value);\n\t this.node.removeAttribute(attr.name);\n\t }, this);\n\t },\n\t\n\t handleContents: function /*istanbul ignore next*/handleContents() {\n\t this.placeHandlers = [];\n\t var places = [].slice.call(this.component.$element.querySelectorAll('[' + this.prefix + '\\\\:content]'));\n\t places.forEach(function (place) {\n\t //将内容插入到指定的「位置」\n\t var contents = null;\n\t var selector = place.getAttribute(this.prefix + ':content');\n\t if (!selector) {\n\t contents = [].slice.call(this.node.childNodes);\n\t } else {\n\t contents = [].slice.call(this.node.querySelectorAll(selector));\n\t }\n\t if (!contents || contents.length < 1) return;\n\t place.innerHTML = '';\n\t contents.forEach(function (content) {\n\t place.appendChild(content.cloneNode(true));\n\t }, this);\n\t //编译插入后的子「内容模板」\n\t var handler = this.compiler.compile(place);\n\t this.placeHandlers.push(handler);\n\t }, this);\n\t },\n\t\n\t execute: function /*istanbul ignore next*/execute(scope) {\n\t this.handler(scope);\n\t if (!this._ready_) {\n\t this._ready_ = true;\n\t this.component.$callHook('onReady');\n\t }\n\t this.placeHandlers.forEach(function (handler) {\n\t handler(scope);\n\t }, this);\n\t }\n\t\n\t });\n\t}\n\t\n\tmodule.exports = ComponentDirective;\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tmodule.exports = {\n\t View: __webpack_require__(39)\n\t};\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Component = __webpack_require__(36);\n\tvar utils = __webpack_require__(3);\n\t\n\t/**\n\t * 内置视图组件\n\t * 可以加载并显示其它组件,并可以指定「转场效果」\n\t */\n\tvar View = new Component({\n\t\n\t template: '<div></div>',\n\t\n\t properties: {\n\t\n\t /**\n\t * 显示到视图中的组件\n\t */\n\t component: {\n\t test: function /*istanbul ignore next*/test(value) {\n\t if (!value) return false;\n\t return value instanceof Component || utils.isString(value);\n\t },\n\t set: function /*istanbul ignore next*/set(component) {\n\t if (this._transitioning) return;\n\t this._transitioning = true;\n\t //如果 value 是字符串则尝试从 $parent.components 中获取组件类 \n\t if (utils.isString(component)) {\n\t if (this.$parent && this.$parent.$components) {\n\t this.component = this.$parent.$components[component];\n\t } else {\n\t this.component = null;\n\t }\n\t return;\n\t }\n\t //声明新旧组件变量\n\t var newComponentInstance = null;\n\t var oldComponentInstance = this.componentInstance;\n\t //创建新组件实例\n\t if (utils.isFunction(component)) {\n\t newComponentInstance = new component({\n\t parent: this\n\t });\n\t } else {\n\t component.$setParent(this);\n\t newComponentInstance = component;\n\t }\n\t //通过转场控制器进行转场准备\n\t this.transition.prep(newComponentInstance, oldComponentInstance);\n\t //挂载新组件实例\n\t newComponentInstance.$appendTo(this.$element);\n\t //通过转场控制器进行转场\n\t this.transition.go(newComponentInstance, oldComponentInstance, function () {\n\t //触发相关事件\n\t this.$emit('enter', newComponentInstance);\n\t this.$emit('leave', oldComponentInstance);\n\t //销毁旧组件实例\n\t if (oldComponentInstance) {\n\t oldComponentInstance.$dispose();\n\t }\n\t this._transitioning = false;\n\t }.bind(this));\n\t //暂存当前组件实例\n\t this.componentInstance = newComponentInstance;\n\t },\n\t get: function /*istanbul ignore next*/get() {\n\t return this._Component;\n\t }\n\t },\n\t\n\t /**\n\t * 视图的转场控制对象\n\t */\n\t transition: {\n\t get: function /*istanbul ignore next*/get() {\n\t return this._transition || View.transition;\n\t },\n\t set: function /*istanbul ignore next*/set(transition) {\n\t if (this._transitioning) return;\n\t if (!transition || utils.isFunction(transition.prep) && utils.isFunction(transition.go)) {\n\t if (this._transition && utils.isFunction(this._transition.clean)) {\n\t this._transition.clean(this);\n\t }\n\t if (transition && utils.isFunction(transition.init)) {\n\t transition.init(this);\n\t }\n\t this._transition = transition;\n\t } else {\n\t throw new Error('Invalid transition');\n\t }\n\t }\n\t }\n\t },\n\t\n\t /**\n\t * 切换到指定的组件\n\t * @param {Component} component 组件\n\t * @param {transition} transition 转场控制组件\n\t * @returns {void} 无返回\n\t */\n\t switchTo: function /*istanbul ignore next*/switchTo(component, transition) {\n\t if (transition) {\n\t this.transition = transition;\n\t }\n\t this.component = component;\n\t }\n\t\n\t});\n\t\n\t/**\n\t * 默认转场设置\n\t */\n\tView.transition = {\n\t //init: function () { },\n\t //clean: function () { },\n\t\n\t /**\n\t * 转场开始前的准备\n\t * @param {Component} newComponent 新组件\n\t * @param {Component} oldComponent 旧组件\n\t * @returns {void} 无返回\n\t */\n\t prep: function /*istanbul ignore next*/prep(newComponent, oldComponent) {\n\t if (oldComponent) oldComponent.$element.style.display = 'none';\n\t },\n\t\n\t /**\n\t * 执行转场动画\n\t * @param {Component} newComponent 新组件\n\t * @param {Component} oldComponent 旧组件\n\t * @param {Function} done 完成后的回调\n\t * @returns {void} 无返回\n\t */\n\t go: function /*istanbul ignore next*/go(newComponent, oldComponent, done) {\n\t done();\n\t }\n\t};\n\t\n\tmodule.exports = View;\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar mokit = __webpack_require__(1);\n\tvar items = __webpack_require__(41);\n\t\n\t__webpack_require__(42);\n\t\n\tvar Toolbar = new mokit.Component({\n\t template: __webpack_require__(44),\n\t props: {\n\t mditor: null\n\t },\n\t\n\t /*istanbul ignore next*/data: function data() {\n\t return {\n\t items: items.slice(0)\n\t };\n\t },\n\t /*istanbul ignore next*/onReady: function onReady() {\n\t this.bindCommands();\n\t },\n\t\n\t\n\t watch: {\n\t /*istanbul ignore next*/items: function items() {\n\t this.bindCommands();\n\t }\n\t },\n\t\n\t /*istanbul ignore next*/bindCommands: function bindCommands() {\n\t /*istanbul ignore next*/var _this = this;\n\t\n\t if (!this.mditor) return;\n\t this.items.forEach(function (item) {\n\t /*istanbul ignore next*/_this.mditor.removeCommand(item.name);\n\t /*istanbul ignore next*/_this.mditor.addCommand(item);\n\t });\n\t },\n\t /*istanbul ignore next*/isActive: function isActive(item) {\n\t return this.mditor && item.state && this.mditor[item.state];\n\t },\n\t /*istanbul ignore next*/exec: function exec(name, event) {\n\t event.preventDefault();\n\t this.mditor.execCommand(name, event);\n\t },\n\t /*istanbul ignore next*/getItem: function getItem(name) {\n\t return this.items.find(function (item) /*istanbul ignore next*/{\n\t return item.name === name;\n\t });\n\t },\n\t /*istanbul ignore next*/removeItem: function removeItem(name) {\n\t var index = this.items.findIndex(function (item) /*istanbul ignore next*/{\n\t return item.name === name;\n\t });\n\t return this.items.splice(index, 1);\n\t },\n\t /*istanbul ignore next*/addItem: function addItem(item) {\n\t this.items.push(item);\n\t },\n\t /*istanbul ignore next*/replaceItem: function replaceItem(name, newItem) {\n\t var index = this.items.findIndex(function (item) /*istanbul ignore next*/{\n\t return item.name === name;\n\t });\n\t var oldItem = this.items.splice(index, 1);\n\t this.items.splice(index, 0, newItem);\n\t return oldItem;\n\t }\n\t});\n\t\n\tmodule.exports = Toolbar;\n\n/***/ },\n/* 41 */\n/***/ function(module, exports) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tmodule.exports = [{\n\t name: 'bold',\n\t title: '粗体',\n\t key: 'shift+alt+b',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.wrapSelectText('**', '**');\n\t }\n\t}, {\n\t name: 'italic',\n\t title: '斜体',\n\t key: 'shift+alt+i',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.wrapSelectText('*', '*');\n\t }\n\t}, {\n\t name: 'underline',\n\t title: '下划线',\n\t key: 'shift+alt+e',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.wrapSelectText('<u>', '</u>');\n\t }\n\t}, {\n\t name: 'strikethrough',\n\t title: '删除线',\n\t key: 'shift+alt+d',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.wrapSelectText('~~', '~~');\n\t }\n\t}, {\n\t name: 'header',\n\t title: '标题',\n\t key: 'shift+alt+1',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.wrapSelectText('# ');\n\t }\n\t}, {\n\t name: 'quote',\n\t icon: 'quote-left',\n\t title: '引用',\n\t key: 'shift+alt+q',\n\t /*istanbul ignore next*/handler: function handler() {\n\t var selectText = this.editor.getSelectText();\n\t if (selectText.length < 1) {\n\t this.editor.wrapSelectText('> ');\n\t return;\n\t }\n\t var textArray = selectText.split(this.EOL);\n\t var buffer = [];\n\t textArray.forEach(function (line) {\n\t buffer.push('> ' + line + ' ');\n\t });\n\t this.editor.setSelectText(buffer.join(this.EOL) + this.EOL);\n\t }\n\t}, {\n\t name: 'code',\n\t title: '代码',\n\t key: 'shift+alt+c',\n\t /*istanbul ignore next*/handler: function handler() {\n\t var lang = 'js' + this.EOL;\n\t var before = '```' + lang;\n\t var after = '``` ' + this.EOL;\n\t var text = this.editor.getSelectText().trim();\n\t if (text.length > 0) {\n\t text += this.EOL;\n\t }\n\t this.editor.setSelectText(text);\n\t this.editor.wrapSelectText(before, after);\n\t var range = this.editor.getSelectRange();\n\t var start = range.start - lang.length;\n\t var end = range.start - this.EOL.length;\n\t this.editor.setSelectRange(start, end);\n\t }\n\t}, {\n\t name: 'list-ol',\n\t title: '有序列表',\n\t key: 'shift+alt+o',\n\t /*istanbul ignore next*/handler: function handler() {\n\t var selectText = this.editor.getSelectText();\n\t if (selectText.length < 1) {\n\t this.editor.wrapSelectText('1. ');\n\t return;\n\t }\n\t var textArray = selectText.split(this.EOL);\n\t var buffer = [];\n\t for (var i = 0; i < textArray.length; i++) {\n\t var line = textArray[i];\n\t buffer.push(i + 1 + '. ' + line);\n\t }\n\t this.editor.setSelectText(buffer.join(this.EOL) + this.EOL);\n\t }\n\t}, {\n\t name: 'list-ul',\n\t title: '无序列表',\n\t key: 'shift+alt+u',\n\t /*istanbul ignore next*/handler: function handler() {\n\t var selectText = this.editor.getSelectText();\n\t if (selectText.length < 1) {\n\t this.editor.wrapSelectText('- ');\n\t return;\n\t }\n\t var textArray = selectText.split(this.EOL);\n\t var buffer = [];\n\t textArray.forEach(function (line) {\n\t buffer.push('- ' + line);\n\t });\n\t this.editor.setSelectText(buffer.join(this.EOL) + this.EOL);\n\t }\n\t}, {\n\t name: 'link',\n\t title: '链接',\n\t key: 'shift+alt+l',\n\t /*istanbul ignore next*/handler: function handler() {\n\t var text = this.editor.getSelectText();\n\t if (!text || /^(https:|http:|ftp:|file:|mailto:|\\/|\\.)/i.test(text)) {\n\t this.editor.wrapSelectText('[link](', ')');\n\t if (!text) return;\n\t var range = this.editor.getSelectRange();\n\t var start = range.start - 6;\n\t this.editor.setSelectRange(start, start + 4);\n\t } else {\n\t this.editor.wrapSelectText('[', ']()');\n\t var _range = this.editor.getSelectRange();\n\t var index = _range.end + 2;\n\t this.editor.setSelectRange(index, index);\n\t }\n\t }\n\t}, {\n\t name: 'table',\n\t title: '表格',\n\t key: 'shift+alt+t',\n\t /*istanbul ignore next*/handler: function handler() {\n\t var buffer = ['column1 | column2 | column3 ', '------- | ------- | ------- ', 'column1 | column2 | column3 ', 'column1 | column2 | column3 ', 'column1 | column2 | column3 '];\n\t this.editor.wrapSelectText(buffer.join(this.EOL) + this.EOL);\n\t }\n\t}, {\n\t name: 'line',\n\t title: '分隔线',\n\t icon: 'minus',\n\t key: 'shift+alt+h',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.wrapSelectText('----' + this.EOL);\n\t }\n\t}, {\n\t name: 'image',\n\t title: '图片',\n\t key: 'shift+alt+p',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.wrapSelectText('');\n\t }\n\t}, {\n\t name: 'help',\n\t title: '帮助',\n\t icon: 'question',\n\t key: 'shift+alt+/',\n\t /*istanbul ignore next*/handler: function handler() {\n\t window.open('http://mditor.com', '_blank');\n\t }\n\t}, {\n\t name: 'toggleFullScreen',\n\t title: '全屏',\n\t icon: 'arrows-alt',\n\t key: 'shift+alt+f',\n\t control: true,\n\t state: 'fullscreen',\n\t owner: function /*istanbul ignore next*/owner(mditor) {\n\t return mditor.$element;\n\t },\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.fullscreen = !this.fullscreen;\n\t }\n\t}, {\n\t name: 'togglePreview',\n\t title: 'preview',\n\t icon: 'desktop',\n\t key: 'shift+alt+v',\n\t control: true,\n\t state: 'preview',\n\t owner: function /*istanbul ignore next*/owner(mditor) {\n\t return mditor.$element;\n\t },\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.preview = !this.preview;\n\t if (this.preview) {\n\t this._split = this.split;\n\t this.split = false;\n\t } else {\n\t this.split = this._split;\n\t }\n\t }\n\t}, {\n\t name: 'toggleSplit',\n\t title: '预览',\n\t icon: 'columns',\n\t key: 'shift+alt+s',\n\t control: true,\n\t state: 'split',\n\t owner: function /*istanbul ignore next*/owner(mditor) {\n\t return mditor.$element;\n\t },\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.split = !this.split;\n\t if (this.split) {\n\t this.preview = false;\n\t }\n\t }\n\t}];\n\n/***/ },\n/* 42 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 43 */,\n/* 44 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<ul class=\\\"toolbar\\\">\\n <i m:each=\\\"item of items\\\" data-cmd=\\\"{{item.name}}\\\" m:on:click=\\\"exec(item.name,$event)\\\" class=\\\"item fa fa-{{item.icon || item.name}} {{isActive(item)?'active':''}} {{item.control?'control':''}}\\\" title=\\\"{{item.title || item.name}} {{item.key}}\\\"></i>\\n</ul>\"\n\n/***/ },\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar mokit = __webpack_require__(1);\n\tvar EventEmitter = mokit.EventEmitter;\n\tvar utils = __webpack_require__(46);\n\tvar Stack = __webpack_require__(47);\n\tvar commands = __webpack_require__(49);\n\t\n\t__webpack_require__(50);\n\t\n\tvar ua = window.navigator.userAgent.toLowerCase();\n\tvar isIE = !!ua.match(/msie|trident\\/7|edge/);\n\tvar isWinPhone = ua.indexOf('windows phone') !== -1;\n\tvar isIOS = !isWinPhone && !!ua.match(/ipad|iphone|ipod/);\n\t\n\tmodule.exports = new mokit.Component({\n\t template: __webpack_require__(51),\n\t\n\t props: {\n\t mditor: null,\n\t value: null,\n\t markExp: null\n\t },\n\t\n\t /*istanbul ignore next*/onReady: function onReady() {\n\t /*istanbul ignore next*/var _this = this;\n\t\n\t this.stack = new Stack();\n\t setTimeout(function () {\n\t /*istanbul ignore next*/_this.textareaEmitter = new EventEmitter( /*istanbul ignore next*/_this.textarea);\n\t /*istanbul ignore next*/_this.stack.init({\n\t value: /*istanbul ignore next*/_this.getValue()\n\t });\n\t }, 100);\n\t this._bindCommands();\n\t },\n\t /*istanbul ignore next*/_bindCommands: function _bindCommands() {\n\t /*istanbul ignore next*/var _this2 = this;\n\t\n\t commands.forEach(function (item) {\n\t /*istanbul ignore next*/_this2.mditor.removeCommand(item.name);\n\t /*istanbul ignore next*/_this2.mditor.addCommand(item);\n\t });\n\t },\n\t /*istanbul ignore next*/onCompositionStart: function onCompositionStart() {\n\t this._compositionLock = true;\n\t },\n\t /*istanbul ignore next*/onCompositionEnd: function onCompositionEnd() {\n\t /*istanbul ignore next*/var _this3 = this;\n\t\n\t this._compositionLock = false;\n\t setTimeout(function () /*istanbul ignore next*/{\n\t return (/*istanbul ignore next*/_this3.onInput()\n\t );\n\t }, 300);\n\t /**\n\t * 在输入中文时,输入法「候选词面板」位置会发生定位错误\n\t * 经过反复尝试发现了「规律」,第一次「侯选词」上屏后才会位置错误\n\t * 在「候选词」上屏后让输入框「失去焦点再获取焦点」可「规避」这个 Bug\n\t * 附上相关 issues\n\t * https://github.com/electron/electron/issues/8894\n\t * https://github.com/electron/electron/issues/4539\n\t */\n\t this.textarea.blur();\n\t this.textarea.focus();\n\t },\n\t /*istanbul ignore next*/onInput: function onInput() {\n\t /*istanbul ignore next*/var _this4 = this;\n\t\n\t this.$emit('input');\n\t if (this._changedTimer) {\n\t clearTimeout(this._changedTimer);\n\t this._changedTimer = null;\n\t }\n\t if (this._compositionLock) return;\n\t this._changedTimer = setTimeout(function () {\n\t if (! /*istanbul ignore next*/_this4._changedTimer) return;\n\t /*istanbul ignore next*/_this4.stack.push({\n\t value: /*istanbul ignore next*/_this4.getValue(),\n\t range: /*istanbul ignore next*/_this4.getSelectRange()\n\t });\n\t /*istanbul ignore next*/_this4.$emit('changed');\n\t }, 300);\n\t },\n\t /*istanbul ignore next*/undo: function undo() {\n\t /*istanbul ignore next*/var _this5 = this;\n\t\n\t var last = this.stack.last();\n\t var item = this.stack.undo();\n\t if (utils.isNull(item) || utils.isNull(item.value)) return;\n\t var valGap = last.value.length - item.value.length;\n\t this.value = item.value;\n\t if (last.range) {\n\t setTimeout(function () {\n\t var start = last.range.start - valGap;\n\t var end = last.range.end - valGap;\n\t /*istanbul ignore next*/_this5.setSelectRange(start, end);\n\t });\n\t }\n\t },\n\t /*istanbul ignore next*/redo: function redo() {\n\t /*istanbul ignore next*/var _this6 = this;\n\t\n\t var item = this.stack.redo();\n\t if (utils.isNull(item) || utils.isNull(item.value)) return;\n\t this.value = item.value;\n\t if (item.range) {\n\t setTimeout(function () {\n\t /*istanbul ignore next*/_this6.setSelectRange(item.range.start, item.range.end);\n\t });\n\t }\n\t },\n\t /*istanbul ignore next*/onPaste: function onPaste(event) {\n\t this.$emit('paste', event);\n\t },\n\t /*istanbul ignore next*/onDragover: function onDragover(event) {\n\t event.preventDefault();\n\t this.$emit('dragover', event);\n\t },\n\t /*istanbul ignore next*/onDrop: function onDrop(event) {\n\t event.preventDefault();\n\t this.$emit('drop', event);\n\t },\n\t /*istanbul ignore next*/focus: function focus() {\n\t this.textarea.focus();\n\t },\n\t /*istanbul ignore next*/blur: function blur() {\n\t this.textarea.blur();\n\t },\n\t /*istanbul ignore next*/onScroll: function onScroll(event) {\n\t this.syncScroll();\n\t this.$emit('scroll', event);\n\t },\n\t /*istanbul ignore next*/syncScroll: function syncScroll(disTwice) {\n\t /*istanbul ignore next*/var _this7 = this;\n\t\n\t this.marks.scrollTop = this.textarea.scrollTop;\n\t this.marks.scrollLeft = this.textarea.scrollLeft;\n\t if (disTwice) return;\n\t setTimeout(function () {\n\t /*istanbul ignore next*/_this7.syncScroll(true);\n\t }, 0);\n\t },\n\t /*istanbul ignore next*/applyMarks: function applyMarks(text) {\n\t if (!text || !this.markExp) return;\n\t text = text.replace(/\\n$/g, '\\n\\n').replace(this.markExp, '<mark>$&</mark>');\n\t if (isIE) {\n\t // IE wraps whitespace differently in a div vs textarea, this fixes it\n\t text = text.replace(/ /g, ' <wbr>');\n\t }\n\t return text;\n\t },\n\t /*istanbul ignore next*/activeMark: function activeMark(index) {\n\t var marks = [].slice.call(this.marks.querySelectorAll('mark'));\n\t if (marks.length < 1) return;\n\t this.activeMarkIndex = utils.isNull(this.activeMarkIndex) ? -1 : this.activeMarkIndex;\n\t if (utils.isNull(index)) {\n\t this.activeMarkIndex++;\n\t } else {\n\t this.activeMarkIndex = index;\n\t }\n\t if (this.activeMarkIndex >= marks.length) {\n\t this.activeMarkIndex = 0;\n\t }\n\t marks.forEach(function (mark) {\n\t mark.classList.remove('active');\n\t });\n\t var activeMark = marks[this.activeMarkIndex];\n\t activeMark.classList.add('active');\n\t this.scrollToMark(activeMark);\n\t },\n\t /*istanbul ignore next*/scrollToMark: function scrollToMark(mark) {\n\t // mark.scrollIntoView();\n\t // this.textarea.scrollTop = this.marks.scrollTop;\n\t // this.textarea.scrollTop -= 20;\n\t this.textarea.scrollTop = mark.offsetTop - 20;\n\t },\n\t /*istanbul ignore next*/getValue: function getValue() {\n\t return this.textarea.value;\n\t },\n\t /*istanbul ignore next*/setValue: function setValue(value) {\n\t this.textarea.value = value;\n\t },\n\t /*istanbul ignore next*/getActiveElement: function getActiveElement() {\n\t this.textarea.focus();\n\t return document.activeElement;\n\t },\n\t /*istanbul ignore next*/getSelectRange: function getSelectRange() {\n\t var box = this.getActiveElement();\n\t return {\n\t 'start': box.selectionStart,\n\t 'end': box.selectionEnd\n\t };\n\t },\n\t /*istanbul ignore next*/setSelectRange: function setSelectRange(start, end) {\n\t var box = this.getActiveElement();\n\t box.setSelectionRange(start, end);\n\t },\n\t /*istanbul ignore next*/getSelectText: function getSelectText() {\n\t var box = this.getActiveElement();\n\t var range = this.getSelectRange();\n\t return box.value.substring(range.start, range.end);\n\t },\n\t /*istanbul ignore next*/setSelectText: function setSelectText(text) {\n\t /*istanbul ignore next*/var _this8 = this;\n\t\n\t var box = this.getActiveElement();\n\t var range = this.getSelectRange();\n\t box.setRangeText(text);\n\t if (range.end == range.start) {\n\t this.setSelectRange(range.start, range.end + text.length);\n\t }\n\t this.value = this.getValue();\n\t this.onInput();\n\t setTimeout(function () {\n\t /*istanbul ignore next*/_this8.blur();\n\t /*istanbul ignore next*/_this8.focus();\n\t }, 0);\n\t },\n\t /*istanbul ignore next*/wrapSelectText: function wrapSelectText(before, after) {\n\t before = before !== null && before !== undefined ? before : '';\n\t after = after !== null && after !== undefined ? after : '';\n\t var range = this.getSelectRange();\n\t var text = this.getSelectText();\n\t this.setSelectText(before + text + after);\n\t var newStart = range.start + before.length;\n\t var newEnd = range.end + before.length;\n\t this.setSelectRange(newStart, newEnd);\n\t },\n\t /*istanbul ignore next*/insertBeforeText: function insertBeforeText(text) {\n\t this.wrapSelectText(text);\n\t },\n\t /*istanbul ignore next*/insertAfterText: function insertAfterText(text) {\n\t this.wrapSelectText('', text);\n\t },\n\t /*istanbul ignore next*/getBeforeText: function getBeforeText(length) {\n\t var range = this.getSelectRange();\n\t var end = range.start;\n\t var start = end - length;\n\t var value = this.getValue();\n\t return value.substring(start, end);\n\t },\n\t /*istanbul ignore next*/getBeforeFirstCharIndex: function getBeforeFirstCharIndex(char) {\n\t var range = this.getSelectRange();\n\t var end = range.start;\n\t var start = 0;\n\t var value = this.getValue();\n\t return value.substring(start, end).lastIndexOf(char);\n\t },\n\t /*istanbul ignore next*/getBeforeWord: function getBeforeWord() {\n\t /*istanbul ignore next*/var _this9 = this;\n\t\n\t var chars = [' ', '\\t', this.mditor.EOL];\n\t var start = 0;\n\t chars.forEach(function (char) {\n\t var index = /*istanbul ignore next*/_this9.getBeforeFirstCharIndex(char);\n\t if (index + char.length > start) {\n\t start = index + char.length;\n\t }\n\t });\n\t var range = this.getSelectRange();\n\t var value = this.getValue();\n\t return value.substring(start, range.end);\n\t },\n\t /*istanbul ignore next*/getBeforeTextInLine: function getBeforeTextInLine() {\n\t var start = this.getBeforeFirstCharIndex(this.mditor.EOL) + this.mditor.EOL.length;\n\t var range = this.getSelectRange();\n\t var value = this.getValue();\n\t return value.substring(start, range.end);\n\t },\n\t /*istanbul ignore next*/selectBeforeText: function selectBeforeText(length) {\n\t var range = this.getSelectRange();\n\t this.setSelectRange(range.start - length, range.end);\n\t },\n\t /*istanbul ignore next*/selectAfterText: function selectAfterText(length) {\n\t var range = this.getSelectRange();\n\t this.setSelectRange(range.start, range.end + length);\n\t },\n\t /*istanbul ignore next*/selectBeforeTextInLine: function selectBeforeTextInLine() {\n\t var start = this.getBeforeFirstCharIndex(this.mditor.EOL) + this.mditor.EOL.length;\n\t var range = this.getSelectRange();\n\t this.setSelectRange(start, range.end);\n\t },\n\t /*istanbul ignore next*/addIndent: function addIndent() {\n\t /*istanbul ignore next*/var _this10 = this;\n\t\n\t var selectText = this.getSelectText();\n\t if (selectText.length < 1) {\n\t this.insertBeforeText(this.mditor.INDENT);\n\t return;\n\t }\n\t var textArray = selectText.split(this.mditor.EOL);\n\t var buffer = [];\n\t var lineCount = textArray.length - 1;\n\t textArray.forEach(function (line, index) {\n\t line = line.trim() !== '' ? /*istanbul ignore next*/_this10.mditor.INDENT + line : line;\n\t if (index < lineCount || line.trim() !== '') {\n\t buffer.push(line);\n\t }\n\t });\n\t this.setSelectText(buffer.join(this.mditor.EOL));\n\t },\n\t /*istanbul ignore next*/removeIndent: function removeIndent() {\n\t /*istanbul ignore next*/var _this11 = this;\n\t\n\t var indentRegExp = new RegExp('^' + this.mditor.INDENT);\n\t var selectText = this.getSelectText();\n\t if (selectText.length < 1) {\n\t this.selectBeforeTextInLine();\n\t if (this.getSelectText().length > 0) {\n\t event.clearSelected = true;\n\t this.removeIndent();\n\t }\n\t return;\n\t }\n\t var textArray = selectText.split(this.mditor.EOL);\n\t var buffer = [];\n\t textArray.forEach(function (line) {\n\t if (indentRegExp.test(line)) {\n\t line = line.replace( /*istanbul ignore next*/_this11.mditor.INDENT, '');\n\t }\n\t buffer.push(line);\n\t });\n\t this.setSelectText(buffer.join(this.mditor.EOL));\n\t if (event.clearSelected) {\n\t var range = this.getSelectRange();\n\t this.setSelectRange(range.end, range.end);\n\t }\n\t }\n\t});\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t(function (ntils) {\n\t\n\t /**\n\t * 空函数\n\t */\n\t ntils.noop = function () { };\n\t\n\t /**\n\t * 验证一个对象是否为NULL\n\t * @method isNull\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isNull = function (obj) {\n\t return obj === null || typeof obj === \"undefined\";\n\t };\n\t\n\t /**\n\t * 除去字符串两端的空格\n\t * @method trim\n\t * @param {String} str 源字符串\n\t * @return {String} 结果字符串\n\t * @static\n\t */\n\t ntils.trim = function (str) {\n\t if (this.isNull(str)) return str;\n\t if (str.trim) {\n\t return str.trim();\n\t } else {\n\t return str.replace(/(^[\\\\s]*)|([\\\\s]*$)/g, \"\");\n\t }\n\t };\n\t\n\t /**\n\t * 替换所有\n\t * @method replace\n\t * @param {String} str 源字符串\n\t * @param {String} str1 要替换的字符串\n\t * @param {String} str2 替换为的字符串\n\t * @static\n\t */\n\t ntils.replace = function (str, str1, str2) {\n\t if (this.isNull(str)) return str;\n\t return str.replace(new RegExp(str1, 'g'), str2);\n\t };\n\t\n\t /**\n\t * 从字符串开头匹配\n\t * @method startWith\n\t * @param {String} str1 源字符串\n\t * @param {String} str2 要匹配的字符串\n\t * @return {Boolean} 匹配结果\n\t * @static\n\t */\n\t ntils.startWith = function (str1, str2) {\n\t if (this.isNull(str1) || this.isNull(str2)) return false;\n\t return str1.indexOf(str2) === 0;\n\t };\n\t\n\t /**\n\t * 是否包含\n\t * @method contains\n\t * @param {String} str1 源字符串\n\t * @param {String} str2 检查包括字符串\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.contains = function (str1, str2) {\n\t var self = this;\n\t if (this.isNull(str1) || this.isNull(str2)) return false;\n\t return str1.indexOf(str2) > -1;\n\t };\n\t\n\t /**\n\t * 从字符串结束匹配\n\t * @method endWidth\n\t * @param {String} str1 源字符串\n\t * @param {String} str2 匹配字符串\n\t * @return {Boolean} 匹配结果\n\t * @static\n\t */\n\t ntils.endWith = function (str1, str2) {\n\t if (this.isNull(str1) || this.isNull(str2)) return false;\n\t return str1.indexOf(str2) === (str1.length - str2.length);\n\t };\n\t\n\t /**\n\t * 是否包含属性\n\t * @method hasProperty\n\t * @param {Object} obj 对象\n\t * @param {String} name 属性名\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.has = ntils.hasProperty = function (obj, name) {\n\t if (this.isNull(obj) || this.isNull(name)) return false;\n\t return (name in obj) || (obj.hasOwnProperty(name));\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为Function\n\t * @method isFunction\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isFunction = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t return typeof obj === \"function\";\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为String\n\t * @method isString\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isString = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t return typeof obj === 'string' || obj instanceof String;\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为Number\n\t * @method isNumber\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isNumber = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t return typeof obj === 'number' || obj instanceof Number;\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为Boolean\n\t * @method isBoolean\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isBoolean = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t return typeof obj === 'boolean' || obj instanceof Boolean;\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为HTML Element\n\t * @method isElement\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isElement = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t if (window.Element) {\n\t return obj instanceof Element;\n\t } else {\n\t return (obj.tagName && obj.nodeType && obj.nodeName && obj.attributes && obj.ownerDocument);\n\t }\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为HTML Text Element\n\t * @method isText\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isText = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t return obj instanceof Text;\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为Object\n\t * @method isObject\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isObject = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t return typeof obj === \"object\";\n\t };\n\t\n\t /**\n\t * 验证一个对象是否为Array或伪Array\n\t * @method isArray\n\t * @param {Object} obj 要验证的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isArray = function (obj) {\n\t if (this.isNull(obj)) return false;\n\t var v1 = Object.prototype.toString.call(obj) === '[object Array]';\n\t var v2 = obj instanceof Array;\n\t var v3 = !this.isString(obj) && this.isNumber(obj.length) && this.isFunction(obj.splice);\n\t var v4 = !this.isString(obj) && this.isNumber(obj.length) && obj[0];\n\t return v1 || v2 || v3 || v4;\n\t };\n\t\n\t /**\n\t * 验证是不是一个日期对象\n\t * @method isDate\n\t * @param {Object} val 要检查的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isDate = function (val) {\n\t if (this.isNull(val)) return false;\n\t return val instanceof Date;\n\t };\n\t\n\t /**\n\t * 验证是不是一个正则对象\n\t * @method isDate\n\t * @param {Object} val 要检查的对象\n\t * @return {Boolean} 结果\n\t * @static\n\t */\n\t ntils.isRegexp = function (val) {\n\t return val instanceof RegExp;\n\t };\n\t\n\t /**\n\t * 转换为数组\n\t * @method toArray\n\t * @param {Array|Object} array 伪数组\n\t * @return {Array} 转换结果数组\n\t * @static\n\t */\n\t ntils.toArray = function (array) {\n\t if (this.isNull(array)) return [];\n\t return Array.prototype.slice.call(array);\n\t };\n\t\n\t /**\n\t * 转为日期格式\n\t * @method toDate\n\t * @param {Number|String} val 日期字符串或整型数值\n\t * @return {Date} 日期对象\n\t * @static\n\t */\n\t ntils.toDate = function (val) {\n\t var self = this;\n\t if (self.isNumber(val))\n\t return new Date(val);\n\t else if (self.isString(val))\n\t return new Date(self.replace(self.replace(val, '-', '/'), 'T', ' '));\n\t else if (self.isDate(val))\n\t return val;\n\t else\n\t return null;\n\t };\n\t\n\t /**\n\t * 遍历一个对像或数组\n\t * @method each\n\t * @param {Object or Array} obj 要遍历的数组或对象\n\t * @param {Function} fn 处理函数\n\t * @return {void} 无返回值\n\t * @static\n\t */\n\t ntils.each = function (list, handler, scope) {\n\t if (this.isNull(list) || this.isNull(handler)) return;\n\t if (this.isArray(list)) {\n\t var listLength = list.length;\n\t for (var i = 0; i < listLength; i++) {\n\t var rs = handler.call(scope || list[i], i, list[i]);\n\t if (!this.isNull(rs)) return rs;\n\t }\n\t } else {\n\t for (var key in list) {\n\t var rs = handler.call(scope || list[key], key, list[key]);\n\t if (!this.isNull(rs)) return rs;\n\t }\n\t }\n\t };\n\t\n\t /**\n\t * 格式化日期\n\t * @method formatDate\n\t * @param {Date|String|Number} date 日期\n\t * @param {String} format 格式化字符串\n\t * @param {object} dict 反译字典\n\t * @return {String} 格式化结果\n\t * @static\n\t */\n\t ntils.formatDate = function (date, format, dict) {\n\t if (this.isNull(format) || this.isNull(date)) return date;\n\t date = this.toDate(date);\n\t dict = dict || {};\n\t var placeholder = {\n\t \"M+\": date.getMonth() + 1, //month\n\t \"d+\": date.getDate(), //day\n\t \"h+\": date.getHours(), //hour\n\t \"m+\": date.getMinutes(), //minute\n\t \"s+\": date.getSeconds(), //second\n\t \"w+\": date.getDay(), //week\n\t \"q+\": Math.floor((date.getMonth() + 3) / 3), //quarter\n\t \"S\": date.getMilliseconds() //millisecond\n\t }\n\t if (/(y+)/.test(format)) {\n\t format = format.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n\t }\n\t for (var key in placeholder) {\n\t if (new RegExp(\"(\" + key + \")\").test(format)) {\n\t var value = placeholder[key];\n\t value = dict[value] || value;\n\t format = format.replace(RegExp.$1, RegExp.$1.length == 1\n\t ? value : (\"00\" + value).substr((\"\" + value).length));\n\t }\n\t }\n\t return format;\n\t };\n\t\n\t /**\n\t * 拷贝对象\n\t * @method copy\n\t * @param {Object} src 源对象\n\t * @param {Object} dst 目标对象\n\t * @static\n\t */\n\t ntils.copy = function (src, dst, igonres) {\n\t dst = dst || (this.isArray(src) ? [] : {});\n\t this.each(src, function (key) {\n\t if (igonres && igonres.indexOf(key) > -1) return;\n\t delete dst[key];\n\t if (Object.getOwnPropertyDescriptor) {\n\t try {\n\t Object.defineProperty(dst, key, Object.getOwnPropertyDescriptor(src, key));\n\t } catch (ex) {\n\t dst[key] = src[key];\n\t }\n\t } else {\n\t dst[key] = src[key];\n\t }\n\t })\n\t return dst;\n\t };\n\t\n\t /**\n\t * 深度克隆对象\n\t * @method clone\n\t * @param {Object} src 源对象\n\t * @return {Object} 新对象\n\t * @static\n\t */\n\t ntils.clone = function (src, igonres) {\n\t if (this.isNull(src) ||\n\t this.isString(src) ||\n\t this.isNumber(src) ||\n\t this.isBoolean(src) ||\n\t this.isDate(src)) {\n\t return src;\n\t }\n\t var objClone = src;\n\t try {\n\t objClone = new src.constructor();\n\t } catch (ex) { }\n\t this.each(src, function (key, value) {\n\t if (objClone[key] != value && !this.contains(igonres, key)) {\n\t if (this.isObject(value)) {\n\t objClone[key] = this.clone(value, igonres);\n\t } else {\n\t objClone[key] = value;\n\t }\n\t }\n\t }, this);\n\t ['toString', 'valueOf'].forEach(function (key) {\n\t if (this.contains(igonres, key)) return;\n\t this.defineFreezeProp(objClone, key, src[key]);\n\t }, this);\n\t return objClone;\n\t };\n\t\n\t /**\n\t * 合并对象\n\t * @method mix\n\t * @return 合并后的对象\n\t * @param {Object} dst 目标对象\n\t * @param {Object} src 源对象\n\t * @param {Array} igonres 忽略的属性名,\n\t * @param {Number} mode 模式\n\t */\n\t ntils.mix = function (dst, src, igonres, mode) {\n\t //根据模式来判断,默认是Obj to Obj的 \n\t if (mode) {\n\t switch (mode) {\n\t case 1: // proto to proto \n\t return ntils.mix(dst.prototype, src.prototype, igonres, 0);\n\t case 2: // object to object and proto to proto \n\t ntils.mix(dst.prototype, src.prototype, igonres, 0);\n\t break; // pass through \n\t case 3: // proto to static \n\t return ntils.mix(dst, src.prototype, igonres, 0);\n\t case 4: // static to proto \n\t return ntils.mix(dst.prototype, src, igonres, 0);\n\t default: // object to object is what happens below \n\t }\n\t }\n\t //---\n\t src = src || {};\n\t dst = dst || (this.isArray(src) ? [] : {});\n\t this.keys(src).forEach(function (key) {\n\t if (this.contains(igonres, key)) return;\n\t if (this.isObject(src[key]) &&\n\t (src[key].constructor == Object ||\n\t src[key].constructor == Array ||\n\t src[key].constructor == null)) {\n\t dst[key] = ntils.mix(dst[key], src[key], igonres, 0);\n\t } else {\n\t dst[key] = src[key];\n\t }\n\t }, this);\n\t return dst;\n\t };\n\t\n\t /**\n\t * 定义不可遍历的属性\n\t **/\n\t ntils.defineFreezeProp = function (obj, name, value) {\n\t try {\n\t Object.defineProperty(obj, name, {\n\t value: value,\n\t enumerable: false,\n\t configurable: true, //能不能重写定义\n\t writable: false //能不能用「赋值」运算更改\n\t });\n\t } catch (err) {\n\t obj[name] = value;\n\t }\n\t };\n\t\n\t /**\n\t * 获取所有 key \n\t */\n\t ntils.keys = function (obj) {\n\t if (Object.keys) return Object.keys(obj);\n\t var keys = [];\n\t this.each(obj, function (key) {\n\t keys.push(key);\n\t });\n\t return keys;\n\t };\n\t\n\t /**\n\t * 创建一个对象\n\t */\n\t ntils.create = function (proto, props) {\n\t if (Object.create) return Object.create(proto, props);\n\t var Cotr = function () { };\n\t Cotr.prototype = proto;\n\t var obj = new Cotr();\n\t if (props) this.copy(props, obj);\n\t return obj;\n\t };\n\t\n\t /**\n\t * 设置 proto\n\t * 在不支持 setPrototypeOf 也不支持 __proto__ 的浏览器\n\t * 中,会采用 copy 方式\n\t */\n\t ntils.setPrototypeOf = function (obj, proto) {\n\t if (Object.setPrototypeOf) {\n\t return Object.setPrototypeOf(obj, proto || this.create(null));\n\t } else {\n\t if (!('__proto__' in Object)) this.copy(proto, obj);\n\t obj.__proto__ = proto;\n\t }\n\t };\n\t\n\t /**\n\t * 获取 proto\n\t */\n\t ntils.getPrototypeOf = function (obj) {\n\t if (obj.__proto__) return obj.__proto__;\n\t if (Object.getPrototypeOf) return Object.getPrototypeOf(obj);\n\t if (obj.constructor) return obj.constructor.prototype;\n\t };\n\t\n\t /**\n\t * 是否深度相等\n\t */\n\t ntils.deepEqual = function (a, b) {\n\t if (a === b) return true;\n\t if (!this.isObject(a) || !this.isObject(b)) return false;\n\t var aKeys = this.keys(a);\n\t var bKeys = this.keys(b);\n\t if (aKeys.length !== bKeys.length) return false;\n\t var allKeys = aKeys.concat(bKeys);\n\t var checkedMap = this.create(null);\n\t var result = true;\n\t this.each(allKeys, function (i, key) {\n\t if (checkedMap[key]) return;\n\t if (!this.deepEqual(a[key], b[key])) result = false;\n\t checkedMap[key] = true;\n\t }, this);\n\t return result;\n\t };\n\t\n\t /**\n\t * 从一个数值循环到别一个数\n\t * @param {number} fromNum 开始数值\n\t * @param {Number} toNum 结束数值\n\t * @param {Number} step 步长值\n\t * @param {function} handler 执行函数\n\t * @returns {void} 无返回\n\t */\n\t ntils.fromTo = function (fromNum, toNum, step, handler) {\n\t if (!handler) handler = [step, step = handler][0];\n\t step = Math.abs(step || 1);\n\t if (fromNum < toNum) {\n\t for (var i = fromNum; i <= toNum; i += step) handler(i);\n\t } else {\n\t for (var i = fromNum; i >= toNum; i -= step) handler(i);\n\t }\n\t };\n\t\n\t /**\n\t * 生成一个Guid\n\t * @method newGuid\n\t * @return {String} GUID字符串\n\t * @static\n\t */\n\t ntils.newGuid = function () {\n\t var S4 = function () {\n\t return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n\t };\n\t return (S4() + S4() + \"-\" + S4() + \"-\" + S4() + \"-\" + S4() + \"-\" + S4() + S4() + S4());\n\t };\n\t\n\t /**\n\t * 对象变换\n\t **/\n\t ntils.map = function (list, fn) {\n\t var buffer = this.isArray(list) ? [] : {};\n\t this.each(list, function (name, value) {\n\t buffer[name] = fn(name, value);\n\t });\n\t return buffer;\n\t };\n\t\n\t /**\n\t * 通过路径设置属性值\n\t */\n\t ntils.setByPath = function (obj, path, value) {\n\t if (this.isNull(obj) || this.isNull(path) || path === '') {\n\t return;\n\t }\n\t if (!this.isArray(path)) {\n\t path = path.replace(/\\[/, '.').replace(/\\]/, '.').split('.');\n\t }\n\t this.each(path, function (index, name) {\n\t if (this.isNull(name) || name.length < 1) return;\n\t if (index === path.length - 1) {\n\t obj[name] = value;\n\t } else {\n\t obj[name] = obj[name] || {};\n\t obj = obj[name];\n\t }\n\t }, this);\n\t };\n\t\n\t /**\n\t * 通过路径获取属性值\n\t */\n\t ntils.getByPath = function (obj, path) {\n\t if (this.isNull(obj) || this.isNull(path) || path === '') {\n\t return obj;\n\t }\n\t if (!this.isArray(path)) {\n\t path = path.replace(/\\[/, '.').replace(/\\]/, '.').split('.');\n\t }\n\t this.each(path, function (index, name) {\n\t if (this.isNull(name) || name.length < 1) return;\n\t if (!this.isNull(obj)) obj = obj[name];\n\t }, this);\n\t return obj;\n\t };\n\t\n\t /**\n\t * 数组去重\n\t **/\n\t ntils.unique = function (array) {\n\t if (this.isNull(array)) return array;\n\t var newArray = [];\n\t this.each(array, function (i, value) {\n\t if (newArray.indexOf(value) > -1) return;\n\t newArray.push(value);\n\t });\n\t return newArray;\n\t };\n\t\n\t /**\n\t * 解析 function 的参数列表\n\t **/\n\t ntils.getFunctionArgumentNames = function (fn) {\n\t if (!fn) return [];\n\t var src = fn.toString();\n\t var parts = src.split(')')[0].split('=>')[0].split('(');\n\t return (parts[1] || parts[0]).split(',').map(function (name) {\n\t return name.trim();\n\t }).filter(function (name) {\n\t return name != 'function';\n\t });\n\t };\n\t\n\t /**\n\t * 缩短字符串\n\t */\n\t ntils.short = function (str, maxLength) {\n\t if (!str) return str;\n\t maxLength = maxLength || 40;\n\t var strLength = str.length;\n\t var trimLength = maxLength / 2;\n\t return strLength > maxLength ? str.substr(0, trimLength) + '...' + str.substr(strLength - trimLength) : str;\n\t };\n\t\n\t /**\n\t * 首字母大写\n\t */\n\t ntils.firstUpper = function (str) {\n\t if (this.isNull(str)) return;\n\t str[0] = str[0].toLowerCase();\n\t return str;\n\t };\n\t\n\t /**\n\t * 编码正则字符串\n\t */\n\t ntils.escapeRegExp = function (str) {\n\t return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t };\n\t\n\t /**\n\t * 解析字符串为 dom \n\t * @param {string} str 字符串\n\t * @returns {HTMLNode} 解析后的 DOM \n\t */\n\t ntils.parseDom = function (str) {\n\t this._PDD_ = this._PDD_ || document.createElement('div');\n\t this._PDD_.innerHTML = ntils.trim(str);\n\t var firstNode = this._PDD_.childNodes[0];\n\t //先 clone 一份再通过 innerHTML 清空\n\t //否则 IE9 下,清空时会导出返回的 DOM 没有子结点\n\t if (firstNode) firstNode = firstNode.cloneNode(true);\n\t this._PDD_.innerHTML = '';\n\t return firstNode;\n\t };\n\t\n\t})(( false) ? (window.ntils = {}) : exports);\n\n/***/ },\n/* 47 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar Class = __webpack_require__(48).Class;\n\tvar utils = __webpack_require__(46);\n\t\n\tvar Stack = new Class({\n\t /*istanbul ignore next*/constructor: function constructor(item) {\n\t this.init(item);\n\t },\n\t /*istanbul ignore next*/init: function init(item) {\n\t this.undoList = [item || {\n\t value: null\n\t }];\n\t this.redoList = [];\n\t },\n\t /*istanbul ignore next*/push: function push(item) {\n\t if (this.last() === item) return;\n\t this.undoList.push(item);\n\t },\n\t /*istanbul ignore next*/last: function last() {\n\t return this.undoList[this.undoList.length - 1];\n\t },\n\t /*istanbul ignore next*/undo: function undo() {\n\t if (this.undoList.length > 1) {\n\t var item = this.undoList.pop();\n\t if (utils.isNull(item) || utils.isNull(item.value)) return;\n\t this.redoList.push(item);\n\t }\n\t return this.last();\n\t },\n\t /*istanbul ignore next*/redo: function redo() {\n\t var item = this.redoList.pop();\n\t if (utils.isNull(item) || utils.isNull(item.value)) return;\n\t this.undoList.push(item);\n\t return item;\n\t }\n\t});\n\t\n\tmodule.exports = Stack;\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tconst utils = __webpack_require__(46);\n\t\n\tfunction ClassFactory(options) {\n\t //处理 options\n\t options = options || utils.create(null);\n\t options.$name = options.$name || 'Class';\n\t options.$extends = options.$extends || ClassFactory;\n\t options.$static = options.$static || utils.create(null);\n\t //处理父类 prototype\n\t var superPrototype = utils.isFunction(options.$extends) ?\n\t options.$extends.prototype : options.$extends;\n\t //定义新类\n\t var Class = function () {\n\t //处理 super\n\t if (!this.$super) {\n\t utils.defineFreezeProp(this, '$super', function () {\n\t if (this._super_called_) return this._super_ret_;\n\t this._super_called_ = true;\n\t if (utils.isFunction(options.$extends)) {\n\t this._super_ret_ = options.$extends.apply(this, arguments);\n\t //这几行确保可继承于数组\n\t if (this._super_ret_) {\n\t var proto = utils.getPrototypeOf(this);\n\t utils.setPrototypeOf(proto, this._super_ret_);\n\t }\n\t } else {\n\t this._super_ret_ = options.$extends;\n\t }\n\t return this._super_ret_;\n\t });\n\t for (var name in superPrototype) {\n\t var value = superPrototype[name];\n\t if (utils.isFunction(value)) {\n\t this.$super[name] = value.bind(this);\n\t } else {\n\t this.$super[name] = value;\n\t }\n\t }\n\t }\n\t //调用构造\n\t if (utils.isFunction(options.constructor) &&\n\t options.constructor !== Object) {\n\t return options.constructor.apply(this, arguments);\n\t } else {\n\t //如果没有实现 constructor 则调用父类构造\n\t this.$super.apply(this, arguments);\n\t }\n\t };\n\t //处理 prototype\n\t Class.prototype = utils.create(superPrototype);\n\t utils.copy(options, Class.prototype);\n\t utils.defineFreezeProp(Class.prototype, '$class', Class);\n\t //处理静态成员\n\t utils.copy(options.$static, Class);\n\t if (utils.isFunction(options.$extends)) {\n\t utils.setPrototypeOf(Class, options.$extends);\n\t }\n\t if (!options.$extends.$extend) {\n\t utils.copy(ClassFactory, Class);\n\t }\n\t utils.defineFreezeProp(Class, '$super', options.$extends);\n\t //--\n\t return Class;\n\t}\n\t\n\t//定义扩展方法\n\tClassFactory.$extend = function (options) {\n\t options.$extends = this;\n\t return new ClassFactory(options);\n\t};\n\t\n\tClassFactory.Class = ClassFactory;\n\tmodule.exports = ClassFactory;\n\n/***/ },\n/* 49 */\n/***/ function(module, exports) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tmodule.exports = [{\n\t name: 'undo',\n\t key: '{cmd}+z',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.undo();\n\t }\n\t}, {\n\t name: 'redo',\n\t key: '{cmd}+shift+z',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.redo();\n\t }\n\t}, {\n\t name: 'h2',\n\t key: 'shift+alt+2',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.wrapSelectText('## ');\n\t }\n\t}, {\n\t name: 'h3',\n\t key: 'shift+alt+3',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.wrapSelectText('### ');\n\t }\n\t}, {\n\t name: 'h4',\n\t key: 'shift+alt+4',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.wrapSelectText('#### ');\n\t }\n\t}, {\n\t name: 'h5',\n\t key: 'shift+alt+5',\n\t /*istanbul ignore next*/handler: function handler() {\n\t this.editor.wrapSelectText('##### ');\n\t }\n\t}];\n\n/***/ },\n/* 50 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 51 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<div class=\\\"editor\\\">\\n <div class=\\\"backdrop\\\" m:id=\\\"marks\\\">\\n <div class=\\\"inner\\\" m:html=\\\"applyMarks(value)\\\"></div>\\n </div>\\n <textarea class=\\\"textarea\\\" m:id=\\\"textarea\\\" m:model=\\\"value\\\" m:on:paste=\\\"onPaste\\\" m:on:dragover=\\\"onDragover\\\" m:on:drop=\\\"onDrop\\\"\\n m:on:scroll=\\\"onScroll()\\\" m:on:input=\\\"onInput\\\" m:on:compositionStart=\\\"onCompositionStart\\\" m:on:compositionEnd=\\\"onCompositionEnd\\\"></textarea>\\n</div>\"\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar mokit = __webpack_require__(1);\n\t\n\t__webpack_require__(53);\n\t\n\tvar Viewer = new mokit.Component({\n\t template: __webpack_require__(54),\n\t\n\t /*istanbul ignore next*/data: function data() {\n\t return {\n\t html: '',\n\t alert: '预览区域'\n\t };\n\t },\n\t\n\t\n\t props: {\n\t mditor: null,\n\t value: {\n\t /*istanbul ignore next*/get: function get() {\n\t return this._value;\n\t },\n\t /*istanbul ignore next*/set: function set(value) {\n\t /*istanbul ignore next*/var _this = this;\n\t\n\t this._value = value;\n\t this.mditor.parser.parse(this._value, function (err, result) {\n\t /*istanbul ignore next*/_this.html = result || err;\n\t });\n\t }\n\t }\n\t },\n\t\n\t /*istanbul ignore next*/onClick: function onClick(event) {\n\t event.preventDefault();\n\t var tag = event.target;\n\t if (tag.tagName == 'A') {\n\t var href = tag.getAttribute('href');\n\t if (href) window.open(href, '_blank');\n\t }\n\t }\n\t});\n\t\n\tmodule.exports = Viewer;\n\n/***/ },\n/* 53 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 54 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<div class=\\\"viewer\\\" m:on:click=\\\"onClick\\\">\\n <div m:show=\\\"html\\\" class=\\\"markdown-body\\\" m:html=\\\"html\\\"></div>\\n <div m:show=\\\"!html\\\" class=\\\"alert\\\" m:html=\\\"alert\\\"></div>\\n</div>\"\n\n/***/ },\n/* 55 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar mokit = __webpack_require__(1);\n\tvar utils = __webpack_require__(46);\n\t\n\t__webpack_require__(56);\n\t\n\tvar CHECK_REGEXP = /^\\/[\\s\\S]+\\/(i|g|m)*$/;\n\t\n\tvar Finder = new mokit.Component({\n\t template: __webpack_require__(57),\n\t props: {\n\t mditor: null,\n\t active: false,\n\t findWord: '',\n\t replaceWord: ''\n\t },\n\t /*istanbul ignore next*/onReady: function onReady() {\n\t this.mditor.removeCommand('find');\n\t this.mditor.addCommand({\n\t name: 'find',\n\t key: '{cmd}+f',\n\t owner: this.mditor.$element,\n\t handler: this.show.bind(this, null)\n\t });\n\t this.mditor.removeCommand('cancel-find');\n\t this.mditor.addCommand({\n\t name: 'cancel-find',\n\t key: 'esc',\n\t owner: this.mditor.$element,\n\t handler: this.hide.bind(this)\n\t });\n\t },\n\t /*istanbul ignore next*/hide: function hide() {\n\t this.findWord = '';\n\t this.replaceWord = '';\n\t this.mditor.editor.markExp = null;\n\t this.active = false;\n\t },\n\t /*istanbul ignore next*/show: function show(text) {\n\t /*istanbul ignore next*/var _this = this;\n\t\n\t this.active = true;\n\t this.findWord = text || this.mditor.editor.getSelectText();\n\t if (this.active) {\n\t setTimeout(function () {\n\t /*istanbul ignore next*/_this.findBox.focus();\n\t }, 200);\n\t }\n\t this.mditor.editor.syncScroll();\n\t },\n\t\n\t watch: {\n\t /*istanbul ignore next*/findWord: function findWord() {\n\t /*istanbul ignore next*/var _this2 = this;\n\t\n\t if (!this.mditor || !this.mditor.editor) return;\n\t if (!this.findWord) {\n\t this.mditor.editor.markExp = null;\n\t } else {\n\t this.mditor.editor.markExp = this.parseRegexp(this.findWord);\n\t }\n\t setTimeout(function () {\n\t /*istanbul ignore next*/_this2.mditor.editor.activeMark(0);\n\t }, 100);\n\t }\n\t },\n\t /*istanbul ignore next*/parseRegexp: function parseRegexp(text, forceStr) {\n\t if (!forceStr && CHECK_REGEXP.test(text)) {\n\t try {\n\t return new Function( /*istanbul ignore next*/'return ' + text)();\n\t } catch (err) {\n\t return this.parseRegexp(text, true);\n\t }\n\t } else {\n\t return new RegExp(utils.escapeRegExp(text), 'gm');\n\t }\n\t },\n\t /*istanbul ignore next*/find: function find() {\n\t this.mditor.editor.activeMark();\n\t },\n\t /*istanbul ignore next*/replace: function replace() {\n\t this.mditor.value = this.mditor.value.replace(this.mditor.editor.markExp, this.replaceWord || '');\n\t },\n\t /*istanbul ignore next*/onFindEnter: function onFindEnter(event) {\n\t if (event.keyCode != 13) return;\n\t event.preventDefault();\n\t this.find();\n\t },\n\t /*istanbul ignore next*/onReplaceEnter: function onReplaceEnter(event) {\n\t if (event.keyCode != 13) return;\n\t event.preventDefault();\n\t this.replace();\n\t },\n\t /*istanbul ignore next*/onCompositionEnd: function onCompositionEnd(event) {\n\t event.target.blur();\n\t event.target.focus();\n\t }\n\t});\n\t\n\tmodule.exports = Finder;\n\n/***/ },\n/* 56 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 57 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<div class=\\\"finder {{active?'active':''}}\\\">\\n <div>\\n <input m:id=\\\"findBox\\\" m:model=\\\"findWord\\\" m:on:keydown=\\\"onFindEnter\\\" m:on:compositionend=\\\"onCompositionEnd\\\" type=\\\"text\\\" placeholder=\\\"回车查找,esc 关闭\\\">\\n <i class=\\\"fa fa-search\\\" aria-hidden=\\\"true\\\" tabindex=\\\"-1\\\" m:on:click=\\\"find()\\\"></i>\\n </div>\\n <div>\\n <input m:id=\\\"replaceBox\\\" m:model=\\\"replaceWord\\\" m:on:keydown=\\\"onReplaceEnter\\\" m:on:compositionend=\\\"onCompositionEnd\\\" type=\\\"text\\\"\\n placeholder=\\\"回车替换,esc 关闭\\\">\\n <i class=\\\"fa fa-exchange\\\" aria-hidden=\\\"true\\\" tabindex=\\\"-1\\\" m:on:click=\\\"replace()\\\"></i>\\n </div>\\n</div>\"\n\n/***/ },\n/* 58 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar shortcuts = __webpack_require__(59);\n\tvar utils = __webpack_require__(46);\n\t\n\tshortcuts.filter = function (event) {\n\t return !!event.target;\n\t};\n\t\n\tvar Shortcut = module.exports = function (mditor) {\n\t utils.defineFreezeProp(this, 'mditor', mditor);\n\t};\n\t\n\tShortcut.prototype._inRegion = function (target, owner) {\n\t if (!target) return false;\n\t owner = owner || this.mditor.editor.$element;\n\t if (utils.isFunction(owner)) owner = owner(this.mditor);\n\t return target === owner || this._inRegion(target.parentNode, owner);\n\t};\n\t\n\tShortcut.prototype.bind = function (key, cmd, allowDefault, owner) {\n\t /*istanbul ignore next*/var _this = this;\n\t\n\t var mditor = this.mditor;\n\t //检查参数\n\t if (!key || !cmd) return;\n\t key = key.replace('{cmd}', mditor.CMD);\n\t shortcuts(key, function (event) {\n\t if (! /*istanbul ignore next*/_this._inRegion(event.target, owner)) return;\n\t //禁用浏览器默认快捷键\n\t if (!allowDefault) {\n\t event.preventDefault();\n\t }\n\t if (cmd instanceof Function) {\n\t cmd.call(mditor, event);\n\t } else {\n\t mditor.execCommand(cmd, event);\n\t }\n\t setTimeout(function () {\n\t mditor.focus();\n\t }, 0);\n\t });\n\t};\n\t\n\tShortcut.prototype.unbind = function (key) {\n\t shortcuts.unbind(key);\n\t};\n\n/***/ },\n/* 59 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t(function (global) {\n\t var k,\n\t _handlers = {},\n\t _mods = {\n\t 16: false,\n\t 18: false,\n\t 17: false,\n\t 91: false\n\t },\n\t _scope = 'all',\n\t // modifier keys\n\t _MODIFIERS = {\n\t '⇧': 16,\n\t shift: 16,\n\t '⌥': 18,\n\t alt: 18,\n\t option: 18,\n\t '⌃': 17,\n\t ctrl: 17,\n\t control: 17,\n\t '⌘': 91,\n\t command: 91\n\t },\n\t // special keys\n\t _MAP = {\n\t backspace: 8,\n\t tab: 9,\n\t clear: 12,\n\t enter: 13,\n\t 'return': 13,\n\t esc: 27,\n\t escape: 27,\n\t space: 32,\n\t left: 37,\n\t up: 38,\n\t right: 39,\n\t down: 40,\n\t del: 46,\n\t 'delete': 46,\n\t home: 36,\n\t end: 35,\n\t pageup: 33,\n\t pagedown: 34,\n\t ',': 188,\n\t '.': 190,\n\t '/': 191,\n\t '`': 192,\n\t '-': 189,\n\t '=': 187,\n\t ';': 186,\n\t '\\'': 222,\n\t '[': 219,\n\t ']': 221,\n\t '\\\\': 220\n\t },\n\t code = function (x) {\n\t return _MAP[x] || x.toUpperCase().charCodeAt(0);\n\t },\n\t _downKeys = [];\n\t\n\t for (k = 1; k < 20; k++) _MAP['f' + k] = 111 + k;\n\t\n\t // IE doesn't support Array#indexOf, so have a simple replacement\n\t function index(array, item) {\n\t var i = array.length;\n\t while (i--)\n\t if (array[i] === item) return i;\n\t return -1;\n\t }\n\t\n\t // for comparing mods before unassignment\n\t function compareArray(a1, a2) {\n\t if (a1.length != a2.length) return false;\n\t for (var i = 0; i < a1.length; i++) {\n\t if (a1[i] !== a2[i]) return false;\n\t }\n\t return true;\n\t }\n\t\n\t var modifierMap = {\n\t 16: 'shiftKey',\n\t 18: 'altKey',\n\t 17: 'ctrlKey',\n\t 91: 'metaKey'\n\t };\n\t\n\t function updateModifierKey(event) {\n\t for (k in _mods) _mods[k] = event[modifierMap[k]];\n\t };\n\t\n\t // handle keydown event\n\t function dispatch(event) {\n\t var key, handler, k, i, modifiersMatch, scope;\n\t key = event.keyCode;\n\t\n\t if (index(_downKeys, key) == -1) {\n\t _downKeys.push(key);\n\t }\n\t\n\t // if a modifier key, set the key.<modifierkeyname> property to true and return\n\t if (key == 93 || key == 224) key = 91; // right command on webkit, command on Gecko\n\t if (key in _mods) {\n\t _mods[key] = true;\n\t // 'assignKey' from inside this closure is exported to window.key\n\t for (k in _MODIFIERS)\n\t if (_MODIFIERS[k] == key) assignKey[k] = true;\n\t return;\n\t }\n\t updateModifierKey(event);\n\t\n\t // see if we need to ignore the keypress (filter() can can be overridden)\n\t // by default ignore key presses if a select, textarea, or input is focused\n\t if (!assignKey.filter.call(this, event)) return;\n\t\n\t // abort if no potentially matching shortcuts found\n\t if (!(key in _handlers)) return;\n\t\n\t scope = getScope();\n\t\n\t // for each potential shortcut\n\t for (i = 0; i < _handlers[key].length; i++) {\n\t handler = _handlers[key][i];\n\t\n\t // see if it's in the current scope\n\t if (handler.scope == scope || handler.scope == 'all') {\n\t // check if modifiers match if any\n\t modifiersMatch = handler.mods.length > 0;\n\t for (k in _mods)\n\t if ((!_mods[k] && index(handler.mods, +k) > -1) ||\n\t (_mods[k] && index(handler.mods, +k) == -1)) modifiersMatch = false;\n\t // call the handler and stop the event if neccessary\n\t if ((handler.mods.length == 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch) {\n\t if (handler.method(event, handler) === false) {\n\t if (event.preventDefault) event.preventDefault();\n\t else event.returnValue = false;\n\t if (event.stopPropagation) event.stopPropagation();\n\t if (event.cancelBubble) event.cancelBubble = true;\n\t }\n\t }\n\t }\n\t }\n\t };\n\t\n\t // unset modifier keys on keyup\n\t function clearModifier(event) {\n\t var key = event.keyCode,\n\t k,\n\t i = index(_downKeys, key);\n\t\n\t // remove key from _downKeys\n\t if (i >= 0) {\n\t _downKeys.splice(i, 1);\n\t }\n\t\n\t if (key == 93 || key == 224) key = 91;\n\t if (key in _mods) {\n\t _mods[key] = false;\n\t for (k in _MODIFIERS)\n\t if (_MODIFIERS[k] == key) assignKey[k] = false;\n\t }\n\t };\n\t\n\t function resetModifiers() {\n\t for (k in _mods) _mods[k] = false;\n\t for (k in _MODIFIERS) assignKey[k] = false;\n\t };\n\t\n\t // parse and assign shortcut\n\t function assignKey(key, scope, method) {\n\t var keys, mods;\n\t keys = getKeys(key);\n\t if (method === undefined) {\n\t method = scope;\n\t scope = 'all';\n\t }\n\t\n\t // for each shortcut\n\t for (var i = 0; i < keys.length; i++) {\n\t // set modifier keys if any\n\t mods = [];\n\t key = keys[i].split('+');\n\t if (key.length > 1) {\n\t mods = getMods(key);\n\t key = [key[key.length - 1]];\n\t }\n\t // convert to keycode and...\n\t key = key[0]\n\t key = code(key);\n\t // ...store handler\n\t if (!(key in _handlers)) _handlers[key] = [];\n\t _handlers[key].push({\n\t shortcut: keys[i],\n\t scope: scope,\n\t method: method,\n\t key: keys[i],\n\t mods: mods\n\t });\n\t }\n\t };\n\t\n\t // unbind all handlers for given key in current scope\n\t function unbindKey(key, scope) {\n\t var multipleKeys, keys,\n\t mods = [],\n\t i, j, obj;\n\t\n\t multipleKeys = getKeys(key);\n\t\n\t for (j = 0; j < multipleKeys.length; j++) {\n\t keys = multipleKeys[j].split('+');\n\t\n\t if (keys.length > 1) {\n\t mods = getMods(keys);\n\t key = keys[keys.length - 1];\n\t }\n\t\n\t key = code(key);\n\t\n\t if (scope === undefined) {\n\t scope = getScope();\n\t }\n\t if (!_handlers[key]) {\n\t return;\n\t }\n\t for (i in _handlers[key]) {\n\t obj = _handlers[key][i];\n\t // only clear handlers if correct scope and mods match\n\t if (obj.scope === scope && compareArray(obj.mods, mods)) {\n\t _handlers[key][i] = {};\n\t }\n\t }\n\t }\n\t };\n\t\n\t // Returns true if the key with code 'keyCode' is currently down\n\t // Converts strings into key codes.\n\t function isPressed(keyCode) {\n\t if (typeof (keyCode) == 'string') {\n\t keyCode = code(keyCode);\n\t }\n\t return index(_downKeys, keyCode) != -1;\n\t }\n\t\n\t function getPressedKeyCodes() {\n\t return _downKeys.slice(0);\n\t }\n\t\n\t function filter(event) {\n\t var tagName = (event.target || event.srcElement).tagName;\n\t // ignore keypressed in any elements that support keyboard data input\n\t return !(tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA');\n\t }\n\t\n\t // initialize key.<modifier> to false\n\t for (k in _MODIFIERS) assignKey[k] = false;\n\t\n\t // set current scope (default 'all')\n\t function setScope(scope) {\n\t _scope = scope || 'all'\n\t };\n\t\n\t function getScope() {\n\t return _scope || 'all'\n\t };\n\t\n\t // delete all handlers for a given scope\n\t function deleteScope(scope) {\n\t var key, handlers, i;\n\t\n\t for (key in _handlers) {\n\t handlers = _handlers[key];\n\t for (i = 0; i < handlers.length;) {\n\t if (handlers[i].scope === scope) handlers.splice(i, 1);\n\t else i++;\n\t }\n\t }\n\t };\n\t\n\t // abstract key logic for assign and unassign\n\t function getKeys(key) {\n\t var keys;\n\t key = key.replace(/\\s/g, '');\n\t keys = key.split(',');\n\t if ((keys[keys.length - 1]) == '') {\n\t keys[keys.length - 2] += ',';\n\t }\n\t return keys;\n\t }\n\t\n\t // abstract mods logic for assign and unassign\n\t function getMods(key) {\n\t var mods = key.slice(0, key.length - 1);\n\t for (var mi = 0; mi < mods.length; mi++)\n\t mods[mi] = _MODIFIERS[mods[mi]];\n\t return mods;\n\t }\n\t\n\t // cross-browser events\n\t function addEvent(object, event, method) {\n\t if (object.addEventListener)\n\t object.addEventListener(event, method, false);\n\t else if (object.attachEvent)\n\t object.attachEvent('on' + event, function () {\n\t method(window.event)\n\t });\n\t };\n\t\n\t // set the handlers globally on document\n\t addEvent(document, 'keydown', function (event) {\n\t dispatch(event)\n\t }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48\n\t addEvent(document, 'keyup', clearModifier);\n\t\n\t // reset modifiers to false whenever the window is (re)focused.\n\t addEvent(window, 'focus', resetModifiers);\n\t\n\t // store previously defined key\n\t var previousKey = global.key;\n\t\n\t // restore previously defined key and return reference to our key object\n\t function noConflict() {\n\t var k = global.key;\n\t global.key = previousKey;\n\t return k;\n\t }\n\t\n\t // set window.key and window.key.set/get/deleteScope, and the default filter\n\t global.key = assignKey;\n\t global.key.setScope = setScope;\n\t global.key.getScope = getScope;\n\t global.key.deleteScope = deleteScope;\n\t global.key.filter = filter;\n\t global.key.isPressed = isPressed;\n\t global.key.getPressedKeyCodes = getPressedKeyCodes;\n\t global.key.noConflict = noConflict;\n\t global.key.unbind = unbindKey;\n\t\n\t if (true) module.exports = key;\n\t\n\t})(window);\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*istanbul ignore next*/'use strict';\n\t\n\tvar marked = __webpack_require__(61);\n\tvar Prism = __webpack_require__(62);\n\t\n\t//language \n\t__webpack_require__(63);\n\t__webpack_require__(64);\n\t__webpack_require__(65);\n\t__webpack_require__(66);\n\t__webpack_require__(67);\n\t__webpack_require__(68);\n\t__webpack_require__(69);\n\t__webpack_require__(70);\n\t__webpack_require__(71);\n\t__webpack_require__(72);\n\t__webpack_require__(73);\n\t__webpack_require__(74);\n\t__webpack_require__(75);\n\t__webpack_require__(76);\n\t__webpack_require__(77);\n\t__webpack_require__(78);\n\t__webpack_require__(79);\n\t__webpack_require__(80);\n\t__webpack_require__(81);\n\t__webpack_require__(82);\n\t__webpack_require__(83);\n\t__webpack_require__(84);\n\t__webpack_require__(85);\n\t__webpack_require__(86);\n\t__webpack_require__(87);\n\t__webpack_require__(88);\n\t__webpack_require__(89);\n\t__webpack_require__(90);\n\t__webpack_require__(91);\n\t__webpack_require__(92);\n\t__webpack_require__(93);\n\t__webpack_require__(94);\n\t__webpack_require__(95);\n\t__webpack_require__(96);\n\t__webpack_require__(97);\n\t__webpack_require__(98);\n\t__webpack_require__(99);\n\t__webpack_require__(100);\n\t__webpack_require__(101);\n\t__webpack_require__(102);\n\t__webpack_require__(103);\n\t__webpack_require__(104);\n\t__webpack_require__(105);\n\t__webpack_require__(106);\n\t__webpack_require__(107);\n\t__webpack_require__(108);\n\t__webpack_require__(109);\n\t\n\t//alias\n\tPrism.languages.js = Prism.languages.javascript;\n\tPrism.languages['c#'] = Prism.languages.csharp;\n\tPrism.languages['f#'] = Prism.languages.fsharp;\n\tPrism.languages.sh = Prism.languages.bash;\n\tPrism.languages.md = Prism.languages.markdown;\n\tPrism.languages.py = Prism.languages.python;\n\tPrism.languages.yml = Prism.languages.yaml;\n\tPrism.languages.rb = Prism.languages.ruby;\n\t\n\t/**\n\t * 定义解析类型\n\t **/\n\tvar Parser = function Parser(options) {\n\t\toptions = options || {};\n\t\tthis.options = options;\n\t};\n\t\n\tParser.highlights = {};\n\tParser.marked = marked;\n\tParser.Prism = Prism;\n\t\n\t//使标题解析 # 号可以无空格\n\tmarked.Lexer.rules.gfm.heading = marked.Lexer.rules.heading;\n\tmarked.Lexer.rules.tables.heading = marked.Lexer.rules.heading;\n\t\n\tvar renderer = new marked.Renderer();\n\tmarked.setOptions({\n\t\trenderer: renderer,\n\t\tgfm: true,\n\t\ttables: true,\n\t\tbreaks: true, //可行尾不加两空格直接换行\n\t\tpedantic: false,\n\t\tsanitize: false,\n\t\tsmartLists: true,\n\t\tsmartypants: false,\n\t\tmangle: false,\n\t\thighlight: function /*istanbul ignore next*/highlight(code, lang, callback) {\n\t\t\tif (Parser.highlights[lang]) {\n\t\t\t\tvar result = Parser.highlights[lang].parse(code, lang, callback);\n\t\t\t\tif (!callback) return result;\n\t\t\t} else if (Prism.languages[lang]) {\n\t\t\t\tvar _result = Prism.highlight(code, Prism.languages[lang]);\n\t\t\t\tif (callback) callback(null, _result);else return _result;\n\t\t\t} else {\n\t\t\t\tif (callback) callback(null, code);else return code;\n\t\t\t}\n\t\t}\n\t});\n\t\n\t/**\n\t * 解析方法\n\t **/\n\tParser.prototype.parse = function (mdText, callback) {\n\t\treturn marked(mdText, callback);\n\t};\n\t\n\tmodule.exports = Parser;\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/**\n\t * marked - a markdown parser\n\t * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)\n\t * https://github.com/chjj/marked\n\t */\n\t\n\t;(function() {\n\t\n\t/**\n\t * Block-Level Grammar\n\t */\n\t\n\tvar block = {\n\t newline: /^\\n+/,\n\t code: /^( {4}[^\\n]+\\n*)+/,\n\t fences: noop,\n\t hr: /^( *[-*_]){3,} *(?:\\n+|$)/,\n\t heading: /^ *(#{1,6}) *([^\\n]+?) *#* *(?:\\n+|$)/,\n\t nptable: noop,\n\t lheading: /^([^\\n]+)\\n *(=|-){2,} *(?:\\n+|$)/,\n\t blockquote: /^( *>[^\\n]+(\\n(?!def)[^\\n]+)*\\n*)+/,\n\t list: /^( *)(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,\n\t html: /^ *(?:comment *(?:\\n|\\s*$)|closed *(?:\\n{2,}|\\s*$)|closing *(?:\\n{2,}|\\s*$))/,\n\t def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +[\"(]([^\\n]+)[\")])? *(?:\\n+|$)/,\n\t table: noop,\n\t paragraph: /^((?:[^\\n]+\\n?(?!hr|heading|lheading|blockquote|tag|def))+)\\n*/,\n\t text: /^[^\\n]+/\n\t};\n\t\n\tblock.bullet = /(?:[*+-]|\\d+\\.)/;\n\tblock.item = /^( *)(bull) [^\\n]*(?:\\n(?!\\1bull )[^\\n]*)*/;\n\tblock.item = replace(block.item, 'gm')\n\t (/bull/g, block.bullet)\n\t ();\n\t\n\tblock.list = replace(block.list)\n\t (/bull/g, block.bullet)\n\t ('hr', '\\\\n+(?=\\\\1?(?:[-*_] *){3,}(?:\\\\n+|$))')\n\t ('def', '\\\\n+(?=' + block.def.source + ')')\n\t ();\n\t\n\tblock.blockquote = replace(block.blockquote)\n\t ('def', block.def)\n\t ();\n\t\n\tblock._tag = '(?!(?:'\n\t + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'\n\t + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'\n\t + '|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:/|[^\\\\w\\\\s@]*@)\\\\b';\n\t\n\tblock.html = replace(block.html)\n\t ('comment', /<!--[\\s\\S]*?-->/)\n\t ('closed', /<(tag)[\\s\\S]+?<\\/\\1>/)\n\t ('closing', /<tag(?:\"[^\"]*\"|'[^']*'|[^'\">])*?>/)\n\t (/tag/g, block._tag)\n\t ();\n\t\n\tblock.paragraph = replace(block.paragraph)\n\t ('hr', block.hr)\n\t ('heading', block.heading)\n\t ('lheading', block.lheading)\n\t ('blockquote', block.blockquote)\n\t ('tag', '<' + block._tag)\n\t ('def', block.def)\n\t ();\n\t\n\t/**\n\t * Normal Block Grammar\n\t */\n\t\n\tblock.normal = merge({}, block);\n\t\n\t/**\n\t * GFM Block Grammar\n\t */\n\t\n\tblock.gfm = merge({}, block.normal, {\n\t fences: /^ *(`{3,}|~{3,})[ \\.]*(\\S+)? *\\n([\\s\\S]*?)\\s*\\1 *(?:\\n+|$)/,\n\t paragraph: /^/,\n\t heading: /^ *(#{1,6}) +([^\\n]+?) *#* *(?:\\n+|$)/\n\t});\n\t\n\tblock.gfm.paragraph = replace(block.paragraph)\n\t ('(?!', '(?!'\n\t + block.gfm.fences.source.replace('\\\\1', '\\\\2') + '|'\n\t + block.list.source.replace('\\\\1', '\\\\3') + '|')\n\t ();\n\t\n\t/**\n\t * GFM + Tables Block Grammar\n\t */\n\t\n\tblock.tables = merge({}, block.gfm, {\n\t nptable: /^ *(\\S.*\\|.*)\\n *([-:]+ *\\|[-| :]*)\\n((?:.*\\|.*(?:\\n|$))*)\\n*/,\n\t table: /^ *\\|(.+)\\n *\\|( *[-:]+[-| :]*)\\n((?: *\\|.*(?:\\n|$))*)\\n*/\n\t});\n\t\n\t/**\n\t * Block Lexer\n\t */\n\t\n\tfunction Lexer(options) {\n\t this.tokens = [];\n\t this.tokens.links = {};\n\t this.options = options || marked.defaults;\n\t this.rules = block.normal;\n\t\n\t if (this.options.gfm) {\n\t if (this.options.tables) {\n\t this.rules = block.tables;\n\t } else {\n\t this.rules = block.gfm;\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Expose Block Rules\n\t */\n\t\n\tLexer.rules = block;\n\t\n\t/**\n\t * Static Lex Method\n\t */\n\t\n\tLexer.lex = function(src, options) {\n\t var lexer = new Lexer(options);\n\t return lexer.lex(src);\n\t};\n\t\n\t/**\n\t * Preprocessing\n\t */\n\t\n\tLexer.prototype.lex = function(src) {\n\t src = src\n\t .replace(/\\r\\n|\\r/g, '\\n')\n\t .replace(/\\t/g, ' ')\n\t .replace(/\\u00a0/g, ' ')\n\t .replace(/\\u2424/g, '\\n');\n\t\n\t return this.token(src, true);\n\t};\n\t\n\t/**\n\t * Lexing\n\t */\n\t\n\tLexer.prototype.token = function(src, top, bq) {\n\t var src = src.replace(/^ +$/gm, '')\n\t , next\n\t , loose\n\t , cap\n\t , bull\n\t , b\n\t , item\n\t , space\n\t , i\n\t , l;\n\t\n\t while (src) {\n\t // newline\n\t if (cap = this.rules.newline.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t if (cap[0].length > 1) {\n\t this.tokens.push({\n\t type: 'space'\n\t });\n\t }\n\t }\n\t\n\t // code\n\t if (cap = this.rules.code.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t cap = cap[0].replace(/^ {4}/gm, '');\n\t this.tokens.push({\n\t type: 'code',\n\t text: !this.options.pedantic\n\t ? cap.replace(/\\n+$/, '')\n\t : cap\n\t });\n\t continue;\n\t }\n\t\n\t // fences (gfm)\n\t if (cap = this.rules.fences.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t this.tokens.push({\n\t type: 'code',\n\t lang: cap[2],\n\t text: cap[3] || ''\n\t });\n\t continue;\n\t }\n\t\n\t // heading\n\t if (cap = this.rules.heading.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t this.tokens.push({\n\t type: 'heading',\n\t depth: cap[1].length,\n\t text: cap[2]\n\t });\n\t continue;\n\t }\n\t\n\t // table no leading pipe (gfm)\n\t if (top && (cap = this.rules.nptable.exec(src))) {\n\t src = src.substring(cap[0].length);\n\t\n\t item = {\n\t type: 'table',\n\t header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n\t align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n\t cells: cap[3].replace(/\\n$/, '').split('\\n')\n\t };\n\t\n\t for (i = 0; i < item.align.length; i++) {\n\t if (/^ *-+: *$/.test(item.align[i])) {\n\t item.align[i] = 'right';\n\t } else if (/^ *:-+: *$/.test(item.align[i])) {\n\t item.align[i] = 'center';\n\t } else if (/^ *:-+ *$/.test(item.align[i])) {\n\t item.align[i] = 'left';\n\t } else {\n\t item.align[i] = null;\n\t }\n\t }\n\t\n\t for (i = 0; i < item.cells.length; i++) {\n\t item.cells[i] = item.cells[i].split(/ *\\| */);\n\t }\n\t\n\t this.tokens.push(item);\n\t\n\t continue;\n\t }\n\t\n\t // lheading\n\t if (cap = this.rules.lheading.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t this.tokens.push({\n\t type: 'heading',\n\t depth: cap[2] === '=' ? 1 : 2,\n\t text: cap[1]\n\t });\n\t continue;\n\t }\n\t\n\t // hr\n\t if (cap = this.rules.hr.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t this.tokens.push({\n\t type: 'hr'\n\t });\n\t continue;\n\t }\n\t\n\t // blockquote\n\t if (cap = this.rules.blockquote.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t\n\t this.tokens.push({\n\t type: 'blockquote_start'\n\t });\n\t\n\t cap = cap[0].replace(/^ *> ?/gm, '');\n\t\n\t // Pass `top` to keep the current\n\t // \"toplevel\" state. This is exactly\n\t // how markdown.pl works.\n\t this.token(cap, top, true);\n\t\n\t this.tokens.push({\n\t type: 'blockquote_end'\n\t });\n\t\n\t continue;\n\t }\n\t\n\t // list\n\t if (cap = this.rules.list.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t bull = cap[2];\n\t\n\t this.tokens.push({\n\t type: 'list_start',\n\t ordered: bull.length > 1\n\t });\n\t\n\t // Get each top-level item.\n\t cap = cap[0].match(this.rules.item);\n\t\n\t next = false;\n\t l = cap.length;\n\t i = 0;\n\t\n\t for (; i < l; i++) {\n\t item = cap[i];\n\t\n\t // Remove the list item's bullet\n\t // so it is seen as the next token.\n\t space = item.length;\n\t item = item.replace(/^ *([*+-]|\\d+\\.) +/, '');\n\t\n\t // Outdent whatever the\n\t // list item contains. Hacky.\n\t if (~item.indexOf('\\n ')) {\n\t space -= item.length;\n\t item = !this.options.pedantic\n\t ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n\t : item.replace(/^ {1,4}/gm, '');\n\t }\n\t\n\t // Determine whether the next list item belongs here.\n\t // Backpedal if it does not belong in this list.\n\t if (this.options.smartLists && i !== l - 1) {\n\t b = block.bullet.exec(cap[i + 1])[0];\n\t if (bull !== b && !(bull.length > 1 && b.length > 1)) {\n\t src = cap.slice(i + 1).join('\\n') + src;\n\t i = l - 1;\n\t }\n\t }\n\t\n\t // Determine whether item is loose or not.\n\t // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n\t // for discount behavior.\n\t loose = next || /\\n\\n(?!\\s*$)/.test(item);\n\t if (i !== l - 1) {\n\t next = item.charAt(item.length - 1) === '\\n';\n\t if (!loose) loose = next;\n\t }\n\t\n\t this.tokens.push({\n\t type: loose\n\t ? 'loose_item_start'\n\t : 'list_item_start'\n\t });\n\t\n\t // Recurse.\n\t this.token(item, false, bq);\n\t\n\t this.tokens.push({\n\t type: 'list_item_end'\n\t });\n\t }\n\t\n\t this.tokens.push({\n\t type: 'list_end'\n\t });\n\t\n\t continue;\n\t }\n\t\n\t // html\n\t if (cap = this.rules.html.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t this.tokens.push({\n\t type: this.options.sanitize\n\t ? 'paragraph'\n\t : 'html',\n\t pre: !this.options.sanitizer\n\t && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n\t text: cap[0]\n\t });\n\t continue;\n\t }\n\t\n\t // def\n\t if ((!bq && top) && (cap = this.rules.def.exec(src))) {\n\t src = src.substring(cap[0].length);\n\t this.tokens.links[cap[1].toLowerCase()] = {\n\t href: cap[2],\n\t title: cap[3]\n\t };\n\t continue;\n\t }\n\t\n\t // table (gfm)\n\t if (top && (cap = this.rules.table.exec(src))) {\n\t src = src.substring(cap[0].length);\n\t\n\t item = {\n\t type: 'table',\n\t header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n\t align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n\t cells: cap[3].replace(/(?: *\\| *)?\\n$/, '').split('\\n')\n\t };\n\t\n\t for (i = 0; i < item.align.length; i++) {\n\t if (/^ *-+: *$/.test(item.align[i])) {\n\t item.align[i] = 'right';\n\t } else if (/^ *:-+: *$/.test(item.align[i])) {\n\t item.align[i] = 'center';\n\t } else if (/^ *:-+ *$/.test(item.align[i])) {\n\t item.align[i] = 'left';\n\t } else {\n\t item.align[i] = null;\n\t }\n\t }\n\t\n\t for (i = 0; i < item.cells.length; i++) {\n\t item.cells[i] = item.cells[i]\n\t .replace(/^ *\\| *| *\\| *$/g, '')\n\t .split(/ *\\| */);\n\t }\n\t\n\t this.tokens.push(item);\n\t\n\t continue;\n\t }\n\t\n\t // top-level paragraph\n\t if (top && (cap = this.rules.paragraph.exec(src))) {\n\t src = src.substring(cap[0].length);\n\t this.tokens.push({\n\t type: 'paragraph',\n\t text: cap[1].charAt(cap[1].length - 1) === '\\n'\n\t ? cap[1].slice(0, -1)\n\t : cap[1]\n\t });\n\t continue;\n\t }\n\t\n\t // text\n\t if (cap = this.rules.text.exec(src)) {\n\t // Top-level should never reach here.\n\t src = src.substring(cap[0].length);\n\t this.tokens.push({\n\t type: 'text',\n\t text: cap[0]\n\t });\n\t continue;\n\t }\n\t\n\t if (src) {\n\t throw new\n\t Error('Infinite loop on byte: ' + src.charCodeAt(0));\n\t }\n\t }\n\t\n\t return this.tokens;\n\t};\n\t\n\t/**\n\t * Inline-Level Grammar\n\t */\n\t\n\tvar inline = {\n\t escape: /^\\\\([\\\\`*{}\\[\\]()#+\\-.!_>])/,\n\t autolink: /^<([^ >]+(@|:\\/)[^ >]+)>/,\n\t url: noop,\n\t tag: /^<!--[\\s\\S]*?-->|^<\\/?\\w+(?:\"[^\"]*\"|'[^']*'|[^'\">])*?>/,\n\t link: /^!?\\[(inside)\\]\\(href\\)/,\n\t reflink: /^!?\\[(inside)\\]\\s*\\[([^\\]]*)\\]/,\n\t nolink: /^!?\\[((?:\\[[^\\]]*\\]|[^\\[\\]])*)\\]/,\n\t strong: /^__([\\s\\S]+?)__(?!_)|^\\*\\*([\\s\\S]+?)\\*\\*(?!\\*)/,\n\t em: /^\\b_((?:[^_]|__)+?)_\\b|^\\*((?:\\*\\*|[\\s\\S])+?)\\*(?!\\*)/,\n\t code: /^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/,\n\t br: /^ {2,}\\n(?!\\s*$)/,\n\t del: noop,\n\t text: /^[\\s\\S]+?(?=[\\\\<!\\[_*`]| {2,}\\n|$)/\n\t};\n\t\n\tinline._inside = /(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*/;\n\tinline._href = /\\s*<?([\\s\\S]*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*/;\n\t\n\tinline.link = replace(inline.link)\n\t ('inside', inline._inside)\n\t ('href', inline._href)\n\t ();\n\t\n\tinline.reflink = replace(inline.reflink)\n\t ('inside', inline._inside)\n\t ();\n\t\n\t/**\n\t * Normal Inline Grammar\n\t */\n\t\n\tinline.normal = merge({}, inline);\n\t\n\t/**\n\t * Pedantic Inline Grammar\n\t */\n\t\n\tinline.pedantic = merge({}, inline.normal, {\n\t strong: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n\t em: /^_(?=\\S)([\\s\\S]*?\\S)_(?!_)|^\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)/\n\t});\n\t\n\t/**\n\t * GFM Inline Grammar\n\t */\n\t\n\tinline.gfm = merge({}, inline.normal, {\n\t escape: replace(inline.escape)('])', '~|])')(),\n\t url: /^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/,\n\t del: /^~~(?=\\S)([\\s\\S]*?\\S)~~/,\n\t text: replace(inline.text)\n\t (']|', '~]|')\n\t ('|', '|https?://|')\n\t ()\n\t});\n\t\n\t/**\n\t * GFM + Line Breaks Inline Grammar\n\t */\n\t\n\tinline.breaks = merge({}, inline.gfm, {\n\t br: replace(inline.br)('{2,}', '*')(),\n\t text: replace(inline.gfm.text)('{2,}', '*')()\n\t});\n\t\n\t/**\n\t * Inline Lexer & Compiler\n\t */\n\t\n\tfunction InlineLexer(links, options) {\n\t this.options = options || marked.defaults;\n\t this.links = links;\n\t this.rules = inline.normal;\n\t this.renderer = this.options.renderer || new Renderer;\n\t this.renderer.options = this.options;\n\t\n\t if (!this.links) {\n\t throw new\n\t Error('Tokens array requires a `links` property.');\n\t }\n\t\n\t if (this.options.gfm) {\n\t if (this.options.breaks) {\n\t this.rules = inline.breaks;\n\t } else {\n\t this.rules = inline.gfm;\n\t }\n\t } else if (this.options.pedantic) {\n\t this.rules = inline.pedantic;\n\t }\n\t}\n\t\n\t/**\n\t * Expose Inline Rules\n\t */\n\t\n\tInlineLexer.rules = inline;\n\t\n\t/**\n\t * Static Lexing/Compiling Method\n\t */\n\t\n\tInlineLexer.output = function(src, links, options) {\n\t var inline = new InlineLexer(links, options);\n\t return inline.output(src);\n\t};\n\t\n\t/**\n\t * Lexing/Compiling\n\t */\n\t\n\tInlineLexer.prototype.output = function(src) {\n\t var out = ''\n\t , link\n\t , text\n\t , href\n\t , cap;\n\t\n\t while (src) {\n\t // escape\n\t if (cap = this.rules.escape.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t out += cap[1];\n\t continue;\n\t }\n\t\n\t // autolink\n\t if (cap = this.rules.autolink.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t if (cap[2] === '@') {\n\t text = cap[1].charAt(6) === ':'\n\t ? this.mangle(cap[1].substring(7))\n\t : this.mangle(cap[1]);\n\t href = this.mangle('mailto:') + text;\n\t } else {\n\t text = escape(cap[1]);\n\t href = text;\n\t }\n\t out += this.renderer.link(href, null, text);\n\t continue;\n\t }\n\t\n\t // url (gfm)\n\t if (!this.inLink && (cap = this.rules.url.exec(src))) {\n\t src = src.substring(cap[0].length);\n\t text = escape(cap[1]);\n\t href = text;\n\t out += this.renderer.link(href, null, text);\n\t continue;\n\t }\n\t\n\t // tag\n\t if (cap = this.rules.tag.exec(src)) {\n\t if (!this.inLink && /^<a /i.test(cap[0])) {\n\t this.inLink = true;\n\t } else if (this.inLink && /^<\\/a>/i.test(cap[0])) {\n\t this.inLink = false;\n\t }\n\t src = src.substring(cap[0].length);\n\t out += this.options.sanitize\n\t ? this.options.sanitizer\n\t ? this.options.sanitizer(cap[0])\n\t : escape(cap[0])\n\t : cap[0]\n\t continue;\n\t }\n\t\n\t // link\n\t if (cap = this.rules.link.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t this.inLink = true;\n\t out += this.outputLink(cap, {\n\t href: cap[2],\n\t title: cap[3]\n\t });\n\t this.inLink = false;\n\t continue;\n\t }\n\t\n\t // reflink, nolink\n\t if ((cap = this.rules.reflink.exec(src))\n\t || (cap = this.rules.nolink.exec(src))) {\n\t src = src.substring(cap[0].length);\n\t link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n\t link = this.links[link.toLowerCase()];\n\t if (!link || !link.href) {\n\t out += cap[0].charAt(0);\n\t src = cap[0].substring(1) + src;\n\t continue;\n\t }\n\t this.inLink = true;\n\t out += this.outputLink(cap, link);\n\t this.inLink = false;\n\t continue;\n\t }\n\t\n\t // strong\n\t if (cap = this.rules.strong.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t out += this.renderer.strong(this.output(cap[2] || cap[1]));\n\t continue;\n\t }\n\t\n\t // em\n\t if (cap = this.rules.em.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t out += this.renderer.em(this.output(cap[2] || cap[1]));\n\t continue;\n\t }\n\t\n\t // code\n\t if (cap = this.rules.code.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t out += this.renderer.codespan(escape(cap[2], true));\n\t continue;\n\t }\n\t\n\t // br\n\t if (cap = this.rules.br.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t out += this.renderer.br();\n\t continue;\n\t }\n\t\n\t // del (gfm)\n\t if (cap = this.rules.del.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t out += this.renderer.del(this.output(cap[1]));\n\t continue;\n\t }\n\t\n\t // text\n\t if (cap = this.rules.text.exec(src)) {\n\t src = src.substring(cap[0].length);\n\t out += this.renderer.text(escape(this.smartypants(cap[0])));\n\t continue;\n\t }\n\t\n\t if (src) {\n\t throw new\n\t Error('Infinite loop on byte: ' + src.charCodeAt(0));\n\t }\n\t }\n\t\n\t return out;\n\t};\n\t\n\t/**\n\t * Compile Link\n\t */\n\t\n\tInlineLexer.prototype.outputLink = function(cap, link) {\n\t var href = escape(link.href)\n\t , title = link.title ? escape(link.title) : null;\n\t\n\t return cap[0].charAt(0) !== '!'\n\t ? this.renderer.link(href, title, this.output(cap[1]))\n\t : this.renderer.image(href, title, escape(cap[1]));\n\t};\n\t\n\t/**\n\t * Smartypants Transformations\n\t */\n\t\n\tInlineLexer.prototype.smartypants = function(text) {\n\t if (!this.options.smartypants) return text;\n\t return text\n\t // em-dashes\n\t .replace(/---/g, '\\u2014')\n\t // en-dashes\n\t .replace(/--/g, '\\u2013')\n\t // opening singles\n\t .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n\t // closing singles & apostrophes\n\t .replace(/'/g, '\\u2019')\n\t // opening doubles\n\t .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n\t // closing doubles\n\t .replace(/\"/g, '\\u201d')\n\t // ellipses\n\t .replace(/\\.{3}/g, '\\u2026');\n\t};\n\t\n\t/**\n\t * Mangle Links\n\t */\n\t\n\tInlineLexer.prototype.mangle = function(text) {\n\t if (!this.options.mangle) return text;\n\t var out = ''\n\t , l = text.length\n\t , i = 0\n\t , ch;\n\t\n\t for (; i < l; i++) {\n\t ch = text.charCodeAt(i);\n\t if (Math.random() > 0.5) {\n\t ch = 'x' + ch.toString(16);\n\t }\n\t out += '&#' + ch + ';';\n\t }\n\t\n\t return out;\n\t};\n\t\n\t/**\n\t * Renderer\n\t */\n\t\n\tfunction Renderer(options) {\n\t this.options = options || {};\n\t}\n\t\n\tRenderer.prototype.code = function(code, lang, escaped) {\n\t if (this.options.highlight) {\n\t var out = this.options.highlight(code, lang);\n\t if (out != null && out !== code) {\n\t escaped = true;\n\t code = out;\n\t }\n\t }\n\t\n\t if (!lang) {\n\t return '<pre><code>'\n\t + (escaped ? code : escape(code, true))\n\t + '\\n</code></pre>';\n\t }\n\t\n\t return '<pre><code class=\"'\n\t + this.options.langPrefix\n\t + escape(lang, true)\n\t + '\">'\n\t + (escaped ? code : escape(code, true))\n\t + '\\n</code></pre>\\n';\n\t};\n\t\n\tRenderer.prototype.blockquote = function(quote) {\n\t return '<blockquote>\\n' + quote + '</blockquote>\\n';\n\t};\n\t\n\tRenderer.prototype.html = function(html) {\n\t return html;\n\t};\n\t\n\tRenderer.prototype.heading = function(text, level, raw) {\n\t return '<h'\n\t + level\n\t + ' id=\"'\n\t + this.options.headerPrefix\n\t + raw.toLowerCase().replace(/[^\\w]+/g, '-')\n\t + '\">'\n\t + text\n\t + '</h'\n\t + level\n\t + '>\\n';\n\t};\n\t\n\tRenderer.prototype.hr = function() {\n\t return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n\t};\n\t\n\tRenderer.prototype.list = function(body, ordered) {\n\t var type = ordered ? 'ol' : 'ul';\n\t return '<' + type + '>\\n' + body + '</' + type + '>\\n';\n\t};\n\t\n\tRenderer.prototype.listitem = function(text) {\n\t return '<li>' + text + '</li>\\n';\n\t};\n\t\n\tRenderer.prototype.paragraph = function(text) {\n\t return '<p>' + text + '</p>\\n';\n\t};\n\t\n\tRenderer.prototype.table = function(header, body) {\n\t return '<table>\\n'\n\t + '<thead>\\n'\n\t + header\n\t + '</thead>\\n'\n\t + '<tbody>\\n'\n\t + body\n\t + '</tbody>\\n'\n\t + '</table>\\n';\n\t};\n\t\n\tRenderer.prototype.tablerow = function(content) {\n\t return '<tr>\\n' + content + '</tr>\\n';\n\t};\n\t\n\tRenderer.prototype.tablecell = function(content, flags) {\n\t var type = flags.header ? 'th' : 'td';\n\t var tag = flags.align\n\t ? '<' + type + ' style=\"text-align:' + flags.align + '\">'\n\t : '<' + type + '>';\n\t return tag + content + '</' + type + '>\\n';\n\t};\n\t\n\t// span level renderer\n\tRenderer.prototype.strong = function(text) {\n\t return '<strong>' + text + '</strong>';\n\t};\n\t\n\tRenderer.prototype.em = function(text) {\n\t return '<em>' + text + '</em>';\n\t};\n\t\n\tRenderer.prototype.codespan = function(text) {\n\t return '<code>' + text + '</code>';\n\t};\n\t\n\tRenderer.prototype.br = function() {\n\t return this.options.xhtml ? '<br/>' : '<br>';\n\t};\n\t\n\tRenderer.prototype.del = function(text) {\n\t return '<del>' + text + '</del>';\n\t};\n\t\n\tRenderer.prototype.link = function(href, title, text) {\n\t if (this.options.sanitize) {\n\t try {\n\t var prot = decodeURIComponent(unescape(href))\n\t .replace(/[^\\w:]/g, '')\n\t .toLowerCase();\n\t } catch (e) {\n\t return '';\n\t }\n\t if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0) {\n\t return '';\n\t }\n\t }\n\t var out = '<a href=\"' + href + '\"';\n\t if (title) {\n\t out += ' title=\"' + title + '\"';\n\t }\n\t out += '>' + text + '</a>';\n\t return out;\n\t};\n\t\n\tRenderer.prototype.image = function(href, title, text) {\n\t var out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n\t if (title) {\n\t out += ' title=\"' + title + '\"';\n\t }\n\t out += this.options.xhtml ? '/>' : '>';\n\t return out;\n\t};\n\t\n\tRenderer.prototype.text = function(text) {\n\t return text;\n\t};\n\t\n\t/**\n\t * Parsing & Compiling\n\t */\n\t\n\tfunction Parser(options) {\n\t this.tokens = [];\n\t this.token = null;\n\t this.options = options || marked.defaults;\n\t this.options.renderer = this.options.renderer || new Renderer;\n\t this.renderer = this.options.renderer;\n\t this.renderer.options = this.options;\n\t}\n\t\n\t/**\n\t * Static Parse Method\n\t */\n\t\n\tParser.parse = function(src, options, renderer) {\n\t var parser = new Parser(options, renderer);\n\t return parser.parse(src);\n\t};\n\t\n\t/**\n\t * Parse Loop\n\t */\n\t\n\tParser.prototype.parse = function(src) {\n\t this.inline = new InlineLexer(src.links, this.options, this.renderer);\n\t this.tokens = src.reverse();\n\t\n\t var out = '';\n\t while (this.next()) {\n\t out += this.tok();\n\t }\n\t\n\t return out;\n\t};\n\t\n\t/**\n\t * Next Token\n\t */\n\t\n\tParser.prototype.next = function() {\n\t return this.token = this.tokens.pop();\n\t};\n\t\n\t/**\n\t * Preview Next Token\n\t */\n\t\n\tParser.prototype.peek = function() {\n\t return this.tokens[this.tokens.length - 1] || 0;\n\t};\n\t\n\t/**\n\t * Parse Text Tokens\n\t */\n\t\n\tParser.prototype.parseText = function() {\n\t var body = this.token.text;\n\t\n\t while (this.peek().type === 'text') {\n\t body += '\\n' + this.next().text;\n\t }\n\t\n\t return this.inline.output(body);\n\t};\n\t\n\t/**\n\t * Parse Current Token\n\t */\n\t\n\tParser.prototype.tok = function() {\n\t switch (this.token.type) {\n\t case 'space': {\n\t return '';\n\t }\n\t case 'hr': {\n\t return this.renderer.hr();\n\t }\n\t case 'heading': {\n\t return this.renderer.heading(\n\t this.inline.output(this.token.text),\n\t this.token.depth,\n\t this.token.text);\n\t }\n\t case 'code': {\n\t return this.renderer.code(this.token.text,\n\t this.token.lang,\n\t this.token.escaped);\n\t }\n\t case 'table': {\n\t var header = ''\n\t , body = ''\n\t , i\n\t , row\n\t , cell\n\t , flags\n\t , j;\n\t\n\t // header\n\t cell = '';\n\t for (i = 0; i < this.token.header.length; i++) {\n\t flags = { header: true, align: this.token.align[i] };\n\t cell += this.renderer.tablecell(\n\t this.inline.output(this.token.header[i]),\n\t { header: true, align: this.token.align[i] }\n\t );\n\t }\n\t header += this.renderer.tablerow(cell);\n\t\n\t for (i = 0; i < this.token.cells.length; i++) {\n\t row = this.token.cells[i];\n\t\n\t cell = '';\n\t for (j = 0; j < row.length; j++) {\n\t cell += this.renderer.tablecell(\n\t this.inline.output(row[j]),\n\t { header: false, align: this.token.align[j] }\n\t );\n\t }\n\t\n\t body += this.renderer.tablerow(cell);\n\t }\n\t return this.renderer.table(header, body);\n\t }\n\t case 'blockquote_start': {\n\t var body = '';\n\t\n\t while (this.next().type !== 'blockquote_end') {\n\t body += this.tok();\n\t }\n\t\n\t return this.renderer.blockquote(body);\n\t }\n\t case 'list_start': {\n\t var body = ''\n\t , ordered = this.token.ordered;\n\t\n\t while (this.next().type !== 'list_end') {\n\t body += this.tok();\n\t }\n\t\n\t return this.renderer.list(body, ordered);\n\t }\n\t case 'list_item_start': {\n\t var body = '';\n\t\n\t while (this.next().type !== 'list_item_end') {\n\t body += this.token.type === 'text'\n\t ? this.parseText()\n\t : this.tok();\n\t }\n\t\n\t return this.renderer.listitem(body);\n\t }\n\t case 'loose_item_start': {\n\t var body = '';\n\t\n\t while (this.next().type !== 'list_item_end') {\n\t body += this.tok();\n\t }\n\t\n\t return this.renderer.listitem(body);\n\t }\n\t case 'html': {\n\t var html = !this.token.pre && !this.options.pedantic\n\t ? this.inline.output(this.token.text)\n\t : this.token.text;\n\t return this.renderer.html(html);\n\t }\n\t case 'paragraph': {\n\t return this.renderer.paragraph(this.inline.output(this.token.text));\n\t }\n\t case 'text': {\n\t return this.renderer.paragraph(this.parseText());\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Helpers\n\t */\n\t\n\tfunction escape(html, encode) {\n\t return html\n\t .replace(!encode ? /&(?!#?\\w+;)/g : /&/g, '&')\n\t .replace(/</g, '<')\n\t .replace(/>/g, '>')\n\t .replace(/\"/g, '"')\n\t .replace(/'/g, ''');\n\t}\n\t\n\tfunction unescape(html) {\n\t\t// explicitly match decimal, hex, and named HTML entities \n\t return html.replace(/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/g, function(_, n) {\n\t n = n.toLowerCase();\n\t if (n === 'colon') return ':';\n\t if (n.charAt(0) === '#') {\n\t return n.charAt(1) === 'x'\n\t ? String.fromCharCode(parseInt(n.substring(2), 16))\n\t : String.fromCharCode(+n.substring(1));\n\t }\n\t return '';\n\t });\n\t}\n\t\n\tfunction replace(regex, opt) {\n\t regex = regex.source;\n\t opt = opt || '';\n\t return function self(name, val) {\n\t if (!name) return new RegExp(regex, opt);\n\t val = val.source || val;\n\t val = val.replace(/(^|[^\\[])\\^/g, '$1');\n\t regex = regex.replace(name, val);\n\t return self;\n\t };\n\t}\n\t\n\tfunction noop() {}\n\tnoop.exec = noop;\n\t\n\tfunction merge(obj) {\n\t var i = 1\n\t , target\n\t , key;\n\t\n\t for (; i < arguments.length; i++) {\n\t target = arguments[i];\n\t for (key in target) {\n\t if (Object.prototype.hasOwnProperty.call(target, key)) {\n\t obj[key] = target[key];\n\t }\n\t }\n\t }\n\t\n\t return obj;\n\t}\n\t\n\t\n\t/**\n\t * Marked\n\t */\n\t\n\tfunction marked(src, opt, callback) {\n\t if (callback || typeof opt === 'function') {\n\t if (!callback) {\n\t callback = opt;\n\t opt = null;\n\t }\n\t\n\t opt = merge({}, marked.defaults, opt || {});\n\t\n\t var highlight = opt.highlight\n\t , tokens\n\t , pending\n\t , i = 0;\n\t\n\t try {\n\t tokens = Lexer.lex(src, opt)\n\t } catch (e) {\n\t return callback(e);\n\t }\n\t\n\t pending = tokens.length;\n\t\n\t var done = function(err) {\n\t if (err) {\n\t opt.highlight = highlight;\n\t return callback(err);\n\t }\n\t\n\t var out;\n\t\n\t try {\n\t out = Parser.parse(tokens, opt);\n\t } catch (e) {\n\t err = e;\n\t }\n\t\n\t opt.highlight = highlight;\n\t\n\t return err\n\t ? callback(err)\n\t : callback(null, out);\n\t };\n\t\n\t if (!highlight || highlight.length < 3) {\n\t return done();\n\t }\n\t\n\t delete opt.highlight;\n\t\n\t if (!pending) return done();\n\t\n\t for (; i < tokens.length; i++) {\n\t (function(token) {\n\t if (token.type !== 'code') {\n\t return --pending || done();\n\t }\n\t return highlight(token.text, token.lang, function(err, code) {\n\t if (err) return done(err);\n\t if (code == null || code === token.text) {\n\t return --pending || done();\n\t }\n\t token.text = code;\n\t token.escaped = true;\n\t --pending || done();\n\t });\n\t })(tokens[i]);\n\t }\n\t\n\t return;\n\t }\n\t try {\n\t if (opt) opt = merge({}, marked.defaults, opt);\n\t return Parser.parse(Lexer.lex(src, opt), opt);\n\t } catch (e) {\n\t e.message += '\\nPlease report this to https://github.com/chjj/marked.';\n\t if ((opt || marked.defaults).silent) {\n\t return '<p>An error occured:</p><pre>'\n\t + escape(e.message + '', true)\n\t + '</pre>';\n\t }\n\t throw e;\n\t }\n\t}\n\t\n\t/**\n\t * Options\n\t */\n\t\n\tmarked.options =\n\tmarked.setOptions = function(opt) {\n\t merge(marked.defaults, opt);\n\t return marked;\n\t};\n\t\n\tmarked.defaults = {\n\t gfm: true,\n\t tables: true,\n\t breaks: false,\n\t pedantic: false,\n\t sanitize: false,\n\t sanitizer: null,\n\t mangle: true,\n\t smartLists: false,\n\t silent: false,\n\t highlight: null,\n\t langPrefix: 'lang-',\n\t smartypants: false,\n\t headerPrefix: '',\n\t renderer: new Renderer,\n\t xhtml: false\n\t};\n\t\n\t/**\n\t * Expose\n\t */\n\t\n\tmarked.Parser = Parser;\n\tmarked.parser = Parser.parse;\n\t\n\tmarked.Renderer = Renderer;\n\t\n\tmarked.Lexer = Lexer;\n\tmarked.lexer = Lexer.lex;\n\t\n\tmarked.InlineLexer = InlineLexer;\n\tmarked.inlineLexer = InlineLexer.output;\n\t\n\tmarked.parse = marked;\n\t\n\tif (true) {\n\t module.exports = marked;\n\t} else if (typeof define === 'function' && define.amd) {\n\t define(function() { return marked; });\n\t} else {\n\t this.marked = marked;\n\t}\n\t\n\t}).call(function() {\n\t return this || (typeof window !== 'undefined' ? window : global);\n\t}());\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 62 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {\n\t/* **********************************************\n\t Begin prism-core.js\n\t********************************************** */\n\t\n\tvar _self = (typeof window !== 'undefined')\n\t\t? window // if in browser\n\t\t: (\n\t\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {} // if in node js\n\t\t);\n\t\n\t/**\n\t * Prism: Lightweight, robust, elegant syntax highlighting\n\t * MIT license http://www.opensource.org/licenses/mit-license.php/\n\t * @author Lea Verou http://lea.verou.me\n\t */\n\t\n\tvar Prism = (function(){\n\t\n\t// Private helper vars\n\tvar lang = /\\blang(?:uage)?-(\\w+)\\b/i;\n\tvar uniqueId = 0;\n\t\n\tvar _ = _self.Prism = {\n\t\tutil: {\n\t\t\tencode: function (tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (_.util.type(tokens) === 'Array') {\n\t\t\t\t\treturn tokens.map(_.util.encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\t\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).match(/\\[object (\\w+)\\]/)[1];\n\t\t\t},\n\t\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\t\n\t\t\t// Deep clone a language definition (e.g. to extend it)\n\t\t\tclone: function (o) {\n\t\t\t\tvar type = _.util.type(o);\n\t\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tvar clone = {};\n\t\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = _.util.clone(o[key]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\treturn clone;\n\t\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\t// Check for existence for IE8\n\t\t\t\t\t\treturn o.map && o.map(function(v) { return _.util.clone(v); });\n\t\t\t\t}\n\t\n\t\t\t\treturn o;\n\t\t\t}\n\t\t},\n\t\n\t\tlanguages: {\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\t\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\t\n\t\t\t\treturn lang;\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * Insert a token before another token in a language literal\n\t\t\t * As this needs to recreate the object (we cannot actually insert before keys in object literals),\n\t\t\t * we cannot just provide an object, we need anobject and a key.\n\t\t\t * @param inside The key (or language id) of the parent\n\t\t\t * @param before The key to insert before. If not provided, the function appends instead.\n\t\t\t * @param insert Object with the key/value pairs to insert\n\t\t\t * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || _.languages;\n\t\t\t\tvar grammar = root[inside];\n\t\n\t\t\t\tif (arguments.length == 2) {\n\t\t\t\t\tinsert = arguments[1];\n\t\n\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\tgrammar[newToken] = insert[newToken];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn grammar;\n\t\t\t\t}\n\t\n\t\t\t\tvar ret = {};\n\t\n\t\t\t\tfor (var token in grammar) {\n\t\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\t\n\t\t\t\t\t\tif (token == before) {\n\t\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function(key, value) {\n\t\t\t\t\tif (value === root[inside] && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\n\t\t\t\treturn root[inside] = ret;\n\t\t\t},\n\t\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\t\n\t\t\t\t\t\tif (_.util.type(o[i]) === 'Object' && !visited[_.util.objId(o[i])]) {\n\t\t\t\t\t\t\tvisited[_.util.objId(o[i])] = true;\n\t\t\t\t\t\t\t_.languages.DFS(o[i], callback, null, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (_.util.type(o[i]) === 'Array' && !visited[_.util.objId(o[i])]) {\n\t\t\t\t\t\t\tvisited[_.util.objId(o[i])] = true;\n\t\t\t\t\t\t\t_.languages.DFS(o[i], callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tplugins: {},\n\t\n\t\thighlightAll: function(async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\t\n\t\t\t_.hooks.run(\"before-highlightall\", env);\n\t\n\t\t\tvar elements = env.elements || document.querySelectorAll(env.selector);\n\t\n\t\t\tfor (var i=0, element; element = elements[i++];) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\t\n\t\thighlightElement: function(element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language, grammar, parent = element;\n\t\n\t\t\twhile (parent && !lang.test(parent.className)) {\n\t\t\t\tparent = parent.parentNode;\n\t\t\t}\n\t\n\t\t\tif (parent) {\n\t\t\t\tlanguage = (parent.className.match(lang) || [,''])[1].toLowerCase();\n\t\t\t\tgrammar = _.languages[language];\n\t\t\t}\n\t\n\t\t\t// Set language on the element, if not present\n\t\t\telement.className = element.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n\t\n\t\t\t// Set language on the parent, for styling\n\t\t\tparent = element.parentNode;\n\t\n\t\t\tif (/pre/i.test(parent.nodeName)) {\n\t\t\t\tparent.className = parent.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n\t\t\t}\n\t\n\t\t\tvar code = element.textContent;\n\t\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\t\n\t\t\t_.hooks.run('before-sanity-check', env);\n\t\n\t\t\tif (!env.code || !env.grammar) {\n\t\t\t\tif (env.code) {\n\t\t\t\t\tenv.element.textContent = env.code;\n\t\t\t\t}\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t_.hooks.run('before-highlight', env);\n\t\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\t\n\t\t\t\tworker.onmessage = function(evt) {\n\t\t\t\t\tenv.highlightedCode = evt.data;\n\t\n\t\t\t\t\t_.hooks.run('before-insert', env);\n\t\n\t\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\t\n\t\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\t};\n\t\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tenv.highlightedCode = _.highlight(env.code, env.grammar, env.language);\n\t\n\t\t\t\t_.hooks.run('before-insert', env);\n\t\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\t\n\t\t\t\tcallback && callback.call(element);\n\t\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t}\n\t\t},\n\t\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar tokens = _.tokenize(text, grammar);\n\t\t\treturn Token.stringify(_.util.encode(tokens), language);\n\t\t},\n\t\n\t\ttokenize: function(text, grammar, language) {\n\t\t\tvar Token = _.Token;\n\t\n\t\t\tvar strarr = [text];\n\t\n\t\t\tvar rest = grammar.rest;\n\t\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\t\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\t\n\t\t\ttokenloop: for (var token in grammar) {\n\t\t\t\tif(!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\n\t\t\t\tvar patterns = grammar[token];\n\t\t\t\tpatterns = (_.util.type(patterns) === \"Array\") ? patterns : [patterns];\n\t\n\t\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\t\tvar pattern = patterns[j],\n\t\t\t\t\t\tinside = pattern.inside,\n\t\t\t\t\t\tlookbehind = !!pattern.lookbehind,\n\t\t\t\t\t\tgreedy = !!pattern.greedy,\n\t\t\t\t\t\tlookbehindLength = 0,\n\t\t\t\t\t\talias = pattern.alias;\n\t\n\t\t\t\t\tif (greedy && !pattern.pattern.global) {\n\t\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\t\tvar flags = pattern.pattern.toString().match(/[imuy]*$/)[0];\n\t\t\t\t\t\tpattern.pattern = RegExp(pattern.pattern.source, flags + \"g\");\n\t\t\t\t\t}\n\t\n\t\t\t\t\tpattern = pattern.pattern || pattern;\n\t\n\t\t\t\t\t// Don’t cache length as it changes during the loop\n\t\t\t\t\tfor (var i=0, pos = 0; i<strarr.length; pos += strarr[i].length, ++i) {\n\t\n\t\t\t\t\t\tvar str = strarr[i];\n\t\n\t\t\t\t\t\tif (strarr.length > text.length) {\n\t\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\t\tbreak tokenloop;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tpattern.lastIndex = 0;\n\t\n\t\t\t\t\t\tvar match = pattern.exec(str),\n\t\t\t\t\t\t delNum = 1;\n\t\n\t\t\t\t\t\t// Greedy patterns can override/remove up to two previously matched tokens\n\t\t\t\t\t\tif (!match && greedy && i != strarr.length - 1) {\n\t\t\t\t\t\t\tpattern.lastIndex = pos;\n\t\t\t\t\t\t\tmatch = pattern.exec(text);\n\t\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tvar from = match.index + (lookbehind ? match[1].length : 0),\n\t\t\t\t\t\t\t to = match.index + match[0].length,\n\t\t\t\t\t\t\t k = i,\n\t\t\t\t\t\t\t p = pos;\n\t\n\t\t\t\t\t\t\tfor (var len = strarr.length; k < len && p < to; ++k) {\n\t\t\t\t\t\t\t\tp += strarr[k].length;\n\t\t\t\t\t\t\t\t// Move the index i to the element in strarr that is closest to from\n\t\t\t\t\t\t\t\tif (from >= p) {\n\t\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\t\tpos = p;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\t * If strarr[i] is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\t\t * If strarr[k - 1] is greedy we are in conflict with another greedy pattern\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tif (strarr[i] instanceof Token || strarr[k - 1].greedy) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Number of tokens to delete and replace with the new match\n\t\t\t\t\t\t\tdelNum = k - i;\n\t\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif(lookbehind) {\n\t\t\t\t\t\t\tlookbehindLength = match[1].length;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tvar from = match.index + lookbehindLength,\n\t\t\t\t\t\t match = match[0].slice(lookbehindLength),\n\t\t\t\t\t\t to = from + match.length,\n\t\t\t\t\t\t before = str.slice(0, from),\n\t\t\t\t\t\t after = str.slice(to);\n\t\n\t\t\t\t\t\tvar args = [i, delNum];\n\t\n\t\t\t\t\t\tif (before) {\n\t\t\t\t\t\t\targs.push(before);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tvar wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy);\n\t\n\t\t\t\t\t\targs.push(wrapped);\n\t\n\t\t\t\t\t\tif (after) {\n\t\t\t\t\t\t\targs.push(after);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tArray.prototype.splice.apply(strarr, args);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn strarr;\n\t\t},\n\t\n\t\thooks: {\n\t\t\tall: {},\n\t\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\t\n\t\t\t\thooks[name] = hooks[name] || [];\n\t\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\t\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\t\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tfor (var i=0, callback; callback = callbacks[i++];) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t\n\tvar Token = _.Token = function(type, content, alias, matchedStr, greedy) {\n\t\tthis.type = type;\n\t\tthis.content = content;\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || \"\").length|0;\n\t\tthis.greedy = !!greedy;\n\t};\n\t\n\tToken.stringify = function(o, language, parent) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\n\t\tif (_.util.type(o) === 'Array') {\n\t\t\treturn o.map(function(element) {\n\t\t\t\treturn Token.stringify(element, language, o);\n\t\t\t}).join('');\n\t\t}\n\t\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: Token.stringify(o.content, language, parent),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language,\n\t\t\tparent: parent\n\t\t};\n\t\n\t\tif (env.type == 'comment') {\n\t\t\tenv.attributes['spellcheck'] = 'true';\n\t\t}\n\t\n\t\tif (o.alias) {\n\t\t\tvar aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];\n\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t}\n\t\n\t\t_.hooks.run('wrap', env);\n\t\n\t\tvar attributes = Object.keys(env.attributes).map(function(name) {\n\t\t\treturn name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '"') + '\"';\n\t\t}).join(' ');\n\t\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + (attributes ? ' ' + attributes : '') + '>' + env.content + '</' + env.tag + '>';\n\t\n\t};\n\t\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _self.Prism;\n\t\t}\n\t \t// In worker\n\t\t_self.addEventListener('message', function(evt) {\n\t\t\tvar message = JSON.parse(evt.data),\n\t\t\t lang = message.language,\n\t\t\t code = message.code,\n\t\t\t immediateClose = message.immediateClose;\n\t\n\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\tif (immediateClose) {\n\t\t\t\t_self.close();\n\t\t\t}\n\t\t}, false);\n\t\n\t\treturn _self.Prism;\n\t}\n\t\n\t//Get current script and highlight\n\tvar script = document.currentScript || [].slice.call(document.getElementsByTagName(\"script\")).pop();\n\t\n\tif (script) {\n\t\t_.filename = script.src;\n\t\n\t\tif (document.addEventListener && !script.hasAttribute('data-manual')) {\n\t\t\tif(document.readyState !== \"loading\") {\n\t\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\t\twindow.requestAnimationFrame(_.highlightAll);\n\t\t\t\t} else {\n\t\t\t\t\twindow.setTimeout(_.highlightAll, 16);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdocument.addEventListener('DOMContentLoaded', _.highlightAll);\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn _self.Prism;\n\t\n\t})();\n\t\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = Prism;\n\t}\n\t\n\t// hack for components to work correctly in node.js\n\tif (typeof global !== 'undefined') {\n\t\tglobal.Prism = Prism;\n\t}\n\t\n\t\n\t/* **********************************************\n\t Begin prism-markup.js\n\t********************************************** */\n\t\n\tPrism.languages.markup = {\n\t\t'comment': /<!--[\\w\\W]*?-->/,\n\t\t'prolog': /<\\?[\\w\\W]+?\\?>/,\n\t\t'doctype': /<!DOCTYPE[\\w\\W]+?>/i,\n\t\t'cdata': /<!\\[CDATA\\[[\\w\\W]*?]]>/i,\n\t\t'tag': {\n\t\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\w\\W])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/i,\n\t\t\tinside: {\n\t\t\t\t'tag': {\n\t\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/i,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=(?:('|\")[\\w\\W]*?(\\1)|[^\\s>]+)/i,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /[=>\"']/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\/?>/,\n\t\t\t\t'attr-name': {\n\t\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t}\n\t\t},\n\t\t'entity': /&#?[\\da-z]{1,8};/i\n\t};\n\t\n\t// Plugin to make entity title show the real entity, idea by Roman Komarov\n\tPrism.hooks.add('wrap', function(env) {\n\t\n\t\tif (env.type === 'entity') {\n\t\t\tenv.attributes['title'] = env.content.replace(/&/, '&');\n\t\t}\n\t});\n\t\n\tPrism.languages.xml = Prism.languages.markup;\n\tPrism.languages.html = Prism.languages.markup;\n\tPrism.languages.mathml = Prism.languages.markup;\n\tPrism.languages.svg = Prism.languages.markup;\n\t\n\t\n\t/* **********************************************\n\t Begin prism-css.js\n\t********************************************** */\n\t\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\w\\W]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: /@[\\w-]+?.*?(;|(?=\\s*\\{))/i,\n\t\t\tinside: {\n\t\t\t\t'rule': /@[\\w-]+/\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': /url\\((?:([\"'])(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1|.*?)\\)/i,\n\t\t'selector': /[^\\{\\}\\s][^\\{\\};]*?(?=\\s*\\{)/,\n\t\t'string': {\n\t\t\tpattern: /(\"|')(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': /(\\b|\\B)[\\w-]+(?=\\s*:)/i,\n\t\t'important': /\\B!important\\b/i,\n\t\t'function': /[-a-z0-9]+(?=\\()/i,\n\t\t'punctuation': /[(){};:]/\n\t};\n\t\n\tPrism.languages.css['atrule'].inside.rest = Prism.util.clone(Prism.languages.css);\n\t\n\tif (Prism.languages.markup) {\n\t\tPrism.languages.insertBefore('markup', 'tag', {\n\t\t\t'style': {\n\t\t\t\tpattern: /(<style[\\w\\W]*?>)[\\w\\W]*?(?=<\\/style>)/i,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: Prism.languages.css,\n\t\t\t\talias: 'language-css'\n\t\t\t}\n\t\t});\n\t\t\n\t\tPrism.languages.insertBefore('inside', 'attr-value', {\n\t\t\t'style-attr': {\n\t\t\t\tpattern: /\\s*style=(\"|').*?\\1/i,\n\t\t\t\tinside: {\n\t\t\t\t\t'attr-name': {\n\t\t\t\t\t\tpattern: /^\\s*style/i,\n\t\t\t\t\t\tinside: Prism.languages.markup.tag.inside\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /^\\s*=\\s*['\"]|['\"]\\s*$/,\n\t\t\t\t\t'attr-value': {\n\t\t\t\t\t\tpattern: /.+/i,\n\t\t\t\t\t\tinside: Prism.languages.css\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\talias: 'language-css'\n\t\t\t}\n\t\t}, Prism.languages.markup.tag);\n\t}\n\t\n\t/* **********************************************\n\t Begin prism-clike.js\n\t********************************************** */\n\t\n\tPrism.languages.clike = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\w\\W]*?\\*\\//,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'string': {\n\t\t\tpattern: /([\"'])(\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'class-name': {\n\t\t\tpattern: /((?:\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+)|(?:catch\\s+\\())[a-z0-9_\\.\\\\]+/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\tpunctuation: /(\\.|\\\\)/\n\t\t\t}\n\t\t},\n\t\t'keyword': /\\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n\t\t'boolean': /\\b(true|false)\\b/,\n\t\t'function': /[a-z0-9_]+(?=\\()/i,\n\t\t'number': /\\b-?(?:0x[\\da-f]+|\\d*\\.?\\d+(?:e[+-]?\\d+)?)\\b/i,\n\t\t'operator': /--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,\n\t\t'punctuation': /[{}[\\];(),.:]/\n\t};\n\t\n\t\n\t/* **********************************************\n\t Begin prism-javascript.js\n\t********************************************** */\n\t\n\tPrism.languages.javascript = Prism.languages.extend('clike', {\n\t\t'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/,\n\t\t'number': /\\b-?(0x[\\dA-Fa-f]+|0b[01]+|0o[0-7]+|\\d*\\.?\\d+([Ee][+-]?\\d+)?|NaN|Infinity)\\b/,\n\t\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t\t'function': /[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*(?=\\()/i,\n\t\t'operator': /--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*\\*?|\\/|~|\\^|%|\\.{3}/\n\t});\n\t\n\tPrism.languages.insertBefore('javascript', 'keyword', {\n\t\t'regex': {\n\t\t\tpattern: /(^|[^/])\\/(?!\\/)(\\[.+?]|\\\\.|[^/\\\\\\r\\n])+\\/[gimyu]{0,5}(?=\\s*($|[\\r\\n,.;})]))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t});\n\t\n\tPrism.languages.insertBefore('javascript', 'string', {\n\t\t'template-string': {\n\t\t\tpattern: /`(?:\\\\\\\\|\\\\?[^\\\\])*?`/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t\t},\n\t\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t}\n\t});\n\t\n\tif (Prism.languages.markup) {\n\t\tPrism.languages.insertBefore('markup', 'tag', {\n\t\t\t'script': {\n\t\t\t\tpattern: /(<script[\\w\\W]*?>)[\\w\\W]*?(?=<\\/script>)/i,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: Prism.languages.javascript,\n\t\t\t\talias: 'language-javascript'\n\t\t\t}\n\t\t});\n\t}\n\t\n\tPrism.languages.js = Prism.languages.javascript;\n\t\n\t/* **********************************************\n\t Begin prism-file-highlight.js\n\t********************************************** */\n\t\n\t(function () {\n\t\tif (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tself.Prism.fileHighlight = function() {\n\t\n\t\t\tvar Extensions = {\n\t\t\t\t'js': 'javascript',\n\t\t\t\t'py': 'python',\n\t\t\t\t'rb': 'ruby',\n\t\t\t\t'ps1': 'powershell',\n\t\t\t\t'psm1': 'powershell',\n\t\t\t\t'sh': 'bash',\n\t\t\t\t'bat': 'batch',\n\t\t\t\t'h': 'c',\n\t\t\t\t'tex': 'latex'\n\t\t\t};\n\t\n\t\t\tif(Array.prototype.forEach) { // Check to prevent error in IE8\n\t\t\t\tArray.prototype.slice.call(document.querySelectorAll('pre[data-src]')).forEach(function (pre) {\n\t\t\t\t\tvar src = pre.getAttribute('data-src');\n\t\n\t\t\t\t\tvar language, parent = pre;\n\t\t\t\t\tvar lang = /\\blang(?:uage)?-(?!\\*)(\\w+)\\b/i;\n\t\t\t\t\twhile (parent && !lang.test(parent.className)) {\n\t\t\t\t\t\tparent = parent.parentNode;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tlanguage = (pre.className.match(lang) || [, ''])[1];\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (!language) {\n\t\t\t\t\t\tvar extension = (src.match(/\\.(\\w+)$/) || [, ''])[1];\n\t\t\t\t\t\tlanguage = Extensions[extension] || extension;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar code = document.createElement('code');\n\t\t\t\t\tcode.className = 'language-' + language;\n\t\n\t\t\t\t\tpre.textContent = '';\n\t\n\t\t\t\t\tcode.textContent = 'Loading…';\n\t\n\t\t\t\t\tpre.appendChild(code);\n\t\n\t\t\t\t\tvar xhr = new XMLHttpRequest();\n\t\n\t\t\t\t\txhr.open('GET', src, true);\n\t\n\t\t\t\t\txhr.onreadystatechange = function () {\n\t\t\t\t\t\tif (xhr.readyState == 4) {\n\t\n\t\t\t\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\t\t\t\tcode.textContent = xhr.responseText;\n\t\n\t\t\t\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (xhr.status >= 400) {\n\t\t\t\t\t\t\t\tcode.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tcode.textContent = '✖ Error: File does not exist or is empty';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\n\t\t\t\t\txhr.send(null);\n\t\t\t\t});\n\t\t\t}\n\t\n\t\t};\n\t\n\t\tdocument.addEventListener('DOMContentLoaded', self.Prism.fileHighlight);\n\t\n\t})();\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 63 */\n/***/ function(module, exports) {\n\n\tPrism.languages.java = Prism.languages.extend('clike', {\n\t\t'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/,\n\t\t'number': /\\b0b[01]+\\b|\\b0x[\\da-f]*\\.?[\\da-fp\\-]+\\b|\\b\\d*\\.?\\d+(?:e[+-]?\\d+)?[df]?\\b/i,\n\t\t'operator': {\n\t\t\tpattern: /(^|[^.])(?:\\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\\|[|=]?|\\*=?|\\/=?|%=?|\\^=?|[?:~])/m,\n\t\t\tlookbehind: true\n\t\t}\n\t});\n\t\n\tPrism.languages.insertBefore('java','function', {\n\t\t'annotation': {\n\t\t\talias: 'punctuation',\n\t\t\tpattern: /(^|[^.])@\\w+/,\n\t\t\tlookbehind: true\n\t\t}\n\t});\n\n\n/***/ },\n/* 64 */\n/***/ function(module, exports) {\n\n\tPrism.languages.csharp = Prism.languages.extend('clike', {\n\t\t'keyword': /\\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\\b/,\n\t\t'string': [\n\t\t\t/@(\"|')(\\1\\1|\\\\\\1|\\\\?(?!\\1)[\\s\\S])*\\1/,\n\t\t\t/(\"|')(\\\\?.)*?\\1/\n\t\t],\n\t\t'number': /\\b-?(0x[\\da-f]+|\\d*\\.?\\d+f?)\\b/i\n\t});\n\t\n\tPrism.languages.insertBefore('csharp', 'keyword', {\n\t\t'generic-method': {\n\t\t\tpattern: /[a-z0-9_]+\\s*<[^>\\r\\n]+?>\\s*(?=\\()/i,\n\t\t\talias: 'function',\n\t\t\tinside: {\n\t\t\t\tkeyword: Prism.languages.csharp.keyword,\n\t\t\t\tpunctuation: /[<>(),.:]/\n\t\t\t}\n\t\t},\n\t\t'preprocessor': {\n\t\t\tpattern: /(^\\s*)#.*/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'property',\n\t\t\tinside: {\n\t\t\t\t// highlight preprocessor directives as keywords\n\t\t\t\t'directive': {\n\t\t\t\t\tpattern: /(\\s*#)\\b(define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\\b/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\n/***/ },\n/* 65 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Original by Aaron Harun: http://aahacreative.com/2012/07/31/php-syntax-highlighting-prism/\n\t * Modified by Miles Johnson: http://milesj.me\n\t *\n\t * Supports the following:\n\t * \t\t- Extends clike syntax\n\t * \t\t- Support for PHP 5.3+ (namespaces, traits, generators, etc)\n\t * \t\t- Smarter constant and function matching\n\t *\n\t * Adds the following new token classes:\n\t * \t\tconstant, delimiter, variable, function, package\n\t */\n\t\n\tPrism.languages.php = Prism.languages.extend('clike', {\n\t\t'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,\n\t\t'constant': /\\b[A-Z0-9_]{2,}\\b/,\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\w\\W]*?\\*\\/|\\/\\/.*)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t});\n\t\n\t// Shell-like comments are matched after strings, because they are less\n\t// common than strings containing hashes...\n\tPrism.languages.insertBefore('php', 'class-name', {\n\t\t'shell-comment': {\n\t\t\tpattern: /(^|[^\\\\])#.*/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'comment'\n\t\t}\n\t});\n\t\n\tPrism.languages.insertBefore('php', 'keyword', {\n\t\t'delimiter': /\\?>|<\\?(?:php)?/i,\n\t\t'variable': /\\$\\w+\\b/i,\n\t\t'package': {\n\t\t\tpattern: /(\\\\|namespace\\s+|use\\s+)[\\w\\\\]+/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\tpunctuation: /\\\\/\n\t\t\t}\n\t\t}\n\t});\n\t\n\t// Must be defined after the function pattern\n\tPrism.languages.insertBefore('php', 'operator', {\n\t\t'property': {\n\t\t\tpattern: /(->)[\\w]+/,\n\t\t\tlookbehind: true\n\t\t}\n\t});\n\t\n\t// Add HTML support of the markup language exists\n\tif (Prism.languages.markup) {\n\t\n\t\t// Tokenize all inline PHP blocks that are wrapped in <?php ?>\n\t\t// This allows for easy PHP + markup highlighting\n\t\tPrism.hooks.add('before-highlight', function(env) {\n\t\t\tif (env.language !== 'php') {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tenv.tokenStack = [];\n\t\n\t\t\tenv.backupCode = env.code;\n\t\t\tenv.code = env.code.replace(/(?:<\\?php|<\\?)[\\w\\W]*?(?:\\?>)/ig, function(match) {\n\t\t\t\tenv.tokenStack.push(match);\n\t\n\t\t\t\treturn '{{{PHP' + env.tokenStack.length + '}}}';\n\t\t\t});\n\t\t});\n\t\n\t\t// Restore env.code for other plugins (e.g. line-numbers)\n\t\tPrism.hooks.add('before-insert', function(env) {\n\t\t\tif (env.language === 'php') {\n\t\t\t\tenv.code = env.backupCode;\n\t\t\t\tdelete env.backupCode;\n\t\t\t}\n\t\t});\n\t\n\t\t// Re-insert the tokens after highlighting\n\t\tPrism.hooks.add('after-highlight', function(env) {\n\t\t\tif (env.language !== 'php') {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tfor (var i = 0, t; t = env.tokenStack[i]; i++) {\n\t\t\t\t// The replace prevents $$, $&, $`, $', $n, $nn from being interpreted as special patterns\n\t\t\t\tenv.highlightedCode = env.highlightedCode.replace('{{{PHP' + (i + 1) + '}}}', Prism.highlight(t, env.grammar, 'php').replace(/\\$/g, '$$$$'));\n\t\t\t}\n\t\n\t\t\tenv.element.innerHTML = env.highlightedCode;\n\t\t});\n\t\n\t\t// Wrap tokens in classes that are missing them\n\t\tPrism.hooks.add('wrap', function(env) {\n\t\t\tif (env.language === 'php' && env.type === 'markup') {\n\t\t\t\tenv.content = env.content.replace(/(\\{\\{\\{PHP[0-9]+\\}\\}\\})/g, \"<span class=\\\"token php\\\">$1</span>\");\n\t\t\t}\n\t\t});\n\t\n\t\t// Add the rules before all others\n\t\tPrism.languages.insertBefore('php', 'comment', {\n\t\t\t'markup': {\n\t\t\t\tpattern: /<[^?]\\/?(.*?)>/,\n\t\t\t\tinside: Prism.languages.markup\n\t\t\t},\n\t\t\t'php': /\\{\\{\\{PHP[0-9]+\\}\\}\\}/\n\t\t});\n\t}\n\n\n/***/ },\n/* 66 */\n/***/ function(module, exports) {\n\n\tPrism.languages.python= {\n\t\t'triple-quoted-string': {\n\t\t\tpattern: /\"\"\"[\\s\\S]+?\"\"\"|'''[\\s\\S]+?'''/,\n\t\t\talias: 'string'\n\t\t},\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\\\\])#.*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /(\"|')(?:\\\\\\\\|\\\\?[^\\\\\\r\\n])*?\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'function' : {\n\t\t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\\()/g,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'class-name': {\n\t\t\tpattern: /(\\bclass\\s+)[a-z0-9_]+/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword' : /\\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\\b/,\n\t\t'boolean' : /\\b(?:True|False)\\b/,\n\t\t'number' : /\\b-?(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?j?\\b/i,\n\t\t'operator' : /[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]|\\b(?:or|and|not)\\b/,\n\t\t'punctuation' : /[{}[\\];(),.:]/\n\t};\n\n\n/***/ },\n/* 67 */\n/***/ function(module, exports) {\n\n\tPrism.languages.json = {\n\t 'property': /\"(?:\\\\.|[^|\"])*\"(?=\\s*:)/ig,\n\t 'string': /\"(?!:)(?:\\\\.|[^|\"])*\"(?!:)/g,\n\t 'number': /\\b-?(0x[\\dA-Fa-f]+|\\d*\\.?\\d+([Ee][+-]?\\d+)?)\\b/g,\n\t 'punctuation': /[{}[\\]);,]/g,\n\t 'operator': /:/g,\n\t 'boolean': /\\b(true|false)\\b/gi,\n\t 'null': /\\bnull\\b/gi\n\t};\n\t\n\tPrism.languages.jsonp = Prism.languages.json;\n\n\n/***/ },\n/* 68 */\n/***/ function(module, exports) {\n\n\t(function(Prism) {\n\t\t// TODO:\n\t\t// - Add CSS highlighting inside <style> tags\n\t\t// - Add support for multi-line code blocks\n\t\t// - Add support for interpolation #{} and !{}\n\t\t// - Add support for tag interpolation #[]\n\t\t// - Add explicit support for plain text using |\n\t\t// - Add support for markup embedded in plain text\n\t\n\t\tPrism.languages.jade = {\n\t\n\t\t\t// Multiline stuff should appear before the rest\n\t\n\t\t\t// This handles both single-line and multi-line comments\n\t\t\t'comment': {\n\t\t\t\tpattern: /(^([\\t ]*))\\/\\/.*((?:\\r?\\n|\\r)\\2[\\t ]+.+)*/m,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\n\t\t\t// All the tag-related part is in lookbehind\n\t\t\t// so that it can be highlighted by the \"tag\" pattern\n\t\t\t'multiline-script': {\n\t\t\t\tpattern: /(^([\\t ]*)script\\b.*\\.[\\t ]*)((?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ]+.+|\\s*?(?=\\r?\\n|\\r)))+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\n\t\t\t// See at the end of the file for known filters\n\t\t\t'filter': {\n\t\t\t\tpattern: /(^([\\t ]*)):.+((?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ]+.+|\\s*?(?=\\r?\\n|\\r)))+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'filter-name': {\n\t\t\t\t\t\tpattern: /^:[\\w-]+/,\n\t\t\t\t\t\talias: 'variable'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\n\t\t\t'multiline-plain-text': {\n\t\t\t\tpattern: /(^([\\t ]*)[\\w\\-#.]+\\.[\\t ]*)((?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ]+.+|\\s*?(?=\\r?\\n|\\r)))+/m,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'markup': {\n\t\t\t\tpattern: /(^[\\t ]*)<.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\trest: Prism.languages.markup\n\t\t\t\t}\n\t\t\t},\n\t\t\t'doctype': {\n\t\t\t\tpattern: /((?:^|\\n)[\\t ]*)doctype(?: .+)?/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\n\t\t\t// This handle all conditional and loop keywords\n\t\t\t'flow-control': {\n\t\t\t\tpattern: /(^[\\t ]*)(?:if|unless|else|case|when|default|each|while)\\b(?: .+)?/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'each': {\n\t\t\t\t\t\tpattern: /^each .+? in\\b/,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'keyword': /\\b(?:each|in)\\b/,\n\t\t\t\t\t\t\t'punctuation': /,/\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'branch': {\n\t\t\t\t\t\tpattern: /^(?:if|unless|else|case|when|default|while)\\b/,\n\t\t\t\t\t\talias: 'keyword'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'keyword': {\n\t\t\t\tpattern: /(^[\\t ]*)(?:block|extends|include|append|prepend)\\b.+/m,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'mixin': [\n\t\t\t\t// Declaration\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^[\\t ]*)mixin .+/m,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'keyword': /^mixin/,\n\t\t\t\t\t\t'function': /\\w+(?=\\s*\\(|\\s*$)/,\n\t\t\t\t\t\t'punctuation': /[(),.]/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// Usage\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^[\\t ]*)\\+.+/m,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'name': {\n\t\t\t\t\t\t\tpattern: /^\\+\\w+/,\n\t\t\t\t\t\t\talias: 'function'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'rest': Prism.languages.javascript\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t'script': {\n\t\t\t\tpattern: /(^[\\t ]*script(?:(?:&[^(]+)?\\([^)]+\\))*[\\t ]+).+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\n\t\t\t'plain-text': {\n\t\t\t\tpattern: /(^[\\t ]*(?!-)[\\w\\-#.]*[\\w\\-](?:(?:&[^(]+)?\\([^)]+\\))*\\/?[\\t ]+).+/m,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'tag': {\n\t\t\t\tpattern: /(^[\\t ]*)(?!-)[\\w\\-#.]*[\\w\\-](?:(?:&[^(]+)?\\([^)]+\\))*\\/?:?/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'attributes': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /&[^(]+\\([^)]+\\)/,\n\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /\\([^)]+\\)/,\n\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\t'attr-value': {\n\t\t\t\t\t\t\t\t\tpattern: /(=\\s*)(?:\\{[^}]*\\}|[^,)\\r\\n]+)/,\n\t\t\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t'attr-name': /[\\w-]+(?=\\s*!?=|\\s*[,)])/,\n\t\t\t\t\t\t\t\t'punctuation': /[!=(),]+/\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t'punctuation': /:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'code': [\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^[\\t ]*(?:-|!?=)).+/m,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t'punctuation': /[.\\-!=|]+/\n\t\t};\n\t\n\t\tvar filter_pattern = '(^([\\\\t ]*)):{{filter_name}}((?:\\\\r?\\\\n|\\\\r(?!\\\\n))(?:\\\\2[\\\\t ]+.+|\\\\s*?(?=\\\\r?\\\\n|\\\\r)))+';\n\t\n\t\t// Non exhaustive list of available filters and associated languages\n\t\tvar filters = [\n\t\t\t{filter:'atpl',language:'twig'},\n\t\t\t{filter:'coffee',language:'coffeescript'},\n\t\t\t'ejs',\n\t\t\t'handlebars',\n\t\t\t'hogan',\n\t\t\t'less',\n\t\t\t'livescript',\n\t\t\t'markdown',\n\t\t\t'mustache',\n\t\t\t'plates',\n\t\t\t{filter:'sass',language:'scss'},\n\t\t\t'stylus',\n\t\t\t'swig'\n\t\n\t\t];\n\t\tvar all_filters = {};\n\t\tfor (var i = 0, l = filters.length; i < l; i++) {\n\t\t\tvar filter = filters[i];\n\t\t\tfilter = typeof filter === 'string' ? {filter: filter, language: filter} : filter;\n\t\t\tif (Prism.languages[filter.language]) {\n\t\t\t\tall_filters['filter-' + filter.filter] = {\n\t\t\t\t\tpattern: RegExp(filter_pattern.replace('{{filter_name}}', filter.filter), 'm'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'filter-name': {\n\t\t\t\t\t\t\tpattern: /^:[\\w-]+/,\n\t\t\t\t\t\t\talias: 'variable'\n\t\t\t\t\t\t},\n\t\t\t\t\t\trest: Prism.languages[filter.language]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\tPrism.languages.insertBefore('jade', 'filter', all_filters);\n\t\n\t}(Prism));\n\n/***/ },\n/* 69 */\n/***/ function(module, exports) {\n\n\tPrism.languages.yaml={scalar:{pattern:/([\\-:]\\s*(![^\\s]+)?[ \\t]*[|>])[ \\t]*(?:((?:\\r?\\n|\\r)[ \\t]+)[^\\r\\n]+(?:\\3[^\\r\\n]+)*)/,lookbehind:!0,alias:\"string\"},comment:/#.*/,key:{pattern:/(\\s*(?:^|[:\\-,[{\\r\\n?])[ \\t]*(![^\\s]+)?[ \\t]*)[^\\r\\n{[\\]},#\\s]+?(?=\\s*:\\s)/,lookbehind:!0,alias:\"atrule\"},directive:{pattern:/(^[ \\t]*)%.+/m,lookbehind:!0,alias:\"important\"},datetime:{pattern:/([:\\-,[{]\\s*(![^\\s]+)?[ \\t]*)(\\d{4}-\\d\\d?-\\d\\d?([tT]|[ \\t]+)\\d\\d?:\\d{2}:\\d{2}(\\.\\d*)?[ \\t]*(Z|[-+]\\d\\d?(:\\d{2})?)?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(:\\d{2}(\\.\\d*)?)?)(?=[ \\t]*($|,|]|}))/m,lookbehind:!0,alias:\"number\"},\"boolean\":{pattern:/([:\\-,[{]\\s*(![^\\s]+)?[ \\t]*)(true|false)[ \\t]*(?=$|,|]|})/im,lookbehind:!0,alias:\"important\"},\"null\":{pattern:/([:\\-,[{]\\s*(![^\\s]+)?[ \\t]*)(null|~)[ \\t]*(?=$|,|]|})/im,lookbehind:!0,alias:\"important\"},string:{pattern:/([:\\-,[{]\\s*(![^\\s]+)?[ \\t]*)(\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')(?=[ \\t]*($|,|]|}))/m,lookbehind:!0},number:{pattern:/([:\\-,[{]\\s*(![^\\s]+)?[ \\t]*)[+\\-]?(0x[\\da-f]+|0o[0-7]+|(\\d+\\.?\\d*|\\.?\\d+)(e[\\+\\-]?\\d+)?|\\.inf|\\.nan)[ \\t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\\s]+/,important:/[&*][\\w]+/,punctuation:/---|[:[\\]{}\\-,|>?]|\\.\\.\\./};\n\n/***/ },\n/* 70 */\n/***/ function(module, exports) {\n\n\tPrism.languages.perl = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\t// POD\n\t\t\t\tpattern: /(^\\s*)=\\w+[\\s\\S]*?=cut.*/m,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\$])#.*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t// TODO Could be nice to handle Heredoc too.\n\t\t'string': [\n\t\t\t// q/.../\n\t\t\t/\\b(?:q|qq|qx|qw)\\s*([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\1/,\n\t\t\n\t\t\t// q a...a\n\t\t\t/\\b(?:q|qq|qx|qw)\\s+([a-zA-Z0-9])(?:[^\\\\]|\\\\[\\s\\S])*?\\1/,\n\t\t\n\t\t\t// q(...)\n\t\t\t/\\b(?:q|qq|qx|qw)\\s*\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)/,\n\t\t\n\t\t\t// q{...}\n\t\t\t/\\b(?:q|qq|qx|qw)\\s*\\{(?:[^{}\\\\]|\\\\[\\s\\S])*\\}/,\n\t\t\n\t\t\t// q[...]\n\t\t\t/\\b(?:q|qq|qx|qw)\\s*\\[(?:[^[\\]\\\\]|\\\\[\\s\\S])*\\]/,\n\t\t\n\t\t\t// q<...>\n\t\t\t/\\b(?:q|qq|qx|qw)\\s*<(?:[^<>\\\\]|\\\\[\\s\\S])*>/,\n\t\n\t\t\t// \"...\", `...`\n\t\t\t/(\"|`)(?:[^\\\\]|\\\\[\\s\\S])*?\\1/,\n\t\n\t\t\t// '...'\n\t\t\t// FIXME Multi-line single-quoted strings are not supported as they would break variables containing '\n\t\t\t/'(?:[^'\\\\\\r\\n]|\\\\.)*'/\n\t\t],\n\t\t'regex': [\n\t\t\t// m/.../\n\t\t\t/\\b(?:m|qr)\\s*([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\1[msixpodualngc]*/,\n\t\t\n\t\t\t// m a...a\n\t\t\t/\\b(?:m|qr)\\s+([a-zA-Z0-9])(?:[^\\\\]|\\\\.)*?\\1[msixpodualngc]*/,\n\t\t\n\t\t\t// m(...)\n\t\t\t/\\b(?:m|qr)\\s*\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)[msixpodualngc]*/,\n\t\t\n\t\t\t// m{...}\n\t\t\t/\\b(?:m|qr)\\s*\\{(?:[^{}\\\\]|\\\\[\\s\\S])*\\}[msixpodualngc]*/,\n\t\t\n\t\t\t// m[...]\n\t\t\t/\\b(?:m|qr)\\s*\\[(?:[^[\\]\\\\]|\\\\[\\s\\S])*\\][msixpodualngc]*/,\n\t\t\n\t\t\t// m<...>\n\t\t\t/\\b(?:m|qr)\\s*<(?:[^<>\\\\]|\\\\[\\s\\S])*>[msixpodualngc]*/,\n\t\n\t\t\t// The lookbehinds prevent -s from breaking\n\t\t\t// FIXME We don't handle change of separator like s(...)[...]\n\t\t\t// s/.../.../\n\t\t\t{\n\t\t\t\tpattern: /(^|[^-]\\b)(?:s|tr|y)\\s*([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\2(?:[^\\\\]|\\\\[\\s\\S])*?\\2[msixpodualngcer]*/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\n\t\t\t// s a...a...a\n\t\t\t{\n\t\t\t\tpattern: /(^|[^-]\\b)(?:s|tr|y)\\s+([a-zA-Z0-9])(?:[^\\\\]|\\\\[\\s\\S])*?\\2(?:[^\\\\]|\\\\[\\s\\S])*?\\2[msixpodualngcer]*/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\n\t\t\t// s(...)(...)\n\t\t\t{\n\t\t\t\tpattern: /(^|[^-]\\b)(?:s|tr|y)\\s*\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)\\s*\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)[msixpodualngcer]*/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\n\t\t\t// s{...}{...}\n\t\t\t{\n\t\t\t\tpattern: /(^|[^-]\\b)(?:s|tr|y)\\s*\\{(?:[^{}\\\\]|\\\\[\\s\\S])*\\}\\s*\\{(?:[^{}\\\\]|\\\\[\\s\\S])*\\}[msixpodualngcer]*/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\n\t\t\t// s[...][...]\n\t\t\t{\n\t\t\t\tpattern: /(^|[^-]\\b)(?:s|tr|y)\\s*\\[(?:[^[\\]\\\\]|\\\\[\\s\\S])*\\]\\s*\\[(?:[^[\\]\\\\]|\\\\[\\s\\S])*\\][msixpodualngcer]*/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\n\t\t\t// s<...><...>\n\t\t\t{\n\t\t\t\tpattern: /(^|[^-]\\b)(?:s|tr|y)\\s*<(?:[^<>\\\\]|\\\\[\\s\\S])*>\\s*<(?:[^<>\\\\]|\\\\[\\s\\S])*>[msixpodualngcer]*/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\n\t\t\t// /.../\n\t\t\t// The look-ahead tries to prevent two divisions on\n\t\t\t// the same line from being highlighted as regex.\n\t\t\t// This does not support multi-line regex.\n\t\t\t/\\/(?:[^\\/\\\\\\r\\n]|\\\\.)*\\/[msixpodualngc]*(?=\\s*(?:$|[\\r\\n,.;})&|\\-+*~<>!?^]|(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\\b))/\n\t\t],\n\t\n\t\t// FIXME Not sure about the handling of ::, ', and #\n\t\t'variable': [\n\t\t\t// ${^POSTMATCH}\n\t\t\t/[&*$@%]\\{\\^[A-Z]+\\}/,\n\t\t\t// $^V\n\t\t\t/[&*$@%]\\^[A-Z_]/,\n\t\t\t// ${...}\n\t\t\t/[&*$@%]#?(?=\\{)/,\n\t\t\t// $foo\n\t\t\t/[&*$@%]#?((::)*'?(?!\\d)[\\w$]+)+(::)*/i,\n\t\t\t// $1\n\t\t\t/[&*$@%]\\d+/,\n\t\t\t// $_, @_, %!\n\t\t\t// The negative lookahead prevents from breaking the %= operator\n\t\t\t/(?!%=)[$@%][!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~]/\n\t\t],\n\t\t'filehandle': {\n\t\t\t// <>, <FOO>, _\n\t\t\tpattern: /<(?![<=])\\S*>|\\b_\\b/,\n\t\t\talias: 'symbol'\n\t\t},\n\t\t'vstring': {\n\t\t\t// v1.2, 1.2.3\n\t\t\tpattern: /v\\d+(\\.\\d+)*|\\d+(\\.\\d+){2,}/,\n\t\t\talias: 'string'\n\t\t},\n\t\t'function': {\n\t\t\tpattern: /sub [a-z0-9_]+/i,\n\t\t\tinside: {\n\t\t\t\tkeyword: /sub/\n\t\t\t}\n\t\t},\n\t\t'keyword': /\\b(any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|say|state|sub|switch|undef|unless|until|use|when|while)\\b/,\n\t\t'number': /\\b-?(0x[\\dA-Fa-f](_?[\\dA-Fa-f])*|0b[01](_?[01])*|(\\d(_?\\d)*)?\\.?\\d(_?\\d)*([Ee][+-]?\\d+)?)\\b/,\n\t\t'operator': /-[rwxoRWXOezsfdlpSbctugkTBMAC]\\b|\\+[+=]?|-[-=>]?|\\*\\*?=?|\\/\\/?=?|=[=~>]?|~[~=]?|\\|\\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\\.(?:=|\\.\\.?)?|[\\\\?]|\\bx(?:=|\\b)|\\b(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\\b/,\n\t\t'punctuation': /[{}[\\];(),:]/\n\t};\n\n\n/***/ },\n/* 71 */\n/***/ function(module, exports) {\n\n\tPrism.languages.go = Prism.languages.extend('clike', {\n\t\t'keyword': /\\b(break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\\b/,\n\t\t'builtin': /\\b(bool|byte|complex(64|128)|error|float(32|64)|rune|string|u?int(8|16|32|64|)|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(ln)?|real|recover)\\b/,\n\t\t'boolean': /\\b(_|iota|nil|true|false)\\b/,\n\t\t'operator': /[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\./,\n\t\t'number': /\\b(-?(0x[a-f\\d]+|(\\d+\\.?\\d*|\\.\\d+)(e[-+]?\\d+)?)i?)\\b/i,\n\t\t'string': /(\"|'|`)(\\\\?.|\\r|\\n)*?\\1/\n\t});\n\tdelete Prism.languages.go['class-name'];\n\n\n/***/ },\n/* 72 */\n/***/ function(module, exports) {\n\n\t(function(Prism) {\n\t\tvar insideString = {\n\t\t\tvariable: [\n\t\t\t\t// Arithmetic Environment\n\t\t\t\t{\n\t\t\t\t\tpattern: /\\$?\\(\\([\\w\\W]+?\\)\\)/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t// If there is a $ sign at the beginning highlight $(( and )) as variable\n\t\t\t\t\t\tvariable: [{\n\t\t\t\t\t\t\t\tpattern: /(^\\$\\(\\([\\w\\W]+)\\)\\)/,\n\t\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/^\\$\\(\\(/,\n\t\t\t\t\t\t],\n\t\t\t\t\t\tnumber: /\\b-?(?:0x[\\dA-Fa-f]+|\\d*\\.?\\d+(?:[Ee]-?\\d+)?)\\b/,\n\t\t\t\t\t\t// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic\n\t\t\t\t\t\toperator: /--?|-=|\\+\\+?|\\+=|!=?|~|\\*\\*?|\\*=|\\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\\^=?|\\|\\|?|\\|=|\\?|:/,\n\t\t\t\t\t\t// If there is no $ sign at the beginning highlight (( and )) as punctuation\n\t\t\t\t\t\tpunctuation: /\\(\\(?|\\)\\)?|,|;/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// Command Substitution\n\t\t\t\t{\n\t\t\t\t\tpattern: /\\$\\([^)]+\\)|`[^`]+`/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\tvariable: /^\\$\\(|^`|\\)$|`$/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t/\\$(?:[a-z0-9_#\\?\\*!@]+|\\{[^}]+\\})/i\n\t\t\t],\n\t\t};\n\t\n\t\tPrism.languages.bash = {\n\t\t\t'shebang': {\n\t\t\t\tpattern: /^#!\\s*\\/bin\\/bash|^#!\\s*\\/bin\\/sh/,\n\t\t\t\talias: 'important'\n\t\t\t},\n\t\t\t'comment': {\n\t\t\t\tpattern: /(^|[^\"{\\\\])#.*/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'string': [\n\t\t\t\t//Support for Here-Documents https://en.wikipedia.org/wiki/Here_document\n\t\t\t\t{\n\t\t\t\t\tpattern: /((?:^|[^<])<<\\s*)(?:\"|')?(\\w+?)(?:\"|')?\\s*\\r?\\n(?:[\\s\\S])*?\\r?\\n\\2/g,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tgreedy: true,\n\t\t\t\t\tinside: insideString\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /([\"'])(?:\\\\\\\\|\\\\?[^\\\\])*?\\1/g,\n\t\t\t\t\tgreedy: true,\n\t\t\t\t\tinside: insideString\n\t\t\t\t}\n\t\t\t],\n\t\t\t'variable': insideString.variable,\n\t\t\t// Originally based on http://ss64.com/bash/\n\t\t\t'function': {\n\t\t\t\tpattern: /(^|\\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|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|;|\\||&)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'keyword': {\n\t\t\t\tpattern: /(^|\\s|;|\\||&)(?:let|:|\\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|\\s|;|\\||&)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'boolean': {\n\t\t\t\tpattern: /(^|\\s|;|\\||&)(?:true|false)(?=$|\\s|;|\\||&)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'operator': /&&?|\\|\\|?|==?|!=?|<<<?|>>|<=?|>=?|=~/,\n\t\t\t'punctuation': /\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];]/\n\t\t};\n\t\n\t\tvar inside = insideString.variable[1].inside;\n\t\tinside['function'] = Prism.languages.bash['function'];\n\t\tinside.keyword = Prism.languages.bash.keyword;\n\t\tinside.boolean = Prism.languages.bash.boolean;\n\t\tinside.operator = Prism.languages.bash.operator;\n\t\tinside.punctuation = Prism.languages.bash.punctuation;\n\t})(Prism);\n\n\n/***/ },\n/* 73 */\n/***/ function(module, exports) {\n\n\tPrism.languages.fsharp = Prism.languages.extend('clike', {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\])\\(\\*[\\w\\W]*?\\*\\)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'keyword': /\\b(?:let|return|use|yield)(?:!\\B|\\b)|\\b(abstract|and|as|assert|base|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|global|if|in|inherit|inline|interface|internal|lazy|match|member|module|mutable|namespace|new|not|null|of|open|or|override|private|public|rec|select|static|struct|then|to|true|try|type|upcast|val|void|when|while|with|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall|trait|virtual|volatile)\\b/,\n\t\t'string': /(?:\"\"\"[\\s\\S]*?\"\"\"|@\"(?:\"\"|[^\"])*\"|(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\s\\S])*\\1)B?/,\n\t\t'number': [\n\t\t\t/\\b-?0x[\\da-fA-F]+(un|lf|LF)?\\b/,\n\t\t\t/\\b-?0b[01]+(y|uy)?\\b/,\n\t\t\t/\\b-?(\\d*\\.?\\d+|\\d+\\.)([fFmM]|[eE][+-]?\\d+)?\\b/,\n\t\t\t/\\b-?\\d+(y|uy|s|us|l|u|ul|L|UL|I)?\\b/\n\t\t]\n\t});\n\tPrism.languages.insertBefore('fsharp', 'keyword', {\n\t\t'preprocessor': {\n\t\t\tpattern: /^[^\\r\\n\\S]*#.*/m,\n\t\t\talias: 'property',\n\t\t\tinside: {\n\t\t\t\t'directive': {\n\t\t\t\t\tpattern: /(\\s*#)\\b(else|endif|if|light|line|nowarn)\\b/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\n/***/ },\n/* 74 */\n/***/ function(module, exports) {\n\n\tPrism.languages.typescript = Prism.languages.extend('javascript', {\n\t\t'keyword': /\\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield|module|declare|constructor|string|Function|any|number|boolean|Array|enum)\\b/\n\t});\n\t\n\tPrism.languages.ts = Prism.languages.typescript;\n\n/***/ },\n/* 75 */\n/***/ function(module, exports) {\n\n\t(function (Prism) {\n\t\tvar inside = {\n\t\t\t'url': /url\\(([\"']?).*?\\1\\)/i,\n\t\t\t'string': /(\"|')(?:[^\\\\\\r\\n]|\\\\(?:\\r\\n|[\\s\\S]))*?\\1/,\n\t\t\t'interpolation': null, // See below\n\t\t\t'func': null, // See below\n\t\t\t'important': /\\B!(?:important|optional)\\b/i,\n\t\t\t'keyword': {\n\t\t\t\tpattern: /(^|\\s+)(?:(?:if|else|for|return|unless)(?=\\s+|$)|@[\\w-]+)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'hexcode': /#[\\da-f]{3,6}/i,\n\t\t\t'number': /\\b\\d+(?:\\.\\d+)?%?/,\n\t\t\t'boolean': /\\b(?:true|false)\\b/,\n\t\t\t'operator': [\n\t\t\t\t// We want non-word chars around \"-\" because it is\n\t\t\t\t// accepted in property names.\n\t\t\t\t/~|[+!\\/%<>?=]=?|[-:]=|\\*[*=]?|\\.+|&&|\\|\\||\\B-\\B|\\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\\b/\n\t\t\t],\n\t\t\t'punctuation': /[{}()\\[\\];:,]/\n\t\t};\n\t\n\t\tinside['interpolation'] = {\n\t\t\tpattern: /\\{[^\\r\\n}:]+\\}/,\n\t\t\talias: 'variable',\n\t\t\tinside: Prism.util.clone(inside)\n\t\t};\n\t\tinside['func'] = {\n\t\t\tpattern: /[\\w-]+\\([^)]*\\).*/,\n\t\t\tinside: {\n\t\t\t\t'function': /^[^(]+/,\n\t\t\t\trest: Prism.util.clone(inside)\n\t\t\t}\n\t\t};\n\t\n\t\tPrism.languages.stylus = {\n\t\t\t'comment': {\n\t\t\t\tpattern: /(^|[^\\\\])(\\/\\*[\\w\\W]*?\\*\\/|\\/\\/.*)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'atrule-declaration': {\n\t\t\t\tpattern: /(^\\s*)@.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'atrule': /^@[\\w-]+/,\n\t\t\t\t\trest: inside\n\t\t\t\t}\n\t\t\t},\n\t\t\t'variable-declaration': {\n\t\t\t\tpattern: /(^[ \\t]*)[\\w$-]+\\s*.?=[ \\t]*(?:(?:\\{[^}]*\\}|.+)|$)/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'variable': /^\\S+/,\n\t\t\t\t\trest: inside\n\t\t\t\t}\n\t\t\t},\n\t\n\t\t\t'statement': {\n\t\t\t\tpattern: /(^[ \\t]*)(?:if|else|for|return|unless)[ \\t]+.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\tkeyword: /^\\S+/,\n\t\t\t\t\trest: inside\n\t\t\t\t}\n\t\t\t},\n\t\n\t\t\t// A property/value pair cannot end with a comma or a brace\n\t\t\t// It cannot have indented content unless it ended with a semicolon\n\t\t\t'property-declaration': {\n\t\t\t\tpattern: /((?:^|\\{)([ \\t]*))(?:[\\w-]|\\{[^}\\r\\n]+\\})+(?:\\s*:\\s*|[ \\t]+)[^{\\r\\n]*(?:;|[^{\\r\\n,](?=$)(?!(\\r?\\n|\\r)(?:\\{|\\2[ \\t]+)))/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'property': {\n\t\t\t\t\t\tpattern: /^[^\\s:]+/,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'interpolation': inside.interpolation\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\trest: inside\n\t\t\t\t}\n\t\t\t},\n\t\n\t\n\t\n\t\t\t// A selector can contain parentheses only as part of a pseudo-element\n\t\t\t// It can span multiple lines.\n\t\t\t// It must end with a comma or an accolade or have indented content.\n\t\t\t'selector': {\n\t\t\t\tpattern: /(^[ \\t]*)(?:(?=\\S)(?:[^{}\\r\\n:()]|::?[\\w-]+(?:\\([^)\\r\\n]*\\))?|\\{[^}\\r\\n]+\\})+)(?:(?:\\r?\\n|\\r)(?:\\1(?:(?=\\S)(?:[^{}\\r\\n:()]|::?[\\w-]+(?:\\([^)\\r\\n]*\\))?|\\{[^}\\r\\n]+\\})+)))*(?:,$|\\{|(?=(?:\\r?\\n|\\r)(?:\\{|\\1[ \\t]+)))/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': inside.interpolation,\n\t\t\t\t\t'punctuation': /[{},]/\n\t\t\t\t}\n\t\t\t},\n\t\n\t\t\t'func': inside.func,\n\t\t\t'string': inside.string,\n\t\t\t'interpolation': inside.interpolation,\n\t\t\t'punctuation': /[{}()\\[\\];:.]/\n\t\t};\n\t}(Prism));\n\n/***/ },\n/* 76 */\n/***/ function(module, exports) {\n\n\t/* FIXME :\n\t :extend() is not handled specifically : its highlighting is buggy.\n\t Mixin usage must be inside a ruleset to be highlighted.\n\t At-rules (e.g. import) containing interpolations are buggy.\n\t Detached rulesets are highlighted as at-rules.\n\t A comment before a mixin usage prevents the latter to be properly highlighted.\n\t */\n\t\n\tPrism.languages.less = Prism.languages.extend('css', {\n\t\t'comment': [\n\t\t\t/\\/\\*[\\w\\W]*?\\*\\//,\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\])\\/\\/.*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'atrule': {\n\t\t\tpattern: /@[\\w-]+?(?:\\([^{}]+\\)|[^(){};])*?(?=\\s*\\{)/i,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /[:()]/\n\t\t\t}\n\t\t},\n\t\t// selectors and mixins are considered the same\n\t\t'selector': {\n\t\t\tpattern: /(?:@\\{[\\w-]+\\}|[^{};\\s@])(?:@\\{[\\w-]+\\}|\\([^{}]*\\)|[^{};@])*?(?=\\s*\\{)/,\n\t\t\tinside: {\n\t\t\t\t// mixin parameters\n\t\t\t\t'variable': /@+[\\w-]+/\n\t\t\t}\n\t\t},\n\t\n\t\t'property': /(?:@\\{[\\w-]+\\}|[\\w-])+(?:\\+_?)?(?=\\s*:)/i,\n\t\t'punctuation': /[{}();:,]/,\n\t\t'operator': /[+\\-*\\/]/\n\t});\n\t\n\t// Invert function and punctuation positions\n\tPrism.languages.insertBefore('less', 'punctuation', {\n\t\t'function': Prism.languages.less.function\n\t});\n\t\n\tPrism.languages.insertBefore('less', 'property', {\n\t\t'variable': [\n\t\t\t// Variable declaration (the colon must be consumed!)\n\t\t\t{\n\t\t\t\tpattern: /@[\\w-]+\\s*:/,\n\t\t\t\tinside: {\n\t\t\t\t\t\"punctuation\": /:/\n\t\t\t\t}\n\t\t\t},\n\t\n\t\t\t// Variable usage\n\t\t\t/@@?[\\w-]+/\n\t\t],\n\t\t'mixin-usage': {\n\t\t\tpattern: /([{;]\\s*)[.#](?!\\d)[\\w-]+.*?(?=[(;])/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function'\n\t\t}\n\t});\n\n\n/***/ },\n/* 77 */\n/***/ function(module, exports) {\n\n\t(function(Prism) {\n\t\tPrism.languages.sass = Prism.languages.extend('css', {\n\t\t\t// Sass comments don't need to be closed, only indented\n\t\t\t'comment': {\n\t\t\t\tpattern: /^([ \\t]*)\\/[\\/*].*(?:(?:\\r?\\n|\\r)\\1[ \\t]+.+)*/m,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t});\n\t\n\t\tPrism.languages.insertBefore('sass', 'atrule', {\n\t\t\t// We want to consume the whole line\n\t\t\t'atrule-line': {\n\t\t\t\t// Includes support for = and + shortcuts\n\t\t\t\tpattern: /^(?:[ \\t]*)[@+=].+/m,\n\t\t\t\tinside: {\n\t\t\t\t\t'atrule': /(?:@[\\w-]+|[+=])/m\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tdelete Prism.languages.sass.atrule;\n\t\n\t\n\t\tvar variable = /((\\$[-_\\w]+)|(#\\{\\$[-_\\w]+\\}))/i;\n\t\tvar operator = [\n\t\t\t/[+*\\/%]|[=!]=|<=?|>=?|\\b(?:and|or|not)\\b/,\n\t\t\t{\n\t\t\t\tpattern: /(\\s+)-(?=\\s)/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t];\n\t\n\t\tPrism.languages.insertBefore('sass', 'property', {\n\t\t\t// We want to consume the whole line\n\t\t\t'variable-line': {\n\t\t\t\tpattern: /^[ \\t]*\\$.+/m,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /:/,\n\t\t\t\t\t'variable': variable,\n\t\t\t\t\t'operator': operator\n\t\t\t\t}\n\t\t\t},\n\t\t\t// We want to consume the whole line\n\t\t\t'property-line': {\n\t\t\t\tpattern: /^[ \\t]*(?:[^:\\s]+ *:.*|:[^:\\s]+.*)/m,\n\t\t\t\tinside: {\n\t\t\t\t\t'property': [\n\t\t\t\t\t\t/[^:\\s]+(?=\\s*:)/,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /(:)[^:\\s]+/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t'punctuation': /:/,\n\t\t\t\t\t'variable': variable,\n\t\t\t\t\t'operator': operator,\n\t\t\t\t\t'important': Prism.languages.sass.important\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tdelete Prism.languages.sass.property;\n\t\tdelete Prism.languages.sass.important;\n\t\n\t\t// Now that whole lines for other patterns are consumed,\n\t\t// what's left should be selectors\n\t\tdelete Prism.languages.sass.selector;\n\t\tPrism.languages.insertBefore('sass', 'punctuation', {\n\t\t\t'selector': {\n\t\t\t\tpattern: /([ \\t]*)\\S(?:,?[^,\\r\\n]+)*(?:,(?:\\r?\\n|\\r)\\1[ \\t]+\\S(?:,?[^,\\r\\n]+)*)*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t});\n\t\n\t}(Prism));\n\n/***/ },\n/* 78 */\n/***/ function(module, exports) {\n\n\t(function(Prism) {\n\t\n\t\tvar handlebars_pattern = /\\{\\{\\{[\\w\\W]+?\\}\\}\\}|\\{\\{[\\w\\W]+?\\}\\}/g;\n\t\n\t\tPrism.languages.handlebars = Prism.languages.extend('markup', {\n\t\t\t'handlebars': {\n\t\t\t\tpattern: handlebars_pattern,\n\t\t\t\tinside: {\n\t\t\t\t\t'delimiter': {\n\t\t\t\t\t\tpattern: /^\\{\\{\\{?|\\}\\}\\}?$/i,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\t'string': /([\"'])(\\\\?.)*?\\1/,\n\t\t\t\t\t'number': /\\b-?(0x[\\dA-Fa-f]+|\\d*\\.?\\d+([Ee][+-]?\\d+)?)\\b/,\n\t\t\t\t\t'boolean': /\\b(true|false)\\b/,\n\t\t\t\t\t'block': {\n\t\t\t\t\t\tpattern: /^(\\s*~?\\s*)[#\\/]\\S+?(?=\\s*~?\\s*$|\\s)/i,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'keyword'\n\t\t\t\t\t},\n\t\t\t\t\t'brackets': {\n\t\t\t\t\t\tpattern: /\\[[^\\]]+\\]/,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\tpunctuation: /\\[|\\]/,\n\t\t\t\t\t\t\tvariable: /[\\w\\W]+/\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /[!\"#%&'()*+,.\\/;<=>@\\[\\\\\\]^`{|}~]/,\n\t\t\t\t\t'variable': /[^!\"#%&'()*+,.\\/;<=>@\\[\\\\\\]^`{|}~\\s]+/\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\n\t\t// Comments are inserted at top so that they can\n\t\t// surround markup\n\t\tPrism.languages.insertBefore('handlebars', 'tag', {\n\t\t\t'handlebars-comment': {\n\t\t\t\tpattern: /\\{\\{![\\w\\W]*?\\}\\}/,\n\t\t\t\talias: ['handlebars','comment']\n\t\t\t}\n\t\t});\n\t\n\t\t// Tokenize all inline Handlebars expressions that are wrapped in {{ }} or {{{ }}}\n\t\t// This allows for easy Handlebars + markup highlighting\n\t\tPrism.hooks.add('before-highlight', function(env) {\n\t\t\tif (env.language !== 'handlebars') {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tenv.tokenStack = [];\n\t\n\t\t\tenv.backupCode = env.code;\n\t\t\tenv.code = env.code.replace(handlebars_pattern, function(match) {\n\t\t\t\tenv.tokenStack.push(match);\n\t\n\t\t\t\treturn '___HANDLEBARS' + env.tokenStack.length + '___';\n\t\t\t});\n\t\t});\n\t\n\t\t// Restore env.code for other plugins (e.g. line-numbers)\n\t\tPrism.hooks.add('before-insert', function(env) {\n\t\t\tif (env.language === 'handlebars') {\n\t\t\t\tenv.code = env.backupCode;\n\t\t\t\tdelete env.backupCode;\n\t\t\t}\n\t\t});\n\t\n\t\t// Re-insert the tokens after highlighting\n\t\t// and highlight them with defined grammar\n\t\tPrism.hooks.add('after-highlight', function(env) {\n\t\t\tif (env.language !== 'handlebars') {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tfor (var i = 0, t; t = env.tokenStack[i]; i++) {\n\t\t\t\t// The replace prevents $$, $&, $`, $', $n, $nn from being interpreted as special patterns\n\t\t\t\tenv.highlightedCode = env.highlightedCode.replace('___HANDLEBARS' + (i + 1) + '___', Prism.highlight(t, env.grammar, 'handlebars').replace(/\\$/g, '$$$$'));\n\t\t\t}\n\t\n\t\t\tenv.element.innerHTML = env.highlightedCode;\n\t\t});\n\t\n\t}(Prism));\n\n\n/***/ },\n/* 79 */\n/***/ function(module, exports) {\n\n\tPrism.languages.applescript = {\n\t\t'comment': [\n\t\t\t// Allow one level of nesting\n\t\t\t/\\(\\*(?:\\(\\*[\\w\\W]*?\\*\\)|[\\w\\W])*?\\*\\)/,\n\t\t\t/--.+/,\n\t\t\t/#.+/\n\t\t],\n\t\t'string': /\"(?:\\\\?.)*?\"/,\n\t\t'number': /\\b-?\\d*\\.?\\d+([Ee]-?\\d+)?\\b/,\n\t\t'operator': [\n\t\t\t/[&=≠≤≥*+\\-\\/÷^]|[<>]=?/,\n\t\t\t/\\b(?:(?:start|begin|end)s? with|(?:(?:does not|doesn't) contain|contains?)|(?:is|isn't|is not) (?:in|contained by)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:(?:does not|doesn't) come|comes) (?:before|after)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equals|equal to|isn't|is not)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|or|div|mod|as|not))\\b/\n\t\t],\n\t\t'keyword': /\\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\\b/,\n\t\t'class': {\n\t\t\tpattern: /\\b(?:alias|application|boolean|class|constant|date|file|integer|list|number|POSIX file|real|record|reference|RGB color|script|text|centimetres|centimeters|feet|inches|kilometres|kilometers|metres|meters|miles|yards|square feet|square kilometres|square kilometers|square metres|square meters|square miles|square yards|cubic centimetres|cubic centimeters|cubic feet|cubic inches|cubic metres|cubic meters|cubic yards|gallons|litres|liters|quarts|grams|kilograms|ounces|pounds|degrees Celsius|degrees Fahrenheit|degrees Kelvin)\\b/,\n\t\t\talias: 'builtin'\n\t\t},\n\t\t'punctuation': /[{}():,¬«»《》]/\n\t};\n\n/***/ },\n/* 80 */\n/***/ function(module, exports) {\n\n\tPrism.languages.actionscript = Prism.languages.extend('javascript', {\n\t\t'keyword': /\\b(?:as|break|case|catch|class|const|default|delete|do|else|extends|finally|for|function|if|implements|import|in|instanceof|interface|internal|is|native|new|null|package|private|protected|public|return|super|switch|this|throw|try|typeof|use|var|void|while|with|dynamic|each|final|get|include|namespace|native|override|set|static)\\b/,\n\t\t'operator': /\\+\\+|--|(?:[+\\-*\\/%^]|&&?|\\|\\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/\n\t});\n\tPrism.languages.actionscript['class-name'].alias = 'function';\n\t\n\tif (Prism.languages.markup) {\n\t\tPrism.languages.insertBefore('actionscript', 'string', {\n\t\t\t'xml': {\n\t\t\t\tpattern: /(^|[^.])<\\/?\\w+(?:\\s+[^\\s>\\/=]+=(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\w\\W])*\\2)*\\s*\\/?>/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\trest: Prism.languages.markup\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n/***/ },\n/* 81 */\n/***/ function(module, exports) {\n\n\tPrism.languages.aspnet = Prism.languages.extend('markup', {\n\t\t'page-directive tag': {\n\t\t\tpattern: /<%\\s*@.*%>/i,\n\t\t\tinside: {\n\t\t\t\t'page-directive tag': /<%\\s*@\\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,\n\t\t\t\trest: Prism.languages.markup.tag.inside\n\t\t\t}\n\t\t},\n\t\t'directive tag': {\n\t\t\tpattern: /<%.*%>/i,\n\t\t\tinside: {\n\t\t\t\t'directive tag': /<%\\s*?[$=%#:]{0,2}|%>/i,\n\t\t\t\trest: Prism.languages.csharp\n\t\t\t}\n\t\t}\n\t});\n\t// Regexp copied from prism-markup, with a negative look-ahead added\n\tPrism.languages.aspnet.tag.pattern = /<(?!%)\\/?[^\\s>\\/]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\w\\W])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/i;\n\t\n\t// match directives of attribute value foo=\"<% Bar %>\"\n\tPrism.languages.insertBefore('inside', 'punctuation', {\n\t\t'directive tag': Prism.languages.aspnet['directive tag']\n\t}, Prism.languages.aspnet.tag.inside[\"attr-value\"]);\n\t\n\tPrism.languages.insertBefore('aspnet', 'comment', {\n\t\t'asp comment': /<%--[\\w\\W]*?--%>/\n\t});\n\t\n\t// script runat=\"server\" contains csharp, not javascript\n\tPrism.languages.insertBefore('aspnet', Prism.languages.javascript ? 'script' : 'tag', {\n\t\t'asp script': {\n\t\t\tpattern: /(<script(?=.*runat=['\"]?server['\"]?)[\\w\\W]*?>)[\\w\\W]*?(?=<\\/script>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.csharp || {}\n\t\t}\n\t});\n\n/***/ },\n/* 82 */\n/***/ function(module, exports) {\n\n\tPrism.languages.basic = {\n\t\t'string': /\"(?:\"\"|[!#$%&'()*,\\/:;<=>?^_ +\\-.A-Z\\d])*\"/i,\n\t\t'comment': {\n\t\t\tpattern: /(?:!|REM\\b).+/i,\n\t\t\tinside: {\n\t\t\t\t'keyword': /^REM/i\n\t\t\t}\n\t\t},\n\t\t'number': /(?:\\b|\\B[.-])(?:\\d+\\.?\\d*)(?:E[+-]?\\d+)?/i,\n\t\t'keyword': /\\b(?:AS|BEEP|BLOAD|BSAVE|CALL(?: ABSOLUTE)?|CASE|CHAIN|CHDIR|CLEAR|CLOSE|CLS|COM|COMMON|CONST|DATA|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DIM|DO|DOUBLE|ELSE|ELSEIF|END|ENVIRON|ERASE|ERROR|EXIT|FIELD|FILES|FOR|FUNCTION|GET|GOSUB|GOTO|IF|INPUT|INTEGER|IOCTL|KEY|KILL|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|MKDIR|NAME|NEXT|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPTION BASE|OUT|POKE|PUT|READ|REDIM|REM|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SHARED|SINGLE|SELECT CASE|SHELL|SLEEP|STATIC|STEP|STOP|STRING|SUB|SWAP|SYSTEM|THEN|TIMER|TO|TROFF|TRON|TYPE|UNLOCK|UNTIL|USING|VIEW PRINT|WAIT|WEND|WHILE|WRITE)(?:\\$|\\b)/i,\n\t\t'function': /\\b(?:ABS|ACCESS|ACOS|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CAUSE|CEIL|CHR|CLIP|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATE|DATUM|DEBUG|DECIMAL|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DISPLAY|DOT|ELAPSED|EPS|ERASABLE|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FP|GO|GRAPH|HANDLER|IDN|IMAGE|IN|INT|INTERNAL|IP|IS|KEYED|LBOUND|LCASE|LEFT|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LTRIM|MARGIN|MAT|MAX|MAXNUM|MID|MIN|MISSING|MOD|NATIVE|NUL|NUMERIC|OF|OPTION|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RETRY|REWRITE|RIGHT|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STR|STREAM|STYLE|TAB|TAN|TANH|TEMPLATE|TEXT|THERE|TIME|TIMEOUT|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|USE|VAL|VARIABLE|VIEWPORT|WHEN|WINDOW|WITH|ZER|ZONEWIDTH)(?:\\$|\\b)/i,\n\t\t'operator': /<[=>]?|>=?|[+\\-*\\/^=&]|\\b(?:AND|EQV|IMP|NOT|OR|XOR)\\b/i,\n\t\t'punctuation': /[,;:()]/\n\t};\n\n/***/ },\n/* 83 */\n/***/ function(module, exports) {\n\n\tPrism.languages.c = Prism.languages.extend('clike', {\n\t\t'keyword': /\\b(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/,\n\t\t'operator': /\\-[>-]?|\\+\\+?|!=?|<<?=?|>>?=?|==?|&&?|\\|?\\||[~^%?*\\/]/,\n\t\t'number': /\\b-?(?:0x[\\da-f]+|\\d*\\.?\\d+(?:e[+-]?\\d+)?)[ful]*\\b/i\n\t});\n\t\n\tPrism.languages.insertBefore('c', 'string', {\n\t\t'macro': {\n\t\t\t// allow for multiline macro definitions\n\t\t\t// spaces after the # character compile fine with gcc\n\t\t\tpattern: /(^\\s*)#\\s*[a-z]+([^\\r\\n\\\\]|\\\\.|\\\\(?:\\r\\n?|\\n))*/im,\n\t\t\tlookbehind: true,\n\t\t\talias: 'property',\n\t\t\tinside: {\n\t\t\t\t// highlight the path of the include statement as a string\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /(#\\s*include\\s*)(<.+?>|(\"|')(\\\\?.)+?\\3)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t// highlight macro directives as keywords\n\t\t\t\t'directive': {\n\t\t\t\t\tpattern: /(#\\s*)\\b(define|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\\b/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// highlight predefined macros as constants\n\t\t'constant': /\\b(__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|stdin|stdout|stderr)\\b/\n\t});\n\t\n\tdelete Prism.languages.c['class-name'];\n\tdelete Prism.languages.c['boolean'];\n\n\n/***/ },\n/* 84 */\n/***/ function(module, exports) {\n\n\t// Based on Free Pascal\n\t\n\t/* TODO\n\t\tSupport inline asm ?\n\t*/\n\t\n\tPrism.languages.pascal = {\n\t\t'comment': [\n\t\t\t/\\(\\*[\\s\\S]+?\\*\\)/,\n\t\t\t/\\{[\\s\\S]+?\\}/,\n\t\t\t/\\/\\/.*/\n\t\t],\n\t\t'string': /(?:'(?:''|[^'\\r\\n])*'|#[&$%]?[a-f\\d]+)+|\\^[a-z]/i,\n\t\t'keyword': [\n\t\t\t{\n\t\t\t\t// Turbo Pascal\n\t\t\t\tpattern: /(^|[^&])\\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\\b/i,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Free Pascal\n\t\t\t\tpattern: /(^|[^&])\\b(?:dispose|exit|false|new|true)\\b/i,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Object Pascal\n\t\t\t\tpattern: /(^|[^&])\\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\\b/i,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Modifiers\n\t\t\t\tpattern: /(^|[^&])\\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\\b/i,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'number': [\n\t\t\t// Hexadecimal, octal and binary\n\t\t\t/[+-]?(?:[&%]\\d+|\\$[a-f\\d]+)/i,\n\t\t\t// Decimal\n\t\t\t/([+-]|\\b)\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?/i\n\t\t],\n\t\t'operator': [\n\t\t\t/\\.\\.|\\*\\*|:=|<[<=>]?|>[>=]?|[+\\-*\\/]=?|[@^=]/i,\n\t\t\t{\n\t\t\t\tpattern: /(^|[^&])\\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\\b/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'punctuation': /\\(\\.|\\.\\)|[()\\[\\]:;,.]/\n\t};\n\n/***/ },\n/* 85 */\n/***/ function(module, exports) {\n\n\tPrism.languages.vim = {\n\t\t'string': /\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?:[^'\\r\\n]|'')*'/,\n\t\t'comment': /\".*/,\n\t\t'function': /\\w+(?=\\()/,\n\t\t'keyword': /\\b(?:ab|abbreviate|abc|abclear|abo|aboveleft|al|all|arga|argadd|argd|argdelete|argdo|arge|argedit|argg|argglobal|argl|arglocal|ar|args|argu|argument|as|ascii|bad|badd|ba|ball|bd|bdelete|be|bel|belowright|bf|bfirst|bl|blast|bm|bmodified|bn|bnext|bN|bNext|bo|botright|bp|bprevious|brea|break|breaka|breakadd|breakd|breakdel|breakl|breaklist|br|brewind|bro|browse|bufdo|b|buffer|buffers|bun|bunload|bw|bwipeout|ca|cabbrev|cabc|cabclear|caddb|caddbuffer|cad|caddexpr|caddf|caddfile|cal|call|cat|catch|cb|cbuffer|cc|ccl|cclose|cd|ce|center|cex|cexpr|cf|cfile|cfir|cfirst|cgetb|cgetbuffer|cgete|cgetexpr|cg|cgetfile|c|change|changes|chd|chdir|che|checkpath|checkt|checktime|cla|clast|cl|clist|clo|close|cmapc|cmapclear|cnew|cnewer|cn|cnext|cN|cNext|cnf|cnfile|cNfcNfile|cnorea|cnoreabbrev|col|colder|colo|colorscheme|comc|comclear|comp|compiler|conf|confirm|con|continue|cope|copen|co|copy|cpf|cpfile|cp|cprevious|cq|cquit|cr|crewind|cuna|cunabbrev|cu|cunmap|cw|cwindow|debugg|debuggreedy|delc|delcommand|d|delete|delf|delfunction|delm|delmarks|diffg|diffget|diffoff|diffpatch|diffpu|diffput|diffsplit|diffthis|diffu|diffupdate|dig|digraphs|di|display|dj|djump|dl|dlist|dr|drop|ds|dsearch|dsp|dsplit|earlier|echoe|echoerr|echom|echomsg|echon|e|edit|el|else|elsei|elseif|em|emenu|endfo|endfor|endf|endfunction|endfun|en|endif|endt|endtry|endw|endwhile|ene|enew|ex|exi|exit|exu|exusage|f|file|files|filetype|fina|finally|fin|find|fini|finish|fir|first|fix|fixdel|fo|fold|foldc|foldclose|folddoc|folddoclosed|foldd|folddoopen|foldo|foldopen|for|fu|fun|function|go|goto|gr|grep|grepa|grepadd|ha|hardcopy|h|help|helpf|helpfind|helpg|helpgrep|helpt|helptags|hid|hide|his|history|ia|iabbrev|iabc|iabclear|if|ij|ijump|il|ilist|imapc|imapclear|in|inorea|inoreabbrev|isearch|isp|isplit|iuna|iunabbrev|iu|iunmap|j|join|ju|jumps|k|keepalt|keepj|keepjumps|kee|keepmarks|laddb|laddbuffer|lad|laddexpr|laddf|laddfile|lan|language|la|last|later|lb|lbuffer|lc|lcd|lch|lchdir|lcl|lclose|let|left|lefta|leftabove|lex|lexpr|lf|lfile|lfir|lfirst|lgetb|lgetbuffer|lgete|lgetexpr|lg|lgetfile|lgr|lgrep|lgrepa|lgrepadd|lh|lhelpgrep|l|list|ll|lla|llast|lli|llist|lmak|lmake|lm|lmap|lmapc|lmapclear|lnew|lnewer|lne|lnext|lN|lNext|lnf|lnfile|lNf|lNfile|ln|lnoremap|lo|loadview|loc|lockmarks|lockv|lockvar|lol|lolder|lop|lopen|lpf|lpfile|lp|lprevious|lr|lrewind|ls|lt|ltag|lu|lunmap|lv|lvimgrep|lvimgrepa|lvimgrepadd|lw|lwindow|mak|make|ma|mark|marks|mat|match|menut|menutranslate|mk|mkexrc|mks|mksession|mksp|mkspell|mkvie|mkview|mkv|mkvimrc|mod|mode|m|move|mzf|mzfile|mz|mzscheme|nbkey|new|n|next|N|Next|nmapc|nmapclear|noh|nohlsearch|norea|noreabbrev|nu|number|nun|nunmap|omapc|omapclear|on|only|o|open|opt|options|ou|ounmap|pc|pclose|ped|pedit|pe|perl|perld|perldo|po|pop|popu|popu|popup|pp|ppop|pre|preserve|prev|previous|p|print|P|Print|profd|profdel|prof|profile|promptf|promptfind|promptr|promptrepl|ps|psearch|pta|ptag|ptf|ptfirst|ptj|ptjump|ptl|ptlast|ptn|ptnext|ptN|ptNext|ptp|ptprevious|ptr|ptrewind|pts|ptselect|pu|put|pw|pwd|pyf|pyfile|py|python|qa|qall|q|quit|quita|quitall|r|read|rec|recover|redi|redir|red|redo|redr|redraw|redraws|redrawstatus|reg|registers|res|resize|ret|retab|retu|return|rew|rewind|ri|right|rightb|rightbelow|rub|ruby|rubyd|rubydo|rubyf|rubyfile|ru|runtime|rv|rviminfo|sal|sall|san|sandbox|sa|sargument|sav|saveas|sba|sball|sbf|sbfirst|sbl|sblast|sbm|sbmodified|sbn|sbnext|sbN|sbNext|sbp|sbprevious|sbr|sbrewind|sb|sbuffer|scripte|scriptencoding|scrip|scriptnames|se|set|setf|setfiletype|setg|setglobal|setl|setlocal|sf|sfind|sfir|sfirst|sh|shell|sign|sil|silent|sim|simalt|sla|slast|sl|sleep|sm|smagic|sm|smap|smapc|smapclear|sme|smenu|sn|snext|sN|sNext|sni|sniff|sno|snomagic|snor|snoremap|snoreme|snoremenu|sor|sort|so|source|spelld|spelldump|spe|spellgood|spelli|spellinfo|spellr|spellrepall|spellu|spellundo|spellw|spellwrong|sp|split|spr|sprevious|sre|srewind|sta|stag|startg|startgreplace|star|startinsert|startr|startreplace|stj|stjump|st|stop|stopi|stopinsert|sts|stselect|sun|sunhide|sunm|sunmap|sus|suspend|sv|sview|syncbind|t|tab|tabc|tabclose|tabd|tabdo|tabe|tabedit|tabf|tabfind|tabfir|tabfirst|tabl|tablast|tabm|tabmove|tabnew|tabn|tabnext|tabN|tabNext|tabo|tabonly|tabp|tabprevious|tabr|tabrewind|tabs|ta|tag|tags|tc|tcl|tcld|tcldo|tclf|tclfile|te|tearoff|tf|tfirst|th|throw|tj|tjump|tl|tlast|tm|tm|tmenu|tn|tnext|tN|tNext|to|topleft|tp|tprevious|tr|trewind|try|ts|tselect|tu|tu|tunmenu|una|unabbreviate|u|undo|undoj|undojoin|undol|undolist|unh|unhide|unlet|unlo|unlockvar|unm|unmap|up|update|verb|verbose|ve|version|vert|vertical|vie|view|vim|vimgrep|vimgrepa|vimgrepadd|vi|visual|viu|viusage|vmapc|vmapclear|vne|vnew|vs|vsplit|vu|vunmap|wa|wall|wh|while|winc|wincmd|windo|winp|winpos|win|winsize|wn|wnext|wN|wNext|wp|wprevious|wq|wqa|wqall|w|write|ws|wsverb|wv|wviminfo|X|xa|xall|x|xit|xm|xmap|xmapc|xmapclear|xme|xmenu|XMLent|XMLns|xn|xnoremap|xnoreme|xnoremenu|xu|xunmap|y|yank)\\b/,\n\t\t'builtin': /\\b(?:autocmd|acd|ai|akm|aleph|allowrevins|altkeymap|ambiwidth|ambw|anti|antialias|arab|arabic|arabicshape|ari|arshape|autochdir|autoindent|autoread|autowrite|autowriteall|aw|awa|background|backspace|backup|backupcopy|backupdir|backupext|backupskip|balloondelay|ballooneval|balloonexpr|bdir|bdlay|beval|bex|bexpr|bg|bh|bin|binary|biosk|bioskey|bk|bkc|bomb|breakat|brk|browsedir|bs|bsdir|bsk|bt|bufhidden|buflisted|buftype|casemap|ccv|cdpath|cedit|cfu|ch|charconvert|ci|cin|cindent|cink|cinkeys|cino|cinoptions|cinw|cinwords|clipboard|cmdheight|cmdwinheight|cmp|cms|columns|com|comments|commentstring|compatible|complete|completefunc|completeopt|consk|conskey|copyindent|cot|cpo|cpoptions|cpt|cscopepathcomp|cscopeprg|cscopequickfix|cscopetag|cscopetagorder|cscopeverbose|cspc|csprg|csqf|cst|csto|csverb|cuc|cul|cursorcolumn|cursorline|cwh|debug|deco|def|define|delcombine|dex|dg|dict|dictionary|diff|diffexpr|diffopt|digraph|dip|dir|directory|dy|ea|ead|eadirection|eb|ed|edcompatible|ef|efm|ei|ek|enc|encoding|endofline|eol|ep|equalalways|equalprg|errorbells|errorfile|errorformat|esckeys|et|eventignore|expandtab|exrc|fcl|fcs|fdc|fde|fdi|fdl|fdls|fdm|fdn|fdo|fdt|fen|fenc|fencs|fex|ff|ffs|fileencoding|fileencodings|fileformat|fileformats|fillchars|fk|fkmap|flp|fml|fmr|foldcolumn|foldenable|foldexpr|foldignore|foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines|foldnestmax|foldtext|formatexpr|formatlistpat|formatoptions|formatprg|fp|fs|fsync|ft|gcr|gd|gdefault|gfm|gfn|gfs|gfw|ghr|gp|grepformat|grepprg|gtl|gtt|guicursor|guifont|guifontset|guifontwide|guiheadroom|guioptions|guipty|guitablabel|guitabtooltip|helpfile|helpheight|helplang|hf|hh|hi|hidden|highlight|hk|hkmap|hkmapp|hkp|hl|hlg|hls|hlsearch|ic|icon|iconstring|ignorecase|im|imactivatekey|imak|imc|imcmdline|imd|imdisable|imi|iminsert|ims|imsearch|inc|include|includeexpr|incsearch|inde|indentexpr|indentkeys|indk|inex|inf|infercase|insertmode|isf|isfname|isi|isident|isk|iskeyword|isprint|joinspaces|js|key|keymap|keymodel|keywordprg|km|kmp|kp|langmap|langmenu|laststatus|lazyredraw|lbr|lcs|linebreak|lines|linespace|lisp|lispwords|listchars|loadplugins|lpl|lsp|lz|macatsui|magic|makeef|makeprg|matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth|maxmem|maxmempattern|maxmemtot|mco|mef|menuitems|mfd|mh|mis|mkspellmem|ml|mls|mm|mmd|mmp|mmt|modeline|modelines|modifiable|modified|more|mouse|mousef|mousefocus|mousehide|mousem|mousemodel|mouses|mouseshape|mouset|mousetime|mp|mps|msm|mzq|mzquantum|nf|nrformats|numberwidth|nuw|odev|oft|ofu|omnifunc|opendevice|operatorfunc|opfunc|osfiletype|pa|para|paragraphs|paste|pastetoggle|patchexpr|patchmode|path|pdev|penc|pex|pexpr|pfn|ph|pheader|pi|pm|pmbcs|pmbfn|popt|preserveindent|previewheight|previewwindow|printdevice|printencoding|printexpr|printfont|printheader|printmbcharset|printmbfont|printoptions|prompt|pt|pumheight|pvh|pvw|qe|quoteescape|readonly|remap|report|restorescreen|revins|rightleft|rightleftcmd|rl|rlc|ro|rs|rtp|ruf|ruler|rulerformat|runtimepath|sbo|sc|scb|scr|scroll|scrollbind|scrolljump|scrolloff|scrollopt|scs|sect|sections|secure|sel|selection|selectmode|sessionoptions|sft|shcf|shellcmdflag|shellpipe|shellquote|shellredir|shellslash|shelltemp|shelltype|shellxquote|shiftround|shiftwidth|shm|shortmess|shortname|showbreak|showcmd|showfulltag|showmatch|showmode|showtabline|shq|si|sidescroll|sidescrolloff|siso|sj|slm|smartcase|smartindent|smarttab|smc|smd|softtabstop|sol|spc|spell|spellcapcheck|spellfile|spelllang|spellsuggest|spf|spl|splitbelow|splitright|sps|sr|srr|ss|ssl|ssop|stal|startofline|statusline|stl|stmp|su|sua|suffixes|suffixesadd|sw|swapfile|swapsync|swb|swf|switchbuf|sws|sxq|syn|synmaxcol|syntax|tabline|tabpagemax|tabstop|tagbsearch|taglength|tagrelative|tagstack|tal|tb|tbi|tbidi|tbis|tbs|tenc|term|termbidi|termencoding|terse|textauto|textmode|textwidth|tgst|thesaurus|tildeop|timeout|timeoutlen|title|titlelen|titleold|titlestring|toolbar|toolbariconsize|top|tpm|tsl|tsr|ttimeout|ttimeoutlen|ttm|tty|ttybuiltin|ttyfast|ttym|ttymouse|ttyscroll|ttytype|tw|tx|uc|ul|undolevels|updatecount|updatetime|ut|vb|vbs|vdir|verbosefile|vfile|viewdir|viewoptions|viminfo|virtualedit|visualbell|vop|wak|warn|wb|wc|wcm|wd|weirdinvert|wfh|wfw|whichwrap|wi|wig|wildchar|wildcharm|wildignore|wildmenu|wildmode|wildoptions|wim|winaltkeys|window|winfixheight|winfixwidth|winheight|winminheight|winminwidth|winwidth|wiv|wiw|wm|wmh|wmnu|wmw|wop|wrap|wrapmargin|wrapscan|writeany|writebackup|writedelay|ww|noacd|noai|noakm|noallowrevins|noaltkeymap|noanti|noantialias|noar|noarab|noarabic|noarabicshape|noari|noarshape|noautochdir|noautoindent|noautoread|noautowrite|noautowriteall|noaw|noawa|nobackup|noballooneval|nobeval|nobin|nobinary|nobiosk|nobioskey|nobk|nobl|nobomb|nobuflisted|nocf|noci|nocin|nocindent|nocompatible|noconfirm|noconsk|noconskey|nocopyindent|nocp|nocscopetag|nocscopeverbose|nocst|nocsverb|nocuc|nocul|nocursorcolumn|nocursorline|nodeco|nodelcombine|nodg|nodiff|nodigraph|nodisable|noea|noeb|noed|noedcompatible|noek|noendofline|noeol|noequalalways|noerrorbells|noesckeys|noet|noex|noexpandtab|noexrc|nofen|nofk|nofkmap|nofoldenable|nogd|nogdefault|noguipty|nohid|nohidden|nohk|nohkmap|nohkmapp|nohkp|nohls|noic|noicon|noignorecase|noim|noimc|noimcmdline|noimd|noincsearch|noinf|noinfercase|noinsertmode|nois|nojoinspaces|nojs|nolazyredraw|nolbr|nolinebreak|nolisp|nolist|noloadplugins|nolpl|nolz|noma|nomacatsui|nomagic|nomh|noml|nomod|nomodeline|nomodifiable|nomodified|nomore|nomousef|nomousefocus|nomousehide|nonu|nonumber|noodev|noopendevice|nopaste|nopi|nopreserveindent|nopreviewwindow|noprompt|nopvw|noreadonly|noremap|norestorescreen|norevins|nori|norightleft|norightleftcmd|norl|norlc|noro|nors|noru|noruler|nosb|nosc|noscb|noscrollbind|noscs|nosecure|nosft|noshellslash|noshelltemp|noshiftround|noshortname|noshowcmd|noshowfulltag|noshowmatch|noshowmode|nosi|nosm|nosmartcase|nosmartindent|nosmarttab|nosmd|nosn|nosol|nospell|nosplitbelow|nosplitright|nospr|nosr|nossl|nosta|nostartofline|nostmp|noswapfile|noswf|nota|notagbsearch|notagrelative|notagstack|notbi|notbidi|notbs|notermbidi|noterse|notextauto|notextmode|notf|notgst|notildeop|notimeout|notitle|noto|notop|notr|nottimeout|nottybuiltin|nottyfast|notx|novb|novisualbell|nowa|nowarn|nowb|noweirdinvert|nowfh|nowfw|nowildmenu|nowinfixheight|nowinfixwidth|nowiv|nowmnu|nowrap|nowrapscan|nowrite|nowriteany|nowritebackup|nows|invacd|invai|invakm|invallowrevins|invaltkeymap|invanti|invantialias|invar|invarab|invarabic|invarabicshape|invari|invarshape|invautochdir|invautoindent|invautoread|invautowrite|invautowriteall|invaw|invawa|invbackup|invballooneval|invbeval|invbin|invbinary|invbiosk|invbioskey|invbk|invbl|invbomb|invbuflisted|invcf|invci|invcin|invcindent|invcompatible|invconfirm|invconsk|invconskey|invcopyindent|invcp|invcscopetag|invcscopeverbose|invcst|invcsverb|invcuc|invcul|invcursorcolumn|invcursorline|invdeco|invdelcombine|invdg|invdiff|invdigraph|invdisable|invea|inveb|inved|invedcompatible|invek|invendofline|inveol|invequalalways|inverrorbells|invesckeys|invet|invex|invexpandtab|invexrc|invfen|invfk|invfkmap|invfoldenable|invgd|invgdefault|invguipty|invhid|invhidden|invhk|invhkmap|invhkmapp|invhkp|invhls|invhlsearch|invic|invicon|invignorecase|invim|invimc|invimcmdline|invimd|invincsearch|invinf|invinfercase|invinsertmode|invis|invjoinspaces|invjs|invlazyredraw|invlbr|invlinebreak|invlisp|invlist|invloadplugins|invlpl|invlz|invma|invmacatsui|invmagic|invmh|invml|invmod|invmodeline|invmodifiable|invmodified|invmore|invmousef|invmousefocus|invmousehide|invnu|invnumber|invodev|invopendevice|invpaste|invpi|invpreserveindent|invpreviewwindow|invprompt|invpvw|invreadonly|invremap|invrestorescreen|invrevins|invri|invrightleft|invrightleftcmd|invrl|invrlc|invro|invrs|invru|invruler|invsb|invsc|invscb|invscrollbind|invscs|invsecure|invsft|invshellslash|invshelltemp|invshiftround|invshortname|invshowcmd|invshowfulltag|invshowmatch|invshowmode|invsi|invsm|invsmartcase|invsmartindent|invsmarttab|invsmd|invsn|invsol|invspell|invsplitbelow|invsplitright|invspr|invsr|invssl|invsta|invstartofline|invstmp|invswapfile|invswf|invta|invtagbsearch|invtagrelative|invtagstack|invtbi|invtbidi|invtbs|invtermbidi|invterse|invtextauto|invtextmode|invtf|invtgst|invtildeop|invtimeout|invtitle|invto|invtop|invtr|invttimeout|invttybuiltin|invttyfast|invtx|invvb|invvisualbell|invwa|invwarn|invwb|invweirdinvert|invwfh|invwfw|invwildmenu|invwinfixheight|invwinfixwidth|invwiv|invwmnu|invwrap|invwrapscan|invwrite|invwriteany|invwritebackup|invws|t_AB|t_AF|t_al|t_AL|t_bc|t_cd|t_ce|t_Ce|t_cl|t_cm|t_Co|t_cs|t_Cs|t_CS|t_CV|t_da|t_db|t_dl|t_DL|t_EI|t_F1|t_F2|t_F3|t_F4|t_F5|t_F6|t_F7|t_F8|t_F9|t_fs|t_IE|t_IS|t_k1|t_K1|t_k2|t_k3|t_K3|t_k4|t_K4|t_k5|t_K5|t_k6|t_K6|t_k7|t_K7|t_k8|t_K8|t_k9|t_K9|t_KA|t_kb|t_kB|t_KB|t_KC|t_kd|t_kD|t_KD|t_ke|t_KE|t_KF|t_KG|t_kh|t_KH|t_kI|t_KI|t_KJ|t_KK|t_kl|t_KL|t_kN|t_kP|t_kr|t_ks|t_ku|t_le|t_mb|t_md|t_me|t_mr|t_ms|t_nd|t_op|t_RI|t_RV|t_Sb|t_se|t_Sf|t_SI|t_so|t_sr|t_te|t_ti|t_ts|t_ue|t_us|t_ut|t_vb|t_ve|t_vi|t_vs|t_WP|t_WS|t_xs|t_ZH|t_ZR)\\b/,\n\t\t'number': /\\b(?:0x[\\da-f]+|\\d+(?:\\.\\d+)?)\\b/i,\n\t\t'operator': /\\|\\||&&|[-+.]=?|[=!](?:[=~][#?]?)?|[<>]=?[#?]?|[*\\/%?]|\\b(?:is(?:not)?)\\b/,\n\t\t'punctuation': /[{}[\\](),;:]/\n\t};\n\n/***/ },\n/* 86 */\n/***/ function(module, exports) {\n\n\t// issues: nested multiline comments\n\tPrism.languages.swift = Prism.languages.extend('clike', {\n\t\t'string': {\n\t\t\tpattern: /(\"|')(\\\\(?:\\((?:[^()]|\\([^)]+\\))+\\)|\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /\\\\\\((?:[^()]|\\([^)]+\\))+\\)/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\tdelimiter: {\n\t\t\t\t\t\t\tpattern: /^\\\\\\(|\\)$/,\n\t\t\t\t\t\t\talias: 'variable'\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// See rest below\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'keyword': /\\b(as|associativity|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic(?:Type)?|else|enum|extension|fallthrough|final|for|func|get|guard|if|import|in|infix|init|inout|internal|is|lazy|left|let|mutating|new|none|nonmutating|operator|optional|override|postfix|precedence|prefix|private|Protocol|public|repeat|required|rethrows|return|right|safe|self|Self|set|static|struct|subscript|super|switch|throws?|try|Type|typealias|unowned|unsafe|var|weak|where|while|willSet|__(?:COLUMN__|FILE__|FUNCTION__|LINE__))\\b/,\n\t\t'number': /\\b([\\d_]+(\\.[\\de_]+)?|0x[a-f0-9_]+(\\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b/i,\n\t\t'constant': /\\b(nil|[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\\b/,\n\t\t'atrule': /@\\b(IB(?:Outlet|Designable|Action|Inspectable)|class_protocol|exported|noreturn|NS(?:Copying|Managed)|objc|UIApplicationMain|auto_closure)\\b/,\n\t\t'builtin': /\\b([A-Z]\\S+|abs|advance|alignof(?:Value)?|assert|contains|count(?:Elements)?|debugPrint(?:ln)?|distance|drop(?:First|Last)|dump|enumerate|equal|filter|find|first|getVaList|indices|isEmpty|join|last|lexicographicalCompare|map|max(?:Element)?|min(?:Element)?|numericCast|overlaps|partition|print(?:ln)?|reduce|reflect|reverse|sizeof(?:Value)?|sort(?:ed)?|split|startsWith|stride(?:of(?:Value)?)?|suffix|swap|toDebugString|toString|transcode|underestimateCount|unsafeBitCast|with(?:ExtendedLifetime|Unsafe(?:MutablePointers?|Pointers?)|VaList))\\b/\n\t});\n\tPrism.languages.swift['string'].inside['interpolation'].inside.rest = Prism.util.clone(Prism.languages.swift);\n\n/***/ },\n/* 87 */\n/***/ function(module, exports) {\n\n\tPrism.languages.objectivec = Prism.languages.extend('c', {\n\t\t'keyword': /\\b(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|in|self|super)\\b|(@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\\b/,\n\t\t'string': /(\"|')(\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1|@\"(\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\t'operator': /-[->]?|\\+\\+?|!=?|<<?=?|>>?=?|==?|&&?|\\|\\|?|[~^%?*\\/@]/\n\t});\n\n\n/***/ },\n/* 88 */\n/***/ function(module, exports) {\n\n\tPrism.languages.sql= {\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\w\\W]*?\\*\\/|(?:--|\\/\\/|#).*)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string' : {\n\t\t\tpattern: /(^|[^@\\\\])(\"|')(?:\\\\?[\\s\\S])*?\\2/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'variable': /@[\\w.$]+|@(\"|'|`)(?:\\\\?[\\s\\S])+?\\1/,\n\t\t'function': /\\b(?:COUNT|SUM|AVG|MIN|MAX|FIRST|LAST|UCASE|LCASE|MID|LEN|ROUND|NOW|FORMAT)(?=\\s*\\()/i, // Should we highlight user defined functions too?\n\t\t'keyword': /\\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR VARYING|CHARACTER (?:SET|VARYING)|CHARSET|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|DATA(?:BASES?)?|DATE(?:TIME)?|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITER(?:S)?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE(?: PRECISION)?|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE KEY|ELSE|ENABLE|ENCLOSED BY|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPE(?:D BY)?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTO|INVOKER|ISOLATION LEVEL|JOIN|KEYS?|KILL|LANGUAGE SQL|LAST|LEFT|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MODIFIES SQL DATA|MODIFY|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL(?: CHAR VARYING| CHARACTER(?: VARYING)?| VARCHAR)?|NATURAL|NCHAR(?: VARCHAR)?|NEXT|NO(?: SQL|CHECK|CYCLE)?|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READ(?:S SQL DATA|TEXT)?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEATABLE|REPLICATION|REQUIRE|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE MODE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|START(?:ING BY)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED BY|TEXT(?:SIZE)?|THEN|TIMESTAMP|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNPIVOT|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?)\\b/i,\n\t\t'boolean': /\\b(?:TRUE|FALSE|NULL)\\b/i,\n\t\t'number': /\\b-?(?:0x)?\\d*\\.?[\\da-f]+\\b/,\n\t\t'operator': /[-+*\\/=%^~]|&&?|\\|?\\||!=?|<(?:=>?|<|>)?|>[>=]?|\\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\\b/i,\n\t\t'punctuation': /[;[\\]()`,.]/\n\t};\n\n/***/ },\n/* 89 */\n/***/ function(module, exports) {\n\n\tPrism.languages.scheme = {\n\t\t'comment' : /;.*/,\n\t\t'string' : /\"(?:[^\"\\\\\\r\\n]|\\\\.)*?\"|'[^('\\s]*/,\n\t\t'keyword' : {\n\t\t\tpattern : /(\\()(?:define(?:-syntax|-library|-values)?|(?:case-)?lambda|let(?:\\*|rec)?(?:-values)?|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-rules)/,\n\t\t\tlookbehind : true\n\t\t},\n\t\t'builtin' : {\n\t\t\tpattern : /(\\()(?:(?:cons|car|cdr|list|call-with-current-continuation|call\\/cc|append|abs|apply|eval)\\b|null\\?|pair\\?|boolean\\?|eof-object\\?|char\\?|procedure\\?|number\\?|port\\?|string\\?|vector\\?|symbol\\?|bytevector\\?)/,\n\t\t\tlookbehind : true\n\t\t},\n\t\t'number' : {\n\t\t\tpattern: /(\\s|\\))[-+]?[0-9]*\\.?[0-9]+(?:\\s*[-+]\\s*[0-9]*\\.?[0-9]+i)?\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'boolean' : /#[tf]/,\n\t\t'operator': {\n\t\t\tpattern: /(\\()(?:[-+*%\\/]|[<>]=?|=>?)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'function' : {\n\t\t\tpattern : /(\\()[^\\s()]*(?=\\s)/,\n\t\t\tlookbehind : true\n\t\t},\n\t\t'punctuation' : /[()]/\n\t};\n\n/***/ },\n/* 90 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Original by Samuel Flores\n\t *\n\t * Adds the following new token classes:\n\t * \t\tconstant, builtin, variable, symbol, regex\n\t */\n\t(function(Prism) {\n\t\tPrism.languages.ruby = Prism.languages.extend('clike', {\n\t\t\t'comment': /#(?!\\{[^\\r\\n]*?\\}).*/,\n\t\t\t'keyword': /\\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\\b/\n\t\t});\n\t\n\t\tvar interpolation = {\n\t\t\tpattern: /#\\{[^}]+\\}/,\n\t\t\tinside: {\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^#\\{|\\}$/,\n\t\t\t\t\talias: 'tag'\n\t\t\t\t},\n\t\t\t\trest: Prism.util.clone(Prism.languages.ruby)\n\t\t\t}\n\t\t};\n\t\n\t\tPrism.languages.insertBefore('ruby', 'keyword', {\n\t\t\t'regex': [\n\t\t\t\t{\n\t\t\t\t\tpattern: /%r([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\1[gim]{0,3}/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /%r\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)[gim]{0,3}/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t// Here we need to specifically allow interpolation\n\t\t\t\t\tpattern: /%r\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[\\s\\S])*\\}[gim]{0,3}/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /%r\\[(?:[^\\[\\]\\\\]|\\\\[\\s\\S])*\\][gim]{0,3}/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /%r<(?:[^<>\\\\]|\\\\[\\s\\S])*>[gim]{0,3}/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^|[^/])\\/(?!\\/)(\\[.+?]|\\\\.|[^/\\r\\n])+\\/[gim]{0,3}(?=\\s*($|[\\r\\n,.;})]))/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t],\n\t\t\t'variable': /[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\\b)/,\n\t\t\t'symbol': /:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\\b)/\n\t\t});\n\t\n\t\tPrism.languages.insertBefore('ruby', 'number', {\n\t\t\t'builtin': /\\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\\b/,\n\t\t\t'constant': /\\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\\b)/\n\t\t});\n\t\n\t\tPrism.languages.ruby.string = [\n\t\t\t{\n\t\t\t\tpattern: /%[qQiIwWxs]?([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\1/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /%[qQiIwWxs]?\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Here we need to specifically allow interpolation\n\t\t\t\tpattern: /%[qQiIwWxs]?\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[\\s\\S])*\\}/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /%[qQiIwWxs]?\\[(?:[^\\[\\]\\\\]|\\\\[\\s\\S])*\\]/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /%[qQiIwWxs]?<(?:[^<>\\\\]|\\\\[\\s\\S])*>/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\"|')(#\\{[^}]+\\}|\\\\(?:\\r?\\n|\\r)|\\\\?.)*?\\1/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\t}(Prism));\n\n/***/ },\n/* 91 */\n/***/ function(module, exports) {\n\n\t/* TODO\n\t\tAdd support for variables inside double quoted strings\n\t\tAdd support for {php}\n\t*/\n\t\n\t(function(Prism) {\n\t\n\t\tvar smarty_pattern = /\\{\\*[\\w\\W]+?\\*\\}|\\{[\\w\\W]+?\\}/g;\n\t\tvar smarty_litteral_start = '{literal}';\n\t\tvar smarty_litteral_end = '{/literal}';\n\t\tvar smarty_litteral_mode = false;\n\t\t\n\t\tPrism.languages.smarty = Prism.languages.extend('markup', {\n\t\t\t'smarty': {\n\t\t\t\tpattern: smarty_pattern,\n\t\t\t\tinside: {\n\t\t\t\t\t'delimiter': {\n\t\t\t\t\t\tpattern: /^\\{|\\}$/i,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\t'string': /([\"'])(?:\\\\?.)*?\\1/,\n\t\t\t\t\t'number': /\\b-?(?:0x[\\dA-Fa-f]+|\\d*\\.?\\d+(?:[Ee][-+]?\\d+)?)\\b/,\n\t\t\t\t\t'variable': [\n\t\t\t\t\t\t/\\$(?!\\d)\\w+/,\n\t\t\t\t\t\t/#(?!\\d)\\w+#/,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /(\\.|->)(?!\\d)\\w+/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /(\\[)(?!\\d)\\w+(?=\\])/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t'function': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /(\\|\\s*)@?(?!\\d)\\w+/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/^\\/?(?!\\d)\\w+/,\n\t\t\t\t\t\t/(?!\\d)\\w+(?=\\()/\n\t\t\t\t\t],\n\t\t\t\t\t'attr-name': {\n\t\t\t\t\t\t// Value is made optional because it may have already been tokenized\n\t\t\t\t\t\tpattern: /\\w+\\s*=\\s*(?:(?!\\d)\\w+)?/,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\"variable\": {\n\t\t\t\t\t\t\t\tpattern: /(=\\s*)(?!\\d)\\w+/,\n\t\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"operator\": /=/\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t/[\\[\\]().,:`]|\\->/\n\t\t\t\t\t],\n\t\t\t\t\t'operator': [\n\t\t\t\t\t\t/[+\\-*\\/%]|==?=?|[!<>]=?|&&|\\|\\|?/,\n\t\t\t\t\t\t/\\bis\\s+(?:not\\s+)?(?:div|even|odd)(?:\\s+by)?\\b/,\n\t\t\t\t\t\t/\\b(?:eq|neq?|gt|lt|gt?e|lt?e|not|mod|or|and)\\b/\n\t\t\t\t\t],\n\t\t\t\t\t'keyword': /\\b(?:false|off|on|no|true|yes)\\b/\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\n\t\t// Comments are inserted at top so that they can\n\t\t// surround markup\n\t\tPrism.languages.insertBefore('smarty', 'tag', {\n\t\t\t'smarty-comment': {\n\t\t\t\tpattern: /\\{\\*[\\w\\W]*?\\*\\}/,\n\t\t\t\talias: ['smarty','comment']\n\t\t\t}\n\t\t});\n\t\n\t\t// Tokenize all inline Smarty expressions\n\t\tPrism.hooks.add('before-highlight', function(env) {\n\t\t\tif (env.language !== 'smarty') {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tenv.tokenStack = [];\n\t\n\t\t\tenv.backupCode = env.code;\n\t\t\tenv.code = env.code.replace(smarty_pattern, function(match) {\n\t\n\t\t\t\t// Smarty tags inside {literal} block are ignored\n\t\t\t\tif(match === smarty_litteral_end) {\n\t\t\t\t\tsmarty_litteral_mode = false;\n\t\t\t\t}\n\t\n\t\t\t\tif(!smarty_litteral_mode) {\n\t\t\t\t\tif(match === smarty_litteral_start) {\n\t\t\t\t\t\tsmarty_litteral_mode = true;\n\t\t\t\t\t}\n\t\t\t\t\tenv.tokenStack.push(match);\n\t\n\t\t\t\t\treturn '___SMARTY' + env.tokenStack.length + '___';\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\t\t});\n\t\n\t\t// Restore env.code for other plugins (e.g. line-numbers)\n\t\tPrism.hooks.add('before-insert', function(env) {\n\t\t\tif (env.language === 'smarty') {\n\t\t\t\tenv.code = env.backupCode;\n\t\t\t\tdelete env.backupCode;\n\t\t\t}\n\t\t});\n\t\n\t\t// Re-insert the tokens after highlighting\n\t\t// and highlight them with defined grammar\n\t\tPrism.hooks.add('after-highlight', function(env) {\n\t\t\tif (env.language !== 'smarty') {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tfor (var i = 0, t; t = env.tokenStack[i]; i++) {\n\t\t\t\t// The replace prevents $$, $&, $`, $', $n, $nn from being interpreted as special patterns\n\t\t\t\tenv.highlightedCode = env.highlightedCode.replace('___SMARTY' + (i + 1) + '___', Prism.highlight(t, env.grammar, 'smarty').replace(/\\$/g, '$$$$'));\n\t\t\t}\n\t\n\t\t\tenv.element.innerHTML = env.highlightedCode;\n\t\t});\n\t\n\t}(Prism));\n\n/***/ },\n/* 92 */\n/***/ function(module, exports) {\n\n\tPrism.languages.smalltalk = {\n\t\t'comment': /\"(?:\"\"|[^\"])+\"/,\n\t\t'string': /'(?:''|[^'])+'/,\n\t\t'symbol': /#[\\da-z]+|#(?:-|([+\\/\\\\*~<>=@%|&?!])\\1?)|#(?=\\()/i,\n\t\t'block-arguments': {\n\t\t\tpattern: /(\\[\\s*):[^\\[|]*?\\|/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'variable': /:[\\da-z]+/i,\n\t\t\t\t'punctuation': /\\|/\n\t\t\t}\n\t\t},\n\t\t'temporary-variables': {\n\t\t\tpattern: /\\|[^|]+\\|/,\n\t\t\tinside: {\n\t\t\t\t'variable': /[\\da-z]+/i,\n\t\t\t\t'punctuation': /\\|/\n\t\t\t}\n\t\t},\n\t\t'keyword': /\\b(?:nil|true|false|self|super|new)\\b/,\n\t\t'character': {\n\t\t\tpattern: /\\$./,\n\t\t\talias: 'string'\n\t\t},\n\t\t'number': [\n\t\t\t/\\d+r-?[\\dA-Z]+(?:\\.[\\dA-Z]+)?(?:e-?\\d+)?/,\n\t\t\t/(?:\\B-|\\b)\\d+(?:\\.\\d+)?(?:e-?\\d+)?/\n\t\t],\n\t\t'operator': /[<=]=?|:=|~[~=]|\\/\\/?|\\\\\\\\|>[>=]?|[!^+\\-*&|,@]/,\n\t\t'punctuation': /[.;:?\\[\\](){}]/\n\t};\n\n/***/ },\n/* 93 */\n/***/ function(module, exports) {\n\n\t/* TODO\n\t\tAdd support for Markdown notation inside doc comments\n\t\tAdd support for nested block comments...\n\t\tMatch closure params even when not followed by dash or brace\n\t\tAdd better support for macro definition\n\t*/\n\t\n\tPrism.languages.rust = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\w\\W]*?\\*\\//,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'string': [\n\t\t\t/b?r(#*)\"(?:\\\\?.)*?\"\\1/,\n\t\t\t/b?(\"|')(?:\\\\?.)*?\\1/\n\t\t],\n\t\t'keyword': /\\b(?:abstract|alignof|as|be|box|break|const|continue|crate|do|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|match|mod|move|mut|offsetof|once|override|priv|pub|pure|ref|return|sizeof|static|self|struct|super|true|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\\b/,\n\t\n\t\t'attribute': {\n\t\t\tpattern: /#!?\\[.+?\\]/,\n\t\t\talias: 'attr-name'\n\t\t},\n\t\n\t\t'function': [\n\t\t\t/[a-z0-9_]+(?=\\s*\\()/i,\n\t\t\t// Macros can use parens or brackets\n\t\t\t/[a-z0-9_]+!(?=\\s*\\(|\\[)/i\n\t\t],\n\t\t'macro-rules': {\n\t\t\tpattern: /[a-z0-9_]+!/i,\n\t\t\talias: 'function'\n\t\t},\n\t\n\t\t// Hex, oct, bin, dec numbers with visual separators and type suffix\n\t\t'number': /\\b-?(?:0x[\\dA-Fa-f](?:_?[\\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(\\d(_?\\d)*)?\\.?\\d(_?\\d)*([Ee][+-]?\\d+)?)(?:_?(?:[iu](?:8|16|32|64)?|f32|f64))?\\b/,\n\t\n\t\t// Closure params should not be confused with bitwise OR |\n\t\t'closure-params': {\n\t\t\tpattern: /\\|[^|]*\\|(?=\\s*[{-])/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /[\\|:,]/,\n\t\t\t\t'operator': /[&*]/\n\t\t\t}\n\t\t},\n\t\t'punctuation': /[{}[\\];(),:]|\\.+|->/,\n\t\t'operator': /[-+*\\/%!^=]=?|@|&[&=]?|\\|[|=]?|<<?=?|>>?=?/\n\t};\n\n/***/ },\n/* 94 */\n/***/ function(module, exports) {\n\n\tPrism.languages.r = {\n\t\t'comment': /#.*/,\n\t\t'string': /(['\"])(?:\\\\?.)*?\\1/,\n\t\t'percent-operator': {\n\t\t\t// Includes user-defined operators\n\t\t\t// and %%, %*%, %/%, %in%, %o%, %x%\n\t\t\tpattern: /%[^%\\s]*%/,\n\t\t\talias: 'operator'\n\t\t},\n\t\t'boolean': /\\b(?:TRUE|FALSE)\\b/,\n\t\t'ellipsis': /\\.\\.(?:\\.|\\d+)/,\n\t\t'number': [\n\t\t\t/\\b(?:NaN|Inf)\\b/,\n\t\t\t/\\b(?:0x[\\dA-Fa-f]+(?:\\.\\d*)?|\\d*\\.?\\d+)(?:[EePp][+-]?\\d+)?[iL]?\\b/\n\t\t],\n\t\t'keyword': /\\b(?:if|else|repeat|while|function|for|in|next|break|NULL|NA|NA_integer_|NA_real_|NA_complex_|NA_character_)\\b/,\n\t\t'operator': /->?>?|<(?:=|<?-)?|[>=!]=?|::?|&&?|\\|\\|?|[+*\\/^$@~]/,\n\t\t'punctuation': /[(){}\\[\\],;]/\n\t};\n\n/***/ },\n/* 95 */\n/***/ function(module, exports) {\n\n\tPrism.languages.d = Prism.languages.extend('clike', {\n\t\t'string': [\n\t\t\t// r\"\", x\"\"\n\t\t\t/\\b[rx]\"(\\\\.|[^\\\\\"])*\"[cwd]?/,\n\t\t\t// q\"[]\", q\"()\", q\"<>\", q\"{}\"\n\t\t\t/\\bq\"(?:\\[[\\s\\S]*?\\]|\\([\\s\\S]*?\\)|<[\\s\\S]*?>|\\{[\\s\\S]*?\\})\"/,\n\t\t\t// q\"IDENT\n\t\t\t// ...\n\t\t\t// IDENT\"\n\t\t\t/\\bq\"([_a-zA-Z][_a-zA-Z\\d]*)(?:\\r?\\n|\\r)[\\s\\S]*?(?:\\r?\\n|\\r)\\1\"/,\n\t\t\t// q\"//\", q\"||\", etc.\n\t\t\t/\\bq\"(.)[\\s\\S]*?\\1\"/,\n\t\t\t// Characters\n\t\t\t/'(?:\\\\'|\\\\?[^']+)'/,\n\t\n\t\t\t/([\"`])(\\\\.|(?!\\1)[^\\\\])*\\1[cwd]?/\n\t\t],\n\t\n\t\t'number': [\n\t\t\t// The lookbehind and the negative look-ahead try to prevent bad highlighting of the .. operator\n\t\t\t// Hexadecimal numbers must be handled separately to avoid problems with exponent \"e\"\n\t\t\t/\\b0x\\.?[a-f\\d_]+(?:(?!\\.\\.)\\.[a-f\\d_]*)?(?:p[+-]?[a-f\\d_]+)?[ulfi]*/i,\n\t\t\t{\n\t\t\t\tpattern: /((?:\\.\\.)?)(?:\\b0b\\.?|\\b|\\.)\\d[\\d_]*(?:(?!\\.\\.)\\.[\\d_]*)?(?:e[+-]?\\d[\\d_]*)?[ulfi]*/i,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\n\t\t// In order: $, keywords and special tokens, globally defined symbols\n\t\t'keyword': /\\$|\\b(?:abstract|alias|align|asm|assert|auto|body|bool|break|byte|case|cast|catch|cdouble|cent|cfloat|char|class|const|continue|creal|dchar|debug|default|delegate|delete|deprecated|do|double|else|enum|export|extern|false|final|finally|float|for|foreach|foreach_reverse|function|goto|idouble|if|ifloat|immutable|import|inout|int|interface|invariant|ireal|lazy|long|macro|mixin|module|new|nothrow|null|out|override|package|pragma|private|protected|public|pure|real|ref|return|scope|shared|short|static|struct|super|switch|synchronized|template|this|throw|true|try|typedef|typeid|typeof|ubyte|ucent|uint|ulong|union|unittest|ushort|version|void|volatile|wchar|while|with|__(?:(?:FILE|MODULE|LINE|FUNCTION|PRETTY_FUNCTION|DATE|EOF|TIME|TIMESTAMP|VENDOR|VERSION)__|gshared|traits|vector|parameters)|string|wstring|dstring|size_t|ptrdiff_t)\\b/,\n\t\t'operator': /\\|[|=]?|&[&=]?|\\+[+=]?|-[-=]?|\\.?\\.\\.|=[>=]?|!(?:i[ns]\\b|<>?=?|>=?|=)?|\\bi[ns]\\b|(?:<[<>]?|>>?>?|\\^\\^|[*\\/%^~])=?/\n\t});\n\t\n\t\n\tPrism.languages.d.comment = [\n\t\t// Shebang\n\t\t/^\\s*#!.+/,\n\t\t// /+ +/\n\t\t{\n\t\t\t// Allow one level of nesting\n\t\t\tpattern: /(^|[^\\\\])\\/\\+(?:\\/\\+[\\w\\W]*?\\+\\/|[\\w\\W])*?\\+\\//,\n\t\t\tlookbehind: true\n\t\t}\n\t].concat(Prism.languages.d.comment);\n\t\n\tPrism.languages.insertBefore('d', 'comment', {\n\t\t'token-string': {\n\t\t\t// Allow one level of nesting\n\t\t\tpattern: /\\bq\\{(?:|\\{[^}]*\\}|[^}])*\\}/,\n\t\t\talias: 'string'\n\t\t}\n\t});\n\t\n\tPrism.languages.insertBefore('d', 'keyword', {\n\t\t'property': /\\B@\\w*/\n\t});\n\t\n\tPrism.languages.insertBefore('d', 'function', {\n\t\t'register': {\n\t\t\t// Iasm registers\n\t\t\tpattern: /\\b(?:[ABCD][LHX]|E[ABCD]X|E?(?:BP|SP|DI|SI)|[ECSDGF]S|CR[0234]|DR[012367]|TR[3-7]|X?MM[0-7]|R[ABCD]X|[BS]PL|R[BS]P|[DS]IL|R[DS]I|R(?:[89]|1[0-5])[BWD]?|XMM(?:[89]|1[0-5])|YMM(?:1[0-5]|\\d))\\b|\\bST(?:\\([0-7]\\)|\\b)/,\n\t\t\talias: 'variable'\n\t\t}\n\t});\n\n/***/ },\n/* 96 */\n/***/ function(module, exports) {\n\n\tPrism.languages.dart = Prism.languages.extend('clike', {\n\t\t'string': [\n\t\t\t/r?(\"\"\"|''')[\\s\\S]*?\\1/,\n\t\t\t/r?(\"|')(\\\\?.)*?\\1/\n\t\t],\n\t\t'keyword': [\n\t\t\t/\\b(?:async|sync|yield)\\*/,\n\t\t\t/\\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|default|deferred|do|dynamic|else|enum|export|external|extends|factory|final|finally|for|get|if|implements|import|in|library|new|null|operator|part|rethrow|return|set|static|super|switch|this|throw|try|typedef|var|void|while|with|yield)\\b/\n\t\t],\n\t\t'operator': /\\bis!|\\b(?:as|is)\\b|\\+\\+|--|&&|\\|\\||<<=?|>>=?|~(?:\\/=?)?|[+\\-*\\/%&^|=!<>]=?|\\?/\n\t});\n\t\n\tPrism.languages.insertBefore('dart','function',{\n\t\t'metadata': {\n\t\t\tpattern: /@\\w+/,\n\t\t\talias: 'symbol'\n\t\t}\n\t});\n\n/***/ },\n/* 97 */\n/***/ function(module, exports) {\n\n\t(function(Prism) {\n\t\n\t// Ignore comments starting with { to privilege string interpolation highlighting\n\tvar comment = /#(?!\\{).+/,\n\t interpolation = {\n\t \tpattern: /#\\{[^}]+\\}/,\n\t \talias: 'variable'\n\t };\n\t\n\tPrism.languages.coffeescript = Prism.languages.extend('javascript', {\n\t\t'comment': comment,\n\t\t'string': [\n\t\n\t\t\t// Strings are multiline\n\t\t\t{\n\t\t\t\tpattern: /'(?:\\\\?[^\\\\])*?'/,\n\t\t\t\tgreedy: true,\n\t\t\t},\n\t\n\t\t\t{\n\t\t\t\t// Strings are multiline\n\t\t\t\tpattern: /\"(?:\\\\?[^\\\\])*?\"/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'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/,\n\t\t'class-member': {\n\t\t\tpattern: /@(?!\\d)\\w+/,\n\t\t\talias: 'variable'\n\t\t}\n\t});\n\t\n\tPrism.languages.insertBefore('coffeescript', 'comment', {\n\t\t'multiline-comment': {\n\t\t\tpattern: /###[\\s\\S]+?###/,\n\t\t\talias: 'comment'\n\t\t},\n\t\n\t\t// Block regexp can contain comments and interpolation\n\t\t'block-regex': {\n\t\t\tpattern: /\\/{3}[\\s\\S]*?\\/{3}/,\n\t\t\talias: 'regex',\n\t\t\tinside: {\n\t\t\t\t'comment': comment,\n\t\t\t\t'interpolation': interpolation\n\t\t\t}\n\t\t}\n\t});\n\t\n\tPrism.languages.insertBefore('coffeescript', 'string', {\n\t\t'inline-javascript': {\n\t\t\tpattern: /`(?:\\\\?[\\s\\S])*?`/,\n\t\t\tinside: {\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^`|`$/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\trest: Prism.languages.javascript\n\t\t\t}\n\t\t},\n\t\n\t\t// Block strings\n\t\t'multiline-string': [\n\t\t\t{\n\t\t\t\tpattern: /'''[\\s\\S]*?'''/,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\"\"\"[\\s\\S]*?\"\"\"/,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'string',\n\t\t\t\tinside: {\n\t\t\t\t\tinterpolation: interpolation\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t\n\t});\n\t\n\tPrism.languages.insertBefore('coffeescript', 'keyword', {\n\t\t// Object property\n\t\t'property': /(?!\\d)\\w+(?=\\s*:(?!:))/\n\t});\n\t\n\tdelete Prism.languages.coffeescript['template-string'];\n\t\n\t}(Prism));\n\n/***/ },\n/* 98 */\n/***/ function(module, exports) {\n\n\t(function (Prism) {\n\t\tvar variable = /%%?[~:\\w]+%?|!\\S+!/;\n\t\tvar parameter = {\n\t\t\tpattern: /\\/[a-z?]+(?=[ :]|$):?|-[a-z]\\b|--[a-z-]+\\b/im,\n\t\t\talias: 'attr-name',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /:/\n\t\t\t}\n\t\t};\n\t\tvar string = /\"[^\"]*\"/;\n\t\tvar number = /(?:\\b|-)\\d+\\b/;\n\t\n\t\tPrism.languages.batch = {\n\t\t\t'comment': [\n\t\t\t\t/^::.*/m,\n\t\t\t\t{\n\t\t\t\t\tpattern: /((?:^|[&(])[ \\t]*)rem\\b(?:[^^&)\\r\\n]|\\^(?:\\r\\n|[\\s\\S]))*/im,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t],\n\t\t\t'label': {\n\t\t\t\tpattern: /^:.*/m,\n\t\t\t\talias: 'property'\n\t\t\t},\n\t\t\t'command': [\n\t\t\t\t{\n\t\t\t\t\t// FOR command\n\t\t\t\t\tpattern: /((?:^|[&(])[ \\t]*)for(?: ?\\/[a-z?](?:[ :](?:\"[^\"]*\"|\\S+))?)* \\S+ in \\([^)]+\\) do/im,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'keyword': /^for\\b|\\b(?:in|do)\\b/i,\n\t\t\t\t\t\t'string': string,\n\t\t\t\t\t\t'parameter': parameter,\n\t\t\t\t\t\t'variable': variable,\n\t\t\t\t\t\t'number': number,\n\t\t\t\t\t\t'punctuation': /[()',]/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t// IF command\n\t\t\t\t\tpattern: /((?:^|[&(])[ \\t]*)if(?: ?\\/[a-z?](?:[ :](?:\"[^\"]*\"|\\S+))?)* (?:not )?(?:cmdextversion \\d+|defined \\w+|errorlevel \\d+|exist \\S+|(?:\"[^\"]*\"|\\S+)?(?:==| (?:equ|neq|lss|leq|gtr|geq) )(?:\"[^\"]*\"|\\S+))/im,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'keyword': /^if\\b|\\b(?:not|cmdextversion|defined|errorlevel|exist)\\b/i,\n\t\t\t\t\t\t'string': string,\n\t\t\t\t\t\t'parameter': parameter,\n\t\t\t\t\t\t'variable': variable,\n\t\t\t\t\t\t'number': number,\n\t\t\t\t\t\t'operator': /\\^|==|\\b(?:equ|neq|lss|leq|gtr|geq)\\b/i\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t// ELSE command\n\t\t\t\t\tpattern: /((?:^|[&()])[ \\t]*)else\\b/im,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'keyword': /^else\\b/i\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t// SET command\n\t\t\t\t\tpattern: /((?:^|[&(])[ \\t]*)set(?: ?\\/[a-z](?:[ :](?:\"[^\"]*\"|\\S+))?)* (?:[^^&)\\r\\n]|\\^(?:\\r\\n|[\\s\\S]))*/im,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'keyword': /^set\\b/i,\n\t\t\t\t\t\t'string': string,\n\t\t\t\t\t\t'parameter': parameter,\n\t\t\t\t\t\t'variable': [\n\t\t\t\t\t\t\tvariable,\n\t\t\t\t\t\t\t/\\w+(?=(?:[*\\/%+\\-&^|]|<<|>>)?=)/\n\t\t\t\t\t\t],\n\t\t\t\t\t\t'number': number,\n\t\t\t\t\t\t'operator': /[*\\/%+\\-&^|]=?|<<=?|>>=?|[!~_=]/,\n\t\t\t\t\t\t'punctuation': /[()',]/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t// Other commands\n\t\t\t\t\tpattern: /((?:^|[&(])[ \\t]*@?)\\w+\\b(?:[^^&)\\r\\n]|\\^(?:\\r\\n|[\\s\\S]))*/im,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'keyword': /^\\w+\\b/i,\n\t\t\t\t\t\t'string': string,\n\t\t\t\t\t\t'parameter': parameter,\n\t\t\t\t\t\t'label': {\n\t\t\t\t\t\t\tpattern: /(^\\s*):\\S+/m,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: 'property'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'variable': variable,\n\t\t\t\t\t\t'number': number,\n\t\t\t\t\t\t'operator': /\\^/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t'operator': /[&@]/,\n\t\t\t'punctuation': /[()']/\n\t\t};\n\t}(Prism));\n\n/***/ },\n/* 99 */\n/***/ function(module, exports) {\n\n\tPrism.languages.cpp = Prism.languages.extend('c', {\n\t\t'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|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/,\n\t\t'boolean': /\\b(true|false)\\b/,\n\t\t'operator': /[-+]{1,2}|!=?|<{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/\n\t});\n\t\n\tPrism.languages.insertBefore('cpp', 'keyword', {\n\t\t'class-name': {\n\t\t\tpattern: /(class\\s+)[a-z0-9_]+/i,\n\t\t\tlookbehind: true\n\t\t}\n\t});\n\n/***/ },\n/* 100 */\n/***/ function(module, exports) {\n\n\tPrism.languages.lua = {\n\t\t'comment': /^#!.+|--(?:\\[(=*)\\[[\\s\\S]*?\\]\\1\\]|.*)/m,\n\t\t// \\z may be used to skip the following space\n\t\t'string': {\n\t\t\tpattern: /([\"'])(?:(?!\\1)[^\\\\\\r\\n]|\\\\z(?:\\r\\n|\\s)|\\\\(?:\\r\\n|[\\s\\S]))*\\1|\\[(=*)\\[[\\s\\S]*?\\]\\2\\]/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'number': /\\b0x[a-f\\d]+\\.?[a-f\\d]*(?:p[+-]?\\d+)?\\b|\\b\\d+(?:\\.\\B|\\.?\\d*(?:e[+-]?\\d+)?\\b)|\\B\\.\\d+(?:e[+-]?\\d+)?\\b/i,\n\t\t'keyword': /\\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\\b/,\n\t\t'function': /(?!\\d)\\w+(?=\\s*(?:[({]))/,\n\t\t'operator': [\n\t\t\t/[-+*%^&|#]|\\/\\/?|<[<=]?|>[>=]?|[=~]=?/,\n\t\t\t{\n\t\t\t\t// Match \"..\" but don't break \"...\"\n\t\t\t\tpattern: /(^|[^.])\\.\\.(?!\\.)/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'punctuation': /[\\[\\](){},;]|\\.+|:+/\n\t};\n\n/***/ },\n/* 101 */\n/***/ function(module, exports) {\n\n\tPrism.languages.livescript = {\n\t\t'interpolated-string': {\n\t\t\tpattern: /(\"\"\"|\")(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /(^|[^\\\\])#[a-z_](?:-?[a-z]|\\d)*/m,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /(^|[^\\\\])#\\{[^}]+\\}/m,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\t\tpattern: /^#\\{|\\}$/,\n\t\t\t\t\t\t\talias: 'variable'\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// See rest below\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\w\\W]*?\\*\\//,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\])#.*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'string': [\n\t\t\t{\n\t\t\t\tpattern: /('''|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /<\\[[\\s\\S]*?\\]>/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t/\\\\[^\\s,;\\])}]+/\n\t\t],\n\t\t'regex': [\n\t\t\t{\n\t\t\t\tpattern: /\\/\\/(\\[.+?]|\\\\.|(?!\\/\\/)[^\\\\])+\\/\\/[gimyu]{0,5}/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'comment': {\n\t\t\t\t\t\tpattern: /(^|[^\\\\])#.*/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\\/(\\[.+?]|\\\\.|[^/\\\\\\r\\n])+\\/[gimyu]{0,5}/,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'keyword': {\n\t\t\tpattern: /(^|(?!-).)\\b(?:break|case|catch|class|const|continue|default|do|else|extends|fallthrough|finally|for(?: ever)?|function|if|implements|it|let|loop|new|null|otherwise|own|return|super|switch|that|then|this|throw|try|unless|until|var|void|when|while|yield)(?!-)\\b/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword-operator': {\n\t\t\tpattern: /(^|[^-])\\b(?:(?:delete|require|typeof)!|(?:and|by|delete|export|from|import(?: all)?|in|instanceof|is(?:nt| not)?|not|of|or|til|to|typeof|with|xor)(?!-)\\b)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'operator'\n\t\t},\n\t\t'boolean': {\n\t\t\tpattern: /(^|[^-])\\b(?:false|no|off|on|true|yes)(?!-)\\b/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'argument': {\n\t\t\t// Don't match .&. nor &&\n\t\t\tpattern: /(^|(?!\\.&\\.)[^&])&(?!&)\\d*/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'variable'\n\t\t},\n\t\t'number': /\\b(?:\\d+~[\\da-z]+|\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[a-z]\\w*)?)/i,\n\t\t'identifier': /[a-z_](?:-?[a-z]|\\d)*/i,\n\t\t'operator': [\n\t\t\t// Spaced .\n\t\t\t{\n\t\t\t\tpattern: /( )\\.(?= )/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t// Full list, in order:\n\t\t\t// .= .~ .. ...\n\t\t\t// .&. .^. .<<. .>>. .>>>.\n\t\t\t// := :: ::=\n\t\t\t// &&\n\t\t\t// || |>\n\t\t\t// < << <<< <<<<\n\t\t\t// <- <-- <-! <--!\n\t\t\t// <~ <~~ <~! <~~!\n\t\t\t// <| <= <?\n\t\t\t// > >> >= >?\n\t\t\t// - -- -> -->\n\t\t\t// + ++\n\t\t\t// @ @@\n\t\t\t// % %%\n\t\t\t// * **\n\t\t\t// ! != !~=\n\t\t\t// !~> !~~>\n\t\t\t// !-> !-->\n\t\t\t// ~ ~> ~~> ~=\n\t\t\t// = ==\n\t\t\t// ^ ^^\n\t\t\t// / ?\n\t\t\t/\\.(?:[=~]|\\.\\.?)|\\.(?:[&|^]|<<|>>>?)\\.|:(?:=|:=?)|&&|\\|[|>]|<(?:<<?<?|--?!?|~~?!?|[|=?])?|>[>=?]?|-(?:->?|>)?|\\+\\+?|@@?|%%?|\\*\\*?|!(?:~?=|--?>|~?~>)?|~(?:~?>|=)?|==?|\\^\\^?|[\\/?]/\n\t\t],\n\t\t'punctuation': /[(){}\\[\\]|.,:;`]/\n\t};\n\t\n\tPrism.languages.livescript['interpolated-string'].inside['interpolation'].inside.rest = Prism.languages.livescript;\n\n/***/ },\n/* 102 */\n/***/ function(module, exports) {\n\n\t(function(Prism) {\n\t\tvar funcPattern = /\\\\([^a-z()[\\]]|[a-z\\*]+)/i,\n\t\t insideEqu = {\n\t\t\t 'equation-command': {\n\t\t\t\t pattern: funcPattern,\n\t\t\t\t alias: 'regex'\n\t\t\t }\n\t\t };\n\t\n\t\tPrism.languages.latex = {\n\t\t\t'comment': /%.*/m,\n\t\t\t// the verbatim environment prints whitespace to the document\n\t\t\t'cdata': {\n\t\t\t\tpattern: /(\\\\begin\\{((?:verbatim|lstlisting)\\*?)\\})([\\w\\W]*?)(?=\\\\end\\{\\2\\})/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t/*\n\t\t\t * equations can be between $ $ or \\( \\) or \\[ \\]\n\t\t\t * (all are multiline)\n\t\t\t */\n\t\t\t'equation': [\n\t\t\t\t{\n\t\t\t\t\tpattern: /\\$(?:\\\\?[\\w\\W])*?\\$|\\\\\\((?:\\\\?[\\w\\W])*?\\\\\\)|\\\\\\[(?:\\\\?[\\w\\W])*?\\\\\\]/,\n\t\t\t\t\tinside: insideEqu,\n\t\t\t\t\talias: 'string'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /(\\\\begin\\{((?:equation|math|eqnarray|align|multline|gather)\\*?)\\})([\\w\\W]*?)(?=\\\\end\\{\\2\\})/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: insideEqu,\n\t\t\t\t\talias: 'string'\n\t\t\t\t}\n\t\t\t],\n\t\t\t/*\n\t\t\t * arguments which are keywords or references are highlighted\n\t\t\t * as keywords\n\t\t\t */\n\t\t\t'keyword': {\n\t\t\t\tpattern: /(\\\\(?:begin|end|ref|cite|label|usepackage|documentclass)(?:\\[[^\\]]+\\])?\\{)[^}]+(?=\\})/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'url': {\n\t\t\t\tpattern: /(\\\\url\\{)[^}]+(?=\\})/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t/*\n\t\t\t * section or chapter headlines are highlighted as bold so that\n\t\t\t * they stand out more\n\t\t\t */\n\t\t\t'headline': {\n\t\t\t\tpattern: /(\\\\(?:part|chapter|section|subsection|frametitle|subsubsection|paragraph|subparagraph|subsubparagraph|subsubsubparagraph)\\*?(?:\\[[^\\]]+\\])?\\{)[^}]+(?=\\}(?:\\[[^\\]]+\\])?)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'class-name'\n\t\t\t},\n\t\t\t'function': {\n\t\t\t\tpattern: funcPattern,\n\t\t\t\talias: 'selector'\n\t\t\t},\n\t\t\t'punctuation': /[[\\]{}&]/\n\t\t};\n\t})(Prism);\n\n\n/***/ },\n/* 103 */\n/***/ function(module, exports) {\n\n\tPrism.languages.groovy = Prism.languages.extend('clike', {\n\t\t'keyword': /\\b(as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\\b/,\n\t\t'string': [\n\t\t\t{\n\t\t\t\tpattern: /(\"\"\"|''')[\\W\\w]*?\\1|(\\$\\/)(\\$\\/\\$|[\\W\\w])*?\\/\\$/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\"|'|\\/)(?:\\\\?.)*?\\1/,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'number': /\\b(?:0b[01_]+|0x[\\da-f_]+(?:\\.[\\da-f_p\\-]+)?|[\\d_]+(?:\\.[\\d_]+)?(?:e[+-]?[\\d]+)?)[glidf]?\\b/i,\n\t\t'operator': {\n\t\t\tpattern: /(^|[^.])(~|==?~?|\\?[.:]?|\\*(?:[.=]|\\*=?)?|\\.[@&]|\\.\\.<|\\.{1,2}(?!\\.)|-[-=>]?|\\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\\|[|=]?|\\/=?|\\^=?|%=?)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /\\.+|[{}[\\];(),:$]/\n\t});\n\t\n\tPrism.languages.insertBefore('groovy', 'string', {\n\t\t'shebang': {\n\t\t\tpattern: /#!.+/,\n\t\t\talias: 'comment'\n\t\t}\n\t});\n\t\n\tPrism.languages.insertBefore('groovy', 'punctuation', {\n\t\t'spock-block': /\\b(setup|given|when|then|and|cleanup|expect|where):/\n\t});\n\t\n\tPrism.languages.insertBefore('groovy', 'function', {\n\t\t'annotation': {\n\t\t\talias: 'punctuation',\n\t\t\tpattern: /(^|[^.])@\\w+/,\n\t\t\tlookbehind: true\n\t\t}\n\t});\n\t\n\t// Handle string interpolation\n\tPrism.hooks.add('wrap', function(env) {\n\t\tif (env.language === 'groovy' && env.type === 'string') {\n\t\t\tvar delimiter = env.content[0];\n\t\n\t\t\tif (delimiter != \"'\") {\n\t\t\t\tvar pattern = /([^\\\\])(\\$(\\{.*?\\}|[\\w\\.]+))/;\n\t\t\t\tif (delimiter === '$') {\n\t\t\t\t\tpattern = /([^\\$])(\\$(\\{.*?\\}|[\\w\\.]+))/;\n\t\t\t\t}\n\t\n\t\t\t\t// To prevent double HTML-encoding we have to decode env.content first\n\t\t\t\tenv.content = env.content.replace(/</g, '<').replace(/&/g, '&');\n\t\n\t\t\t\tenv.content = Prism.highlight(env.content, {\n\t\t\t\t\t'expression': {\n\t\t\t\t\t\tpattern: pattern,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\tinside: Prism.languages.groovy\n\t\t\t\t\t}\n\t\t\t\t});\n\t\n\t\t\t\tenv.classes.push(delimiter === '/' ? 'regex' : 'gstring');\n\t\t\t}\n\t\t}\n\t});\n\n\n/***/ },\n/* 104 */\n/***/ function(module, exports) {\n\n\tPrism.languages.graphql = {\n\t\t'comment': /#.*/,\n\t\t'string': {\n\t\t\tpattern: /\"(?:\\\\.|[^\\\\\"])*\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'number': /(?:\\B-|\\b)\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b/,\n\t\t'boolean': /\\b(?:true|false)\\b/,\n\t\t'variable': /\\$[a-z_]\\w*/i,\n\t\t'directive': {\n\t\t\tpattern: /@[a-z_]\\w*/i,\n\t\t\talias: 'function'\n\t\t},\n\t\t'attr-name': /[a-z_]\\w*(?=\\s*:)/i,\n\t\t'keyword': [\n\t\t\t{\n\t\t\t\tpattern: /(fragment\\s+(?!on)[a-z_]\\w*\\s+|\\.\\.\\.\\s*)on\\b/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t/\\b(?:query|fragment|mutation)\\b/\n\t\t],\n\t\t'operator': /!|=|\\.{3}/,\n\t\t'punctuation': /[!(){}\\[\\]:=,]/\n\t};\n\n/***/ },\n/* 105 */\n/***/ function(module, exports) {\n\n\tPrism.languages.nginx = Prism.languages.extend('clike', {\n\t 'comment': {\n\t pattern: /(^|[^\"{\\\\])#.*/,\n\t lookbehind: true\n\t },\n\t 'keyword': /\\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|server|events|location|include|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,\n\t});\n\t\n\tPrism.languages.insertBefore('nginx', 'keyword', {\n\t 'variable': /\\$[a-z_]+/i\n\t});\n\n/***/ },\n/* 106 */\n/***/ function(module, exports) {\n\n\tPrism.languages.erlang = {\n\t\t'comment': /%.+/,\n\t\t'string': /\"(?:\\\\?.)*?\"/,\n\t\t'quoted-function': {\n\t\t\tpattern: /'(?:\\\\.|[^'\\\\])+'(?=\\()/,\n\t\t\talias: 'function'\n\t\t},\n\t\t'quoted-atom': {\n\t\t\tpattern: /'(?:\\\\.|[^'\\\\])+'/,\n\t\t\talias: 'atom'\n\t\t},\n\t\t'boolean': /\\b(?:true|false)\\b/,\n\t\t'keyword': /\\b(?:fun|when|case|of|end|if|receive|after|try|catch)\\b/,\n\t\t'number': [\n\t\t\t/\\$\\\\?./,\n\t\t\t/\\d+#[a-z0-9]+/i,\n\t\t\t/(?:\\b|-)\\d*\\.?\\d+([Ee][+-]?\\d+)?\\b/\n\t\t],\n\t\t'function': /\\b[a-z][\\w@]*(?=\\()/,\n\t\t'variable': {\n\t\t\t// Look-behind is used to prevent wrong highlighting of atoms containing \"@\"\n\t\t\tpattern: /(^|[^@])(?:\\b|\\?)[A-Z_][\\w@]*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'operator': [\n\t\t\t/[=\\/<>:]=|=[:\\/]=|\\+\\+?|--?|[=*\\/!]|\\b(?:bnot|div|rem|band|bor|bxor|bsl|bsr|not|and|or|xor|orelse|andalso)\\b/,\n\t\t\t{\n\t\t\t\t// We don't want to match <<\n\t\t\t\tpattern: /(^|[^<])<(?!<)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// We don't want to match >>\n\t\t\t\tpattern: /(^|[^>])>(?!>)/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'atom': /\\b[a-z][\\w@]*/,\n\t\t'punctuation': /[()[\\]{}:;,.#|]|<<|>>/\n\t\n\t};\n\n/***/ },\n/* 107 */\n/***/ function(module, exports) {\n\n\tPrism.languages.powershell = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^`])<#[\\w\\W]*?#>/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^`])#.*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'string': [\n\t\t\t{\n\t\t\t\tpattern: /\"(`?[\\w\\W])*?\"/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'function': {\n\t\t\t\t\t\tpattern: /[^`]\\$\\(.*?\\)/,\n\t\t\t\t\t\t// Populated at end of file\n\t\t\t\t\t\tinside: {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /'([^']|'')*'/,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t// Matches name spaces as well as casts, attribute decorators. Force starting with letter to avoid matching array indices\n\t\t'namespace': /\\[[a-z][\\w\\W]*?\\]/i,\n\t\t'boolean': /\\$(true|false)\\b/i,\n\t\t'variable': /\\$\\w+\\b/i,\n\t\t// Cmdlets and aliases. Aliases should come last, otherwise \"write\" gets preferred over \"write-host\" for example\n\t\t// Get-Command | ?{ $_.ModuleName -match \"Microsoft.PowerShell.(Util|Core|Management)\" }\n\t\t// Get-Alias | ?{ $_.ReferencedCommand.Module.Name -match \"Microsoft.PowerShell.(Util|Core|Management)\" }\n\t\t'function': [\n\t\t\t/\\b(Add-(Computer|Content|History|Member|PSSnapin|Type)|Checkpoint-Computer|Clear-(Content|EventLog|History|Item|ItemProperty|Variable)|Compare-Object|Complete-Transaction|Connect-PSSession|ConvertFrom-(Csv|Json|StringData)|Convert-Path|ConvertTo-(Csv|Html|Json|Xml)|Copy-(Item|ItemProperty)|Debug-Process|Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)|Disconnect-PSSession|Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)|Enter-PSSession|Exit-PSSession|Export-(Alias|Clixml|Console|Csv|FormatData|ModuleMember|PSSession)|ForEach-Object|Format-(Custom|List|Table|Wide)|Get-(Alias|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Culture|Date|Event|EventLog|EventSubscriber|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job|Location|Member|Module|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|WmiObject)|Group-Object|Import-(Alias|Clixml|Csv|LocalizedData|Module|PSSession)|Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)|Join-Path|Limit-EventLog|Measure-(Command|Object)|Move-(Item|ItemProperty)|New-(Alias|Event|EventLog|Item|ItemProperty|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy)|Out-(Default|File|GridView|Host|Null|Printer|String)|Pop-Location|Push-Location|Read-Host|Receive-(Job|PSSession)|Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)|Remove-(Computer|Event|EventLog|Item|ItemProperty|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)|Rename-(Computer|Item|ItemProperty)|Reset-ComputerMachinePassword|Resolve-Path|Restart-(Computer|Service)|Restore-Computer|Resume-(Job|Service)|Save-Help|Select-(Object|String|Xml)|Send-MailMessage|Set-(Alias|Content|Date|Item|ItemProperty|Location|PSBreakpoint|PSDebug|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)|Show-(Command|ControlPanelItem|EventLog)|Sort-Object|Split-Path|Start-(Job|Process|Service|Sleep|Transaction)|Stop-(Computer|Job|Process|Service)|Suspend-(Job|Service)|Tee-Object|Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)|Trace-Command|Unblock-File|Undo-Transaction|Unregister-(Event|PSSessionConfiguration)|Update-(FormatData|Help|List|TypeData)|Use-Transaction|Wait-(Event|Job|Process)|Where-Object|Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning))\\b/i,\n\t\t\t/\\b(ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\\b/i\n\t\t],\n\t\t// per http://technet.microsoft.com/en-us/library/hh847744.aspx\n\t\t'keyword': /\\b(Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\\b/i,\n\t\t'operator': {\n\t\t\tpattern: /(\\W?)(!|-(eq|ne|gt|ge|lt|le|sh[lr]|not|b?(and|x?or)|(Not)?(Like|Match|Contains|In)|Replace|Join|is(Not)?|as)\\b|-[-=]?|\\+[+=]?|[*\\/%]=?)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[|{}[\\];(),.]/\n\t};\n\t\n\t// Variable interpolation inside strings, and nested expressions\n\tPrism.languages.powershell.string[0].inside.boolean = Prism.languages.powershell.boolean;\n\tPrism.languages.powershell.string[0].inside.variable = Prism.languages.powershell.variable;\n\tPrism.languages.powershell.string[0].inside.function.inside = Prism.util.clone(Prism.languages.powershell);\n\n\n/***/ },\n/* 108 */\n/***/ function(module, exports) {\n\n\tPrism.languages.makefile = {\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\\\\])#(?:\\\\(?:\\r\\n|[\\s\\S])|.)*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\n\t\t// Built-in target names\n\t\t'builtin': /\\.[A-Z][^:#=\\s]+(?=\\s*:(?!=))/,\n\t\n\t\t// Targets\n\t\t'symbol': {\n\t\t\tpattern: /^[^:=\\r\\n]+(?=\\s*:(?!=))/m,\n\t\t\tinside: {\n\t\t\t\t'variable': /\\$+(?:[^(){}:#=\\s]+|(?=[({]))/\n\t\t\t}\n\t\t},\n\t\t'variable': /\\$+(?:[^(){}:#=\\s]+|\\([@*%<^+?][DF]\\)|(?=[({]))/,\n\t\n\t\t'keyword': [\n\t\t\t// Directives\n\t\t\t/-include\\b|\\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\\b/,\n\t\t\t// Functions\n\t\t\t{\n\t\t\t\tpattern: /(\\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \\t])/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'operator': /(?:::|[?:+!])?=|[|@]/,\n\t\t'punctuation': /[:;(){}]/\n\t};\n\n/***/ },\n/* 109 */\n/***/ function(module, exports) {\n\n\tPrism.languages.markdown = Prism.languages.extend('markup', {});\n\tPrism.languages.insertBefore('markdown', 'prolog', {\n\t\t'blockquote': {\n\t\t\t// > ...\n\t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'code': [\n\t\t\t{\n\t\t\t\t// Prefixed by 4 spaces or 1 tab\n\t\t\t\tpattern: /^(?: {4}|\\t).+/m,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// `code`\n\t\t\t\t// ``code``\n\t\t\t\tpattern: /``.+?``|`[^`\\n]+`/,\n\t\t\t\talias: 'keyword'\n\t\t\t}\n\t\t],\n\t\t'title': [\n\t\t\t{\n\t\t\t\t// title 1\n\t\t\t\t// =======\n\t\n\t\t\t\t// title 2\n\t\t\t\t// -------\n\t\t\t\tpattern: /\\w+.*(?:\\r?\\n|\\r)(?:==+|--+)/,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /==+$|--+$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// # title 1\n\t\t\t\t// ###### title 6\n\t\t\t\tpattern: /(^\\s*)#+.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /^#+|#+$/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'hr': {\n\t\t\t// ***\n\t\t\t// ---\n\t\t\t// * * *\n\t\t\t// -----------\n\t\t\tpattern: /(^\\s*)([*-])([\\t ]*\\2){2,}(?=\\s*$)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'list': {\n\t\t\t// * item\n\t\t\t// + item\n\t\t\t// - item\n\t\t\t// 1. item\n\t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'url-reference': {\n\t\t\t// [id]: http://example.com \"Optional title\"\n\t\t\t// [id]: http://example.com 'Optional title'\n\t\t\t// [id]: http://example.com (Optional title)\n\t\t\t// [id]: <http://example.com> \"Optional title\"\n\t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n\t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n\t\t\t},\n\t\t\talias: 'url'\n\t\t},\n\t\t'bold': {\n\t\t\t// **strong**\n\t\t\t// __strong__\n\t\n\t\t\t// Allow only one line break\n\t\t\tpattern: /(^|[^\\\\])(\\*\\*|__)(?:(?:\\r?\\n|\\r)(?!\\r?\\n|\\r)|.)+?\\2/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^\\*\\*|^__|\\*\\*$|__$/\n\t\t\t}\n\t\t},\n\t\t'italic': {\n\t\t\t// *em*\n\t\t\t// _em_\n\t\n\t\t\t// Allow only one line break\n\t\t\tpattern: /(^|[^\\\\])([*_])(?:(?:\\r?\\n|\\r)(?!\\r?\\n|\\r)|.)+?\\2/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^[*_]|[*_]$/\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// [example](http://example.com \"Optional title\")\n\t\t\t// [example] [id]\n\t\t\tpattern: /!?\\[[^\\]]+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)| ?\\[[^\\]\\n]*\\])/,\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /(!?\\[)[^\\]]+(?=\\]$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t\n\tPrism.languages.markdown['bold'].inside['url'] = Prism.util.clone(Prism.languages.markdown['url']);\n\tPrism.languages.markdown['italic'].inside['url'] = Prism.util.clone(Prism.languages.markdown['url']);\n\tPrism.languages.markdown['bold'].inside['italic'] = Prism.util.clone(Prism.languages.markdown['italic']);\n\tPrism.languages.markdown['italic'].inside['bold'] = Prism.util.clone(Prism.languages.markdown['bold']);\n\n/***/ },\n/* 110 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 111 */,\n/* 112 */,\n/* 113 */,\n/* 114 */,\n/* 115 */,\n/* 116 */,\n/* 117 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 118 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 119 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 120 */,\n/* 121 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<div tabindex=\\\"1\\\" class=\\\"mditor {{split?'split':''}} {{preview?'preview':''}} {{fullscreen?'fullscreen':''}}\\\" style=\\\"width:{{width}};height:{{height}}\\\">\\n <div class=\\\"head\\\" m:on:dblclick=\\\"onHeadDblClick\\\">\\n <m:toolbar m:id=\\\"toolbar\\\" m:prop:mditor=\\\"self\\\"></m:toolbar>\\n </div>\\n <div class=\\\"body\\\">\\n <m:editor m:id=\\\"editor\\\" m:prop:mditor=\\\"self\\\" m:model:value=\\\"value\\\" m:on:scroll=\\\"syncScroll\\\" m:on:changed=\\\"onChanged\\\" m:on:input=\\\"onInput\\\" m:on:paste=\\\"syncScroll\\\"></m:editor>\\n <m:viewer m:id=\\\"viewer\\\" m:prop:mditor=\\\"self\\\" m:model:value=\\\"value\\\"></m:viewer>\\n <m:finder m:id=\\\"finder\\\" m:prop:mditor=\\\"self\\\"></m:viewer>\\n </div>\\n</div>\"\n\n/***/ }\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// js/mditor.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 20da7393c667ba2c5e38","const mokit = require('mokit');\nconst Toolbar = require('../toolbar');\nconst Editor = require('../editor');\nconst Viewer = require('../viewer');\nconst Finder = require('../finder');\nconst Shortcut = require('./shortcut');\nconst Parser = require('../common/parser');\n\nrequire('font-awesome/css/font-awesome.css');\nrequire('github-markdown-css/github-markdown.css');\nrequire('prismjs/themes/prism.css');\nrequire('./index.less');\n\nconst HIDDEN_CLASS_NAME = 'mditor-hidden';\n\nconst Mditor = new mokit.Component({\n template: require('./index.html'),\n\n onInit() {\n this.PLATFORM = navigator.platform.toLowerCase();\n this.EOL = this.PLATFORM == 'win32' ? '\\r\\n' : '\\n';\n this.CMD = this.PLATFORM.indexOf('mac') > -1 ? 'command' : 'ctrl';\n this.INDENT = ' ';\n this.shortcut = new Shortcut(this);\n this.Parser = Parser;\n this.parser = new Parser(this);\n },\n\n onReady() {\n this.shortcut.bind('tab', this.editor.addIndent.bind(this.editor));\n this.shortcut.bind('shift+tab', this.editor.removeIndent.bind(this.editor));\n this.shortcut.bind('enter', (event) => {\n this._ulAndQuoteAutoComplete(event);\n this._olAutoComplete(event);\n this._keepIndent(event);\n }, true);\n setTimeout(() => {\n this.$emit('ready');\n }, 0);\n },\n\n components: {\n Toolbar,\n Editor,\n Viewer,\n Finder\n },\n\n props: {\n height: '400px',\n width: 'auto',\n preview: false,\n split: true,\n fullscreen: false\n },\n\n data() {\n return {\n self: this,\n value: ''\n };\n },\n\n find(text) {\n this.finder.show(text);\n },\n\n syncScroll() {\n if (!this.split || this.preview) return;\n let offsetHeight = this.editor.textarea.offsetHeight;\n let editorScrollHeight = this.editor.textarea.scrollHeight;\n let viewerScrollHeight = this.viewer.$element.scrollHeight;\n let editorScrollTop = this.editor.textarea.scrollTop;\n let viewerScrollTop = editorScrollTop * (viewerScrollHeight - offsetHeight) / (editorScrollHeight - offsetHeight);\n this.viewer.$element.scrollTop = viewerScrollTop;\n },\n\n onChanged() {\n this.$emit('changed');\n this.syncScroll();\n },\n\n onInput() {\n this.$emit('input');\n },\n\n onHeadDblClick(event) {\n if (event.target.tagName == 'I') return;\n this.$emit('head-dblclick');\n },\n\n _keepIndent(event) {\n let text = this.editor.getBeforeTextInLine();\n let parts = text.split(this.INDENT);\n if (parts.length < 2) return;\n let count = 0;\n let buffer = [this.EOL];\n while (parts[count] === '' &&\n count < (parts.length - 1)) {\n count++;\n buffer.push(this.INDENT);\n }\n this.editor.insertBeforeText(buffer.join(''));\n event.preventDefault();\n },\n\n _ulAndQuoteAutoComplete(event) {\n let text = this.editor.getBeforeTextInLine();\n let prefix = text.substr(0, 2);\n if (prefix != '- ' && prefix != '* ' && prefix != '> ') return;\n if (text.length > prefix.length) {\n this.editor.insertBeforeText(this.EOL + prefix);\n } else {\n this.editor.selectBeforeText(prefix.length);\n this.editor.setSelectText('');\n }\n event.preventDefault();\n },\n\n _olAutoComplete(event) {\n let exp = /^\\d+\\./;\n let text = this.editor.getBeforeTextInLine();\n let trimedText = text.trim();\n if (!exp.test(trimedText)) return;\n let num = trimedText.split('.')[0];\n if (trimedText.length > num.length + 1) {\n this.editor.insertBeforeText(this.EOL + (parseInt(num) + 1) + '. ');\n } else {\n this.editor.selectBeforeText(text.length);\n this.editor.setSelectText('');\n }\n event.preventDefault();\n },\n\n focus() {\n if (this.preview) {\n this.$element.focus();\n } else {\n this.editor.focus();\n }\n },\n\n blur() {\n this.editor.blur();\n },\n\n addCommand(item) {\n if (!item.name || !item.handler) return;\n this.commands = this.commands || {};\n this.commands[item.name] = item;\n if (item.key) {\n this.shortcut.bind(item.key, item.name, item.allowDefault, item.owner);\n }\n },\n\n removeCommand(name) {\n this.commands = this.commands || {};\n let item = this.commands[name];\n if (!item) return;\n this.shortcut.unbind(item.key);\n this.commands[name] = null;\n delete this.commands[name];\n },\n\n execCommand(name, event) {\n event = event || {};\n event.mditor = this;\n event.toolbar = this.toolbar;\n event.editor = this.editor;\n this.commands[name].handler.call(this, event);\n }\n\n});\n\nMditor.fromTextarea = function (textarea) {\n textarea.classList.add(HIDDEN_CLASS_NAME);\n let mditor = new Mditor();\n mditor.value = textarea.value;\n mditor.$watch('value', () => {\n textarea.value = mditor.value;\n });\n mditor.$mount(textarea);\n mditor.switchTextarea = function () {\n if (textarea.classList.contains(HIDDEN_CLASS_NAME)) {\n textarea.value = mditor.value;\n mditor.$element.classList.add(HIDDEN_CLASS_NAME);\n textarea.classList.remove(HIDDEN_CLASS_NAME);\n } else {\n mditor.value = textarea.value;\n textarea.classList.add(HIDDEN_CLASS_NAME);\n mditor.$element.classList.remove(HIDDEN_CLASS_NAME);\n }\n };\n return mditor;\n};\n\nMditor.Parser = Parser;\n\nmodule.exports = window.Mditor = Mditor;\n\n\n// WEBPACK FOOTER //\n// ./src/client/index.js","const info = require('./info.json');\nconst utils = require('ntils');\nconst Class = require('cify');\nconst Watcher = require('./watcher');\nconst Observer = require('./observer');\nconst Template = require('./template');\nconst Component = require('./component');\nconst EventEmitter = require('./events');\n\n//持载模板相关对象\nutils.copy(Template, Component);\n\nComponent.version = info.version;\nComponent.Template = Template;\nComponent.Watcher = Watcher;\nComponent.Observer = Observer;\nComponent.EventEmitter = EventEmitter;\nComponent.utils = utils;\nComponent.Class = Class;\n\n//定义安装插件的方法\nComponent.use = function (plugin) {\n let install = plugin.install || plugin;\n if (!utils.isFunction(install)) {\n throw new Error('Invalid Plugin');\n }\n return install.call(plugin, this);\n};\n\n//安装内置的路由插件\n//Component.use(Router);\n\nmodule.exports = Component;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/index.js","module.exports = {\n\t\"name\": \"mokit\",\n\t\"version\": \"3.0.15\"\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.3.0.15@mokit/lib/info.json\n// module id = 2\n// module chunks = 0","(function (ntils) {\n\n /**\n * 空函数\n */\n ntils.noop = function () { };\n\n /**\n * 验证一个对象是否为NULL\n * @method isNull\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isNull = function (obj) {\n return obj === null || typeof obj === \"undefined\";\n };\n\n /**\n * 除去字符串两端的空格\n * @method trim\n * @param {String} str 源字符串\n * @return {String} 结果字符串\n * @static\n */\n ntils.trim = function (str) {\n if (this.isNull(str)) return str;\n if (str.trim) {\n return str.trim();\n } else {\n return str.replace(/(^[\\\\s]*)|([\\\\s]*$)/g, \"\");\n }\n };\n\n /**\n * 替换所有\n * @method replace\n * @param {String} str 源字符串\n * @param {String} str1 要替换的字符串\n * @param {String} str2 替换为的字符串\n * @static\n */\n ntils.replace = function (str, str1, str2) {\n if (this.isNull(str)) return str;\n return str.replace(new RegExp(str1, 'g'), str2);\n };\n\n /**\n * 从字符串开头匹配\n * @method startWith\n * @param {String} str1 源字符串\n * @param {String} str2 要匹配的字符串\n * @return {Boolean} 匹配结果\n * @static\n */\n ntils.startWith = function (str1, str2) {\n if (this.isNull(str1) || this.isNull(str2)) return false;\n return str1.indexOf(str2) === 0;\n };\n\n /**\n * 是否包含\n * @method contains\n * @param {String} str1 源字符串\n * @param {String} str2 检查包括字符串\n * @return {Boolean} 结果\n * @static\n */\n ntils.contains = function (str1, str2) {\n var self = this;\n if (this.isNull(str1) || this.isNull(str2)) return false;\n return str1.indexOf(str2) > -1;\n };\n\n /**\n * 从字符串结束匹配\n * @method endWidth\n * @param {String} str1 源字符串\n * @param {String} str2 匹配字符串\n * @return {Boolean} 匹配结果\n * @static\n */\n ntils.endWith = function (str1, str2) {\n if (this.isNull(str1) || this.isNull(str2)) return false;\n return str1.indexOf(str2) === (str1.length - str2.length);\n };\n\n /**\n * 是否包含属性\n * @method hasProperty\n * @param {Object} obj 对象\n * @param {String} name 属性名\n * @return {Boolean} 结果\n * @static\n */\n ntils.has = ntils.hasProperty = function (obj, name) {\n if (this.isNull(obj) || this.isNull(name)) return false;\n return (name in obj) || (obj.hasOwnProperty(name));\n };\n\n /**\n * 验证一个对象是否为Function\n * @method isFunction\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isFunction = function (obj) {\n if (this.isNull(obj)) return false;\n return typeof obj === \"function\";\n };\n\n /**\n * 验证一个对象是否为String\n * @method isString\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isString = function (obj) {\n if (this.isNull(obj)) return false;\n return typeof obj === 'string' || obj instanceof String;\n };\n\n /**\n * 验证一个对象是否为Number\n * @method isNumber\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isNumber = function (obj) {\n if (this.isNull(obj)) return false;\n return typeof obj === 'number' || obj instanceof Number;\n };\n\n /**\n * 验证一个对象是否为Boolean\n * @method isBoolean\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isBoolean = function (obj) {\n if (this.isNull(obj)) return false;\n return typeof obj === 'boolean' || obj instanceof Boolean;\n };\n\n /**\n * 验证一个对象是否为HTML Element\n * @method isElement\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isElement = function (obj) {\n if (this.isNull(obj)) return false;\n if (window.Element) {\n return obj instanceof Element;\n } else {\n return (obj.tagName && obj.nodeType && obj.nodeName && obj.attributes && obj.ownerDocument);\n }\n };\n\n /**\n * 验证一个对象是否为HTML Text Element\n * @method isText\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isText = function (obj) {\n if (this.isNull(obj)) return false;\n return obj instanceof Text;\n };\n\n /**\n * 验证一个对象是否为Object\n * @method isObject\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isObject = function (obj) {\n if (this.isNull(obj)) return false;\n return typeof obj === \"object\";\n };\n\n /**\n * 验证一个对象是否为Array或伪Array\n * @method isArray\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isArray = function (obj) {\n if (this.isNull(obj)) return false;\n var v1 = Object.prototype.toString.call(obj) === '[object Array]';\n var v2 = obj instanceof Array;\n var v3 = !this.isString(obj) && this.isNumber(obj.length) && this.isFunction(obj.splice);\n var v4 = !this.isString(obj) && this.isNumber(obj.length) && obj[0];\n return v1 || v2 || v3 || v4;\n };\n\n /**\n * 验证是不是一个日期对象\n * @method isDate\n * @param {Object} val 要检查的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isDate = function (val) {\n if (this.isNull(val)) return false;\n return val instanceof Date;\n };\n\n /**\n * 验证是不是一个正则对象\n * @method isDate\n * @param {Object} val 要检查的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isRegexp = function (val) {\n return val instanceof RegExp;\n };\n\n /**\n * 转换为数组\n * @method toArray\n * @param {Array|Object} array 伪数组\n * @return {Array} 转换结果数组\n * @static\n */\n ntils.toArray = function (array) {\n if (this.isNull(array)) return [];\n return Array.prototype.slice.call(array);\n };\n\n /**\n * 转为日期格式\n * @method toDate\n * @param {Number|String} val 日期字符串或整型数值\n * @return {Date} 日期对象\n * @static\n */\n ntils.toDate = function (val) {\n var self = this;\n if (self.isNumber(val))\n return new Date(val);\n else if (self.isString(val))\n return new Date(self.replace(self.replace(val, '-', '/'), 'T', ' '));\n else if (self.isDate(val))\n return val;\n else\n return null;\n };\n\n /**\n * 遍历一个对像或数组\n * @method each\n * @param {Object or Array} obj 要遍历的数组或对象\n * @param {Function} fn 处理函数\n * @return {void} 无返回值\n * @static\n */\n ntils.each = function (list, handler, scope) {\n if (this.isNull(list) || this.isNull(handler)) return;\n if (this.isArray(list)) {\n var listLength = list.length;\n for (var i = 0; i < listLength; i++) {\n var rs = handler.call(scope || list[i], i, list[i]);\n if (!this.isNull(rs)) return rs;\n }\n } else {\n for (var key in list) {\n var rs = handler.call(scope || list[key], key, list[key]);\n if (!this.isNull(rs)) return rs;\n }\n }\n };\n\n /**\n * 格式化日期\n * @method formatDate\n * @param {Date|String|Number} date 日期\n * @param {String} format 格式化字符串\n * @param {object} dict 反译字典\n * @return {String} 格式化结果\n * @static\n */\n ntils.formatDate = function (date, format, dict) {\n if (this.isNull(format) || this.isNull(date)) return date;\n date = this.toDate(date);\n dict = dict || {};\n var placeholder = {\n \"M+\": date.getMonth() + 1, //month\n \"d+\": date.getDate(), //day\n \"h+\": date.getHours(), //hour\n \"m+\": date.getMinutes(), //minute\n \"s+\": date.getSeconds(), //second\n \"w+\": date.getDay(), //week\n \"q+\": Math.floor((date.getMonth() + 3) / 3), //quarter\n \"S\": date.getMilliseconds() //millisecond\n }\n if (/(y+)/.test(format)) {\n format = format.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n }\n for (var key in placeholder) {\n if (new RegExp(\"(\" + key + \")\").test(format)) {\n var value = placeholder[key];\n value = dict[value] || value;\n format = format.replace(RegExp.$1, RegExp.$1.length == 1\n ? value : (\"00\" + value).substr((\"\" + value).length));\n }\n }\n return format;\n };\n\n /**\n * 拷贝对象\n * @method copy\n * @param {Object} src 源对象\n * @param {Object} dst 目标对象\n * @static\n */\n ntils.copy = function (src, dst, igonres) {\n dst = dst || (this.isArray(src) ? [] : {});\n this.each(src, function (key) {\n if (igonres && igonres.indexOf(key) > -1) return;\n delete dst[key];\n if (Object.getOwnPropertyDescriptor) {\n try {\n Object.defineProperty(dst, key, Object.getOwnPropertyDescriptor(src, key));\n } catch (ex) {\n dst[key] = src[key];\n }\n } else {\n dst[key] = src[key];\n }\n })\n return dst;\n };\n\n /**\n * 深度克隆对象\n * @method clone\n * @param {Object} src 源对象\n * @return {Object} 新对象\n * @static\n */\n ntils.clone = function (src, igonres) {\n if (this.isNull(src) ||\n this.isString(src) ||\n this.isNumber(src) ||\n this.isBoolean(src) ||\n this.isDate(src)) {\n return src;\n }\n var objClone = src;\n try {\n objClone = new src.constructor();\n } catch (ex) { }\n this.each(src, function (key, value) {\n if (objClone[key] != value && !this.contains(igonres, key)) {\n if (this.isObject(value)) {\n objClone[key] = this.clone(value, igonres);\n } else {\n objClone[key] = value;\n }\n }\n }, this);\n ['toString', 'valueOf'].forEach(function (key) {\n if (this.contains(igonres, key)) return;\n this.defineFreezeProp(objClone, key, src[key]);\n }, this);\n return objClone;\n };\n\n /**\n * 合并对象\n * @method mix\n * @return 合并后的对象\n * @param {Object} dst 目标对象\n * @param {Object} src 源对象\n * @param {Array} igonres 忽略的属性名,\n * @param {Number} mode 模式\n */\n ntils.mix = function (dst, src, igonres, mode) {\n //根据模式来判断,默认是Obj to Obj的 \n if (mode) {\n switch (mode) {\n case 1: // proto to proto \n return ntils.mix(dst.prototype, src.prototype, igonres, 0);\n case 2: // object to object and proto to proto \n ntils.mix(dst.prototype, src.prototype, igonres, 0);\n break; // pass through \n case 3: // proto to static \n return ntils.mix(dst, src.prototype, igonres, 0);\n case 4: // static to proto \n return ntils.mix(dst.prototype, src, igonres, 0);\n default: // object to object is what happens below \n }\n }\n //---\n src = src || {};\n dst = dst || (this.isArray(src) ? [] : {});\n this.keys(src).forEach(function (key) {\n if (this.contains(igonres, key)) return;\n if (this.isObject(src[key]) &&\n (src[key].constructor == Object ||\n src[key].constructor == Array ||\n src[key].constructor == null)) {\n dst[key] = ntils.mix(dst[key], src[key], igonres, 0);\n } else {\n dst[key] = src[key];\n }\n }, this);\n return dst;\n };\n\n /**\n * 定义不可遍历的属性\n **/\n ntils.defineFreezeProp = function (obj, name, value) {\n try {\n Object.defineProperty(obj, name, {\n value: value,\n enumerable: false,\n configurable: true, //能不能重写定义\n writable: false //能不能用「赋值」运算更改\n });\n } catch (err) {\n obj[name] = value;\n }\n };\n\n /**\n * 获取所有 key \n */\n ntils.keys = function (obj) {\n if (Object.keys) return Object.keys(obj);\n var keys = [];\n this.each(obj, function (key) {\n keys.push(key);\n });\n return keys;\n };\n\n /**\n * 创建一个对象\n */\n ntils.create = function (proto, props) {\n if (Object.create) return Object.create(proto, props);\n var Cotr = function () { };\n Cotr.prototype = proto;\n var obj = new Cotr();\n if (props) this.copy(props, obj);\n return obj;\n };\n\n /**\n * 设置 proto\n * 在不支持 setPrototypeOf 也不支持 __proto__ 的浏览器\n * 中,会采用 copy 方式\n */\n ntils.setPrototypeOf = function (obj, proto) {\n if (Object.setPrototypeOf) {\n return Object.setPrototypeOf(obj, proto || this.create(null));\n } else {\n if (!('__proto__' in Object)) this.copy(proto, obj);\n obj.__proto__ = proto;\n }\n };\n\n /**\n * 获取 proto\n */\n ntils.getPrototypeOf = function (obj) {\n if (obj.__proto__) return obj.__proto__;\n if (Object.getPrototypeOf) return Object.getPrototypeOf(obj);\n if (obj.constructor) return obj.constructor.prototype;\n };\n\n /**\n * 是否深度相等\n */\n ntils.deepEqual = function (a, b) {\n if (a === b) return true;\n if (!this.isObject(a) || !this.isObject(b)) return false;\n var aKeys = this.keys(a);\n var bKeys = this.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n var allKeys = aKeys.concat(bKeys);\n var checkedMap = this.create(null);\n var result = true;\n this.each(allKeys, function (i, key) {\n if (checkedMap[key]) return;\n if (!this.deepEqual(a[key], b[key])) result = false;\n checkedMap[key] = true;\n }, this);\n return result;\n };\n\n /**\n * 从一个数值循环到别一个数\n * @param {number} fromNum 开始数值\n * @param {Number} toNum 结束数值\n * @param {Number} step 步长值\n * @param {function} handler 执行函数\n * @returns {void} 无返回\n */\n ntils.fromTo = function (fromNum, toNum, step, handler) {\n if (!handler) handler = [step, step = handler][0];\n step = Math.abs(step || 1);\n if (fromNum < toNum) {\n for (var i = fromNum; i <= toNum; i += step) handler(i);\n } else {\n for (var i = fromNum; i >= toNum; i -= step) handler(i);\n }\n };\n\n /**\n * 生成一个Guid\n * @method newGuid\n * @return {String} GUID字符串\n * @static\n */\n ntils.newGuid = function () {\n var S4 = function () {\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n };\n return (S4() + S4() + \"-\" + S4() + \"-\" + S4() + \"-\" + S4() + \"-\" + S4() + S4() + S4());\n };\n\n /**\n * 对象变换\n **/\n ntils.map = function (list, fn) {\n var buffer = this.isArray(list) ? [] : {};\n this.each(list, function (name, value) {\n buffer[name] = fn(name, value);\n });\n return buffer;\n };\n\n /**\n * 通过路径设置属性值\n */\n ntils.setByPath = function (obj, path, value) {\n if (this.isNull(obj) || this.isNull(path) || path === '') {\n return;\n }\n if (!this.isArray(path)) {\n path = path.replace(/\\[/, '.').replace(/\\]/, '.').split('.');\n }\n this.each(path, function (index, name) {\n if (this.isNull(name) || name.length < 1) return;\n if (index === path.length - 1) {\n obj[name] = value;\n } else {\n obj[name] = obj[name] || {};\n obj = obj[name];\n }\n }, this);\n };\n\n /**\n * 通过路径获取属性值\n */\n ntils.getByPath = function (obj, path) {\n if (this.isNull(obj) || this.isNull(path) || path === '') {\n return obj;\n }\n if (!this.isArray(path)) {\n path = path.replace(/\\[/, '.').replace(/\\]/, '.').split('.');\n }\n this.each(path, function (index, name) {\n if (this.isNull(name) || name.length < 1) return;\n if (!this.isNull(obj)) obj = obj[name];\n }, this);\n return obj;\n };\n\n /**\n * 数组去重\n **/\n ntils.unique = function (array) {\n if (this.isNull(array)) return array;\n var newArray = [];\n this.each(array, function (i, value) {\n if (newArray.indexOf(value) > -1) return;\n newArray.push(value);\n });\n return newArray;\n };\n\n /**\n * 解析 function 的参数列表\n **/\n ntils.getFunctionArgumentNames = function (fn) {\n if (!fn) return [];\n var src = fn.toString();\n var parts = src.split(')')[0].split('=>')[0].split('(');\n return (parts[1] || parts[0]).split(',').map(function (name) {\n return name.trim();\n }).filter(function (name) {\n return name != 'function';\n });\n };\n\n /**\n * 缩短字符串\n */\n ntils.short = function (str, maxLength) {\n if (!str) return str;\n maxLength = maxLength || 40;\n var strLength = str.length;\n var trimLength = maxLength / 2;\n return strLength > maxLength ? str.substr(0, trimLength) + '...' + str.substr(strLength - trimLength) : str;\n };\n\n /**\n * 首字母大写\n */\n ntils.firstUpper = function (str) {\n if (this.isNull(str)) return;\n str[0] = str[0].toLowerCase();\n return str;\n };\n\n /**\n * 解析字符串为 dom \n * @param {string} str 字符串\n * @returns {HTMLNode} 解析后的 DOM \n */\n ntils.parseDom = function (str) {\n this._PDD_ = this._PDD_ || document.createElement('div');\n this._PDD_.innerHTML = ntils.trim(str);\n var firstNode = this._PDD_.childNodes[0];\n //先 clone 一份再通过 innerHTML 清空\n //否则 IE9 下,清空时会导出返回的 DOM 没有子结点\n if (firstNode) firstNode = firstNode.cloneNode(true);\n this._PDD_.innerHTML = '';\n return firstNode;\n };\n\n})((typeof exports === 'undefined') ? (window.ntils = {}) : exports);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.2.0.14@ntils/index.js\n// module id = 3\n// module chunks = 0","const utils = require('ntils');\n\nfunction ClassFactory(options) {\n //处理 options\n options = options || utils.create(null);\n options.$name = options.$name || 'Class';\n options.$extends = options.$extends || ClassFactory;\n options.$static = options.$static || utils.create(null);\n //处理父类 prototype\n var superPrototype = utils.isFunction(options.$extends) ?\n options.$extends.prototype : options.$extends;\n //定义新类\n var Class = function () {\n //处理 super\n if (!this.$super) {\n utils.defineFreezeProp(this, '$super', function () {\n if (this._super_called_) return this._super_ret_;\n this._super_called_ = true;\n if (utils.isFunction(options.$extends)) {\n this._super_ret_ = options.$extends.apply(this, arguments);\n //这几行确保可继承于数组\n if (this._super_ret_) {\n var proto = utils.getPrototypeOf(this);\n utils.setPrototypeOf(proto, this._super_ret_);\n }\n } else {\n this._super_ret_ = options.$extends;\n }\n return this._super_ret_;\n });\n for (var name in superPrototype) {\n var value = superPrototype[name];\n if (utils.isFunction(value)) {\n this.$super[name] = value.bind(this);\n } else {\n this.$super[name] = value;\n }\n }\n }\n //调用构造\n if (utils.isFunction(options.constructor) &&\n options.constructor !== Object) {\n return options.constructor.apply(this, arguments);\n } else {\n //如果没有实现 constructor 则调用父类构造\n this.$super.apply(this, arguments);\n }\n };\n //处理 prototype\n Class.prototype = utils.create(superPrototype);\n utils.copy(options, Class.prototype);\n utils.defineFreezeProp(Class.prototype, '$class', Class);\n //处理静态成员\n utils.copy(options.$static, Class);\n if (utils.isFunction(options.$extends)) {\n utils.setPrototypeOf(Class, options.$extends);\n }\n if (!options.$extends.$extend) {\n utils.copy(ClassFactory, Class);\n }\n utils.defineFreezeProp(Class, '$super', options.$extends);\n //--\n return Class;\n}\n\n//定义扩展方法\nClassFactory.$extend = function (options) {\n options.$extends = this;\n return new ClassFactory(options);\n};\n\nClassFactory.Class = ClassFactory;\nmodule.exports = ClassFactory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.2.1.11@cify/index.js\n// module id = 4\n// module chunks = 0","const Class = require('cify');\nconst utils = require('ntils');\n\n/**\n * Watcher 类\n * 通过「计算函数」、「执行函数」可以创建一个 Watcher 实例\n */\nconst Watcher = new Class({\n\n /**\n * 通过「计算函数」、「执行函数」构建一个 Watcher 实例\n * @param {function} calcor 计算函数\n * @param {function} handler 处理函数\n * @param {boolean} first 是否自动执行第一次\n * @returns {void} 无返回\n */\n constructor: function (calcor, handler, first) {\n if (!utils.isFunction(calcor) || !utils.isFunction(handler)) {\n throw new Error('Invalid parameters');\n }\n this.calcor = calcor;\n this.handler = handler;\n if (first) this.calc(true);\n },\n\n /**\n * 执行计算\n * @param {boolean} force 是否强制触发「计算函数」\n * @returns {Object} 计算后的值\n */\n calc: function (force) {\n let newValue = this.calcor();\n if (force || !utils.deepEqual(newValue, this.value)) {\n this.handler(newValue, this.value);\n }\n this.value = utils.clone(newValue);\n }\n\n});\n\nmodule.exports = Watcher;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/watcher/index.js","const Class = require('cify');\nconst utils = require('ntils');\nconst EventEmitter = require('../events');\n\nconst OBSERVER_PROP_NAME = '_observer_';\nconst CHANGE_EVENT_NAME = 'change';\nconst EVENT_MAX_DISPATCH_LAYER = 10;\nconst IGNORE_REGEXPS = [/^\\_(.*)\\_$/i, /^\\_\\_/i];\n\n/**\n * 对象观察类,可以监控对象变化\n * 目前方案问题:\n * 对于父子关系和事件冒泡,目前方案如果用 delete 删除一个属性,无关真实删除关系,\n * 即便调用 clearReference 也无法再清除关系,子对象的 parents 中会一直有一个引用,当前方案最高效\n * 其它方法一:\n * 将「关系」放入全局数组中,然后将 ob.parents 变成一个「属性」从全局数组件中 filter 出来,\n * 基本和目前方法类似,但是关系在外部存领教,所以 clearReference 可清除。\n * 其它方案二: \n * 构造时添加到全局数组,每一个 observer change 时都让放到全局的 observer 遍历自身的,\n * 检果事件源是不是自已的子对象,如果是则触发自身 change 事件,这样 ob 对象本身没有相关引用\n * clearReference 时只从全局清除掉就行了,并且 delete 操作也不会影响,但效率稍差。\n * 其它方案三: \n * 给构造函数添加一个 deep 属性,只有 deep 的 ob 对象,才放入到全局数组中,检查时逻辑同方案二\n * 但是因为要检查的对象会少很多,效率会更高一点。\n */\nconst Observer = new Class({\n $extends: EventEmitter,\n\n /**\n * 通过目标对象构造一个观察对象\n * @param {Object} target 目标对象\n * @param {Object} options 选项\n * @returns {void} 无返回\n */\n constructor: function (target, options) {\n if (utils.isNull(target)) {\n throw new Error('Invalid target');\n }\n options = options || {};\n let observer = target[OBSERVER_PROP_NAME];\n if (observer) {\n utils.copy(options, observer.options);\n //当时一个组件 A 的为组件 B 的 prop 时,A 更新不会触发 B 更新\n //所在暂注释这里,另一种方法是更新 prop 指令,重写 excute 方法,而不是现在的 update 方法\n // if (observer.options.root) {\n // observer.parents.length = 0;\n // }\n observer.apply();\n return observer;\n }\n EventEmitter.call(this);\n utils.defineFreezeProp(this, 'options', options);\n utils.defineFreezeProp(this, 'shadow', {});\n utils.defineFreezeProp(this, 'target', target);\n utils.defineFreezeProp(this, 'parents', []);\n utils.defineFreezeProp(target, OBSERVER_PROP_NAME, this);\n this.apply();\n },\n\n /**\n * 添加一个属性,动态添中的属性,无法被观察,\n * 但是通过 set 方法添加的属性可能被观察。\n * @param {string} name 名称\n * @param {Object} value 值\n * @returns {void} 无返回\n */\n set: function (name, value) {\n if (utils.isFunction(value) || Observer.isIgnore(name)) {\n return;\n }\n Object.defineProperty(this.target, name, {\n get: function () {\n return this[OBSERVER_PROP_NAME].shadow[name];\n },\n set: function (value) {\n let observer = this[OBSERVER_PROP_NAME];\n let oldValue = observer.shadow[name];\n if (oldValue === value) return;\n if (utils.isObject(value)) {\n let childObserver = new Observer(value);\n observer.addChild(childObserver, name);\n }\n //移除旧值的父引用\n //如果用 delete 删除属性将无法移除父子引用\n if (oldValue && oldValue[OBSERVER_PROP_NAME]) {\n observer.removeChild(oldValue[OBSERVER_PROP_NAME], name);\n }\n observer.shadow[name] = value;\n observer.emitChange({ path: name, value: value });\n },\n configurable: true,\n enumerable: true\n });\n this.target[name] = value;\n },\n\n /**\n * 自动应用所有动态添加的属性\n * @returns {void} 无返回\n */\n apply: function () {\n if (utils.isArray(this.target)) {\n this._wrapArray(this.target);\n }\n let names = this._getPropertyNames(this.target);\n names.forEach(function (name) {\n let desc = Object.getOwnPropertyDescriptor(this.target, name);\n if (!('value' in desc)) return;\n this.set(name, this.target[name]);\n }, this);\n },\n\n /**\n * 清除所有父子引用\n * @returns {void} 无返回\n */\n clearReference: function () {\n utils.each(this.target, function (name, value) {\n if (utils.isNull(value)) return;\n let child = value[OBSERVER_PROP_NAME];\n if (child) this.removeChild(child);\n }, this);\n },\n\n /**\n * 派发一个事件,事件会向父级对象冒泡\n * @param {string} eventName 事件名称\n * @param {Object} event 事件对象\n * @returns {void} 无返回\n */\n dispatch: function (eventName, event) {\n if (event._src_ === this) return;\n event._src_ = event._src_ || this;\n event._layer_ = event._layer_ || 0;\n if ((event._layer_++) >= EVENT_MAX_DISPATCH_LAYER) return;\n this.emit(eventName, event);\n if (!this.parents || this.parents.length < 1) return;\n this.parents.forEach(function (item) {\n if (!(item.name in item.parent.target)) {\n return item.parent.removeChild(this);\n }\n let parentEvent = utils.copy(event);\n parentEvent.path = item.name + '.' + event.path;\n item.parent.dispatch(eventName, parentEvent);\n }, this);\n },\n\n /**\n * 添子观察者对象\n * @param {Object} child 父对象\n * @param {String} name 属性名\n * @returns {void} 无返回\n */\n addChild: function (child, name) {\n if (utils.isNull(child) || utils.isNull(name)) {\n throw new Error('Invalid paramaters');\n }\n if (child.options.root) return;\n child.parents.push({ parent: this, name: name });\n },\n\n /**\n * 移除子对象\n * @param {Object} child 父对象\n * @param {String} name 属性名\n * @returns {void} 无返回\n */\n removeChild: function (child, name) {\n if (utils.isNull(child)) {\n throw new Error('Invalid paramaters');\n }\n let foundIndex = -1;\n child.parents.forEach(function (item, index) {\n if (item.parent === this && item.name === name) {\n foundIndex = index;\n }\n }, this);\n if (foundIndex > -1) {\n child.parents.splice(foundIndex, 1);\n }\n },\n\n /**\n * 触发 change 事件\n * @param {Object} event 事件对象\n * @returns {void} 无返回\n */\n emitChange: function (event) {\n this.dispatch(CHANGE_EVENT_NAME, event);\n },\n\n /**\n * 获取所有成员名称列表\n * @returns {Array} 所有成员名称列表\n */\n _getPropertyNames: function () {\n let names = utils.isArray(this.target) ?\n this.target.map(function (item, index) {\n return index;\n }) : Object.keys(this.target);\n return names.filter(function (name) {\n return name !== OBSERVER_PROP_NAME;\n });\n },\n\n /**\n * 包裹数组\n * @param {array} array 源数组\n * @returns {array} 处理后的数组\n */\n _wrapArray: function (array) {\n utils.defineFreezeProp(array, 'push', function () {\n let items = [].slice.call(arguments);\n items.forEach(function (item) {\n //这里也会触发对应 index 的 change 事件\n this[OBSERVER_PROP_NAME].set(array.length, item);\n }, this);\n this[OBSERVER_PROP_NAME].emitChange({ path: 'length', value: this.length });\n });\n utils.defineFreezeProp(array, 'pop', function () {\n let item = [].pop.apply(this, arguments);\n this[OBSERVER_PROP_NAME].emitChange({ path: this.length, value: item });\n this[OBSERVER_PROP_NAME].emitChange({ path: 'length', value: this.length });\n return item;\n });\n utils.defineFreezeProp(array, 'unshift', function () {\n let items = [].slice.call(arguments);\n items.forEach(function (item) {\n //这里也会触发对应 index 的 change 事件\n this[OBSERVER_PROP_NAME].set(0, item);\n }, this);\n this[OBSERVER_PROP_NAME].emitChange({ path: 'length', value: this.length });\n });\n utils.defineFreezeProp(array, 'shift', function () {\n let item = [].shift.apply(this, arguments);\n this[OBSERVER_PROP_NAME].emitChange({ path: 0, value: item });\n this[OBSERVER_PROP_NAME].emitChange({ path: 'length', value: this.length });\n return item;\n });\n utils.defineFreezeProp(array, 'splice', function () {\n let startIndex = arguments[0];\n let endIndex = utils.isNull(arguments[1])\n ? startIndex + arguments[1]\n : this.length - 1;\n let items = [].splice.apply(this, arguments);\n for (let i = startIndex; i <= endIndex; i++) {\n this[OBSERVER_PROP_NAME].emitChange({ path: i, value: items[i - startIndex] });\n }\n this[OBSERVER_PROP_NAME].emitChange({ path: 'length', value: this.length });\n return items;\n });\n utils.defineFreezeProp(array, 'set', function (index, value) {\n if (index >= this.length) {\n this[OBSERVER_PROP_NAME].emitChange({ path: 'length', value: this.length });\n }\n this[OBSERVER_PROP_NAME].set(index, value);\n });\n }\n\n});\n\n/**\n * 观察一个对象\n * @param {Object} target 目标对象\n * @return {Observer} 观察者对象\n */\nObserver.observe = function (target) {\n return new Observer(target);\n};\n\n/**\n * 检查是不是忽略的属性名\n * @param {string} word 待检查的字符串\n * @returns {void} 无返回\n */\nObserver.isIgnore = function (word) {\n return IGNORE_REGEXPS.some(re => re.test(word));\n};\n\nmodule.exports = Observer;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/observer/index.js","const utils = require('ntils');\nconst Class = require('cify');\n\n/**\n * 事件触发器基类\n */\nconst EventEmitter = new Class({\n $extends: Function,\n\n /**\n * 构建一个一个事修的触发器对象\n * @param {object} target 将代理的目标对象可以省略\n * @returns {void} 无返回\n */\n constructor: function (target) {\n target = target || this;\n let emitter = target._emitter_;\n if (emitter) return emitter;\n utils.defineFreezeProp(this, '_target_', target);\n utils.defineFreezeProp(target, '_emitter_', this);\n this._isNative_ = this._isNativeObject(this._target_);\n this._listeners_ = this._listeners_ || {};\n this.on = this.$on = this.$addListener = this.addListener;\n this.off = this.$off = this.$removeListener = this.removeListener;\n this.$emit = this.emit;\n },\n\n /**\n * 检查是否原生支持事件\n * @param {object} obj 对象\n * @returns {void} 检查结果\n */\n _isNativeObject: function (obj) {\n return obj.addEventListener && obj.removeEventListener && obj.dispatchEvent;\n },\n\n /**\n * 添加一个事件监听函数\n * @param {string} name 事件名称\n * @param {function} listener 事件处理函数\n * @param {capture} capture 是否是捕获阶段事件(只在代理 dom 对象时有效)\n * @returns {void} 无返回\n */\n addListener: function (name, listener, capture) {\n if (this._isNative_) {\n this._addNativeEventListener(name, listener, capture);\n }\n this._listeners_[name] = this._listeners_[name] || [];\n this._listeners_[name].push(listener);\n if (this._listeners_[name].length > EventEmitter._maxListeners) {\n throw new Error('The `' + name + '` event listener is not more than 10');\n }\n },\n\n /**\n * 移除「一个/一组/所有」事件监听函数\n * @param {string} name 事件名称\n * @param {function} listener 事件处理函数\n * @param {capture} capture 是否是捕获阶段事件(只在代理 dom 对象时有效)\n * @returns {void} 无返回\n */\n removeListener: function (name, listener, capture) {\n if (name && listener) {\n if (this._isNative_) {\n this._removeNativeEventListener(name, listener, capture);\n }\n if (!this._listeners_[name]) return;\n let index = this._listeners_[name].indexOf(listener);\n this._listeners_[name].splice(index, 1);\n } else if (name) {\n if (this._isNative_ && this._listeners_[name]) {\n this._listeners_[name].forEach(function (_listener) {\n this.removeListener(name, _listener, capture);\n }, this);\n }\n delete this._listeners_[name];\n } else {\n utils.each(this._listeners_, function (name) {\n this.removeListener(name, null, capture);\n }, this);\n this._listeners_ = {};\n }\n },\n\n /**\n * 触发自身的一个事件\n * @param {string} name 事件名称\n * @param {object} data 传递的对象\n * @param {string} canBubble 能否冒泡(只在代理 dom 对象时有效)\n * @param {object} cancelAble 能否取消(只在代理 dom 对象时有效)\n * @returns {void} 无返回\n */\n emit: function (name, data, canBubble, cancelAble) {\n if (this._isNative_) {\n return this._emitNativeEvent(name, data, canBubble, cancelAble);\n }\n if (!this._listeners_[name]) return;\n let stopPropagation = false;\n this._listeners_[name].forEach(function (handler) {\n let rs = handler.call(this._target_, data);\n if (rs === false) stopPropagation = true;\n }, this);\n return stopPropagation;\n },\n\n /**\n * 添加 DOM 元素事件\n * @param {string} name 事件名称\n * @param {function} listener 事件处理函数\n * @param {capture} capture 是否是捕获阶段事件\n * @returns {void} 无返回\n */\n _addNativeEventListener: function (name, listener, capture) {\n this._target_.addEventListener(name, listener, capture);\n //如果存在已注册的自定义 “组合事件”\n let descriptor = EventEmitter._events[name];\n if (descriptor) {\n descriptor.addListener = descriptor.addListener || descriptor.on;\n descriptor.addListener(this, name, listener, capture);\n }\n },\n\n /**\n * 移除 DOM 元素事件\n * @param {string} name 事件名称\n * @param {function} listener 事件处理函数\n * @param {capture} capture 是否是捕获阶段事件\n * @returns {void} 无返回\n */\n _removeNativeEventListener: function (name, listener, capture) {\n this._target_.removeEventListener(name, listener, capture);\n //如果存在已注册的自定义 “组合事件”\n let descriptor = EventEmitter._events[name];\n if (descriptor) {\n descriptor.removeListener = descriptor.removeListener || descriptor.off;\n descriptor.removeListener(this, name, listener, capture);\n }\n },\n\n /**\n * 触发 DOM 元素事件\n * @param {string} name 事件名称\n * @param {object} data 传递的对象\n * @param {string} canBubble 能否冒泡\n * @param {object} cancelAble 能否取消\n * @returns {void} 无返回\n */\n _emitNativeEvent: function (name, data, canBubble, cancelAble) {\n let event = document.createEvent('HTMLEvents');\n event.initEvent(name, canBubble, cancelAble);\n utils.copy(data, event, ['data']);\n event.data = data;\n return this._target_.dispatchEvent(event);\n }\n\n});\n\n//最多添加多少个 listener\nEventEmitter._maxListeners = 10;\n\n//所有自定义事件\nEventEmitter._events = [];\n\n/**\n * 注册自定义事件(只在代理 dom 对象时有效)\n * @param {object} descriptor 事件定义\n * @returns {void} 无返回\n */\nEventEmitter.register = function (descriptor) {\n let names = descriptor.name;\n if (!names) return;\n if (!utils.isArray(names)) names = names.split(',');\n names.forEach(function (name) {\n this._events[name] = descriptor;\n }, this);\n};\n\nmodule.exports = EventEmitter;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/events/index.js","const Compiler = require('./compiler');\nconst Directive = require('./directive');\nconst Expression = require('./expression');\nconst Template = require('./template');\nconst directives = require('./directives/');\n\nTemplate.Template = Template;\nTemplate.Compiler = Compiler;\nTemplate.Directive = Directive;\nTemplate.directives = directives;\nTemplate.Expression = Expression;\n\nmodule.exports = Template;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/index.js","const Class = require('cify');\nconst Directive = require('./directive');\nconst utils = require('ntils');\nconst Expression = require('./expression');\nconst commonDirectives = require('./directives');\n\nconst DEFAULT_PREFIX = 'm';\n\n/**\n * 模板编译器\n * 可以通过指定「前缀」或「指令集」构建实例\n */\nconst Compiler = new Class({\n\n /**\n * 构造一个编译器\n * @param {Object} options 选项\n * @returns {void} 无返回\n */\n constructor: function (options) {\n options = options || {};\n this.prefix = options.prefix || DEFAULT_PREFIX;\n this.elementDirectives = {};\n this.attributeDirectives = {};\n this.registerDirectives(commonDirectives);\n this.registerDirectives(options.directives);\n },\n\n /**\n * 添加指令\n * @param {Object} directives 指令集 \n * @returns {void} 无返回\n */\n registerDirectives: function (directives) {\n utils.each(directives, function (name, directive) {\n name = name.replace(/([A-Z])/g, '-$1');\n if (name[0] == '-') name = name.slice(1);\n let fullName = directive.options.prefix === false ?\n name : `${this.prefix}:${name}`;\n if (directive.options.type == Directive.TE) {\n this.elementDirectives[fullName.toUpperCase()] = directive;\n } else {\n this.attributeDirectives[fullName] = directive;\n }\n }, this);\n },\n\n /**\n * 解析要 attr 指令信息\n * @param {string} attrName 要解析的名称字符串\n * @returns {Object} 解析后的对象\n */\n _parseAttrInfo: function (attrName) {\n let parts = attrName.toLowerCase().split(':');\n let info = {};\n if (parts.length > 1) {\n info.name = `${parts[0]}:${parts[1]}`;\n info.decorates = parts.slice(2);\n } else {\n info.name = parts[0];\n info.decorates = [];\n }\n return info;\n },\n\n /**\n * 创建一个指令实例\n * @param {Directive} Directive 指令类\n * @param {Object} options 指令构建选项\n * @returns {Directive} 指令实例\n */\n _createDirectiveInstance: function (Directive, options) {\n options.compiler = this;\n options.prefix = this.prefix;\n return new Directive(options);\n },\n\n /**\n * 初始化一个编译完成的 handler\n * @param {function} handler 编译后的的模板函数\n * @returns {void} 无返回\n */\n _bindHandler: function (handler) {\n //排序 directives\n handler.directives = handler.directives.sort(function (a, b) {\n return b.level - a.level;\n });\n //初始化 directives\n let boundDirectives = [];\n utils.each(handler.directives, function (index, directive) {\n directive.index = index;\n directive.bind();\n boundDirectives.push(directive);\n //移除完成绑定的指令对应的 attribute\n if (directive.remove !== false && directive.attribute) {\n directive.node.removeAttribute(directive.attribute.name);\n }\n //如果遇到一个「终态」指令,停止向下初始化\n if (directive.final) {\n return handler.final = true;\n }\n }, this);\n handler.directives = boundDirectives;\n },\n\n /**\n * 编译一个元素本身\n * @param {function} handler 当前模板函数\n * @param {HTMLNode} node 当前 HTML 结点\n * @returns {void} 无返回\n */\n _compileElement: function (handler, node) {\n let ElementDirective = this.elementDirectives[node.nodeName.toUpperCase()];\n if (!ElementDirective) return;\n handler.directives.push(this._createDirectiveInstance(ElementDirective, {\n handler: handler,\n node: node\n }));\n },\n\n /**\n * 编译一个元素所有 attributes \n * @param {function} handler 当前模板函数\n * @param {HTMLNode} node 当前 HTML 结点\n * @returns {void} 无返回\n */\n _compileAttributes: function (handler, node) {\n utils.toArray(node.attributes).forEach(function (attribute) {\n let attrInfo = this._parseAttrInfo(attribute.name);\n let AttrDirective = this.attributeDirectives[attrInfo.name] ||\n this.attributeDirectives['*'];\n if (!AttrDirective) return;\n let directiveOptions = AttrDirective.options;\n handler.directives.push(this._createDirectiveInstance(AttrDirective, {\n handler: handler,\n node: node,\n attribute: attribute,\n expression: directiveOptions.literal ?\n attribute.value : new Expression(attribute.value, directiveOptions.mixed),\n decorates: attrInfo.decorates\n }));\n }, this);\n },\n\n /**\n * 编译所有子结点\n * @param {function} handler 当前模板函数\n * @param {HTMLNode} node 当前 HTML 结点\n * @returns {void} 无返回\n */\n _compileChildren: function (handler, node) {\n if (handler.final) return;\n utils.toArray(node.childNodes).forEach(function (childNode) {\n if (childNode._compiled_) return;\n let childHandler = this.compile(childNode);\n childHandler.parent = this;\n handler.children.push(childHandler);\n }, this);\n },\n\n /**\n * 编译一个模板\n * @param {HTMLNode} node 模板根元素\n * @param {Object} options 选项\n * @returns {function} 模板函数\n */\n compile: function (node, options) {\n if (!node) {\n throw new Error('Invalid node for compile');\n }\n node._compiled_ = true;\n options = options || {};\n //定义编译结果函数\n let handler = function (scope) {\n if (utils.isNull(scope)) scope = {};\n handler.directives.forEach(function (directive) {\n directive.scope = scope;\n directive.execute(scope);\n }, this);\n handler.children.forEach(function (childHandler) {\n childHandler(scope);\n }, this);\n };\n //--\n handler.dispose = function () {\n handler.directives.forEach(function (directive) {\n directive.unbind();\n }, this);\n handler.children.forEach(function (childHandler) {\n childHandler.dispose();\n }, this);\n };\n handler.node = node;\n //定义 children & directives \n handler.directives = [];\n handler.children = [];\n //编译相关指令\n if (options.element !== false) this._compileElement(handler, node);\n if (options.attribute !== false) this._compileAttributes(handler, node);\n this._bindHandler(handler);\n if (options.children !== false) this._compileChildren(handler, node);\n //返回编译后函数\n return handler;\n }\n\n});\n\nmodule.exports = Compiler;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/compiler.js","const Class = require('cify');\nconst utils = require('ntils');\nconst Expression = require('./expression');\n\n/**\n * 指令定义工场函数\n * @param {Object} classOptions 选项\n * @returns {Directive} 指令类\n */\nfunction Directive(classOptions) {\n //处理指令选项\n classOptions = classOptions || {};\n classOptions.type = classOptions.type || Directive.TA;\n classOptions.level = classOptions.level || Directive.LG;\n\n //生成指令类\n const DirectiveClass = new Class({\n\n $extends: classOptions,\n //指令构建函数\n constructor: function (instanceOptions) {\n utils.copy(instanceOptions, this);\n },\n //挂载实例上的 options\n options: classOptions,\n //挂载实例核心方法\n bind: classOptions.bind || utils.noop,\n execute: classOptions.execute || function (scope) {\n this.scope = scope;\n if (this.options.type === Directive.TE) {\n return this.update();\n }\n let newValue = this.options.literal ?\n this.attribute.value : this.expression.execute(scope);\n if (!utils.deepEqual(this._value_, newValue)) {\n this.update(newValue, this._value_);\n this._value_ = newValue;\n }\n },\n update: classOptions.update || utils.noop,\n unbind: classOptions.unbind || utils.noop,\n //挂载指令常用的类型\n utils: utils,\n Expression: Expression\n });\n //向指令类添加「指令定义信息」\n DirectiveClass.options = classOptions;\n utils.setPrototypeOf(DirectiveClass, classOptions);\n return DirectiveClass;\n}\n\n//指令类型\nDirective.TA = 'A';\nDirective.TE = 'E';\n\n//指令级别\nDirective.LP = 3000; //prevent\nDirective.LS = 2000; //statement\nDirective.LE = 1000; //eleemtn\nDirective.LG = 0; //general\nDirective.LA = -1000; //any attribute\nDirective.LC = -2000; //cloak\n\nmodule.exports = Directive;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directive.js","const Class = require('cify');\nconst utils = require('ntils');\n\n/**\n * 表达式类型,将字符串构析为可执行表达式实例\n */\nconst Expression = new Class({\n\n /**\n * 通过字符串构造一个表达式实例\n * @param {string} code 代码字符串\n * @param {boolean} mix 是否是混合代码\n * @returns {void} 无返回\n */\n constructor: function (code, mix) {\n this.func = mix ?\n this._compileMixedCode(code) :\n this._compileCode(code);\n },\n\n /**\n * 编译普通表达式代码\n * @param {string} code 代码字符串\n * @returns {function} 编辑后的函数\n */\n _compileCode: function (code) {\n code = this._escapeEOL(this._wrapCode(code));\n return this._createFunction(code);\n },\n\n /**\n * 编辑混合的表达式代码\n * @param {string} code 代码字符串\n * @returns {function} 编辑后的函数\n */\n _compileMixedCode: function (code) {\n let statements = this._parseMixedCode(code);\n code = this._escapeEOL(statements.join('+'));\n return this._createFunction(code);\n },\n\n /**\n * 通过符串代码创建一个可执行函数\n * @param {string} code 代码字符串\n * @returns {function} 创建的函数\n */\n _createFunction: function (code) {\n let func = new Function('utils', 'scope', 'with(scope){return ' + code + '}');\n return func.bind(null, utils);\n },\n\n /**\n * 解析混合代码字符串\n * @param {string} code 混合代码字符串\n * @returns {Array} 解析后的「token」列表\n */\n _parseMixedCode: function (code) {\n let index = 0, length = code.length;\n let token = '', isExpr = false, tokens = [];\n while (index <= length) {\n let char = code[index++];\n let nextChar = code[index];\n if (utils.isNull(char)) {\n if (token.length > 0) {\n tokens.push('\"' + this._escapeCode(token) + '\"');\n }\n token = '';\n isExpr = false;\n } else if (!isExpr && char + nextChar == '{{') {\n if (token.length > 0) {\n tokens.push('\"' + this._escapeCode(token) + '\"');\n }\n token = '';\n isExpr = true;\n index++;\n } else if (isExpr && char + nextChar == '}}') {\n if (token.length > 0) {\n tokens.push(this._wrapCode(token));\n }\n token = '';\n isExpr = false;\n index++;\n } else {\n token += char;\n }\n }\n return tokens;\n },\n\n /**\n * 转义处理代码字符串\n * @param {string} code 源字符串\n * @returns {string} 处理后的字符串\n */\n _escapeCode: function (code) {\n return code.replace(/\"/, '\\\\\"').replace('\\r\\n', '\\\\r\\\\n').replace('\\n', '\\\\n');\n },\n\n /**\n * 转义换行符\n * @param {string} code 源字符串\n * @returns {string} 处理后的字符串\n */\n _escapeEOL: function (code) {\n return code.replace(/\\n/gm, '\\\\\\n');\n },\n\n /**\n * 通过闭包和 try/cache 包裹代码\n * 将模板中错误的代码直接显示在「模板中用到的位置」,更易于定位错误。\n * @param {string} code 源字符串\n * @returns {string} 处理后的字符串\n */\n _wrapCode: function (code) {\n return '((function(){try{return (' + code + ')}catch(err){console.error(err);return err;}})())';\n },\n\n /**\n * 通过 scope 对象执行表达式\n * @param {Object} scope 上下文对象\n * @returns {Object} 执行结果\n */\n execute: function (scope) {\n if (utils.isNull(scope)) {\n scope = {};\n }\n return this.func.call(scope, scope);\n }\n\n});\n\nmodule.exports = Expression;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/expression.js","module.exports = {\n '#text': require('./text'),\n 'each': require('./each'),\n 'if': require('./if'),\n 'prop': require('./prop'),\n 'attr': require('./attr'),\n 'on': require('./on'),\n 'html': require('./inner-html'),\n 'text': require('./inner-text'),\n 'prevent': require('./prevent'),\n 'id': require('./id'),\n 'cloak': require('./cloak'),\n 'show': require('./show'),\n 'model': require('./model'),\n '*': require('./attribute') //处理所有未知 attr\n};\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/index.js","const Directive = require('../directive');\nconst Expression = require('../expression');\n\n\nmodule.exports = new Directive({\n type: Directive.TE,\n prefix: false,\n\n /**\n * 初始化指令\n * @returns {void} 无返回\n */\n bind: function () {\n this.expr = new Expression(this.node.nodeValue, true);\n this.node.nodeValue = '';\n },\n\n execute: function (scope) {\n this.scope = scope;\n let newValue = this.expr.execute(scope);\n if (this.node.nodeValue !== newValue) {\n this.node.nodeValue = newValue;\n }\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/text.js","const Directive = require('../directive');\nconst utils = require('ntils');\nconst Scope = require('../scope');\n\nmodule.exports = new Directive({\n level: Directive.LS + 1, //比 if 要高一个权重\n final: true,\n literal: true,\n\n /**\n * 初始化指令\n * @returns {void} 无返回\n */\n bind: function () {\n this.mountNode = document.createTextNode('');\n this.node.parentNode.insertBefore(this.mountNode, this.node);\n //虽然,bind 完成后,也会进行 attribute 的移除,\n //但 each 指令必须先移除,否再进行 item 编译时 each 还会生效\n this.node.removeAttribute(this.attribute.name);\n this.node.parentNode.removeChild(this.node);\n this.parseExpr();\n this.eachItems = {};\n },\n\n parseExpr: function () {\n this.eachType = this.attribute.value.indexOf(' in ') > -1 ? 'in' : 'of';\n let tokens = this.attribute.value.split(' ' + this.eachType + ' ');\n let fnText = `with(scope){utils.each(${tokens[1]},fn.bind(this,${tokens[1]}))}`;\n this.each = new Function('utils', 'scope', 'fn', fnText).bind(null, this.utils);\n let names = tokens[0].split(',').map(function (name) {\n return name.trim();\n });\n if (this.eachType == 'in') {\n this.keyName = names[0];\n this.valueName = names[1];\n } else {\n this.keyName = names[1];\n this.valueName = names[0];\n }\n },\n\n execute: function (scope) {\n let currentEachKeys = [];\n let itemsFragment = document.createDocumentFragment();\n let self = this;\n this.each(scope, function (eachTarget, key) {\n //创建新 scope,必须选创建再设置 prototype 或采用定义「属性」的方式\n //因为指令参数指定的名称有可能和 scope 原有变量冲突\n //将导致针对 watch 变量的赋值,从引用发循环\n let newScope = new Scope(this.scope);\n if (self.keyName) {\n Object.defineProperty(newScope, self.keyName, {\n get() { return key; }\n });\n }\n //value 采用「属性」进行代理,否则将会使「双向」绑定无把回设值\n if (self.valueName) {\n Object.defineProperty(newScope, self.valueName, {\n get() { return eachTarget[key]; },\n set(value) { eachTarget[key] = value; }\n });\n }\n let oldItem = this.eachItems[key];\n if (oldItem) {\n oldItem.handler(newScope);\n } else {\n let newItem = {};\n //创建新元素\n newItem.node = this.node.cloneNode(true);\n itemsFragment.appendChild(newItem.node);\n newItem.handler = this.compiler.compile(newItem.node);\n newItem.handler(newScope);\n this.eachItems[key] = newItem;\n }\n currentEachKeys.push(key);\n }.bind(this));\n utils.each(this.eachItems, (key, item) => {\n if (currentEachKeys.some(k => k == key)) return;\n if (item.node.parentNode) {\n item.node.parentNode.removeChild(item.node);\n }\n delete this.eachItems[key];\n }, this);\n if (itemsFragment.childNodes.length > 0) {\n this.mountNode.parentNode.insertBefore(itemsFragment, this.mountNode);\n }\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/each.js","const utils = require('ntils');\n\nconst Scope = function (parent, props) {\n //新的 scope 因为「继承」了 _observer_ \n //所以在新 scope 上进行双向绑定时,将将值成功回写\n //如果有天不须用 utils.cteate 继承法,需要注意 _observer_ \n //或在新 scope 上 defineProperty 代理 parentScope\n let scope = utils.create(parent);\n utils.copy(props, scope);\n //将 func 绑定到原 scope 上;\n utils.each(parent, (key, value) => {\n if (!utils.isFunction(value)) return;\n scope[key] = value.bind(parent);\n });\n return scope;\n};\n\nmodule.exports = Scope;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/scope.js","const Directive = require('../directive');\n\nmodule.exports = new Directive({\n level: Directive.LS,\n final: true,\n\n /**\n * 初始化指令\n * @returns {void} 无返回\n */\n bind: function () {\n this.mountNode = document.createTextNode('');\n this.node.parentNode.insertBefore(this.mountNode, this.node);\n //虽然,bind 完成后,也会进行 attribute 的移除,\n //但 if 指令必须先移除,否再进行 item 编译时 if 还会生效\n this.node.removeAttribute(this.attribute.name);\n this.node.parentNode.removeChild(this.node);\n },\n\n execute: function (scope) {\n let newValue = this.expression.execute(scope);\n if (newValue) {\n //如果新计算的结果为 true 才执行 \n this._handler = this._handler || this.compiler.compile(this.node);\n this._handler(scope);\n let node = this.node.$substitute || this.node;\n if (!node.parentNode) {\n this.mountNode.parentNode.insertBefore(node, this.mountNode);\n }\n } else {\n let node = this.node.$substitute || this.node;\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/if.js","const Directive = require('../directive');\n\nmodule.exports = new Directive({\n update: function (value) {\n let target = this.node.$target || this.node;\n target[this.decorates[0]] = value;\n }\n // execute: function (scope) {\n // this.scope = scope;\n // let newValue = this.expression.execute(scope);\n // let target = this.node.$target || this.node;\n // target[this.decorates[0]] = newValue;\n // }\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/prop.js","const Directive = require('../directive');\n\nmodule.exports = new Directive({\n update: function (value) {\n let target = this.node.$target || this.node;\n if (target.setAttribute) {\n target.setAttribute(this.decorates[0], value);\n } else {\n target[this.decorates[0]] = value;\n }\n }\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/attr.js","const Directive = require('../directive');\nconst EventEmitter = require('../../events');\nconst Scope = require('../scope');\n\nmodule.exports = new Directive({\n literal: true,\n\n /**\n * 初始化指令\n * @returns {void} 无返回\n */\n bind: function () {\n let attrValue = this.attribute.value || '';\n if (attrValue.indexOf('(') < 0 && attrValue.indexOf(')') < 0) {\n attrValue += '($event)';\n }\n this.expr = new this.Expression(attrValue);\n let eventTarget = this.node.$target || this.node;\n this.emiter = new EventEmitter(eventTarget);\n this.emiter.addListener(this.decorates[0], function (event) {\n if (this.utils.isNull(this.scope)) return;\n this.expr.execute(new Scope(this.scope, {\n $event: event\n }));\n }.bind(this), false);\n },\n\n unbind: function () {\n this.emiter.removeListener();\n },\n\n execute: function (scope) {\n this.scope = scope;\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/on.js","const Directive = require('../directive');\n\nmodule.exports = new Directive({\n update: function (newValue) {\n this.node.innerHTML = newValue;\n }\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/inner-html.js","const Directive = require('../directive');\n\nmodule.exports = new Directive({\n update: function (newValue) {\n this.node.innerText = newValue;\n }\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/inner-text.js","const Directive = require('../directive');\n\nmodule.exports = new Directive({\n level: Directive.LP,\n final: true\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/prevent.js","const Directive = require('../directive');\n\nmodule.exports = new Directive({\n literal: true,\n\n update: function (id) {\n if (id in this.scope) {\n throw new Error('Conflicting component id `' + id + '`');\n }\n this.scope[id] = this.node.$target || this.node;\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/id.js","const Directive = require('../directive');\n\nmodule.exports = new Directive({\n level: Directive.LC,\n literal: true,\n prefix: false,\n\n bind: function () {\n this.node.removeAttribute(this.attribute.name);\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/cloak.js","const Directive = require('../directive');\n\nmodule.exports = new Directive({\n update: function (value) {\n this.node.style.display = value ? '' : 'none';\n }\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/show.js","const SelectDirective = require('./select');\nconst EditableDirective = require('./editable');\nconst InputDirective = require('./input');\nconst RadioDirective = require('./radio');\nconst CheckboxDirective = require('./checkbox');\nconst PropDirective = require('./prop');\n\nconst Directive = function (options) {\n let node = options.node;\n let tagName = node.tagName;\n if (options.decorates[0]) {\n return new PropDirective(options);\n } else if (tagName == 'INPUT') {\n let type = node.getAttribute('type');\n if (type == 'radio') {\n return new RadioDirective(options);\n } else if (type == 'checkbox') {\n return new CheckboxDirective(options);\n } else {\n return new InputDirective(options);\n }\n } else if (tagName == 'TEXTAREA') {\n return new InputDirective(options);\n } else if (tagName == 'SELECT') {\n return new SelectDirective(options);\n } else if (node.isContentEditable) {\n return new EditableDirective(options);\n } else {\n throw new Error(`Directive \\`model\\` cannot be used on \\`${tagName}\\``);\n }\n};\n\n//手动添加 classOptions\nDirective.options = {\n level: Directive.LA\n};\n\nmodule.exports = Directive;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/model/index.js","const Directive = require('../../directive');\nconst EventEmitter = require('../../../events');\nconst Scope = require('../../scope');\n\nmodule.exports = new Directive({\n final: true,\n\n /**\n * 初始化指令\n * @returns {void} 无返回\n */\n bind: function () {\n this.backExpr = new this.Expression(`${this.attribute.value}=_value_`);\n this.node.removeAttribute(this.attribute.name);\n this._handler = this.compiler.compile(this.node);\n this.emiter = new EventEmitter(this.node);\n this.emiter.addListener('change', function () {\n if (this.utils.isNull(this.scope)) return;\n let selectedOptions = this.node.selectedOptions;\n let value = this.node.multiple\n ? [].slice.call(selectedOptions).map(function (option) {\n return option.value;\n }, this)\n : selectedOptions[0].value;\n this.backExpr.execute(new Scope(this.scope, {\n _value_: value\n }));\n }.bind(this), false);\n },\n\n unbind: function () {\n this.emiter.removeListener();\n },\n\n execute: function (scope) {\n this.scope = scope;\n this._handler(scope);\n let value = this.expression.execute(scope);\n if (!this.utils.isArray(value)) value = [value];\n [].slice.call(this.node.options).forEach(function (option) {\n option.selected = value.indexOf(option.value) > -1;\n }, this);\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/model/select.js","const Directive = require('../../directive');\nconst EventEmitter = require('../../../events');\nconst Scope = require('../../scope');\n\nmodule.exports = new Directive({\n\n /**\n * 初始化指令\n * @returns {void} 无返回\n */\n bind: function () {\n this.backExpr = new this.Expression(`${this.attribute.value}=_value_`);\n this.emiter = new EventEmitter(this.node);\n this.emiter.addListener('input', function () {\n if (this.utils.isNull(this.scope)) return;\n this.backExpr.execute(new Scope(this.scope, {\n _value_: this.node.innerHTML\n }));\n }.bind(this), false);\n },\n\n unbind: function () {\n this.emiter.removeListener();\n },\n\n execute: function (scope) {\n let value = this.expression.execute(scope);\n if (this.node.innerHTML !== value) {\n this.node.innerHTML = value;\n }\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/model/editable.js","const Directive = require('../../directive');\nconst EventEmitter = require('../../../events');\nconst Scope = require('../../scope');\n\nmodule.exports = new Directive({\n\n /**\n * 初始化指令\n * @returns {void} 无返回\n */\n bind: function () {\n this.backExpr = new this.Expression(`${this.attribute.value}=_value_`);\n this.emiter = new EventEmitter(this.node);\n this.emiter.addListener('input', function () {\n if (this.utils.isNull(this.scope)) return;\n this.backExpr.execute(new Scope(this.scope, {\n _value_: this.node.value\n }));\n }.bind(this), false);\n },\n\n unbind: function () {\n this.emiter.removeListener();\n },\n\n execute: function (scope) {\n let value = this.expression.execute(scope);\n if (this.node.value !== value) {\n this.node.value = value;\n }\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/model/input.js","const Directive = require('../../directive');\nconst EventEmitter = require('../../../events');\nconst Scope = require('../../scope');\n\nmodule.exports = new Directive({\n /**\n * 初始化指令\n * @returns {void} 无返回\n */\n bind: function () {\n this.backExpr = new this.Expression(`${this.attribute.value}=_value_`);\n this.emiter = new EventEmitter(this.node);\n this.emiter.addListener('change', function () {\n if (this.utils.isNull(this.scope)) return;\n this.backExpr.execute(new Scope(this.scope, {\n _value_: this.node.value\n }));\n }.bind(this), false);\n },\n\n unbind: function () {\n this.emiter.removeListener();\n },\n\n execute: function (scope) {\n this.scope = scope;\n let value = this.expression.execute(scope);\n this.node.checked = value == this.node.value;\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/model/radio.js","const Directive = require('../../directive');\nconst EventEmitter = require('../../../events');\nconst Scope = require('../../scope');\n\nmodule.exports = new Directive({\n\n /**\n * 初始化指令\n * @returns {void} 无返回\n */\n bind: function () {\n this.backExpr = new this.Expression(`${this.attribute.value}=_value_`);\n this.emiter = new EventEmitter(this.node);\n this.emiter.addListener('change', function () {\n if (this.utils.isNull(this.scope)) return;\n let value = this.expression.execute(this.scope);\n if (this.utils.isArray(value) && this.node.checked) {\n value.push(this.node.value);\n } else if (this.utils.isArray(value) && !this.node.checked) {\n let index = value.indexOf(this.node.value);\n value.splice(index, 1);\n } else {\n this.backExpr.execute(new Scope(this.scope, {\n _value_: this.node.checked\n }));\n }\n }.bind(this), false);\n },\n\n unbind: function () {\n this.emiter.removeListener();\n },\n\n execute: function (scope) {\n this.scope = scope;\n let value = this.expression.execute(scope);\n if (this.utils.isArray(value)) {\n this.node.checked = value.indexOf(this.node.value) > -1;\n } else {\n this.node.checked = value;\n }\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/model/checkbox.js","const Directive = require('../../directive');\nconst Scope = require('../../scope');\n\nmodule.exports = new Directive({\n\n /**\n * 初始化指令\n * @returns {void} 无返回\n */\n bind: function () {\n this.target = this.node.$target;\n this.backExpr = new this.Expression(`${this.attribute.value}=_value_`);\n this.bindProp = this.decorates[0];\n if (!this.target) {\n throw new Error(`Directive \\`model:${this.bindProp}\\` cannot be used on \\`${this.node.tagName}\\``);\n }\n this.watcher = this.target.$watch(this.bindProp, (value) => {\n if (this.utils.isNull(this.scope)) return;\n this.backExpr.execute(new Scope(this.scope, {\n _value_: value\n }));\n });\n },\n\n unbind: function () {\n this.target.$unWatch(this.watcher);\n },\n\n update: function (value) {\n this.target[this.bindProp] = value;\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/model/prop.js","const Directive = require('../directive');\n\n/**\n * 通用的 attribute 指令\n * 用于所有 attribute 的处理\n * 例如:\n * <div attr1=\"{{expr1}}\" {{expr2}} {{attr3}}=\"{{expr3}}\">\n * </div>\n */\nmodule.exports = new Directive({\n level: Directive.LA,\n prefix: false,\n literal: true,\n remove: false,\n\n /**\n * 初始化指令\n * @returns {void} 无返回\n */\n bind: function () {\n this.computedName = this.attribute.name;\n this.computedValue = this.attribute.value;\n this.nameExpr = new this.Expression(this.attribute.name, true);\n this.valueExpr = new this.Expression(this.attribute.value, true);\n },\n\n execute: function (scope) {\n let target = this.node.$target || this.node;\n let newComputedName = this.nameExpr.execute(scope);\n if (this.computedName !== newComputedName) {\n //移除旧名称\n if (target.removeAttribute) {\n target.removeAttribute(this.computedName);\n }\n //设置新名称\n this.computedName = newComputedName;\n if (!this.utils.isNull(this.computedName) && this.computedName.length > 0) {\n if (target.setAttribute) {\n target.setAttribute(this.computedName, this.computedValue || '');\n }\n }\n }\n let newComputeValue = this.valueExpr.execute(scope);\n if (this.computedValue !== newComputeValue) {\n this.computedValue = newComputeValue;\n if (target.setAttribute) {\n target.setAttribute(this.computedName, this.computedValue || '');\n } else {\n target[this.computedName] = this.computedValue;\n }\n }\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/directives/attribute.js","const Class = require('cify');\nconst Observer = require('../observer');\nconst EventEmitter = require('../events');\nconst Compiler = require('./compiler');\n\n/**\n * 模板类\n * 可能通过 element 作为参数,创建一个模板实例\n */\nconst Template = new Class({\n\n $extends: EventEmitter,\n\n /**\n * 构建一个模板板实例\n * @param {HTMLNode} element HTML 元素\n * @param {Object} options 选项\n * @returns {void} 无返回\n */\n constructor: function (element, options) {\n options = options || {};\n EventEmitter.call(this);\n this.options = options;\n this.element = element;\n this.compiler = options.compiler || new Compiler(options);\n this.render = this.compiler.compile(this.element);\n this.update = this.update.bind(this);\n this._update = this._update.bind(this);\n this._updateTimer = 0;\n },\n\n /**\n * 更新当前模板 (会过滤不必要的更新)\n * @returns {void} 无返回\n */\n update: function () {\n if (this._updateTimer) {\n clearTimeout(this._updateTimer);\n this._updateTimer = null;\n }\n this._updateTimer = setTimeout(this._update, 0);\n },\n\n /**\n * 更新当前模板内部方法 \n * @returns {void} 无返回\n */\n _update: function () {\n if (!this._updateTimer || !this.observer) return;\n this.emit('update', this);\n this.render(this.observer.target);\n this._onBind();\n },\n\n /**\n * 在绑定成功时\n * @returns {void} 无返回\n */\n _onBind: function () {\n if (this._bound) return;\n this._bound = true;\n this.emit('bind', this);\n },\n\n /**\n * 将模板绑定到一个 scope\n * @param {Object} scope 绑定的上下文对象\n * @param {boolean} disableFirst 是否禁用第一次的自动渲染\n * @returns {void} 无返回\n */\n bind: function (scope, disableFirst) {\n if (!scope) return;\n this.unbind();\n this.observer = new Observer(scope, {\n root: this.options.root\n });\n scope.$self = scope;\n this.observer.on('change', this.update);\n if (disableFirst) {\n this._onBind();\n } else {\n this.update();\n }\n },\n\n /**\n * 解绑定\n * @returns {void} 无返回\n */\n unbind: function () {\n if (!this.observer) return;\n this.observer.removeListener('change', this.update);\n this.observer.clearReference();\n this.observer = null;\n },\n\n /**\n * 释放\n * @returns {void} 无返回\n */\n dispose: function () {\n this.unbind();\n this.render.dispose();\n }\n\n});\n\nmodule.exports = Template;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/template/template.js","const Component = require('./component');\nconst components = require('./components');\nconst directives = require('../template').directives;\n\nComponent.components = components;\nComponent.Component = Component;\n\nComponent.component = function (name, component) {\n if (!component) return components[name];\n components[name] = component;\n};\n\nComponent.directive = function (name, directive) {\n if (!directive) return directives[name];\n directives[name] = directive;\n};\n\nmodule.exports = Component;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/component/index.js","const Class = require('cify');\nconst Template = require('../template');\nconst Watcher = require('../watcher');\nconst utils = require('ntils');\nconst EventEmitter = require('../events');\nconst Observer = require('../observer');\nconst ComponentDirective = require('./component-directive');\n\n/**\n * 组件类\n * 用于定义一个新的组件\n * @param {Object} classOpts 类选项\n * @returns {Component} 组件类\n */\nfunction Component(classOpts) {\n\n //处理组件选项\n classOpts = classOpts || {};\n\n //处理「继承」,目前的机制,只能用「合并类选项」\n let mixes = classOpts.mixes;\n delete classOpts.mixes;\n if (mixes && !utils.isArray(mixes)) {\n mixes = [mixes];\n } else {\n mixes = [];\n }\n let extendComponent = classOpts.extend || Component;\n delete classOpts.extend;\n //extend 会覆盖 mixes 中的同名成员\n mixes.push(extendComponent);\n //classOpts 会覆盖 extend 或 mixes 中的同名成员\n mixes.push(classOpts);\n let mixedClassOpts = {};\n mixes.forEach(function (mixItem) {\n if (mixItem instanceof Component ||\n mixItem == Component) {\n mixItem = mixItem.$options || {};\n }\n utils.mix(mixedClassOpts, mixItem);\n });\n classOpts = mixedClassOpts;\n\n /**\n * 定义组件类\n * 可以通过 new ComponentClass() 创建组件实例\n */\n const ComponentClass = new Class({\n $extends: extendComponent,\n\n /**\n * 组件类构造函数\n * @param {object} instanceOpts 实例选项\n * @returns {void} 无返回\n */\n constructor: function (instanceOpts) {\n if (this == window) return new this.$class(instanceOpts);\n EventEmitter.call(this);\n instanceOpts = instanceOpts || {};\n //创建组件实例时可以给实例添加成员\n utils.each(instanceOpts, (key, value) => {\n if (key in this) return;\n this[key] = value;\n });\n this._onTemplateUpdate_ = this._onTemplateUpdate_.bind(this);\n this._createdData_(classOpts.data);\n this._createProperties_(classOpts.properties || classOpts.props);\n this._createWatches_(classOpts.watches || classOpts.watch);\n this.$directives = this.$directives || {};\n this._importDirectives_(classOpts.directives);\n this.$components = this.$components || {};\n this._importComponents_(require('./components'));\n this._importComponents_({\n 'self': ComponentClass\n });\n this._importComponents_(classOpts.components);\n utils.defineFreezeProp(this, '$children', []);\n if (instanceOpts.parent) this.$setParent(instanceOpts.parent);\n this.$callHook('onInit', [instanceOpts]);\n Observer.observe(this);\n if (classOpts.element) {\n this.$mount();\n } else {\n this.$compile();\n }\n },\n\n /**\n * 设定父组件\n * @param {Object} parent 父组件\n * @returns {void} 无返回\n */\n $setParent: function (parent) {\n if (this.$parent === parent) return;\n if (this.$parent) {\n this.$parent.$removeChild(this);\n }\n if (parent) {\n parent.$addChild(this);\n }\n },\n\n /**\n * 添加子组件\n * @param {Object} child 子组件\n * @returns {void} 无返回\n */\n $addChild: function (child) {\n if (!(child instanceof Component)) return;\n this.$children.push(child);\n utils.defineFreezeProp(child, '$parent', this);\n utils.defineFreezeProp(child, '$root', this.$root || this);\n },\n\n /**\n * 移除子组件\n * @param {Object} child 子组件\n * @returns {void} 无返回\n */\n $removeChild: function (child) {\n let index = this.$children.indexOf(child);\n this.$children.splice(index, 1);\n utils.defineFreezeProp(child, '$parent', null);\n //utils.defineFreezeProp(child, '$root', null);\n },\n\n /**\n * 获取根组件, 为了能通过 polyfill 处理 IE8 暂不用这种方式\n */\n get $root() {\n if (this.$parent) {\n return this.$parent.$root;\n } else {\n return this;\n }\n },\n\n /**\n * 导入用到的子组件类\n * @param {Object} components 引入的组件\n * @returns {void} 无返回\n */\n _importComponents_: function (components) {\n utils.each(components, function (name, component) {\n if (!component) return;\n this.$components[name] = component;\n this.$directives[name] = new ComponentDirective({\n name: name,\n component: component,\n parent: this\n });\n }, this);\n },\n\n /**\n * 导入一个用到的指令\n * @param {Object} directives 引入的指令\n * @returns {void} 无返回\n */\n _importDirectives_: function (directives) {\n utils.each(directives, function (name, directive) {\n if (!directive) return;\n this.$directives[name] = directive;\n }, this);\n },\n\n /**\n * 调用生命周期 hook\n * @param {string} name 调用的 hook 名称\n * @param {Array} args 调用 hook 的参数列表\n * @returns {void} 无反回\n */\n $callHook: function (name, args) {\n if (!utils.isFunction(this[name])) return;\n this[name].apply(this, args || []);\n },\n\n /**\n * 创建数据对象\n * @param {Object} data 组件数据对象\n * @returns {void} 无返回\n */\n _createdData_: function (data) {\n if (utils.isFunction(data)) {\n this.$data = data.call(this);\n } else {\n this.$data = data || {};\n }\n utils.each(this.$data, function (name) {\n Object.defineProperty(this, name, {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.$data) return;\n return this.$data[name];\n },\n set: function (value) {\n if (!this.$data) return;\n this.$data[name] = value;\n }\n });\n }, this);\n },\n\n /**\n * 创建组件属性\n * @param {Object} properties 属性定义对象\n * @returns {void} 无返回\n */\n _createProperties_: function (properties) {\n this.$properties = {};\n utils.each(properties, function (name, descriptor) {\n if (utils.isFunction(descriptor)) {\n descriptor = {\n get: descriptor\n };\n } else if (!utils.isObject(descriptor)) {\n descriptor = {\n value: descriptor\n };\n } else {\n //不能直接用 descriptor,\n //因为为会导到多个组件实例间的影响\n descriptor = utils.copy(descriptor);\n }\n let hasGetterOrSetter = !!descriptor.get || !!descriptor.set;\n if (!hasGetterOrSetter) {\n descriptor.value = descriptor.value || null;\n descriptor.get = function () {\n return descriptor.value;\n };\n descriptor.set = function (value) {\n descriptor.value = value;\n };\n }\n Object.defineProperty(this, name, {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!descriptor.get) {\n throw new Error('Property `' + name + '` cannot be read');\n }\n return descriptor.get.call(this);\n },\n set: function (value) {\n if (!descriptor.set) {\n throw new Error('Property `' + name + '` cannot be written');\n }\n if (descriptor.test && !descriptor.test(value)) {\n throw new Error('Invalid value `' + value + '` for property `' + name + '`');\n }\n descriptor.set.call(this, value);\n if (this._observer_) {\n this._observer_.emitChange({\n path: name,\n value: value\n });\n }\n }\n });\n this.$properties[name] = descriptor;\n }, this);\n },\n\n /**\n * 创建监控\n * 为什么用 watches 而不是 watchers 或其它?\n * 因为,这里仅是「监控配置」并且是「复数」\n * @param {Object} watches 监控定义对象\n * @returns {void} 无返回\n */\n _createWatches_: function (watches) {\n this._watchers_ = this._watchers_ || [];\n utils.each(watches, function (name, handler) {\n this.$watch(name, handler);\n }, this);\n },\n\n /**\n * 在模板发生更新时\n * @returns {void} 无返回\n */\n _onTemplateUpdate_: function () {\n this._watchers_.forEach(function (watcher) {\n watcher.calc();\n }, this);\n },\n\n /**\n * 添加一个监控\n * @param {string|function} path 计算函数或路径\n * @param {function} handler 处理函数\n * @returns {void} 无返回\n */\n $watch: function (path, handler) {\n if (!utils.isFunction(handler)) return;\n let calcer = path;\n if (!utils.isFunction(path)) {\n calcer = function () {\n return utils.getByPath(this, path);\n };\n }\n let watcher = new Watcher(calcer.bind(this), handler.bind(this));\n this._watchers_.push(watcher);\n return watcher;\n },\n\n /**\n * 取消一个 watcher 对象\n * @param {object} watcher 监控对象实例\n * @returns {void} 无返回\n */\n $unWatch: function (watcher) {\n let index = this._watchers_.findIndex(w => w === watcher);\n this._watchers_.splice(index, 1);\n },\n\n /**\n * 创建元素\n * @returns {void} 无返回\n */\n _createElement_: function () {\n if (this._created_) return;\n this._created_ = true;\n this.$callHook('onCreate');\n utils.defineFreezeProp(this, '$element',\n this.element || ComponentClass.$template.cloneNode(true));\n if (!this.$element || this.$element.nodeName === '#text') {\n throw new Error('Invalid component template');\n }\n this.$callHook('onCreated');\n },\n\n /**\n * 编译自身模板并完成绑定\n * @returns {void} 无返回\n */\n $compile: function () {\n if (this._compiled_) return;\n this._compiled_ = true;\n this._createElement_();\n utils.defineFreezeProp(this, '_template_', new Template(this.$element, {\n directives: this.$directives,\n root: true\n }));\n this._template_.bind(this);\n this._template_.on('update', this._onTemplateUpdate_);\n this._template_.on('bind', function () {\n if (!this.deferReady) this.$callHook('onReady');\n }.bind(this));\n },\n\n /**\n * 向 DOM tree 中挂截组件\n * @param {HTMLNode} mountNode 挂载点元素\n * @param {append} append 是否 append 到挂载元素内\n * @returns {void} 无返回 \n */\n $mount: function (mountNode, append) {\n if (this._mounted_) return;\n this.$compile();\n this.$callHook('onMount');\n if (mountNode) {\n mountNode.$substitute = this.$element;\n this.$element._mountNode = mountNode;\n if (append) {\n mountNode.appendChild(this.$element);\n } else if (mountNode.parentNode) {\n mountNode.parentNode.insertBefore(this.$element, mountNode);\n }\n }\n this._mounted_ = true;\n this._removed_ = false;\n this.$callHook('onMounted');\n },\n\n /**\n * 将组件添加到指定容器元素内\n * @param {HTMLNode} node 容器元素\n * @returns {void} 无返回 \n */\n $appendTo: function (node) {\n this.$mount(node, true);\n },\n\n /**\n * 移除组件\n * @returns {void} 无返回\n */\n $remove: function () {\n if (this._removed_ || !this._mounted_) return;\n this.$callHook('onRemove');\n if (this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n this._removed_ = true;\n this._mounted_ = false;\n this.$callHook('onRemoved');\n },\n\n /**\n * 触发自身的一个事件并向上冒泡\n * @param {string} name 事件名称\n * @param {object} data 传递的对象\n * @returns {void} 无返回\n */\n $dispatch: function (name, data) {\n let stopPropagation = this.$emit(name, data);\n if (!stopPropagation && this.$parent) {\n this.$parent.$dispatch(name, data);\n }\n },\n\n /**\n * 触发自身的一个事件并向下广播\n * @param {string} name 事件名称\n * @param {object} data 传递的对象\n * @returns {void} 无返回\n */\n $broadcast: function (name, data) {\n let stopPropagation = this.$emit(name, data);\n if (!stopPropagation && this.$children && this.$children.length > 0) {\n this.$children.forEach(function (child) {\n child.$broadcast(name, data);\n }, this);\n }\n },\n\n /**\n * 释放组件\n * @returns {void} 无返回\n */\n $dispose: function () {\n this.$remove();\n this._emitter_.off();\n this.$children.forEach(function (child) {\n child.$dispose();\n }, this);\n if (this.$parent) {\n let index = this.$parent.$children.indexOf(this);\n this.$parent.$children.splice(index, 1);\n }\n this.$callHook('onDispose');\n if (this._compiled_) {\n this._template_.unbind();\n }\n this.$callHook('onDisposed');\n for (let key in this) {\n delete this[key];\n }\n ['_observer_', '$element', '$children', '$parent', '_template_']\n .forEach(function (key) {\n delete this[key];\n }, this);\n utils.setPrototypeOf(this, null);\n }\n\n });\n\n //保存类选项\n ComponentClass.$options = classOpts;\n ComponentClass.$template = utils.parseDom(classOpts.template);\n\n //向 ComponentClass.prototype 上拷贝成员\n utils.copy(classOpts, ComponentClass.prototype);\n utils.copy(classOpts.methods, ComponentClass.prototype);\n\n //使 ComponentClass instanceof Component === true \n //IE9/10 下为 false,并且动态为 Component.prototype 添加的成员不会在 ComponentClass 上生效\n utils.setPrototypeOf(ComponentClass, Component.prototype);\n\n return ComponentClass;\n\n}\n\n//继承自 EventEmitter\nComponent.prototype = utils.create(EventEmitter.prototype);\n\n//组件扩展方法,简单封装 extends\nComponent.extend = function (classOpts) {\n return new Component(classOpts);\n};\n\n//定义扩展方法\nComponent.prototype.extend = function (classOpts) {\n classOpts = classOpts || {};\n classOpts.extend = this;\n return new Component(classOpts);\n};\n\n//创建实例的方法\nComponent.prototype.create = function (instanceOpts) {\n return new this(instanceOpts);\n};\n\n//针对包括 element 组件类的启动方法\nComponent.prototype.start = function (instanceOpts) {\n if (!this.$options || !this.$options.element) {\n throw new Error('Start method cannot be called');\n }\n return this.create(instanceOpts);\n};\n\nmodule.exports = Component;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/component/component.js","const Template = require('../template');\nconst Directive = Template.Directive;\n\n/**\n * 创建一个组件指令\n * @param {object} options 选项\n * @returns {object} 组件指令\n */\nfunction ComponentDirective(options) {\n\n return new Directive({\n type: Directive.TE,\n literal: true,\n final: true,\n level: Directive.LE,\n\n bind: function () {\n this.component = new options.component({\n deferReady: true,\n parent: options.parent || this.scope\n });\n this.handleAttrs();\n this.node.$target = this.component;\n this.handler = this.compiler.compile(this.node, {\n element: false,\n children: false\n });\n this.handleContents();\n this.component.$mount(this.node);\n if (this.node.parentNode) {\n this.node.parentNode.removeChild(this.node);\n }\n },\n\n handleAttrs: function () {\n this.attrs = [].slice.call(this.node.attributes);\n let directiveRegexp = new RegExp('^' + this.prefix + ':', 'i');\n this.attrs.forEach(function (attr) {\n if (directiveRegexp.test(attr.name)) return;\n if (attr.name in this.component.$properties) return;\n this.component.$element.setAttribute(attr.name, attr.value);\n this.node.removeAttribute(attr.name);\n }, this);\n },\n\n handleContents: function () {\n this.placeHandlers = [];\n let places = [].slice.call(\n this.component.$element.querySelectorAll('[' + this.prefix + '\\\\:content]')\n );\n places.forEach(function (place) {\n //将内容插入到指定的「位置」\n let contents = null;\n let selector = place.getAttribute(this.prefix + ':content');\n if (!selector) {\n contents = [].slice.call(this.node.childNodes);\n } else {\n contents = [].slice.call(this.node.querySelectorAll(selector));\n }\n if (!contents || contents.length < 1) return;\n place.innerHTML = '';\n contents.forEach(function (content) {\n place.appendChild(content.cloneNode(true));\n }, this);\n //编译插入后的子「内容模板」\n let handler = this.compiler.compile(place);\n this.placeHandlers.push(handler);\n }, this);\n },\n\n execute: function (scope) {\n this.handler(scope);\n if (!this._ready_) {\n this._ready_ = true;\n this.component.$callHook('onReady');\n }\n this.placeHandlers.forEach(function (handler) {\n handler(scope);\n }, this);\n }\n\n });\n}\n\nmodule.exports = ComponentDirective;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/component/component-directive.js","module.exports = {\n View: require('./view')\n};\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/component/components/index.js","const Component = require('../component');\nconst utils = require('ntils');\n\n/**\n * 内置视图组件\n * 可以加载并显示其它组件,并可以指定「转场效果」\n */\nconst View = new Component({\n\n template: '<div></div>',\n\n properties: {\n\n /**\n * 显示到视图中的组件\n */\n component: {\n test: function (value) {\n if (!value) return false;\n return value instanceof Component || utils.isString(value);\n },\n set: function (component) {\n if (this._transitioning) return;\n this._transitioning = true;\n //如果 value 是字符串则尝试从 $parent.components 中获取组件类 \n if (utils.isString(component)) {\n if (this.$parent && this.$parent.$components) {\n this.component = this.$parent.$components[component];\n } else {\n this.component = null;\n }\n return;\n }\n //声明新旧组件变量\n let newComponentInstance = null;\n let oldComponentInstance = this.componentInstance;\n //创建新组件实例\n if (utils.isFunction(component)) {\n newComponentInstance = new component({\n parent: this\n });\n } else {\n component.$setParent(this);\n newComponentInstance = component;\n }\n //通过转场控制器进行转场准备\n this.transition.prep(newComponentInstance, oldComponentInstance);\n //挂载新组件实例\n newComponentInstance.$appendTo(this.$element);\n //通过转场控制器进行转场\n this.transition.go(newComponentInstance, oldComponentInstance, function () {\n //触发相关事件\n this.$emit('enter', newComponentInstance);\n this.$emit('leave', oldComponentInstance);\n //销毁旧组件实例\n if (oldComponentInstance) {\n oldComponentInstance.$dispose();\n }\n this._transitioning = false;\n }.bind(this));\n //暂存当前组件实例\n this.componentInstance = newComponentInstance;\n },\n get: function () {\n return this._Component;\n }\n },\n\n /**\n * 视图的转场控制对象\n */\n transition: {\n get: function () {\n return this._transition || View.transition;\n },\n set: function (transition) {\n if (this._transitioning) return;\n if (!transition || (\n utils.isFunction(transition.prep) &&\n utils.isFunction(transition.go)\n )) {\n if (this._transition && utils.isFunction(this._transition.clean)) {\n this._transition.clean(this);\n }\n if (transition && utils.isFunction(transition.init)) {\n transition.init(this);\n }\n this._transition = transition;\n } else {\n throw new Error('Invalid transition');\n }\n }\n }\n },\n\n /**\n * 切换到指定的组件\n * @param {Component} component 组件\n * @param {transition} transition 转场控制组件\n * @returns {void} 无返回\n */\n switchTo: function (component, transition) {\n if (transition) {\n this.transition = transition;\n }\n this.component = component;\n }\n\n});\n\n/**\n * 默认转场设置\n */\nView.transition = {\n //init: function () { },\n //clean: function () { },\n\n /**\n * 转场开始前的准备\n * @param {Component} newComponent 新组件\n * @param {Component} oldComponent 旧组件\n * @returns {void} 无返回\n */\n prep: function (newComponent, oldComponent) {\n if (oldComponent) oldComponent.$element.style.display = 'none';\n },\n\n /**\n * 执行转场动画\n * @param {Component} newComponent 新组件\n * @param {Component} oldComponent 旧组件\n * @param {Function} done 完成后的回调\n * @returns {void} 无返回\n */\n go: function (newComponent, oldComponent, done) {\n done();\n }\n};\n\nmodule.exports = View;\n\n\n// WEBPACK FOOTER //\n// ./~/.3.0.15@mokit/lib/component/components/view.js","const mokit = require('mokit');\nconst items = require('./items');\n\nrequire('./index.less');\n\nconst Toolbar = new mokit.Component({\n template: require('./index.html'),\n props: {\n mditor: null\n },\n\n data() {\n return {\n items: items.slice(0)\n };\n },\n\n onReady() {\n this.bindCommands();\n },\n\n watch: {\n items() {\n this.bindCommands();\n }\n },\n\n bindCommands() {\n if (!this.mditor) return;\n this.items.forEach(item => {\n this.mditor.removeCommand(item.name);\n this.mditor.addCommand(item);\n });\n },\n\n isActive(item) {\n return this.mditor && item.state && this.mditor[item.state];\n },\n\n exec(name, event) {\n event.preventDefault();\n this.mditor.execCommand(name, event);\n },\n\n getItem(name) {\n return this.items.find(item => item.name === name);\n },\n\n removeItem(name) {\n let index = this.items.findIndex(item => item.name === name);\n return this.items.splice(index, 1);\n },\n\n addItem(item) {\n this.items.push(item);\n },\n\n replaceItem(name, newItem) {\n let index = this.items.findIndex(item => item.name === name);\n let oldItem = this.items.splice(index, 1);\n this.items.splice(index, 0, newItem);\n return oldItem;\n }\n\n});\n\nmodule.exports = Toolbar;\n\n\n// WEBPACK FOOTER //\n// ./src/toolbar/index.js","module.exports = [{\n name: 'bold',\n title: '粗体',\n key: 'shift+alt+b',\n handler() {\n this.editor.wrapSelectText('**', '**');\n }\n}, {\n name: 'italic',\n title: '斜体',\n key: 'shift+alt+i',\n handler() {\n this.editor.wrapSelectText('*', '*');\n }\n}, {\n name: 'underline',\n title: '下划线',\n key: 'shift+alt+e',\n handler() {\n this.editor.wrapSelectText('<u>', '</u>');\n }\n}, {\n name: 'strikethrough',\n title: '删除线',\n key: 'shift+alt+d',\n handler() {\n this.editor.wrapSelectText('~~', '~~');\n }\n}, {\n name: 'header',\n title: '标题',\n key: 'shift+alt+1',\n handler() {\n this.editor.wrapSelectText('# ');\n }\n}, {\n name: 'quote',\n icon: 'quote-left',\n title: '引用',\n key: 'shift+alt+q',\n handler() {\n let selectText = this.editor.getSelectText();\n if (selectText.length < 1) {\n this.editor.wrapSelectText('> ');\n return;\n }\n let textArray = selectText.split(this.EOL);\n let buffer = [];\n textArray.forEach(function (line) {\n buffer.push('> ' + line + ' ');\n });\n this.editor.setSelectText(buffer.join(this.EOL) + this.EOL);\n }\n}, {\n name: 'code',\n title: '代码',\n key: 'shift+alt+c',\n handler() {\n let lang = 'js' + this.EOL;\n let before = '```' + lang;\n let after = '``` ' + this.EOL;\n let text = this.editor.getSelectText().trim();\n if (text.length > 0) {\n text += this.EOL;\n }\n this.editor.setSelectText(text);\n this.editor.wrapSelectText(before, after);\n let range = this.editor.getSelectRange();\n let start = range.start - lang.length;\n let end = range.start - this.EOL.length;\n this.editor.setSelectRange(start, end);\n }\n}, {\n name: 'list-ol',\n title: '有序列表',\n key: 'shift+alt+o',\n handler() {\n let selectText = this.editor.getSelectText();\n if (selectText.length < 1) {\n this.editor.wrapSelectText('1. ');\n return;\n }\n let textArray = selectText.split(this.EOL);\n let buffer = [];\n for (let i = 0; i < textArray.length; i++) {\n let line = textArray[i];\n buffer.push((i + 1) + '. ' + line);\n }\n this.editor.setSelectText(buffer.join(this.EOL) + this.EOL);\n }\n}, {\n name: 'list-ul',\n title: '无序列表',\n key: 'shift+alt+u',\n handler() {\n let selectText = this.editor.getSelectText();\n if (selectText.length < 1) {\n this.editor.wrapSelectText('- ');\n return;\n }\n let textArray = selectText.split(this.EOL);\n let buffer = [];\n textArray.forEach(function (line) {\n buffer.push('- ' + line);\n });\n this.editor.setSelectText(buffer.join(this.EOL) + this.EOL);\n }\n}, {\n name: 'link',\n title: '链接',\n key: 'shift+alt+l',\n handler() {\n let text = this.editor.getSelectText();\n if (!text || /^(https:|http:|ftp:|file:|mailto:|\\/|\\.)/i.test(text)) {\n this.editor.wrapSelectText('[link](', ')');\n if (!text) return;\n let range = this.editor.getSelectRange();\n let start = range.start - 6;\n this.editor.setSelectRange(start, start + 4);\n } else {\n this.editor.wrapSelectText('[', ']()');\n let range = this.editor.getSelectRange();\n let index = range.end + 2;\n this.editor.setSelectRange(index, index);\n }\n }\n}, {\n name: 'table',\n title: '表格',\n key: 'shift+alt+t',\n handler() {\n let buffer = [\n 'column1 | column2 | column3 ',\n '------- | ------- | ------- ',\n 'column1 | column2 | column3 ',\n 'column1 | column2 | column3 ',\n 'column1 | column2 | column3 '\n ];\n this.editor.wrapSelectText(buffer.join(this.EOL) + this.EOL);\n }\n}, {\n name: 'line',\n title: '分隔线',\n icon: 'minus',\n key: 'shift+alt+h',\n handler() {\n this.editor.wrapSelectText('----' + this.EOL);\n }\n}, {\n name: 'image',\n title: '图片',\n key: 'shift+alt+p',\n handler() {\n this.editor.wrapSelectText('');\n }\n}, {\n name: 'help',\n title: '帮助',\n icon: 'question',\n key: 'shift+alt+/',\n handler() {\n window.open('http://mditor.com', '_blank');\n }\n}, {\n name: 'toggleFullScreen',\n title: '全屏',\n icon: 'arrows-alt',\n key: 'shift+alt+f',\n control: true,\n state: 'fullscreen',\n owner: function (mditor) {\n return mditor.$element;\n },\n handler() {\n this.fullscreen = !this.fullscreen;\n }\n}, {\n name: 'togglePreview',\n title: 'preview',\n icon: 'desktop',\n key: 'shift+alt+v',\n control: true,\n state: 'preview',\n owner: function (mditor) {\n return mditor.$element;\n },\n handler() {\n this.preview = !this.preview;\n if (this.preview) {\n this._split = this.split;\n this.split = false;\n } else {\n this.split = this._split;\n }\n }\n}, {\n name: 'toggleSplit',\n title: '预览',\n icon: 'columns',\n key: 'shift+alt+s',\n control: true,\n state: 'split',\n owner: function (mditor) {\n return mditor.$element;\n },\n handler() {\n this.split = !this.split;\n if (this.split) {\n this.preview = false;\n }\n }\n}];\n\n\n// WEBPACK FOOTER //\n// ./src/toolbar/items.js","module.exports = \"<ul class=\\\"toolbar\\\">\\n <i m:each=\\\"item of items\\\" data-cmd=\\\"{{item.name}}\\\" m:on:click=\\\"exec(item.name,$event)\\\" class=\\\"item fa fa-{{item.icon || item.name}} {{isActive(item)?'active':''}} {{item.control?'control':''}}\\\" title=\\\"{{item.title || item.name}} {{item.key}}\\\"></i>\\n</ul>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/toolbar/index.html\n// module id = 44\n// module chunks = 0","const mokit = require('mokit');\nconst EventEmitter = mokit.EventEmitter;\nconst utils = require('ntils');\nconst Stack = require('./stack');\nconst commands = require('./commands');\n\nrequire('./index.less');\n\nconst ua = window.navigator.userAgent.toLowerCase();\nconst isIE = !!ua.match(/msie|trident\\/7|edge/);\nconst isWinPhone = ua.indexOf('windows phone') !== -1;\nconst isIOS = !isWinPhone && !!ua.match(/ipad|iphone|ipod/);\n\nmodule.exports = new mokit.Component({\n template: require('./index.html'),\n\n props: {\n mditor: null,\n value: null,\n markExp: null\n },\n\n onReady() {\n this.stack = new Stack();\n setTimeout(() => {\n this.textareaEmitter = new EventEmitter(this.textarea);\n this.stack.init({\n value: this.getValue()\n });\n }, 100);\n this._bindCommands();\n },\n\n _bindCommands() {\n commands.forEach(item => {\n this.mditor.removeCommand(item.name);\n this.mditor.addCommand(item);\n });\n },\n\n onCompositionStart() {\n this._compositionLock = true;\n },\n onCompositionEnd() {\n this._compositionLock = false;\n setTimeout(() => this.onInput(), 300);\n /**\n * 在输入中文时,输入法「候选词面板」位置会发生定位错误\n * 经过反复尝试发现了「规律」,第一次「侯选词」上屏后才会位置错误\n * 在「候选词」上屏后让输入框「失去焦点再获取焦点」可「规避」这个 Bug\n * 附上相关 issues\n * https://github.com/electron/electron/issues/8894\n * https://github.com/electron/electron/issues/4539\n */\n this.textarea.blur();\n this.textarea.focus();\n },\n onInput() {\n this.$emit('input');\n if (this._changedTimer) {\n clearTimeout(this._changedTimer);\n this._changedTimer = null;\n }\n if (this._compositionLock) return;\n this._changedTimer = setTimeout(() => {\n if (!this._changedTimer) return;\n this.stack.push({\n value: this.getValue(),\n range: this.getSelectRange()\n });\n this.$emit('changed');\n }, 300);\n },\n\n undo() {\n let last = this.stack.last();\n let item = this.stack.undo();\n if (utils.isNull(item) || utils.isNull(item.value)) return;\n let valGap = last.value.length - item.value.length;\n this.value = item.value;\n if (last.range) {\n setTimeout(() => {\n let start = last.range.start - valGap;\n let end = last.range.end - valGap;\n this.setSelectRange(start, end);\n });\n }\n },\n\n redo() {\n let item = this.stack.redo();\n if (utils.isNull(item) || utils.isNull(item.value)) return;\n this.value = item.value;\n if (item.range) {\n setTimeout(() => {\n this.setSelectRange(item.range.start, item.range.end);\n });\n }\n },\n\n onPaste(event) {\n this.$emit('paste', event);\n },\n\n onDragover(event) {\n event.preventDefault();\n this.$emit('dragover', event);\n },\n\n onDrop(event) {\n event.preventDefault();\n this.$emit('drop', event);\n },\n\n focus() {\n this.textarea.focus();\n },\n\n blur() {\n this.textarea.blur();\n },\n\n onScroll(event) {\n this.syncScroll();\n this.$emit('scroll', event);\n },\n\n syncScroll(disTwice) {\n this.marks.scrollTop = this.textarea.scrollTop;\n this.marks.scrollLeft = this.textarea.scrollLeft;\n if (disTwice) return;\n setTimeout(() => {\n this.syncScroll(true);\n }, 0);\n },\n\n applyMarks(text) {\n if (!text || !this.markExp) return;\n text = text\n .replace(/\\n$/g, '\\n\\n')\n .replace(this.markExp, '<mark>$&</mark>');\n if (isIE) {\n // IE wraps whitespace differently in a div vs textarea, this fixes it\n text = text.replace(/ /g, ' <wbr>');\n }\n return text;\n },\n\n activeMark(index) {\n let marks = [].slice.call(this.marks.querySelectorAll('mark'));\n if (marks.length < 1) return;\n this.activeMarkIndex = utils.isNull(this.activeMarkIndex) ?\n -1 : this.activeMarkIndex;\n if (utils.isNull(index)) {\n this.activeMarkIndex++;\n } else {\n this.activeMarkIndex = index;\n }\n if (this.activeMarkIndex >= marks.length) {\n this.activeMarkIndex = 0;\n }\n marks.forEach(mark => {\n mark.classList.remove('active');\n });\n let activeMark = marks[this.activeMarkIndex];\n activeMark.classList.add('active');\n this.scrollToMark(activeMark);\n },\n\n scrollToMark(mark) {\n // mark.scrollIntoView();\n // this.textarea.scrollTop = this.marks.scrollTop;\n // this.textarea.scrollTop -= 20;\n this.textarea.scrollTop = mark.offsetTop - 20;\n },\n\n getValue() {\n return this.textarea.value;\n },\n\n setValue(value) {\n this.textarea.value = value;\n },\n\n getActiveElement() {\n this.textarea.focus();\n return document.activeElement;\n },\n\n getSelectRange() {\n let box = this.getActiveElement();\n return {\n 'start': box.selectionStart,\n 'end': box.selectionEnd\n };\n },\n\n setSelectRange(start, end) {\n let box = this.getActiveElement();\n box.setSelectionRange(start, end);\n },\n\n getSelectText() {\n let box = this.getActiveElement();\n let range = this.getSelectRange();\n return box.value.substring(range.start, range.end);\n },\n\n setSelectText(text) {\n let box = this.getActiveElement();\n let range = this.getSelectRange();\n box.setRangeText(text);\n if (range.end == range.start) {\n this.setSelectRange(range.start, range.end + text.length);\n }\n this.value = this.getValue();\n this.onInput();\n setTimeout(() => {\n this.blur();\n this.focus();\n }, 0);\n },\n\n wrapSelectText(before, after) {\n before = (before !== null && before !== undefined) ? before : '';\n after = (after !== null && after !== undefined) ? after : '';\n let range = this.getSelectRange();\n let text = this.getSelectText();\n this.setSelectText(before + text + after);\n let newStart = range.start + before.length;\n let newEnd = range.end + before.length;\n this.setSelectRange(newStart, newEnd);\n },\n\n insertBeforeText(text) {\n this.wrapSelectText(text);\n },\n\n insertAfterText(text) {\n this.wrapSelectText('', text);\n },\n\n getBeforeText(length) {\n let range = this.getSelectRange();\n let end = range.start;\n let start = end - length;\n let value = this.getValue();\n return value.substring(start, end);\n },\n\n getBeforeFirstCharIndex(char) {\n let range = this.getSelectRange();\n let end = range.start;\n let start = 0;\n let value = this.getValue();\n return value.substring(start, end).lastIndexOf(char);\n },\n\n getBeforeWord() {\n let chars = [' ', '\\t', this.mditor.EOL];\n let start = 0;\n chars.forEach(char => {\n let index = this.getBeforeFirstCharIndex(char);\n if (index + char.length > start) {\n start = index + char.length;\n }\n });\n let range = this.getSelectRange();\n let value = this.getValue();\n return value.substring(start, range.end);\n },\n\n getBeforeTextInLine() {\n let start = this.getBeforeFirstCharIndex(this.mditor.EOL) + this.mditor.EOL.length;\n let range = this.getSelectRange();\n let value = this.getValue();\n return value.substring(start, range.end);\n },\n\n selectBeforeText(length) {\n let range = this.getSelectRange();\n this.setSelectRange(range.start - length, range.end);\n },\n\n selectAfterText(length) {\n let range = this.getSelectRange();\n this.setSelectRange(range.start, range.end + length);\n },\n\n selectBeforeTextInLine() {\n let start = this.getBeforeFirstCharIndex(this.mditor.EOL) + this.mditor.EOL.length;\n let range = this.getSelectRange();\n this.setSelectRange(start, range.end);\n },\n\n addIndent() {\n let selectText = this.getSelectText();\n if (selectText.length < 1) {\n this.insertBeforeText(this.mditor.INDENT);\n return;\n }\n let textArray = selectText.split(this.mditor.EOL);\n let buffer = [];\n let lineCount = textArray.length - 1;\n textArray.forEach((line, index) => {\n line = line.trim() !== '' ? this.mditor.INDENT + line : line;\n if (index < lineCount || line.trim() !== '') {\n buffer.push(line);\n }\n });\n this.setSelectText(buffer.join(this.mditor.EOL));\n },\n\n removeIndent() {\n let indentRegExp = new RegExp('^' + this.mditor.INDENT);\n let selectText = this.getSelectText();\n if (selectText.length < 1) {\n this.selectBeforeTextInLine();\n if (this.getSelectText().length > 0) {\n event.clearSelected = true;\n this.removeIndent();\n }\n return;\n }\n let textArray = selectText.split(this.mditor.EOL);\n let buffer = [];\n textArray.forEach(line => {\n if (indentRegExp.test(line)) {\n line = line.replace(this.mditor.INDENT, '');\n }\n buffer.push(line);\n });\n this.setSelectText(buffer.join(this.mditor.EOL));\n if (event.clearSelected) {\n let range = this.getSelectRange();\n this.setSelectRange(range.end, range.end);\n }\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./src/editor/index.js","(function (ntils) {\n\n /**\n * 空函数\n */\n ntils.noop = function () { };\n\n /**\n * 验证一个对象是否为NULL\n * @method isNull\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isNull = function (obj) {\n return obj === null || typeof obj === \"undefined\";\n };\n\n /**\n * 除去字符串两端的空格\n * @method trim\n * @param {String} str 源字符串\n * @return {String} 结果字符串\n * @static\n */\n ntils.trim = function (str) {\n if (this.isNull(str)) return str;\n if (str.trim) {\n return str.trim();\n } else {\n return str.replace(/(^[\\\\s]*)|([\\\\s]*$)/g, \"\");\n }\n };\n\n /**\n * 替换所有\n * @method replace\n * @param {String} str 源字符串\n * @param {String} str1 要替换的字符串\n * @param {String} str2 替换为的字符串\n * @static\n */\n ntils.replace = function (str, str1, str2) {\n if (this.isNull(str)) return str;\n return str.replace(new RegExp(str1, 'g'), str2);\n };\n\n /**\n * 从字符串开头匹配\n * @method startWith\n * @param {String} str1 源字符串\n * @param {String} str2 要匹配的字符串\n * @return {Boolean} 匹配结果\n * @static\n */\n ntils.startWith = function (str1, str2) {\n if (this.isNull(str1) || this.isNull(str2)) return false;\n return str1.indexOf(str2) === 0;\n };\n\n /**\n * 是否包含\n * @method contains\n * @param {String} str1 源字符串\n * @param {String} str2 检查包括字符串\n * @return {Boolean} 结果\n * @static\n */\n ntils.contains = function (str1, str2) {\n var self = this;\n if (this.isNull(str1) || this.isNull(str2)) return false;\n return str1.indexOf(str2) > -1;\n };\n\n /**\n * 从字符串结束匹配\n * @method endWidth\n * @param {String} str1 源字符串\n * @param {String} str2 匹配字符串\n * @return {Boolean} 匹配结果\n * @static\n */\n ntils.endWith = function (str1, str2) {\n if (this.isNull(str1) || this.isNull(str2)) return false;\n return str1.indexOf(str2) === (str1.length - str2.length);\n };\n\n /**\n * 是否包含属性\n * @method hasProperty\n * @param {Object} obj 对象\n * @param {String} name 属性名\n * @return {Boolean} 结果\n * @static\n */\n ntils.has = ntils.hasProperty = function (obj, name) {\n if (this.isNull(obj) || this.isNull(name)) return false;\n return (name in obj) || (obj.hasOwnProperty(name));\n };\n\n /**\n * 验证一个对象是否为Function\n * @method isFunction\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isFunction = function (obj) {\n if (this.isNull(obj)) return false;\n return typeof obj === \"function\";\n };\n\n /**\n * 验证一个对象是否为String\n * @method isString\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isString = function (obj) {\n if (this.isNull(obj)) return false;\n return typeof obj === 'string' || obj instanceof String;\n };\n\n /**\n * 验证一个对象是否为Number\n * @method isNumber\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isNumber = function (obj) {\n if (this.isNull(obj)) return false;\n return typeof obj === 'number' || obj instanceof Number;\n };\n\n /**\n * 验证一个对象是否为Boolean\n * @method isBoolean\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isBoolean = function (obj) {\n if (this.isNull(obj)) return false;\n return typeof obj === 'boolean' || obj instanceof Boolean;\n };\n\n /**\n * 验证一个对象是否为HTML Element\n * @method isElement\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isElement = function (obj) {\n if (this.isNull(obj)) return false;\n if (window.Element) {\n return obj instanceof Element;\n } else {\n return (obj.tagName && obj.nodeType && obj.nodeName && obj.attributes && obj.ownerDocument);\n }\n };\n\n /**\n * 验证一个对象是否为HTML Text Element\n * @method isText\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isText = function (obj) {\n if (this.isNull(obj)) return false;\n return obj instanceof Text;\n };\n\n /**\n * 验证一个对象是否为Object\n * @method isObject\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isObject = function (obj) {\n if (this.isNull(obj)) return false;\n return typeof obj === \"object\";\n };\n\n /**\n * 验证一个对象是否为Array或伪Array\n * @method isArray\n * @param {Object} obj 要验证的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isArray = function (obj) {\n if (this.isNull(obj)) return false;\n var v1 = Object.prototype.toString.call(obj) === '[object Array]';\n var v2 = obj instanceof Array;\n var v3 = !this.isString(obj) && this.isNumber(obj.length) && this.isFunction(obj.splice);\n var v4 = !this.isString(obj) && this.isNumber(obj.length) && obj[0];\n return v1 || v2 || v3 || v4;\n };\n\n /**\n * 验证是不是一个日期对象\n * @method isDate\n * @param {Object} val 要检查的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isDate = function (val) {\n if (this.isNull(val)) return false;\n return val instanceof Date;\n };\n\n /**\n * 验证是不是一个正则对象\n * @method isDate\n * @param {Object} val 要检查的对象\n * @return {Boolean} 结果\n * @static\n */\n ntils.isRegexp = function (val) {\n return val instanceof RegExp;\n };\n\n /**\n * 转换为数组\n * @method toArray\n * @param {Array|Object} array 伪数组\n * @return {Array} 转换结果数组\n * @static\n */\n ntils.toArray = function (array) {\n if (this.isNull(array)) return [];\n return Array.prototype.slice.call(array);\n };\n\n /**\n * 转为日期格式\n * @method toDate\n * @param {Number|String} val 日期字符串或整型数值\n * @return {Date} 日期对象\n * @static\n */\n ntils.toDate = function (val) {\n var self = this;\n if (self.isNumber(val))\n return new Date(val);\n else if (self.isString(val))\n return new Date(self.replace(self.replace(val, '-', '/'), 'T', ' '));\n else if (self.isDate(val))\n return val;\n else\n return null;\n };\n\n /**\n * 遍历一个对像或数组\n * @method each\n * @param {Object or Array} obj 要遍历的数组或对象\n * @param {Function} fn 处理函数\n * @return {void} 无返回值\n * @static\n */\n ntils.each = function (list, handler, scope) {\n if (this.isNull(list) || this.isNull(handler)) return;\n if (this.isArray(list)) {\n var listLength = list.length;\n for (var i = 0; i < listLength; i++) {\n var rs = handler.call(scope || list[i], i, list[i]);\n if (!this.isNull(rs)) return rs;\n }\n } else {\n for (var key in list) {\n var rs = handler.call(scope || list[key], key, list[key]);\n if (!this.isNull(rs)) return rs;\n }\n }\n };\n\n /**\n * 格式化日期\n * @method formatDate\n * @param {Date|String|Number} date 日期\n * @param {String} format 格式化字符串\n * @param {object} dict 反译字典\n * @return {String} 格式化结果\n * @static\n */\n ntils.formatDate = function (date, format, dict) {\n if (this.isNull(format) || this.isNull(date)) return date;\n date = this.toDate(date);\n dict = dict || {};\n var placeholder = {\n \"M+\": date.getMonth() + 1, //month\n \"d+\": date.getDate(), //day\n \"h+\": date.getHours(), //hour\n \"m+\": date.getMinutes(), //minute\n \"s+\": date.getSeconds(), //second\n \"w+\": date.getDay(), //week\n \"q+\": Math.floor((date.getMonth() + 3) / 3), //quarter\n \"S\": date.getMilliseconds() //millisecond\n }\n if (/(y+)/.test(format)) {\n format = format.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n }\n for (var key in placeholder) {\n if (new RegExp(\"(\" + key + \")\").test(format)) {\n var value = placeholder[key];\n value = dict[value] || value;\n format = format.replace(RegExp.$1, RegExp.$1.length == 1\n ? value : (\"00\" + value).substr((\"\" + value).length));\n }\n }\n return format;\n };\n\n /**\n * 拷贝对象\n * @method copy\n * @param {Object} src 源对象\n * @param {Object} dst 目标对象\n * @static\n */\n ntils.copy = function (src, dst, igonres) {\n dst = dst || (this.isArray(src) ? [] : {});\n this.each(src, function (key) {\n if (igonres && igonres.indexOf(key) > -1) return;\n delete dst[key];\n if (Object.getOwnPropertyDescriptor) {\n try {\n Object.defineProperty(dst, key, Object.getOwnPropertyDescriptor(src, key));\n } catch (ex) {\n dst[key] = src[key];\n }\n } else {\n dst[key] = src[key];\n }\n })\n return dst;\n };\n\n /**\n * 深度克隆对象\n * @method clone\n * @param {Object} src 源对象\n * @return {Object} 新对象\n * @static\n */\n ntils.clone = function (src, igonres) {\n if (this.isNull(src) ||\n this.isString(src) ||\n this.isNumber(src) ||\n this.isBoolean(src) ||\n this.isDate(src)) {\n return src;\n }\n var objClone = src;\n try {\n objClone = new src.constructor();\n } catch (ex) { }\n this.each(src, function (key, value) {\n if (objClone[key] != value && !this.contains(igonres, key)) {\n if (this.isObject(value)) {\n objClone[key] = this.clone(value, igonres);\n } else {\n objClone[key] = value;\n }\n }\n }, this);\n ['toString', 'valueOf'].forEach(function (key) {\n if (this.contains(igonres, key)) return;\n this.defineFreezeProp(objClone, key, src[key]);\n }, this);\n return objClone;\n };\n\n /**\n * 合并对象\n * @method mix\n * @return 合并后的对象\n * @param {Object} dst 目标对象\n * @param {Object} src 源对象\n * @param {Array} igonres 忽略的属性名,\n * @param {Number} mode 模式\n */\n ntils.mix = function (dst, src, igonres, mode) {\n //根据模式来判断,默认是Obj to Obj的 \n if (mode) {\n switch (mode) {\n case 1: // proto to proto \n return ntils.mix(dst.prototype, src.prototype, igonres, 0);\n case 2: // object to object and proto to proto \n ntils.mix(dst.prototype, src.prototype, igonres, 0);\n break; // pass through \n case 3: // proto to static \n return ntils.mix(dst, src.prototype, igonres, 0);\n case 4: // static to proto \n return ntils.mix(dst.prototype, src, igonres, 0);\n default: // object to object is what happens below \n }\n }\n //---\n src = src || {};\n dst = dst || (this.isArray(src) ? [] : {});\n this.keys(src).forEach(function (key) {\n if (this.contains(igonres, key)) return;\n if (this.isObject(src[key]) &&\n (src[key].constructor == Object ||\n src[key].constructor == Array ||\n src[key].constructor == null)) {\n dst[key] = ntils.mix(dst[key], src[key], igonres, 0);\n } else {\n dst[key] = src[key];\n }\n }, this);\n return dst;\n };\n\n /**\n * 定义不可遍历的属性\n **/\n ntils.defineFreezeProp = function (obj, name, value) {\n try {\n Object.defineProperty(obj, name, {\n value: value,\n enumerable: false,\n configurable: true, //能不能重写定义\n writable: false //能不能用「赋值」运算更改\n });\n } catch (err) {\n obj[name] = value;\n }\n };\n\n /**\n * 获取所有 key \n */\n ntils.keys = function (obj) {\n if (Object.keys) return Object.keys(obj);\n var keys = [];\n this.each(obj, function (key) {\n keys.push(key);\n });\n return keys;\n };\n\n /**\n * 创建一个对象\n */\n ntils.create = function (proto, props) {\n if (Object.create) return Object.create(proto, props);\n var Cotr = function () { };\n Cotr.prototype = proto;\n var obj = new Cotr();\n if (props) this.copy(props, obj);\n return obj;\n };\n\n /**\n * 设置 proto\n * 在不支持 setPrototypeOf 也不支持 __proto__ 的浏览器\n * 中,会采用 copy 方式\n */\n ntils.setPrototypeOf = function (obj, proto) {\n if (Object.setPrototypeOf) {\n return Object.setPrototypeOf(obj, proto || this.create(null));\n } else {\n if (!('__proto__' in Object)) this.copy(proto, obj);\n obj.__proto__ = proto;\n }\n };\n\n /**\n * 获取 proto\n */\n ntils.getPrototypeOf = function (obj) {\n if (obj.__proto__) return obj.__proto__;\n if (Object.getPrototypeOf) return Object.getPrototypeOf(obj);\n if (obj.constructor) return obj.constructor.prototype;\n };\n\n /**\n * 是否深度相等\n */\n ntils.deepEqual = function (a, b) {\n if (a === b) return true;\n if (!this.isObject(a) || !this.isObject(b)) return false;\n var aKeys = this.keys(a);\n var bKeys = this.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n var allKeys = aKeys.concat(bKeys);\n var checkedMap = this.create(null);\n var result = true;\n this.each(allKeys, function (i, key) {\n if (checkedMap[key]) return;\n if (!this.deepEqual(a[key], b[key])) result = false;\n checkedMap[key] = true;\n }, this);\n return result;\n };\n\n /**\n * 从一个数值循环到别一个数\n * @param {number} fromNum 开始数值\n * @param {Number} toNum 结束数值\n * @param {Number} step 步长值\n * @param {function} handler 执行函数\n * @returns {void} 无返回\n */\n ntils.fromTo = function (fromNum, toNum, step, handler) {\n if (!handler) handler = [step, step = handler][0];\n step = Math.abs(step || 1);\n if (fromNum < toNum) {\n for (var i = fromNum; i <= toNum; i += step) handler(i);\n } else {\n for (var i = fromNum; i >= toNum; i -= step) handler(i);\n }\n };\n\n /**\n * 生成一个Guid\n * @method newGuid\n * @return {String} GUID字符串\n * @static\n */\n ntils.newGuid = function () {\n var S4 = function () {\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n };\n return (S4() + S4() + \"-\" + S4() + \"-\" + S4() + \"-\" + S4() + \"-\" + S4() + S4() + S4());\n };\n\n /**\n * 对象变换\n **/\n ntils.map = function (list, fn) {\n var buffer = this.isArray(list) ? [] : {};\n this.each(list, function (name, value) {\n buffer[name] = fn(name, value);\n });\n return buffer;\n };\n\n /**\n * 通过路径设置属性值\n */\n ntils.setByPath = function (obj, path, value) {\n if (this.isNull(obj) || this.isNull(path) || path === '') {\n return;\n }\n if (!this.isArray(path)) {\n path = path.replace(/\\[/, '.').replace(/\\]/, '.').split('.');\n }\n this.each(path, function (index, name) {\n if (this.isNull(name) || name.length < 1) return;\n if (index === path.length - 1) {\n obj[name] = value;\n } else {\n obj[name] = obj[name] || {};\n obj = obj[name];\n }\n }, this);\n };\n\n /**\n * 通过路径获取属性值\n */\n ntils.getByPath = function (obj, path) {\n if (this.isNull(obj) || this.isNull(path) || path === '') {\n return obj;\n }\n if (!this.isArray(path)) {\n path = path.replace(/\\[/, '.').replace(/\\]/, '.').split('.');\n }\n this.each(path, function (index, name) {\n if (this.isNull(name) || name.length < 1) return;\n if (!this.isNull(obj)) obj = obj[name];\n }, this);\n return obj;\n };\n\n /**\n * 数组去重\n **/\n ntils.unique = function (array) {\n if (this.isNull(array)) return array;\n var newArray = [];\n this.each(array, function (i, value) {\n if (newArray.indexOf(value) > -1) return;\n newArray.push(value);\n });\n return newArray;\n };\n\n /**\n * 解析 function 的参数列表\n **/\n ntils.getFunctionArgumentNames = function (fn) {\n if (!fn) return [];\n var src = fn.toString();\n var parts = src.split(')')[0].split('=>')[0].split('(');\n return (parts[1] || parts[0]).split(',').map(function (name) {\n return name.trim();\n }).filter(function (name) {\n return name != 'function';\n });\n };\n\n /**\n * 缩短字符串\n */\n ntils.short = function (str, maxLength) {\n if (!str) return str;\n maxLength = maxLength || 40;\n var strLength = str.length;\n var trimLength = maxLength / 2;\n return strLength > maxLength ? str.substr(0, trimLength) + '...' + str.substr(strLength - trimLength) : str;\n };\n\n /**\n * 首字母大写\n */\n ntils.firstUpper = function (str) {\n if (this.isNull(str)) return;\n str[0] = str[0].toLowerCase();\n return str;\n };\n\n /**\n * 编码正则字符串\n */\n ntils.escapeRegExp = function (str) {\n return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n };\n\n /**\n * 解析字符串为 dom \n * @param {string} str 字符串\n * @returns {HTMLNode} 解析后的 DOM \n */\n ntils.parseDom = function (str) {\n this._PDD_ = this._PDD_ || document.createElement('div');\n this._PDD_.innerHTML = ntils.trim(str);\n var firstNode = this._PDD_.childNodes[0];\n //先 clone 一份再通过 innerHTML 清空\n //否则 IE9 下,清空时会导出返回的 DOM 没有子结点\n if (firstNode) firstNode = firstNode.cloneNode(true);\n this._PDD_.innerHTML = '';\n return firstNode;\n };\n\n})((typeof exports === 'undefined') ? (window.ntils = {}) : exports);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.2.0.15@ntils/index.js\n// module id = 46\n// module chunks = 0","const Class = require('cify').Class;\nconst utils = require('ntils');\n\nconst Stack = new Class({\n constructor(item) {\n this.init(item);\n },\n init(item) {\n this.undoList = [item || {\n value: null\n }];\n this.redoList = [];\n },\n push(item) {\n if (this.last() === item) return;\n this.undoList.push(item);\n },\n last() {\n return this.undoList[this.undoList.length - 1];\n },\n undo() {\n if (this.undoList.length > 1) {\n let item = this.undoList.pop();\n if (utils.isNull(item) || utils.isNull(item.value)) return;\n this.redoList.push(item);\n }\n return this.last();\n },\n redo() {\n let item = this.redoList.pop();\n if (utils.isNull(item) || utils.isNull(item.value)) return;\n this.undoList.push(item);\n return item;\n }\n});\n\nmodule.exports = Stack;\n\n\n// WEBPACK FOOTER //\n// ./src/editor/stack.js","const utils = require('ntils');\n\nfunction ClassFactory(options) {\n //处理 options\n options = options || utils.create(null);\n options.$name = options.$name || 'Class';\n options.$extends = options.$extends || ClassFactory;\n options.$static = options.$static || utils.create(null);\n //处理父类 prototype\n var superPrototype = utils.isFunction(options.$extends) ?\n options.$extends.prototype : options.$extends;\n //定义新类\n var Class = function () {\n //处理 super\n if (!this.$super) {\n utils.defineFreezeProp(this, '$super', function () {\n if (this._super_called_) return this._super_ret_;\n this._super_called_ = true;\n if (utils.isFunction(options.$extends)) {\n this._super_ret_ = options.$extends.apply(this, arguments);\n //这几行确保可继承于数组\n if (this._super_ret_) {\n var proto = utils.getPrototypeOf(this);\n utils.setPrototypeOf(proto, this._super_ret_);\n }\n } else {\n this._super_ret_ = options.$extends;\n }\n return this._super_ret_;\n });\n for (var name in superPrototype) {\n var value = superPrototype[name];\n if (utils.isFunction(value)) {\n this.$super[name] = value.bind(this);\n } else {\n this.$super[name] = value;\n }\n }\n }\n //调用构造\n if (utils.isFunction(options.constructor) &&\n options.constructor !== Object) {\n return options.constructor.apply(this, arguments);\n } else {\n //如果没有实现 constructor 则调用父类构造\n this.$super.apply(this, arguments);\n }\n };\n //处理 prototype\n Class.prototype = utils.create(superPrototype);\n utils.copy(options, Class.prototype);\n utils.defineFreezeProp(Class.prototype, '$class', Class);\n //处理静态成员\n utils.copy(options.$static, Class);\n if (utils.isFunction(options.$extends)) {\n utils.setPrototypeOf(Class, options.$extends);\n }\n if (!options.$extends.$extend) {\n utils.copy(ClassFactory, Class);\n }\n utils.defineFreezeProp(Class, '$super', options.$extends);\n //--\n return Class;\n}\n\n//定义扩展方法\nClassFactory.$extend = function (options) {\n options.$extends = this;\n return new ClassFactory(options);\n};\n\nClassFactory.Class = ClassFactory;\nmodule.exports = ClassFactory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/cify/index.js\n// module id = 48\n// module chunks = 0","module.exports = [{\n name: 'undo',\n key: '{cmd}+z',\n handler() {\n this.editor.undo();\n }\n}, {\n name: 'redo',\n key: '{cmd}+shift+z',\n handler() {\n this.editor.redo();\n }\n}, {\n name: 'h2',\n key: 'shift+alt+2',\n handler() {\n this.editor.wrapSelectText('## ');\n }\n}, {\n name: 'h3',\n key: 'shift+alt+3',\n handler() {\n this.editor.wrapSelectText('### ');\n }\n}, {\n name: 'h4',\n key: 'shift+alt+4',\n handler() {\n this.editor.wrapSelectText('#### ');\n }\n}, {\n name: 'h5',\n key: 'shift+alt+5',\n handler() {\n this.editor.wrapSelectText('##### ');\n }\n}];\n\n\n// WEBPACK FOOTER //\n// ./src/editor/commands.js","module.exports = \"<div class=\\\"editor\\\">\\n <div class=\\\"backdrop\\\" m:id=\\\"marks\\\">\\n <div class=\\\"inner\\\" m:html=\\\"applyMarks(value)\\\"></div>\\n </div>\\n <textarea class=\\\"textarea\\\" m:id=\\\"textarea\\\" m:model=\\\"value\\\" m:on:paste=\\\"onPaste\\\" m:on:dragover=\\\"onDragover\\\" m:on:drop=\\\"onDrop\\\"\\n m:on:scroll=\\\"onScroll()\\\" m:on:input=\\\"onInput\\\" m:on:compositionStart=\\\"onCompositionStart\\\" m:on:compositionEnd=\\\"onCompositionEnd\\\"></textarea>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/editor/index.html\n// module id = 51\n// module chunks = 0","const mokit = require('mokit');\n\nrequire('./index.less');\n\nconst Viewer = new mokit.Component({\n template: require('./index.html'),\n\n data() {\n return {\n html: '',\n alert: '预览区域'\n };\n },\n\n props: {\n mditor: null,\n value: {\n get() {\n return this._value;\n },\n set(value) {\n this._value = value;\n this.mditor.parser.parse(this._value, (err, result) => {\n this.html = result || err;\n });\n }\n }\n },\n\n onClick(event) {\n event.preventDefault();\n let tag = event.target;\n if (tag.tagName == 'A') {\n let href = tag.getAttribute('href');\n if (href) window.open(href, '_blank');\n }\n }\n\n});\n\nmodule.exports = Viewer;\n\n\n// WEBPACK FOOTER //\n// ./src/viewer/index.js","module.exports = \"<div class=\\\"viewer\\\" m:on:click=\\\"onClick\\\">\\n <div m:show=\\\"html\\\" class=\\\"markdown-body\\\" m:html=\\\"html\\\"></div>\\n <div m:show=\\\"!html\\\" class=\\\"alert\\\" m:html=\\\"alert\\\"></div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/viewer/index.html\n// module id = 54\n// module chunks = 0","const mokit = require('mokit');\nconst utils = require('ntils');\n\nrequire('./index.less');\n\nconst CHECK_REGEXP = /^\\/[\\s\\S]+\\/(i|g|m)*$/;\n\nconst Finder = new mokit.Component({\n template: require('./index.html'),\n props: {\n mditor: null,\n active: false,\n findWord: '',\n replaceWord: ''\n },\n onReady() {\n this.mditor.removeCommand('find');\n this.mditor.addCommand({\n name: 'find',\n key: '{cmd}+f',\n owner: this.mditor.$element,\n handler: this.show.bind(this, null)\n });\n this.mditor.removeCommand('cancel-find');\n this.mditor.addCommand({\n name: 'cancel-find',\n key: 'esc',\n owner: this.mditor.$element,\n handler: this.hide.bind(this)\n });\n },\n hide() {\n this.findWord = '';\n this.replaceWord = '';\n this.mditor.editor.markExp = null;\n this.active = false;\n },\n show(text) {\n this.active = true;\n this.findWord = text || this.mditor.editor.getSelectText();\n if (this.active) {\n setTimeout(() => {\n this.findBox.focus();\n }, 200);\n }\n this.mditor.editor.syncScroll();\n },\n watch: {\n findWord() {\n if (!this.mditor || !this.mditor.editor) return;\n if (!this.findWord) {\n this.mditor.editor.markExp = null;\n } else {\n this.mditor.editor.markExp = this.parseRegexp(this.findWord);\n }\n setTimeout(() => {\n this.mditor.editor.activeMark(0);\n }, 100);\n }\n },\n parseRegexp(text, forceStr) {\n if (!forceStr && CHECK_REGEXP.test(text)) {\n try {\n return (new Function(`return ${text}`))();\n } catch (err) {\n return this.parseRegexp(text, true);\n }\n } else {\n return new RegExp(utils.escapeRegExp(text), 'gm');\n }\n },\n find() {\n this.mditor.editor.activeMark();\n },\n replace() {\n this.mditor.value = this.mditor.value.replace(\n this.mditor.editor.markExp,\n this.replaceWord || ''\n );\n },\n onFindEnter(event) {\n if (event.keyCode != 13) return;\n event.preventDefault();\n this.find();\n },\n onReplaceEnter(event) {\n if (event.keyCode != 13) return;\n event.preventDefault();\n this.replace();\n },\n onCompositionEnd(event) {\n event.target.blur();\n event.target.focus();\n },\n});\n\nmodule.exports = Finder;\n\n\n// WEBPACK FOOTER //\n// ./src/finder/index.js","module.exports = \"<div class=\\\"finder {{active?'active':''}}\\\">\\n <div>\\n <input m:id=\\\"findBox\\\" m:model=\\\"findWord\\\" m:on:keydown=\\\"onFindEnter\\\" m:on:compositionend=\\\"onCompositionEnd\\\" type=\\\"text\\\" placeholder=\\\"回车查找,esc 关闭\\\">\\n <i class=\\\"fa fa-search\\\" aria-hidden=\\\"true\\\" tabindex=\\\"-1\\\" m:on:click=\\\"find()\\\"></i>\\n </div>\\n <div>\\n <input m:id=\\\"replaceBox\\\" m:model=\\\"replaceWord\\\" m:on:keydown=\\\"onReplaceEnter\\\" m:on:compositionend=\\\"onCompositionEnd\\\" type=\\\"text\\\"\\n placeholder=\\\"回车替换,esc 关闭\\\">\\n <i class=\\\"fa fa-exchange\\\" aria-hidden=\\\"true\\\" tabindex=\\\"-1\\\" m:on:click=\\\"replace()\\\"></i>\\n </div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/finder/index.html\n// module id = 57\n// module chunks = 0","const shortcuts = require('shortcut-key');\nconst utils = require('ntils');\n\nshortcuts.filter = event => {\n return !!event.target;\n};\n\nconst Shortcut = module.exports = function (mditor) {\n utils.defineFreezeProp(this, 'mditor', mditor);\n};\n\nShortcut.prototype._inRegion = function (target, owner) {\n if (!target) return false;\n owner = owner || this.mditor.editor.$element;\n if (utils.isFunction(owner)) owner = owner(this.mditor);\n return (target === owner) || this._inRegion(target.parentNode, owner);\n};\n\nShortcut.prototype.bind = function (key, cmd, allowDefault, owner) {\n let mditor = this.mditor;\n //检查参数\n if (!key || !cmd) return;\n key = key.replace('{cmd}', mditor.CMD);\n shortcuts(key, event => {\n if (!this._inRegion(event.target, owner)) return;\n //禁用浏览器默认快捷键\n if (!allowDefault) {\n event.preventDefault();\n }\n if (cmd instanceof Function) {\n cmd.call(mditor, event);\n } else {\n mditor.execCommand(cmd, event);\n }\n setTimeout(() => {\n mditor.focus();\n }, 0);\n });\n};\n\nShortcut.prototype.unbind = function (key) {\n shortcuts.unbind(key);\n};\n\n\n// WEBPACK FOOTER //\n// ./src/client/shortcut.js","(function (global) {\n var k,\n _handlers = {},\n _mods = {\n 16: false,\n 18: false,\n 17: false,\n 91: false\n },\n _scope = 'all',\n // modifier keys\n _MODIFIERS = {\n '⇧': 16,\n shift: 16,\n '⌥': 18,\n alt: 18,\n option: 18,\n '⌃': 17,\n ctrl: 17,\n control: 17,\n '⌘': 91,\n command: 91\n },\n // special keys\n _MAP = {\n backspace: 8,\n tab: 9,\n clear: 12,\n enter: 13,\n 'return': 13,\n esc: 27,\n escape: 27,\n space: 32,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n del: 46,\n 'delete': 46,\n home: 36,\n end: 35,\n pageup: 33,\n pagedown: 34,\n ',': 188,\n '.': 190,\n '/': 191,\n '`': 192,\n '-': 189,\n '=': 187,\n ';': 186,\n '\\'': 222,\n '[': 219,\n ']': 221,\n '\\\\': 220\n },\n code = function (x) {\n return _MAP[x] || x.toUpperCase().charCodeAt(0);\n },\n _downKeys = [];\n\n for (k = 1; k < 20; k++) _MAP['f' + k] = 111 + k;\n\n // IE doesn't support Array#indexOf, so have a simple replacement\n function index(array, item) {\n var i = array.length;\n while (i--)\n if (array[i] === item) return i;\n return -1;\n }\n\n // for comparing mods before unassignment\n function compareArray(a1, a2) {\n if (a1.length != a2.length) return false;\n for (var i = 0; i < a1.length; i++) {\n if (a1[i] !== a2[i]) return false;\n }\n return true;\n }\n\n var modifierMap = {\n 16: 'shiftKey',\n 18: 'altKey',\n 17: 'ctrlKey',\n 91: 'metaKey'\n };\n\n function updateModifierKey(event) {\n for (k in _mods) _mods[k] = event[modifierMap[k]];\n };\n\n // handle keydown event\n function dispatch(event) {\n var key, handler, k, i, modifiersMatch, scope;\n key = event.keyCode;\n\n if (index(_downKeys, key) == -1) {\n _downKeys.push(key);\n }\n\n // if a modifier key, set the key.<modifierkeyname> property to true and return\n if (key == 93 || key == 224) key = 91; // right command on webkit, command on Gecko\n if (key in _mods) {\n _mods[key] = true;\n // 'assignKey' from inside this closure is exported to window.key\n for (k in _MODIFIERS)\n if (_MODIFIERS[k] == key) assignKey[k] = true;\n return;\n }\n updateModifierKey(event);\n\n // see if we need to ignore the keypress (filter() can can be overridden)\n // by default ignore key presses if a select, textarea, or input is focused\n if (!assignKey.filter.call(this, event)) return;\n\n // abort if no potentially matching shortcuts found\n if (!(key in _handlers)) return;\n\n scope = getScope();\n\n // for each potential shortcut\n for (i = 0; i < _handlers[key].length; i++) {\n handler = _handlers[key][i];\n\n // see if it's in the current scope\n if (handler.scope == scope || handler.scope == 'all') {\n // check if modifiers match if any\n modifiersMatch = handler.mods.length > 0;\n for (k in _mods)\n if ((!_mods[k] && index(handler.mods, +k) > -1) ||\n (_mods[k] && index(handler.mods, +k) == -1)) modifiersMatch = false;\n // call the handler and stop the event if neccessary\n if ((handler.mods.length == 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch) {\n if (handler.method(event, handler) === false) {\n if (event.preventDefault) event.preventDefault();\n else event.returnValue = false;\n if (event.stopPropagation) event.stopPropagation();\n if (event.cancelBubble) event.cancelBubble = true;\n }\n }\n }\n }\n };\n\n // unset modifier keys on keyup\n function clearModifier(event) {\n var key = event.keyCode,\n k,\n i = index(_downKeys, key);\n\n // remove key from _downKeys\n if (i >= 0) {\n _downKeys.splice(i, 1);\n }\n\n if (key == 93 || key == 224) key = 91;\n if (key in _mods) {\n _mods[key] = false;\n for (k in _MODIFIERS)\n if (_MODIFIERS[k] == key) assignKey[k] = false;\n }\n };\n\n function resetModifiers() {\n for (k in _mods) _mods[k] = false;\n for (k in _MODIFIERS) assignKey[k] = false;\n };\n\n // parse and assign shortcut\n function assignKey(key, scope, method) {\n var keys, mods;\n keys = getKeys(key);\n if (method === undefined) {\n method = scope;\n scope = 'all';\n }\n\n // for each shortcut\n for (var i = 0; i < keys.length; i++) {\n // set modifier keys if any\n mods = [];\n key = keys[i].split('+');\n if (key.length > 1) {\n mods = getMods(key);\n key = [key[key.length - 1]];\n }\n // convert to keycode and...\n key = key[0]\n key = code(key);\n // ...store handler\n if (!(key in _handlers)) _handlers[key] = [];\n _handlers[key].push({\n shortcut: keys[i],\n scope: scope,\n method: method,\n key: keys[i],\n mods: mods\n });\n }\n };\n\n // unbind all handlers for given key in current scope\n function unbindKey(key, scope) {\n var multipleKeys, keys,\n mods = [],\n i, j, obj;\n\n multipleKeys = getKeys(key);\n\n for (j = 0; j < multipleKeys.length; j++) {\n keys = multipleKeys[j].split('+');\n\n if (keys.length > 1) {\n mods = getMods(keys);\n key = keys[keys.length - 1];\n }\n\n key = code(key);\n\n if (scope === undefined) {\n scope = getScope();\n }\n if (!_handlers[key]) {\n return;\n }\n for (i in _handlers[key]) {\n obj = _handlers[key][i];\n // only clear handlers if correct scope and mods match\n if (obj.scope === scope && compareArray(obj.mods, mods)) {\n _handlers[key][i] = {};\n }\n }\n }\n };\n\n // Returns true if the key with code 'keyCode' is currently down\n // Converts strings into key codes.\n function isPressed(keyCode) {\n if (typeof (keyCode) == 'string') {\n keyCode = code(keyCode);\n }\n return index(_downKeys, keyCode) != -1;\n }\n\n function getPressedKeyCodes() {\n return _downKeys.slice(0);\n }\n\n function filter(event) {\n var tagName = (event.target || event.srcElement).tagName;\n // ignore keypressed in any elements that support keyboard data input\n return !(tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA');\n }\n\n // initialize key.<modifier> to false\n for (k in _MODIFIERS) assignKey[k] = false;\n\n // set current scope (default 'all')\n function setScope(scope) {\n _scope = scope || 'all'\n };\n\n function getScope() {\n return _scope || 'all'\n };\n\n // delete all handlers for a given scope\n function deleteScope(scope) {\n var key, handlers, i;\n\n for (key in _handlers) {\n handlers = _handlers[key];\n for (i = 0; i < handlers.length;) {\n if (handlers[i].scope === scope) handlers.splice(i, 1);\n else i++;\n }\n }\n };\n\n // abstract key logic for assign and unassign\n function getKeys(key) {\n var keys;\n key = key.replace(/\\s/g, '');\n keys = key.split(',');\n if ((keys[keys.length - 1]) == '') {\n keys[keys.length - 2] += ',';\n }\n return keys;\n }\n\n // abstract mods logic for assign and unassign\n function getMods(key) {\n var mods = key.slice(0, key.length - 1);\n for (var mi = 0; mi < mods.length; mi++)\n mods[mi] = _MODIFIERS[mods[mi]];\n return mods;\n }\n\n // cross-browser events\n function addEvent(object, event, method) {\n if (object.addEventListener)\n object.addEventListener(event, method, false);\n else if (object.attachEvent)\n object.attachEvent('on' + event, function () {\n method(window.event)\n });\n };\n\n // set the handlers globally on document\n addEvent(document, 'keydown', function (event) {\n dispatch(event)\n }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48\n addEvent(document, 'keyup', clearModifier);\n\n // reset modifiers to false whenever the window is (re)focused.\n addEvent(window, 'focus', resetModifiers);\n\n // store previously defined key\n var previousKey = global.key;\n\n // restore previously defined key and return reference to our key object\n function noConflict() {\n var k = global.key;\n global.key = previousKey;\n return k;\n }\n\n // set window.key and window.key.set/get/deleteScope, and the default filter\n global.key = assignKey;\n global.key.setScope = setScope;\n global.key.getScope = getScope;\n global.key.deleteScope = deleteScope;\n global.key.filter = filter;\n global.key.isPressed = isPressed;\n global.key.getPressedKeyCodes = getPressedKeyCodes;\n global.key.noConflict = noConflict;\n global.key.unbind = unbindKey;\n\n if (typeof module !== 'undefined') module.exports = key;\n\n})(window);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.0.0@shortcut-key/index.js\n// module id = 59\n// module chunks = 0","const marked = require('marked');\nvar Prism = require('prismjs');\n\n//language \nrequire('prismjs/components/prism-java');\nrequire('prismjs/components/prism-csharp');\nrequire('prismjs/components/prism-php');\nrequire('prismjs/components/prism-python');\nrequire('prismjs/components/prism-json');\nrequire('prismjs/components/prism-jade');\nrequire('prismjs/components/prism-yaml.min');\nrequire('prismjs/components/prism-perl');\nrequire('prismjs/components/prism-go');\nrequire('prismjs/components/prism-bash');\nrequire('prismjs/components/prism-fsharp');\nrequire('prismjs/components/prism-typescript');\nrequire('prismjs/components/prism-stylus');\nrequire('prismjs/components/prism-less');\nrequire('prismjs/components/prism-sass');\nrequire('prismjs/components/prism-handlebars');\nrequire('prismjs/components/prism-applescript');\nrequire('prismjs/components/prism-actionscript');\nrequire('prismjs/components/prism-aspnet');\nrequire('prismjs/components/prism-basic');\nrequire('prismjs/components/prism-c');\nrequire('prismjs/components/prism-pascal');\nrequire('prismjs/components/prism-vim');\nrequire('prismjs/components/prism-swift');\nrequire('prismjs/components/prism-objectivec');\nrequire('prismjs/components/prism-sql');\nrequire('prismjs/components/prism-scheme');\nrequire('prismjs/components/prism-ruby');\nrequire('prismjs/components/prism-smarty');\nrequire('prismjs/components/prism-smalltalk');\nrequire('prismjs/components/prism-rust');\nrequire('prismjs/components/prism-r');\nrequire('prismjs/components/prism-d');\nrequire('prismjs/components/prism-dart');\nrequire('prismjs/components/prism-coffeescript');\nrequire('prismjs/components/prism-batch');\nrequire('prismjs/components/prism-cpp');\nrequire('prismjs/components/prism-lua');\nrequire('prismjs/components/prism-livescript');\nrequire('prismjs/components/prism-latex');\nrequire('prismjs/components/prism-groovy');\nrequire('prismjs/components/prism-graphql');\nrequire('prismjs/components/prism-nginx');\nrequire('prismjs/components/prism-erlang');\nrequire('prismjs/components/prism-powershell');\nrequire('prismjs/components/prism-makefile');\nrequire('prismjs/components/prism-markdown');\n\n//alias\nPrism.languages.js = Prism.languages.javascript;\nPrism.languages['c#'] = Prism.languages.csharp;\nPrism.languages['f#'] = Prism.languages.fsharp;\nPrism.languages.sh = Prism.languages.bash;\nPrism.languages.md = Prism.languages.markdown;\nPrism.languages.py = Prism.languages.python;\nPrism.languages.yml = Prism.languages.yaml;\nPrism.languages.rb = Prism.languages.ruby;\n\n/**\n * 定义解析类型\n **/\nconst Parser = function (options) {\n\toptions = options || {};\n\tthis.options = options;\n};\n\nParser.highlights = {};\nParser.marked = marked;\nParser.Prism = Prism;\n\n//使标题解析 # 号可以无空格\nmarked.Lexer.rules.gfm.heading = marked.Lexer.rules.heading;\nmarked.Lexer.rules.tables.heading = marked.Lexer.rules.heading;\n\nlet renderer = new marked.Renderer();\nmarked.setOptions({\n\trenderer: renderer,\n\tgfm: true,\n\ttables: true,\n\tbreaks: true, //可行尾不加两空格直接换行\n\tpedantic: false,\n\tsanitize: false,\n\tsmartLists: true,\n\tsmartypants: false,\n\tmangle: false,\n\thighlight: function (code, lang, callback) {\n\t\tif (Parser.highlights[lang]) {\n\t\t\tlet result = Parser.highlights[lang].parse(code, lang, callback);\n\t\t\tif (!callback) return result;\n\t\t} else if (Prism.languages[lang]) {\n\t\t\tlet result = Prism.highlight(code, Prism.languages[lang]);\n\t\t\tif (callback) callback(null, result);\n\t\t\telse return result;\n\t\t} else {\n\t\t\tif (callback) callback(null, code);\n\t\t\telse return code;\n\t\t}\n\t}\n});\n\n/**\n * 解析方法\n **/\nParser.prototype.parse = function (mdText, callback) {\n\treturn marked(mdText, callback);\n};\n\nmodule.exports = Parser;\n\n\n// WEBPACK FOOTER //\n// ./src/common/parser.js","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/chjj/marked\n */\n\n;(function() {\n\n/**\n * Block-Level Grammar\n */\n\nvar block = {\n newline: /^\\n+/,\n code: /^( {4}[^\\n]+\\n*)+/,\n fences: noop,\n hr: /^( *[-*_]){3,} *(?:\\n+|$)/,\n heading: /^ *(#{1,6}) *([^\\n]+?) *#* *(?:\\n+|$)/,\n nptable: noop,\n lheading: /^([^\\n]+)\\n *(=|-){2,} *(?:\\n+|$)/,\n blockquote: /^( *>[^\\n]+(\\n(?!def)[^\\n]+)*\\n*)+/,\n list: /^( *)(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,\n html: /^ *(?:comment *(?:\\n|\\s*$)|closed *(?:\\n{2,}|\\s*$)|closing *(?:\\n{2,}|\\s*$))/,\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +[\"(]([^\\n]+)[\")])? *(?:\\n+|$)/,\n table: noop,\n paragraph: /^((?:[^\\n]+\\n?(?!hr|heading|lheading|blockquote|tag|def))+)\\n*/,\n text: /^[^\\n]+/\n};\n\nblock.bullet = /(?:[*+-]|\\d+\\.)/;\nblock.item = /^( *)(bull) [^\\n]*(?:\\n(?!\\1bull )[^\\n]*)*/;\nblock.item = replace(block.item, 'gm')\n (/bull/g, block.bullet)\n ();\n\nblock.list = replace(block.list)\n (/bull/g, block.bullet)\n ('hr', '\\\\n+(?=\\\\1?(?:[-*_] *){3,}(?:\\\\n+|$))')\n ('def', '\\\\n+(?=' + block.def.source + ')')\n ();\n\nblock.blockquote = replace(block.blockquote)\n ('def', block.def)\n ();\n\nblock._tag = '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'\n + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'\n + '|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:/|[^\\\\w\\\\s@]*@)\\\\b';\n\nblock.html = replace(block.html)\n ('comment', /<!--[\\s\\S]*?-->/)\n ('closed', /<(tag)[\\s\\S]+?<\\/\\1>/)\n ('closing', /<tag(?:\"[^\"]*\"|'[^']*'|[^'\">])*?>/)\n (/tag/g, block._tag)\n ();\n\nblock.paragraph = replace(block.paragraph)\n ('hr', block.hr)\n ('heading', block.heading)\n ('lheading', block.lheading)\n ('blockquote', block.blockquote)\n ('tag', '<' + block._tag)\n ('def', block.def)\n ();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge({}, block.normal, {\n fences: /^ *(`{3,}|~{3,})[ \\.]*(\\S+)? *\\n([\\s\\S]*?)\\s*\\1 *(?:\\n+|$)/,\n paragraph: /^/,\n heading: /^ *(#{1,6}) +([^\\n]+?) *#* *(?:\\n+|$)/\n});\n\nblock.gfm.paragraph = replace(block.paragraph)\n ('(?!', '(?!'\n + block.gfm.fences.source.replace('\\\\1', '\\\\2') + '|'\n + block.list.source.replace('\\\\1', '\\\\3') + '|')\n ();\n\n/**\n * GFM + Tables Block Grammar\n */\n\nblock.tables = merge({}, block.gfm, {\n nptable: /^ *(\\S.*\\|.*)\\n *([-:]+ *\\|[-| :]*)\\n((?:.*\\|.*(?:\\n|$))*)\\n*/,\n table: /^ *\\|(.+)\\n *\\|( *[-:]+[-| :]*)\\n((?: *\\|.*(?:\\n|$))*)\\n*/\n});\n\n/**\n * Block Lexer\n */\n\nfunction Lexer(options) {\n this.tokens = [];\n this.tokens.links = {};\n this.options = options || marked.defaults;\n this.rules = block.normal;\n\n if (this.options.gfm) {\n if (this.options.tables) {\n this.rules = block.tables;\n } else {\n this.rules = block.gfm;\n }\n }\n}\n\n/**\n * Expose Block Rules\n */\n\nLexer.rules = block;\n\n/**\n * Static Lex Method\n */\n\nLexer.lex = function(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n};\n\n/**\n * Preprocessing\n */\n\nLexer.prototype.lex = function(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ')\n .replace(/\\u00a0/g, ' ')\n .replace(/\\u2424/g, '\\n');\n\n return this.token(src, true);\n};\n\n/**\n * Lexing\n */\n\nLexer.prototype.token = function(src, top, bq) {\n var src = src.replace(/^ +$/gm, '')\n , next\n , loose\n , cap\n , bull\n , b\n , item\n , space\n , i\n , l;\n\n while (src) {\n // newline\n if (cap = this.rules.newline.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[0].length > 1) {\n this.tokens.push({\n type: 'space'\n });\n }\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n cap = cap[0].replace(/^ {4}/gm, '');\n this.tokens.push({\n type: 'code',\n text: !this.options.pedantic\n ? cap.replace(/\\n+$/, '')\n : cap\n });\n continue;\n }\n\n // fences (gfm)\n if (cap = this.rules.fences.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'code',\n lang: cap[2],\n text: cap[3] || ''\n });\n continue;\n }\n\n // heading\n if (cap = this.rules.heading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[1].length,\n text: cap[2]\n });\n continue;\n }\n\n // table no leading pipe (gfm)\n if (top && (cap = this.rules.nptable.exec(src))) {\n src = src.substring(cap[0].length);\n\n item = {\n type: 'table',\n header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3].replace(/\\n$/, '').split('\\n')\n };\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = item.cells[i].split(/ *\\| */);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n\n // lheading\n if (cap = this.rules.lheading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[2] === '=' ? 1 : 2,\n text: cap[1]\n });\n continue;\n }\n\n // hr\n if (cap = this.rules.hr.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'hr'\n });\n continue;\n }\n\n // blockquote\n if (cap = this.rules.blockquote.exec(src)) {\n src = src.substring(cap[0].length);\n\n this.tokens.push({\n type: 'blockquote_start'\n });\n\n cap = cap[0].replace(/^ *> ?/gm, '');\n\n // Pass `top` to keep the current\n // \"toplevel\" state. This is exactly\n // how markdown.pl works.\n this.token(cap, top, true);\n\n this.tokens.push({\n type: 'blockquote_end'\n });\n\n continue;\n }\n\n // list\n if (cap = this.rules.list.exec(src)) {\n src = src.substring(cap[0].length);\n bull = cap[2];\n\n this.tokens.push({\n type: 'list_start',\n ordered: bull.length > 1\n });\n\n // Get each top-level item.\n cap = cap[0].match(this.rules.item);\n\n next = false;\n l = cap.length;\n i = 0;\n\n for (; i < l; i++) {\n item = cap[i];\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+\\.) +/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (this.options.smartLists && i !== l - 1) {\n b = block.bullet.exec(cap[i + 1])[0];\n if (bull !== b && !(bull.length > 1 && b.length > 1)) {\n src = cap.slice(i + 1).join('\\n') + src;\n i = l - 1;\n }\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\n if (i !== l - 1) {\n next = item.charAt(item.length - 1) === '\\n';\n if (!loose) loose = next;\n }\n\n this.tokens.push({\n type: loose\n ? 'loose_item_start'\n : 'list_item_start'\n });\n\n // Recurse.\n this.token(item, false, bq);\n\n this.tokens.push({\n type: 'list_item_end'\n });\n }\n\n this.tokens.push({\n type: 'list_end'\n });\n\n continue;\n }\n\n // html\n if (cap = this.rules.html.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: cap[0]\n });\n continue;\n }\n\n // def\n if ((!bq && top) && (cap = this.rules.def.exec(src))) {\n src = src.substring(cap[0].length);\n this.tokens.links[cap[1].toLowerCase()] = {\n href: cap[2],\n title: cap[3]\n };\n continue;\n }\n\n // table (gfm)\n if (top && (cap = this.rules.table.exec(src))) {\n src = src.substring(cap[0].length);\n\n item = {\n type: 'table',\n header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3].replace(/(?: *\\| *)?\\n$/, '').split('\\n')\n };\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = item.cells[i]\n .replace(/^ *\\| *| *\\| *$/g, '')\n .split(/ *\\| */);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n\n // top-level paragraph\n if (top && (cap = this.rules.paragraph.exec(src))) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'paragraph',\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n });\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n // Top-level should never reach here.\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'text',\n text: cap[0]\n });\n continue;\n }\n\n if (src) {\n throw new\n Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return this.tokens;\n};\n\n/**\n * Inline-Level Grammar\n */\n\nvar inline = {\n escape: /^\\\\([\\\\`*{}\\[\\]()#+\\-.!_>])/,\n autolink: /^<([^ >]+(@|:\\/)[^ >]+)>/,\n url: noop,\n tag: /^<!--[\\s\\S]*?-->|^<\\/?\\w+(?:\"[^\"]*\"|'[^']*'|[^'\">])*?>/,\n link: /^!?\\[(inside)\\]\\(href\\)/,\n reflink: /^!?\\[(inside)\\]\\s*\\[([^\\]]*)\\]/,\n nolink: /^!?\\[((?:\\[[^\\]]*\\]|[^\\[\\]])*)\\]/,\n strong: /^__([\\s\\S]+?)__(?!_)|^\\*\\*([\\s\\S]+?)\\*\\*(?!\\*)/,\n em: /^\\b_((?:[^_]|__)+?)_\\b|^\\*((?:\\*\\*|[\\s\\S])+?)\\*(?!\\*)/,\n code: /^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/,\n br: /^ {2,}\\n(?!\\s*$)/,\n del: noop,\n text: /^[\\s\\S]+?(?=[\\\\<!\\[_*`]| {2,}\\n|$)/\n};\n\ninline._inside = /(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*/;\ninline._href = /\\s*<?([\\s\\S]*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*/;\n\ninline.link = replace(inline.link)\n ('inside', inline._inside)\n ('href', inline._href)\n ();\n\ninline.reflink = replace(inline.reflink)\n ('inside', inline._inside)\n ();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge({}, inline.normal, {\n strong: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n em: /^_(?=\\S)([\\s\\S]*?\\S)_(?!_)|^\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)/\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge({}, inline.normal, {\n escape: replace(inline.escape)('])', '~|])')(),\n url: /^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/,\n del: /^~~(?=\\S)([\\s\\S]*?\\S)~~/,\n text: replace(inline.text)\n (']|', '~]|')\n ('|', '|https?://|')\n ()\n});\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge({}, inline.gfm, {\n br: replace(inline.br)('{2,}', '*')(),\n text: replace(inline.gfm.text)('{2,}', '*')()\n});\n\n/**\n * Inline Lexer & Compiler\n */\n\nfunction InlineLexer(links, options) {\n this.options = options || marked.defaults;\n this.links = links;\n this.rules = inline.normal;\n this.renderer = this.options.renderer || new Renderer;\n this.renderer.options = this.options;\n\n if (!this.links) {\n throw new\n Error('Tokens array requires a `links` property.');\n }\n\n if (this.options.gfm) {\n if (this.options.breaks) {\n this.rules = inline.breaks;\n } else {\n this.rules = inline.gfm;\n }\n } else if (this.options.pedantic) {\n this.rules = inline.pedantic;\n }\n}\n\n/**\n * Expose Inline Rules\n */\n\nInlineLexer.rules = inline;\n\n/**\n * Static Lexing/Compiling Method\n */\n\nInlineLexer.output = function(src, links, options) {\n var inline = new InlineLexer(links, options);\n return inline.output(src);\n};\n\n/**\n * Lexing/Compiling\n */\n\nInlineLexer.prototype.output = function(src) {\n var out = ''\n , link\n , text\n , href\n , cap;\n\n while (src) {\n // escape\n if (cap = this.rules.escape.exec(src)) {\n src = src.substring(cap[0].length);\n out += cap[1];\n continue;\n }\n\n // autolink\n if (cap = this.rules.autolink.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[2] === '@') {\n text = cap[1].charAt(6) === ':'\n ? this.mangle(cap[1].substring(7))\n : this.mangle(cap[1]);\n href = this.mangle('mailto:') + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // url (gfm)\n if (!this.inLink && (cap = this.rules.url.exec(src))) {\n src = src.substring(cap[0].length);\n text = escape(cap[1]);\n href = text;\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // tag\n if (cap = this.rules.tag.exec(src)) {\n if (!this.inLink && /^<a /i.test(cap[0])) {\n this.inLink = true;\n } else if (this.inLink && /^<\\/a>/i.test(cap[0])) {\n this.inLink = false;\n }\n src = src.substring(cap[0].length);\n out += this.options.sanitize\n ? this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape(cap[0])\n : cap[0]\n continue;\n }\n\n // link\n if (cap = this.rules.link.exec(src)) {\n src = src.substring(cap[0].length);\n this.inLink = true;\n out += this.outputLink(cap, {\n href: cap[2],\n title: cap[3]\n });\n this.inLink = false;\n continue;\n }\n\n // reflink, nolink\n if ((cap = this.rules.reflink.exec(src))\n || (cap = this.rules.nolink.exec(src))) {\n src = src.substring(cap[0].length);\n link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = this.links[link.toLowerCase()];\n if (!link || !link.href) {\n out += cap[0].charAt(0);\n src = cap[0].substring(1) + src;\n continue;\n }\n this.inLink = true;\n out += this.outputLink(cap, link);\n this.inLink = false;\n continue;\n }\n\n // strong\n if (cap = this.rules.strong.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.strong(this.output(cap[2] || cap[1]));\n continue;\n }\n\n // em\n if (cap = this.rules.em.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.em(this.output(cap[2] || cap[1]));\n continue;\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.codespan(escape(cap[2], true));\n continue;\n }\n\n // br\n if (cap = this.rules.br.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.br();\n continue;\n }\n\n // del (gfm)\n if (cap = this.rules.del.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.del(this.output(cap[1]));\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.text(escape(this.smartypants(cap[0])));\n continue;\n }\n\n if (src) {\n throw new\n Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return out;\n};\n\n/**\n * Compile Link\n */\n\nInlineLexer.prototype.outputLink = function(cap, link) {\n var href = escape(link.href)\n , title = link.title ? escape(link.title) : null;\n\n return cap[0].charAt(0) !== '!'\n ? this.renderer.link(href, title, this.output(cap[1]))\n : this.renderer.image(href, title, escape(cap[1]));\n};\n\n/**\n * Smartypants Transformations\n */\n\nInlineLexer.prototype.smartypants = function(text) {\n if (!this.options.smartypants) return text;\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n};\n\n/**\n * Mangle Links\n */\n\nInlineLexer.prototype.mangle = function(text) {\n if (!this.options.mangle) return text;\n var out = ''\n , l = text.length\n , i = 0\n , ch;\n\n for (; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n};\n\n/**\n * Renderer\n */\n\nfunction Renderer(options) {\n this.options = options || {};\n}\n\nRenderer.prototype.code = function(code, lang, escaped) {\n if (this.options.highlight) {\n var out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape(code, true))\n + '\\n</code></pre>';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape(lang, true)\n + '\">'\n + (escaped ? code : escape(code, true))\n + '\\n</code></pre>\\n';\n};\n\nRenderer.prototype.blockquote = function(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n};\n\nRenderer.prototype.html = function(html) {\n return html;\n};\n\nRenderer.prototype.heading = function(text, level, raw) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + raw.toLowerCase().replace(/[^\\w]+/g, '-')\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n};\n\nRenderer.prototype.hr = function() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n};\n\nRenderer.prototype.list = function(body, ordered) {\n var type = ordered ? 'ol' : 'ul';\n return '<' + type + '>\\n' + body + '</' + type + '>\\n';\n};\n\nRenderer.prototype.listitem = function(text) {\n return '<li>' + text + '</li>\\n';\n};\n\nRenderer.prototype.paragraph = function(text) {\n return '<p>' + text + '</p>\\n';\n};\n\nRenderer.prototype.table = function(header, body) {\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + '<tbody>\\n'\n + body\n + '</tbody>\\n'\n + '</table>\\n';\n};\n\nRenderer.prototype.tablerow = function(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n};\n\nRenderer.prototype.tablecell = function(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align\n ? '<' + type + ' style=\"text-align:' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n};\n\n// span level renderer\nRenderer.prototype.strong = function(text) {\n return '<strong>' + text + '</strong>';\n};\n\nRenderer.prototype.em = function(text) {\n return '<em>' + text + '</em>';\n};\n\nRenderer.prototype.codespan = function(text) {\n return '<code>' + text + '</code>';\n};\n\nRenderer.prototype.br = function() {\n return this.options.xhtml ? '<br/>' : '<br>';\n};\n\nRenderer.prototype.del = function(text) {\n return '<del>' + text + '</del>';\n};\n\nRenderer.prototype.link = function(href, title, text) {\n if (this.options.sanitize) {\n try {\n var prot = decodeURIComponent(unescape(href))\n .replace(/[^\\w:]/g, '')\n .toLowerCase();\n } catch (e) {\n return '';\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0) {\n return '';\n }\n }\n var out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n};\n\nRenderer.prototype.image = function(href, title, text) {\n var out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n};\n\nRenderer.prototype.text = function(text) {\n return text;\n};\n\n/**\n * Parsing & Compiling\n */\n\nfunction Parser(options) {\n this.tokens = [];\n this.token = null;\n this.options = options || marked.defaults;\n this.options.renderer = this.options.renderer || new Renderer;\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n}\n\n/**\n * Static Parse Method\n */\n\nParser.parse = function(src, options, renderer) {\n var parser = new Parser(options, renderer);\n return parser.parse(src);\n};\n\n/**\n * Parse Loop\n */\n\nParser.prototype.parse = function(src) {\n this.inline = new InlineLexer(src.links, this.options, this.renderer);\n this.tokens = src.reverse();\n\n var out = '';\n while (this.next()) {\n out += this.tok();\n }\n\n return out;\n};\n\n/**\n * Next Token\n */\n\nParser.prototype.next = function() {\n return this.token = this.tokens.pop();\n};\n\n/**\n * Preview Next Token\n */\n\nParser.prototype.peek = function() {\n return this.tokens[this.tokens.length - 1] || 0;\n};\n\n/**\n * Parse Text Tokens\n */\n\nParser.prototype.parseText = function() {\n var body = this.token.text;\n\n while (this.peek().type === 'text') {\n body += '\\n' + this.next().text;\n }\n\n return this.inline.output(body);\n};\n\n/**\n * Parse Current Token\n */\n\nParser.prototype.tok = function() {\n switch (this.token.type) {\n case 'space': {\n return '';\n }\n case 'hr': {\n return this.renderer.hr();\n }\n case 'heading': {\n return this.renderer.heading(\n this.inline.output(this.token.text),\n this.token.depth,\n this.token.text);\n }\n case 'code': {\n return this.renderer.code(this.token.text,\n this.token.lang,\n this.token.escaped);\n }\n case 'table': {\n var header = ''\n , body = ''\n , i\n , row\n , cell\n , flags\n , j;\n\n // header\n cell = '';\n for (i = 0; i < this.token.header.length; i++) {\n flags = { header: true, align: this.token.align[i] };\n cell += this.renderer.tablecell(\n this.inline.output(this.token.header[i]),\n { header: true, align: this.token.align[i] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n for (i = 0; i < this.token.cells.length; i++) {\n row = this.token.cells[i];\n\n cell = '';\n for (j = 0; j < row.length; j++) {\n cell += this.renderer.tablecell(\n this.inline.output(row[j]),\n { header: false, align: this.token.align[j] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n return this.renderer.table(header, body);\n }\n case 'blockquote_start': {\n var body = '';\n\n while (this.next().type !== 'blockquote_end') {\n body += this.tok();\n }\n\n return this.renderer.blockquote(body);\n }\n case 'list_start': {\n var body = ''\n , ordered = this.token.ordered;\n\n while (this.next().type !== 'list_end') {\n body += this.tok();\n }\n\n return this.renderer.list(body, ordered);\n }\n case 'list_item_start': {\n var body = '';\n\n while (this.next().type !== 'list_item_end') {\n body += this.token.type === 'text'\n ? this.parseText()\n : this.tok();\n }\n\n return this.renderer.listitem(body);\n }\n case 'loose_item_start': {\n var body = '';\n\n while (this.next().type !== 'list_item_end') {\n body += this.tok();\n }\n\n return this.renderer.listitem(body);\n }\n case 'html': {\n var html = !this.token.pre && !this.options.pedantic\n ? this.inline.output(this.token.text)\n : this.token.text;\n return this.renderer.html(html);\n }\n case 'paragraph': {\n return this.renderer.paragraph(this.inline.output(this.token.text));\n }\n case 'text': {\n return this.renderer.paragraph(this.parseText());\n }\n }\n};\n\n/**\n * Helpers\n */\n\nfunction escape(html, encode) {\n return html\n .replace(!encode ? /&(?!#?\\w+;)/g : /&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction unescape(html) {\n\t// explicitly match decimal, hex, and named HTML entities \n return html.replace(/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/g, function(_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nfunction replace(regex, opt) {\n regex = regex.source;\n opt = opt || '';\n return function self(name, val) {\n if (!name) return new RegExp(regex, opt);\n val = val.source || val;\n val = val.replace(/(^|[^\\[])\\^/g, '$1');\n regex = regex.replace(name, val);\n return self;\n };\n}\n\nfunction noop() {}\nnoop.exec = noop;\n\nfunction merge(obj) {\n var i = 1\n , target\n , key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\n\n/**\n * Marked\n */\n\nfunction marked(src, opt, callback) {\n if (callback || typeof opt === 'function') {\n if (!callback) {\n callback = opt;\n opt = null;\n }\n\n opt = merge({}, marked.defaults, opt || {});\n\n var highlight = opt.highlight\n , tokens\n , pending\n , i = 0;\n\n try {\n tokens = Lexer.lex(src, opt)\n } catch (e) {\n return callback(e);\n }\n\n pending = tokens.length;\n\n var done = function(err) {\n if (err) {\n opt.highlight = highlight;\n return callback(err);\n }\n\n var out;\n\n try {\n out = Parser.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!pending) return done();\n\n for (; i < tokens.length; i++) {\n (function(token) {\n if (token.type !== 'code') {\n return --pending || done();\n }\n return highlight(token.text, token.lang, function(err, code) {\n if (err) return done(err);\n if (code == null || code === token.text) {\n return --pending || done();\n }\n token.text = code;\n token.escaped = true;\n --pending || done();\n });\n })(tokens[i]);\n }\n\n return;\n }\n try {\n if (opt) opt = merge({}, marked.defaults, opt);\n return Parser.parse(Lexer.lex(src, opt), opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/chjj/marked.';\n if ((opt || marked.defaults).silent) {\n return '<p>An error occured:</p><pre>'\n + escape(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge(marked.defaults, opt);\n return marked;\n};\n\nmarked.defaults = {\n gfm: true,\n tables: true,\n breaks: false,\n pedantic: false,\n sanitize: false,\n sanitizer: null,\n mangle: true,\n smartLists: false,\n silent: false,\n highlight: null,\n langPrefix: 'lang-',\n smartypants: false,\n headerPrefix: '',\n renderer: new Renderer,\n xhtml: false\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\n\nmarked.Renderer = Renderer;\n\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\n\nmarked.InlineLexer = InlineLexer;\nmarked.inlineLexer = InlineLexer.output;\n\nmarked.parse = marked;\n\nif (typeof module !== 'undefined' && typeof exports === 'object') {\n module.exports = marked;\n} else if (typeof define === 'function' && define.amd) {\n define(function() { return marked; });\n} else {\n this.marked = marked;\n}\n\n}).call(function() {\n return this || (typeof window !== 'undefined' ? window : global);\n}());\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/marked/lib/marked.js\n// module id = 61\n// module chunks = 0","\n/* **********************************************\n Begin prism-core.js\n********************************************** */\n\nvar _self = (typeof window !== 'undefined')\n\t? window // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t? self // if in worker\n\t\t: {} // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n * MIT license http://www.opensource.org/licenses/mit-license.php/\n * @author Lea Verou http://lea.verou.me\n */\n\nvar Prism = (function(){\n\n// Private helper vars\nvar lang = /\\blang(?:uage)?-(\\w+)\\b/i;\nvar uniqueId = 0;\n\nvar _ = _self.Prism = {\n\tutil: {\n\t\tencode: function (tokens) {\n\t\t\tif (tokens instanceof Token) {\n\t\t\t\treturn new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);\n\t\t\t} else if (_.util.type(tokens) === 'Array') {\n\t\t\t\treturn tokens.map(_.util.encode);\n\t\t\t} else {\n\t\t\t\treturn tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\\u00a0/g, ' ');\n\t\t\t}\n\t\t},\n\n\t\ttype: function (o) {\n\t\t\treturn Object.prototype.toString.call(o).match(/\\[object (\\w+)\\]/)[1];\n\t\t},\n\n\t\tobjId: function (obj) {\n\t\t\tif (!obj['__id']) {\n\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t}\n\t\t\treturn obj['__id'];\n\t\t},\n\n\t\t// Deep clone a language definition (e.g. to extend it)\n\t\tclone: function (o) {\n\t\t\tvar type = _.util.type(o);\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'Object':\n\t\t\t\t\tvar clone = {};\n\n\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\tclone[key] = _.util.clone(o[key]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn clone;\n\n\t\t\t\tcase 'Array':\n\t\t\t\t\t// Check for existence for IE8\n\t\t\t\t\treturn o.map && o.map(function(v) { return _.util.clone(v); });\n\t\t\t}\n\n\t\t\treturn o;\n\t\t}\n\t},\n\n\tlanguages: {\n\t\textend: function (id, redef) {\n\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\tfor (var key in redef) {\n\t\t\t\tlang[key] = redef[key];\n\t\t\t}\n\n\t\t\treturn lang;\n\t\t},\n\n\t\t/**\n\t\t * Insert a token before another token in a language literal\n\t\t * As this needs to recreate the object (we cannot actually insert before keys in object literals),\n\t\t * we cannot just provide an object, we need anobject and a key.\n\t\t * @param inside The key (or language id) of the parent\n\t\t * @param before The key to insert before. If not provided, the function appends instead.\n\t\t * @param insert Object with the key/value pairs to insert\n\t\t * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.\n\t\t */\n\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\troot = root || _.languages;\n\t\t\tvar grammar = root[inside];\n\n\t\t\tif (arguments.length == 2) {\n\t\t\t\tinsert = arguments[1];\n\n\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\tgrammar[newToken] = insert[newToken];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn grammar;\n\t\t\t}\n\n\t\t\tvar ret = {};\n\n\t\t\tfor (var token in grammar) {\n\n\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\tif (token == before) {\n\n\t\t\t\t\t\tfor (var newToken in insert) {\n\n\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Update references in other language definitions\n\t\t\t_.languages.DFS(_.languages, function(key, value) {\n\t\t\t\tif (value === root[inside] && key != inside) {\n\t\t\t\t\tthis[key] = ret;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn root[inside] = ret;\n\t\t},\n\n\t\t// Traverse a language definition with Depth First Search\n\t\tDFS: function(o, callback, type, visited) {\n\t\t\tvisited = visited || {};\n\t\t\tfor (var i in o) {\n\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\tif (_.util.type(o[i]) === 'Object' && !visited[_.util.objId(o[i])]) {\n\t\t\t\t\t\tvisited[_.util.objId(o[i])] = true;\n\t\t\t\t\t\t_.languages.DFS(o[i], callback, null, visited);\n\t\t\t\t\t}\n\t\t\t\t\telse if (_.util.type(o[i]) === 'Array' && !visited[_.util.objId(o[i])]) {\n\t\t\t\t\t\tvisited[_.util.objId(o[i])] = true;\n\t\t\t\t\t\t_.languages.DFS(o[i], callback, i, visited);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tplugins: {},\n\n\thighlightAll: function(async, callback) {\n\t\tvar env = {\n\t\t\tcallback: callback,\n\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t};\n\n\t\t_.hooks.run(\"before-highlightall\", env);\n\n\t\tvar elements = env.elements || document.querySelectorAll(env.selector);\n\n\t\tfor (var i=0, element; element = elements[i++];) {\n\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t}\n\t},\n\n\thighlightElement: function(element, async, callback) {\n\t\t// Find language\n\t\tvar language, grammar, parent = element;\n\n\t\twhile (parent && !lang.test(parent.className)) {\n\t\t\tparent = parent.parentNode;\n\t\t}\n\n\t\tif (parent) {\n\t\t\tlanguage = (parent.className.match(lang) || [,''])[1].toLowerCase();\n\t\t\tgrammar = _.languages[language];\n\t\t}\n\n\t\t// Set language on the element, if not present\n\t\telement.className = element.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n\n\t\t// Set language on the parent, for styling\n\t\tparent = element.parentNode;\n\n\t\tif (/pre/i.test(parent.nodeName)) {\n\t\t\tparent.className = parent.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n\t\t}\n\n\t\tvar code = element.textContent;\n\n\t\tvar env = {\n\t\t\telement: element,\n\t\t\tlanguage: language,\n\t\t\tgrammar: grammar,\n\t\t\tcode: code\n\t\t};\n\n\t\t_.hooks.run('before-sanity-check', env);\n\n\t\tif (!env.code || !env.grammar) {\n\t\t\tif (env.code) {\n\t\t\t\tenv.element.textContent = env.code;\n\t\t\t}\n\t\t\t_.hooks.run('complete', env);\n\t\t\treturn;\n\t\t}\n\n\t\t_.hooks.run('before-highlight', env);\n\n\t\tif (async && _self.Worker) {\n\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\tworker.onmessage = function(evt) {\n\t\t\t\tenv.highlightedCode = evt.data;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t};\n\n\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\tlanguage: env.language,\n\t\t\t\tcode: env.code,\n\t\t\t\timmediateClose: true\n\t\t\t}));\n\t\t}\n\t\telse {\n\t\t\tenv.highlightedCode = _.highlight(env.code, env.grammar, env.language);\n\n\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\tcallback && callback.call(element);\n\n\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t_.hooks.run('complete', env);\n\t\t}\n\t},\n\n\thighlight: function (text, grammar, language) {\n\t\tvar tokens = _.tokenize(text, grammar);\n\t\treturn Token.stringify(_.util.encode(tokens), language);\n\t},\n\n\ttokenize: function(text, grammar, language) {\n\t\tvar Token = _.Token;\n\n\t\tvar strarr = [text];\n\n\t\tvar rest = grammar.rest;\n\n\t\tif (rest) {\n\t\t\tfor (var token in rest) {\n\t\t\t\tgrammar[token] = rest[token];\n\t\t\t}\n\n\t\t\tdelete grammar.rest;\n\t\t}\n\n\t\ttokenloop: for (var token in grammar) {\n\t\t\tif(!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = (_.util.type(patterns) === \"Array\") ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tvar pattern = patterns[j],\n\t\t\t\t\tinside = pattern.inside,\n\t\t\t\t\tlookbehind = !!pattern.lookbehind,\n\t\t\t\t\tgreedy = !!pattern.greedy,\n\t\t\t\t\tlookbehindLength = 0,\n\t\t\t\t\talias = pattern.alias;\n\n\t\t\t\tif (greedy && !pattern.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = pattern.pattern.toString().match(/[imuy]*$/)[0];\n\t\t\t\t\tpattern.pattern = RegExp(pattern.pattern.source, flags + \"g\");\n\t\t\t\t}\n\n\t\t\t\tpattern = pattern.pattern || pattern;\n\n\t\t\t\t// Don’t cache length as it changes during the loop\n\t\t\t\tfor (var i=0, pos = 0; i<strarr.length; pos += strarr[i].length, ++i) {\n\n\t\t\t\t\tvar str = strarr[i];\n\n\t\t\t\t\tif (strarr.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\tbreak tokenloop;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tpattern.lastIndex = 0;\n\n\t\t\t\t\tvar match = pattern.exec(str),\n\t\t\t\t\t delNum = 1;\n\n\t\t\t\t\t// Greedy patterns can override/remove up to two previously matched tokens\n\t\t\t\t\tif (!match && greedy && i != strarr.length - 1) {\n\t\t\t\t\t\tpattern.lastIndex = pos;\n\t\t\t\t\t\tmatch = pattern.exec(text);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index + (lookbehind ? match[1].length : 0),\n\t\t\t\t\t\t to = match.index + match[0].length,\n\t\t\t\t\t\t k = i,\n\t\t\t\t\t\t p = pos;\n\n\t\t\t\t\t\tfor (var len = strarr.length; k < len && p < to; ++k) {\n\t\t\t\t\t\t\tp += strarr[k].length;\n\t\t\t\t\t\t\t// Move the index i to the element in strarr that is closest to from\n\t\t\t\t\t\t\tif (from >= p) {\n\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\tpos = p;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * If strarr[i] is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\t * If strarr[k - 1] is greedy we are in conflict with another greedy pattern\n\t\t\t\t\t\t */\n\t\t\t\t\t\tif (strarr[i] instanceof Token || strarr[k - 1].greedy) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Number of tokens to delete and replace with the new match\n\t\t\t\t\t\tdelNum = k - i;\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!match) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(lookbehind) {\n\t\t\t\t\t\tlookbehindLength = match[1].length;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar from = match.index + lookbehindLength,\n\t\t\t\t\t match = match[0].slice(lookbehindLength),\n\t\t\t\t\t to = from + match.length,\n\t\t\t\t\t before = str.slice(0, from),\n\t\t\t\t\t after = str.slice(to);\n\n\t\t\t\t\tvar args = [i, delNum];\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\targs.push(before);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy);\n\n\t\t\t\t\targs.push(wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\targs.push(after);\n\t\t\t\t\t}\n\n\t\t\t\t\tArray.prototype.splice.apply(strarr, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn strarr;\n\t},\n\n\thooks: {\n\t\tall: {},\n\n\t\tadd: function (name, callback) {\n\t\t\tvar hooks = _.hooks.all;\n\n\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\thooks[name].push(callback);\n\t\t},\n\n\t\trun: function (name, env) {\n\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i=0, callback; callback = callbacks[i++];) {\n\t\t\t\tcallback(env);\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar Token = _.Token = function(type, content, alias, matchedStr, greedy) {\n\tthis.type = type;\n\tthis.content = content;\n\tthis.alias = alias;\n\t// Copy of the full string this token was created from\n\tthis.length = (matchedStr || \"\").length|0;\n\tthis.greedy = !!greedy;\n};\n\nToken.stringify = function(o, language, parent) {\n\tif (typeof o == 'string') {\n\t\treturn o;\n\t}\n\n\tif (_.util.type(o) === 'Array') {\n\t\treturn o.map(function(element) {\n\t\t\treturn Token.stringify(element, language, o);\n\t\t}).join('');\n\t}\n\n\tvar env = {\n\t\ttype: o.type,\n\t\tcontent: Token.stringify(o.content, language, parent),\n\t\ttag: 'span',\n\t\tclasses: ['token', o.type],\n\t\tattributes: {},\n\t\tlanguage: language,\n\t\tparent: parent\n\t};\n\n\tif (env.type == 'comment') {\n\t\tenv.attributes['spellcheck'] = 'true';\n\t}\n\n\tif (o.alias) {\n\t\tvar aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];\n\t\tArray.prototype.push.apply(env.classes, aliases);\n\t}\n\n\t_.hooks.run('wrap', env);\n\n\tvar attributes = Object.keys(env.attributes).map(function(name) {\n\t\treturn name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '"') + '\"';\n\t}).join(' ');\n\n\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + (attributes ? ' ' + attributes : '') + '>' + env.content + '</' + env.tag + '>';\n\n};\n\nif (!_self.document) {\n\tif (!_self.addEventListener) {\n\t\t// in Node.js\n\t\treturn _self.Prism;\n\t}\n \t// In worker\n\t_self.addEventListener('message', function(evt) {\n\t\tvar message = JSON.parse(evt.data),\n\t\t lang = message.language,\n\t\t code = message.code,\n\t\t immediateClose = message.immediateClose;\n\n\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\tif (immediateClose) {\n\t\t\t_self.close();\n\t\t}\n\t}, false);\n\n\treturn _self.Prism;\n}\n\n//Get current script and highlight\nvar script = document.currentScript || [].slice.call(document.getElementsByTagName(\"script\")).pop();\n\nif (script) {\n\t_.filename = script.src;\n\n\tif (document.addEventListener && !script.hasAttribute('data-manual')) {\n\t\tif(document.readyState !== \"loading\") {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(_.highlightAll);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(_.highlightAll, 16);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tdocument.addEventListener('DOMContentLoaded', _.highlightAll);\n\t\t}\n\t}\n}\n\nreturn _self.Prism;\n\n})();\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n\n/* **********************************************\n Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': /<!--[\\w\\W]*?-->/,\n\t'prolog': /<\\?[\\w\\W]+?\\?>/,\n\t'doctype': /<!DOCTYPE[\\w\\W]+?>/i,\n\t'cdata': /<!\\[CDATA\\[[\\w\\W]*?]]>/i,\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\w\\W])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/i,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/i,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=(?:('|\")[\\w\\W]*?(\\1)|[^\\s>]+)/i,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /[=>\"']/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': /&#?[\\da-z]{1,8};/i\n};\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function(env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&/, '&');\n\t}\n});\n\nPrism.languages.xml = Prism.languages.markup;\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\n\n/* **********************************************\n Begin prism-css.js\n********************************************** */\n\nPrism.languages.css = {\n\t'comment': /\\/\\*[\\w\\W]*?\\*\\//,\n\t'atrule': {\n\t\tpattern: /@[\\w-]+?.*?(;|(?=\\s*\\{))/i,\n\t\tinside: {\n\t\t\t'rule': /@[\\w-]+/\n\t\t\t// See rest below\n\t\t}\n\t},\n\t'url': /url\\((?:([\"'])(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1|.*?)\\)/i,\n\t'selector': /[^\\{\\}\\s][^\\{\\};]*?(?=\\s*\\{)/,\n\t'string': {\n\t\tpattern: /(\"|')(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'property': /(\\b|\\B)[\\w-]+(?=\\s*:)/i,\n\t'important': /\\B!important\\b/i,\n\t'function': /[-a-z0-9]+(?=\\()/i,\n\t'punctuation': /[(){};:]/\n};\n\nPrism.languages.css['atrule'].inside.rest = Prism.util.clone(Prism.languages.css);\n\nif (Prism.languages.markup) {\n\tPrism.languages.insertBefore('markup', 'tag', {\n\t\t'style': {\n\t\t\tpattern: /(<style[\\w\\W]*?>)[\\w\\W]*?(?=<\\/style>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.css,\n\t\t\talias: 'language-css'\n\t\t}\n\t});\n\t\n\tPrism.languages.insertBefore('inside', 'attr-value', {\n\t\t'style-attr': {\n\t\t\tpattern: /\\s*style=(\"|').*?\\1/i,\n\t\t\tinside: {\n\t\t\t\t'attr-name': {\n\t\t\t\t\tpattern: /^\\s*style/i,\n\t\t\t\t\tinside: Prism.languages.markup.tag.inside\n\t\t\t\t},\n\t\t\t\t'punctuation': /^\\s*=\\s*['\"]|['\"]\\s*$/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /.+/i,\n\t\t\t\t\tinside: Prism.languages.css\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'language-css'\n\t\t}\n\t}, Prism.languages.markup.tag);\n}\n\n/* **********************************************\n Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\w\\W]*?\\*\\//,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /((?:\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+)|(?:catch\\s+\\())[a-z0-9_\\.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\tpunctuation: /(\\.|\\\\)/\n\t\t}\n\t},\n\t'keyword': /\\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n\t'boolean': /\\b(true|false)\\b/,\n\t'function': /[a-z0-9_]+(?=\\()/i,\n\t'number': /\\b-?(?:0x[\\da-f]+|\\d*\\.?\\d+(?:e[+-]?\\d+)?)\\b/i,\n\t'operator': /--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'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/,\n\t'number': /\\b-?(0x[\\dA-Fa-f]+|0b[01]+|0o[0-7]+|\\d*\\.?\\d+([Ee][+-]?\\d+)?|NaN|Infinity)\\b/,\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*(?=\\()/i,\n\t'operator': /--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*\\*?|\\/|~|\\^|%|\\.{3}/\n});\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: /(^|[^/])\\/(?!\\/)(\\[.+?]|\\\\.|[^/\\\\\\r\\n])+\\/[gimyu]{0,5}(?=\\s*($|[\\r\\n,.;})]))/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'template-string': {\n\t\tpattern: /`(?:\\\\\\\\|\\\\?[^\\\\])*?`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t}\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.insertBefore('markup', 'tag', {\n\t\t'script': {\n\t\t\tpattern: /(<script[\\w\\W]*?>)[\\w\\W]*?(?=<\\/script>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript,\n\t\t\talias: 'language-javascript'\n\t\t}\n\t});\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n/* **********************************************\n Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\tif (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) {\n\t\treturn;\n\t}\n\n\tself.Prism.fileHighlight = function() {\n\n\t\tvar Extensions = {\n\t\t\t'js': 'javascript',\n\t\t\t'py': 'python',\n\t\t\t'rb': 'ruby',\n\t\t\t'ps1': 'powershell',\n\t\t\t'psm1': 'powershell',\n\t\t\t'sh': 'bash',\n\t\t\t'bat': 'batch',\n\t\t\t'h': 'c',\n\t\t\t'tex': 'latex'\n\t\t};\n\n\t\tif(Array.prototype.forEach) { // Check to prevent error in IE8\n\t\t\tArray.prototype.slice.call(document.querySelectorAll('pre[data-src]')).forEach(function (pre) {\n\t\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\t\tvar language, parent = pre;\n\t\t\t\tvar lang = /\\blang(?:uage)?-(?!\\*)(\\w+)\\b/i;\n\t\t\t\twhile (parent && !lang.test(parent.className)) {\n\t\t\t\t\tparent = parent.parentNode;\n\t\t\t\t}\n\n\t\t\t\tif (parent) {\n\t\t\t\t\tlanguage = (pre.className.match(lang) || [, ''])[1];\n\t\t\t\t}\n\n\t\t\t\tif (!language) {\n\t\t\t\t\tvar extension = (src.match(/\\.(\\w+)$/) || [, ''])[1];\n\t\t\t\t\tlanguage = Extensions[extension] || extension;\n\t\t\t\t}\n\n\t\t\t\tvar code = document.createElement('code');\n\t\t\t\tcode.className = 'language-' + language;\n\n\t\t\t\tpre.textContent = '';\n\n\t\t\t\tcode.textContent = 'Loading…';\n\n\t\t\t\tpre.appendChild(code);\n\n\t\t\t\tvar xhr = new XMLHttpRequest();\n\n\t\t\t\txhr.open('GET', src, true);\n\n\t\t\t\txhr.onreadystatechange = function () {\n\t\t\t\t\tif (xhr.readyState == 4) {\n\n\t\t\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\t\t\tcode.textContent = xhr.responseText;\n\n\t\t\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (xhr.status >= 400) {\n\t\t\t\t\t\t\tcode.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tcode.textContent = '✖ Error: File does not exist or is empty';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\txhr.send(null);\n\t\t\t});\n\t\t}\n\n\t};\n\n\tdocument.addEventListener('DOMContentLoaded', self.Prism.fileHighlight);\n\n})();\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/prism.js\n// module id = 62\n// module chunks = 0","Prism.languages.java = Prism.languages.extend('clike', {\n\t'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/,\n\t'number': /\\b0b[01]+\\b|\\b0x[\\da-f]*\\.?[\\da-fp\\-]+\\b|\\b\\d*\\.?\\d+(?:e[+-]?\\d+)?[df]?\\b/i,\n\t'operator': {\n\t\tpattern: /(^|[^.])(?:\\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\\|[|=]?|\\*=?|\\/=?|%=?|\\^=?|[?:~])/m,\n\t\tlookbehind: true\n\t}\n});\n\nPrism.languages.insertBefore('java','function', {\n\t'annotation': {\n\t\talias: 'punctuation',\n\t\tpattern: /(^|[^.])@\\w+/,\n\t\tlookbehind: true\n\t}\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-java.js\n// module id = 63\n// module chunks = 0","Prism.languages.csharp = Prism.languages.extend('clike', {\n\t'keyword': /\\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\\b/,\n\t'string': [\n\t\t/@(\"|')(\\1\\1|\\\\\\1|\\\\?(?!\\1)[\\s\\S])*\\1/,\n\t\t/(\"|')(\\\\?.)*?\\1/\n\t],\n\t'number': /\\b-?(0x[\\da-f]+|\\d*\\.?\\d+f?)\\b/i\n});\n\nPrism.languages.insertBefore('csharp', 'keyword', {\n\t'generic-method': {\n\t\tpattern: /[a-z0-9_]+\\s*<[^>\\r\\n]+?>\\s*(?=\\()/i,\n\t\talias: 'function',\n\t\tinside: {\n\t\t\tkeyword: Prism.languages.csharp.keyword,\n\t\t\tpunctuation: /[<>(),.:]/\n\t\t}\n\t},\n\t'preprocessor': {\n\t\tpattern: /(^\\s*)#.*/m,\n\t\tlookbehind: true,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t// highlight preprocessor directives as keywords\n\t\t\t'directive': {\n\t\t\t\tpattern: /(\\s*#)\\b(define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\\b/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t}\n\t\t}\n\t}\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-csharp.js\n// module id = 64\n// module chunks = 0","/**\n * Original by Aaron Harun: http://aahacreative.com/2012/07/31/php-syntax-highlighting-prism/\n * Modified by Miles Johnson: http://milesj.me\n *\n * Supports the following:\n * \t\t- Extends clike syntax\n * \t\t- Support for PHP 5.3+ (namespaces, traits, generators, etc)\n * \t\t- Smarter constant and function matching\n *\n * Adds the following new token classes:\n * \t\tconstant, delimiter, variable, function, package\n */\n\nPrism.languages.php = Prism.languages.extend('clike', {\n\t'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,\n\t'constant': /\\b[A-Z0-9_]{2,}\\b/,\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\w\\W]*?\\*\\/|\\/\\/.*)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t}\n});\n\n// Shell-like comments are matched after strings, because they are less\n// common than strings containing hashes...\nPrism.languages.insertBefore('php', 'class-name', {\n\t'shell-comment': {\n\t\tpattern: /(^|[^\\\\])#.*/,\n\t\tlookbehind: true,\n\t\talias: 'comment'\n\t}\n});\n\nPrism.languages.insertBefore('php', 'keyword', {\n\t'delimiter': /\\?>|<\\?(?:php)?/i,\n\t'variable': /\\$\\w+\\b/i,\n\t'package': {\n\t\tpattern: /(\\\\|namespace\\s+|use\\s+)[\\w\\\\]+/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\tpunctuation: /\\\\/\n\t\t}\n\t}\n});\n\n// Must be defined after the function pattern\nPrism.languages.insertBefore('php', 'operator', {\n\t'property': {\n\t\tpattern: /(->)[\\w]+/,\n\t\tlookbehind: true\n\t}\n});\n\n// Add HTML support of the markup language exists\nif (Prism.languages.markup) {\n\n\t// Tokenize all inline PHP blocks that are wrapped in <?php ?>\n\t// This allows for easy PHP + markup highlighting\n\tPrism.hooks.add('before-highlight', function(env) {\n\t\tif (env.language !== 'php') {\n\t\t\treturn;\n\t\t}\n\n\t\tenv.tokenStack = [];\n\n\t\tenv.backupCode = env.code;\n\t\tenv.code = env.code.replace(/(?:<\\?php|<\\?)[\\w\\W]*?(?:\\?>)/ig, function(match) {\n\t\t\tenv.tokenStack.push(match);\n\n\t\t\treturn '{{{PHP' + env.tokenStack.length + '}}}';\n\t\t});\n\t});\n\n\t// Restore env.code for other plugins (e.g. line-numbers)\n\tPrism.hooks.add('before-insert', function(env) {\n\t\tif (env.language === 'php') {\n\t\t\tenv.code = env.backupCode;\n\t\t\tdelete env.backupCode;\n\t\t}\n\t});\n\n\t// Re-insert the tokens after highlighting\n\tPrism.hooks.add('after-highlight', function(env) {\n\t\tif (env.language !== 'php') {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, t; t = env.tokenStack[i]; i++) {\n\t\t\t// The replace prevents $$, $&, $`, $', $n, $nn from being interpreted as special patterns\n\t\t\tenv.highlightedCode = env.highlightedCode.replace('{{{PHP' + (i + 1) + '}}}', Prism.highlight(t, env.grammar, 'php').replace(/\\$/g, '$$$$'));\n\t\t}\n\n\t\tenv.element.innerHTML = env.highlightedCode;\n\t});\n\n\t// Wrap tokens in classes that are missing them\n\tPrism.hooks.add('wrap', function(env) {\n\t\tif (env.language === 'php' && env.type === 'markup') {\n\t\t\tenv.content = env.content.replace(/(\\{\\{\\{PHP[0-9]+\\}\\}\\})/g, \"<span class=\\\"token php\\\">$1</span>\");\n\t\t}\n\t});\n\n\t// Add the rules before all others\n\tPrism.languages.insertBefore('php', 'comment', {\n\t\t'markup': {\n\t\t\tpattern: /<[^?]\\/?(.*?)>/,\n\t\t\tinside: Prism.languages.markup\n\t\t},\n\t\t'php': /\\{\\{\\{PHP[0-9]+\\}\\}\\}/\n\t});\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-php.js\n// module id = 65\n// module chunks = 0","Prism.languages.python= {\n\t'triple-quoted-string': {\n\t\tpattern: /\"\"\"[\\s\\S]+?\"\"\"|'''[\\s\\S]+?'''/,\n\t\talias: 'string'\n\t},\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])#.*/,\n\t\tlookbehind: true\n\t},\n\t'string': {\n\t\tpattern: /(\"|')(?:\\\\\\\\|\\\\?[^\\\\\\r\\n])*?\\1/,\n\t\tgreedy: true\n\t},\n\t'function' : {\n\t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\\()/g,\n\t\tlookbehind: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\bclass\\s+)[a-z0-9_]+/i,\n\t\tlookbehind: true\n\t},\n\t'keyword' : /\\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\\b/,\n\t'boolean' : /\\b(?:True|False)\\b/,\n\t'number' : /\\b-?(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?j?\\b/i,\n\t'operator' : /[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]|\\b(?:or|and|not)\\b/,\n\t'punctuation' : /[{}[\\];(),.:]/\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-python.js\n// module id = 66\n// module chunks = 0","Prism.languages.json = {\n 'property': /\"(?:\\\\.|[^|\"])*\"(?=\\s*:)/ig,\n 'string': /\"(?!:)(?:\\\\.|[^|\"])*\"(?!:)/g,\n 'number': /\\b-?(0x[\\dA-Fa-f]+|\\d*\\.?\\d+([Ee][+-]?\\d+)?)\\b/g,\n 'punctuation': /[{}[\\]);,]/g,\n 'operator': /:/g,\n 'boolean': /\\b(true|false)\\b/gi,\n 'null': /\\bnull\\b/gi\n};\n\nPrism.languages.jsonp = Prism.languages.json;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-json.js\n// module id = 67\n// module chunks = 0","(function(Prism) {\n\t// TODO:\n\t// - Add CSS highlighting inside <style> tags\n\t// - Add support for multi-line code blocks\n\t// - Add support for interpolation #{} and !{}\n\t// - Add support for tag interpolation #[]\n\t// - Add explicit support for plain text using |\n\t// - Add support for markup embedded in plain text\n\n\tPrism.languages.jade = {\n\n\t\t// Multiline stuff should appear before the rest\n\n\t\t// This handles both single-line and multi-line comments\n\t\t'comment': {\n\t\t\tpattern: /(^([\\t ]*))\\/\\/.*((?:\\r?\\n|\\r)\\2[\\t ]+.+)*/m,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t// All the tag-related part is in lookbehind\n\t\t// so that it can be highlighted by the \"tag\" pattern\n\t\t'multiline-script': {\n\t\t\tpattern: /(^([\\t ]*)script\\b.*\\.[\\t ]*)((?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ]+.+|\\s*?(?=\\r?\\n|\\r)))+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\trest: Prism.languages.javascript\n\t\t\t}\n\t\t},\n\n\t\t// See at the end of the file for known filters\n\t\t'filter': {\n\t\t\tpattern: /(^([\\t ]*)):.+((?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ]+.+|\\s*?(?=\\r?\\n|\\r)))+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'filter-name': {\n\t\t\t\t\tpattern: /^:[\\w-]+/,\n\t\t\t\t\talias: 'variable'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t'multiline-plain-text': {\n\t\t\tpattern: /(^([\\t ]*)[\\w\\-#.]+\\.[\\t ]*)((?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ]+.+|\\s*?(?=\\r?\\n|\\r)))+/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'markup': {\n\t\t\tpattern: /(^[\\t ]*)<.+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\trest: Prism.languages.markup\n\t\t\t}\n\t\t},\n\t\t'doctype': {\n\t\t\tpattern: /((?:^|\\n)[\\t ]*)doctype(?: .+)?/,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t// This handle all conditional and loop keywords\n\t\t'flow-control': {\n\t\t\tpattern: /(^[\\t ]*)(?:if|unless|else|case|when|default|each|while)\\b(?: .+)?/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'each': {\n\t\t\t\t\tpattern: /^each .+? in\\b/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'keyword': /\\b(?:each|in)\\b/,\n\t\t\t\t\t\t'punctuation': /,/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'branch': {\n\t\t\t\t\tpattern: /^(?:if|unless|else|case|when|default|while)\\b/,\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t},\n\t\t\t\trest: Prism.languages.javascript\n\t\t\t}\n\t\t},\n\t\t'keyword': {\n\t\t\tpattern: /(^[\\t ]*)(?:block|extends|include|append|prepend)\\b.+/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'mixin': [\n\t\t\t// Declaration\n\t\t\t{\n\t\t\t\tpattern: /(^[\\t ]*)mixin .+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /^mixin/,\n\t\t\t\t\t'function': /\\w+(?=\\s*\\(|\\s*$)/,\n\t\t\t\t\t'punctuation': /[(),.]/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Usage\n\t\t\t{\n\t\t\t\tpattern: /(^[\\t ]*)\\+.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'name': {\n\t\t\t\t\t\tpattern: /^\\+\\w+/,\n\t\t\t\t\t\talias: 'function'\n\t\t\t\t\t},\n\t\t\t\t\t'rest': Prism.languages.javascript\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'script': {\n\t\t\tpattern: /(^[\\t ]*script(?:(?:&[^(]+)?\\([^)]+\\))*[\\t ]+).+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\trest: Prism.languages.javascript\n\t\t\t}\n\t\t},\n\n\t\t'plain-text': {\n\t\t\tpattern: /(^[\\t ]*(?!-)[\\w\\-#.]*[\\w\\-](?:(?:&[^(]+)?\\([^)]+\\))*\\/?[\\t ]+).+/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'tag': {\n\t\t\tpattern: /(^[\\t ]*)(?!-)[\\w\\-#.]*[\\w\\-](?:(?:&[^(]+)?\\([^)]+\\))*\\/?:?/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attributes': [\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /&[^(]+\\([^)]+\\)/,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /\\([^)]+\\)/,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'attr-value': {\n\t\t\t\t\t\t\t\tpattern: /(=\\s*)(?:\\{[^}]*\\}|[^,)\\r\\n]+)/,\n\t\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t'attr-name': /[\\w-]+(?=\\s*!?=|\\s*[,)])/,\n\t\t\t\t\t\t\t'punctuation': /[!=(),]+/\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'punctuation': /:/\n\t\t\t}\n\t\t},\n\t\t'code': [\n\t\t\t{\n\t\t\t\tpattern: /(^[\\t ]*(?:-|!?=)).+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'punctuation': /[.\\-!=|]+/\n\t};\n\n\tvar filter_pattern = '(^([\\\\t ]*)):{{filter_name}}((?:\\\\r?\\\\n|\\\\r(?!\\\\n))(?:\\\\2[\\\\t ]+.+|\\\\s*?(?=\\\\r?\\\\n|\\\\r)))+';\n\n\t// Non exhaustive list of available filters and associated languages\n\tvar filters = [\n\t\t{filter:'atpl',language:'twig'},\n\t\t{filter:'coffee',language:'coffeescript'},\n\t\t'ejs',\n\t\t'handlebars',\n\t\t'hogan',\n\t\t'less',\n\t\t'livescript',\n\t\t'markdown',\n\t\t'mustache',\n\t\t'plates',\n\t\t{filter:'sass',language:'scss'},\n\t\t'stylus',\n\t\t'swig'\n\n\t];\n\tvar all_filters = {};\n\tfor (var i = 0, l = filters.length; i < l; i++) {\n\t\tvar filter = filters[i];\n\t\tfilter = typeof filter === 'string' ? {filter: filter, language: filter} : filter;\n\t\tif (Prism.languages[filter.language]) {\n\t\t\tall_filters['filter-' + filter.filter] = {\n\t\t\t\tpattern: RegExp(filter_pattern.replace('{{filter_name}}', filter.filter), 'm'),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'filter-name': {\n\t\t\t\t\t\tpattern: /^:[\\w-]+/,\n\t\t\t\t\t\talias: 'variable'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages[filter.language]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tPrism.languages.insertBefore('jade', 'filter', all_filters);\n\n}(Prism));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-jade.js\n// module id = 68\n// module chunks = 0","Prism.languages.yaml={scalar:{pattern:/([\\-:]\\s*(![^\\s]+)?[ \\t]*[|>])[ \\t]*(?:((?:\\r?\\n|\\r)[ \\t]+)[^\\r\\n]+(?:\\3[^\\r\\n]+)*)/,lookbehind:!0,alias:\"string\"},comment:/#.*/,key:{pattern:/(\\s*(?:^|[:\\-,[{\\r\\n?])[ \\t]*(![^\\s]+)?[ \\t]*)[^\\r\\n{[\\]},#\\s]+?(?=\\s*:\\s)/,lookbehind:!0,alias:\"atrule\"},directive:{pattern:/(^[ \\t]*)%.+/m,lookbehind:!0,alias:\"important\"},datetime:{pattern:/([:\\-,[{]\\s*(![^\\s]+)?[ \\t]*)(\\d{4}-\\d\\d?-\\d\\d?([tT]|[ \\t]+)\\d\\d?:\\d{2}:\\d{2}(\\.\\d*)?[ \\t]*(Z|[-+]\\d\\d?(:\\d{2})?)?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(:\\d{2}(\\.\\d*)?)?)(?=[ \\t]*($|,|]|}))/m,lookbehind:!0,alias:\"number\"},\"boolean\":{pattern:/([:\\-,[{]\\s*(![^\\s]+)?[ \\t]*)(true|false)[ \\t]*(?=$|,|]|})/im,lookbehind:!0,alias:\"important\"},\"null\":{pattern:/([:\\-,[{]\\s*(![^\\s]+)?[ \\t]*)(null|~)[ \\t]*(?=$|,|]|})/im,lookbehind:!0,alias:\"important\"},string:{pattern:/([:\\-,[{]\\s*(![^\\s]+)?[ \\t]*)(\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')(?=[ \\t]*($|,|]|}))/m,lookbehind:!0},number:{pattern:/([:\\-,[{]\\s*(![^\\s]+)?[ \\t]*)[+\\-]?(0x[\\da-f]+|0o[0-7]+|(\\d+\\.?\\d*|\\.?\\d+)(e[\\+\\-]?\\d+)?|\\.inf|\\.nan)[ \\t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\\s]+/,important:/[&*][\\w]+/,punctuation:/---|[:[\\]{}\\-,|>?]|\\.\\.\\./};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-yaml.min.js\n// module id = 69\n// module chunks = 0","Prism.languages.perl = {\n\t'comment': [\n\t\t{\n\t\t\t// POD\n\t\t\tpattern: /(^\\s*)=\\w+[\\s\\S]*?=cut.*/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\$])#.*/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t// TODO Could be nice to handle Heredoc too.\n\t'string': [\n\t\t// q/.../\n\t\t/\\b(?:q|qq|qx|qw)\\s*([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\1/,\n\t\n\t\t// q a...a\n\t\t/\\b(?:q|qq|qx|qw)\\s+([a-zA-Z0-9])(?:[^\\\\]|\\\\[\\s\\S])*?\\1/,\n\t\n\t\t// q(...)\n\t\t/\\b(?:q|qq|qx|qw)\\s*\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)/,\n\t\n\t\t// q{...}\n\t\t/\\b(?:q|qq|qx|qw)\\s*\\{(?:[^{}\\\\]|\\\\[\\s\\S])*\\}/,\n\t\n\t\t// q[...]\n\t\t/\\b(?:q|qq|qx|qw)\\s*\\[(?:[^[\\]\\\\]|\\\\[\\s\\S])*\\]/,\n\t\n\t\t// q<...>\n\t\t/\\b(?:q|qq|qx|qw)\\s*<(?:[^<>\\\\]|\\\\[\\s\\S])*>/,\n\n\t\t// \"...\", `...`\n\t\t/(\"|`)(?:[^\\\\]|\\\\[\\s\\S])*?\\1/,\n\n\t\t// '...'\n\t\t// FIXME Multi-line single-quoted strings are not supported as they would break variables containing '\n\t\t/'(?:[^'\\\\\\r\\n]|\\\\.)*'/\n\t],\n\t'regex': [\n\t\t// m/.../\n\t\t/\\b(?:m|qr)\\s*([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\1[msixpodualngc]*/,\n\t\n\t\t// m a...a\n\t\t/\\b(?:m|qr)\\s+([a-zA-Z0-9])(?:[^\\\\]|\\\\.)*?\\1[msixpodualngc]*/,\n\t\n\t\t// m(...)\n\t\t/\\b(?:m|qr)\\s*\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)[msixpodualngc]*/,\n\t\n\t\t// m{...}\n\t\t/\\b(?:m|qr)\\s*\\{(?:[^{}\\\\]|\\\\[\\s\\S])*\\}[msixpodualngc]*/,\n\t\n\t\t// m[...]\n\t\t/\\b(?:m|qr)\\s*\\[(?:[^[\\]\\\\]|\\\\[\\s\\S])*\\][msixpodualngc]*/,\n\t\n\t\t// m<...>\n\t\t/\\b(?:m|qr)\\s*<(?:[^<>\\\\]|\\\\[\\s\\S])*>[msixpodualngc]*/,\n\n\t\t// The lookbehinds prevent -s from breaking\n\t\t// FIXME We don't handle change of separator like s(...)[...]\n\t\t// s/.../.../\n\t\t{\n\t\t\tpattern: /(^|[^-]\\b)(?:s|tr|y)\\s*([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\2(?:[^\\\\]|\\\\[\\s\\S])*?\\2[msixpodualngcer]*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\n\t\t// s a...a...a\n\t\t{\n\t\t\tpattern: /(^|[^-]\\b)(?:s|tr|y)\\s+([a-zA-Z0-9])(?:[^\\\\]|\\\\[\\s\\S])*?\\2(?:[^\\\\]|\\\\[\\s\\S])*?\\2[msixpodualngcer]*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\n\t\t// s(...)(...)\n\t\t{\n\t\t\tpattern: /(^|[^-]\\b)(?:s|tr|y)\\s*\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)\\s*\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)[msixpodualngcer]*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\n\t\t// s{...}{...}\n\t\t{\n\t\t\tpattern: /(^|[^-]\\b)(?:s|tr|y)\\s*\\{(?:[^{}\\\\]|\\\\[\\s\\S])*\\}\\s*\\{(?:[^{}\\\\]|\\\\[\\s\\S])*\\}[msixpodualngcer]*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\n\t\t// s[...][...]\n\t\t{\n\t\t\tpattern: /(^|[^-]\\b)(?:s|tr|y)\\s*\\[(?:[^[\\]\\\\]|\\\\[\\s\\S])*\\]\\s*\\[(?:[^[\\]\\\\]|\\\\[\\s\\S])*\\][msixpodualngcer]*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\n\t\t// s<...><...>\n\t\t{\n\t\t\tpattern: /(^|[^-]\\b)(?:s|tr|y)\\s*<(?:[^<>\\\\]|\\\\[\\s\\S])*>\\s*<(?:[^<>\\\\]|\\\\[\\s\\S])*>[msixpodualngcer]*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\n\t\t// /.../\n\t\t// The look-ahead tries to prevent two divisions on\n\t\t// the same line from being highlighted as regex.\n\t\t// This does not support multi-line regex.\n\t\t/\\/(?:[^\\/\\\\\\r\\n]|\\\\.)*\\/[msixpodualngc]*(?=\\s*(?:$|[\\r\\n,.;})&|\\-+*~<>!?^]|(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\\b))/\n\t],\n\n\t// FIXME Not sure about the handling of ::, ', and #\n\t'variable': [\n\t\t// ${^POSTMATCH}\n\t\t/[&*$@%]\\{\\^[A-Z]+\\}/,\n\t\t// $^V\n\t\t/[&*$@%]\\^[A-Z_]/,\n\t\t// ${...}\n\t\t/[&*$@%]#?(?=\\{)/,\n\t\t// $foo\n\t\t/[&*$@%]#?((::)*'?(?!\\d)[\\w$]+)+(::)*/i,\n\t\t// $1\n\t\t/[&*$@%]\\d+/,\n\t\t// $_, @_, %!\n\t\t// The negative lookahead prevents from breaking the %= operator\n\t\t/(?!%=)[$@%][!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~]/\n\t],\n\t'filehandle': {\n\t\t// <>, <FOO>, _\n\t\tpattern: /<(?![<=])\\S*>|\\b_\\b/,\n\t\talias: 'symbol'\n\t},\n\t'vstring': {\n\t\t// v1.2, 1.2.3\n\t\tpattern: /v\\d+(\\.\\d+)*|\\d+(\\.\\d+){2,}/,\n\t\talias: 'string'\n\t},\n\t'function': {\n\t\tpattern: /sub [a-z0-9_]+/i,\n\t\tinside: {\n\t\t\tkeyword: /sub/\n\t\t}\n\t},\n\t'keyword': /\\b(any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|say|state|sub|switch|undef|unless|until|use|when|while)\\b/,\n\t'number': /\\b-?(0x[\\dA-Fa-f](_?[\\dA-Fa-f])*|0b[01](_?[01])*|(\\d(_?\\d)*)?\\.?\\d(_?\\d)*([Ee][+-]?\\d+)?)\\b/,\n\t'operator': /-[rwxoRWXOezsfdlpSbctugkTBMAC]\\b|\\+[+=]?|-[-=>]?|\\*\\*?=?|\\/\\/?=?|=[=~>]?|~[~=]?|\\|\\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\\.(?:=|\\.\\.?)?|[\\\\?]|\\bx(?:=|\\b)|\\b(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\\b/,\n\t'punctuation': /[{}[\\];(),:]/\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-perl.js\n// module id = 70\n// module chunks = 0","Prism.languages.go = Prism.languages.extend('clike', {\n\t'keyword': /\\b(break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\\b/,\n\t'builtin': /\\b(bool|byte|complex(64|128)|error|float(32|64)|rune|string|u?int(8|16|32|64|)|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(ln)?|real|recover)\\b/,\n\t'boolean': /\\b(_|iota|nil|true|false)\\b/,\n\t'operator': /[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\./,\n\t'number': /\\b(-?(0x[a-f\\d]+|(\\d+\\.?\\d*|\\.\\d+)(e[-+]?\\d+)?)i?)\\b/i,\n\t'string': /(\"|'|`)(\\\\?.|\\r|\\n)*?\\1/\n});\ndelete Prism.languages.go['class-name'];\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-go.js\n// module id = 71\n// module chunks = 0","(function(Prism) {\n\tvar insideString = {\n\t\tvariable: [\n\t\t\t// Arithmetic Environment\n\t\t\t{\n\t\t\t\tpattern: /\\$?\\(\\([\\w\\W]+?\\)\\)/,\n\t\t\t\tinside: {\n\t\t\t\t\t// If there is a $ sign at the beginning highlight $(( and )) as variable\n\t\t\t\t\tvariable: [{\n\t\t\t\t\t\t\tpattern: /(^\\$\\(\\([\\w\\W]+)\\)\\)/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/^\\$\\(\\(/,\n\t\t\t\t\t],\n\t\t\t\t\tnumber: /\\b-?(?:0x[\\dA-Fa-f]+|\\d*\\.?\\d+(?:[Ee]-?\\d+)?)\\b/,\n\t\t\t\t\t// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic\n\t\t\t\t\toperator: /--?|-=|\\+\\+?|\\+=|!=?|~|\\*\\*?|\\*=|\\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\\^=?|\\|\\|?|\\|=|\\?|:/,\n\t\t\t\t\t// If there is no $ sign at the beginning highlight (( and )) as punctuation\n\t\t\t\t\tpunctuation: /\\(\\(?|\\)\\)?|,|;/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Command Substitution\n\t\t\t{\n\t\t\t\tpattern: /\\$\\([^)]+\\)|`[^`]+`/,\n\t\t\t\tinside: {\n\t\t\t\t\tvariable: /^\\$\\(|^`|\\)$|`$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t/\\$(?:[a-z0-9_#\\?\\*!@]+|\\{[^}]+\\})/i\n\t\t],\n\t};\n\n\tPrism.languages.bash = {\n\t\t'shebang': {\n\t\t\tpattern: /^#!\\s*\\/bin\\/bash|^#!\\s*\\/bin\\/sh/,\n\t\t\talias: 'important'\n\t\t},\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\"{\\\\])#.*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': [\n\t\t\t//Support for Here-Documents https://en.wikipedia.org/wiki/Here_document\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^<])<<\\s*)(?:\"|')?(\\w+?)(?:\"|')?\\s*\\r?\\n(?:[\\s\\S])*?\\r?\\n\\2/g,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: insideString\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /([\"'])(?:\\\\\\\\|\\\\?[^\\\\])*?\\1/g,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: insideString\n\t\t\t}\n\t\t],\n\t\t'variable': insideString.variable,\n\t\t// Originally based on http://ss64.com/bash/\n\t\t'function': {\n\t\t\tpattern: /(^|\\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|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|;|\\||&)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword': {\n\t\t\tpattern: /(^|\\s|;|\\||&)(?:let|:|\\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|\\s|;|\\||&)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'boolean': {\n\t\t\tpattern: /(^|\\s|;|\\||&)(?:true|false)(?=$|\\s|;|\\||&)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'operator': /&&?|\\|\\|?|==?|!=?|<<<?|>>|<=?|>=?|=~/,\n\t\t'punctuation': /\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];]/\n\t};\n\n\tvar inside = insideString.variable[1].inside;\n\tinside['function'] = Prism.languages.bash['function'];\n\tinside.keyword = Prism.languages.bash.keyword;\n\tinside.boolean = Prism.languages.bash.boolean;\n\tinside.operator = Prism.languages.bash.operator;\n\tinside.punctuation = Prism.languages.bash.punctuation;\n})(Prism);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-bash.js\n// module id = 72\n// module chunks = 0","Prism.languages.fsharp = Prism.languages.extend('clike', {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\(\\*[\\w\\W]*?\\*\\)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': /\\b(?:let|return|use|yield)(?:!\\B|\\b)|\\b(abstract|and|as|assert|base|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|global|if|in|inherit|inline|interface|internal|lazy|match|member|module|mutable|namespace|new|not|null|of|open|or|override|private|public|rec|select|static|struct|then|to|true|try|type|upcast|val|void|when|while|with|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall|trait|virtual|volatile)\\b/,\n\t'string': /(?:\"\"\"[\\s\\S]*?\"\"\"|@\"(?:\"\"|[^\"])*\"|(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\s\\S])*\\1)B?/,\n\t'number': [\n\t\t/\\b-?0x[\\da-fA-F]+(un|lf|LF)?\\b/,\n\t\t/\\b-?0b[01]+(y|uy)?\\b/,\n\t\t/\\b-?(\\d*\\.?\\d+|\\d+\\.)([fFmM]|[eE][+-]?\\d+)?\\b/,\n\t\t/\\b-?\\d+(y|uy|s|us|l|u|ul|L|UL|I)?\\b/\n\t]\n});\nPrism.languages.insertBefore('fsharp', 'keyword', {\n\t'preprocessor': {\n\t\tpattern: /^[^\\r\\n\\S]*#.*/m,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'directive': {\n\t\t\t\tpattern: /(\\s*#)\\b(else|endif|if|light|line|nowarn)\\b/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t}\n\t\t}\n\t}\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-fsharp.js\n// module id = 73\n// module chunks = 0","Prism.languages.typescript = Prism.languages.extend('javascript', {\n\t'keyword': /\\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield|module|declare|constructor|string|Function|any|number|boolean|Array|enum)\\b/\n});\n\nPrism.languages.ts = Prism.languages.typescript;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-typescript.js\n// module id = 74\n// module chunks = 0","(function (Prism) {\n\tvar inside = {\n\t\t'url': /url\\(([\"']?).*?\\1\\)/i,\n\t\t'string': /(\"|')(?:[^\\\\\\r\\n]|\\\\(?:\\r\\n|[\\s\\S]))*?\\1/,\n\t\t'interpolation': null, // See below\n\t\t'func': null, // See below\n\t\t'important': /\\B!(?:important|optional)\\b/i,\n\t\t'keyword': {\n\t\t\tpattern: /(^|\\s+)(?:(?:if|else|for|return|unless)(?=\\s+|$)|@[\\w-]+)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'hexcode': /#[\\da-f]{3,6}/i,\n\t\t'number': /\\b\\d+(?:\\.\\d+)?%?/,\n\t\t'boolean': /\\b(?:true|false)\\b/,\n\t\t'operator': [\n\t\t\t// We want non-word chars around \"-\" because it is\n\t\t\t// accepted in property names.\n\t\t\t/~|[+!\\/%<>?=]=?|[-:]=|\\*[*=]?|\\.+|&&|\\|\\||\\B-\\B|\\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\\b/\n\t\t],\n\t\t'punctuation': /[{}()\\[\\];:,]/\n\t};\n\n\tinside['interpolation'] = {\n\t\tpattern: /\\{[^\\r\\n}:]+\\}/,\n\t\talias: 'variable',\n\t\tinside: Prism.util.clone(inside)\n\t};\n\tinside['func'] = {\n\t\tpattern: /[\\w-]+\\([^)]*\\).*/,\n\t\tinside: {\n\t\t\t'function': /^[^(]+/,\n\t\t\trest: Prism.util.clone(inside)\n\t\t}\n\t};\n\n\tPrism.languages.stylus = {\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\\\\])(\\/\\*[\\w\\W]*?\\*\\/|\\/\\/.*)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'atrule-declaration': {\n\t\t\tpattern: /(^\\s*)@.+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'atrule': /^@[\\w-]+/,\n\t\t\t\trest: inside\n\t\t\t}\n\t\t},\n\t\t'variable-declaration': {\n\t\t\tpattern: /(^[ \\t]*)[\\w$-]+\\s*.?=[ \\t]*(?:(?:\\{[^}]*\\}|.+)|$)/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'variable': /^\\S+/,\n\t\t\t\trest: inside\n\t\t\t}\n\t\t},\n\n\t\t'statement': {\n\t\t\tpattern: /(^[ \\t]*)(?:if|else|for|return|unless)[ \\t]+.+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\tkeyword: /^\\S+/,\n\t\t\t\trest: inside\n\t\t\t}\n\t\t},\n\n\t\t// A property/value pair cannot end with a comma or a brace\n\t\t// It cannot have indented content unless it ended with a semicolon\n\t\t'property-declaration': {\n\t\t\tpattern: /((?:^|\\{)([ \\t]*))(?:[\\w-]|\\{[^}\\r\\n]+\\})+(?:\\s*:\\s*|[ \\t]+)[^{\\r\\n]*(?:;|[^{\\r\\n,](?=$)(?!(\\r?\\n|\\r)(?:\\{|\\2[ \\t]+)))/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'property': {\n\t\t\t\t\tpattern: /^[^\\s:]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'interpolation': inside.interpolation\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\trest: inside\n\t\t\t}\n\t\t},\n\n\n\n\t\t// A selector can contain parentheses only as part of a pseudo-element\n\t\t// It can span multiple lines.\n\t\t// It must end with a comma or an accolade or have indented content.\n\t\t'selector': {\n\t\t\tpattern: /(^[ \\t]*)(?:(?=\\S)(?:[^{}\\r\\n:()]|::?[\\w-]+(?:\\([^)\\r\\n]*\\))?|\\{[^}\\r\\n]+\\})+)(?:(?:\\r?\\n|\\r)(?:\\1(?:(?=\\S)(?:[^{}\\r\\n:()]|::?[\\w-]+(?:\\([^)\\r\\n]*\\))?|\\{[^}\\r\\n]+\\})+)))*(?:,$|\\{|(?=(?:\\r?\\n|\\r)(?:\\{|\\1[ \\t]+)))/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': inside.interpolation,\n\t\t\t\t'punctuation': /[{},]/\n\t\t\t}\n\t\t},\n\n\t\t'func': inside.func,\n\t\t'string': inside.string,\n\t\t'interpolation': inside.interpolation,\n\t\t'punctuation': /[{}()\\[\\];:.]/\n\t};\n}(Prism));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-stylus.js\n// module id = 75\n// module chunks = 0","/* FIXME :\n :extend() is not handled specifically : its highlighting is buggy.\n Mixin usage must be inside a ruleset to be highlighted.\n At-rules (e.g. import) containing interpolations are buggy.\n Detached rulesets are highlighted as at-rules.\n A comment before a mixin usage prevents the latter to be properly highlighted.\n */\n\nPrism.languages.less = Prism.languages.extend('css', {\n\t'comment': [\n\t\t/\\/\\*[\\w\\W]*?\\*\\//,\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\/.*/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'atrule': {\n\t\tpattern: /@[\\w-]+?(?:\\([^{}]+\\)|[^(){};])*?(?=\\s*\\{)/i,\n\t\tinside: {\n\t\t\t'punctuation': /[:()]/\n\t\t}\n\t},\n\t// selectors and mixins are considered the same\n\t'selector': {\n\t\tpattern: /(?:@\\{[\\w-]+\\}|[^{};\\s@])(?:@\\{[\\w-]+\\}|\\([^{}]*\\)|[^{};@])*?(?=\\s*\\{)/,\n\t\tinside: {\n\t\t\t// mixin parameters\n\t\t\t'variable': /@+[\\w-]+/\n\t\t}\n\t},\n\n\t'property': /(?:@\\{[\\w-]+\\}|[\\w-])+(?:\\+_?)?(?=\\s*:)/i,\n\t'punctuation': /[{}();:,]/,\n\t'operator': /[+\\-*\\/]/\n});\n\n// Invert function and punctuation positions\nPrism.languages.insertBefore('less', 'punctuation', {\n\t'function': Prism.languages.less.function\n});\n\nPrism.languages.insertBefore('less', 'property', {\n\t'variable': [\n\t\t// Variable declaration (the colon must be consumed!)\n\t\t{\n\t\t\tpattern: /@[\\w-]+\\s*:/,\n\t\t\tinside: {\n\t\t\t\t\"punctuation\": /:/\n\t\t\t}\n\t\t},\n\n\t\t// Variable usage\n\t\t/@@?[\\w-]+/\n\t],\n\t'mixin-usage': {\n\t\tpattern: /([{;]\\s*)[.#](?!\\d)[\\w-]+.*?(?=[(;])/,\n\t\tlookbehind: true,\n\t\talias: 'function'\n\t}\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-less.js\n// module id = 76\n// module chunks = 0","(function(Prism) {\n\tPrism.languages.sass = Prism.languages.extend('css', {\n\t\t// Sass comments don't need to be closed, only indented\n\t\t'comment': {\n\t\t\tpattern: /^([ \\t]*)\\/[\\/*].*(?:(?:\\r?\\n|\\r)\\1[ \\t]+.+)*/m,\n\t\t\tlookbehind: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('sass', 'atrule', {\n\t\t// We want to consume the whole line\n\t\t'atrule-line': {\n\t\t\t// Includes support for = and + shortcuts\n\t\t\tpattern: /^(?:[ \\t]*)[@+=].+/m,\n\t\t\tinside: {\n\t\t\t\t'atrule': /(?:@[\\w-]+|[+=])/m\n\t\t\t}\n\t\t}\n\t});\n\tdelete Prism.languages.sass.atrule;\n\n\n\tvar variable = /((\\$[-_\\w]+)|(#\\{\\$[-_\\w]+\\}))/i;\n\tvar operator = [\n\t\t/[+*\\/%]|[=!]=|<=?|>=?|\\b(?:and|or|not)\\b/,\n\t\t{\n\t\t\tpattern: /(\\s+)-(?=\\s)/,\n\t\t\tlookbehind: true\n\t\t}\n\t];\n\n\tPrism.languages.insertBefore('sass', 'property', {\n\t\t// We want to consume the whole line\n\t\t'variable-line': {\n\t\t\tpattern: /^[ \\t]*\\$.+/m,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /:/,\n\t\t\t\t'variable': variable,\n\t\t\t\t'operator': operator\n\t\t\t}\n\t\t},\n\t\t// We want to consume the whole line\n\t\t'property-line': {\n\t\t\tpattern: /^[ \\t]*(?:[^:\\s]+ *:.*|:[^:\\s]+.*)/m,\n\t\t\tinside: {\n\t\t\t\t'property': [\n\t\t\t\t\t/[^:\\s]+(?=\\s*:)/,\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /(:)[^:\\s]+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'punctuation': /:/,\n\t\t\t\t'variable': variable,\n\t\t\t\t'operator': operator,\n\t\t\t\t'important': Prism.languages.sass.important\n\t\t\t}\n\t\t}\n\t});\n\tdelete Prism.languages.sass.property;\n\tdelete Prism.languages.sass.important;\n\n\t// Now that whole lines for other patterns are consumed,\n\t// what's left should be selectors\n\tdelete Prism.languages.sass.selector;\n\tPrism.languages.insertBefore('sass', 'punctuation', {\n\t\t'selector': {\n\t\t\tpattern: /([ \\t]*)\\S(?:,?[^,\\r\\n]+)*(?:,(?:\\r?\\n|\\r)\\1[ \\t]+\\S(?:,?[^,\\r\\n]+)*)*/,\n\t\t\tlookbehind: true\n\t\t}\n\t});\n\n}(Prism));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-sass.js\n// module id = 77\n// module chunks = 0","(function(Prism) {\n\n\tvar handlebars_pattern = /\\{\\{\\{[\\w\\W]+?\\}\\}\\}|\\{\\{[\\w\\W]+?\\}\\}/g;\n\n\tPrism.languages.handlebars = Prism.languages.extend('markup', {\n\t\t'handlebars': {\n\t\t\tpattern: handlebars_pattern,\n\t\t\tinside: {\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^\\{\\{\\{?|\\}\\}\\}?$/i,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'string': /([\"'])(\\\\?.)*?\\1/,\n\t\t\t\t'number': /\\b-?(0x[\\dA-Fa-f]+|\\d*\\.?\\d+([Ee][+-]?\\d+)?)\\b/,\n\t\t\t\t'boolean': /\\b(true|false)\\b/,\n\t\t\t\t'block': {\n\t\t\t\t\tpattern: /^(\\s*~?\\s*)[#\\/]\\S+?(?=\\s*~?\\s*$|\\s)/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t},\n\t\t\t\t'brackets': {\n\t\t\t\t\tpattern: /\\[[^\\]]+\\]/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\tpunctuation: /\\[|\\]/,\n\t\t\t\t\t\tvariable: /[\\w\\W]+/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'punctuation': /[!\"#%&'()*+,.\\/;<=>@\\[\\\\\\]^`{|}~]/,\n\t\t\t\t'variable': /[^!\"#%&'()*+,.\\/;<=>@\\[\\\\\\]^`{|}~\\s]+/\n\t\t\t}\n\t\t}\n\t});\n\n\t// Comments are inserted at top so that they can\n\t// surround markup\n\tPrism.languages.insertBefore('handlebars', 'tag', {\n\t\t'handlebars-comment': {\n\t\t\tpattern: /\\{\\{![\\w\\W]*?\\}\\}/,\n\t\t\talias: ['handlebars','comment']\n\t\t}\n\t});\n\n\t// Tokenize all inline Handlebars expressions that are wrapped in {{ }} or {{{ }}}\n\t// This allows for easy Handlebars + markup highlighting\n\tPrism.hooks.add('before-highlight', function(env) {\n\t\tif (env.language !== 'handlebars') {\n\t\t\treturn;\n\t\t}\n\n\t\tenv.tokenStack = [];\n\n\t\tenv.backupCode = env.code;\n\t\tenv.code = env.code.replace(handlebars_pattern, function(match) {\n\t\t\tenv.tokenStack.push(match);\n\n\t\t\treturn '___HANDLEBARS' + env.tokenStack.length + '___';\n\t\t});\n\t});\n\n\t// Restore env.code for other plugins (e.g. line-numbers)\n\tPrism.hooks.add('before-insert', function(env) {\n\t\tif (env.language === 'handlebars') {\n\t\t\tenv.code = env.backupCode;\n\t\t\tdelete env.backupCode;\n\t\t}\n\t});\n\n\t// Re-insert the tokens after highlighting\n\t// and highlight them with defined grammar\n\tPrism.hooks.add('after-highlight', function(env) {\n\t\tif (env.language !== 'handlebars') {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, t; t = env.tokenStack[i]; i++) {\n\t\t\t// The replace prevents $$, $&, $`, $', $n, $nn from being interpreted as special patterns\n\t\t\tenv.highlightedCode = env.highlightedCode.replace('___HANDLEBARS' + (i + 1) + '___', Prism.highlight(t, env.grammar, 'handlebars').replace(/\\$/g, '$$$$'));\n\t\t}\n\n\t\tenv.element.innerHTML = env.highlightedCode;\n\t});\n\n}(Prism));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-handlebars.js\n// module id = 78\n// module chunks = 0","Prism.languages.applescript = {\n\t'comment': [\n\t\t// Allow one level of nesting\n\t\t/\\(\\*(?:\\(\\*[\\w\\W]*?\\*\\)|[\\w\\W])*?\\*\\)/,\n\t\t/--.+/,\n\t\t/#.+/\n\t],\n\t'string': /\"(?:\\\\?.)*?\"/,\n\t'number': /\\b-?\\d*\\.?\\d+([Ee]-?\\d+)?\\b/,\n\t'operator': [\n\t\t/[&=≠≤≥*+\\-\\/÷^]|[<>]=?/,\n\t\t/\\b(?:(?:start|begin|end)s? with|(?:(?:does not|doesn't) contain|contains?)|(?:is|isn't|is not) (?:in|contained by)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:(?:does not|doesn't) come|comes) (?:before|after)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equals|equal to|isn't|is not)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|or|div|mod|as|not))\\b/\n\t],\n\t'keyword': /\\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\\b/,\n\t'class': {\n\t\tpattern: /\\b(?:alias|application|boolean|class|constant|date|file|integer|list|number|POSIX file|real|record|reference|RGB color|script|text|centimetres|centimeters|feet|inches|kilometres|kilometers|metres|meters|miles|yards|square feet|square kilometres|square kilometers|square metres|square meters|square miles|square yards|cubic centimetres|cubic centimeters|cubic feet|cubic inches|cubic metres|cubic meters|cubic yards|gallons|litres|liters|quarts|grams|kilograms|ounces|pounds|degrees Celsius|degrees Fahrenheit|degrees Kelvin)\\b/,\n\t\talias: 'builtin'\n\t},\n\t'punctuation': /[{}():,¬«»《》]/\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-applescript.js\n// module id = 79\n// module chunks = 0","Prism.languages.actionscript = Prism.languages.extend('javascript', {\n\t'keyword': /\\b(?:as|break|case|catch|class|const|default|delete|do|else|extends|finally|for|function|if|implements|import|in|instanceof|interface|internal|is|native|new|null|package|private|protected|public|return|super|switch|this|throw|try|typeof|use|var|void|while|with|dynamic|each|final|get|include|namespace|native|override|set|static)\\b/,\n\t'operator': /\\+\\+|--|(?:[+\\-*\\/%^]|&&?|\\|\\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/\n});\nPrism.languages.actionscript['class-name'].alias = 'function';\n\nif (Prism.languages.markup) {\n\tPrism.languages.insertBefore('actionscript', 'string', {\n\t\t'xml': {\n\t\t\tpattern: /(^|[^.])<\\/?\\w+(?:\\s+[^\\s>\\/=]+=(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\w\\W])*\\2)*\\s*\\/?>/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\trest: Prism.languages.markup\n\t\t\t}\n\t\t}\n\t});\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-actionscript.js\n// module id = 80\n// module chunks = 0","Prism.languages.aspnet = Prism.languages.extend('markup', {\n\t'page-directive tag': {\n\t\tpattern: /<%\\s*@.*%>/i,\n\t\tinside: {\n\t\t\t'page-directive tag': /<%\\s*@\\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,\n\t\t\trest: Prism.languages.markup.tag.inside\n\t\t}\n\t},\n\t'directive tag': {\n\t\tpattern: /<%.*%>/i,\n\t\tinside: {\n\t\t\t'directive tag': /<%\\s*?[$=%#:]{0,2}|%>/i,\n\t\t\trest: Prism.languages.csharp\n\t\t}\n\t}\n});\n// Regexp copied from prism-markup, with a negative look-ahead added\nPrism.languages.aspnet.tag.pattern = /<(?!%)\\/?[^\\s>\\/]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\w\\W])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/i;\n\n// match directives of attribute value foo=\"<% Bar %>\"\nPrism.languages.insertBefore('inside', 'punctuation', {\n\t'directive tag': Prism.languages.aspnet['directive tag']\n}, Prism.languages.aspnet.tag.inside[\"attr-value\"]);\n\nPrism.languages.insertBefore('aspnet', 'comment', {\n\t'asp comment': /<%--[\\w\\W]*?--%>/\n});\n\n// script runat=\"server\" contains csharp, not javascript\nPrism.languages.insertBefore('aspnet', Prism.languages.javascript ? 'script' : 'tag', {\n\t'asp script': {\n\t\tpattern: /(<script(?=.*runat=['\"]?server['\"]?)[\\w\\W]*?>)[\\w\\W]*?(?=<\\/script>)/i,\n\t\tlookbehind: true,\n\t\tinside: Prism.languages.csharp || {}\n\t}\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-aspnet.js\n// module id = 81\n// module chunks = 0","Prism.languages.basic = {\n\t'string': /\"(?:\"\"|[!#$%&'()*,\\/:;<=>?^_ +\\-.A-Z\\d])*\"/i,\n\t'comment': {\n\t\tpattern: /(?:!|REM\\b).+/i,\n\t\tinside: {\n\t\t\t'keyword': /^REM/i\n\t\t}\n\t},\n\t'number': /(?:\\b|\\B[.-])(?:\\d+\\.?\\d*)(?:E[+-]?\\d+)?/i,\n\t'keyword': /\\b(?:AS|BEEP|BLOAD|BSAVE|CALL(?: ABSOLUTE)?|CASE|CHAIN|CHDIR|CLEAR|CLOSE|CLS|COM|COMMON|CONST|DATA|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DIM|DO|DOUBLE|ELSE|ELSEIF|END|ENVIRON|ERASE|ERROR|EXIT|FIELD|FILES|FOR|FUNCTION|GET|GOSUB|GOTO|IF|INPUT|INTEGER|IOCTL|KEY|KILL|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|MKDIR|NAME|NEXT|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPTION BASE|OUT|POKE|PUT|READ|REDIM|REM|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SHARED|SINGLE|SELECT CASE|SHELL|SLEEP|STATIC|STEP|STOP|STRING|SUB|SWAP|SYSTEM|THEN|TIMER|TO|TROFF|TRON|TYPE|UNLOCK|UNTIL|USING|VIEW PRINT|WAIT|WEND|WHILE|WRITE)(?:\\$|\\b)/i,\n\t'function': /\\b(?:ABS|ACCESS|ACOS|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CAUSE|CEIL|CHR|CLIP|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATE|DATUM|DEBUG|DECIMAL|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DISPLAY|DOT|ELAPSED|EPS|ERASABLE|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FP|GO|GRAPH|HANDLER|IDN|IMAGE|IN|INT|INTERNAL|IP|IS|KEYED|LBOUND|LCASE|LEFT|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LTRIM|MARGIN|MAT|MAX|MAXNUM|MID|MIN|MISSING|MOD|NATIVE|NUL|NUMERIC|OF|OPTION|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RETRY|REWRITE|RIGHT|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STR|STREAM|STYLE|TAB|TAN|TANH|TEMPLATE|TEXT|THERE|TIME|TIMEOUT|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|USE|VAL|VARIABLE|VIEWPORT|WHEN|WINDOW|WITH|ZER|ZONEWIDTH)(?:\\$|\\b)/i,\n\t'operator': /<[=>]?|>=?|[+\\-*\\/^=&]|\\b(?:AND|EQV|IMP|NOT|OR|XOR)\\b/i,\n\t'punctuation': /[,;:()]/\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-basic.js\n// module id = 82\n// module chunks = 0","Prism.languages.c = Prism.languages.extend('clike', {\n\t'keyword': /\\b(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/,\n\t'operator': /\\-[>-]?|\\+\\+?|!=?|<<?=?|>>?=?|==?|&&?|\\|?\\||[~^%?*\\/]/,\n\t'number': /\\b-?(?:0x[\\da-f]+|\\d*\\.?\\d+(?:e[+-]?\\d+)?)[ful]*\\b/i\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'macro': {\n\t\t// allow for multiline macro definitions\n\t\t// spaces after the # character compile fine with gcc\n\t\tpattern: /(^\\s*)#\\s*[a-z]+([^\\r\\n\\\\]|\\\\.|\\\\(?:\\r\\n?|\\n))*/im,\n\t\tlookbehind: true,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t// highlight the path of the include statement as a string\n\t\t\t'string': {\n\t\t\t\tpattern: /(#\\s*include\\s*)(<.+?>|(\"|')(\\\\?.)+?\\3)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t// highlight macro directives as keywords\n\t\t\t'directive': {\n\t\t\t\tpattern: /(#\\s*)\\b(define|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\\b/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t}\n\t\t}\n\t},\n\t// highlight predefined macros as constants\n\t'constant': /\\b(__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|stdin|stdout|stderr)\\b/\n});\n\ndelete Prism.languages.c['class-name'];\ndelete Prism.languages.c['boolean'];\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-c.js\n// module id = 83\n// module chunks = 0","// Based on Free Pascal\n\n/* TODO\n\tSupport inline asm ?\n*/\n\nPrism.languages.pascal = {\n\t'comment': [\n\t\t/\\(\\*[\\s\\S]+?\\*\\)/,\n\t\t/\\{[\\s\\S]+?\\}/,\n\t\t/\\/\\/.*/\n\t],\n\t'string': /(?:'(?:''|[^'\\r\\n])*'|#[&$%]?[a-f\\d]+)+|\\^[a-z]/i,\n\t'keyword': [\n\t\t{\n\t\t\t// Turbo Pascal\n\t\t\tpattern: /(^|[^&])\\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\\b/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// Free Pascal\n\t\t\tpattern: /(^|[^&])\\b(?:dispose|exit|false|new|true)\\b/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// Object Pascal\n\t\t\tpattern: /(^|[^&])\\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\\b/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// Modifiers\n\t\t\tpattern: /(^|[^&])\\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\\b/i,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'number': [\n\t\t// Hexadecimal, octal and binary\n\t\t/[+-]?(?:[&%]\\d+|\\$[a-f\\d]+)/i,\n\t\t// Decimal\n\t\t/([+-]|\\b)\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?/i\n\t],\n\t'operator': [\n\t\t/\\.\\.|\\*\\*|:=|<[<=>]?|>[>=]?|[+\\-*\\/]=?|[@^=]/i,\n\t\t{\n\t\t\tpattern: /(^|[^&])\\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\\b/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'punctuation': /\\(\\.|\\.\\)|[()\\[\\]:;,.]/\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-pascal.js\n// module id = 84\n// module chunks = 0","Prism.languages.vim = {\n\t'string': /\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?:[^'\\r\\n]|'')*'/,\n\t'comment': /\".*/,\n\t'function': /\\w+(?=\\()/,\n\t'keyword': /\\b(?:ab|abbreviate|abc|abclear|abo|aboveleft|al|all|arga|argadd|argd|argdelete|argdo|arge|argedit|argg|argglobal|argl|arglocal|ar|args|argu|argument|as|ascii|bad|badd|ba|ball|bd|bdelete|be|bel|belowright|bf|bfirst|bl|blast|bm|bmodified|bn|bnext|bN|bNext|bo|botright|bp|bprevious|brea|break|breaka|breakadd|breakd|breakdel|breakl|breaklist|br|brewind|bro|browse|bufdo|b|buffer|buffers|bun|bunload|bw|bwipeout|ca|cabbrev|cabc|cabclear|caddb|caddbuffer|cad|caddexpr|caddf|caddfile|cal|call|cat|catch|cb|cbuffer|cc|ccl|cclose|cd|ce|center|cex|cexpr|cf|cfile|cfir|cfirst|cgetb|cgetbuffer|cgete|cgetexpr|cg|cgetfile|c|change|changes|chd|chdir|che|checkpath|checkt|checktime|cla|clast|cl|clist|clo|close|cmapc|cmapclear|cnew|cnewer|cn|cnext|cN|cNext|cnf|cnfile|cNfcNfile|cnorea|cnoreabbrev|col|colder|colo|colorscheme|comc|comclear|comp|compiler|conf|confirm|con|continue|cope|copen|co|copy|cpf|cpfile|cp|cprevious|cq|cquit|cr|crewind|cuna|cunabbrev|cu|cunmap|cw|cwindow|debugg|debuggreedy|delc|delcommand|d|delete|delf|delfunction|delm|delmarks|diffg|diffget|diffoff|diffpatch|diffpu|diffput|diffsplit|diffthis|diffu|diffupdate|dig|digraphs|di|display|dj|djump|dl|dlist|dr|drop|ds|dsearch|dsp|dsplit|earlier|echoe|echoerr|echom|echomsg|echon|e|edit|el|else|elsei|elseif|em|emenu|endfo|endfor|endf|endfunction|endfun|en|endif|endt|endtry|endw|endwhile|ene|enew|ex|exi|exit|exu|exusage|f|file|files|filetype|fina|finally|fin|find|fini|finish|fir|first|fix|fixdel|fo|fold|foldc|foldclose|folddoc|folddoclosed|foldd|folddoopen|foldo|foldopen|for|fu|fun|function|go|goto|gr|grep|grepa|grepadd|ha|hardcopy|h|help|helpf|helpfind|helpg|helpgrep|helpt|helptags|hid|hide|his|history|ia|iabbrev|iabc|iabclear|if|ij|ijump|il|ilist|imapc|imapclear|in|inorea|inoreabbrev|isearch|isp|isplit|iuna|iunabbrev|iu|iunmap|j|join|ju|jumps|k|keepalt|keepj|keepjumps|kee|keepmarks|laddb|laddbuffer|lad|laddexpr|laddf|laddfile|lan|language|la|last|later|lb|lbuffer|lc|lcd|lch|lchdir|lcl|lclose|let|left|lefta|leftabove|lex|lexpr|lf|lfile|lfir|lfirst|lgetb|lgetbuffer|lgete|lgetexpr|lg|lgetfile|lgr|lgrep|lgrepa|lgrepadd|lh|lhelpgrep|l|list|ll|lla|llast|lli|llist|lmak|lmake|lm|lmap|lmapc|lmapclear|lnew|lnewer|lne|lnext|lN|lNext|lnf|lnfile|lNf|lNfile|ln|lnoremap|lo|loadview|loc|lockmarks|lockv|lockvar|lol|lolder|lop|lopen|lpf|lpfile|lp|lprevious|lr|lrewind|ls|lt|ltag|lu|lunmap|lv|lvimgrep|lvimgrepa|lvimgrepadd|lw|lwindow|mak|make|ma|mark|marks|mat|match|menut|menutranslate|mk|mkexrc|mks|mksession|mksp|mkspell|mkvie|mkview|mkv|mkvimrc|mod|mode|m|move|mzf|mzfile|mz|mzscheme|nbkey|new|n|next|N|Next|nmapc|nmapclear|noh|nohlsearch|norea|noreabbrev|nu|number|nun|nunmap|omapc|omapclear|on|only|o|open|opt|options|ou|ounmap|pc|pclose|ped|pedit|pe|perl|perld|perldo|po|pop|popu|popu|popup|pp|ppop|pre|preserve|prev|previous|p|print|P|Print|profd|profdel|prof|profile|promptf|promptfind|promptr|promptrepl|ps|psearch|pta|ptag|ptf|ptfirst|ptj|ptjump|ptl|ptlast|ptn|ptnext|ptN|ptNext|ptp|ptprevious|ptr|ptrewind|pts|ptselect|pu|put|pw|pwd|pyf|pyfile|py|python|qa|qall|q|quit|quita|quitall|r|read|rec|recover|redi|redir|red|redo|redr|redraw|redraws|redrawstatus|reg|registers|res|resize|ret|retab|retu|return|rew|rewind|ri|right|rightb|rightbelow|rub|ruby|rubyd|rubydo|rubyf|rubyfile|ru|runtime|rv|rviminfo|sal|sall|san|sandbox|sa|sargument|sav|saveas|sba|sball|sbf|sbfirst|sbl|sblast|sbm|sbmodified|sbn|sbnext|sbN|sbNext|sbp|sbprevious|sbr|sbrewind|sb|sbuffer|scripte|scriptencoding|scrip|scriptnames|se|set|setf|setfiletype|setg|setglobal|setl|setlocal|sf|sfind|sfir|sfirst|sh|shell|sign|sil|silent|sim|simalt|sla|slast|sl|sleep|sm|smagic|sm|smap|smapc|smapclear|sme|smenu|sn|snext|sN|sNext|sni|sniff|sno|snomagic|snor|snoremap|snoreme|snoremenu|sor|sort|so|source|spelld|spelldump|spe|spellgood|spelli|spellinfo|spellr|spellrepall|spellu|spellundo|spellw|spellwrong|sp|split|spr|sprevious|sre|srewind|sta|stag|startg|startgreplace|star|startinsert|startr|startreplace|stj|stjump|st|stop|stopi|stopinsert|sts|stselect|sun|sunhide|sunm|sunmap|sus|suspend|sv|sview|syncbind|t|tab|tabc|tabclose|tabd|tabdo|tabe|tabedit|tabf|tabfind|tabfir|tabfirst|tabl|tablast|tabm|tabmove|tabnew|tabn|tabnext|tabN|tabNext|tabo|tabonly|tabp|tabprevious|tabr|tabrewind|tabs|ta|tag|tags|tc|tcl|tcld|tcldo|tclf|tclfile|te|tearoff|tf|tfirst|th|throw|tj|tjump|tl|tlast|tm|tm|tmenu|tn|tnext|tN|tNext|to|topleft|tp|tprevious|tr|trewind|try|ts|tselect|tu|tu|tunmenu|una|unabbreviate|u|undo|undoj|undojoin|undol|undolist|unh|unhide|unlet|unlo|unlockvar|unm|unmap|up|update|verb|verbose|ve|version|vert|vertical|vie|view|vim|vimgrep|vimgrepa|vimgrepadd|vi|visual|viu|viusage|vmapc|vmapclear|vne|vnew|vs|vsplit|vu|vunmap|wa|wall|wh|while|winc|wincmd|windo|winp|winpos|win|winsize|wn|wnext|wN|wNext|wp|wprevious|wq|wqa|wqall|w|write|ws|wsverb|wv|wviminfo|X|xa|xall|x|xit|xm|xmap|xmapc|xmapclear|xme|xmenu|XMLent|XMLns|xn|xnoremap|xnoreme|xnoremenu|xu|xunmap|y|yank)\\b/,\n\t'builtin': /\\b(?:autocmd|acd|ai|akm|aleph|allowrevins|altkeymap|ambiwidth|ambw|anti|antialias|arab|arabic|arabicshape|ari|arshape|autochdir|autoindent|autoread|autowrite|autowriteall|aw|awa|background|backspace|backup|backupcopy|backupdir|backupext|backupskip|balloondelay|ballooneval|balloonexpr|bdir|bdlay|beval|bex|bexpr|bg|bh|bin|binary|biosk|bioskey|bk|bkc|bomb|breakat|brk|browsedir|bs|bsdir|bsk|bt|bufhidden|buflisted|buftype|casemap|ccv|cdpath|cedit|cfu|ch|charconvert|ci|cin|cindent|cink|cinkeys|cino|cinoptions|cinw|cinwords|clipboard|cmdheight|cmdwinheight|cmp|cms|columns|com|comments|commentstring|compatible|complete|completefunc|completeopt|consk|conskey|copyindent|cot|cpo|cpoptions|cpt|cscopepathcomp|cscopeprg|cscopequickfix|cscopetag|cscopetagorder|cscopeverbose|cspc|csprg|csqf|cst|csto|csverb|cuc|cul|cursorcolumn|cursorline|cwh|debug|deco|def|define|delcombine|dex|dg|dict|dictionary|diff|diffexpr|diffopt|digraph|dip|dir|directory|dy|ea|ead|eadirection|eb|ed|edcompatible|ef|efm|ei|ek|enc|encoding|endofline|eol|ep|equalalways|equalprg|errorbells|errorfile|errorformat|esckeys|et|eventignore|expandtab|exrc|fcl|fcs|fdc|fde|fdi|fdl|fdls|fdm|fdn|fdo|fdt|fen|fenc|fencs|fex|ff|ffs|fileencoding|fileencodings|fileformat|fileformats|fillchars|fk|fkmap|flp|fml|fmr|foldcolumn|foldenable|foldexpr|foldignore|foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines|foldnestmax|foldtext|formatexpr|formatlistpat|formatoptions|formatprg|fp|fs|fsync|ft|gcr|gd|gdefault|gfm|gfn|gfs|gfw|ghr|gp|grepformat|grepprg|gtl|gtt|guicursor|guifont|guifontset|guifontwide|guiheadroom|guioptions|guipty|guitablabel|guitabtooltip|helpfile|helpheight|helplang|hf|hh|hi|hidden|highlight|hk|hkmap|hkmapp|hkp|hl|hlg|hls|hlsearch|ic|icon|iconstring|ignorecase|im|imactivatekey|imak|imc|imcmdline|imd|imdisable|imi|iminsert|ims|imsearch|inc|include|includeexpr|incsearch|inde|indentexpr|indentkeys|indk|inex|inf|infercase|insertmode|isf|isfname|isi|isident|isk|iskeyword|isprint|joinspaces|js|key|keymap|keymodel|keywordprg|km|kmp|kp|langmap|langmenu|laststatus|lazyredraw|lbr|lcs|linebreak|lines|linespace|lisp|lispwords|listchars|loadplugins|lpl|lsp|lz|macatsui|magic|makeef|makeprg|matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth|maxmem|maxmempattern|maxmemtot|mco|mef|menuitems|mfd|mh|mis|mkspellmem|ml|mls|mm|mmd|mmp|mmt|modeline|modelines|modifiable|modified|more|mouse|mousef|mousefocus|mousehide|mousem|mousemodel|mouses|mouseshape|mouset|mousetime|mp|mps|msm|mzq|mzquantum|nf|nrformats|numberwidth|nuw|odev|oft|ofu|omnifunc|opendevice|operatorfunc|opfunc|osfiletype|pa|para|paragraphs|paste|pastetoggle|patchexpr|patchmode|path|pdev|penc|pex|pexpr|pfn|ph|pheader|pi|pm|pmbcs|pmbfn|popt|preserveindent|previewheight|previewwindow|printdevice|printencoding|printexpr|printfont|printheader|printmbcharset|printmbfont|printoptions|prompt|pt|pumheight|pvh|pvw|qe|quoteescape|readonly|remap|report|restorescreen|revins|rightleft|rightleftcmd|rl|rlc|ro|rs|rtp|ruf|ruler|rulerformat|runtimepath|sbo|sc|scb|scr|scroll|scrollbind|scrolljump|scrolloff|scrollopt|scs|sect|sections|secure|sel|selection|selectmode|sessionoptions|sft|shcf|shellcmdflag|shellpipe|shellquote|shellredir|shellslash|shelltemp|shelltype|shellxquote|shiftround|shiftwidth|shm|shortmess|shortname|showbreak|showcmd|showfulltag|showmatch|showmode|showtabline|shq|si|sidescroll|sidescrolloff|siso|sj|slm|smartcase|smartindent|smarttab|smc|smd|softtabstop|sol|spc|spell|spellcapcheck|spellfile|spelllang|spellsuggest|spf|spl|splitbelow|splitright|sps|sr|srr|ss|ssl|ssop|stal|startofline|statusline|stl|stmp|su|sua|suffixes|suffixesadd|sw|swapfile|swapsync|swb|swf|switchbuf|sws|sxq|syn|synmaxcol|syntax|tabline|tabpagemax|tabstop|tagbsearch|taglength|tagrelative|tagstack|tal|tb|tbi|tbidi|tbis|tbs|tenc|term|termbidi|termencoding|terse|textauto|textmode|textwidth|tgst|thesaurus|tildeop|timeout|timeoutlen|title|titlelen|titleold|titlestring|toolbar|toolbariconsize|top|tpm|tsl|tsr|ttimeout|ttimeoutlen|ttm|tty|ttybuiltin|ttyfast|ttym|ttymouse|ttyscroll|ttytype|tw|tx|uc|ul|undolevels|updatecount|updatetime|ut|vb|vbs|vdir|verbosefile|vfile|viewdir|viewoptions|viminfo|virtualedit|visualbell|vop|wak|warn|wb|wc|wcm|wd|weirdinvert|wfh|wfw|whichwrap|wi|wig|wildchar|wildcharm|wildignore|wildmenu|wildmode|wildoptions|wim|winaltkeys|window|winfixheight|winfixwidth|winheight|winminheight|winminwidth|winwidth|wiv|wiw|wm|wmh|wmnu|wmw|wop|wrap|wrapmargin|wrapscan|writeany|writebackup|writedelay|ww|noacd|noai|noakm|noallowrevins|noaltkeymap|noanti|noantialias|noar|noarab|noarabic|noarabicshape|noari|noarshape|noautochdir|noautoindent|noautoread|noautowrite|noautowriteall|noaw|noawa|nobackup|noballooneval|nobeval|nobin|nobinary|nobiosk|nobioskey|nobk|nobl|nobomb|nobuflisted|nocf|noci|nocin|nocindent|nocompatible|noconfirm|noconsk|noconskey|nocopyindent|nocp|nocscopetag|nocscopeverbose|nocst|nocsverb|nocuc|nocul|nocursorcolumn|nocursorline|nodeco|nodelcombine|nodg|nodiff|nodigraph|nodisable|noea|noeb|noed|noedcompatible|noek|noendofline|noeol|noequalalways|noerrorbells|noesckeys|noet|noex|noexpandtab|noexrc|nofen|nofk|nofkmap|nofoldenable|nogd|nogdefault|noguipty|nohid|nohidden|nohk|nohkmap|nohkmapp|nohkp|nohls|noic|noicon|noignorecase|noim|noimc|noimcmdline|noimd|noincsearch|noinf|noinfercase|noinsertmode|nois|nojoinspaces|nojs|nolazyredraw|nolbr|nolinebreak|nolisp|nolist|noloadplugins|nolpl|nolz|noma|nomacatsui|nomagic|nomh|noml|nomod|nomodeline|nomodifiable|nomodified|nomore|nomousef|nomousefocus|nomousehide|nonu|nonumber|noodev|noopendevice|nopaste|nopi|nopreserveindent|nopreviewwindow|noprompt|nopvw|noreadonly|noremap|norestorescreen|norevins|nori|norightleft|norightleftcmd|norl|norlc|noro|nors|noru|noruler|nosb|nosc|noscb|noscrollbind|noscs|nosecure|nosft|noshellslash|noshelltemp|noshiftround|noshortname|noshowcmd|noshowfulltag|noshowmatch|noshowmode|nosi|nosm|nosmartcase|nosmartindent|nosmarttab|nosmd|nosn|nosol|nospell|nosplitbelow|nosplitright|nospr|nosr|nossl|nosta|nostartofline|nostmp|noswapfile|noswf|nota|notagbsearch|notagrelative|notagstack|notbi|notbidi|notbs|notermbidi|noterse|notextauto|notextmode|notf|notgst|notildeop|notimeout|notitle|noto|notop|notr|nottimeout|nottybuiltin|nottyfast|notx|novb|novisualbell|nowa|nowarn|nowb|noweirdinvert|nowfh|nowfw|nowildmenu|nowinfixheight|nowinfixwidth|nowiv|nowmnu|nowrap|nowrapscan|nowrite|nowriteany|nowritebackup|nows|invacd|invai|invakm|invallowrevins|invaltkeymap|invanti|invantialias|invar|invarab|invarabic|invarabicshape|invari|invarshape|invautochdir|invautoindent|invautoread|invautowrite|invautowriteall|invaw|invawa|invbackup|invballooneval|invbeval|invbin|invbinary|invbiosk|invbioskey|invbk|invbl|invbomb|invbuflisted|invcf|invci|invcin|invcindent|invcompatible|invconfirm|invconsk|invconskey|invcopyindent|invcp|invcscopetag|invcscopeverbose|invcst|invcsverb|invcuc|invcul|invcursorcolumn|invcursorline|invdeco|invdelcombine|invdg|invdiff|invdigraph|invdisable|invea|inveb|inved|invedcompatible|invek|invendofline|inveol|invequalalways|inverrorbells|invesckeys|invet|invex|invexpandtab|invexrc|invfen|invfk|invfkmap|invfoldenable|invgd|invgdefault|invguipty|invhid|invhidden|invhk|invhkmap|invhkmapp|invhkp|invhls|invhlsearch|invic|invicon|invignorecase|invim|invimc|invimcmdline|invimd|invincsearch|invinf|invinfercase|invinsertmode|invis|invjoinspaces|invjs|invlazyredraw|invlbr|invlinebreak|invlisp|invlist|invloadplugins|invlpl|invlz|invma|invmacatsui|invmagic|invmh|invml|invmod|invmodeline|invmodifiable|invmodified|invmore|invmousef|invmousefocus|invmousehide|invnu|invnumber|invodev|invopendevice|invpaste|invpi|invpreserveindent|invpreviewwindow|invprompt|invpvw|invreadonly|invremap|invrestorescreen|invrevins|invri|invrightleft|invrightleftcmd|invrl|invrlc|invro|invrs|invru|invruler|invsb|invsc|invscb|invscrollbind|invscs|invsecure|invsft|invshellslash|invshelltemp|invshiftround|invshortname|invshowcmd|invshowfulltag|invshowmatch|invshowmode|invsi|invsm|invsmartcase|invsmartindent|invsmarttab|invsmd|invsn|invsol|invspell|invsplitbelow|invsplitright|invspr|invsr|invssl|invsta|invstartofline|invstmp|invswapfile|invswf|invta|invtagbsearch|invtagrelative|invtagstack|invtbi|invtbidi|invtbs|invtermbidi|invterse|invtextauto|invtextmode|invtf|invtgst|invtildeop|invtimeout|invtitle|invto|invtop|invtr|invttimeout|invttybuiltin|invttyfast|invtx|invvb|invvisualbell|invwa|invwarn|invwb|invweirdinvert|invwfh|invwfw|invwildmenu|invwinfixheight|invwinfixwidth|invwiv|invwmnu|invwrap|invwrapscan|invwrite|invwriteany|invwritebackup|invws|t_AB|t_AF|t_al|t_AL|t_bc|t_cd|t_ce|t_Ce|t_cl|t_cm|t_Co|t_cs|t_Cs|t_CS|t_CV|t_da|t_db|t_dl|t_DL|t_EI|t_F1|t_F2|t_F3|t_F4|t_F5|t_F6|t_F7|t_F8|t_F9|t_fs|t_IE|t_IS|t_k1|t_K1|t_k2|t_k3|t_K3|t_k4|t_K4|t_k5|t_K5|t_k6|t_K6|t_k7|t_K7|t_k8|t_K8|t_k9|t_K9|t_KA|t_kb|t_kB|t_KB|t_KC|t_kd|t_kD|t_KD|t_ke|t_KE|t_KF|t_KG|t_kh|t_KH|t_kI|t_KI|t_KJ|t_KK|t_kl|t_KL|t_kN|t_kP|t_kr|t_ks|t_ku|t_le|t_mb|t_md|t_me|t_mr|t_ms|t_nd|t_op|t_RI|t_RV|t_Sb|t_se|t_Sf|t_SI|t_so|t_sr|t_te|t_ti|t_ts|t_ue|t_us|t_ut|t_vb|t_ve|t_vi|t_vs|t_WP|t_WS|t_xs|t_ZH|t_ZR)\\b/,\n\t'number': /\\b(?:0x[\\da-f]+|\\d+(?:\\.\\d+)?)\\b/i,\n\t'operator': /\\|\\||&&|[-+.]=?|[=!](?:[=~][#?]?)?|[<>]=?[#?]?|[*\\/%?]|\\b(?:is(?:not)?)\\b/,\n\t'punctuation': /[{}[\\](),;:]/\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-vim.js\n// module id = 85\n// module chunks = 0","// issues: nested multiline comments\nPrism.languages.swift = Prism.languages.extend('clike', {\n\t'string': {\n\t\tpattern: /(\"|')(\\\\(?:\\((?:[^()]|\\([^)]+\\))+\\)|\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /\\\\\\((?:[^()]|\\([^)]+\\))+\\)/,\n\t\t\t\tinside: {\n\t\t\t\t\tdelimiter: {\n\t\t\t\t\t\tpattern: /^\\\\\\(|\\)$/,\n\t\t\t\t\t\talias: 'variable'\n\t\t\t\t\t}\n\t\t\t\t\t// See rest below\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t'keyword': /\\b(as|associativity|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic(?:Type)?|else|enum|extension|fallthrough|final|for|func|get|guard|if|import|in|infix|init|inout|internal|is|lazy|left|let|mutating|new|none|nonmutating|operator|optional|override|postfix|precedence|prefix|private|Protocol|public|repeat|required|rethrows|return|right|safe|self|Self|set|static|struct|subscript|super|switch|throws?|try|Type|typealias|unowned|unsafe|var|weak|where|while|willSet|__(?:COLUMN__|FILE__|FUNCTION__|LINE__))\\b/,\n\t'number': /\\b([\\d_]+(\\.[\\de_]+)?|0x[a-f0-9_]+(\\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b/i,\n\t'constant': /\\b(nil|[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\\b/,\n\t'atrule': /@\\b(IB(?:Outlet|Designable|Action|Inspectable)|class_protocol|exported|noreturn|NS(?:Copying|Managed)|objc|UIApplicationMain|auto_closure)\\b/,\n\t'builtin': /\\b([A-Z]\\S+|abs|advance|alignof(?:Value)?|assert|contains|count(?:Elements)?|debugPrint(?:ln)?|distance|drop(?:First|Last)|dump|enumerate|equal|filter|find|first|getVaList|indices|isEmpty|join|last|lexicographicalCompare|map|max(?:Element)?|min(?:Element)?|numericCast|overlaps|partition|print(?:ln)?|reduce|reflect|reverse|sizeof(?:Value)?|sort(?:ed)?|split|startsWith|stride(?:of(?:Value)?)?|suffix|swap|toDebugString|toString|transcode|underestimateCount|unsafeBitCast|with(?:ExtendedLifetime|Unsafe(?:MutablePointers?|Pointers?)|VaList))\\b/\n});\nPrism.languages.swift['string'].inside['interpolation'].inside.rest = Prism.util.clone(Prism.languages.swift);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-swift.js\n// module id = 86\n// module chunks = 0","Prism.languages.objectivec = Prism.languages.extend('c', {\n\t'keyword': /\\b(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|in|self|super)\\b|(@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\\b/,\n\t'string': /(\"|')(\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1|@\"(\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t'operator': /-[->]?|\\+\\+?|!=?|<<?=?|>>?=?|==?|&&?|\\|\\|?|[~^%?*\\/@]/\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-objectivec.js\n// module id = 87\n// module chunks = 0","Prism.languages.sql= {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\w\\W]*?\\*\\/|(?:--|\\/\\/|#).*)/,\n\t\tlookbehind: true\n\t},\n\t'string' : {\n\t\tpattern: /(^|[^@\\\\])(\"|')(?:\\\\?[\\s\\S])*?\\2/,\n\t\tlookbehind: true\n\t},\n\t'variable': /@[\\w.$]+|@(\"|'|`)(?:\\\\?[\\s\\S])+?\\1/,\n\t'function': /\\b(?:COUNT|SUM|AVG|MIN|MAX|FIRST|LAST|UCASE|LCASE|MID|LEN|ROUND|NOW|FORMAT)(?=\\s*\\()/i, // Should we highlight user defined functions too?\n\t'keyword': /\\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR VARYING|CHARACTER (?:SET|VARYING)|CHARSET|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|DATA(?:BASES?)?|DATE(?:TIME)?|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITER(?:S)?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE(?: PRECISION)?|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE KEY|ELSE|ENABLE|ENCLOSED BY|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPE(?:D BY)?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTO|INVOKER|ISOLATION LEVEL|JOIN|KEYS?|KILL|LANGUAGE SQL|LAST|LEFT|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MODIFIES SQL DATA|MODIFY|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL(?: CHAR VARYING| CHARACTER(?: VARYING)?| VARCHAR)?|NATURAL|NCHAR(?: VARCHAR)?|NEXT|NO(?: SQL|CHECK|CYCLE)?|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READ(?:S SQL DATA|TEXT)?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEATABLE|REPLICATION|REQUIRE|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE MODE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|START(?:ING BY)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED BY|TEXT(?:SIZE)?|THEN|TIMESTAMP|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNPIVOT|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?)\\b/i,\n\t'boolean': /\\b(?:TRUE|FALSE|NULL)\\b/i,\n\t'number': /\\b-?(?:0x)?\\d*\\.?[\\da-f]+\\b/,\n\t'operator': /[-+*\\/=%^~]|&&?|\\|?\\||!=?|<(?:=>?|<|>)?|>[>=]?|\\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\\b/i,\n\t'punctuation': /[;[\\]()`,.]/\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-sql.js\n// module id = 88\n// module chunks = 0","Prism.languages.scheme = {\n\t'comment' : /;.*/,\n\t'string' : /\"(?:[^\"\\\\\\r\\n]|\\\\.)*?\"|'[^('\\s]*/,\n\t'keyword' : {\n\t\tpattern : /(\\()(?:define(?:-syntax|-library|-values)?|(?:case-)?lambda|let(?:\\*|rec)?(?:-values)?|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-rules)/,\n\t\tlookbehind : true\n\t},\n\t'builtin' : {\n\t\tpattern : /(\\()(?:(?:cons|car|cdr|list|call-with-current-continuation|call\\/cc|append|abs|apply|eval)\\b|null\\?|pair\\?|boolean\\?|eof-object\\?|char\\?|procedure\\?|number\\?|port\\?|string\\?|vector\\?|symbol\\?|bytevector\\?)/,\n\t\tlookbehind : true\n\t},\n\t'number' : {\n\t\tpattern: /(\\s|\\))[-+]?[0-9]*\\.?[0-9]+(?:\\s*[-+]\\s*[0-9]*\\.?[0-9]+i)?\\b/,\n\t\tlookbehind: true\n\t},\n\t'boolean' : /#[tf]/,\n\t'operator': {\n\t\tpattern: /(\\()(?:[-+*%\\/]|[<>]=?|=>?)/,\n\t\tlookbehind: true\n\t},\n\t'function' : {\n\t\tpattern : /(\\()[^\\s()]*(?=\\s)/,\n\t\tlookbehind : true\n\t},\n\t'punctuation' : /[()]/\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-scheme.js\n// module id = 89\n// module chunks = 0","/**\n * Original by Samuel Flores\n *\n * Adds the following new token classes:\n * \t\tconstant, builtin, variable, symbol, regex\n */\n(function(Prism) {\n\tPrism.languages.ruby = Prism.languages.extend('clike', {\n\t\t'comment': /#(?!\\{[^\\r\\n]*?\\}).*/,\n\t\t'keyword': /\\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\\b/\n\t});\n\n\tvar interpolation = {\n\t\tpattern: /#\\{[^}]+\\}/,\n\t\tinside: {\n\t\t\t'delimiter': {\n\t\t\t\tpattern: /^#\\{|\\}$/,\n\t\t\t\talias: 'tag'\n\t\t\t},\n\t\t\trest: Prism.util.clone(Prism.languages.ruby)\n\t\t}\n\t};\n\n\tPrism.languages.insertBefore('ruby', 'keyword', {\n\t\t'regex': [\n\t\t\t{\n\t\t\t\tpattern: /%r([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\1[gim]{0,3}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /%r\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)[gim]{0,3}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Here we need to specifically allow interpolation\n\t\t\t\tpattern: /%r\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[\\s\\S])*\\}[gim]{0,3}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /%r\\[(?:[^\\[\\]\\\\]|\\\\[\\s\\S])*\\][gim]{0,3}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /%r<(?:[^<>\\\\]|\\\\[\\s\\S])*>[gim]{0,3}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^/])\\/(?!\\/)(\\[.+?]|\\\\.|[^/\\r\\n])+\\/[gim]{0,3}(?=\\s*($|[\\r\\n,.;})]))/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'variable': /[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\\b)/,\n\t\t'symbol': /:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\\b)/\n\t});\n\n\tPrism.languages.insertBefore('ruby', 'number', {\n\t\t'builtin': /\\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\\b/,\n\t\t'constant': /\\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\\b)/\n\t});\n\n\tPrism.languages.ruby.string = [\n\t\t{\n\t\t\tpattern: /%[qQiIwWxs]?([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\1/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': interpolation\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /%[qQiIwWxs]?\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': interpolation\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// Here we need to specifically allow interpolation\n\t\t\tpattern: /%[qQiIwWxs]?\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[\\s\\S])*\\}/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': interpolation\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /%[qQiIwWxs]?\\[(?:[^\\[\\]\\\\]|\\\\[\\s\\S])*\\]/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': interpolation\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /%[qQiIwWxs]?<(?:[^<>\\\\]|\\\\[\\s\\S])*>/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': interpolation\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /(\"|')(#\\{[^}]+\\}|\\\\(?:\\r?\\n|\\r)|\\\\?.)*?\\1/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': interpolation\n\t\t\t}\n\t\t}\n\t];\n}(Prism));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-ruby.js\n// module id = 90\n// module chunks = 0","/* TODO\n\tAdd support for variables inside double quoted strings\n\tAdd support for {php}\n*/\n\n(function(Prism) {\n\n\tvar smarty_pattern = /\\{\\*[\\w\\W]+?\\*\\}|\\{[\\w\\W]+?\\}/g;\n\tvar smarty_litteral_start = '{literal}';\n\tvar smarty_litteral_end = '{/literal}';\n\tvar smarty_litteral_mode = false;\n\t\n\tPrism.languages.smarty = Prism.languages.extend('markup', {\n\t\t'smarty': {\n\t\t\tpattern: smarty_pattern,\n\t\t\tinside: {\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^\\{|\\}$/i,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'string': /([\"'])(?:\\\\?.)*?\\1/,\n\t\t\t\t'number': /\\b-?(?:0x[\\dA-Fa-f]+|\\d*\\.?\\d+(?:[Ee][-+]?\\d+)?)\\b/,\n\t\t\t\t'variable': [\n\t\t\t\t\t/\\$(?!\\d)\\w+/,\n\t\t\t\t\t/#(?!\\d)\\w+#/,\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /(\\.|->)(?!\\d)\\w+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /(\\[)(?!\\d)\\w+(?=\\])/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'function': [\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /(\\|\\s*)@?(?!\\d)\\w+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t/^\\/?(?!\\d)\\w+/,\n\t\t\t\t\t/(?!\\d)\\w+(?=\\()/\n\t\t\t\t],\n\t\t\t\t'attr-name': {\n\t\t\t\t\t// Value is made optional because it may have already been tokenized\n\t\t\t\t\tpattern: /\\w+\\s*=\\s*(?:(?!\\d)\\w+)?/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t\"variable\": {\n\t\t\t\t\t\t\tpattern: /(=\\s*)(?!\\d)\\w+/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"operator\": /=/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'punctuation': [\n\t\t\t\t\t/[\\[\\]().,:`]|\\->/\n\t\t\t\t],\n\t\t\t\t'operator': [\n\t\t\t\t\t/[+\\-*\\/%]|==?=?|[!<>]=?|&&|\\|\\|?/,\n\t\t\t\t\t/\\bis\\s+(?:not\\s+)?(?:div|even|odd)(?:\\s+by)?\\b/,\n\t\t\t\t\t/\\b(?:eq|neq?|gt|lt|gt?e|lt?e|not|mod|or|and)\\b/\n\t\t\t\t],\n\t\t\t\t'keyword': /\\b(?:false|off|on|no|true|yes)\\b/\n\t\t\t}\n\t\t}\n\t});\n\n\t// Comments are inserted at top so that they can\n\t// surround markup\n\tPrism.languages.insertBefore('smarty', 'tag', {\n\t\t'smarty-comment': {\n\t\t\tpattern: /\\{\\*[\\w\\W]*?\\*\\}/,\n\t\t\talias: ['smarty','comment']\n\t\t}\n\t});\n\n\t// Tokenize all inline Smarty expressions\n\tPrism.hooks.add('before-highlight', function(env) {\n\t\tif (env.language !== 'smarty') {\n\t\t\treturn;\n\t\t}\n\n\t\tenv.tokenStack = [];\n\n\t\tenv.backupCode = env.code;\n\t\tenv.code = env.code.replace(smarty_pattern, function(match) {\n\n\t\t\t// Smarty tags inside {literal} block are ignored\n\t\t\tif(match === smarty_litteral_end) {\n\t\t\t\tsmarty_litteral_mode = false;\n\t\t\t}\n\n\t\t\tif(!smarty_litteral_mode) {\n\t\t\t\tif(match === smarty_litteral_start) {\n\t\t\t\t\tsmarty_litteral_mode = true;\n\t\t\t\t}\n\t\t\t\tenv.tokenStack.push(match);\n\n\t\t\t\treturn '___SMARTY' + env.tokenStack.length + '___';\n\t\t\t}\n\t\t\treturn match;\n\t\t});\n\t});\n\n\t// Restore env.code for other plugins (e.g. line-numbers)\n\tPrism.hooks.add('before-insert', function(env) {\n\t\tif (env.language === 'smarty') {\n\t\t\tenv.code = env.backupCode;\n\t\t\tdelete env.backupCode;\n\t\t}\n\t});\n\n\t// Re-insert the tokens after highlighting\n\t// and highlight them with defined grammar\n\tPrism.hooks.add('after-highlight', function(env) {\n\t\tif (env.language !== 'smarty') {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, t; t = env.tokenStack[i]; i++) {\n\t\t\t// The replace prevents $$, $&, $`, $', $n, $nn from being interpreted as special patterns\n\t\t\tenv.highlightedCode = env.highlightedCode.replace('___SMARTY' + (i + 1) + '___', Prism.highlight(t, env.grammar, 'smarty').replace(/\\$/g, '$$$$'));\n\t\t}\n\n\t\tenv.element.innerHTML = env.highlightedCode;\n\t});\n\n}(Prism));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-smarty.js\n// module id = 91\n// module chunks = 0","Prism.languages.smalltalk = {\n\t'comment': /\"(?:\"\"|[^\"])+\"/,\n\t'string': /'(?:''|[^'])+'/,\n\t'symbol': /#[\\da-z]+|#(?:-|([+\\/\\\\*~<>=@%|&?!])\\1?)|#(?=\\()/i,\n\t'block-arguments': {\n\t\tpattern: /(\\[\\s*):[^\\[|]*?\\|/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'variable': /:[\\da-z]+/i,\n\t\t\t'punctuation': /\\|/\n\t\t}\n\t},\n\t'temporary-variables': {\n\t\tpattern: /\\|[^|]+\\|/,\n\t\tinside: {\n\t\t\t'variable': /[\\da-z]+/i,\n\t\t\t'punctuation': /\\|/\n\t\t}\n\t},\n\t'keyword': /\\b(?:nil|true|false|self|super|new)\\b/,\n\t'character': {\n\t\tpattern: /\\$./,\n\t\talias: 'string'\n\t},\n\t'number': [\n\t\t/\\d+r-?[\\dA-Z]+(?:\\.[\\dA-Z]+)?(?:e-?\\d+)?/,\n\t\t/(?:\\B-|\\b)\\d+(?:\\.\\d+)?(?:e-?\\d+)?/\n\t],\n\t'operator': /[<=]=?|:=|~[~=]|\\/\\/?|\\\\\\\\|>[>=]?|[!^+\\-*&|,@]/,\n\t'punctuation': /[.;:?\\[\\](){}]/\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-smalltalk.js\n// module id = 92\n// module chunks = 0","/* TODO\n\tAdd support for Markdown notation inside doc comments\n\tAdd support for nested block comments...\n\tMatch closure params even when not followed by dash or brace\n\tAdd better support for macro definition\n*/\n\nPrism.languages.rust = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\w\\W]*?\\*\\//,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'string': [\n\t\t/b?r(#*)\"(?:\\\\?.)*?\"\\1/,\n\t\t/b?(\"|')(?:\\\\?.)*?\\1/\n\t],\n\t'keyword': /\\b(?:abstract|alignof|as|be|box|break|const|continue|crate|do|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|match|mod|move|mut|offsetof|once|override|priv|pub|pure|ref|return|sizeof|static|self|struct|super|true|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\\b/,\n\n\t'attribute': {\n\t\tpattern: /#!?\\[.+?\\]/,\n\t\talias: 'attr-name'\n\t},\n\n\t'function': [\n\t\t/[a-z0-9_]+(?=\\s*\\()/i,\n\t\t// Macros can use parens or brackets\n\t\t/[a-z0-9_]+!(?=\\s*\\(|\\[)/i\n\t],\n\t'macro-rules': {\n\t\tpattern: /[a-z0-9_]+!/i,\n\t\talias: 'function'\n\t},\n\n\t// Hex, oct, bin, dec numbers with visual separators and type suffix\n\t'number': /\\b-?(?:0x[\\dA-Fa-f](?:_?[\\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(\\d(_?\\d)*)?\\.?\\d(_?\\d)*([Ee][+-]?\\d+)?)(?:_?(?:[iu](?:8|16|32|64)?|f32|f64))?\\b/,\n\n\t// Closure params should not be confused with bitwise OR |\n\t'closure-params': {\n\t\tpattern: /\\|[^|]*\\|(?=\\s*[{-])/,\n\t\tinside: {\n\t\t\t'punctuation': /[\\|:,]/,\n\t\t\t'operator': /[&*]/\n\t\t}\n\t},\n\t'punctuation': /[{}[\\];(),:]|\\.+|->/,\n\t'operator': /[-+*\\/%!^=]=?|@|&[&=]?|\\|[|=]?|<<?=?|>>?=?/\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-rust.js\n// module id = 93\n// module chunks = 0","Prism.languages.r = {\n\t'comment': /#.*/,\n\t'string': /(['\"])(?:\\\\?.)*?\\1/,\n\t'percent-operator': {\n\t\t// Includes user-defined operators\n\t\t// and %%, %*%, %/%, %in%, %o%, %x%\n\t\tpattern: /%[^%\\s]*%/,\n\t\talias: 'operator'\n\t},\n\t'boolean': /\\b(?:TRUE|FALSE)\\b/,\n\t'ellipsis': /\\.\\.(?:\\.|\\d+)/,\n\t'number': [\n\t\t/\\b(?:NaN|Inf)\\b/,\n\t\t/\\b(?:0x[\\dA-Fa-f]+(?:\\.\\d*)?|\\d*\\.?\\d+)(?:[EePp][+-]?\\d+)?[iL]?\\b/\n\t],\n\t'keyword': /\\b(?:if|else|repeat|while|function|for|in|next|break|NULL|NA|NA_integer_|NA_real_|NA_complex_|NA_character_)\\b/,\n\t'operator': /->?>?|<(?:=|<?-)?|[>=!]=?|::?|&&?|\\|\\|?|[+*\\/^$@~]/,\n\t'punctuation': /[(){}\\[\\],;]/\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-r.js\n// module id = 94\n// module chunks = 0","Prism.languages.d = Prism.languages.extend('clike', {\n\t'string': [\n\t\t// r\"\", x\"\"\n\t\t/\\b[rx]\"(\\\\.|[^\\\\\"])*\"[cwd]?/,\n\t\t// q\"[]\", q\"()\", q\"<>\", q\"{}\"\n\t\t/\\bq\"(?:\\[[\\s\\S]*?\\]|\\([\\s\\S]*?\\)|<[\\s\\S]*?>|\\{[\\s\\S]*?\\})\"/,\n\t\t// q\"IDENT\n\t\t// ...\n\t\t// IDENT\"\n\t\t/\\bq\"([_a-zA-Z][_a-zA-Z\\d]*)(?:\\r?\\n|\\r)[\\s\\S]*?(?:\\r?\\n|\\r)\\1\"/,\n\t\t// q\"//\", q\"||\", etc.\n\t\t/\\bq\"(.)[\\s\\S]*?\\1\"/,\n\t\t// Characters\n\t\t/'(?:\\\\'|\\\\?[^']+)'/,\n\n\t\t/([\"`])(\\\\.|(?!\\1)[^\\\\])*\\1[cwd]?/\n\t],\n\n\t'number': [\n\t\t// The lookbehind and the negative look-ahead try to prevent bad highlighting of the .. operator\n\t\t// Hexadecimal numbers must be handled separately to avoid problems with exponent \"e\"\n\t\t/\\b0x\\.?[a-f\\d_]+(?:(?!\\.\\.)\\.[a-f\\d_]*)?(?:p[+-]?[a-f\\d_]+)?[ulfi]*/i,\n\t\t{\n\t\t\tpattern: /((?:\\.\\.)?)(?:\\b0b\\.?|\\b|\\.)\\d[\\d_]*(?:(?!\\.\\.)\\.[\\d_]*)?(?:e[+-]?\\d[\\d_]*)?[ulfi]*/i,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\n\t// In order: $, keywords and special tokens, globally defined symbols\n\t'keyword': /\\$|\\b(?:abstract|alias|align|asm|assert|auto|body|bool|break|byte|case|cast|catch|cdouble|cent|cfloat|char|class|const|continue|creal|dchar|debug|default|delegate|delete|deprecated|do|double|else|enum|export|extern|false|final|finally|float|for|foreach|foreach_reverse|function|goto|idouble|if|ifloat|immutable|import|inout|int|interface|invariant|ireal|lazy|long|macro|mixin|module|new|nothrow|null|out|override|package|pragma|private|protected|public|pure|real|ref|return|scope|shared|short|static|struct|super|switch|synchronized|template|this|throw|true|try|typedef|typeid|typeof|ubyte|ucent|uint|ulong|union|unittest|ushort|version|void|volatile|wchar|while|with|__(?:(?:FILE|MODULE|LINE|FUNCTION|PRETTY_FUNCTION|DATE|EOF|TIME|TIMESTAMP|VENDOR|VERSION)__|gshared|traits|vector|parameters)|string|wstring|dstring|size_t|ptrdiff_t)\\b/,\n\t'operator': /\\|[|=]?|&[&=]?|\\+[+=]?|-[-=]?|\\.?\\.\\.|=[>=]?|!(?:i[ns]\\b|<>?=?|>=?|=)?|\\bi[ns]\\b|(?:<[<>]?|>>?>?|\\^\\^|[*\\/%^~])=?/\n});\n\n\nPrism.languages.d.comment = [\n\t// Shebang\n\t/^\\s*#!.+/,\n\t// /+ +/\n\t{\n\t\t// Allow one level of nesting\n\t\tpattern: /(^|[^\\\\])\\/\\+(?:\\/\\+[\\w\\W]*?\\+\\/|[\\w\\W])*?\\+\\//,\n\t\tlookbehind: true\n\t}\n].concat(Prism.languages.d.comment);\n\nPrism.languages.insertBefore('d', 'comment', {\n\t'token-string': {\n\t\t// Allow one level of nesting\n\t\tpattern: /\\bq\\{(?:|\\{[^}]*\\}|[^}])*\\}/,\n\t\talias: 'string'\n\t}\n});\n\nPrism.languages.insertBefore('d', 'keyword', {\n\t'property': /\\B@\\w*/\n});\n\nPrism.languages.insertBefore('d', 'function', {\n\t'register': {\n\t\t// Iasm registers\n\t\tpattern: /\\b(?:[ABCD][LHX]|E[ABCD]X|E?(?:BP|SP|DI|SI)|[ECSDGF]S|CR[0234]|DR[012367]|TR[3-7]|X?MM[0-7]|R[ABCD]X|[BS]PL|R[BS]P|[DS]IL|R[DS]I|R(?:[89]|1[0-5])[BWD]?|XMM(?:[89]|1[0-5])|YMM(?:1[0-5]|\\d))\\b|\\bST(?:\\([0-7]\\)|\\b)/,\n\t\talias: 'variable'\n\t}\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-d.js\n// module id = 95\n// module chunks = 0","Prism.languages.dart = Prism.languages.extend('clike', {\n\t'string': [\n\t\t/r?(\"\"\"|''')[\\s\\S]*?\\1/,\n\t\t/r?(\"|')(\\\\?.)*?\\1/\n\t],\n\t'keyword': [\n\t\t/\\b(?:async|sync|yield)\\*/,\n\t\t/\\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|default|deferred|do|dynamic|else|enum|export|external|extends|factory|final|finally|for|get|if|implements|import|in|library|new|null|operator|part|rethrow|return|set|static|super|switch|this|throw|try|typedef|var|void|while|with|yield)\\b/\n\t],\n\t'operator': /\\bis!|\\b(?:as|is)\\b|\\+\\+|--|&&|\\|\\||<<=?|>>=?|~(?:\\/=?)?|[+\\-*\\/%&^|=!<>]=?|\\?/\n});\n\nPrism.languages.insertBefore('dart','function',{\n\t'metadata': {\n\t\tpattern: /@\\w+/,\n\t\talias: 'symbol'\n\t}\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-dart.js\n// module id = 96\n// module chunks = 0","(function(Prism) {\n\n// Ignore comments starting with { to privilege string interpolation highlighting\nvar comment = /#(?!\\{).+/,\n interpolation = {\n \tpattern: /#\\{[^}]+\\}/,\n \talias: 'variable'\n };\n\nPrism.languages.coffeescript = Prism.languages.extend('javascript', {\n\t'comment': comment,\n\t'string': [\n\n\t\t// Strings are multiline\n\t\t{\n\t\t\tpattern: /'(?:\\\\?[^\\\\])*?'/,\n\t\t\tgreedy: true,\n\t\t},\n\n\t\t{\n\t\t\t// Strings are multiline\n\t\t\tpattern: /\"(?:\\\\?[^\\\\])*?\"/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': interpolation\n\t\t\t}\n\t\t}\n\t],\n\t'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/,\n\t'class-member': {\n\t\tpattern: /@(?!\\d)\\w+/,\n\t\talias: 'variable'\n\t}\n});\n\nPrism.languages.insertBefore('coffeescript', 'comment', {\n\t'multiline-comment': {\n\t\tpattern: /###[\\s\\S]+?###/,\n\t\talias: 'comment'\n\t},\n\n\t// Block regexp can contain comments and interpolation\n\t'block-regex': {\n\t\tpattern: /\\/{3}[\\s\\S]*?\\/{3}/,\n\t\talias: 'regex',\n\t\tinside: {\n\t\t\t'comment': comment,\n\t\t\t'interpolation': interpolation\n\t\t}\n\t}\n});\n\nPrism.languages.insertBefore('coffeescript', 'string', {\n\t'inline-javascript': {\n\t\tpattern: /`(?:\\\\?[\\s\\S])*?`/,\n\t\tinside: {\n\t\t\t'delimiter': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'punctuation'\n\t\t\t},\n\t\t\trest: Prism.languages.javascript\n\t\t}\n\t},\n\n\t// Block strings\n\t'multiline-string': [\n\t\t{\n\t\t\tpattern: /'''[\\s\\S]*?'''/,\n\t\t\tgreedy: true,\n\t\t\talias: 'string'\n\t\t},\n\t\t{\n\t\t\tpattern: /\"\"\"[\\s\\S]*?\"\"\"/,\n\t\t\tgreedy: true,\n\t\t\talias: 'string',\n\t\t\tinside: {\n\t\t\t\tinterpolation: interpolation\n\t\t\t}\n\t\t}\n\t]\n\n});\n\nPrism.languages.insertBefore('coffeescript', 'keyword', {\n\t// Object property\n\t'property': /(?!\\d)\\w+(?=\\s*:(?!:))/\n});\n\ndelete Prism.languages.coffeescript['template-string'];\n\n}(Prism));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-coffeescript.js\n// module id = 97\n// module chunks = 0","(function (Prism) {\n\tvar variable = /%%?[~:\\w]+%?|!\\S+!/;\n\tvar parameter = {\n\t\tpattern: /\\/[a-z?]+(?=[ :]|$):?|-[a-z]\\b|--[a-z-]+\\b/im,\n\t\talias: 'attr-name',\n\t\tinside: {\n\t\t\t'punctuation': /:/\n\t\t}\n\t};\n\tvar string = /\"[^\"]*\"/;\n\tvar number = /(?:\\b|-)\\d+\\b/;\n\n\tPrism.languages.batch = {\n\t\t'comment': [\n\t\t\t/^::.*/m,\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[&(])[ \\t]*)rem\\b(?:[^^&)\\r\\n]|\\^(?:\\r\\n|[\\s\\S]))*/im,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'label': {\n\t\t\tpattern: /^:.*/m,\n\t\t\talias: 'property'\n\t\t},\n\t\t'command': [\n\t\t\t{\n\t\t\t\t// FOR command\n\t\t\t\tpattern: /((?:^|[&(])[ \\t]*)for(?: ?\\/[a-z?](?:[ :](?:\"[^\"]*\"|\\S+))?)* \\S+ in \\([^)]+\\) do/im,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /^for\\b|\\b(?:in|do)\\b/i,\n\t\t\t\t\t'string': string,\n\t\t\t\t\t'parameter': parameter,\n\t\t\t\t\t'variable': variable,\n\t\t\t\t\t'number': number,\n\t\t\t\t\t'punctuation': /[()',]/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// IF command\n\t\t\t\tpattern: /((?:^|[&(])[ \\t]*)if(?: ?\\/[a-z?](?:[ :](?:\"[^\"]*\"|\\S+))?)* (?:not )?(?:cmdextversion \\d+|defined \\w+|errorlevel \\d+|exist \\S+|(?:\"[^\"]*\"|\\S+)?(?:==| (?:equ|neq|lss|leq|gtr|geq) )(?:\"[^\"]*\"|\\S+))/im,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /^if\\b|\\b(?:not|cmdextversion|defined|errorlevel|exist)\\b/i,\n\t\t\t\t\t'string': string,\n\t\t\t\t\t'parameter': parameter,\n\t\t\t\t\t'variable': variable,\n\t\t\t\t\t'number': number,\n\t\t\t\t\t'operator': /\\^|==|\\b(?:equ|neq|lss|leq|gtr|geq)\\b/i\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ELSE command\n\t\t\t\tpattern: /((?:^|[&()])[ \\t]*)else\\b/im,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /^else\\b/i\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// SET command\n\t\t\t\tpattern: /((?:^|[&(])[ \\t]*)set(?: ?\\/[a-z](?:[ :](?:\"[^\"]*\"|\\S+))?)* (?:[^^&)\\r\\n]|\\^(?:\\r\\n|[\\s\\S]))*/im,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /^set\\b/i,\n\t\t\t\t\t'string': string,\n\t\t\t\t\t'parameter': parameter,\n\t\t\t\t\t'variable': [\n\t\t\t\t\t\tvariable,\n\t\t\t\t\t\t/\\w+(?=(?:[*\\/%+\\-&^|]|<<|>>)?=)/\n\t\t\t\t\t],\n\t\t\t\t\t'number': number,\n\t\t\t\t\t'operator': /[*\\/%+\\-&^|]=?|<<=?|>>=?|[!~_=]/,\n\t\t\t\t\t'punctuation': /[()',]/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Other commands\n\t\t\t\tpattern: /((?:^|[&(])[ \\t]*@?)\\w+\\b(?:[^^&)\\r\\n]|\\^(?:\\r\\n|[\\s\\S]))*/im,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /^\\w+\\b/i,\n\t\t\t\t\t'string': string,\n\t\t\t\t\t'parameter': parameter,\n\t\t\t\t\t'label': {\n\t\t\t\t\t\tpattern: /(^\\s*):\\S+/m,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'property'\n\t\t\t\t\t},\n\t\t\t\t\t'variable': variable,\n\t\t\t\t\t'number': number,\n\t\t\t\t\t'operator': /\\^/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'operator': /[&@]/,\n\t\t'punctuation': /[()']/\n\t};\n}(Prism));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-batch.js\n// module id = 98\n// module chunks = 0","Prism.languages.cpp = Prism.languages.extend('c', {\n\t'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|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/,\n\t'boolean': /\\b(true|false)\\b/,\n\t'operator': /[-+]{1,2}|!=?|<{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/\n});\n\nPrism.languages.insertBefore('cpp', 'keyword', {\n\t'class-name': {\n\t\tpattern: /(class\\s+)[a-z0-9_]+/i,\n\t\tlookbehind: true\n\t}\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-cpp.js\n// module id = 99\n// module chunks = 0","Prism.languages.lua = {\n\t'comment': /^#!.+|--(?:\\[(=*)\\[[\\s\\S]*?\\]\\1\\]|.*)/m,\n\t// \\z may be used to skip the following space\n\t'string': {\n\t\tpattern: /([\"'])(?:(?!\\1)[^\\\\\\r\\n]|\\\\z(?:\\r\\n|\\s)|\\\\(?:\\r\\n|[\\s\\S]))*\\1|\\[(=*)\\[[\\s\\S]*?\\]\\2\\]/,\n\t\tgreedy: true\n\t},\n\t'number': /\\b0x[a-f\\d]+\\.?[a-f\\d]*(?:p[+-]?\\d+)?\\b|\\b\\d+(?:\\.\\B|\\.?\\d*(?:e[+-]?\\d+)?\\b)|\\B\\.\\d+(?:e[+-]?\\d+)?\\b/i,\n\t'keyword': /\\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\\b/,\n\t'function': /(?!\\d)\\w+(?=\\s*(?:[({]))/,\n\t'operator': [\n\t\t/[-+*%^&|#]|\\/\\/?|<[<=]?|>[>=]?|[=~]=?/,\n\t\t{\n\t\t\t// Match \"..\" but don't break \"...\"\n\t\t\tpattern: /(^|[^.])\\.\\.(?!\\.)/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'punctuation': /[\\[\\](){},;]|\\.+|:+/\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-lua.js\n// module id = 100\n// module chunks = 0","Prism.languages.livescript = {\n\t'interpolated-string': {\n\t\tpattern: /(\"\"\"|\")(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'variable': {\n\t\t\t\tpattern: /(^|[^\\\\])#[a-z_](?:-?[a-z]|\\d)*/m,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /(^|[^\\\\])#\\{[^}]+\\}/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^#\\{|\\}$/,\n\t\t\t\t\t\talias: 'variable'\n\t\t\t\t\t}\n\t\t\t\t\t// See rest below\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\w\\W]*?\\*\\//,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])#.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': [\n\t\t{\n\t\t\tpattern: /('''|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /<\\[[\\s\\S]*?\\]>/,\n\t\t\tgreedy: true\n\t\t},\n\t\t/\\\\[^\\s,;\\])}]+/\n\t],\n\t'regex': [\n\t\t{\n\t\t\tpattern: /\\/\\/(\\[.+?]|\\\\.|(?!\\/\\/)[^\\\\])+\\/\\/[gimyu]{0,5}/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'comment': {\n\t\t\t\t\tpattern: /(^|[^\\\\])#.*/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /\\/(\\[.+?]|\\\\.|[^/\\\\\\r\\n])+\\/[gimyu]{0,5}/,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'keyword': {\n\t\tpattern: /(^|(?!-).)\\b(?:break|case|catch|class|const|continue|default|do|else|extends|fallthrough|finally|for(?: ever)?|function|if|implements|it|let|loop|new|null|otherwise|own|return|super|switch|that|then|this|throw|try|unless|until|var|void|when|while|yield)(?!-)\\b/m,\n\t\tlookbehind: true\n\t},\n\t'keyword-operator': {\n\t\tpattern: /(^|[^-])\\b(?:(?:delete|require|typeof)!|(?:and|by|delete|export|from|import(?: all)?|in|instanceof|is(?:nt| not)?|not|of|or|til|to|typeof|with|xor)(?!-)\\b)/m,\n\t\tlookbehind: true,\n\t\talias: 'operator'\n\t},\n\t'boolean': {\n\t\tpattern: /(^|[^-])\\b(?:false|no|off|on|true|yes)(?!-)\\b/m,\n\t\tlookbehind: true\n\t},\n\t'argument': {\n\t\t// Don't match .&. nor &&\n\t\tpattern: /(^|(?!\\.&\\.)[^&])&(?!&)\\d*/m,\n\t\tlookbehind: true,\n\t\talias: 'variable'\n\t},\n\t'number': /\\b(?:\\d+~[\\da-z]+|\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[a-z]\\w*)?)/i,\n\t'identifier': /[a-z_](?:-?[a-z]|\\d)*/i,\n\t'operator': [\n\t\t// Spaced .\n\t\t{\n\t\t\tpattern: /( )\\.(?= )/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Full list, in order:\n\t\t// .= .~ .. ...\n\t\t// .&. .^. .<<. .>>. .>>>.\n\t\t// := :: ::=\n\t\t// &&\n\t\t// || |>\n\t\t// < << <<< <<<<\n\t\t// <- <-- <-! <--!\n\t\t// <~ <~~ <~! <~~!\n\t\t// <| <= <?\n\t\t// > >> >= >?\n\t\t// - -- -> -->\n\t\t// + ++\n\t\t// @ @@\n\t\t// % %%\n\t\t// * **\n\t\t// ! != !~=\n\t\t// !~> !~~>\n\t\t// !-> !-->\n\t\t// ~ ~> ~~> ~=\n\t\t// = ==\n\t\t// ^ ^^\n\t\t// / ?\n\t\t/\\.(?:[=~]|\\.\\.?)|\\.(?:[&|^]|<<|>>>?)\\.|:(?:=|:=?)|&&|\\|[|>]|<(?:<<?<?|--?!?|~~?!?|[|=?])?|>[>=?]?|-(?:->?|>)?|\\+\\+?|@@?|%%?|\\*\\*?|!(?:~?=|--?>|~?~>)?|~(?:~?>|=)?|==?|\\^\\^?|[\\/?]/\n\t],\n\t'punctuation': /[(){}\\[\\]|.,:;`]/\n};\n\nPrism.languages.livescript['interpolated-string'].inside['interpolation'].inside.rest = Prism.languages.livescript;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-livescript.js\n// module id = 101\n// module chunks = 0","(function(Prism) {\n\tvar funcPattern = /\\\\([^a-z()[\\]]|[a-z\\*]+)/i,\n\t insideEqu = {\n\t\t 'equation-command': {\n\t\t\t pattern: funcPattern,\n\t\t\t alias: 'regex'\n\t\t }\n\t };\n\n\tPrism.languages.latex = {\n\t\t'comment': /%.*/m,\n\t\t// the verbatim environment prints whitespace to the document\n\t\t'cdata': {\n\t\t\tpattern: /(\\\\begin\\{((?:verbatim|lstlisting)\\*?)\\})([\\w\\W]*?)(?=\\\\end\\{\\2\\})/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/*\n\t\t * equations can be between $ $ or \\( \\) or \\[ \\]\n\t\t * (all are multiline)\n\t\t */\n\t\t'equation': [\n\t\t\t{\n\t\t\t\tpattern: /\\$(?:\\\\?[\\w\\W])*?\\$|\\\\\\((?:\\\\?[\\w\\W])*?\\\\\\)|\\\\\\[(?:\\\\?[\\w\\W])*?\\\\\\]/,\n\t\t\t\tinside: insideEqu,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\\\begin\\{((?:equation|math|eqnarray|align|multline|gather)\\*?)\\})([\\w\\W]*?)(?=\\\\end\\{\\2\\})/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: insideEqu,\n\t\t\t\talias: 'string'\n\t\t\t}\n\t\t],\n\t\t/*\n\t\t * arguments which are keywords or references are highlighted\n\t\t * as keywords\n\t\t */\n\t\t'keyword': {\n\t\t\tpattern: /(\\\\(?:begin|end|ref|cite|label|usepackage|documentclass)(?:\\[[^\\]]+\\])?\\{)[^}]+(?=\\})/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'url': {\n\t\t\tpattern: /(\\\\url\\{)[^}]+(?=\\})/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/*\n\t\t * section or chapter headlines are highlighted as bold so that\n\t\t * they stand out more\n\t\t */\n\t\t'headline': {\n\t\t\tpattern: /(\\\\(?:part|chapter|section|subsection|frametitle|subsubsection|paragraph|subparagraph|subsubparagraph|subsubsubparagraph)\\*?(?:\\[[^\\]]+\\])?\\{)[^}]+(?=\\}(?:\\[[^\\]]+\\])?)/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'function': {\n\t\t\tpattern: funcPattern,\n\t\t\talias: 'selector'\n\t\t},\n\t\t'punctuation': /[[\\]{}&]/\n\t};\n})(Prism);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-latex.js\n// module id = 102\n// module chunks = 0","Prism.languages.groovy = Prism.languages.extend('clike', {\n\t'keyword': /\\b(as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\\b/,\n\t'string': [\n\t\t{\n\t\t\tpattern: /(\"\"\"|''')[\\W\\w]*?\\1|(\\$\\/)(\\$\\/\\$|[\\W\\w])*?\\/\\$/,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(\"|'|\\/)(?:\\\\?.)*?\\1/,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'number': /\\b(?:0b[01_]+|0x[\\da-f_]+(?:\\.[\\da-f_p\\-]+)?|[\\d_]+(?:\\.[\\d_]+)?(?:e[+-]?[\\d]+)?)[glidf]?\\b/i,\n\t'operator': {\n\t\tpattern: /(^|[^.])(~|==?~?|\\?[.:]?|\\*(?:[.=]|\\*=?)?|\\.[@&]|\\.\\.<|\\.{1,2}(?!\\.)|-[-=>]?|\\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\\|[|=]?|\\/=?|\\^=?|%=?)/,\n\t\tlookbehind: true\n\t},\n\t'punctuation': /\\.+|[{}[\\];(),:$]/\n});\n\nPrism.languages.insertBefore('groovy', 'string', {\n\t'shebang': {\n\t\tpattern: /#!.+/,\n\t\talias: 'comment'\n\t}\n});\n\nPrism.languages.insertBefore('groovy', 'punctuation', {\n\t'spock-block': /\\b(setup|given|when|then|and|cleanup|expect|where):/\n});\n\nPrism.languages.insertBefore('groovy', 'function', {\n\t'annotation': {\n\t\talias: 'punctuation',\n\t\tpattern: /(^|[^.])@\\w+/,\n\t\tlookbehind: true\n\t}\n});\n\n// Handle string interpolation\nPrism.hooks.add('wrap', function(env) {\n\tif (env.language === 'groovy' && env.type === 'string') {\n\t\tvar delimiter = env.content[0];\n\n\t\tif (delimiter != \"'\") {\n\t\t\tvar pattern = /([^\\\\])(\\$(\\{.*?\\}|[\\w\\.]+))/;\n\t\t\tif (delimiter === '$') {\n\t\t\t\tpattern = /([^\\$])(\\$(\\{.*?\\}|[\\w\\.]+))/;\n\t\t\t}\n\n\t\t\t// To prevent double HTML-encoding we have to decode env.content first\n\t\t\tenv.content = env.content.replace(/</g, '<').replace(/&/g, '&');\n\n\t\t\tenv.content = Prism.highlight(env.content, {\n\t\t\t\t'expression': {\n\t\t\t\t\tpattern: pattern,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: Prism.languages.groovy\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tenv.classes.push(delimiter === '/' ? 'regex' : 'gstring');\n\t\t}\n\t}\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-groovy.js\n// module id = 103\n// module chunks = 0","Prism.languages.graphql = {\n\t'comment': /#.*/,\n\t'string': {\n\t\tpattern: /\"(?:\\\\.|[^\\\\\"])*\"/,\n\t\tgreedy: true\n\t},\n\t'number': /(?:\\B-|\\b)\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b/,\n\t'boolean': /\\b(?:true|false)\\b/,\n\t'variable': /\\$[a-z_]\\w*/i,\n\t'directive': {\n\t\tpattern: /@[a-z_]\\w*/i,\n\t\talias: 'function'\n\t},\n\t'attr-name': /[a-z_]\\w*(?=\\s*:)/i,\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /(fragment\\s+(?!on)[a-z_]\\w*\\s+|\\.\\.\\.\\s*)on\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/\\b(?:query|fragment|mutation)\\b/\n\t],\n\t'operator': /!|=|\\.{3}/,\n\t'punctuation': /[!(){}\\[\\]:=,]/\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-graphql.js\n// module id = 104\n// module chunks = 0","Prism.languages.nginx = Prism.languages.extend('clike', {\n 'comment': {\n pattern: /(^|[^\"{\\\\])#.*/,\n lookbehind: true\n },\n 'keyword': /\\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|server|events|location|include|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,\n});\n\nPrism.languages.insertBefore('nginx', 'keyword', {\n 'variable': /\\$[a-z_]+/i\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-nginx.js\n// module id = 105\n// module chunks = 0","Prism.languages.erlang = {\n\t'comment': /%.+/,\n\t'string': /\"(?:\\\\?.)*?\"/,\n\t'quoted-function': {\n\t\tpattern: /'(?:\\\\.|[^'\\\\])+'(?=\\()/,\n\t\talias: 'function'\n\t},\n\t'quoted-atom': {\n\t\tpattern: /'(?:\\\\.|[^'\\\\])+'/,\n\t\talias: 'atom'\n\t},\n\t'boolean': /\\b(?:true|false)\\b/,\n\t'keyword': /\\b(?:fun|when|case|of|end|if|receive|after|try|catch)\\b/,\n\t'number': [\n\t\t/\\$\\\\?./,\n\t\t/\\d+#[a-z0-9]+/i,\n\t\t/(?:\\b|-)\\d*\\.?\\d+([Ee][+-]?\\d+)?\\b/\n\t],\n\t'function': /\\b[a-z][\\w@]*(?=\\()/,\n\t'variable': {\n\t\t// Look-behind is used to prevent wrong highlighting of atoms containing \"@\"\n\t\tpattern: /(^|[^@])(?:\\b|\\?)[A-Z_][\\w@]*/,\n\t\tlookbehind: true\n\t},\n\t'operator': [\n\t\t/[=\\/<>:]=|=[:\\/]=|\\+\\+?|--?|[=*\\/!]|\\b(?:bnot|div|rem|band|bor|bxor|bsl|bsr|not|and|or|xor|orelse|andalso)\\b/,\n\t\t{\n\t\t\t// We don't want to match <<\n\t\t\tpattern: /(^|[^<])<(?!<)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// We don't want to match >>\n\t\t\tpattern: /(^|[^>])>(?!>)/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'atom': /\\b[a-z][\\w@]*/,\n\t'punctuation': /[()[\\]{}:;,.#|]|<<|>>/\n\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-erlang.js\n// module id = 106\n// module chunks = 0","Prism.languages.powershell = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^`])<#[\\w\\W]*?#>/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^`])#.*/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'string': [\n\t\t{\n\t\t\tpattern: /\"(`?[\\w\\W])*?\"/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': {\n\t\t\t\t\tpattern: /[^`]\\$\\(.*?\\)/,\n\t\t\t\t\t// Populated at end of file\n\t\t\t\t\tinside: {}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /'([^']|'')*'/,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t// Matches name spaces as well as casts, attribute decorators. Force starting with letter to avoid matching array indices\n\t'namespace': /\\[[a-z][\\w\\W]*?\\]/i,\n\t'boolean': /\\$(true|false)\\b/i,\n\t'variable': /\\$\\w+\\b/i,\n\t// Cmdlets and aliases. Aliases should come last, otherwise \"write\" gets preferred over \"write-host\" for example\n\t// Get-Command | ?{ $_.ModuleName -match \"Microsoft.PowerShell.(Util|Core|Management)\" }\n\t// Get-Alias | ?{ $_.ReferencedCommand.Module.Name -match \"Microsoft.PowerShell.(Util|Core|Management)\" }\n\t'function': [\n\t\t/\\b(Add-(Computer|Content|History|Member|PSSnapin|Type)|Checkpoint-Computer|Clear-(Content|EventLog|History|Item|ItemProperty|Variable)|Compare-Object|Complete-Transaction|Connect-PSSession|ConvertFrom-(Csv|Json|StringData)|Convert-Path|ConvertTo-(Csv|Html|Json|Xml)|Copy-(Item|ItemProperty)|Debug-Process|Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)|Disconnect-PSSession|Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)|Enter-PSSession|Exit-PSSession|Export-(Alias|Clixml|Console|Csv|FormatData|ModuleMember|PSSession)|ForEach-Object|Format-(Custom|List|Table|Wide)|Get-(Alias|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Culture|Date|Event|EventLog|EventSubscriber|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job|Location|Member|Module|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|WmiObject)|Group-Object|Import-(Alias|Clixml|Csv|LocalizedData|Module|PSSession)|Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)|Join-Path|Limit-EventLog|Measure-(Command|Object)|Move-(Item|ItemProperty)|New-(Alias|Event|EventLog|Item|ItemProperty|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy)|Out-(Default|File|GridView|Host|Null|Printer|String)|Pop-Location|Push-Location|Read-Host|Receive-(Job|PSSession)|Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)|Remove-(Computer|Event|EventLog|Item|ItemProperty|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)|Rename-(Computer|Item|ItemProperty)|Reset-ComputerMachinePassword|Resolve-Path|Restart-(Computer|Service)|Restore-Computer|Resume-(Job|Service)|Save-Help|Select-(Object|String|Xml)|Send-MailMessage|Set-(Alias|Content|Date|Item|ItemProperty|Location|PSBreakpoint|PSDebug|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)|Show-(Command|ControlPanelItem|EventLog)|Sort-Object|Split-Path|Start-(Job|Process|Service|Sleep|Transaction)|Stop-(Computer|Job|Process|Service)|Suspend-(Job|Service)|Tee-Object|Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)|Trace-Command|Unblock-File|Undo-Transaction|Unregister-(Event|PSSessionConfiguration)|Update-(FormatData|Help|List|TypeData)|Use-Transaction|Wait-(Event|Job|Process)|Where-Object|Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning))\\b/i,\n\t\t/\\b(ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\\b/i\n\t],\n\t// per http://technet.microsoft.com/en-us/library/hh847744.aspx\n\t'keyword': /\\b(Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\\b/i,\n\t'operator': {\n\t\tpattern: /(\\W?)(!|-(eq|ne|gt|ge|lt|le|sh[lr]|not|b?(and|x?or)|(Not)?(Like|Match|Contains|In)|Replace|Join|is(Not)?|as)\\b|-[-=]?|\\+[+=]?|[*\\/%]=?)/i,\n\t\tlookbehind: true\n\t},\n\t'punctuation': /[|{}[\\];(),.]/\n};\n\n// Variable interpolation inside strings, and nested expressions\nPrism.languages.powershell.string[0].inside.boolean = Prism.languages.powershell.boolean;\nPrism.languages.powershell.string[0].inside.variable = Prism.languages.powershell.variable;\nPrism.languages.powershell.string[0].inside.function.inside = Prism.util.clone(Prism.languages.powershell);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-powershell.js\n// module id = 107\n// module chunks = 0","Prism.languages.makefile = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])#(?:\\\\(?:\\r\\n|[\\s\\S])|.)*/,\n\t\tlookbehind: true\n\t},\n\t'string': /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\n\t// Built-in target names\n\t'builtin': /\\.[A-Z][^:#=\\s]+(?=\\s*:(?!=))/,\n\n\t// Targets\n\t'symbol': {\n\t\tpattern: /^[^:=\\r\\n]+(?=\\s*:(?!=))/m,\n\t\tinside: {\n\t\t\t'variable': /\\$+(?:[^(){}:#=\\s]+|(?=[({]))/\n\t\t}\n\t},\n\t'variable': /\\$+(?:[^(){}:#=\\s]+|\\([@*%<^+?][DF]\\)|(?=[({]))/,\n\n\t'keyword': [\n\t\t// Directives\n\t\t/-include\\b|\\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\\b/,\n\t\t// Functions\n\t\t{\n\t\t\tpattern: /(\\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \\t])/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'operator': /(?:::|[?:+!])?=|[|@]/,\n\t'punctuation': /[:;(){}]/\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-makefile.js\n// module id = 108\n// module chunks = 0","Prism.languages.markdown = Prism.languages.extend('markup', {});\nPrism.languages.insertBefore('markdown', 'prolog', {\n\t'blockquote': {\n\t\t// > ...\n\t\tpattern: /^>(?:[\\t ]*>)*/m,\n\t\talias: 'punctuation'\n\t},\n\t'code': [\n\t\t{\n\t\t\t// Prefixed by 4 spaces or 1 tab\n\t\t\tpattern: /^(?: {4}|\\t).+/m,\n\t\t\talias: 'keyword'\n\t\t},\n\t\t{\n\t\t\t// `code`\n\t\t\t// ``code``\n\t\t\tpattern: /``.+?``|`[^`\\n]+`/,\n\t\t\talias: 'keyword'\n\t\t}\n\t],\n\t'title': [\n\t\t{\n\t\t\t// title 1\n\t\t\t// =======\n\n\t\t\t// title 2\n\t\t\t// -------\n\t\t\tpattern: /\\w+.*(?:\\r?\\n|\\r)(?:==+|--+)/,\n\t\t\talias: 'important',\n\t\t\tinside: {\n\t\t\t\tpunctuation: /==+$|--+$/\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// # title 1\n\t\t\t// ###### title 6\n\t\t\tpattern: /(^\\s*)#+.+/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'important',\n\t\t\tinside: {\n\t\t\t\tpunctuation: /^#+|#+$/\n\t\t\t}\n\t\t}\n\t],\n\t'hr': {\n\t\t// ***\n\t\t// ---\n\t\t// * * *\n\t\t// -----------\n\t\tpattern: /(^\\s*)([*-])([\\t ]*\\2){2,}(?=\\s*$)/m,\n\t\tlookbehind: true,\n\t\talias: 'punctuation'\n\t},\n\t'list': {\n\t\t// * item\n\t\t// + item\n\t\t// - item\n\t\t// 1. item\n\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n\t\tlookbehind: true,\n\t\talias: 'punctuation'\n\t},\n\t'url-reference': {\n\t\t// [id]: http://example.com \"Optional title\"\n\t\t// [id]: http://example.com 'Optional title'\n\t\t// [id]: http://example.com (Optional title)\n\t\t// [id]: <http://example.com> \"Optional title\"\n\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n\t\tinside: {\n\t\t\t'variable': {\n\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n\t\t},\n\t\talias: 'url'\n\t},\n\t'bold': {\n\t\t// **strong**\n\t\t// __strong__\n\n\t\t// Allow only one line break\n\t\tpattern: /(^|[^\\\\])(\\*\\*|__)(?:(?:\\r?\\n|\\r)(?!\\r?\\n|\\r)|.)+?\\2/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /^\\*\\*|^__|\\*\\*$|__$/\n\t\t}\n\t},\n\t'italic': {\n\t\t// *em*\n\t\t// _em_\n\n\t\t// Allow only one line break\n\t\tpattern: /(^|[^\\\\])([*_])(?:(?:\\r?\\n|\\r)(?!\\r?\\n|\\r)|.)+?\\2/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /^[*_]|[*_]$/\n\t\t}\n\t},\n\t'url': {\n\t\t// [example](http://example.com \"Optional title\")\n\t\t// [example] [id]\n\t\tpattern: /!?\\[[^\\]]+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)| ?\\[[^\\]\\n]*\\])/,\n\t\tinside: {\n\t\t\t'variable': {\n\t\t\t\tpattern: /(!?\\[)[^\\]]+(?=\\]$)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/\n\t\t\t}\n\t\t}\n\t}\n});\n\nPrism.languages.markdown['bold'].inside['url'] = Prism.util.clone(Prism.languages.markdown['url']);\nPrism.languages.markdown['italic'].inside['url'] = Prism.util.clone(Prism.languages.markdown['url']);\nPrism.languages.markdown['bold'].inside['italic'] = Prism.util.clone(Prism.languages.markdown['italic']);\nPrism.languages.markdown['italic'].inside['bold'] = Prism.util.clone(Prism.languages.markdown['bold']);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.1.6.0@prismjs/components/prism-markdown.js\n// module id = 109\n// module chunks = 0","module.exports = \"<div tabindex=\\\"1\\\" class=\\\"mditor {{split?'split':''}} {{preview?'preview':''}} {{fullscreen?'fullscreen':''}}\\\" style=\\\"width:{{width}};height:{{height}}\\\">\\n <div class=\\\"head\\\" m:on:dblclick=\\\"onHeadDblClick\\\">\\n <m:toolbar m:id=\\\"toolbar\\\" m:prop:mditor=\\\"self\\\"></m:toolbar>\\n </div>\\n <div class=\\\"body\\\">\\n <m:editor m:id=\\\"editor\\\" m:prop:mditor=\\\"self\\\" m:model:value=\\\"value\\\" m:on:scroll=\\\"syncScroll\\\" m:on:changed=\\\"onChanged\\\" m:on:input=\\\"onInput\\\" m:on:paste=\\\"syncScroll\\\"></m:editor>\\n <m:viewer m:id=\\\"viewer\\\" m:prop:mditor=\\\"self\\\" m:model:value=\\\"value\\\"></m:viewer>\\n <m:finder m:id=\\\"finder\\\" m:prop:mditor=\\\"self\\\"></m:viewer>\\n </div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/client/index.html\n// module id = 121\n// module chunks = 0"],"sourceRoot":""}