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.325e2d4b-2679.170f39d4ebf9f3e91c81.js.map Maven / Gradle / Ivy
{"version":3,"file":"325e2d4b-2679.170f39d4ebf9f3e91c81.js","mappings":"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","sources":["webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-language_tools.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){\"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\");\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};\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\nfunction date(dateFormat) {\n var str = new Date().toLocaleString(\"en-us\", dateFormat);\n return str.length == 1 ? \"0\" + str : str;\n}\nvar SnippetManager = function () {\n this.snippetMap = {};\n this.snippetNameMap = {};\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.getTokenizer = function () {\n return SnippetManager.$tokenizer || this.createTokenizer();\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 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 }\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 this.tokenizeTmSnippet = function (str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n return x.value || x;\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 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 this.variables = VARIABLES;\n this.tmStrFormat = function (str, ch, editor) {\n if (!ch.fmt)\n 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 }\n else if (ch.changeCase) {\n gChangeCase = ch.changeCase;\n }\n }\n else if (gChangeCase == \"U\") {\n fmtParts[i] = ch.toUpperCase();\n }\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 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 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)\n continue;\n afterNewLine = false;\n if (ch.fmtString) {\n var j = snippet.indexOf(ch, i + 1);\n if (j == -1)\n j = snippet.length;\n ch.fmt = snippet.slice(i + 1, j);\n i = j;\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 if (value && !ch.ifEnd) {\n result.push(value);\n gotoNext(ch);\n }\n else if (!value && ch.ifEnd) {\n gotoNext(ch.ifEnd);\n }\n }\n else if (ch.elseEnd) {\n gotoNext(ch.elseEnd);\n }\n else if (ch.tabstopId != null) {\n result.push(ch);\n }\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 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 if (cursor.column < indentString.length)\n indentString = indentString.slice(0, cursor.column);\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 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 }\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 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 }\n else\n column += t.length;\n text += t;\n }\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 var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n };\n this.insertSnippet = function (editor, snippetText) {\n var self = this;\n if (editor.inVirtualSelectionMode)\n return self.insertSnippetForSelection(editor, snippetText);\n editor.forEachSelection(function () {\n self.insertSnippetForSelection(editor, snippetText);\n }, null, { keepOrder: true });\n if (editor.tabstopManager)\n editor.tabstopManager.tabNext();\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 return scope;\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 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 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 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, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length);\n this.variables.M__ = snippet.matchBefore;\n this.variables.T__ = snippet.matchAfter;\n this.insertSnippetForSelection(editor, snippet.content);\n this.variables.M__ = this.variables.T__ = null;\n return true;\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 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 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 if (!snippets)\n snippets = [];\n function wrapRegexp(src) {\n if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n src = \"(?:\" + src + \")\";\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 }\n else {\n re = re + guard;\n if (re && re[0] != \"^\")\n re = \"^\" + re;\n }\n return new RegExp(re);\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 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 if (s.prefix)\n s.tabTrigger = s.prefix;\n if (!s.content && s.body)\n s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\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 if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n return;\n s.startRe = guardedRegexp(s.trigger, s.guard, true);\n s.triggerRe = new RegExp(s.trigger);\n s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n s.endTriggerRe = new RegExp(s.endTrigger);\n }\n if (Array.isArray(snippets)) {\n snippets.forEach(addSnippet);\n }\n else {\n Object.keys(snippets).forEach(function (key) {\n addSnippet(snippets[key]);\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 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 }\n catch (e) { }\n }\n if (m[4]) {\n snippet.content = m[4].replace(/^\\t/gm, \"\");\n list.push(snippet);\n snippet = {};\n }\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 }\n else if (key == \"snippet\") {\n snippet.tabTrigger = val.match(/^\\S*/)[0];\n if (!snippet.name)\n snippet.name = val;\n }\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}).call(SnippetManager.prototype);\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 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 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 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 this.selectedTabstop = ts;\n var range = ts.firstNonLinked || ts;\n if (ts.choices)\n 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 }\n else {\n this.editor.selection.fromOrientedRange(range);\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 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 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 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 }\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 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 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)\n range.tabstop.splice(i, 1);\n i = this.ranges.indexOf(range);\n if (i != -1)\n this.ranges.splice(i, 1);\n i = range.tabstop.rangeList.ranges.indexOf(range);\n if (i != -1)\n 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 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);\nvar movePoint = function (point, diff) {\n if (point.row == 0)\n point.column += diff.column;\n point.row += diff.row;\n};\nvar moveRelative = function (point, start) {\n if (point.row == start.row)\n point.column -= start.column;\n point.row -= start.row;\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);\nexports.snippetManager = new SnippetManager();\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){\"use strict\";\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\");\nvar $singleLineEditor = function (el) {\n var renderer = new Renderer(el);\n renderer.$maxLines = 4;\n var editor = new Editor(renderer);\n editor.setHighlightActiveLine(false);\n editor.setShowPrintMargin(false);\n editor.renderer.setShowGutter(false);\n editor.renderer.setHighlightGutterLine(false);\n editor.$mouseHandler.$focusTimeout = 0;\n editor.$highlightTagPending = true;\n return editor;\n};\nvar AcePopup = function (parentNode) {\n var el = dom.createElement(\"div\");\n var popup = new $singleLineEditor(el);\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 popup.setOption(\"displayIndentGuides\", false);\n popup.setOption(\"dragDelay\", 150);\n var noop = function () { };\n popup.focus = noop;\n popup.$isFocused = true;\n popup.renderer.$cursorLayer.restartTimer = noop;\n popup.renderer.$cursorLayer.element.style.opacity = 0;\n popup.renderer.$maxLines = 8;\n popup.renderer.$keepTextAreaAtCursor = false;\n popup.setHighlightActiveLine(false);\n popup.session.highlight(\"\");\n popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\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 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 }\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 event.addListener(popup.container, \"mouseout\", hideHoverMarker);\n popup.on(\"hide\", hideHoverMarker);\n popup.on(\"changeSelection\", hideHoverMarker);\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 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 function addToken(value, className) {\n value && tokens.push({\n type: (data.className || \"\") + (className || \"\"),\n value: value\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)\n 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 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 return tokens;\n };\n bgTokenizer.$updateOnChange = noop;\n bgTokenizer.start = noop;\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 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 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 popup.on(\"changeSelection\", function () {\n if (popup.isOpen)\n popup.setRow(popup.selection.lead.row);\n popup.renderer.scrollCursorIntoView();\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 }\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 el.style.display = \"\";\n var left = pos.left;\n if (left + el.offsetWidth > screenWidth)\n left = screenWidth - el.offsetWidth;\n el.style.left = left + \"px\";\n this._signal(\"show\");\n lastMouseEvent = null;\n popup.isOpen = true;\n };\n popup.goTo = function (where) {\n var row = this.getRow();\n var max = this.session.getLength() - 1;\n switch (where) {\n case \"up\":\n row = row <= 0 ? max : row - 1;\n break;\n case \"down\":\n row = row >= max ? -1 : row + 1;\n break;\n case \"start\":\n row = 0;\n break;\n case \"end\":\n row = max;\n break;\n }\n this.setRow(row);\n };\n popup.getTextLeftOffset = function () {\n return this.$borderSize + this.renderer.$padding + this.$imageSize;\n };\n popup.$imageSize = 0;\n popup.$borderSize = 1;\n return popup;\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);\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\n\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\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};\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\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};\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};\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){\"use strict\";\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\");\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 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 this.changeTimer = lang.delayedCall(function () {\n this.updateCompletions(true);\n }.bind(this));\n this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n(function () {\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 this.getPopup = function () {\n return this.popup || this.$init();\n };\n this.openPopup = function (editor, prefix, keepPopupPosition) {\n if (!this.popup)\n this.$init();\n this.popup.autoSelect = this.autoSelect;\n this.popup.setData(this.completions.filtered, this.completions.filterText);\n editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\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 var lineHeight = renderer.layerConfig.lineHeight;\n var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n pos.left -= this.popup.getTextLeftOffset();\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 this.popup.show(pos, lineHeight);\n }\n else if (keepPopupPosition && !prefix) {\n this.detach();\n }\n this.changeTimer.cancel();\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 this.gatherCompletionsId += 1;\n if (this.popup && this.popup.isOpen)\n this.popup.hide();\n if (this.base)\n this.base.detach();\n this.activated = false;\n this.completions = this.base = null;\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 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 this.detach();\n }\n };\n this.mousedownListener = function (e) {\n this.detach();\n };\n this.mousewheelListener = function (e) {\n this.detach();\n };\n this.goTo = function (where) {\n this.popup.goTo(where);\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 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 }\n else {\n if (!completions)\n return false;\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 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 \"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 \"PageUp\": function (editor) { editor.completer.popup.gotoPageUp(); },\n \"PageDown\": function (editor) { editor.completer.popup.gotoPageDown(); }\n };\n this.gatherCompletions = function (editor, callback) {\n var session = editor.getSession();\n var pos = editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(editor);\n this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n this.base.$insertRight = true;\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 this.showPopup = function (editor, options) {\n if (this.editor)\n this.detach();\n this.activated = true;\n this.editor = editor;\n if (editor.completer != this) {\n if (editor.completer)\n editor.completer.detach();\n editor.completer = this;\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 this.updateCompletions(false, options);\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 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)\n return;\n return this.detach();\n }.bind(this);\n var processResults = function (results) {\n var prefix = results.prefix;\n var matches = results.matches;\n this.completions = new FilteredList(matches);\n if (this.exactMatch)\n this.completions.exactMatch = true;\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 this.openPopup(this.editor, prefix, keepPopupPosition);\n }.bind(this);\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 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 processResults(results);\n }.bind(this));\n isImmediate = false;\n if (immediateResults) {\n var results = immediateResults;\n immediateResults = null;\n processResults(results);\n }\n };\n this.cancelContextMenu = function () {\n this.editor.$mouseHandler.cancelContextMenu();\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 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 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 var tooltipNode = this.tooltipNode;\n if (item.docHTML) {\n tooltipNode.innerHTML = item.docHTML;\n }\n else if (item.docText) {\n tooltipNode.textContent = item.docText;\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 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 }\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 }\n else {\n tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n tooltipNode.style.left = \"\";\n }\n }\n else {\n tooltipNode.style.left = (rect.right + 1) + \"px\";\n tooltipNode.style.right = \"\";\n }\n };\n this.hideDocTooltip = function () {\n this.tooltipTimer.cancel();\n if (!this.tooltipNode)\n 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 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 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}).call(Autocomplete.prototype);\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 }\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};\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};\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 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)\n return false;\n prev = caption;\n return true;\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)\n continue;\n var lastIndex = -1;\n var matchMask = 0;\n var penalty = 0;\n var index, distance;\n if (this.exactMatch) {\n if (needle !== caption.substr(0, needle.length))\n continue loop;\n }\n else {\n var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n if (fullMatchIndex > -1) {\n penalty = fullMatchIndex;\n }\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);\nexports.Autocomplete = Autocomplete;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){var Range = require(\"../range\").Range;\nvar splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\nfunction getWordIndex(doc, pos) {\n var textBefore = doc.getTextRange(Range.fromPoints({ row: 0, column: 0 }, pos));\n return textBefore.split(splitRegex).length - 1;\n}\nfunction wordDistance(doc, pos) {\n var prefixPos = getWordIndex(doc, pos);\n var words = doc.getValue().split(splitRegex);\n var wordScores = Object.create(null);\n var currentWord = words[prefixPos];\n words.forEach(function (word, idx) {\n if (!word || word === currentWord)\n return;\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 }\n else {\n wordScores[word] = score;\n }\n });\n return wordScores;\n}\nexports.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});\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){\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\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};\nvar transformSnippetTooltip = function (str) {\n var record = {};\n return str.replace(/\\${(\\d+)(:(.*?))?}/g, function (_, p1, p2, p3) {\n return (record[p1] = p3 || '');\n }).replace(/\\$(\\d+?)/g, function (_, p1) {\n return record[p1];\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 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(transformSnippetTooltip(item.snippet))\n ].join(\"\");\n }\n }\n};\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function (val) {\n completers.length = 0;\n if (val)\n completers.push.apply(completers, val);\n};\nexports.addCompleter = function (completer) {\n completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\nvar expandSnippet = {\n name: \"expandSnippet\",\n exec: function (editor) {\n return snippetManager.expandWithTab(editor);\n },\n bindKey: \"Tab\"\n};\nvar onChangeMode = function (e, editor) {\n loadSnippetsForMode(editor.session.$mode);\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 loadSnippetFile(mode.$id, mode.snippetFileId);\n if (mode.modes)\n mode.modes.forEach(loadSnippetsForMode);\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)\n 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};\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};\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 }\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 }\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 }\n else {\n this.commands.removeCommand(expandSnippet);\n this.off(\"changeMode\", onChangeMode);\n }\n },\n value: false\n }\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 "],"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","record","escapeHTML","_","p1","p2","p3","setCompleters","addCompleter","onChangeMode","loadSnippetsForMode","$modes","files","loadSnippetFile","snippetFileId","modes","snippetFilePath","loadModule","doLiveAutocomplete","hasCompleter","defineOptions","enableBasicAutocompletion","set","addCommand","removeCommand","enableLiveAutocompletion","enableSnippets"],"sourceRoot":""}