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

web-interface.assets.325e2d4b-2679.170f39d4ebf9f3e91c81.js.map Maven / Gradle / Ivy

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




© 2015 - 2024 Weber Informatics LLC | Privacy Policy