Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
web-interface.assets.9d1739ed-2043.630833fca5910483b1dc.js.map Maven / Gradle / Ivy
{"version":3,"file":"9d1739ed-2043.630833fca5910483b1dc.js","mappings":"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","sources":["webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-language_tools.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-lucene.js"],"sourcesContent":["ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar clipboard = require(\"./clipboard\");\n\nvar VARIABLES = {\n CURRENT_WORD: function(editor) {\n return editor.session.getTextRange(editor.session.getWordRange());\n },\n SELECTION: function(editor, name, indentation) {\n var text = editor.session.getTextRange();\n if (indentation)\n return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n return text;\n },\n CURRENT_LINE: function(editor) {\n return editor.session.getLine(editor.getCursorPosition().row);\n },\n PREV_LINE: function(editor) {\n return editor.session.getLine(editor.getCursorPosition().row - 1);\n },\n LINE_INDEX: function(editor) {\n return editor.getCursorPosition().row;\n },\n LINE_NUMBER: function(editor) {\n return editor.getCursorPosition().row + 1;\n },\n SOFT_TABS: function(editor) {\n return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n },\n TAB_SIZE: function(editor) {\n return editor.session.getTabSize();\n },\n CLIPBOARD: function(editor) {\n return clipboard.getText && clipboard.getText();\n },\n FILENAME: function(editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n },\n FILENAME_BASE: function(editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n },\n DIRECTORY: function(editor) {\n return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n },\n FILEPATH: function(editor) { return \"/not implemented.txt\"; },\n WORKSPACE_NAME: function() { return \"Unknown\"; },\n FULLNAME: function() { return \"Unknown\"; },\n BLOCK_COMMENT_START: function(editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.start || \"\";\n },\n BLOCK_COMMENT_END: function(editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.end || \"\";\n },\n LINE_COMMENT: function(editor) {\n var mode = editor.session.$mode || {};\n return mode.lineCommentStart || \"\";\n },\n CURRENT_YEAR: date.bind(null, {year: \"numeric\"}),\n CURRENT_YEAR_SHORT: date.bind(null, {year: \"2-digit\"}),\n CURRENT_MONTH: date.bind(null, {month: \"numeric\"}),\n CURRENT_MONTH_NAME: date.bind(null, {month: \"long\"}),\n CURRENT_MONTH_NAME_SHORT: date.bind(null, {month: \"short\"}),\n CURRENT_DATE: date.bind(null, {day: \"2-digit\"}),\n CURRENT_DAY_NAME: date.bind(null, {weekday: \"long\"}),\n CURRENT_DAY_NAME_SHORT: date.bind(null, {weekday: \"short\"}),\n CURRENT_HOUR: date.bind(null, {hour: \"2-digit\", hour12: false}),\n CURRENT_MINUTE: date.bind(null, {minute: \"2-digit\"}),\n CURRENT_SECOND: date.bind(null, {second: \"2-digit\"})\n};\n\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\n\nfunction date(dateFormat) {\n var str = new Date().toLocaleString(\"en-us\", dateFormat);\n return str.length == 1 ? \"0\" + str : str;\n}\n\nvar SnippetManager = function() {\n this.snippetMap = {};\n this.snippetNameMap = {};\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n \n this.getTokenizer = function() {\n return SnippetManager.$tokenizer || this.createTokenizer();\n };\n \n this.createTokenizer = function() {\n function TabstopToken(str) {\n str = str.substr(1);\n if (/^\\d+$/.test(str))\n return [{tabstopId: parseInt(str, 10)}];\n return [{text: str}];\n }\n function escape(ch) {\n return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n }\n var formatMatcher = {\n regex: \"/(\" + escape(\"/\") + \"+)/\", \n onMatch: function(val, state, stack) {\n var ts = stack[0];\n ts.fmtString = true;\n ts.guard = val.slice(1, -1);\n ts.flag = \"\";\n return \"\";\n },\n next: \"formatString\"\n };\n \n SnippetManager.$tokenizer = new Tokenizer({\n start: [\n {regex: /\\\\./, onMatch: function(val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length) {\n val = ch;\n } else if (\"`$\\\\\".indexOf(ch) != -1) {\n val = ch;\n }\n return [val];\n }},\n {regex: /}/, onMatch: function(val, state, stack) {\n return [stack.length ? stack.shift() : val];\n }},\n {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n var t = TabstopToken(str.substr(1));\n stack.unshift(t[0]);\n return t;\n }, next: \"snippetVar\"},\n {regex: /\\n/, token: \"newline\", merge: false}\n ],\n snippetVar: [\n {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function(operator) {\n return operator.length == 2 ? operator[1] : \"\\x00\";\n }).split(\"\\x00\").map(function(value){\n return {value: value};\n });\n stack[0].choices = choices;\n return [choices[0]];\n }, next: \"start\"},\n formatMatcher,\n {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n ],\n formatString: [\n {regex: /:/, onMatch: function(val, state, stack) {\n if (stack.length && stack[0].expectElse) {\n stack[0].expectElse = false;\n stack[0].ifEnd = {elseEnd: stack[0]};\n return [stack[0].ifEnd];\n }\n return \":\";\n }},\n {regex: /\\\\./, onMatch: function(val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length)\n val = ch;\n else if (\"`$\\\\\".indexOf(ch) != -1)\n val = ch;\n else if (ch == \"n\")\n val = \"\\n\";\n else if (ch == \"t\")\n val = \"\\t\";\n else if (\"ulULE\".indexOf(ch) != -1)\n val = {changeCase: ch, local: ch > \"a\"};\n return [val];\n }},\n {regex: \"/\\\\w*}\", onMatch: function(val, state, stack) {\n var next = stack.shift();\n if (next)\n next.flag = val.slice(1, -1);\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\"},\n {regex: /\\$(?:\\d+|\\w+)/, onMatch: function(val, state, stack) {\n return [{text: val.slice(1)}];\n }},\n {regex: /\\${\\w+/, onMatch: function(val, state, stack) {\n var token = {text: val.slice(2)};\n stack.unshift(token);\n return [token];\n }, next: \"formatStringVar\"},\n {regex: /\\n/, token: \"newline\", merge: false},\n {regex: /}/, onMatch: function(val, state, stack) {\n var next = stack.shift();\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\"}\n ],\n formatStringVar: [\n {regex: /:\\/\\w+}/, onMatch: function(val, state, stack) {\n var ts = stack[0];\n ts.formatFunction = val.slice(2, -1);\n return [stack.shift()];\n }, next: \"formatString\"},\n formatMatcher,\n {regex: /:[\\?\\-+]?/, onMatch: function(val, state, stack) {\n if (val[1] == \"+\")\n stack[0].ifEnd = stack[0];\n if (val[1] == \"?\")\n stack[0].expectElse = true;\n }, next: \"formatString\"},\n {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"formatString\"}\n ]\n });\n return SnippetManager.$tokenizer;\n };\n\n this.tokenizeTmSnippet = function(str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n return x.value || x;\n });\n };\n \n this.getVariableValue = function(editor, name, indentation) {\n if (/^\\d+$/.test(name))\n return (this.variables.__ || {})[name] || \"\";\n if (/^[A-Z]\\d+$/.test(name))\n return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n \n name = name.replace(/^TM_/, \"\");\n if (!this.variables.hasOwnProperty(name))\n return \"\";\n var value = this.variables[name];\n if (typeof value == \"function\")\n value = this.variables[name](editor, name, indentation);\n return value == null ? \"\" : value;\n };\n \n this.variables = VARIABLES;\n this.tmStrFormat = function(str, ch, editor) {\n if (!ch.fmt) return str;\n var flag = ch.flag || \"\";\n var re = ch.guard;\n re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n var _self = this;\n var formatted = str.replace(re, function() {\n var oldArgs = _self.variables.__;\n _self.variables.__ = [].slice.call(arguments);\n var fmtParts = _self.resolveVariables(fmtTokens, editor);\n var gChangeCase = \"E\";\n for (var i = 0; i < fmtParts.length; i++) {\n var ch = fmtParts[i];\n if (typeof ch == \"object\") {\n fmtParts[i] = \"\";\n if (ch.changeCase && ch.local) {\n var next = fmtParts[i + 1];\n if (next && typeof next == \"string\") {\n if (ch.changeCase == \"u\")\n fmtParts[i] = next[0].toUpperCase();\n else\n fmtParts[i] = next[0].toLowerCase();\n fmtParts[i + 1] = next.substr(1);\n }\n } else if (ch.changeCase) {\n gChangeCase = ch.changeCase;\n }\n } else if (gChangeCase == \"U\") {\n fmtParts[i] = ch.toUpperCase();\n } else if (gChangeCase == \"L\") {\n fmtParts[i] = ch.toLowerCase();\n }\n }\n _self.variables.__ = oldArgs;\n return fmtParts.join(\"\");\n });\n return formatted;\n };\n \n this.tmFormatFunction = function(str, ch, editor) {\n if (ch.formatFunction == \"upcase\")\n return str.toUpperCase();\n if (ch.formatFunction == \"downcase\")\n return str.toLowerCase();\n return str;\n };\n\n this.resolveVariables = function(snippet, editor) {\n var result = [];\n var indentation = \"\";\n var afterNewLine = true;\n for (var i = 0; i < snippet.length; i++) {\n var ch = snippet[i];\n if (typeof ch == \"string\") {\n result.push(ch);\n if (ch == \"\\n\") {\n afterNewLine = true;\n indentation = \"\";\n }\n else if (afterNewLine) {\n indentation = /^\\t*/.exec(ch)[0];\n afterNewLine = /\\S/.test(ch);\n }\n continue;\n }\n if (!ch) continue;\n afterNewLine = false;\n \n if (ch.fmtString) {\n var j = snippet.indexOf(ch, i + 1);\n if (j == -1) j = snippet.length;\n ch.fmt = snippet.slice(i + 1, j);\n i = j;\n }\n \n if (ch.text) {\n var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n if (ch.fmtString)\n value = this.tmStrFormat(value, ch, editor);\n if (ch.formatFunction)\n value = this.tmFormatFunction(value, ch, editor);\n \n if (value && !ch.ifEnd) {\n result.push(value);\n gotoNext(ch);\n } else if (!value && ch.ifEnd) {\n gotoNext(ch.ifEnd);\n }\n } else if (ch.elseEnd) {\n gotoNext(ch.elseEnd);\n } else if (ch.tabstopId != null) {\n result.push(ch);\n } else if (ch.changeCase != null) {\n result.push(ch);\n }\n }\n function gotoNext(ch) {\n var i1 = snippet.indexOf(ch, i + 1);\n if (i1 != -1)\n i = i1;\n }\n return result;\n };\n\n this.insertSnippetForSelection = function(editor, snippetText) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var tabString = editor.session.getTabString();\n var indentString = line.match(/^\\s*/)[0];\n \n if (cursor.column < indentString.length)\n indentString = indentString.slice(0, cursor.column);\n\n snippetText = snippetText.replace(/\\r/g, \"\");\n var tokens = this.tokenizeTmSnippet(snippetText);\n tokens = this.resolveVariables(tokens, editor);\n tokens = tokens.map(function(x) {\n if (x == \"\\n\")\n return x + indentString;\n if (typeof x == \"string\")\n return x.replace(/\\t/g, tabString);\n return x;\n });\n var tabstops = [];\n tokens.forEach(function(p, i) {\n if (typeof p != \"object\")\n return;\n var id = p.tabstopId;\n var ts = tabstops[id];\n if (!ts) {\n ts = tabstops[id] = [];\n ts.index = id;\n ts.value = \"\";\n ts.parents = {};\n }\n if (ts.indexOf(p) !== -1)\n return;\n if (p.choices && !ts.choices)\n ts.choices = p.choices;\n ts.push(p);\n var i1 = tokens.indexOf(p, i + 1);\n if (i1 === -1)\n return;\n\n var value = tokens.slice(i + 1, i1);\n var isNested = value.some(function(t) {return typeof t === \"object\";});\n if (isNested && !ts.value) {\n ts.value = value;\n } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n ts.value = value.join(\"\");\n }\n });\n tabstops.forEach(function(ts) {ts.length = 0;});\n var expanding = {};\n function copyValue(val) {\n var copy = [];\n for (var i = 0; i < val.length; i++) {\n var p = val[i];\n if (typeof p == \"object\") {\n if (expanding[p.tabstopId])\n continue;\n var j = val.lastIndexOf(p, i - 1);\n p = copy[j] || {tabstopId: p.tabstopId};\n }\n copy[i] = p;\n }\n return copy;\n }\n for (var i = 0; i < tokens.length; i++) {\n var p = tokens[i];\n if (typeof p != \"object\")\n continue;\n var id = p.tabstopId;\n var ts = tabstops[id];\n var i1 = tokens.indexOf(p, i + 1);\n if (expanding[id]) {\n if (expanding[id] === p) {\n delete expanding[id];\n Object.keys(expanding).forEach(function(parentId) {\n ts.parents[parentId] = true;\n });\n }\n continue;\n }\n expanding[id] = p;\n var value = ts.value;\n if (typeof value !== \"string\")\n value = copyValue(value);\n else if (p.fmt)\n value = this.tmStrFormat(value, p, editor);\n tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n\n if (ts.indexOf(p) === -1)\n ts.push(p);\n }\n var row = 0, column = 0;\n var text = \"\";\n tokens.forEach(function(t) {\n if (typeof t === \"string\") {\n var lines = t.split(\"\\n\");\n if (lines.length > 1){\n column = lines[lines.length - 1].length;\n row += lines.length - 1;\n } else\n column += t.length;\n text += t;\n } else if (t) {\n if (!t.start)\n t.start = {row: row, column: column};\n else\n t.end = {row: row, column: column};\n }\n });\n var range = editor.getSelectionRange();\n var end = editor.session.replace(range, text);\n\n var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n };\n \n this.insertSnippet = function(editor, snippetText) {\n var self = this;\n if (editor.inVirtualSelectionMode)\n return self.insertSnippetForSelection(editor, snippetText);\n \n editor.forEachSelection(function() {\n self.insertSnippetForSelection(editor, snippetText);\n }, null, {keepOrder: true});\n \n if (editor.tabstopManager)\n editor.tabstopManager.tabNext();\n };\n\n this.$getScope = function(editor) {\n var scope = editor.session.$mode.$id || \"\";\n scope = scope.split(\"/\").pop();\n if (scope === \"html\" || scope === \"php\") {\n if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n scope = \"html\";\n var c = editor.getCursorPosition();\n var state = editor.session.getState(c.row);\n if (typeof state === \"object\") {\n state = state[0];\n }\n if (state.substring) {\n if (state.substring(0, 3) == \"js-\")\n scope = \"javascript\";\n else if (state.substring(0, 4) == \"css-\")\n scope = \"css\";\n else if (state.substring(0, 4) == \"php-\")\n scope = \"php\";\n }\n }\n \n return scope;\n };\n\n this.getActiveScopes = function(editor) {\n var scope = this.$getScope(editor);\n var scopes = [scope];\n var snippetMap = this.snippetMap;\n if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n }\n scopes.push(\"_\");\n return scopes;\n };\n\n this.expandWithTab = function(editor, options) {\n var self = this;\n var result = editor.forEachSelection(function() {\n return self.expandSnippetForSelection(editor, options);\n }, null, {keepOrder: true});\n if (result && editor.tabstopManager)\n editor.tabstopManager.tabNext();\n return result;\n };\n \n this.expandSnippetForSelection = function(editor, options) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var before = line.substring(0, cursor.column);\n var after = line.substr(cursor.column);\n\n var snippetMap = this.snippetMap;\n var snippet;\n this.getActiveScopes(editor).some(function(scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = this.findMatchingSnippet(snippets, before, after);\n return !!snippet;\n }, this);\n if (!snippet)\n return false;\n if (options && options.dryRun)\n return true;\n editor.session.doc.removeInLine(cursor.row,\n cursor.column - snippet.replaceBefore.length,\n cursor.column + snippet.replaceAfter.length\n );\n\n this.variables.M__ = snippet.matchBefore;\n this.variables.T__ = snippet.matchAfter;\n this.insertSnippetForSelection(editor, snippet.content);\n\n this.variables.M__ = this.variables.T__ = null;\n return true;\n };\n\n this.findMatchingSnippet = function(snippetList, before, after) {\n for (var i = snippetList.length; i--;) {\n var s = snippetList[i];\n if (s.startRe && !s.startRe.test(before))\n continue;\n if (s.endRe && !s.endRe.test(after))\n continue;\n if (!s.startRe && !s.endRe)\n continue;\n\n s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n return s;\n }\n };\n\n this.snippetMap = {};\n this.snippetNameMap = {};\n this.register = function(snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n var self = this;\n \n if (!snippets) \n snippets = [];\n \n function wrapRegexp(src) {\n if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n src = \"(?:\" + src + \")\";\n\n return src || \"\";\n }\n function guardedRegexp(re, guard, opening) {\n re = wrapRegexp(re);\n guard = wrapRegexp(guard);\n if (opening) {\n re = guard + re;\n if (re && re[re.length - 1] != \"$\")\n re = re + \"$\";\n } else {\n re = re + guard;\n if (re && re[0] != \"^\")\n re = \"^\" + re;\n }\n return new RegExp(re);\n }\n\n function addSnippet(s) {\n if (!s.scope)\n s.scope = scope || \"_\";\n scope = s.scope;\n if (!snippetMap[scope]) {\n snippetMap[scope] = [];\n snippetNameMap[scope] = {};\n }\n\n var map = snippetNameMap[scope];\n if (s.name) {\n var old = map[s.name];\n if (old)\n self.unregister(old);\n map[s.name] = s;\n }\n snippetMap[scope].push(s);\n\n if (s.prefix)\n s.tabTrigger = s.prefix;\n\n if (!s.content && s.body)\n s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n\n if (s.tabTrigger && !s.trigger) {\n if (!s.guard && /^\\w/.test(s.tabTrigger))\n s.guard = \"\\\\b\";\n s.trigger = lang.escapeRegExp(s.tabTrigger);\n }\n \n if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n return;\n \n s.startRe = guardedRegexp(s.trigger, s.guard, true);\n s.triggerRe = new RegExp(s.trigger);\n\n s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n s.endTriggerRe = new RegExp(s.endTrigger);\n }\n\n if (Array.isArray(snippets)) {\n snippets.forEach(addSnippet);\n } else {\n Object.keys(snippets).forEach(function(key) {\n addSnippet(snippets[key]);\n });\n }\n \n this._signal(\"registerSnippets\", {scope: scope});\n };\n this.unregister = function(snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n\n function removeSnippet(s) {\n var nameMap = snippetNameMap[s.scope||scope];\n if (nameMap && nameMap[s.name]) {\n delete nameMap[s.name];\n var map = snippetMap[s.scope||scope];\n var i = map && map.indexOf(s);\n if (i >= 0)\n map.splice(i, 1);\n }\n }\n if (snippets.content)\n removeSnippet(snippets);\n else if (Array.isArray(snippets))\n snippets.forEach(removeSnippet);\n };\n this.parseSnippetFile = function(str) {\n str = str.replace(/\\r/g, \"\");\n var list = [], snippet = {};\n var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n var m;\n while (m = re.exec(str)) {\n if (m[1]) {\n try {\n snippet = JSON.parse(m[1]);\n list.push(snippet);\n } catch (e) {}\n } if (m[4]) {\n snippet.content = m[4].replace(/^\\t/gm, \"\");\n list.push(snippet);\n snippet = {};\n } else {\n var key = m[2], val = m[3];\n if (key == \"regex\") {\n var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n snippet.guard = guardRe.exec(val)[1];\n snippet.trigger = guardRe.exec(val)[1];\n snippet.endTrigger = guardRe.exec(val)[1];\n snippet.endGuard = guardRe.exec(val)[1];\n } else if (key == \"snippet\") {\n snippet.tabTrigger = val.match(/^\\S*/)[0];\n if (!snippet.name)\n snippet.name = val;\n } else if (key) {\n snippet[key] = val;\n }\n }\n }\n return list;\n };\n this.getSnippetByName = function(name, editor) {\n var snippetMap = this.snippetNameMap;\n var snippet;\n this.getActiveScopes(editor).some(function(scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = snippets[name];\n return !!snippet;\n }, this);\n return snippet;\n };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n if (editor.tabstopManager)\n return editor.tabstopManager;\n editor.tabstopManager = this;\n this.$onChange = this.onChange.bind(this);\n this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n this.$onChangeSession = this.onChangeSession.bind(this);\n this.$onAfterExec = this.onAfterExec.bind(this);\n this.attach(editor);\n};\n(function() {\n this.attach = function(editor) {\n this.index = 0;\n this.ranges = [];\n this.tabstops = [];\n this.$openTabstops = null;\n this.selectedTabstop = null;\n\n this.editor = editor;\n this.editor.on(\"change\", this.$onChange);\n this.editor.on(\"changeSelection\", this.$onChangeSelection);\n this.editor.on(\"changeSession\", this.$onChangeSession);\n this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n this.detach = function() {\n this.tabstops.forEach(this.removeTabstopMarkers, this);\n this.ranges = null;\n this.tabstops = null;\n this.selectedTabstop = null;\n this.editor.removeListener(\"change\", this.$onChange);\n this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.tabstopManager = null;\n this.editor = null;\n };\n\n this.onChange = function(delta) {\n var isRemove = delta.action[0] == \"r\";\n var selectedTabstop = this.selectedTabstop || {};\n var parents = selectedTabstop.parents || {};\n var tabstops = (this.tabstops || []).slice();\n for (var i = 0; i < tabstops.length; i++) {\n var ts = tabstops[i];\n var active = ts == selectedTabstop || parents[ts.index];\n ts.rangeList.$bias = active ? 0 : 1;\n \n if (delta.action == \"remove\" && ts !== selectedTabstop) {\n var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n for (var j = 0; j < toRemove.length; j++)\n this.removeRange(toRemove[j]);\n }\n ts.rangeList.$onChange(delta);\n }\n var session = this.editor.session;\n if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n this.detach();\n };\n this.updateLinkedFields = function() {\n var ts = this.selectedTabstop;\n if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n return;\n this.$inChange = true;\n var session = this.editor.session;\n var text = session.getTextRange(ts.firstNonLinked);\n for (var i = 0; i < ts.length; i++) {\n var range = ts[i];\n if (!range.linked)\n continue;\n var original = range.original;\n var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n session.replace(range, fmt);\n }\n this.$inChange = false;\n };\n this.onAfterExec = function(e) {\n if (e.command && !e.command.readOnly)\n this.updateLinkedFields();\n };\n this.onChangeSelection = function() {\n if (!this.editor)\n return;\n var lead = this.editor.selection.lead;\n var anchor = this.editor.selection.anchor;\n var isEmpty = this.editor.selection.isEmpty();\n for (var i = 0; i < this.ranges.length; i++) {\n if (this.ranges[i].linked)\n continue;\n var containsLead = this.ranges[i].contains(lead.row, lead.column);\n var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n if (containsLead && containsAnchor)\n return;\n }\n this.detach();\n };\n this.onChangeSession = function() {\n this.detach();\n };\n this.tabNext = function(dir) {\n var max = this.tabstops.length;\n var index = this.index + (dir || 1);\n index = Math.min(Math.max(index, 1), max);\n if (index == max)\n index = 0;\n this.selectTabstop(index);\n if (index === 0)\n this.detach();\n };\n this.selectTabstop = function(index) {\n this.$openTabstops = null;\n var ts = this.tabstops[this.index];\n if (ts)\n this.addTabstopMarkers(ts);\n this.index = index;\n ts = this.tabstops[this.index];\n if (!ts || !ts.length)\n return;\n \n this.selectedTabstop = ts;\n var range = ts.firstNonLinked || ts;\n if (ts.choices) range.cursor = range.start;\n if (!this.editor.inVirtualSelectionMode) {\n var sel = this.editor.multiSelect;\n sel.toSingleRange(range);\n for (var i = 0; i < ts.length; i++) {\n if (ts.hasLinkedRanges && ts[i].linked)\n continue;\n sel.addRange(ts[i].clone(), true);\n }\n } else {\n this.editor.selection.fromOrientedRange(range);\n }\n \n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n if (this.selectedTabstop && this.selectedTabstop.choices)\n this.editor.execCommand(\"startAutocomplete\", {matches: this.selectedTabstop.choices});\n };\n this.addTabstops = function(tabstops, start, end) {\n var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n \n if (!this.$openTabstops)\n this.$openTabstops = [];\n if (!tabstops[0]) {\n var p = Range.fromPoints(end, end);\n moveRelative(p.start, start);\n moveRelative(p.end, start);\n tabstops[0] = [p];\n tabstops[0].index = 0;\n }\n\n var i = this.index;\n var arg = [i + 1, 0];\n var ranges = this.ranges;\n tabstops.forEach(function(ts, index) {\n var dest = this.$openTabstops[index] || ts;\n \n for (var i = 0; i < ts.length; i++) {\n var p = ts[i];\n var range = Range.fromPoints(p.start, p.end || p.start);\n movePoint(range.start, start);\n movePoint(range.end, start);\n range.original = p;\n range.tabstop = dest;\n ranges.push(range);\n if (dest != ts)\n dest.unshift(range);\n else\n dest[i] = range;\n if (p.fmtString || (dest.firstNonLinked && useLink)) {\n range.linked = true;\n dest.hasLinkedRanges = true;\n } else if (!dest.firstNonLinked)\n dest.firstNonLinked = range;\n }\n if (!dest.firstNonLinked)\n dest.hasLinkedRanges = false;\n if (dest === ts) {\n arg.push(dest);\n this.$openTabstops[index] = dest;\n }\n this.addTabstopMarkers(dest);\n dest.rangeList = dest.rangeList || new RangeList();\n dest.rangeList.$bias = 0;\n dest.rangeList.addList(dest);\n }, this);\n \n if (arg.length > 2) {\n if (this.tabstops.length)\n arg.push(arg.splice(2, 1)[0]);\n this.tabstops.splice.apply(this.tabstops, arg);\n }\n };\n\n this.addTabstopMarkers = function(ts) {\n var session = this.editor.session;\n ts.forEach(function(range) {\n if (!range.markerId)\n range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n });\n };\n this.removeTabstopMarkers = function(ts) {\n var session = this.editor.session;\n ts.forEach(function(range) {\n session.removeMarker(range.markerId);\n range.markerId = null;\n });\n };\n this.removeRange = function(range) {\n var i = range.tabstop.indexOf(range);\n if (i != -1) range.tabstop.splice(i, 1);\n i = this.ranges.indexOf(range);\n if (i != -1) this.ranges.splice(i, 1);\n i = range.tabstop.rangeList.ranges.indexOf(range);\n if (i != -1) range.tabstop.splice(i, 1);\n this.editor.session.removeMarker(range.markerId);\n if (!range.tabstop.length) {\n i = this.tabstops.indexOf(range.tabstop);\n if (i != -1)\n this.tabstops.splice(i, 1);\n if (!this.tabstops.length)\n this.detach();\n }\n };\n\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys({\n \"Tab\": function(editor) {\n if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))\n return;\n editor.tabstopManager.tabNext(1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Shift-Tab\": function(editor) {\n editor.tabstopManager.tabNext(-1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Esc\": function(editor) {\n editor.tabstopManager.detach();\n }\n });\n}).call(TabstopManager.prototype);\n\n\n\nvar movePoint = function(point, diff) {\n if (point.row == 0)\n point.column += diff.column;\n point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n if (point.row == start.row)\n point.column -= start.column;\n point.row -= start.row;\n};\n\n\ndom.importCssString(\"\\\n.ace_snippet-marker {\\\n -moz-box-sizing: border-box;\\\n box-sizing: border-box;\\\n background: rgba(194, 193, 208, 0.09);\\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\\n position: absolute;\\\n}\", \"snippets.css\", false);\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = require(\"./editor\").Editor;\n(function() {\n this.insertSnippet = function(content, options) {\n return exports.snippetManager.insertSnippet(this, content, options);\n };\n this.expandSnippet = function(options) {\n return exports.snippetManager.expandWithTab(this, options);\n };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\n\nvar $singleLineEditor = function(el) {\n var renderer = new Renderer(el);\n\n renderer.$maxLines = 4;\n\n var editor = new Editor(renderer);\n\n editor.setHighlightActiveLine(false);\n editor.setShowPrintMargin(false);\n editor.renderer.setShowGutter(false);\n editor.renderer.setHighlightGutterLine(false);\n\n editor.$mouseHandler.$focusTimeout = 0;\n editor.$highlightTagPending = true;\n\n return editor;\n};\n\nvar AcePopup = function(parentNode) {\n var el = dom.createElement(\"div\");\n var popup = new $singleLineEditor(el);\n\n if (parentNode)\n parentNode.appendChild(el);\n el.style.display = \"none\";\n popup.renderer.content.style.cursor = \"default\";\n popup.renderer.setStyle(\"ace_autocomplete\");\n\n popup.setOption(\"displayIndentGuides\", false);\n popup.setOption(\"dragDelay\", 150);\n\n var noop = function(){};\n\n popup.focus = noop;\n popup.$isFocused = true;\n\n popup.renderer.$cursorLayer.restartTimer = noop;\n popup.renderer.$cursorLayer.element.style.opacity = 0;\n\n popup.renderer.$maxLines = 8;\n popup.renderer.$keepTextAreaAtCursor = false;\n\n popup.setHighlightActiveLine(false);\n popup.session.highlight(\"\");\n popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n\n popup.on(\"mousedown\", function(e) {\n var pos = e.getDocumentPosition();\n popup.selection.moveToPosition(pos);\n selectionMarker.start.row = selectionMarker.end.row = pos.row;\n e.stop();\n });\n\n var lastMouseEvent;\n var hoverMarker = new Range(-1,0,-1,Infinity);\n var selectionMarker = new Range(-1,0,-1,Infinity);\n selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n popup.setSelectOnHover = function(val) {\n if (!val) {\n hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n } else if (hoverMarker.id) {\n popup.session.removeMarker(hoverMarker.id);\n hoverMarker.id = null;\n }\n };\n popup.setSelectOnHover(false);\n popup.on(\"mousemove\", function(e) {\n if (!lastMouseEvent) {\n lastMouseEvent = e;\n return;\n }\n if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n return;\n }\n lastMouseEvent = e;\n lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (hoverMarker.start.row != row) {\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row);\n }\n });\n popup.renderer.on(\"beforeRender\", function() {\n if (lastMouseEvent && hoverMarker.start.row != -1) {\n lastMouseEvent.$pos = null;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row, true);\n }\n });\n popup.renderer.on(\"afterRender\", function() {\n var row = popup.getRow();\n var t = popup.renderer.$textLayer;\n var selected = t.element.childNodes[row - t.config.firstRow];\n if (selected !== t.selectedNode && t.selectedNode)\n dom.removeCssClass(t.selectedNode, \"ace_selected\");\n t.selectedNode = selected;\n if (selected)\n dom.addCssClass(selected, \"ace_selected\");\n });\n var hideHoverMarker = function() { setHoverMarker(-1); };\n var setHoverMarker = function(row, suppressRedraw) {\n if (row !== hoverMarker.start.row) {\n hoverMarker.start.row = hoverMarker.end.row = row;\n if (!suppressRedraw)\n popup.session._emit(\"changeBackMarker\");\n popup._emit(\"changeHoverMarker\");\n }\n };\n popup.getHoveredRow = function() {\n return hoverMarker.start.row;\n };\n\n event.addListener(popup.container, \"mouseout\", hideHoverMarker);\n popup.on(\"hide\", hideHoverMarker);\n popup.on(\"changeSelection\", hideHoverMarker);\n\n popup.session.doc.getLength = function() {\n return popup.data.length;\n };\n popup.session.doc.getLine = function(i) {\n var data = popup.data[i];\n if (typeof data == \"string\")\n return data;\n return (data && data.value) || \"\";\n };\n\n var bgTokenizer = popup.session.bgTokenizer;\n bgTokenizer.$tokenizeRow = function(row) {\n var data = popup.data[row];\n var tokens = [];\n if (!data)\n return tokens;\n if (typeof data == \"string\")\n data = {value: data};\n var caption = data.caption || data.value || data.name;\n\n function addToken(value, className) {\n value && tokens.push({\n type: (data.className || \"\") + (className || \"\"), \n value: value\n });\n }\n \n var lower = caption.toLowerCase();\n var filterText = (popup.filterText || \"\").toLowerCase();\n var lastIndex = 0;\n var lastI = 0;\n for (var i = 0; i <= filterText.length; i++) {\n if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n var sub = filterText.slice(lastI, i);\n lastI = i;\n var index = lower.indexOf(sub, lastIndex);\n if (index == -1) continue;\n addToken(caption.slice(lastIndex, index), \"\");\n lastIndex = index + sub.length;\n addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n }\n }\n addToken(caption.slice(lastIndex, caption.length), \"\");\n \n if (data.meta)\n tokens.push({type: \"completion-meta\", value: data.meta});\n if (data.message)\n tokens.push({type: \"completion-message\", value: data.message});\n\n return tokens;\n };\n bgTokenizer.$updateOnChange = noop;\n bgTokenizer.start = noop;\n\n popup.session.$computeWidth = function() {\n return this.screenWidth = 0;\n };\n popup.isOpen = false;\n popup.isTopdown = false;\n popup.autoSelect = true;\n popup.filterText = \"\";\n\n popup.data = [];\n popup.setData = function(list, filterText) {\n popup.filterText = filterText || \"\";\n popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n popup.data = list || [];\n popup.setRow(0);\n };\n popup.getData = function(row) {\n return popup.data[row];\n };\n\n popup.getRow = function() {\n return selectionMarker.start.row;\n };\n popup.setRow = function(line) {\n line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length, line));\n if (selectionMarker.start.row != line) {\n popup.selection.clearSelection();\n selectionMarker.start.row = selectionMarker.end.row = line || 0;\n popup.session._emit(\"changeBackMarker\");\n popup.moveCursorTo(line || 0, 0);\n if (popup.isOpen)\n popup._signal(\"select\");\n }\n };\n\n popup.on(\"changeSelection\", function() {\n if (popup.isOpen)\n popup.setRow(popup.selection.lead.row);\n popup.renderer.scrollCursorIntoView();\n });\n\n popup.hide = function() {\n this.container.style.display = \"none\";\n this._signal(\"hide\");\n popup.isOpen = false;\n };\n popup.show = function(pos, lineHeight, topdownOnly) {\n var el = this.container;\n var screenHeight = window.innerHeight;\n var screenWidth = window.innerWidth;\n var renderer = this.renderer;\n var maxH = renderer.$maxLines * lineHeight * 1.4;\n var top = pos.top + this.$borderSize;\n var allowTopdown = top > screenHeight / 2 && !topdownOnly;\n if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n el.style.top = \"\";\n el.style.bottom = screenHeight - top + \"px\";\n popup.isTopdown = false;\n } else {\n top += lineHeight;\n renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n el.style.top = top + \"px\";\n el.style.bottom = \"\";\n popup.isTopdown = true;\n }\n\n el.style.display = \"\";\n\n var left = pos.left;\n if (left + el.offsetWidth > screenWidth)\n left = screenWidth - el.offsetWidth;\n\n el.style.left = left + \"px\";\n\n this._signal(\"show\");\n lastMouseEvent = null;\n popup.isOpen = true;\n };\n\n popup.goTo = function(where) {\n var row = this.getRow();\n var max = this.session.getLength() - 1;\n\n switch(where) {\n case \"up\": row = row <= 0 ? max : row - 1; break;\n case \"down\": row = row >= max ? -1 : row + 1; break;\n case \"start\": row = 0; break;\n case \"end\": row = max; break;\n }\n\n this.setRow(row);\n };\n\n\n popup.getTextLeftOffset = function() {\n return this.$borderSize + this.renderer.$padding + this.$imageSize;\n };\n\n popup.$imageSize = 0;\n popup.$borderSize = 1;\n\n return popup;\n};\n\ndom.importCssString(\"\\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n background-color: #CAD6FA;\\\n z-index: 1;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n background-color: #3a674e;\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n border: 1px solid #abbffe;\\\n margin-top: -1px;\\\n background: rgba(233,233,253,0.4);\\\n position: absolute;\\\n z-index: 2;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\\n border: 1px solid rgba(109, 150, 13, 0.8);\\\n background: rgba(58, 103, 78, 0.62);\\\n}\\\n.ace_completion-meta {\\\n opacity: 0.5;\\\n margin: 0.9em;\\\n}\\\n.ace_completion-message {\\\n color: blue;\\\n}\\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n color: #2d69c7;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n color: #93ca12;\\\n}\\\n.ace_editor.ace_autocomplete {\\\n width: 300px;\\\n z-index: 200000;\\\n border: 1px lightgray solid;\\\n position: fixed;\\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\\n line-height: 1.4;\\\n background: #fefefe;\\\n color: #111;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete {\\\n border: 1px #484747 solid;\\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\\n line-height: 1.4;\\\n background: #25282c;\\\n color: #c1c1c1;\\\n}\", \"autocompletion.css\", false);\n\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.parForEach = function(array, fn, callback) {\n var completed = 0;\n var arLength = array.length;\n if (arLength === 0)\n callback();\n for (var i = 0; i < arLength; i++) {\n fn(array[i], function(result, err) {\n completed++;\n if (completed === arLength)\n callback(result, err);\n });\n }\n};\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\n\nexports.retrievePrecedingIdentifier = function(text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos-1; i >= 0; i--) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf.reverse().join(\"\");\n};\n\nexports.retrieveFollowingIdentifier = function(text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos; i < text.length; i++) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf;\n};\n\nexports.getCompletionPrefix = function (editor) {\n var pos = editor.getCursorPosition();\n var line = editor.session.getLine(pos.row);\n var prefix;\n editor.completers.forEach(function(completer) {\n if (completer.identifierRegexps) {\n completer.identifierRegexps.forEach(function(identifierRegex) {\n if (!prefix && identifierRegex)\n prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n }.bind(this));\n }\n }.bind(this));\n return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar util = require(\"./autocomplete/util\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\nvar config = require(\"./config\");\n\nvar Autocomplete = function() {\n this.autoInsert = false;\n this.autoSelect = true;\n this.exactMatch = false;\n this.gatherCompletionsId = 0;\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys(this.commands);\n\n this.blurListener = this.blurListener.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.mousedownListener = this.mousedownListener.bind(this);\n this.mousewheelListener = this.mousewheelListener.bind(this);\n\n this.changeTimer = lang.delayedCall(function() {\n this.updateCompletions(true);\n }.bind(this));\n\n this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n\n(function() {\n\n this.$init = function() {\n this.popup = new AcePopup(document.body || document.documentElement);\n this.popup.on(\"click\", function(e) {\n this.insertMatch();\n e.stop();\n }.bind(this));\n this.popup.focus = this.editor.focus.bind(this.editor);\n this.popup.on(\"show\", this.tooltipTimer.bind(null, null));\n this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n return this.popup;\n };\n\n this.getPopup = function() {\n return this.popup || this.$init();\n };\n\n this.openPopup = function(editor, prefix, keepPopupPosition) {\n if (!this.popup)\n this.$init();\n\n this.popup.autoSelect = this.autoSelect;\n\n this.popup.setData(this.completions.filtered, this.completions.filterText);\n\n editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n \n var renderer = editor.renderer;\n this.popup.setRow(this.autoSelect ? 0 : -1);\n if (!keepPopupPosition) {\n this.popup.setTheme(editor.getTheme());\n this.popup.setFontSize(editor.getFontSize());\n\n var lineHeight = renderer.layerConfig.lineHeight;\n\n var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n pos.left -= this.popup.getTextLeftOffset();\n\n var rect = editor.container.getBoundingClientRect();\n pos.top += rect.top - renderer.layerConfig.offset;\n pos.left += rect.left - editor.renderer.scrollLeft;\n pos.left += renderer.gutterWidth;\n\n this.popup.show(pos, lineHeight);\n } else if (keepPopupPosition && !prefix) {\n this.detach();\n }\n this.changeTimer.cancel();\n };\n\n this.detach = function() {\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.off(\"changeSelection\", this.changeListener);\n this.editor.off(\"blur\", this.blurListener);\n this.editor.off(\"mousedown\", this.mousedownListener);\n this.editor.off(\"mousewheel\", this.mousewheelListener);\n this.changeTimer.cancel();\n this.hideDocTooltip();\n\n this.gatherCompletionsId += 1;\n if (this.popup && this.popup.isOpen)\n this.popup.hide();\n\n if (this.base)\n this.base.detach();\n this.activated = false;\n this.completions = this.base = null;\n };\n\n this.changeListener = function(e) {\n var cursor = this.editor.selection.lead;\n if (cursor.row != this.base.row || cursor.column < this.base.column) {\n this.detach();\n }\n if (this.activated)\n this.changeTimer.schedule();\n else\n this.detach();\n };\n\n this.blurListener = function(e) {\n var el = document.activeElement;\n var text = this.editor.textInput.getElement();\n var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n var container = this.popup && this.popup.container;\n if (el != text && el.parentNode != container && !fromTooltip\n && el != this.tooltipNode && e.relatedTarget != text\n ) {\n this.detach();\n }\n };\n\n this.mousedownListener = function(e) {\n this.detach();\n };\n\n this.mousewheelListener = function(e) {\n this.detach();\n };\n\n this.goTo = function(where) {\n this.popup.goTo(where);\n };\n\n this.insertMatch = function(data, options) {\n if (!data)\n data = this.popup.getData(this.popup.getRow());\n if (!data)\n return false;\n\n var completions = this.completions;\n this.editor.startOperation({command: {name: \"insertMatch\"}});\n if (data.completer && data.completer.insertMatch) {\n data.completer.insertMatch(this.editor, data);\n } else {\n if (completions.filterText) {\n var ranges = this.editor.selection.getAllRanges();\n for (var i = 0, range; range = ranges[i]; i++) {\n range.start.column -= completions.filterText.length;\n this.editor.session.remove(range);\n }\n }\n if (data.snippet)\n snippetManager.insertSnippet(this.editor, data.snippet);\n else\n this.editor.execCommand(\"insertstring\", data.value || data);\n }\n if (this.completions == completions)\n this.detach();\n this.editor.endOperation();\n };\n\n\n this.commands = {\n \"Up\": function(editor) { editor.completer.goTo(\"up\"); },\n \"Down\": function(editor) { editor.completer.goTo(\"down\"); },\n \"Ctrl-Up|Ctrl-Home\": function(editor) { editor.completer.goTo(\"start\"); },\n \"Ctrl-Down|Ctrl-End\": function(editor) { editor.completer.goTo(\"end\"); },\n\n \"Esc\": function(editor) { editor.completer.detach(); },\n \"Return\": function(editor) { return editor.completer.insertMatch(); },\n \"Shift-Return\": function(editor) { editor.completer.insertMatch(null, {deleteSuffix: true}); },\n \"Tab\": function(editor) {\n var result = editor.completer.insertMatch();\n if (!result && !editor.tabstopManager)\n editor.completer.goTo(\"down\");\n else\n return result;\n },\n\n \"PageUp\": function(editor) { editor.completer.popup.gotoPageUp(); },\n \"PageDown\": function(editor) { editor.completer.popup.gotoPageDown(); }\n };\n\n this.gatherCompletions = function(editor, callback) {\n var session = editor.getSession();\n var pos = editor.getCursorPosition();\n\n var prefix = util.getCompletionPrefix(editor);\n\n this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n this.base.$insertRight = true;\n\n var matches = [];\n var total = editor.completers.length;\n editor.completers.forEach(function(completer, i) {\n completer.getCompletions(editor, session, pos, prefix, function(err, results) {\n if (!err && results)\n matches = matches.concat(results);\n callback(null, {\n prefix: util.getCompletionPrefix(editor),\n matches: matches,\n finished: (--total === 0)\n });\n });\n });\n return true;\n };\n\n this.showPopup = function(editor, options) {\n if (this.editor)\n this.detach();\n\n this.activated = true;\n\n this.editor = editor;\n if (editor.completer != this) {\n if (editor.completer)\n editor.completer.detach();\n editor.completer = this;\n }\n\n editor.on(\"changeSelection\", this.changeListener);\n editor.on(\"blur\", this.blurListener);\n editor.on(\"mousedown\", this.mousedownListener);\n editor.on(\"mousewheel\", this.mousewheelListener);\n\n this.updateCompletions(false, options);\n };\n\n this.updateCompletions = function(keepPopupPosition, options) {\n if (keepPopupPosition && this.base && this.completions) {\n var pos = this.editor.getCursorPosition();\n var prefix = this.editor.session.getTextRange({start: this.base, end: pos});\n if (prefix == this.completions.filterText)\n return;\n this.completions.setFilter(prefix);\n if (!this.completions.filtered.length)\n return this.detach();\n if (this.completions.filtered.length == 1\n && this.completions.filtered[0].value == prefix\n && !this.completions.filtered[0].snippet)\n return this.detach();\n this.openPopup(this.editor, prefix, keepPopupPosition);\n return;\n }\n \n if (options && options.matches) {\n var pos = this.editor.getSelectionRange().start;\n this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);\n this.base.$insertRight = true;\n this.completions = new FilteredList(options.matches);\n return this.openPopup(this.editor, \"\", keepPopupPosition);\n }\n var _id = this.gatherCompletionsId;\n var detachIfFinished = function(results) {\n if (!results.finished) return;\n return this.detach();\n }.bind(this);\n\n var processResults = function(results) {\n var prefix = results.prefix;\n var matches = results.matches;\n\n this.completions = new FilteredList(matches);\n\n if (this.exactMatch)\n this.completions.exactMatch = true;\n\n this.completions.setFilter(prefix);\n var filtered = this.completions.filtered;\n if (!filtered.length)\n return detachIfFinished(results);\n if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n return detachIfFinished(results);\n if (this.autoInsert && filtered.length == 1 && results.finished)\n return this.insertMatch(filtered[0]);\n\n this.openPopup(this.editor, prefix, keepPopupPosition);\n }.bind(this);\n\n var isImmediate = true;\n var immediateResults = null;\n this.gatherCompletions(this.editor, function(err, results) {\n var prefix = results.prefix;\n var matches = results && results.matches;\n\n if (!matches || !matches.length)\n return detachIfFinished(results);\n if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)\n return;\n if (isImmediate) {\n immediateResults = results;\n return;\n }\n\n processResults(results);\n }.bind(this));\n \n isImmediate = false;\n if (immediateResults) {\n var results = immediateResults;\n immediateResults = null;\n processResults(results);\n }\n };\n\n this.cancelContextMenu = function() {\n this.editor.$mouseHandler.cancelContextMenu();\n };\n\n this.updateDocTooltip = function() {\n var popup = this.popup;\n var all = popup.data;\n var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n var doc = null;\n if (!selected || !this.editor || !this.popup.isOpen)\n return this.hideDocTooltip();\n this.editor.completers.some(function(completer) {\n if (completer.getDocTooltip)\n doc = completer.getDocTooltip(selected);\n return doc;\n });\n if (!doc && typeof selected != \"string\")\n doc = selected;\n\n if (typeof doc == \"string\")\n doc = {docText: doc};\n if (!doc || !(doc.docHTML || doc.docText))\n return this.hideDocTooltip();\n this.showDocTooltip(doc);\n };\n\n this.showDocTooltip = function(item) {\n if (!this.tooltipNode) {\n this.tooltipNode = dom.createElement(\"div\");\n this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n this.tooltipNode.style.margin = 0;\n this.tooltipNode.style.pointerEvents = \"auto\";\n this.tooltipNode.tabIndex = -1;\n this.tooltipNode.onblur = this.blurListener.bind(this);\n this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n }\n\n var tooltipNode = this.tooltipNode;\n if (item.docHTML) {\n tooltipNode.innerHTML = item.docHTML;\n } else if (item.docText) {\n tooltipNode.textContent = item.docText;\n }\n\n if (!tooltipNode.parentNode)\n document.body.appendChild(tooltipNode);\n var popup = this.popup;\n var rect = popup.container.getBoundingClientRect();\n tooltipNode.style.top = popup.container.style.top;\n tooltipNode.style.bottom = popup.container.style.bottom;\n\n tooltipNode.style.display = \"block\";\n if (window.innerWidth - rect.right < 320) {\n if (rect.left < 320) {\n if(popup.isTopdown) {\n tooltipNode.style.top = rect.bottom + \"px\";\n tooltipNode.style.left = rect.left + \"px\";\n tooltipNode.style.right = \"\";\n tooltipNode.style.bottom = \"\";\n } else {\n tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n tooltipNode.style.left = rect.left + \"px\";\n tooltipNode.style.right = \"\";\n tooltipNode.style.bottom = \"\";\n }\n } else {\n tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n tooltipNode.style.left = \"\";\n }\n } else {\n tooltipNode.style.left = (rect.right + 1) + \"px\";\n tooltipNode.style.right = \"\";\n }\n };\n\n this.hideDocTooltip = function() {\n this.tooltipTimer.cancel();\n if (!this.tooltipNode) return;\n var el = this.tooltipNode;\n if (!this.editor.isFocused() && document.activeElement == el)\n this.editor.focus();\n this.tooltipNode = null;\n if (el.parentNode)\n el.parentNode.removeChild(el);\n };\n \n this.onTooltipClick = function(e) {\n var a = e.target;\n while (a && a != this.tooltipNode) {\n if (a.nodeName == \"A\" && a.href) {\n a.rel = \"noreferrer\";\n a.target = \"_blank\";\n break;\n }\n a = a.parentNode;\n }\n };\n\n this.destroy = function() {\n this.detach();\n if (this.popup) {\n this.popup.destroy();\n var el = this.popup.container;\n if (el && el.parentNode)\n el.parentNode.removeChild(el);\n }\n if (this.editor && this.editor.completer == this)\n this.editor.completer == null;\n this.popup = null;\n };\n\n}).call(Autocomplete.prototype);\n\n\nAutocomplete.for = function(editor) {\n if (editor.completer) {\n return editor.completer;\n }\n if (config.get(\"sharedPopups\")) {\n if (!Autocomplete.$shared)\n Autocomplete.$sharedInstance = new Autocomplete();\n editor.completer = Autocomplete.$sharedInstance;\n } else {\n editor.completer = new Autocomplete();\n editor.once(\"destroy\", function(e, editor) {\n editor.completer.destroy();\n });\n }\n return editor.completer;\n};\n\nAutocomplete.startCommand = {\n name: \"startAutocomplete\",\n exec: function(editor, options) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.autoSelect = true;\n completer.showPopup(editor, options);\n completer.cancelContextMenu();\n },\n bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\n\nvar FilteredList = function(array, filterText) {\n this.all = array;\n this.filtered = array;\n this.filterText = filterText || \"\";\n this.exactMatch = false;\n};\n(function(){\n this.setFilter = function(str) {\n if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n var matches = this.filtered;\n else\n var matches = this.all;\n\n this.filterText = str;\n matches = this.filterCompletions(matches, this.filterText);\n matches = matches.sort(function(a, b) {\n return b.exactMatch - a.exactMatch || b.$score - a.$score \n || (a.caption || a.value).localeCompare(b.caption || b.value);\n });\n var prev = null;\n matches = matches.filter(function(item){\n var caption = item.snippet || item.caption || item.value;\n if (caption === prev) return false;\n prev = caption;\n return true;\n });\n\n this.filtered = matches;\n };\n this.filterCompletions = function(items, needle) {\n var results = [];\n var upper = needle.toUpperCase();\n var lower = needle.toLowerCase();\n loop: for (var i = 0, item; item = items[i]; i++) {\n var caption = item.caption || item.value || item.snippet;\n if (!caption) continue;\n var lastIndex = -1;\n var matchMask = 0;\n var penalty = 0;\n var index, distance;\n\n if (this.exactMatch) {\n if (needle !== caption.substr(0, needle.length))\n continue loop;\n } else {\n var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n if (fullMatchIndex > -1) {\n penalty = fullMatchIndex;\n } else {\n for (var j = 0; j < needle.length; j++) {\n var i1 = caption.indexOf(lower[j], lastIndex + 1);\n var i2 = caption.indexOf(upper[j], lastIndex + 1);\n index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n if (index < 0)\n continue loop;\n distance = index - lastIndex - 1;\n if (distance > 0) {\n if (lastIndex === -1)\n penalty += 10;\n penalty += distance;\n matchMask = matchMask | (1 << j);\n }\n lastIndex = index;\n }\n }\n }\n item.matchMask = matchMask;\n item.exactMatch = penalty ? 0 : 1;\n item.$score = (item.score || 0) - penalty;\n results.push(item);\n }\n return results;\n };\n}).call(FilteredList.prototype);\n\nexports.Autocomplete = Autocomplete;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n var Range = require(\"../range\").Range;\n \n var splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\n\n function getWordIndex(doc, pos) {\n var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos));\n return textBefore.split(splitRegex).length - 1;\n }\n function wordDistance(doc, pos) {\n var prefixPos = getWordIndex(doc, pos);\n var words = doc.getValue().split(splitRegex);\n var wordScores = Object.create(null);\n \n var currentWord = words[prefixPos];\n\n words.forEach(function(word, idx) {\n if (!word || word === currentWord) return;\n\n var distance = Math.abs(prefixPos - idx);\n var score = words.length - distance;\n if (wordScores[word]) {\n wordScores[word] = Math.max(score, wordScores[word]);\n } else {\n wordScores[word] = score;\n }\n });\n return wordScores;\n }\n\n exports.getCompletions = function(editor, session, pos, prefix, callback) {\n var wordScore = wordDistance(session, pos);\n var wordList = Object.keys(wordScore);\n callback(null, wordList.map(function(word) {\n return {\n caption: word,\n value: word,\n score: wordScore[word],\n meta: \"local\"\n };\n }));\n };\n});\n\nace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\n\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n getCompletions: function(editor, session, pos, prefix, callback) {\n if (session.$mode.completer) {\n return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n }\n var state = editor.session.getState(pos.row);\n var completions = session.$mode.getCompletions(state, session, pos, prefix);\n callback(null, completions);\n }\n};\n\nvar snippetCompleter = {\n getCompletions: function(editor, session, pos, prefix, callback) {\n var scopes = [];\n var token = session.getTokenAt(pos.row, pos.column);\n if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/))\n scopes.push('html-tag');\n else\n scopes = snippetManager.getActiveScopes(editor);\n\n var snippetMap = snippetManager.snippetMap;\n var completions = [];\n scopes.forEach(function(scope) {\n var snippets = snippetMap[scope] || [];\n for (var i = snippets.length; i--;) {\n var s = snippets[i];\n var caption = s.name || s.tabTrigger;\n if (!caption)\n continue;\n completions.push({\n caption: caption,\n snippet: s.content,\n meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n type: \"snippet\"\n });\n }\n }, this);\n callback(null, completions);\n },\n getDocTooltip: function(item) {\n if (item.type == \"snippet\" && !item.docHTML) {\n item.docHTML = [\n \"\", lang.escapeHTML(item.caption), \" \", \" \",\n lang.escapeHTML(item.snippet)\n ].join(\"\");\n }\n }\n};\n\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function(val) {\n completers.length = 0;\n if (val) completers.push.apply(completers, val);\n};\nexports.addCompleter = function(completer) {\n completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\n\nvar expandSnippet = {\n name: \"expandSnippet\",\n exec: function(editor) {\n return snippetManager.expandWithTab(editor);\n },\n bindKey: \"Tab\"\n};\n\nvar onChangeMode = function(e, editor) {\n loadSnippetsForMode(editor.session.$mode);\n};\n\nvar loadSnippetsForMode = function(mode) {\n if (typeof mode == \"string\")\n mode = config.$modes[mode];\n if (!mode)\n return;\n if (!snippetManager.files)\n snippetManager.files = {};\n \n loadSnippetFile(mode.$id, mode.snippetFileId);\n if (mode.modes)\n mode.modes.forEach(loadSnippetsForMode);\n};\n\nvar loadSnippetFile = function(id, snippetFilePath) {\n if (!snippetFilePath || !id || snippetManager.files[id])\n return;\n snippetManager.files[id] = {};\n config.loadModule(snippetFilePath, function(m) {\n if (!m) return;\n snippetManager.files[id] = m;\n if (!m.snippets && m.snippetText)\n m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n snippetManager.register(m.snippets || [], m.scope);\n if (m.includeScopes) {\n snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n m.includeScopes.forEach(function(x) {\n loadSnippetsForMode(\"ace/mode/\" + x);\n });\n }\n });\n};\n\nvar doLiveAutocomplete = function(e) {\n var editor = e.editor;\n var hasCompleter = editor.completer && editor.completer.activated;\n if (e.command.name === \"backspace\") {\n if (hasCompleter && !util.getCompletionPrefix(editor))\n editor.completer.detach();\n }\n else if (e.command.name === \"insertstring\") {\n var prefix = util.getCompletionPrefix(editor);\n if (prefix && !hasCompleter) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.showPopup(editor);\n }\n }\n};\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n enableBasicAutocompletion: {\n set: function(val) {\n if (val) {\n if (!this.completers)\n this.completers = Array.isArray(val)? val: completers;\n this.commands.addCommand(Autocomplete.startCommand);\n } else {\n this.commands.removeCommand(Autocomplete.startCommand);\n }\n },\n value: false\n },\n enableLiveAutocompletion: {\n set: function(val) {\n if (val) {\n if (!this.completers)\n this.completers = Array.isArray(val)? val: completers;\n this.commands.on('afterExec', doLiveAutocomplete);\n } else {\n this.commands.removeListener('afterExec', doLiveAutocomplete);\n }\n },\n value: false\n },\n enableSnippets: {\n set: function(val) {\n if (val) {\n this.commands.addCommand(expandSnippet);\n this.on(\"changeMode\", onChangeMode);\n onChangeMode(null, this);\n } else {\n this.commands.removeCommand(expandSnippet);\n this.off(\"changeMode\", onChangeMode);\n }\n },\n value: false\n }\n});\n}); (function() {\n ace.require([\"ace/ext/language_tools\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/mode/lucene_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuceneHighlightRules = function() {\n this.$rules = {\n \"start\" : [\n {\n token: \"constant.language.escape\",\n regex: /\\\\[\\-+&|!(){}\\[\\]^\"~*?:\\\\]/\n }, {\n token: \"constant.character.negation\",\n regex: \"\\\\-\"\n }, {\n token: \"constant.character.interro\",\n regex: \"\\\\?\"\n }, {\n token: \"constant.character.required\",\n regex: \"\\\\+\"\n }, {\n token: \"constant.character.asterisk\",\n regex: \"\\\\*\"\n }, {\n token: 'constant.character.proximity',\n regex: '~(?:0\\\\.[0-9]+|[0-9]+)?'\n }, {\n token: 'keyword.operator',\n regex: '(AND|OR|NOT|TO)\\\\b'\n }, {\n token: \"paren.lparen\",\n regex: \"[\\\\(\\\\{\\\\[]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\)\\\\}\\\\]]\"\n }, {\n token: \"keyword.operator\",\n regex: /[><=^]/\n }, {\n token: \"constant.numeric\",\n regex: /\\d[\\d.-]*/\n }, {\n token: \"string\",\n regex: /\"(?:\\\\\"|[^\"])*\"/\n }, {\n token: \"keyword\",\n regex: /(?:\\\\.|[^\\s\\-+&|!(){}\\[\\]^\"~*?:\\\\])+:/,\n next: \"maybeRegex\"\n }, {\n token: \"term\",\n regex: /\\w+/\n }, {\n token: \"text\",\n regex: /\\s+/\n }\n ],\n \"maybeRegex\": [{\n token: \"text\",\n regex: /\\s+/\n }, {\n token: \"string.regexp.start\",\n regex: \"/\",\n next: \"regex\"\n }, {\n regex: \"\",\n next: \"start\"\n }],\n \"regex\": [\n {\n token: \"regexp.keyword.operator\",\n regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n }, {\n token: \"string.regexp.end\",\n regex: \"/[sxngimy]*\",\n next: \"no_regex\"\n }, {\n token : \"invalid\",\n regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n }, {\n token : \"constant.language.escape\",\n regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n }, {\n token: \"constant.language.escape\",\n regex: \"<\\d+-\\d+>|[~&@]\"\n }, {\n token : \"constant.language.delimiter\",\n regex: /\\|/\n }, {\n token: \"constant.language.escape\",\n regex: /\\[\\^?/,\n next: \"regex_character_class\"\n }, {\n token: \"empty\",\n regex: \"$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string.regexp\"\n }\n ],\n \"regex_character_class\": [\n {\n token: \"regexp.charclass.keyword.operator\",\n regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n }, {\n token: \"constant.language.escape\",\n regex: \"]\",\n next: \"regex\"\n }, {\n token: \"constant.language.escape\",\n regex: \"-\"\n }, {\n token: \"empty\",\n regex: \"$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string.regexp.charachterclass\"\n }\n ]\n };\n};\n\noop.inherits(LuceneHighlightRules, TextHighlightRules);\n\nexports.LuceneHighlightRules = LuceneHighlightRules;\n});\n\nace.define(\"ace/mode/lucene\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lucene_highlight_rules\"], function(require, exports, module) {\n'use strict';\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuceneHighlightRules = require(\"./lucene_highlight_rules\").LuceneHighlightRules;\n\nvar Mode = function() {\n this.HighlightRules = LuceneHighlightRules;\n this.$behaviour = this.$defaultBehaviour;\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n this.$id = \"ace/mode/lucene\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n}); (function() {\n ace.require([\"ace/mode/lucene\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n "],"names":["ace","define","require","exports","module","dom","oop","EventEmitter","lang","Range","RangeList","HashHandler","Tokenizer","clipboard","VARIABLES","CURRENT_WORD","editor","session","getTextRange","getWordRange","SELECTION","name","indentation","text","replace","CURRENT_LINE","getLine","getCursorPosition","row","PREV_LINE","LINE_INDEX","LINE_NUMBER","SOFT_TABS","getUseSoftTabs","TAB_SIZE","getTabSize","CLIPBOARD","getText","FILENAME","exec","this","FILEPATH","FILENAME_BASE","DIRECTORY","WORKSPACE_NAME","FULLNAME","BLOCK_COMMENT_START","mode","$mode","blockComment","start","BLOCK_COMMENT_END","end","LINE_COMMENT","lineCommentStart","CURRENT_YEAR","date","bind","year","CURRENT_YEAR_SHORT","CURRENT_MONTH","month","CURRENT_MONTH_NAME","CURRENT_MONTH_NAME_SHORT","CURRENT_DATE","day","CURRENT_DAY_NAME","weekday","CURRENT_DAY_NAME_SHORT","CURRENT_HOUR","hour","hour12","CURRENT_MINUTE","minute","CURRENT_SECOND","second","dateFormat","str","Date","toLocaleString","length","SELECTED_TEXT","SnippetManager","snippetMap","snippetNameMap","implement","getTokenizer","$tokenizer","createTokenizer","TabstopToken","substr","test","tabstopId","parseInt","escape","ch","formatMatcher","regex","onMatch","val","state","stack","ts","fmtString","guard","slice","flag","next","indexOf","shift","t","unshift","token","merge","snippetVar","choices","operator","split","map","value","formatString","expectElse","ifEnd","elseEnd","changeCase","local","formatStringVar","formatFunction","tokenizeTmSnippet","startState","getLineTokens","tokens","x","getVariableValue","variables","__","hasOwnProperty","tmStrFormat","fmt","re","RegExp","fmtTokens","_self","formatted","oldArgs","call","arguments","fmtParts","resolveVariables","gChangeCase","i","toUpperCase","toLowerCase","join","tmFormatFunction","snippet","result","afterNewLine","j","push","gotoNext","i1","insertSnippetForSelection","snippetText","cursor","line","tabString","getTabString","indentString","match","column","tabstops","forEach","p","id","index","parents","some","expanding","copyValue","copy","lastIndexOf","Object","keys","parentId","splice","apply","Math","max","concat","lines","range","getSelectionRange","tabstopManager","TabstopManager","selectionId","inVirtualSelectionMode","selection","addTabstops","insertSnippet","self","forEachSelection","keepOrder","tabNext","$getScope","scope","$id","pop","inlinePhp","c","getState","substring","getActiveScopes","scopes","includeScopes","expandWithTab","options","expandSnippetForSelection","before","after","snippets","findMatchingSnippet","dryRun","doc","removeInLine","replaceBefore","replaceAfter","M__","matchBefore","T__","matchAfter","content","snippetList","s","startRe","endRe","triggerRe","endTriggerRe","register","wrapRegexp","src","guardedRegexp","opening","addSnippet","old","unregister","prefix","tabTrigger","body","Array","isArray","trigger","escapeRegExp","endTrigger","endGuard","key","_signal","removeSnippet","nameMap","parseSnippetFile","m","list","JSON","parse","e","guardRe","getSnippetByName","prototype","$onChange","onChange","$onChangeSelection","delayedCall","onChangeSelection","schedule","$onChangeSession","onChangeSession","$onAfterExec","onAfterExec","attach","ranges","$openTabstops","selectedTabstop","on","commands","keyBinding","addKeyboardHandler","keyboardHandler","detach","removeTabstopMarkers","removeListener","removeKeyboardHandler","delta","isRemove","action","active","rangeList","$bias","parentActive","startIndex","pointIndex","endIndex","toRemove","removeRange","$inChange","getLength","getValue","updateLinkedFields","hasLinkedRanges","firstNonLinked","linked","original","snippetManager","command","readOnly","lead","anchor","isEmpty","containsLead","contains","containsAnchor","dir","min","selectTabstop","addTabstopMarkers","fromOrientedRange","sel","multiSelect","toSingleRange","addRange","clone","execCommand","matches","useLink","getOption","fromPoints","moveRelative","arg","dest","movePoint","tabstop","addList","markerId","addMarker","removeMarker","bindKeys","renderer","scrollCursorIntoView","point","diff","importCssString","Editor","expandSnippet","Renderer","VirtualRenderer","event","$singleLineEditor","el","$maxLines","setHighlightActiveLine","setShowPrintMargin","setShowGutter","setHighlightGutterLine","$mouseHandler","$focusTimeout","$highlightTagPending","AcePopup","parentNode","createElement","popup","appendChild","style","display","setStyle","setOption","lastMouseEvent","noop","focus","$isFocused","$cursorLayer","restartTimer","element","opacity","$keepTextAreaAtCursor","highlight","$searchHighlight","clazz","pos","getDocumentPosition","moveToPosition","selectionMarker","stop","hoverMarker","Infinity","setSelectOnHover","y","scrollTop","setRow","setHoverMarker","$pos","getRow","$textLayer","selected","childNodes","config","firstRow","selectedNode","removeCssClass","addCssClass","hideHoverMarker","suppressRedraw","_emit","getHoveredRow","addListener","container","data","bgTokenizer","$tokenizeRow","caption","addToken","className","type","lower","filterText","lastIndex","lastI","matchMask","sub","meta","message","$updateOnChange","$computeWidth","screenWidth","isOpen","isTopdown","autoSelect","setData","setValue","stringRepeat","getData","clearSelection","moveCursorTo","hide","show","lineHeight","topdownOnly","screenHeight","window","innerHeight","innerWidth","maxH","top","$borderSize","$maxPixelHeight","bottom","left","offsetWidth","goTo","where","getTextLeftOffset","$padding","$imageSize","parForEach","array","fn","callback","completed","arLength","err","ID_REGEX","retrievePrecedingIdentifier","buf","reverse","retrieveFollowingIdentifier","getCompletionPrefix","completers","completer","identifierRegexps","identifierRegex","util","Autocomplete","autoInsert","exactMatch","gatherCompletionsId","blurListener","changeListener","mousedownListener","mousewheelListener","changeTimer","updateCompletions","tooltipTimer","updateDocTooltip","$init","document","documentElement","insertMatch","getPopup","openPopup","keepPopupPosition","completions","filtered","setTheme","getTheme","setFontSize","getFontSize","layerConfig","getPixelPosition","base","rect","getBoundingClientRect","offset","scrollLeft","gutterWidth","cancel","off","hideDocTooltip","activated","activeElement","textInput","getElement","fromTooltip","relatedTarget","tooltipNode","startOperation","getAllRanges","remove","endOperation","deleteSuffix","gotoPageUp","gotoPageDown","gatherCompletions","getSession","createAnchor","$insertRight","total","getCompletions","results","finished","showPopup","setFilter","FilteredList","_id","detachIfFinished","processResults","isImmediate","immediateResults","cancelContextMenu","all","getDocTooltip","docText","docHTML","showDocTooltip","item","margin","pointerEvents","tabIndex","onblur","onclick","onTooltipClick","innerHTML","textContent","right","offsetTop","offsetHeight","isFocused","removeChild","a","target","nodeName","href","rel","destroy","for","get","$shared","$sharedInstance","once","startCommand","bindKey","filterCompletions","sort","b","$score","localeCompare","prev","filter","items","needle","upper","loop","distance","penalty","fullMatchIndex","i2","score","splitRegex","wordDistance","prefixPos","getWordIndex","words","wordScores","create","currentWord","word","idx","abs","wordScore","textCompleter","keyWordCompleter","snippetCompleter","getTokenAt","escapeHTML","setCompleters","addCompleter","onChangeMode","loadSnippetsForMode","$modes","files","loadSnippetFile","snippetFileId","modes","snippetFilePath","loadModule","doLiveAutocomplete","hasCompleter","defineOptions","enableBasicAutocompletion","set","addCommand","removeCommand","enableLiveAutocompletion","enableSnippets","TextHighlightRules","LuceneHighlightRules","$rules","defaultToken","inherits","TextMode","Mode","HighlightRules","$behaviour","$defaultBehaviour"],"sourceRoot":""}