All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ber-security.graylog.graylog-plugin-correlation-count.6.0.0.source-code.0cd2349b7f4b6f7013e195c8145d2917.js.map Maven / Gradle / Ivy

There is a newer version: 5.1.3
Show newest version
{"version":3,"sources":["webpack://CorrelationCount/0cd2349b7f4b6f7013e195c8145d2917.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 = /** @class */ (function () {\n    function SnippetManager() {\n        this.snippetMap = {};\n        this.snippetNameMap = {};\n        this.variables = VARIABLES;\n    }\n    SnippetManager.prototype.getTokenizer = function () {\n        return SnippetManager[\"$tokenizer\"] || this.createTokenizer();\n    };\n    SnippetManager.prototype.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    SnippetManager.prototype.tokenizeTmSnippet = function (str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n            return x.value || x;\n        });\n    };\n    SnippetManager.prototype.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    SnippetManager.prototype.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    SnippetManager.prototype.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    SnippetManager.prototype.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    SnippetManager.prototype.getDisplayTextForSnippet = function (editor, snippetText) {\n        var processedSnippet = processSnippetText.call(this, editor, snippetText);\n        return processedSnippet.text;\n    };\n    SnippetManager.prototype.insertSnippetForSelection = function (editor, snippetText, options) {\n        if (options === void 0) { options = {}; }\n        var processedSnippet = processSnippetText.call(this, editor, snippetText, options);\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, processedSnippet.text);\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(processedSnippet.tabstops, range.start, end, selectionId);\n    };\n    SnippetManager.prototype.insertSnippet = function (editor, snippetText, options) {\n        if (options === void 0) { options = {}; }\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText, options);\n        editor.forEachSelection(function () {\n            self.insertSnippetForSelection(editor, snippetText, options);\n        }, null, { keepOrder: true });\n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n    SnippetManager.prototype.$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    SnippetManager.prototype.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    SnippetManager.prototype.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    SnippetManager.prototype.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    SnippetManager.prototype.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    SnippetManager.prototype.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    SnippetManager.prototype.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    SnippetManager.prototype.parseSnippetFile = function (str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], /**@type{Snippet}*/ 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    SnippetManager.prototype.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    return SnippetManager;\n}());\noop.implement(SnippetManager.prototype, EventEmitter);\nvar processSnippetText = function (editor, snippetText, options) {\n    if (options === void 0) { options = {}; }\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\" && !options.excludeExtraIndent)\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    return {\n        text: text,\n        tabstops: tabstops,\n        tokens: tokens\n    };\n};\nvar TabstopManager = /** @class */ (function () {\n    function TabstopManager(editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\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    TabstopManager.prototype.attach = function (editor) {\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n        this.editor = editor;\n        this.session = editor.session;\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    TabstopManager.prototype.detach = function () {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges.length = 0;\n        this.tabstops.length = 0;\n        this.selectedTabstop = null;\n        this.editor.off(\"change\", this.$onChange);\n        this.editor.off(\"changeSelection\", this.$onChangeSelection);\n        this.editor.off(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.off(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.session = null;\n        this.editor = null;\n    };\n    TabstopManager.prototype.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.session;\n        if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n            this.detach();\n    };\n    TabstopManager.prototype.updateLinkedFields = function () {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n            return;\n        this.$inChange = true;\n        var session = this.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    TabstopManager.prototype.onAfterExec = function (e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    TabstopManager.prototype.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    TabstopManager.prototype.onChangeSession = function () {\n        this.detach();\n    };\n    TabstopManager.prototype.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        this.updateTabstopMarkers();\n        if (index === 0) {\n            this.detach();\n        }\n    };\n    TabstopManager.prototype.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    TabstopManager.prototype.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        var snippetId = this.snippetId = (this.snippetId || 0) + 1;\n        tabstops.forEach(function (ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n            dest.snippetId = snippetId;\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    TabstopManager.prototype.addTabstopMarkers = function (ts) {\n        var session = this.session;\n        ts.forEach(function (range) {\n            if (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    TabstopManager.prototype.removeTabstopMarkers = function (ts) {\n        var session = this.session;\n        ts.forEach(function (range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    TabstopManager.prototype.updateTabstopMarkers = function () {\n        if (!this.selectedTabstop)\n            return;\n        var currentSnippetId = this.selectedTabstop.snippetId;\n        if (this.selectedTabstop.index === 0) {\n            currentSnippetId--;\n        }\n        this.tabstops.forEach(function (ts) {\n            if (ts.snippetId === currentSnippetId)\n                this.addTabstopMarkers(ts);\n            else\n                this.removeTabstopMarkers(ts);\n        }, this);\n    };\n    TabstopManager.prototype.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.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    return TabstopManager;\n}());\nTabstopManager.prototype.keyboardHandler = new HashHandler();\nTabstopManager.prototype.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});\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\",\"ace/config\",\"ace/lib/useragent\"], 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 nls = require(\"../config\").nls;\nvar userAgent = require(\"./../lib/useragent\");\nvar getAriaId = function (index) {\n    return \"suggest-aria-id:\".concat(index);\n};\nvar popupAriaRole = userAgent.isSafari ? \"menu\" : \"listbox\";\nvar optionAriaRole = userAgent.isSafari ? \"menuitem\" : \"option\";\nvar ariaActiveState = userAgent.isSafari ? \"aria-current\" : \"aria-selected\";\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 = /** @class */ (function () {\n    function AcePopup(parentNode) {\n        var el = dom.createElement(\"div\");\n        var popup = $singleLineEditor(el);\n        if (parentNode) {\n            parentNode.appendChild(el);\n        }\n        el.style.display = \"none\";\n        popup.renderer.content.style.cursor = \"default\";\n        popup.renderer.setStyle(\"ace_autocomplete\");\n        popup.renderer.$textLayer.element.setAttribute(\"role\", popupAriaRole);\n        popup.renderer.$textLayer.element.setAttribute(\"aria-roledescription\", nls(\"Autocomplete suggestions\"));\n        popup.renderer.$textLayer.element.setAttribute(\"aria-label\", nls(\"Autocomplete suggestions\"));\n        popup.renderer.textarea.setAttribute(\"aria-hidden\", \"true\");\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            popup.isMouseOver = true;\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 = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]);\n            var el = document.activeElement; // Active element is textarea of main editor\n            if (selected !== popup.selectedNode && popup.selectedNode) {\n                dom.removeCssClass(popup.selectedNode, \"ace_selected\");\n                el.removeAttribute(\"aria-activedescendant\");\n                popup.selectedNode.removeAttribute(ariaActiveState);\n                popup.selectedNode.removeAttribute(\"id\");\n            }\n            popup.selectedNode = selected;\n            if (selected) {\n                dom.addCssClass(selected, \"ace_selected\");\n                var ariaId = getAriaId(row);\n                selected.id = ariaId;\n                t.element.setAttribute(\"aria-activedescendant\", ariaId);\n                el.setAttribute(\"aria-activedescendant\", ariaId);\n                selected.setAttribute(\"role\", optionAriaRole);\n                selected.setAttribute(\"aria-roledescription\", nls(\"item\"));\n                selected.setAttribute(\"aria-label\", popup.getData(row).caption || popup.getData(row).value);\n                selected.setAttribute(\"aria-setsize\", popup.data.length);\n                selected.setAttribute(\"aria-posinset\", row + 1);\n                selected.setAttribute(\"aria-describedby\", \"doc-tooltip\");\n                selected.setAttribute(ariaActiveState, \"true\");\n            }\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\", function () {\n            popup.isMouseOver = false;\n            hideHoverMarker();\n        });\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            tokens.push({ type: \"completion-spacer\", value: \" \" });\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.isMouseOver = false;\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 - 1, 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            popup.anchorPos = null;\n            popup.anchor = null;\n            if (popup.isOpen) {\n                popup.isOpen = false;\n                this._signal(\"hide\");\n            }\n        };\n        popup.tryShow = function (pos, lineHeight, anchor, forceShow) {\n            if (!forceShow && popup.isOpen && popup.anchorPos && popup.anchor &&\n                popup.anchorPos.top === pos.top && popup.anchorPos.left === pos.left &&\n                popup.anchor === anchor) {\n                return true;\n            }\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 dims = { top: 0, bottom: 0, left: 0 };\n            var spaceBelow = screenHeight - pos.top - 3 * this.$borderSize - lineHeight;\n            var spaceAbove = pos.top - 3 * this.$borderSize;\n            if (!anchor) {\n                if (spaceAbove <= spaceBelow || spaceBelow >= maxH) {\n                    anchor = \"bottom\";\n                }\n                else {\n                    anchor = \"top\";\n                }\n            }\n            if (anchor === \"top\") {\n                dims.bottom = pos.top - this.$borderSize;\n                dims.top = dims.bottom - maxH;\n            }\n            else if (anchor === \"bottom\") {\n                dims.top = pos.top + lineHeight + this.$borderSize;\n                dims.bottom = dims.top + maxH;\n            }\n            var fitsX = dims.top >= 0 && dims.bottom <= screenHeight;\n            if (!forceShow && !fitsX) {\n                return false;\n            }\n            if (!fitsX) {\n                if (anchor === \"top\") {\n                    renderer.$maxPixelHeight = spaceAbove;\n                }\n                else {\n                    renderer.$maxPixelHeight = spaceBelow;\n                }\n            }\n            else {\n                renderer.$maxPixelHeight = null;\n            }\n            if (anchor === \"top\") {\n                el.style.top = \"\";\n                el.style.bottom = (screenHeight - dims.bottom) + \"px\";\n                popup.isTopdown = false;\n            }\n            else {\n                el.style.top = dims.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            el.style.right = \"\";\n            if (!popup.isOpen) {\n                popup.isOpen = true;\n                this._signal(\"show\");\n                lastMouseEvent = null;\n            }\n            popup.anchorPos = pos;\n            popup.anchor = anchor;\n            return true;\n        };\n        popup.show = function (pos, lineHeight, topdownOnly) {\n            this.tryShow(pos, lineHeight, topdownOnly ? \"bottom\" : undefined, 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    }\n    return AcePopup;\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-left: 0.9em;\\n}\\n.ace_completion-message {\\n    margin-left: 0.9em;\\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}\\n.ace_autocomplete .ace_text-layer  {\\n    width: calc(100% - 8px);\\n}\\n.ace_autocomplete .ace_line {\\n    display: flex;\\n    align-items: center;\\n}\\n.ace_autocomplete .ace_line > * {\\n    min-width: 0;\\n    flex: 0 0 auto;\\n}\\n.ace_autocomplete .ace_line .ace_ {\\n    flex: 0 1 auto;\\n    overflow: hidden;\\n    white-space: nowrap;\\n    text-overflow: ellipsis;\\n}\\n.ace_autocomplete .ace_completion-spacer {\\n    flex: 1;\\n}\\n.ace_autocomplete.ace_loading:after  {\\n    content: \\\"\\\";\\n    position: absolute;\\n    top: 0px;\\n    height: 2px;\\n    width: 8%;\\n    background: blue;\\n    z-index: 100;\\n    animation: ace_progress 3s infinite linear;\\n    animation-delay: 300ms;\\n    transform: translateX(-100%) scaleX(1);\\n}\\n@keyframes ace_progress {\\n    0% { transform: translateX(-100%) scaleX(1) }\\n    50% { transform: translateX(625%) scaleX(2) } \\n    100% { transform: translateX(1500%) scaleX(3) } \\n}\\n@media (prefers-reduced-motion) {\\n    .ace_autocomplete.ace_loading:after {\\n        transform: translateX(625%) scaleX(2);\\n        animation: none;\\n     }\\n}\\n\", \"autocompletion.css\", false);\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\nexports.getAriaId = getAriaId;\n\n});\n\nace.define(\"ace/autocomplete/inline_screenreader\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar AceInlineScreenReader = /** @class */ (function () {\n    function AceInlineScreenReader(editor) {\n        this.editor = editor;\n        this.screenReaderDiv = document.createElement(\"div\");\n        this.screenReaderDiv.classList.add(\"ace_screenreader-only\");\n        this.editor.container.appendChild(this.screenReaderDiv);\n    }\n    AceInlineScreenReader.prototype.setScreenReaderContent = function (content) {\n        if (!this.popup && this.editor.completer && /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup) {\n            this.popup = /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup;\n            this.popup.renderer.on(\"afterRender\", function () {\n                var row = this.popup.getRow();\n                var t = this.popup.renderer.$textLayer;\n                var selected = t.element.childNodes[row - t.config.firstRow];\n                if (selected) {\n                    var idString = \"doc-tooltip \";\n                    for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n                        idString += \"ace-inline-screenreader-line-\".concat(lineIndex, \" \");\n                    }\n                    selected.setAttribute(\"aria-describedby\", idString);\n                }\n            }.bind(this));\n        }\n        while (this.screenReaderDiv.firstChild) {\n            this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild);\n        }\n        this._lines = content.split(/\\r\\n|\\r|\\n/);\n        var codeElement = this.createCodeBlock();\n        this.screenReaderDiv.appendChild(codeElement);\n    };\n    AceInlineScreenReader.prototype.destroy = function () {\n        this.screenReaderDiv.remove();\n    };\n    AceInlineScreenReader.prototype.createCodeBlock = function () {\n        var container = document.createElement(\"pre\");\n        container.setAttribute(\"id\", \"ace-inline-screenreader\");\n        for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n            var codeElement = document.createElement(\"code\");\n            codeElement.setAttribute(\"id\", \"ace-inline-screenreader-line-\".concat(lineIndex));\n            var line = document.createTextNode(this._lines[lineIndex]);\n            codeElement.appendChild(line);\n            container.appendChild(codeElement);\n        }\n        return container;\n    };\n    return AceInlineScreenReader;\n}());\nexports.AceInlineScreenReader = AceInlineScreenReader;\n\n});\n\nace.define(\"ace/autocomplete/inline\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete/inline_screenreader\"], function(require, exports, module){\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar AceInlineScreenReader = require(\"./inline_screenreader\").AceInlineScreenReader;\nvar AceInline = /** @class */ (function () {\n    function AceInline() {\n        this.editor = null;\n    }\n    AceInline.prototype.show = function (editor, completion, prefix) {\n        prefix = prefix || \"\";\n        if (editor && this.editor && this.editor !== editor) {\n            this.hide();\n            this.editor = null;\n            this.inlineScreenReader = null;\n        }\n        if (!editor || !completion) {\n            return false;\n        }\n        if (!this.inlineScreenReader) {\n            this.inlineScreenReader = new AceInlineScreenReader(editor);\n        }\n        var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value;\n        if (completion.hideInlinePreview || !displayText || !displayText.startsWith(prefix)) {\n            return false;\n        }\n        this.editor = editor;\n        this.inlineScreenReader.setScreenReaderContent(displayText);\n        displayText = displayText.slice(prefix.length);\n        if (displayText === \"\") {\n            editor.removeGhostText();\n        }\n        else {\n            editor.setGhostText(displayText);\n        }\n        return true;\n    };\n    AceInline.prototype.isOpen = function () {\n        if (!this.editor) {\n            return false;\n        }\n        return !!this.editor.renderer.$ghostText;\n    };\n    AceInline.prototype.hide = function () {\n        if (!this.editor) {\n            return false;\n        }\n        this.editor.removeGhostText();\n        return true;\n    };\n    AceInline.prototype.destroy = function () {\n        this.hide();\n        this.editor = null;\n        if (this.inlineScreenReader) {\n            this.inlineScreenReader.destroy();\n            this.inlineScreenReader = null;\n        }\n    };\n    return AceInline;\n}());\nexports.AceInline = AceInline;\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};\nexports.triggerAutocomplete = function (editor) {\n    var pos = editor.getCursorPosition();\n    var line = editor.session.getLine(pos.row);\n    var column = (pos.column === 0) ? 0 : pos.column - 1;\n    var previousChar = line[column];\n    return editor.completers.some(function (el) {\n        if (el.triggerCharacters && Array.isArray(el.triggerCharacters)) {\n            return el.triggerCharacters.includes(previousChar);\n        }\n    });\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/inline\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\",\"ace/lib/event\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar AceInline = require(\"./autocomplete/inline\").AceInline;\nvar getAriaId = require(\"./autocomplete/popup\").getAriaId;\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 event = require(\"./lib/event\");\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar destroyCompleter = function (e, editor) {\n    editor.completer && editor.completer.destroy();\n};\nvar Autocomplete = /** @class */ (function () {\n    function Autocomplete() {\n        this.autoInsert = false;\n        this.autoSelect = true;\n        this.autoShown = false;\n        this.exactMatch = false;\n        this.inlineEnabled = false;\n        this.keyboardHandler = new HashHandler();\n        this.keyboardHandler.bindKeys(this.commands);\n        this.parentNode = null;\n        this.setSelectOnHover = false;\n        this.hasSeen = new Set();\n        this.showLoadingState = false;\n        this.stickySelectionDelay = 500;\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.onLayoutChange = this.onLayoutChange.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        this.popupTimer = lang.delayedCall(this.$updatePopupPosition.bind(this), 50);\n        this.stickySelectionTimer = lang.delayedCall(function () {\n            this.stickySelection = true;\n        }.bind(this), this.stickySelectionDelay);\n        this.$firstOpenTimer = lang.delayedCall(/**@this{Autocomplete}*/ function () {\n            var initialPosition = this.completionProvider && this.completionProvider.initialPosition;\n            if (this.autoShown || (this.popup && this.popup.isOpen) || !initialPosition || this.editor.completers.length === 0)\n                return;\n            this.completions = new FilteredList(Autocomplete.completionsForLoading);\n            this.openPopup(this.editor, initialPosition.prefix, false);\n            this.popup.renderer.setStyle(\"ace_loading\", true);\n        }.bind(this), this.stickySelectionDelay);\n    }\n    Object.defineProperty(Autocomplete, \"completionsForLoading\", {\n        get: function () {\n            return [{\n                    caption: config.nls(\"Loading...\"),\n                    value: \"\"\n                }];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Autocomplete.prototype.$init = function () {\n        this.popup = new AcePopup(this.parentNode || 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.$onPopupShow.bind(this));\n        this.popup.on(\"hide\", this.$onHidePopup.bind(this));\n        this.popup.on(\"select\", this.$onPopupChange.bind(this));\n        event.addListener(this.popup.container, \"mouseout\", this.mouseOutListener.bind(this));\n        this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n        this.popup.renderer.on(\"afterRender\", this.$onPopupRender.bind(this));\n        return this.popup;\n    };\n    Autocomplete.prototype.$initInline = function () {\n        if (!this.inlineEnabled || this.inlineRenderer)\n            return;\n        this.inlineRenderer = new AceInline();\n        return this.inlineRenderer;\n    };\n    Autocomplete.prototype.getPopup = function () {\n        return this.popup || this.$init();\n    };\n    Autocomplete.prototype.$onHidePopup = function () {\n        if (this.inlineRenderer) {\n            this.inlineRenderer.hide();\n        }\n        this.hideDocTooltip();\n        this.stickySelectionTimer.cancel();\n        this.popupTimer.cancel();\n        this.stickySelection = false;\n    };\n    Autocomplete.prototype.$seen = function (completion) {\n        if (!this.hasSeen.has(completion) && completion && completion.completer && completion.completer.onSeen && typeof completion.completer.onSeen === \"function\") {\n            completion.completer.onSeen(this.editor, completion);\n            this.hasSeen.add(completion);\n        }\n    };\n    Autocomplete.prototype.$onPopupChange = function (hide) {\n        if (this.inlineRenderer && this.inlineEnabled) {\n            var completion = hide ? null : this.popup.getData(this.popup.getRow());\n            this.$updateGhostText(completion);\n            if (this.popup.isMouseOver && this.setSelectOnHover) {\n                this.tooltipTimer.call(null, null);\n                return;\n            }\n            this.popupTimer.schedule();\n            this.tooltipTimer.schedule();\n        }\n        else {\n            this.popupTimer.call(null, null);\n            this.tooltipTimer.call(null, null);\n        }\n    };\n    Autocomplete.prototype.$updateGhostText = function (completion) {\n        var row = this.base.row;\n        var column = this.base.column;\n        var cursorColumn = this.editor.getCursorPosition().column;\n        var prefix = this.editor.session.getLine(row).slice(column, cursorColumn);\n        if (!this.inlineRenderer.show(this.editor, completion, prefix)) {\n            this.inlineRenderer.hide();\n        }\n        else {\n            this.$seen(completion);\n        }\n    };\n    Autocomplete.prototype.$onPopupRender = function () {\n        var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n        if (this.completions && this.completions.filtered && this.completions.filtered.length > 0) {\n            for (var i = this.popup.getFirstVisibleRow(); i <= this.popup.getLastVisibleRow(); i++) {\n                var completion = this.popup.getData(i);\n                if (completion && (!inlineEnabled || completion.hideInlinePreview)) {\n                    this.$seen(completion);\n                }\n            }\n        }\n    };\n    Autocomplete.prototype.$onPopupShow = function (hide) {\n        this.$onPopupChange(hide);\n        this.stickySelection = false;\n        if (this.stickySelectionDelay >= 0)\n            this.stickySelectionTimer.schedule(this.stickySelectionDelay);\n    };\n    Autocomplete.prototype.observeLayoutChanges = function () {\n        if (this.$elements || !this.editor)\n            return;\n        window.addEventListener(\"resize\", this.onLayoutChange, { passive: true });\n        window.addEventListener(\"wheel\", this.mousewheelListener);\n        var el = this.editor.container.parentNode;\n        var elements = [];\n        while (el) {\n            elements.push(el);\n            el.addEventListener(\"scroll\", this.onLayoutChange, { passive: true });\n            el = el.parentNode;\n        }\n        this.$elements = elements;\n    };\n    Autocomplete.prototype.unObserveLayoutChanges = function () {\n        var _this = this;\n        window.removeEventListener(\"resize\", this.onLayoutChange, { passive: true });\n        window.removeEventListener(\"wheel\", this.mousewheelListener);\n        this.$elements && this.$elements.forEach(function (el) {\n            el.removeEventListener(\"scroll\", _this.onLayoutChange, { passive: true });\n        });\n        this.$elements = null;\n    };\n    Autocomplete.prototype.onLayoutChange = function () {\n        if (!this.popup.isOpen)\n            return this.unObserveLayoutChanges();\n        this.$updatePopupPosition();\n        this.updateDocTooltip();\n    };\n    Autocomplete.prototype.$updatePopupPosition = function () {\n        var editor = this.editor;\n        var renderer = editor.renderer;\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        var posGhostText = {\n            top: pos.top,\n            left: pos.left\n        };\n        if (renderer.$ghostText && renderer.$ghostTextWidget) {\n            if (this.base.row === renderer.$ghostText.position.row) {\n                posGhostText.top += renderer.$ghostTextWidget.el.offsetHeight;\n            }\n        }\n        var editorContainerBottom = editor.container.getBoundingClientRect().bottom - lineHeight;\n        var lowestPosition = editorContainerBottom < posGhostText.top ?\n            { top: editorContainerBottom, left: posGhostText.left } :\n            posGhostText;\n        if (this.popup.tryShow(lowestPosition, lineHeight, \"bottom\")) {\n            return;\n        }\n        if (this.popup.tryShow(pos, lineHeight, \"top\")) {\n            return;\n        }\n        this.popup.show(pos, lineHeight);\n    };\n    Autocomplete.prototype.openPopup = function (editor, prefix, keepPopupPosition) {\n        this.$firstOpenTimer.cancel();\n        if (!this.popup)\n            this.$init();\n        if (this.inlineEnabled && !this.inlineRenderer)\n            this.$initInline();\n        this.popup.autoSelect = this.autoSelect;\n        this.popup.setSelectOnHover(this.setSelectOnHover);\n        var oldRow = this.popup.getRow();\n        var previousSelectedItem = this.popup.data[oldRow];\n        this.popup.setData(this.completions.filtered, this.completions.filterText);\n        if (this.editor.textInput.setAriaOptions) {\n            this.editor.textInput.setAriaOptions({\n                activeDescendant: getAriaId(this.popup.getRow()),\n                inline: this.inlineEnabled\n            });\n        }\n        editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        var newRow;\n        if (this.stickySelection)\n            newRow = this.popup.data.indexOf(previousSelectedItem);\n        if (!newRow || newRow === -1)\n            newRow = 0;\n        this.popup.setRow(this.autoSelect ? newRow : -1);\n        if (newRow === oldRow && previousSelectedItem !== this.completions.filtered[newRow])\n            this.$onPopupChange();\n        var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n        if (newRow === oldRow && inlineEnabled) {\n            var completion = this.popup.getData(this.popup.getRow());\n            this.$updateGhostText(completion);\n        }\n        if (!keepPopupPosition) {\n            this.popup.setTheme(editor.getTheme());\n            this.popup.setFontSize(editor.getFontSize());\n            this.$updatePopupPosition();\n            if (this.tooltipNode) {\n                this.updateDocTooltip();\n            }\n        }\n        else if (keepPopupPosition && !prefix) {\n            this.detach();\n        }\n        this.changeTimer.cancel();\n        this.observeLayoutChanges();\n    };\n    Autocomplete.prototype.detach = function () {\n        if (this.editor) {\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        }\n        this.$firstOpenTimer.cancel();\n        this.changeTimer.cancel();\n        this.hideDocTooltip();\n        if (this.completionProvider) {\n            this.completionProvider.detach();\n        }\n        if (this.popup && this.popup.isOpen)\n            this.popup.hide();\n        if (this.popup && this.popup.renderer) {\n            this.popup.renderer.off(\"afterRender\", this.$onPopupRender);\n        }\n        if (this.base)\n            this.base.detach();\n        this.activated = false;\n        this.completionProvider = this.completions = this.base = null;\n        this.unObserveLayoutChanges();\n    };\n    Autocomplete.prototype.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    Autocomplete.prototype.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    Autocomplete.prototype.mousedownListener = function (e) {\n        this.detach();\n    };\n    Autocomplete.prototype.mousewheelListener = function (e) {\n        if (!this.popup.isMouseOver)\n            this.detach();\n    };\n    Autocomplete.prototype.mouseOutListener = function (e) {\n        if (this.popup.isOpen)\n            this.$updatePopupPosition();\n    };\n    Autocomplete.prototype.goTo = function (where) {\n        this.popup.goTo(where);\n    };\n    Autocomplete.prototype.insertMatch = function (data, options) {\n        if (!data)\n            data = this.popup.getData(this.popup.getRow());\n        if (!data)\n            return false;\n        if (data.value === \"\") // Explicitly given nothing to insert, e.g. \"No suggestion state\"\n            return this.detach();\n        var completions = this.completions;\n        var result = this.getCompletionProvider().insertMatch(this.editor, data, completions.filterText, options);\n        if (this.completions == completions)\n            this.detach();\n        return result;\n    };\n    Autocomplete.prototype.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    Autocomplete.prototype.getCompletionProvider = function (initialPosition) {\n        if (!this.completionProvider)\n            this.completionProvider = new CompletionProvider(initialPosition);\n        return this.completionProvider;\n    };\n    Autocomplete.prototype.gatherCompletions = function (editor, callback) {\n        return this.getCompletionProvider().gatherCompletions(editor, callback);\n    };\n    Autocomplete.prototype.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            this.getCompletionProvider().completions = this.completions;\n            return this.openPopup(this.editor, \"\", keepPopupPosition);\n        }\n        var session = this.editor.getSession();\n        var pos = this.editor.getCursorPosition();\n        var prefix = util.getCompletionPrefix(this.editor);\n        this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n        this.base.$insertRight = true;\n        var completionOptions = {\n            exactMatch: this.exactMatch,\n            ignoreCaption: this.ignoreCaption\n        };\n        this.getCompletionProvider({\n            prefix: prefix,\n            pos: pos\n        }).provideCompletions(this.editor, completionOptions, \n        function (err, completions, finished) {\n            var filtered = completions.filtered;\n            var prefix = util.getCompletionPrefix(this.editor);\n            this.$firstOpenTimer.cancel();\n            if (finished) {\n                if (!filtered.length) {\n                    var emptyMessage = !this.autoShown && this.emptyMessage;\n                    if (typeof emptyMessage == \"function\")\n                        emptyMessage = this.emptyMessage(prefix);\n                    if (emptyMessage) {\n                        var completionsForEmpty = [{\n                                caption: emptyMessage,\n                                value: \"\"\n                            }\n                        ];\n                        this.completions = new FilteredList(completionsForEmpty);\n                        this.openPopup(this.editor, prefix, keepPopupPosition);\n                        this.popup.renderer.setStyle(\"ace_loading\", false);\n                        return;\n                    }\n                    return this.detach();\n                }\n                if (filtered.length == 1 && filtered[0].value == prefix\n                    && !filtered[0].snippet)\n                    return this.detach();\n                if (this.autoInsert && !this.autoShown && filtered.length == 1)\n                    return this.insertMatch(filtered[0]);\n            }\n            this.completions = !finished && this.showLoadingState ?\n                new FilteredList(Autocomplete.completionsForLoading.concat(filtered), completions.filterText) :\n                completions;\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n            this.popup.renderer.setStyle(\"ace_loading\", !finished);\n        }.bind(this));\n        if (this.showLoadingState && !this.autoShown && !(this.popup && this.popup.isOpen)) {\n            this.$firstOpenTimer.delay(this.stickySelectionDelay / 2);\n        }\n    };\n    Autocomplete.prototype.cancelContextMenu = function () {\n        this.editor.$mouseHandler.cancelContextMenu();\n    };\n    Autocomplete.prototype.updateDocTooltip = function () {\n        var popup = this.popup;\n        var all = this.completions.filtered;\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        var completersLength = this.editor.completers.length;\n        for (var i = 0; i < completersLength; i++) {\n            var completer = this.editor.completers[i];\n            if (completer.getDocTooltip && selected.completerId === completer.id) {\n                doc = completer.getDocTooltip(selected);\n                break;\n            }\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    Autocomplete.prototype.showDocTooltip = function (item) {\n        if (!this.tooltipNode) {\n            this.tooltipNode = dom.createElement(\"div\");\n            this.tooltipNode.style.margin = \"0\";\n            this.tooltipNode.style.pointerEvents = \"auto\";\n            this.tooltipNode.style.overscrollBehavior = \"contain\";\n            this.tooltipNode.tabIndex = -1;\n            this.tooltipNode.onblur = this.blurListener.bind(this);\n            this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n            this.tooltipNode.id = \"doc-tooltip\";\n            this.tooltipNode.setAttribute(\"role\", \"tooltip\");\n            this.tooltipNode.addEventListener(\"wheel\", preventParentScroll);\n        }\n        var theme = this.editor.renderer.theme;\n        this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip \" +\n            (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\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            this.popup.container.appendChild(this.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    Autocomplete.prototype.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    Autocomplete.prototype.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    Autocomplete.prototype.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.off(\"destroy\", destroyCompleter);\n            this.editor.completer = null;\n        }\n        this.inlineRenderer = this.popup = this.editor = null;\n    };\n    return Autocomplete;\n}());\nAutocomplete.prototype.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};\nAutocomplete.for = function (editor) {\n    if (editor.completer instanceof Autocomplete) {\n        return editor.completer;\n    }\n    if (editor.completer) {\n        editor.completer.destroy();\n        editor.completer = null;\n    }\n    if (config.get(\"sharedPopups\")) {\n        if (!Autocomplete[\"$sharedInstance\"])\n            Autocomplete[\"$sharedInstance\"] = new Autocomplete();\n        editor.completer = Autocomplete[\"$sharedInstance\"];\n    }\n    else {\n        editor.completer = new Autocomplete();\n        editor.once(\"destroy\", destroyCompleter);\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.autoShown = false;\n        completer.showPopup(editor, options);\n        completer.cancelContextMenu();\n    },\n    bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\nvar CompletionProvider = /** @class */ (function () {\n    function CompletionProvider(initialPosition) {\n        this.initialPosition = initialPosition;\n        this.active = true;\n    }\n    CompletionProvider.prototype.insertByIndex = function (editor, index, options) {\n        if (!this.completions || !this.completions.filtered) {\n            return false;\n        }\n        return this.insertMatch(editor, this.completions.filtered[index], options);\n    };\n    CompletionProvider.prototype.insertMatch = function (editor, data, options) {\n        if (!data)\n            return false;\n        editor.startOperation({ command: { name: \"insertMatch\" } });\n        if (data.completer && data.completer.insertMatch) {\n            data.completer.insertMatch(editor, data);\n        }\n        else {\n            if (!this.completions)\n                return false;\n            var replaceBefore = this.completions.filterText.length;\n            var replaceAfter = 0;\n            if (data.range && data.range.start.row === data.range.end.row) {\n                replaceBefore -= this.initialPosition.prefix.length;\n                replaceBefore += this.initialPosition.pos.column - data.range.start.column;\n                replaceAfter += data.range.end.column - this.initialPosition.pos.column;\n            }\n            if (replaceBefore || replaceAfter) {\n                var ranges;\n                if (editor.selection.getAllRanges) {\n                    ranges = editor.selection.getAllRanges();\n                }\n                else {\n                    ranges = [editor.getSelectionRange()];\n                }\n                for (var i = 0, range; range = ranges[i]; i++) {\n                    range.start.column -= replaceBefore;\n                    range.end.column += replaceAfter;\n                    editor.session.remove(range);\n                }\n            }\n            if (data.snippet) {\n                snippetManager.insertSnippet(editor, data.snippet);\n            }\n            else {\n                this.$insertString(editor, data);\n            }\n            if (data.completer && data.completer.onInsert && typeof data.completer.onInsert == \"function\") {\n                data.completer.onInsert(editor, data);\n            }\n            if (data.command && data.command === \"startAutocomplete\") {\n                editor.execCommand(data.command);\n            }\n        }\n        editor.endOperation();\n        return true;\n    };\n    CompletionProvider.prototype.$insertString = function (editor, data) {\n        var text = data.value || data;\n        editor.execCommand(\"insertstring\", text);\n    };\n    CompletionProvider.prototype.gatherCompletions = function (editor, callback) {\n        var session = editor.getSession();\n        var pos = editor.getCursorPosition();\n        var prefix = util.getCompletionPrefix(editor);\n        var matches = [];\n        this.completers = editor.completers;\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 (completer.hideInlinePreview)\n                    results = results.map(function (result) {\n                        return Object.assign(result, { hideInlinePreview: completer.hideInlinePreview });\n                    });\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    CompletionProvider.prototype.provideCompletions = function (editor, options, callback) {\n        var processResults = function (results) {\n            var prefix = results.prefix;\n            var matches = results.matches;\n            this.completions = new FilteredList(matches);\n            if (options.exactMatch)\n                this.completions.exactMatch = true;\n            if (options.ignoreCaption)\n                this.completions.ignoreCaption = true;\n            this.completions.setFilter(prefix);\n            if (results.finished || this.completions.filtered.length)\n                callback(null, this.completions, results.finished);\n        }.bind(this);\n        var isImmediate = true;\n        var immediateResults = null;\n        this.gatherCompletions(editor, function (err, results) {\n            if (!this.active) {\n                return;\n            }\n            if (err) {\n                callback(err, [], true);\n                this.detach();\n            }\n            var prefix = results.prefix;\n            if (prefix.indexOf(results.prefix) !== 0)\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    CompletionProvider.prototype.detach = function () {\n        this.active = false;\n        this.completers && this.completers.forEach(function (completer) {\n            if (typeof completer.cancel === \"function\") {\n                completer.cancel();\n            }\n        });\n    };\n    return CompletionProvider;\n}());\nvar FilteredList = /** @class */ (function () {\n    function FilteredList(array, filterText) {\n        this.all = array;\n        this.filtered = array;\n        this.filterText = filterText || \"\";\n        this.exactMatch = false;\n        this.ignoreCaption = false;\n    }\n    FilteredList.prototype.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    FilteredList.prototype.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 = (!this.ignoreCaption && 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    return FilteredList;\n}());\nexports.Autocomplete = Autocomplete;\nexports.CompletionProvider = CompletionProvider;\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({\n        row: 0,\n        column: 0\n    }, 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        completions = completions.map(function (el) {\n            el.completerId = keyWordCompleter.id;\n            return el;\n        });\n        callback(null, completions);\n    },\n    id: \"keywordCompleter\"\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                    completerId: snippetCompleter.id\n                });\n            }\n        }, this);\n        callback(null, completions);\n    },\n    getDocTooltip: function (item) {\n        if (item.snippet && !item.docHTML) {\n            item.docHTML = [\n                \"\", lang.escapeHTML(item.caption), \"\", \"
\",\n lang.escapeHTML(transformSnippetTooltip(item.snippet))\n ].join(\"\");\n }\n },\n id: \"snippetCompleter\"\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\" && !hasCompleter) {\n lastExecEvent = e;\n var delay = e.editor.$liveAutocompletionDelay;\n if (delay) {\n liveAutocompleteTimer.delay(delay);\n }\n else {\n showLiveAutocomplete(e);\n }\n }\n};\nvar lastExecEvent;\nvar liveAutocompleteTimer = lang.delayedCall(function () {\n showLiveAutocomplete(lastExecEvent);\n}, 0);\nvar showLiveAutocomplete = function (e) {\n var editor = e.editor;\n var prefix = util.getCompletionPrefix(editor);\n var triggerAutocomplete = util.triggerAutocomplete(editor);\n if (prefix && prefix.length >= editor.$liveAutocompletionThreshold || triggerAutocomplete) {\n var completer = Autocomplete.for(editor);\n completer.autoShown = true;\n completer.showPopup(editor);\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.off('afterExec', doLiveAutocomplete);\n }\n },\n value: false\n },\n liveAutocompletionDelay: {\n initialValue: 0\n },\n liveAutocompletionThreshold: {\n initialValue: 0\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 "],"mappings":"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","names":["require_cd2349b7f4b6f7013e195c8145d2917","__commonJSMin","exports","module","require","dom","oop","EventEmitter","lang","Range","RangeList","HashHandler","Tokenizer","clipboard","VARIABLES","editor","name","indentation","text","mode","date","dateFormat","str","SnippetManager","TabstopToken","escape","ch","formatMatcher","val","state","stack","ts","t","choices","operator","value","next","token","startState","x","flag","re","fmtTokens","_self","formatted","oldArgs","fmtParts","gChangeCase","i","snippet","result","afterNewLine","j","gotoNext","i1","snippetText","processedSnippet","processSnippetText","options","range","end","tabstopManager","TabstopManager","selectionId","self","scope","c","scopes","snippetMap","cursor","line","before","after","snippets","snippetList","s","snippetNameMap","wrapRegexp","src","guardedRegexp","guard","opening","addSnippet","map","old","key","removeSnippet","nameMap","list","m","guardRe","tabString","indentString","tokens","tabstops","p","id","isNested","expanding","copyValue","copy","parentId","row","column","lines","delta","isRemove","selectedTabstop","parents","active","parentActive","startIndex","endIndex","toRemove","session","original","fmt","e","lead","anchor","isEmpty","containsLead","containsAnchor","dir","max","index","sel","start","useLink","moveRelative","arg","ranges","snippetId","dest","movePoint","currentSnippetId","point","diff","Editor","content","Renderer","event","nls","userAgent","getAriaId","popupAriaRole","optionAriaRole","ariaActiveState","$singleLineEditor","el","renderer","AcePopup","parentNode","popup","noop","pos","selectionMarker","lastMouseEvent","hoverMarker","setHoverMarker","selected","ariaId","hideHoverMarker","suppressRedraw","data","bgTokenizer","caption","addToken","className","lower","filterText","lastIndex","lastI","sub","lineHeight","forceShow","screenHeight","screenWidth","maxH","dims","spaceBelow","spaceAbove","fitsX","left","topdownOnly","where","AceInlineScreenReader","idString","lineIndex","codeElement","container","snippetManager","AceInline","completion","prefix","displayText","array","fn","callback","completed","arLength","err","ID_REGEX","regex","buf","completer","identifierRegex","previousChar","util","config","preventParentScroll","destroyCompleter","Autocomplete","initialPosition","FilteredList","hide","cursorColumn","inlineEnabled","elements","_this","rect","posGhostText","editorContainerBottom","lowestPosition","keepPopupPosition","oldRow","previousSelectedItem","newRow","fromTooltip","completions","CompletionProvider","completionOptions","finished","filtered","emptyMessage","completionsForEmpty","all","doc","completersLength","item","theme","tooltipNode","a","replaceBefore","replaceAfter","matches","total","results","processResults","isImmediate","immediateResults","b","prev","items","needle","upper","loop","matchMask","penalty","distance","fullMatchIndex","i2","splitRegex","getWordIndex","textBefore","wordDistance","prefixPos","words","wordScores","currentWord","word","idx","score","wordScore","wordList","textCompleter","keyWordCompleter","transformSnippetTooltip","record","_","p1","p2","p3","snippetCompleter","completers","expandSnippet","onChangeMode","loadSnippetsForMode","loadSnippetFile","snippetFilePath","doLiveAutocomplete","hasCompleter","lastExecEvent","delay","liveAutocompleteTimer","showLiveAutocomplete","triggerAutocomplete"],"sourceRoot":"","file":"0cd2349b7f4b6f7013e195c8145d2917.js"}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy