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

ber-security.graylog.graylog-plugin-alert-wizard.5.2.1.source-code.a80419f9c3febe3a5c13051df62f6737.js.map Maven / Gradle / Ivy

The newest version!
{"version":3,"sources":["webpack://AlertWizard/a80419f9c3febe3a5c13051df62f6737.js"],"sourcesContent":["ace.define(\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n\"use strict\";\nvar keys = require(\"../../lib/keys\");\nmodule.exports.getEditorKeybordShortcuts = function (editor) {\n    var KEY_MODS = keys.KEY_MODS;\n    var keybindings = [];\n    var commandMap = {};\n    editor.keyBinding.$handlers.forEach(function (handler) {\n        var ckb = handler.commandKeyBinding;\n        for (var i in ckb) {\n            var key = i.replace(/(^|-)\\w/g, function (x) { return x.toUpperCase(); });\n            var commands = ckb[i];\n            if (!Array.isArray(commands))\n                commands = [commands];\n            commands.forEach(function (command) {\n                if (typeof command != \"string\")\n                    command = command.name;\n                if (commandMap[command]) {\n                    commandMap[command].key += \"|\" + key;\n                }\n                else {\n                    commandMap[command] = { key: key, command: command };\n                    keybindings.push(commandMap[command]);\n                }\n            });\n        }\n    });\n    return keybindings;\n};\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 getAriaId = function (index) {\n    return \"suggest-aria-id:\".concat(index);\n};\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 = 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.renderer.container.setAttribute(\"role\", \"listbox\");\n        popup.renderer.container.setAttribute(\"aria-label\", \"Autocomplete suggestions\");\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            var el = document.activeElement; // Active element is textarea of main editor\n            if (selected !== t.selectedNode && t.selectedNode) {\n                dom.removeCssClass(t.selectedNode, \"ace_selected\");\n                el.removeAttribute(\"aria-activedescendant\");\n                t.selectedNode.removeAttribute(\"id\");\n            }\n            t.selectedNode = selected;\n            if (selected) {\n                dom.addCssClass(selected, \"ace_selected\");\n                var ariaId = getAriaId(row);\n                selected.id = ariaId;\n                popup.renderer.container.setAttribute(\"aria-activedescendant\", ariaId);\n                el.setAttribute(\"aria-activedescendant\", ariaId);\n                selected.setAttribute(\"role\", \"option\");\n                selected.setAttribute(\"aria-label\", popup.getData(row).value);\n                selected.setAttribute(\"aria-setsize\", popup.data.length);\n                selected.setAttribute(\"aria-posinset\", row);\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\", 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            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: 0 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}\\n.ace_autocomplete_right .ace_text-layer  {\\n    width: calc(100% - 8px);\\n}\\n.ace_autocomplete_right .ace_line {\\n    display: flex;\\n}\\n.ace_autocomplete_right .ace_completion-meta {\\n    flex: 1;\\n    text-align: right;\\n}\\n\", \"autocompletion.css\", false);\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\nexports.getAriaId = getAriaId;\n\n});\n\nace.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    var processSnippetText = function (editor, snippetText, replaceRange) {\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        return {\n            text: text,\n            tabstops: tabstops,\n            tokens: tokens\n        };\n    };\n    this.getDisplayTextForSnippet = function (editor, snippetText) {\n        var processedSnippet = processSnippetText.call(this, editor, snippetText);\n        return processedSnippet.text;\n    };\n    this.insertSnippetForSelection = function (editor, snippetText, replaceRange) {\n        var processedSnippet = processSnippetText.call(this, editor, snippetText);\n        var range = editor.getSelectionRange();\n        if (replaceRange && replaceRange.compareRange(range) === 0) {\n            range = replaceRange;\n        }\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    this.insertSnippet = function (editor, snippetText, replaceRange) {\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText, replaceRange);\n        editor.forEachSelection(function () {\n            self.insertSnippetForSelection(editor, snippetText, replaceRange);\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/inline\",[\"require\",\"exports\",\"module\",\"ace/snippets\"], function(require, exports, module){\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\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        }\n        if (!editor || !completion) {\n            return false;\n        }\n        var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value;\n        if (!displayText || !displayText.startsWith(prefix)) {\n            return false;\n        }\n        this.editor = editor;\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    };\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};\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\"], 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 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.exactMatch = false;\n        this.inlineEnabled = false;\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    Autocomplete.prototype.$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.$onPopupChange.bind(this));\n        this.popup.on(\"hide\", this.$onHidePopup.bind(this));\n        this.popup.on(\"select\", this.$onPopupChange.bind(this));\n        this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\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    };\n    Autocomplete.prototype.$onPopupChange = function (hide) {\n        if (this.inlineRenderer && this.inlineEnabled) {\n            var completion = hide ? null : this.popup.getData(this.popup.getRow());\n            var prefix = util.getCompletionPrefix(this.editor);\n            if (!this.inlineRenderer.show(this.editor, completion, prefix)) {\n                this.inlineRenderer.hide();\n            }\n            this.$updatePopupPosition();\n        }\n        this.tooltipTimer.call(null, null);\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        if (this.popup.tryShow(posGhostText, 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        if (!this.popup)\n            this.$init();\n        if (this.inlineEnabled && !this.inlineRenderer)\n            this.$initInline();\n        this.popup.autoSelect = this.autoSelect;\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        this.popup.setRow(this.autoSelect ? 0 : -1);\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    };\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.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.base)\n            this.base.detach();\n        this.activated = false;\n        this.completionProvider = this.completions = this.base = null;\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        this.detach();\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        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 () {\n        if (!this.completionProvider)\n            this.completionProvider = new CompletionProvider();\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            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 = { exactMatch: this.exactMatch };\n        this.getCompletionProvider().provideCompletions(this.editor, completionOptions, function (err, completions, finished) {\n            var filtered = completions.filtered;\n            var prefix = util.getCompletionPrefix(this.editor);\n            if (finished) {\n                if (!filtered.length)\n                    return this.detach();\n                if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n                    return this.detach();\n                if (this.autoInsert && filtered.length == 1)\n                    return this.insertMatch(filtered[0]);\n            }\n            this.completions = completions;\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n        }.bind(this));\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 = 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        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.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    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.showPopup(editor, options);\n        completer.cancelContextMenu();\n    },\n    bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\nvar CompletionProvider = /** @class */ (function () {\n    function CompletionProvider() {\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            if (this.completions.filterText) {\n                var ranges = editor.selection.getAllRanges();\n                for (var i = 0, range; range = ranges[i]; i++) {\n                    range.start.column -= this.completions.filterText.length;\n                    editor.session.remove(range);\n                }\n            }\n            if (data.snippet)\n                snippetManager.insertSnippet(editor, data.snippet, data.range);\n            else {\n                this.$insertString(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        if (data.range) {\n            if (editor.inVirtualSelectionMode) {\n                return editor.session.replace(data.range, text);\n            }\n            editor.forEachSelection(function () {\n                var range = editor.getSelectionRange();\n                if (data.range.compareRange(range) === 0) {\n                    editor.session.replace(data.range, text);\n                }\n                else {\n                    editor.insert(text);\n                }\n            }, null, { keepOrder: true });\n        }\n        else {\n            editor.execCommand(\"insertstring\", text);\n        }\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        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    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    };\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/ext/menu_tools/settings_menu.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"#ace_settingsmenu, #kbshortcutmenu {\\n    background-color: #F7F7F7;\\n    color: black;\\n    box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\n    padding: 1em 0.5em 2em 1em;\\n    overflow: auto;\\n    position: absolute;\\n    margin: 0;\\n    bottom: 0;\\n    right: 0;\\n    top: 0;\\n    z-index: 9991;\\n    cursor: default;\\n}\\n\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\n    box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\n    background-color: rgba(255, 255, 255, 0.6);\\n    color: black;\\n}\\n\\n.ace_optionsMenuEntry:hover {\\n    background-color: rgba(100, 100, 100, 0.1);\\n    transition: all 0.3s\\n}\\n\\n.ace_closeButton {\\n    background: rgba(245, 146, 146, 0.5);\\n    border: 1px solid #F48A8A;\\n    border-radius: 50%;\\n    padding: 7px;\\n    position: absolute;\\n    right: -8px;\\n    top: -8px;\\n    z-index: 100000;\\n}\\n.ace_closeButton{\\n    background: rgba(245, 146, 146, 0.9);\\n}\\n.ace_optionsMenuKey {\\n    color: darkslateblue;\\n    font-weight: bold;\\n}\\n.ace_optionsMenuCommand {\\n    color: darkcyan;\\n    font-weight: normal;\\n}\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\n    vertical-align: middle;\\n}\\n\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\n    background: #e7e7e7;\\n    box-shadow: 1px 0px 2px 0px #adadad inset;\\n    border-color: #adadad;\\n}\\n.ace_optionsMenuEntry button {\\n    background: white;\\n    border: 1px solid lightgray;\\n    margin: 0px;\\n}\\n.ace_optionsMenuEntry button:hover{\\n    background: #f0f0f0;\\n}\";\n\n});\n\nace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/ext/menu_tools/settings_menu.css\"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = require(\"./settings_menu.css\");\ndom.importCssString(cssText, \"settings_menu.css\", false);\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, callback) {\n    var closer = document.createElement('div');\n    var ignoreFocusOut = false;\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            close();\n        }\n    }\n    function close() {\n        if (!closer)\n            return;\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        if (editor) {\n            editor.focus();\n        }\n        closer = null;\n        callback && callback();\n    }\n    function setIgnoreFocusOut(ignore) {\n        ignoreFocusOut = ignore;\n        if (ignore) {\n            closer.style.pointerEvents = \"none\";\n            contentElement.style.pointerEvents = \"auto\";\n        }\n    }\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        (editor ? 'background-color: rgba(0, 0, 0, 0.3);' : '');\n    closer.addEventListener('click', function (e) {\n        if (!ignoreFocusOut) {\n            close();\n        }\n    });\n    document.addEventListener('keydown', documentEscListener);\n    contentElement.addEventListener('click', function (e) {\n        e.stopPropagation();\n    });\n    closer.appendChild(contentElement);\n    document.body.appendChild(closer);\n    if (editor) {\n        editor.blur();\n    }\n    return {\n        close: close,\n        setIgnoreFocusOut: setIgnoreFocusOut\n    };\n};\n\n});\n\nace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar modes = [];\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\nvar Mode = /** @class */ (function () {\n    function Mode(name, caption, extensions) {\n        this.name = name;\n        this.caption = caption;\n        this.mode = \"ace/mode/\" + name;\n        this.extensions = extensions;\n        var re;\n        if (/\\^/.test(extensions)) {\n            re = extensions.replace(/\\|(\\^)?/g, function (a, b) {\n                return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n            }) + \"$\";\n        }\n        else {\n            re = \"^.*\\\\.(\" + extensions + \")$\";\n        }\n        this.extRe = new RegExp(re, \"gi\");\n    }\n    Mode.prototype.supportsFile = function (filename) {\n        return filename.match(this.extRe);\n    };\n    return Mode;\n}());\nvar supportedModes = {\n    ABAP: [\"abap\"],\n    ABC: [\"abc\"],\n    ActionScript: [\"as\"],\n    ADA: [\"ada|adb\"],\n    Alda: [\"alda\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    Apex: [\"apex|cls|trigger|tgr\"],\n    AQL: [\"aql\"],\n    AsciiDoc: [\"asciidoc|adoc\"],\n    ASL: [\"dsl|asl|asl.json\"],\n    Assembly_x86: [\"asm|a\"],\n    AutoHotKey: [\"ahk\"],\n    BatchFile: [\"bat|cmd\"],\n    BibTeX: [\"bib\"],\n    C_Cpp: [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search: [\"c9search_results\"],\n    Cirru: [\"cirru|cr\"],\n    Clojure: [\"clj|cljs\"],\n    Cobol: [\"CBL|COB\"],\n    coffee: [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion: [\"cfm|cfc\"],\n    Crystal: [\"cr\"],\n    CSharp: [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS: [\"css\"],\n    Curly: [\"curly\"],\n    D: [\"d|di\"],\n    Dart: [\"dart\"],\n    Diff: [\"diff|patch\"],\n    Dockerfile: [\"^Dockerfile\"],\n    Dot: [\"dot\"],\n    Drools: [\"drl\"],\n    Edifact: [\"edi\"],\n    Eiffel: [\"e|ge\"],\n    EJS: [\"ejs\"],\n    Elixir: [\"ex|exs\"],\n    Elm: [\"elm\"],\n    Erlang: [\"erl|hrl\"],\n    Forth: [\"frt|fs|ldr|fth|4th\"],\n    Fortran: [\"f|f90\"],\n    FSharp: [\"fsi|fs|ml|mli|fsx|fsscript\"],\n    FSL: [\"fsl\"],\n    FTL: [\"ftl\"],\n    Gcode: [\"gcode\"],\n    Gherkin: [\"feature\"],\n    Gitignore: [\"^.gitignore\"],\n    Glsl: [\"glsl|frag|vert\"],\n    Gobstones: [\"gbs\"],\n    golang: [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy: [\"groovy\"],\n    HAML: [\"haml\"],\n    Handlebars: [\"hbs|handlebars|tpl|mustache\"],\n    Haskell: [\"hs\"],\n    Haskell_Cabal: [\"cabal\"],\n    haXe: [\"hx\"],\n    Hjson: [\"hjson\"],\n    HTML: [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby: [\"erb|rhtml|html.erb\"],\n    INI: [\"ini|conf|cfg|prefs\"],\n    Io: [\"io\"],\n    Ion: [\"ion\"],\n    Jack: [\"jack\"],\n    Jade: [\"jade|pug\"],\n    Java: [\"java\"],\n    JavaScript: [\"js|jsm|jsx|cjs|mjs\"],\n    JEXL: [\"jexl\"],\n    JSON: [\"json\"],\n    JSON5: [\"json5\"],\n    JSONiq: [\"jq\"],\n    JSP: [\"jsp\"],\n    JSSM: [\"jssm|jssm_state\"],\n    JSX: [\"jsx\"],\n    Julia: [\"jl\"],\n    Kotlin: [\"kt|kts\"],\n    LaTeX: [\"tex|latex|ltx|bib\"],\n    Latte: [\"latte\"],\n    LESS: [\"less\"],\n    Liquid: [\"liquid\"],\n    Lisp: [\"lisp\"],\n    LiveScript: [\"ls\"],\n    Log: [\"log\"],\n    LogiQL: [\"logic|lql\"],\n    Logtalk: [\"lgt\"],\n    LSL: [\"lsl\"],\n    Lua: [\"lua\"],\n    LuaPage: [\"lp\"],\n    Lucene: [\"lucene\"],\n    Makefile: [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown: [\"md|markdown\"],\n    Mask: [\"mask\"],\n    MATLAB: [\"matlab\"],\n    Maze: [\"mz\"],\n    MediaWiki: [\"wiki|mediawiki\"],\n    MEL: [\"mel\"],\n    MIPS: [\"s|asm\"],\n    MIXAL: [\"mixal\"],\n    MUSHCode: [\"mc|mush\"],\n    MySQL: [\"mysql\"],\n    Nginx: [\"nginx|conf\"],\n    Nim: [\"nim\"],\n    Nix: [\"nix\"],\n    NSIS: [\"nsi|nsh\"],\n    Nunjucks: [\"nunjucks|nunjs|nj|njk\"],\n    ObjectiveC: [\"m|mm\"],\n    OCaml: [\"ml|mli\"],\n    PartiQL: [\"partiql|pql\"],\n    Pascal: [\"pas|p\"],\n    Perl: [\"pl|pm\"],\n    pgSQL: [\"pgsql\"],\n    PHP: [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    PHP_Laravel_blade: [\"blade.php\"],\n    Pig: [\"pig\"],\n    PLSQL: [\"plsql\"],\n    Powershell: [\"ps1\"],\n    Praat: [\"praat|praatscript|psc|proc\"],\n    Prisma: [\"prisma\"],\n    Prolog: [\"plg|prolog\"],\n    Properties: [\"properties\"],\n    Protobuf: [\"proto\"],\n    Puppet: [\"epp|pp\"],\n    Python: [\"py\"],\n    QML: [\"qml\"],\n    R: [\"r\"],\n    Raku: [\"raku|rakumod|rakutest|p6|pl6|pm6\"],\n    Razor: [\"cshtml|asp\"],\n    RDoc: [\"Rd\"],\n    Red: [\"red|reds\"],\n    RHTML: [\"Rhtml\"],\n    Robot: [\"robot|resource\"],\n    RST: [\"rst\"],\n    Ruby: [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust: [\"rs\"],\n    SaC: [\"sac\"],\n    SASS: [\"sass\"],\n    SCAD: [\"scad\"],\n    Scala: [\"scala|sbt\"],\n    Scheme: [\"scm|sm|rkt|oak|scheme\"],\n    Scrypt: [\"scrypt\"],\n    SCSS: [\"scss\"],\n    SH: [\"sh|bash|^.bashrc\"],\n    SJS: [\"sjs\"],\n    Slim: [\"slim|skim\"],\n    Smarty: [\"smarty|tpl\"],\n    Smithy: [\"smithy\"],\n    snippets: [\"snippets\"],\n    Soy_Template: [\"soy\"],\n    Space: [\"space\"],\n    SPARQL: [\"rq\"],\n    SQL: [\"sql\"],\n    SQLServer: [\"sqlserver\"],\n    Stylus: [\"styl|stylus\"],\n    SVG: [\"svg\"],\n    Swift: [\"swift\"],\n    Tcl: [\"tcl\"],\n    Terraform: [\"tf\", \"tfvars\", \"terragrunt\"],\n    Tex: [\"tex\"],\n    Text: [\"txt\"],\n    Textile: [\"textile\"],\n    Toml: [\"toml\"],\n    TSX: [\"tsx\"],\n    Turtle: [\"ttl\"],\n    Twig: [\"twig|swig\"],\n    Typescript: [\"ts|typescript|str\"],\n    Vala: [\"vala\"],\n    VBScript: [\"vbs|vb\"],\n    Velocity: [\"vm\"],\n    Verilog: [\"v|vh|sv|svh\"],\n    VHDL: [\"vhd|vhdl\"],\n    Visualforce: [\"vfp|component|page\"],\n    Wollok: [\"wlk|wpgm|wtest\"],\n    XML: [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery: [\"xq\"],\n    YAML: [\"yaml|yml\"],\n    Zeek: [\"zeek|bro\"],\n    Django: [\"html\"]\n};\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\",\n    PHP_Laravel_blade: \"PHP (Blade Template)\",\n    Perl6: \"Perl 6\",\n    AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});\n\nace.define(\"ace/ext/prompt\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\",\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\",\"ace/autocomplete\",\"ace/autocomplete/popup\",\"ace/autocomplete/popup\",\"ace/undomanager\",\"ace/tokenizer\",\"ace/ext/menu_tools/overlay_page\",\"ace/ext/modelist\"], function(require, exports, module){/**\n * Prompt plugin is used for getting input from user.\n *\n * @param {Object} editor                   Ouside editor related to this prompt. Will be blurred when prompt is open.\n * @param {String} message                  Predefined value of prompt input box.\n * @param {Object} options                  Cusomizable options for this prompt.\n * @param {String} options.name             Prompt name.\n * @param {String} options.$type            Use prompt of specific type (gotoLine|commands|modes or default if empty).\n * @param {[start, end]} options.selection  Defines which part of the predefined value should be highlited.\n * @param {Boolean} options.hasDescription  Set to true if prompt has description below input box.\n * @param {String} options.prompt           Description below input box.\n * @param {String} options.placeholder      Placeholder for value.\n * @param {Object} options.$rules           Specific rules for input like password or regexp.\n * @param {Boolean} options.ignoreFocusOut  Set to true to keep the prompt open when focus moves to another part of the editor.\n * @param {Function} options.getCompletions Function for defining list of options for value.\n * @param {Function} options.getPrefix      Function for defining current value prefix.\n * @param {Function} options.onAccept       Function called when Enter is pressed.\n * @param {Function} options.onInput        Function called when input is added to prompt input box.\n * @param {Function} options.onCancel       Function called when Esc|Shift-Esc is pressed.\n * @param {Function} callback               Function called after done.\n * */\n\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar shortcuts = require(\"../ext/menu_tools/get_editor_keyboard_shortcuts\");\nvar FilteredList = require(\"../autocomplete\").FilteredList;\nvar AcePopup = require('../autocomplete/popup').AcePopup;\nvar $singleLineEditor = require('../autocomplete/popup').$singleLineEditor;\nvar UndoManager = require(\"../undomanager\").UndoManager;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar overlayPage = require(\"./menu_tools/overlay_page\").overlayPage;\nvar modelist = require(\"./modelist\");\nvar openPrompt;\nfunction prompt(editor, message, options, callback) {\n    if (typeof message == \"object\") {\n        return prompt(editor, \"\", message, options);\n    }\n    if (openPrompt) {\n        var lastPrompt = openPrompt;\n        editor = lastPrompt.editor;\n        lastPrompt.close();\n        if (lastPrompt.name && lastPrompt.name == options.name)\n            return;\n    }\n    if (options.$type)\n        return prompt[options.$type](editor, callback);\n    var cmdLine = $singleLineEditor();\n    cmdLine.session.setUndoManager(new UndoManager());\n    var el = dom.buildDom([\"div\", { class: \"ace_prompt_container\" + (options.hasDescription ? \" input-box-with-description\" : \"\") }]);\n    var overlay = overlayPage(editor, el, done);\n    el.appendChild(cmdLine.container);\n    if (editor) {\n        editor.cmdLine = cmdLine;\n        cmdLine.setOption(\"fontSize\", editor.getOption(\"fontSize\"));\n    }\n    if (message) {\n        cmdLine.setValue(message, 1);\n    }\n    if (options.selection) {\n        cmdLine.selection.setRange({\n            start: cmdLine.session.doc.indexToPosition(options.selection[0]),\n            end: cmdLine.session.doc.indexToPosition(options.selection[1])\n        });\n    }\n    if (options.getCompletions) {\n        var popup = new AcePopup();\n        popup.renderer.setStyle(\"ace_autocomplete_inline\");\n        popup.renderer.setStyle(\"ace_autocomplete_right\");\n        popup.container.style.display = \"block\";\n        popup.container.style.maxWidth = \"600px\";\n        popup.container.style.width = \"100%\";\n        popup.container.style.marginTop = \"3px\";\n        popup.renderer.setScrollMargin(2, 2, 0, 0);\n        popup.autoSelect = false;\n        popup.renderer.$maxLines = 15;\n        popup.setRow(-1);\n        popup.on(\"click\", function (e) {\n            var data = popup.getData(popup.getRow());\n            if (!data.error) {\n                cmdLine.setValue(data.value || data.name || data);\n                accept();\n                e.stop();\n            }\n        });\n        el.appendChild(popup.container);\n        updateCompletions();\n    }\n    if (options.$rules) {\n        var tokenizer = new Tokenizer(options.$rules);\n        cmdLine.session.bgTokenizer.setTokenizer(tokenizer);\n    }\n    if (options.placeholder) {\n        cmdLine.setOption(\"placeholder\", options.placeholder);\n    }\n    if (options.hasDescription) {\n        var promptTextContainer = dom.buildDom([\"div\", { class: \"ace_prompt_text_container\" }]);\n        dom.buildDom(options.prompt || \"Press 'Enter' to confirm or 'Escape' to cancel\", promptTextContainer);\n        el.appendChild(promptTextContainer);\n    }\n    overlay.setIgnoreFocusOut(options.ignoreFocusOut);\n    function accept() {\n        var val;\n        if (popup && popup.getCursorPosition().row > 0) {\n            val = valueFromRecentList();\n        }\n        else {\n            val = cmdLine.getValue();\n        }\n        var curData = popup ? popup.getData(popup.getRow()) : val;\n        if (curData && !curData.error) {\n            done();\n            options.onAccept && options.onAccept({\n                value: val,\n                item: curData\n            }, cmdLine);\n        }\n    }\n    var keys = {\n        \"Enter\": accept,\n        \"Esc|Shift-Esc\": function () {\n            options.onCancel && options.onCancel(cmdLine.getValue(), cmdLine);\n            done();\n        }\n    };\n    if (popup) {\n        Object.assign(keys, {\n            \"Up\": function (editor) { popup.goTo(\"up\"); valueFromRecentList(); },\n            \"Down\": function (editor) { popup.goTo(\"down\"); valueFromRecentList(); },\n            \"Ctrl-Up|Ctrl-Home\": function (editor) { popup.goTo(\"start\"); valueFromRecentList(); },\n            \"Ctrl-Down|Ctrl-End\": function (editor) { popup.goTo(\"end\"); valueFromRecentList(); },\n            \"Tab\": function (editor) {\n                popup.goTo(\"down\");\n                valueFromRecentList();\n            },\n            \"PageUp\": function (editor) { popup.gotoPageUp(); valueFromRecentList(); },\n            \"PageDown\": function (editor) { popup.gotoPageDown(); valueFromRecentList(); }\n        });\n    }\n    cmdLine.commands.bindKeys(keys);\n    function done() {\n        overlay.close();\n        callback && callback();\n        openPrompt = null;\n    }\n    cmdLine.on(\"input\", function () {\n        options.onInput && options.onInput();\n        updateCompletions();\n    });\n    function updateCompletions() {\n        if (options.getCompletions) {\n            var prefix;\n            if (options.getPrefix) {\n                prefix = options.getPrefix(cmdLine);\n            }\n            var completions = options.getCompletions(cmdLine);\n            popup.setData(completions, prefix);\n            popup.resize(true);\n        }\n    }\n    function valueFromRecentList() {\n        var current = popup.getData(popup.getRow());\n        if (current && !current.error)\n            return current.value || current.caption || current;\n    }\n    cmdLine.resize(true);\n    if (popup) {\n        popup.resize(true);\n    }\n    cmdLine.focus();\n    openPrompt = {\n        close: done,\n        name: options.name,\n        editor: editor\n    };\n}\nprompt.gotoLine = function (editor, callback) {\n    function stringifySelection(selection) {\n        if (!Array.isArray(selection))\n            selection = [selection];\n        return selection.map(function (r) {\n            var cursor = r.isBackwards ? r.start : r.end;\n            var anchor = r.isBackwards ? r.end : r.start;\n            var row = anchor.row;\n            var s = (row + 1) + \":\" + anchor.column;\n            if (anchor.row == cursor.row) {\n                if (anchor.column != cursor.column)\n                    s += \">\" + \":\" + cursor.column;\n            }\n            else {\n                s += \">\" + (cursor.row + 1) + \":\" + cursor.column;\n            }\n            return s;\n        }).reverse().join(\", \");\n    }\n    prompt(editor, \":\" + stringifySelection(editor.selection.toJSON()), {\n        name: \"gotoLine\",\n        selection: [1, Number.MAX_VALUE],\n        onAccept: function (data) {\n            var value = data.value;\n            var _history = prompt.gotoLine._history;\n            if (!_history)\n                prompt.gotoLine._history = _history = [];\n            if (_history.indexOf(value) != -1)\n                _history.splice(_history.indexOf(value), 1);\n            _history.unshift(value);\n            if (_history.length > 20)\n                _history.length = 20;\n            var pos = editor.getCursorPosition();\n            var ranges = [];\n            value.replace(/^:/, \"\").split(/,/).map(function (str) {\n                var parts = str.split(/([<>:+-]|c?\\d+)|[^c\\d<>:+-]+/).filter(Boolean);\n                var i = 0;\n                function readPosition() {\n                    var c = parts[i++];\n                    if (!c)\n                        return;\n                    if (c[0] == \"c\") {\n                        var index = parseInt(c.slice(1)) || 0;\n                        return editor.session.doc.indexToPosition(index);\n                    }\n                    var row = pos.row;\n                    var column = 0;\n                    if (/\\d/.test(c)) {\n                        row = parseInt(c) - 1;\n                        c = parts[i++];\n                    }\n                    if (c == \":\") {\n                        c = parts[i++];\n                        if (/\\d/.test(c)) {\n                            column = parseInt(c) || 0;\n                        }\n                    }\n                    return { row: row, column: column };\n                }\n                pos = readPosition();\n                var range = Range.fromPoints(pos, pos);\n                if (parts[i] == \">\") {\n                    i++;\n                    range.end = readPosition();\n                }\n                else if (parts[i] == \"<\") {\n                    i++;\n                    range.start = readPosition();\n                }\n                ranges.unshift(range);\n            });\n            editor.selection.fromJSON(ranges);\n            var scrollTop = editor.renderer.scrollTop;\n            editor.renderer.scrollSelectionIntoView(editor.selection.anchor, editor.selection.cursor, 0.5);\n            editor.renderer.animateScrolling(scrollTop);\n        },\n        history: function () {\n            var undoManager = editor.session.getUndoManager();\n            if (!prompt.gotoLine._history)\n                return [];\n            return prompt.gotoLine._history;\n        },\n        getCompletions: function (cmdLine) {\n            var value = cmdLine.getValue();\n            var m = value.replace(/^:/, \"\").split(\":\");\n            var row = Math.min(parseInt(m[0]) || 1, editor.session.getLength()) - 1;\n            var line = editor.session.getLine(row);\n            var current = value + \"  \" + line;\n            return [current].concat(this.history());\n        },\n        $rules: {\n            start: [{\n                    regex: /\\d+/,\n                    token: \"string\"\n                }, {\n                    regex: /[:,><+\\-c]/,\n                    token: \"keyword\"\n                }]\n        }\n    });\n};\nprompt.commands = function (editor, callback) {\n    function normalizeName(name) {\n        return (name || \"\").replace(/^./, function (x) {\n            return x.toUpperCase(x);\n        }).replace(/[a-z][A-Z]/g, function (x) {\n            return x[0] + \" \" + x[1].toLowerCase(x);\n        });\n    }\n    function getEditorCommandsByName(excludeCommands) {\n        var commandsByName = [];\n        var commandMap = {};\n        editor.keyBinding.$handlers.forEach(function (handler) {\n            var platform = handler.platform;\n            var cbn = handler.byName;\n            for (var i in cbn) {\n                var key = cbn[i].bindKey;\n                if (typeof key !== \"string\") {\n                    key = key && key[platform] || \"\";\n                }\n                var commands = cbn[i];\n                var description = commands.description || normalizeName(commands.name);\n                if (!Array.isArray(commands))\n                    commands = [commands];\n                commands.forEach(function (command) {\n                    if (typeof command != \"string\")\n                        command = command.name;\n                    var needle = excludeCommands.find(function (el) {\n                        return el === command;\n                    });\n                    if (!needle) {\n                        if (commandMap[command]) {\n                            commandMap[command].key += \"|\" + key;\n                        }\n                        else {\n                            commandMap[command] = { key: key, command: command, description: description };\n                            commandsByName.push(commandMap[command]);\n                        }\n                    }\n                });\n            }\n        });\n        return commandsByName;\n    }\n    var excludeCommandsList = [\"insertstring\", \"inserttext\", \"setIndentation\", \"paste\"];\n    var shortcutsArray = getEditorCommandsByName(excludeCommandsList);\n    shortcutsArray = shortcutsArray.map(function (item) {\n        return { value: item.description, meta: item.key, command: item.command };\n    });\n    prompt(editor, \"\", {\n        name: \"commands\",\n        selection: [0, Number.MAX_VALUE],\n        maxHistoryCount: 5,\n        onAccept: function (data) {\n            if (data.item) {\n                var commandName = data.item.command;\n                this.addToHistory(data.item);\n                editor.execCommand(commandName);\n            }\n        },\n        addToHistory: function (item) {\n            var history = this.history();\n            history.unshift(item);\n            delete item.message;\n            for (var i = 1; i < history.length; i++) {\n                if (history[i][\"command\"] == item.command) {\n                    history.splice(i, 1);\n                    break;\n                }\n            }\n            if (this.maxHistoryCount > 0 && history.length > this.maxHistoryCount) {\n                history.splice(history.length - 1, 1);\n            }\n            prompt.commands.history = history;\n        },\n        history: function () {\n            return prompt.commands.history || [];\n        },\n        getPrefix: function (cmdLine) {\n            var currentPos = cmdLine.getCursorPosition();\n            var filterValue = cmdLine.getValue();\n            return filterValue.substring(0, currentPos.column);\n        },\n        getCompletions: function (cmdLine) {\n            function getFilteredCompletions(commands, prefix) {\n                var resultCommands = JSON.parse(JSON.stringify(commands));\n                var filtered = new FilteredList(resultCommands);\n                return filtered.filterCompletions(resultCommands, prefix);\n            }\n            function getUniqueCommandList(commands, usedCommands) {\n                if (!usedCommands || !usedCommands.length) {\n                    return commands;\n                }\n                var excludeCommands = [];\n                usedCommands.forEach(function (item) {\n                    excludeCommands.push(item.command);\n                });\n                var resultCommands = [];\n                commands.forEach(function (item) {\n                    if (excludeCommands.indexOf(item.command) === -1) {\n                        resultCommands.push(item);\n                    }\n                });\n                return resultCommands;\n            }\n            var prefix = this.getPrefix(cmdLine);\n            var recentlyUsedCommands = getFilteredCompletions(this.history(), prefix);\n            var otherCommands = getUniqueCommandList(shortcutsArray, recentlyUsedCommands);\n            otherCommands = getFilteredCompletions(otherCommands, prefix);\n            if (recentlyUsedCommands.length && otherCommands.length) {\n                recentlyUsedCommands[0][\"message\"] = \" Recently used\";\n                otherCommands[0][\"message\"] = \" Other commands\";\n            }\n            var completions = recentlyUsedCommands.concat(otherCommands);\n            return completions.length > 0 ? completions : [{\n                    value: \"No matching commands\",\n                    error: 1\n                }];\n        }\n    });\n};\nprompt.modes = function (editor, callback) {\n    var modesArray = modelist.modes;\n    modesArray = modesArray.map(function (item) {\n        return { value: item.caption, mode: item.name };\n    });\n    prompt(editor, \"\", {\n        name: \"modes\",\n        selection: [0, Number.MAX_VALUE],\n        onAccept: function (data) {\n            if (data.item) {\n                var modeName = \"ace/mode/\" + data.item.mode;\n                editor.session.setMode(modeName);\n            }\n        },\n        getPrefix: function (cmdLine) {\n            var currentPos = cmdLine.getCursorPosition();\n            var filterValue = cmdLine.getValue();\n            return filterValue.substring(0, currentPos.column);\n        },\n        getCompletions: function (cmdLine) {\n            function getFilteredCompletions(modes, prefix) {\n                var resultCommands = JSON.parse(JSON.stringify(modes));\n                var filtered = new FilteredList(resultCommands);\n                return filtered.filterCompletions(resultCommands, prefix);\n            }\n            var prefix = this.getPrefix(cmdLine);\n            var completions = getFilteredCompletions(modesArray, prefix);\n            return completions.length > 0 ? completions : [{\n                    \"caption\": \"No mode matching\",\n                    \"value\": \"No mode matching\",\n                    \"error\": 1\n                }];\n        }\n    });\n};\ndom.importCssString(\".ace_prompt_container {\\n    max-width: 603px;\\n    width: 100%;\\n    margin: 20px auto;\\n    padding: 3px;\\n    background: white;\\n    border-radius: 2px;\\n    box-shadow: 0px 2px 3px 0px #555;\\n}\", \"promtp.css\", false);\nexports.prompt = prompt;\n\n});                (function() {\n                    ace.require([\"ace/ext/prompt\"], 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_a80419f9c3febe3a5c13051df62f6737","__commonJSMin","exports","module","require","keys","editor","KEY_MODS","keybindings","commandMap","handler","ckb","i","key","commands","command","Renderer","Editor","Range","event","lang","dom","getAriaId","index","$singleLineEditor","el","renderer","AcePopup","parentNode","popup","noop","e","pos","selectionMarker","lastMouseEvent","hoverMarker","val","row","setHoverMarker","t","selected","ariaId","hideHoverMarker","suppressRedraw","data","bgTokenizer","tokens","caption","addToken","value","className","lower","filterText","lastIndex","lastI","sub","list","line","lineHeight","anchor","forceShow","screenHeight","screenWidth","maxH","dims","spaceBelow","spaceAbove","fitsX","left","topdownOnly","where","max","oop","EventEmitter","RangeList","HashHandler","Tokenizer","clipboard","VARIABLES","name","indentation","text","mode","date","dateFormat","str","SnippetManager","TabstopToken","escape","ch","formatMatcher","state","stack","ts","choices","operator","next","token","startState","x","flag","re","fmtTokens","_self","formatted","oldArgs","fmtParts","gChangeCase","snippet","result","afterNewLine","j","gotoNext","i1","processSnippetText","snippetText","replaceRange","cursor","tabString","indentString","tabstops","p","id","isNested","expanding","copyValue","copy","parentId","column","lines","processedSnippet","range","end","tabstopManager","TabstopManager","selectionId","self","scope","c","scopes","snippetMap","options","before","after","snippets","snippetList","s","snippetNameMap","wrapRegexp","src","guardedRegexp","guard","opening","addSnippet","map","old","removeSnippet","nameMap","m","guardRe","delta","isRemove","selectedTabstop","parents","active","parentActive","startIndex","endIndex","toRemove","session","original","fmt","lead","isEmpty","containsLead","containsAnchor","dir","sel","start","useLink","moveRelative","arg","ranges","dest","movePoint","point","diff","content","snippetManager","AceInline","completion","prefix","displayText","array","fn","callback","completed","arLength","err","ID_REGEX","regex","buf","completer","identifierRegex","util","config","destroyCompleter","Autocomplete","hide","rect","posGhostText","keepPopupPosition","fromTooltip","container","completions","CompletionProvider","FilteredList","completionOptions","finished","filtered","all","doc","completersLength","item","tooltipNode","a","matches","total","results","processResults","isImmediate","immediateResults","b","prev","items","needle","upper","loop","matchMask","penalty","distance","fullMatchIndex","i2","cssText","contentElement","closer","ignoreFocusOut","documentEscListener","close","setIgnoreFocusOut","ignore","modes","getModeForPath","path","modesByName","fileName","Mode","extensions","filename","supportedModes","nameOverrides","displayName","shortcuts","UndoManager","overlayPage","modelist","openPrompt","prompt","message","lastPrompt","cmdLine","overlay","done","accept","updateCompletions","tokenizer","promptTextContainer","valueFromRecentList","curData","current","stringifySelection","selection","r","_history","parts","readPosition","scrollTop","undoManager","normalizeName","getEditorCommandsByName","excludeCommands","commandsByName","platform","cbn","description","excludeCommandsList","shortcutsArray","commandName","history","currentPos","filterValue","getFilteredCompletions","resultCommands","getUniqueCommandList","usedCommands","recentlyUsedCommands","otherCommands","modesArray","modeName"],"sourceRoot":"","file":"a80419f9c3febe3a5c13051df62f6737.js"}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy