@castlabs/ui 4.24.2 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/castlabs-ui-editor.common.js +962 -23014
- package/dist/castlabs-ui-editor.common.js.map +1 -1
- package/dist/castlabs-ui-editor.css +1 -1
- package/dist/castlabs-ui-editor.umd.js +963 -23033
- package/dist/castlabs-ui-editor.umd.js.map +1 -1
- package/dist/castlabs-ui.common.js +5 -7682
- package/dist/castlabs-ui.common.js.map +1 -1
- package/dist/castlabs-ui.core.js +11 -3
- package/dist/castlabs-ui.css +4 -4
- package/dist/castlabs-ui.module.js +11 -3
- package/dist/castlabs-ui.umd.js +17 -7701
- package/dist/castlabs-ui.umd.js.map +1 -1
- package/package.json +31 -25
- package/src/components/ClDropdown/style.scss +10 -2
- package/src/components/ClHighlight/style.scss +21 -0
- package/src/fonts/FontAwesome5/FontAwesome5.scss +6 -3
- package/src/fonts/NotoSansMono/NotoSansMono.scss +7 -7
- package/src/fonts/OpenSansVariable/OpenSansVariable.scss +16 -16
- package/src/styles/components/button.variables.scss +1 -1
- package/src/styles/components/form.variables.scss +1 -1
- package/src/styles/ui.scss +1 -0
- package/dist/castlabs-ui-editor.umd.min.js +0 -10
- package/dist/castlabs-ui-editor.umd.min.js.map +0 -1
- package/dist/castlabs-ui.umd.min.js +0 -8
- package/dist/castlabs-ui.umd.min.js.map +0 -1
- package/dist/demo.html +0 -1
- /package/dist/fonts/{BngRUXNETWXI6LwhGYvaxZikqbCCwR26eg.f31394d2.woff2 → BngRUXNETWXI6LwhGYvaxZikqbCCwR26eg.9f9ebd6f.woff2} +0 -0
- /package/dist/fonts/{BngRUXNETWXI6LwhGYvaxZikqbCFwR26eg.00073a59.woff2 → BngRUXNETWXI6LwhGYvaxZikqbCFwR26eg.d7aed4ec.woff2} +0 -0
- /package/dist/fonts/{BngRUXNETWXI6LwhGYvaxZikqbCGwR0.faa92a75.woff2 → BngRUXNETWXI6LwhGYvaxZikqbCGwR0.860d704d.woff2} +0 -0
- /package/dist/fonts/{BngRUXNETWXI6LwhGYvaxZikqbCIwR26eg.f8e38fba.woff2 → BngRUXNETWXI6LwhGYvaxZikqbCIwR26eg.196096f5.woff2} +0 -0
- /package/dist/fonts/{BngRUXNETWXI6LwhGYvaxZikqbCJwR26eg.f1d5cd16.woff2 → BngRUXNETWXI6LwhGYvaxZikqbCJwR26eg.60896ebf.woff2} +0 -0
- /package/dist/fonts/{BngRUXNETWXI6LwhGYvaxZikqbCKwR26eg.ebbe259f.woff2 → BngRUXNETWXI6LwhGYvaxZikqbCKwR26eg.c5d717bd.woff2} +0 -0
- /package/dist/fonts/{BngRUXNETWXI6LwhGYvaxZikqbCLwR26eg.e3d460d0.woff2 → BngRUXNETWXI6LwhGYvaxZikqbCLwR26eg.e6581016.woff2} +0 -0
- /package/dist/fonts/{fa-brands-400.18993be8.woff2 → fa-brands-400.5faf8763.woff2} +0 -0
- /package/dist/fonts/{fa-regular-400.e45bb696.woff2 → fa-regular-400.2796ea47.woff2} +0 -0
- /package/dist/fonts/{fa-solid-900.16e3d2f0.woff2 → fa-solid-900.f72283a7.woff2} +0 -0
- /package/dist/fonts/{mem6YaGs126MiZpBA-UFUK0Udc1UAw.6de93dc1.woff2 → mem6YaGs126MiZpBA-UFUK0Udc1UAw.ed9c080e.woff2} +0 -0
- /package/dist/fonts/{mem6YaGs126MiZpBA-UFUK0Wdc1UAw.55c9461f.woff2 → mem6YaGs126MiZpBA-UFUK0Wdc1UAw.65f5554a.woff2} +0 -0
- /package/dist/fonts/{mem6YaGs126MiZpBA-UFUK0Xdc1UAw.111f8c99.woff2 → mem6YaGs126MiZpBA-UFUK0Xdc1UAw.ffa02f1c.woff2} +0 -0
- /package/dist/fonts/{mem6YaGs126MiZpBA-UFUK0Zdc0.92257a03.woff2 → mem6YaGs126MiZpBA-UFUK0Zdc0.157a9634.woff2} +0 -0
- /package/dist/fonts/{mem6YaGs126MiZpBA-UFUK0adc1UAw.1844ded3.woff2 → mem6YaGs126MiZpBA-UFUK0adc1UAw.ae9457b8.woff2} +0 -0
- /package/dist/fonts/{mem6YaGs126MiZpBA-UFUK0bdc1UAw.719267ea.woff2 → mem6YaGs126MiZpBA-UFUK0bdc1UAw.3c6000b1.woff2} +0 -0
- /package/dist/fonts/{mem6YaGs126MiZpBA-UFUK0ddc1UAw.037dea2d.woff2 → mem6YaGs126MiZpBA-UFUK0ddc1UAw.1244aaff.woff2} +0 -0
- /package/dist/fonts/{mem8YaGs126MiZpBA-UFUZ0bbck.6869bd80.woff2 → mem8YaGs126MiZpBA-UFUZ0bbck.32149fc9.woff2} +0 -0
- /package/dist/fonts/{mem8YaGs126MiZpBA-UFV50bbck.05a41692.woff2 → mem8YaGs126MiZpBA-UFV50bbck.16910b81.woff2} +0 -0
- /package/dist/fonts/{mem8YaGs126MiZpBA-UFVZ0b.38ffdf27.woff2 → mem8YaGs126MiZpBA-UFVZ0b.16652597.woff2} +0 -0
- /package/dist/fonts/{mem8YaGs126MiZpBA-UFVp0bbck.f12c0c2c.woff2 → mem8YaGs126MiZpBA-UFVp0bbck.e1ba37a1.woff2} +0 -0
- /package/dist/fonts/{mem8YaGs126MiZpBA-UFW50bbck.03f14837.woff2 → mem8YaGs126MiZpBA-UFW50bbck.b50868a3.woff2} +0 -0
- /package/dist/fonts/{mem8YaGs126MiZpBA-UFWJ0bbck.abcca84a.woff2 → mem8YaGs126MiZpBA-UFWJ0bbck.1250c5ba.woff2} +0 -0
- /package/dist/fonts/{mem8YaGs126MiZpBA-UFWp0bbck.4d1e267c.woff2 → mem8YaGs126MiZpBA-UFWp0bbck.3ec09e79.woff2} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"castlabs-ui-editor.umd.min.js","mappings":"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GAAI,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,KAAM,GAAI,MAAO,GAAI,KAAM,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,MAAO,GAAI,GAAI,EAAG,GAAI,KAAM,IAAK,EAAG,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,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","sources":["webpack://castlabs-ui-editor/webpack/universalModuleDefinition","webpack://castlabs-ui-editor/./node_modules/ace-builds/src-noconflict/ace.js","webpack://castlabs-ui-editor/./node_modules/ace-builds/src-noconflict/mode-json.js","webpack://castlabs-ui-editor/./node_modules/ace-builds/src-noconflict/theme-chrome.js","webpack://castlabs-ui-editor/./node_modules/vue-loader/dist/exportHelper.js","webpack://castlabs-ui-editor/external umd \"vue\"","webpack://castlabs-ui-editor/webpack/bootstrap","webpack://castlabs-ui-editor/webpack/runtime/amd define","webpack://castlabs-ui-editor/webpack/runtime/define property getters","webpack://castlabs-ui-editor/webpack/runtime/global","webpack://castlabs-ui-editor/webpack/runtime/hasOwnProperty shorthand","webpack://castlabs-ui-editor/webpack/runtime/make namespace object","webpack://castlabs-ui-editor/webpack/runtime/node module decorator","webpack://castlabs-ui-editor/webpack/runtime/publicPath","webpack://castlabs-ui-editor/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://castlabs-ui-editor/./src/components/ClFieldEditor/template.vue?6647","webpack://castlabs-ui-editor/./src/components/ClFieldEditor/template.vue","webpack://castlabs-ui-editor/./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","webpack://castlabs-ui-editor/./node_modules/vue3-ace-editor/index.js","webpack://castlabs-ui-editor/./src/components/ClFieldEditor/template.vue?d05a","webpack://castlabs-ui-editor/./src/components/ClFieldEditor/index.ts","webpack://castlabs-ui-editor/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"vue\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"castlabs-ui-editor\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"castlabs-ui-editor\"] = factory(root[\"vue\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__380__) {\nreturn ","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar require = function(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n if (packagedModule == undefined && require.original)\n return require.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative requires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/es6-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module){function defineProp(obj, name, val) {\n Object.defineProperty(obj, name, {\n value: val,\n enumerable: false,\n writable: true,\n configurable: true\n });\n}\nif (!String.prototype.startsWith) {\n defineProp(String.prototype, \"startsWith\", function (searchString, position) {\n position = position || 0;\n return this.lastIndexOf(searchString, position) === position;\n });\n}\nif (!String.prototype.endsWith) {\n defineProp(String.prototype, \"endsWith\", function (searchString, position) {\n var subjectString = this;\n if (position === undefined || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n });\n}\nif (!String.prototype.repeat) {\n defineProp(String.prototype, \"repeat\", function (count) {\n var result = \"\";\n var string = this;\n while (count > 0) {\n if (count & 1)\n result += string;\n if ((count >>= 1))\n string += string;\n }\n return result;\n });\n}\nif (!String.prototype.includes) {\n defineProp(String.prototype, \"includes\", function (str, position) {\n return this.indexOf(str, position) != -1;\n });\n}\nif (!Object.assign) {\n Object.assign = function (target) {\n if (target === undefined || target === null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n Object.keys(source).forEach(function (key) {\n output[key] = source[key];\n });\n }\n }\n return output;\n };\n}\nif (!Object.values) {\n Object.values = function (o) {\n return Object.keys(o).map(function (k) {\n return o[k];\n });\n };\n}\nif (!Array.prototype.find) {\n defineProp(Array.prototype, \"find\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return kValue;\n }\n }\n });\n}\nif (!Array.prototype.findIndex) {\n defineProp(Array.prototype, \"findIndex\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return k;\n }\n }\n });\n}\nif (!Array.prototype.includes) {\n defineProp(Array.prototype, \"includes\", function (item, position) {\n return this.indexOf(item, position) != -1;\n });\n}\nif (!Array.prototype.fill) {\n defineProp(Array.prototype, \"fill\", function (value) {\n var O = this;\n var len = O.length >>> 0;\n var start = arguments[1];\n var relativeStart = start >> 0;\n var k = relativeStart < 0\n ? Math.max(len + relativeStart, 0)\n : Math.min(relativeStart, len);\n var end = arguments[2];\n var relativeEnd = end === undefined ? len : end >> 0;\n var final = relativeEnd < 0\n ? Math.max(len + relativeEnd, 0)\n : Math.min(relativeEnd, len);\n while (k < final) {\n O[k] = value;\n k++;\n }\n return O;\n });\n}\nif (!Array.of) {\n defineProp(Array, \"of\", function () {\n return Array.prototype.slice.call(arguments);\n });\n}\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/es6-shim\"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st:\n\"use strict\";\nrequire(\"./es6-shim\");\n\n});\n\nace.define(\"ace/lib/deep_copy\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj)\n return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n return obj;\n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n if (count >>= 1)\n string += string;\n }\n return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\nexports.copyArray = function (array) {\n var copy = [];\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && typeof array[i] == \"object\")\n copy[i] = this.copyObject(array[i]);\n else\n copy[i] = array[i];\n }\n return copy;\n};\nexports.deepCopy = require(\"./deep_copy\").deepCopy;\nexports.arrayToMap = function (arr) {\n var map = {};\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n};\nexports.createMap = function (props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\nexports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n return (\"\" + str).replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/</g, \"<\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n var matches = [];\n string.replace(regExp, function (str) {\n matches.push({\n offset: arguments[arguments.length - 2],\n length: str.length\n });\n });\n return matches;\n};\nexports.deferredCall = function (fcn) {\n var timer = null;\n var callback = function () {\n timer = null;\n fcn();\n };\n var deferred = function (timeout) {\n deferred.cancel();\n timer = setTimeout(callback, timeout || 0);\n return deferred;\n };\n deferred.schedule = deferred;\n deferred.call = function () {\n this.cancel();\n fcn();\n return deferred;\n };\n deferred.cancel = function () {\n clearTimeout(timer);\n timer = null;\n return deferred;\n };\n deferred.isPending = function () {\n return timer;\n };\n return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n var timer = null;\n var callback = function () {\n timer = null;\n fcn();\n };\n var _self = function (timeout) {\n if (timer == null)\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.delay = function (timeout) {\n timer && clearTimeout(timer);\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.schedule = _self;\n _self.call = function () {\n this.cancel();\n fcn();\n };\n _self.cancel = function () {\n timer && clearTimeout(timer);\n timer = null;\n };\n _self.isPending = function () {\n return timer;\n };\n return _self;\n};\nexports.supportsLookbehind = function () {\n try {\n new RegExp('(?<=.)');\n }\n catch (e) {\n return false;\n }\n return true;\n};\nexports.skipEmptyMatch = function (line, last, supportsUnicodeFlag) {\n return supportsUnicodeFlag && line.codePointAt(last) > 0xffff ? 2 : 1;\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function () {\n if (exports.isMac) {\n return exports.OS.MAC;\n }\n else if (exports.isLinux) {\n return exports.OS.LINUX;\n }\n else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE =\n (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window[\"opera\"]) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\nexports.isSafari = parseFloat(ua.split(\" Safari/\")[1]) && !exports.isChrome || undefined;\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window[\"MSStream\"];\nif (exports.isIOS)\n exports.isMac = true;\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"./useragent\");\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\nexports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent)\n parent.appendChild(txt);\n return txt;\n }\n if (!Array.isArray(arr)) {\n if (arr && arr.appendChild && parent)\n parent.appendChild(arr);\n return arr;\n }\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n return els;\n }\n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && typeof options == \"object\" && !Array.isArray(options))\n childIndex = 2;\n for (var i = childIndex; i < arr.length; i++)\n buildDom(arr[i], el, refs);\n if (childIndex == 2) {\n Object.keys(options).forEach(function (n) {\n var val = options[n];\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n }\n else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n }\n else if (n === \"ref\") {\n if (refs)\n refs[val] = el;\n }\n else if (n === \"style\") {\n if (typeof val == \"string\")\n el.style.cssText = val;\n }\n else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\nexports.getDocumentHead = function (doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\nexports.createElement = function (tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\nexports.removeChildren = function (element) {\n element.innerHTML = \"\";\n};\nexports.createTextNode = function (textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\nexports.createFragment = function (element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\nexports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\nexports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n }\n else {\n exports.removeCssClass(node, className);\n }\n};\nexports.hasCssString = function (id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n if ((sheets = doc.querySelectorAll(\"style\"))) {\n while (index < sheets.length) {\n if (sheets[index++].id === id) {\n return true;\n }\n }\n }\n};\nexports.removeElementById = function (id, doc) {\n doc = doc || document;\n if (doc.getElementById(id)) {\n doc.getElementById(id).remove();\n }\n};\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function (value) {\n strictCSP = value;\n if (value == false)\n insertPendingStyles();\n else if (!cssCache)\n cssCache = [];\n};\nfunction insertPendingStyles() {\n var cache = cssCache;\n cssCache = null;\n cache && cache.forEach(function (item) {\n importCssString(item[0], item[1]);\n });\n}\nfunction importCssString(cssText, id, target) {\n if (typeof document == \"undefined\")\n return;\n if (cssCache) {\n if (target) {\n insertPendingStyles();\n }\n else if (target === false) {\n return cssCache.push([cssText, id]);\n }\n }\n if (strictCSP)\n return;\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n }\n else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\nexports.importCssStylsheet = function (uri, doc) {\n exports.buildDom([\"link\", { rel: \"stylesheet\", href: uri }], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function (doc) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n outer.appendChild(inner);\n var body = (doc && doc.documentElement) || (document && document.documentElement);\n if (!body)\n return 0;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n if (noScrollbar === withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n body.removeChild(outer);\n return noScrollbar - withScrollbar;\n};\nexports.computedStyle = function (element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\nexports.setStyle = function (styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n};\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n : true;\nif (useragent.isChromeOS)\n exports.HI_DPI = false;\nif (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined)\n exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n exports.HAS_CSS_ANIMATION = true;\n div = null;\n}\nif (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function (element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n };\n}\nelse {\n exports.translate = function (element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n}\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\"use strict\";\nvar dom = require(\"./dom\");\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\nexports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n s.src = path;\n head.appendChild(s);\n s.onload = s.onreadystatechange = function (_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\nexports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\nexports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n if (typeof e != \"object\" || !e)\n e = {};\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n break;\n }\n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n };\nEventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++)\n listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n var _self = this;\n this.on(eventName, function newCallback() {\n _self.off(eventName, newCallback);\n callback.apply(null, arguments);\n });\n if (!callback) {\n return new Promise(function (resolve) {\n callback = resolve;\n });\n }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n handlers = this._defaultHandlers = { _disabled_: {} };\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled)\n handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n return;\n var disabled = handlers._disabled_[eventName];\n if (handlers[eventName] == callback) {\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n }\n else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\nEventEmitter.on =\n EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\nEventEmitter.off =\n EventEmitter.removeListener =\n EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n };\nEventEmitter.removeAllListeners = function (eventName) {\n if (!eventName)\n this._eventRegistry = this._defaultHandlers = undefined;\n if (this._eventRegistry)\n this._eventRegistry[eventName] = undefined;\n if (this._defaultHandlers)\n this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/report_error\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.reportError = function reportError(msg, data) {\n var e = new Error(msg);\n e[\"data\"] = data;\n if (typeof console == \"object\" && console.error)\n console.error(e);\n setTimeout(function () { throw e; });\n};\n\n});\n\nace.define(\"ace/lib/default_english_messages\",[\"require\",\"exports\",\"module\"], function(require, exports, module){var defaultEnglishMessages = {\n \"autocomplete.popup.aria-roledescription\": \"Autocomplete suggestions\",\n \"autocomplete.popup.aria-label\": \"Autocomplete suggestions\",\n \"autocomplete.popup.item.aria-roledescription\": \"item\",\n \"autocomplete.loading\": \"Loading...\",\n \"editor.scroller.aria-roledescription\": \"editor\",\n \"editor.scroller.aria-label\": \"Editor content, press Enter to start editing, press Escape to exit\",\n \"editor.gutter.aria-roledescription\": \"editor\",\n \"editor.gutter.aria-label\": \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\",\n \"error-marker.good-state\": \"Looks good!\",\n \"prompt.recently-used\": \"Recently used\",\n \"prompt.other-commands\": \"Other commands\",\n \"prompt.no-matching-commands\": \"No matching commands\",\n \"search-box.find.placeholder\": \"Search for\",\n \"search-box.find-all.text\": \"All\",\n \"search-box.replace.placeholder\": \"Replace with\",\n \"search-box.replace-next.text\": \"Replace\",\n \"search-box.replace-all.text\": \"All\",\n \"search-box.toggle-replace.title\": \"Toggle Replace mode\",\n \"search-box.toggle-regexp.title\": \"RegExp Search\",\n \"search-box.toggle-case.title\": \"CaseSensitive Search\",\n \"search-box.toggle-whole-word.title\": \"Whole Word Search\",\n \"search-box.toggle-in-selection.title\": \"Search In Selection\",\n \"search-box.search-counter\": \"$0 of $1\",\n \"text-input.aria-roledescription\": \"editor\",\n \"text-input.aria-label\": \"Cursor at row $0\",\n \"gutter.code-folding.range.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.closed.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.open.aria-label\": \"Toggle code folding, row $0\",\n \"gutter.code-folding.closed.title\": \"Unfold code\",\n \"gutter.code-folding.open.title\": \"Fold code\",\n \"gutter.annotation.aria-label.error\": \"Error, read annotations row $0\",\n \"gutter.annotation.aria-label.warning\": \"Warning, read annotations row $0\",\n \"gutter.annotation.aria-label.info\": \"Info, read annotations row $0\",\n \"inline-fold.closed.title\": \"Unfold code\",\n \"gutter-tooltip.aria-label.error.singular\": \"error\",\n \"gutter-tooltip.aria-label.error.plural\": \"errors\",\n \"gutter-tooltip.aria-label.warning.singular\": \"warning\",\n \"gutter-tooltip.aria-label.warning.plural\": \"warnings\",\n \"gutter-tooltip.aria-label.info.singular\": \"information message\",\n \"gutter-tooltip.aria-label.info.plural\": \"information messages\",\n \"gutter.annotation.aria-label.security\": \"Security finding, read annotations row $0\",\n \"gutter.annotation.aria-label.hint\": \"Suggestion, read annotations row $0\",\n \"gutter-tooltip.aria-label.security.singular\": \"security finding\",\n \"gutter-tooltip.aria-label.security.plural\": \"security findings\",\n \"gutter-tooltip.aria-label.hint.singular\": \"suggestion\",\n \"gutter-tooltip.aria-label.hint.plural\": \"suggestions\"\n};\nexports.defaultEnglishMessages = defaultEnglishMessages;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/report_error\",\"ace/lib/default_english_messages\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar reportError = require(\"./report_error\").reportError;\nvar defaultEnglishMessages = require(\"./default_english_messages\").defaultEnglishMessages;\nvar optionsProvider = {\n setOptions: function (optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function (optionNames) {\n var result = {};\n if (!optionNames) {\n var options = this.$options;\n optionNames = Object.keys(options).filter(function (key) {\n return !options[key].hidden;\n });\n }\n else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function (name, value) {\n if (this[\"$\" + name] === value)\n return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet)\n this[\"$\" + name] = value;\n if (opt && opt.set)\n opt.set.call(this, value);\n },\n getOption: function (name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n};\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\nvar messages;\nvar nlsPlaceholders;\nvar AppConfig = /** @class */ (function () {\n function AppConfig() {\n this.$defaultOptions = {};\n messages = defaultEnglishMessages;\n nlsPlaceholders = \"dollarSigns\";\n }\n AppConfig.prototype.defineOptions = function (obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = { forwardTo: opt };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt)\n obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n AppConfig.prototype.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt)\n obj.setOption(key, opt.value);\n });\n };\n AppConfig.prototype.setDefaultValue = function (path, name, value) {\n if (!path) {\n for (path in this.$defaultOptions)\n if (this.$defaultOptions[path][name])\n break;\n if (!this.$defaultOptions[path][name])\n return false;\n }\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n this.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n };\n AppConfig.prototype.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n AppConfig.prototype.setMessages = function (value, options) {\n messages = value;\n if (options && options.placeholders) {\n nlsPlaceholders = options.placeholders;\n }\n };\n AppConfig.prototype.nls = function (key, defaultString, params) {\n if (!messages[key]) {\n warn(\"No message found for the key '\" + key + \"' in the provided messages, trying to find a translation for the default string '\" + defaultString + \"'.\");\n if (!messages[defaultString]) {\n warn(\"No message found for the default string '\" + defaultString + \"' in the provided messages. Falling back to the default English message.\");\n }\n }\n var translated = messages[key] || messages[defaultString] || defaultString;\n if (params) {\n if (nlsPlaceholders === \"dollarSigns\") {\n translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, dollarMatch) {\n if (dollarMatch == \"$\")\n return \"$\";\n return params[dollarMatch];\n });\n }\n if (nlsPlaceholders === \"curlyBrackets\") {\n translated = translated.replace(/\\{([^\\}]+)\\}/g, function (_, curlyBracketMatch) {\n return params[curlyBracketMatch];\n });\n }\n }\n return translated;\n };\n return AppConfig;\n}());\nAppConfig.prototype.warn = warn;\nAppConfig.prototype.reportError = reportError;\noop.implement(AppConfig.prototype, EventEmitter);\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/theme/textmate-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tm .ace_gutter {\\n background: #f0f0f0;\\n color: #333;\\n}\\n\\n.ace-tm .ace_print-margin {\\n width: 1px;\\n background: #e8e8e8;\\n}\\n\\n.ace-tm .ace_fold {\\n background-color: #6B72E6;\\n}\\n\\n.ace-tm {\\n background-color: #FFFFFF;\\n color: black;\\n}\\n\\n.ace-tm .ace_cursor {\\n color: black;\\n}\\n \\n.ace-tm .ace_invisible {\\n color: rgb(191, 191, 191);\\n}\\n\\n.ace-tm .ace_storage,\\n.ace-tm .ace_keyword {\\n color: blue;\\n}\\n\\n.ace-tm .ace_constant {\\n color: rgb(197, 6, 11);\\n}\\n\\n.ace-tm .ace_constant.ace_buildin {\\n color: rgb(88, 72, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_language {\\n color: rgb(88, 92, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_library {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_invalid {\\n background-color: rgba(255, 0, 0, 0.1);\\n color: red;\\n}\\n\\n.ace-tm .ace_support.ace_function {\\n color: rgb(60, 76, 114);\\n}\\n\\n.ace-tm .ace_support.ace_constant {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_support.ace_type,\\n.ace-tm .ace_support.ace_class {\\n color: rgb(109, 121, 222);\\n}\\n\\n.ace-tm .ace_keyword.ace_operator {\\n color: rgb(104, 118, 135);\\n}\\n\\n.ace-tm .ace_string {\\n color: rgb(3, 106, 7);\\n}\\n\\n.ace-tm .ace_comment {\\n color: rgb(76, 136, 107);\\n}\\n\\n.ace-tm .ace_comment.ace_doc {\\n color: rgb(0, 102, 255);\\n}\\n\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\n color: rgb(128, 159, 191);\\n}\\n\\n.ace-tm .ace_constant.ace_numeric {\\n color: rgb(0, 0, 205);\\n}\\n\\n.ace-tm .ace_variable {\\n color: rgb(49, 132, 149);\\n}\\n\\n.ace-tm .ace_xml-pe {\\n color: rgb(104, 104, 91);\\n}\\n\\n.ace-tm .ace_entity.ace_name.ace_function {\\n color: #0000A2;\\n}\\n\\n\\n.ace-tm .ace_heading {\\n color: rgb(12, 7, 255);\\n}\\n\\n.ace-tm .ace_list {\\n color:rgb(185, 6, 144);\\n}\\n\\n.ace-tm .ace_meta.ace_tag {\\n color:rgb(0, 22, 142);\\n}\\n\\n.ace-tm .ace_string.ace_regex {\\n color: rgb(255, 0, 0)\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selection {\\n background: rgb(181, 213, 255);\\n}\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px white;\\n}\\n.ace-tm .ace_marker-layer .ace_step {\\n background: rgb(252, 255, 0);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_stack {\\n background: rgb(164, 229, 101);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_active-line {\\n background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-tm .ace_gutter-active-line {\\n background-color : #dcdcdc;\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selected-word {\\n background: rgb(250, 250, 255);\\n border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-tm .ace_indent-guide {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-tm .ace_indent-guide-active {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\",\"ace/theme/textmate\"], function(require, exports, module){\"no use strict\";\nvar lang = require(\"./lib/lang\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\nmodule.exports = exports = new AppConfig();\nvar options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {},\n loadWorkerFromBlob: true,\n sharedPopups: false,\n useStrictCSP: null\n};\nexports.get = function (key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n return options[key];\n};\nexports.set = function (key, value) {\n if (options.hasOwnProperty(key))\n options[key] = value;\n else if (this.setDefaultValue(\"\", key, value) == false)\n throw new Error(\"Unknown config key: \" + key);\n if (key == \"useStrictCSP\")\n dom.useStrictCSP(value);\n};\nexports.all = function () {\n return lang.copyObject(options);\n};\nexports.$modes = {};\nexports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n }\n else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\nexports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n};\nvar loader = function (moduleName, cb) {\n if (moduleName === \"ace/theme/textmate\" || moduleName === \"./theme/textmate\")\n return cb(null, require(\"./theme/textmate\"));\n if (customLoader)\n return customLoader(moduleName, cb);\n console.error(\"loader is not configured\");\n};\nvar customLoader;\nexports.setLoader = function (cb) {\n customLoader = cb;\n};\nexports.dynamicModules = Object.create(null);\nexports.$loading = {};\nexports.$loaded = {};\nexports.loadModule = function (moduleId, onLoad) {\n var loadedModule;\n if (Array.isArray(moduleId)) {\n var moduleType = moduleId[0];\n var moduleName = moduleId[1];\n }\n else if (typeof moduleId == \"string\") {\n var moduleName = moduleId;\n }\n var load = function (module) {\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1)\n return;\n var afterLoad = function () {\n loader(moduleName, function (err, module) {\n if (module)\n exports.$loaded[moduleName] = module;\n exports._emit(\"load.module\", { name: moduleName, module: module });\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function (onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n };\n if (exports.dynamicModules[moduleName]) {\n exports.dynamicModules[moduleName]().then(function (module) {\n if (module.default) {\n load(module.default);\n }\n else {\n load(module);\n }\n });\n }\n else {\n try {\n loadedModule = this.$require(moduleName);\n }\n catch (e) { }\n load(loadedModule || exports.$loaded[moduleName]);\n }\n};\nexports.$require = function (moduleName) {\n if (typeof module[\"require\"] == \"function\") {\n var req = \"require\";\n return module[req](moduleName);\n }\n};\nexports.setModuleLoader = function (moduleName, onLoad) {\n exports.dynamicModules[moduleName] = onLoad;\n};\nvar reportErrorIfPathIsNotConfigured = function () {\n if (!options.basePath && !options.workerPath\n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length) {\n console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n reportErrorIfPathIsNotConfigured = function () { };\n }\n};\nexports.version = \"1.36.4\";\n\n});\n\nace.define(\"ace/loader_build\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\nvar config = require(\"./config\");\nconfig.setLoader(function(moduleName, cb) {\n require([moduleName], function(module) {\n cb(null, module);\n });\n});\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\nmodule.exports = function(ace) {\n config.init = init;\n config.$require = require;\n ace.require = require;\n\n if (typeof define === \"function\")\n ace.define = define;\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && define.packaged));\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n if (currentScript && currentScript.src) {\n scriptUrl = currentScript.src.split(/[?#]/)[0].split(\"/\").slice(0, -1).join(\"/\") || \"\";\n }\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i<scripts.length; i++) {\n var script = scripts[i];\n\n var src = script.src || script.getAttribute(\"src\");\n if (!src)\n continue;\n\n var attributes = script.attributes;\n for (var j=0, l=attributes.length; j < l; j++) {\n var attr = attributes[j];\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace([\\-.]\\w+)?\\.js(\\?|$)/);\n if (m)\n scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions)\n if (typeof scriptOptions[key] !== \"undefined\")\n config.set(key, scriptOptions[key]);\n}\n\nfunction deHyphenate(str) {\n return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Range = /** @class */ (function () {\n function Range(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n this.end = {\n row: endRow,\n column: endColumn\n };\n }\n Range.prototype.isEqual = function (range) {\n return this.start.row === range.start.row &&\n this.end.row === range.end.row &&\n this.start.column === range.start.column &&\n this.end.column === range.end.column;\n };\n Range.prototype.toString = function () {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n Range.prototype.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n Range.prototype.compareRange = function (range) {\n var cmp, end = range.end, start = range.start;\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n }\n else if (cmp == 0) {\n return 1;\n }\n else {\n return 0;\n }\n }\n else if (cmp == -1) {\n return -2;\n }\n else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n }\n else if (cmp == 1) {\n return 42;\n }\n else {\n return 0;\n }\n }\n };\n Range.prototype.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n Range.prototype.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n Range.prototype.intersects = function (range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n Range.prototype.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n Range.prototype.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\n Range.prototype.setStart = function (row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n }\n else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n Range.prototype.setEnd = function (row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n }\n else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n Range.prototype.inside = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideStart = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideEnd = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.compare = function (row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n if (row < this.start.row)\n return -1;\n if (row > this.end.row)\n return 1;\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n return 0;\n };\n Range.prototype.compareStart = function (row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareEnd = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareInside = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.clipRows = function (firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = { row: lastRow + 1, column: 0 };\n else if (this.end.row < firstRow)\n var end = { row: firstRow, column: 0 };\n if (this.start.row > lastRow)\n var start = { row: lastRow + 1, column: 0 };\n else if (this.start.row < firstRow)\n var start = { row: firstRow, column: 0 };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.extend = function (row, column) {\n var cmp = this.compare(row, column);\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = { row: row, column: column };\n else\n var end = { row: row, column: column };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.isEmpty = function () {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n Range.prototype.isMultiLine = function () {\n return (this.start.row !== this.end.row);\n };\n Range.prototype.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n Range.prototype.collapseRows = function () {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n Range.prototype.toScreenRange = function (session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n };\n Range.prototype.moveBy = function (row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n return Range;\n}());\nRange.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n },\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\": 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8,\n \"control\": 1\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n '-13': \"NumpadEnter\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n};\nvar codeToKeyCode = {\n Command: 224,\n Backspace: 8,\n Tab: 9,\n Return: 13,\n Enter: 13,\n Pause: 19,\n Escape: 27,\n PageUp: 33,\n PageDown: 34,\n End: 35,\n Home: 36,\n Insert: 45,\n Delete: 46,\n ArrowLeft: 37,\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n Backquote: 192,\n Minus: 189,\n Equal: 187,\n BracketLeft: 219,\n Backslash: 220,\n BracketRight: 221,\n Semicolon: 186,\n Quote: 222,\n Comma: 188,\n Period: 190,\n Slash: 191,\n Space: 32,\n NumpadAdd: 107,\n NumpadDecimal: 110,\n NumpadSubtract: 109,\n NumpadDivide: 111,\n NumpadMultiply: 106\n};\nfor (var i = 0; i < 10; i++) {\n codeToKeyCode[\"Digit\" + i] = 48 + i;\n codeToKeyCode[\"Numpad\" + i] = 96 + i;\n Keys.PRINTABLE_KEYS[48 + i] = \"\" + i;\n Keys.FUNCTION_KEYS[96 + i] = \"Numpad\" + i;\n}\nfor (var i = 65; i < 91; i++) {\n var chr = String.fromCharCode(i + 32);\n codeToKeyCode[\"Key\" + chr.toUpperCase()] = i;\n Keys.PRINTABLE_KEYS[i] = chr;\n}\nfor (var i = 1; i < 13; i++) {\n codeToKeyCode[\"F\" + i] = 111 + i;\n Keys.FUNCTION_KEYS[111 + i] = \"F\" + i;\n}\nvar modifiers = {\n Shift: 16,\n Control: 17,\n Alt: 18,\n Meta: 224\n};\nfor (var mod in modifiers) {\n codeToKeyCode[mod] = codeToKeyCode[mod + \"Left\"]\n = codeToKeyCode[mod + \"Right\"] = modifiers[mod];\n}\nexports.$codeToKeyCode = codeToKeyCode;\nKeys.PRINTABLE_KEYS[173] = '-';\nfor (var j in Keys.FUNCTION_KEYS) {\n var name = Keys.FUNCTION_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\nfor (var j in Keys.PRINTABLE_KEYS) {\n var name = Keys.PRINTABLE_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\noop.mixin(Keys, Keys.MODIFIER_KEYS);\noop.mixin(Keys, Keys.PRINTABLE_KEYS);\noop.mixin(Keys, Keys.FUNCTION_KEYS);\nKeys.enter = Keys[\"return\"];\nKeys.escape = Keys.esc;\nKeys.del = Keys[\"delete\"];\n(function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) {\n Keys.KEY_MODS[i] = mods.filter(function (x) {\n return i & Keys.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n})();\nKeys.KEY_MODS[0] = \"\";\nKeys.KEY_MODS[-1] = \"input-\";\noop.mixin(exports, Keys);\nexports.default = exports;\nexports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\"; var keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\nvar pressedKeys = null;\nvar ts = 0;\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n activeListenerOptions = false;\n try {\n document.createComment(\"\").addEventListener(\"test\", function () { }, {\n get passive() {\n activeListenerOptions = { passive: false };\n return true;\n }\n });\n }\n catch (e) { }\n}\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\nfunction EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n}\nEventListener.prototype.destroy = function () {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n};\nvar addListener = exports.addListener = function (elem, type, callback, /**@type{any?}*/ destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer)\n destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\nvar removeListener = exports.removeListener = function (elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\nexports.stopPropagation = function (e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\nexports.preventDefault = function (e) {\n if (e.preventDefault)\n e.preventDefault();\n};\nexports.getButton = function (e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n return e.button;\n};\nexports.capture = function (el, eventHandler, releaseCaptureHandler) {\n var ownerDocument = el && el.ownerDocument || document;\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n return onMouseUp;\n};\nexports.addMouseWheelListener = function (el, callback, destroyer) {\n addListener(el, \"wheel\", function (e) {\n var factor = 0.15;\n var deltaX = e.deltaX || 0;\n var deltaY = e.deltaY || 0;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = deltaX * factor;\n e.wheelY = deltaY * factor;\n break;\n case e.DOM_DELTA_LINE:\n var linePixels = 15;\n e.wheelX = deltaX * linePixels;\n e.wheelY = deltaY * linePixels;\n break;\n case e.DOM_DELTA_PAGE:\n var pagePixels = 150;\n e.wheelX = deltaX * pagePixels;\n e.wheelY = deltaY * pagePixels;\n break;\n }\n callback(e);\n }, destroyer);\n};\nexports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n }\n else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n }\n else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function (el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n};\nfunction getModifierHash(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n}\nexports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n if (!keyCode && e.code) {\n keyCode = keys.$codeToKeyCode[e.code] || keyCode;\n }\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = e.location;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n }\n else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (!hashId && keyCode === 13) {\n if (e.location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n return callback(e, hashId, keyCode);\n}\nexports.addCommandKeyListener = function (el, callback, destroyer) {\n var lastDefaultPrevented = null;\n addListener(el, \"keydown\", function (e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n }, destroyer);\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function (callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + (postMessageId++);\n var listener = function (e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\nexports.$idleBlocked = false;\nexports.onIdle = function (cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n }\n else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\nexports.$idleBlockId = null;\nexports.blockIdle = function (delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function () {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window[\"mozRequestAnimationFrame\"]\n || window[\"webkitRequestAnimationFrame\"]\n || window[\"msRequestAnimationFrame\"]\n || window[\"oRequestAnimationFrame\"]);\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar $cancelT;\nmodule.exports = {\n lineMode: false,\n pasteCancelled: function () {\n if ($cancelT && $cancelT > Date.now() - 50)\n return true;\n return $cancelT = false;\n },\n cancel: function () {\n $cancelT = Date.now();\n }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/config\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar nls = require(\"../config\").nls;\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\nvar TextInput;\nTextInput = function (parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", \"false\");\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var sendingText = false;\n var tempStyle = '';\n if (!isMobile)\n text.style.fontSize = \"1px\";\n var commandMode = false;\n var ignoreFocusEvents = false;\n var lastValue = \"\";\n var lastSelectionStart = 0;\n var lastSelectionEnd = 0;\n var lastRestoreEnd = 0;\n var rowStart = Number.MAX_SAFE_INTEGER;\n var rowEnd = Number.MIN_SAFE_INTEGER;\n var numberOfExtraLines = 0;\n try {\n var isFocused = document.activeElement === text;\n }\n catch (e) { }\n this.setNumberOfExtraLines = function (number) {\n rowStart = Number.MAX_SAFE_INTEGER;\n rowEnd = Number.MIN_SAFE_INTEGER;\n if (number < 0) {\n numberOfExtraLines = 0;\n return;\n }\n numberOfExtraLines = number;\n };\n this.setAriaLabel = function () {\n var ariaLabel = \"\";\n if (host.$textInputAriaLabel) {\n ariaLabel += \"\".concat(host.$textInputAriaLabel, \", \");\n }\n if (host.session) {\n var row = host.session.selection.cursor.row;\n ariaLabel += nls(\"text-input.aria-label\", \"Cursor at row $0\", [row + 1]);\n }\n text.setAttribute(\"aria-label\", ariaLabel);\n };\n this.setAriaOptions = function (options) {\n if (options.activeDescendant) {\n text.setAttribute(\"aria-haspopup\", \"true\");\n text.setAttribute(\"aria-autocomplete\", options.inline ? \"both\" : \"list\");\n text.setAttribute(\"aria-activedescendant\", options.activeDescendant);\n }\n else {\n text.setAttribute(\"aria-haspopup\", \"false\");\n text.setAttribute(\"aria-autocomplete\", \"both\");\n text.removeAttribute(\"aria-activedescendant\");\n }\n if (options.role) {\n text.setAttribute(\"role\", options.role);\n }\n if (options.setLabel) {\n text.setAttribute(\"aria-roledescription\", nls(\"text-input.aria-roledescription\", \"editor\"));\n this.setAriaLabel();\n }\n };\n this.setAriaOptions({ role: \"textbox\" });\n event.addListener(text, \"blur\", function (e) {\n if (ignoreFocusEvents)\n return;\n host.onBlur(e);\n isFocused = false;\n }, host);\n event.addListener(text, \"focus\", function (e) {\n if (ignoreFocusEvents)\n return;\n isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\n }\n catch (e) { }\n }\n host.onFocus(e);\n if (useragent.isEdge)\n setTimeout(resetSelection);\n else\n resetSelection();\n }, host);\n this.$focusScroll = false;\n this.focus = function () {\n this.setAriaOptions({\n setLabel: host.renderer.enableKeyboardAccessibility\n });\n if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return text.focus({ preventScroll: true });\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n try {\n var isTransformed = text.getBoundingClientRect().top != 0;\n }\n catch (e) {\n return;\n }\n var ancestors = [];\n if (isTransformed) {\n var t = text.parentElement;\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", \"true\");\n if (!t.parentElement && t.getRootNode)\n t = t.getRootNode()[\"host\"];\n else\n t = t.parentElement;\n }\n }\n text.focus({ preventScroll: true });\n if (isTransformed) {\n ancestors.forEach(function (p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n setTimeout(function () {\n text.style.position = \"\";\n if (text.style.top == \"0px\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function () {\n text.blur();\n };\n this.isFocused = function () {\n return isFocused;\n };\n host.on(\"beforeEndOperation\", function () {\n var curOp = host.curOp;\n var commandName = curOp && curOp.command && curOp.command.name;\n if (commandName == \"insertstring\")\n return;\n var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n if (inComposition && isUserAction) {\n lastValue = text.value = \"\";\n onCompositionEnd();\n }\n resetSelection();\n });\n host.on(\"changeSelection\", this.setAriaLabel);\n var positionToSelection = function (row, column) {\n var selection = column;\n for (var i = 1; i <= row - rowStart && i < 2 * numberOfExtraLines + 1; i++) {\n selection += host.session.getLine(row - i).length + 1;\n }\n return selection;\n };\n var resetSelection = isIOS\n ? function (value) {\n if (!isFocused || (copied && !value) || sendingText)\n return;\n if (!value)\n value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != text.value)\n text.value = lastValue = newValue;\n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n text.setSelectionRange(selectionStart, selectionEnd);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n : function () {\n if (inComposition || sendingText)\n return;\n if (!isFocused && !afterContextMenu)\n return;\n inComposition = true;\n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n if (host.session) {\n var selection = host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n if (row === rowEnd + 1) {\n rowStart = rowEnd + 1;\n rowEnd = rowStart + 2 * numberOfExtraLines;\n }\n else if (row === rowStart - 1) {\n rowEnd = rowStart - 1;\n rowStart = rowEnd - 2 * numberOfExtraLines;\n }\n else if (row < rowStart - 1 || row > rowEnd + 1) {\n rowStart = row > numberOfExtraLines ? row - numberOfExtraLines : 0;\n rowEnd = row > numberOfExtraLines ? row + numberOfExtraLines : 2 * numberOfExtraLines;\n }\n var lines = [];\n for (var i = rowStart; i <= rowEnd; i++) {\n lines.push(host.session.getLine(i));\n }\n line = lines.join('\\n');\n selectionStart = positionToSelection(range.start.row, range.start.column);\n selectionEnd = positionToSelection(range.end.row, range.end.column);\n if (range.start.row < rowStart) {\n var prevLine = host.session.getLine(rowStart - 1);\n selectionStart = range.start.row < rowStart - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row > rowEnd) {\n var nextLine = host.session.getLine(rowEnd + 1);\n selectionEnd = range.end.row > rowEnd + 1 ? nextLine.length : range.end.column;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n }\n else if (isMobile && row > 0) {\n line = \"\\n\" + line;\n selectionEnd += 1;\n selectionStart += 1;\n }\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n }\n else {\n line = \"\\n\";\n if (selectionStart == selectionEnd) {\n selectionStart = selectionEnd = 0;\n }\n else {\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n }\n var newValue = line + \"\\n\\n\";\n if (newValue != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\n }\n }\n if (afterContextMenu) {\n lastSelectionStart = text.selectionStart;\n lastSelectionEnd = text.selectionEnd;\n }\n if (lastSelectionEnd != selectionEnd\n || lastSelectionStart != selectionStart\n || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n catch (e) { }\n }\n inComposition = false;\n };\n this.resetSelection = resetSelection;\n if (isFocused)\n host.onFocus();\n var isAllSelected = function (text) {\n return text.selectionStart === 0 && text.selectionEnd >= lastValue.length\n && text.value === lastValue && lastValue\n && text.selectionEnd !== lastSelectionEnd;\n };\n var onSelect = function (e) {\n if (inComposition)\n return;\n if (copied) {\n copied = false;\n }\n else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n }\n else if (isMobile && text.selectionStart != lastSelectionStart) {\n resetSelection();\n }\n };\n var inputHandler = null;\n this.setInputHandler = function (cb) { inputHandler = cb; };\n this.getInputHandler = function () { return inputHandler; };\n var afterContextMenu = false;\n var sendText = function (value, fromInput) {\n if (afterContextMenu)\n afterContextMenu = false;\n if (pasted) {\n resetSelection();\n if (value)\n host.onPaste(value);\n pasted = false;\n return \"\";\n }\n else {\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var extendLeft = lastSelectionStart;\n var extendRight = lastValue.length - lastSelectionEnd;\n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n var i = 0;\n while (extendLeft > 0 && lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n inserted = inserted.slice(i);\n i = 1;\n while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1 && lastValue[lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n restoreStart -= i - 1;\n restoreEnd -= i - 1;\n var endIndex = inserted.length - i + 1;\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n }\n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n return \"\";\n sendingText = true;\n var shouldReset = false;\n if (useragent.isAndroid && inserted == \". \") {\n inserted = \" \";\n shouldReset = true;\n }\n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n host.onTextInput(inserted);\n }\n else {\n host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n sendingText = false;\n lastValue = value;\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n lastRestoreEnd = restoreEnd;\n return shouldReset ? \"\\n\" : inserted;\n }\n };\n var onInput = function (e) {\n if (inComposition)\n return onCompositionUpdate();\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\")\n return host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\")\n return host.execCommand(\"redo\");\n }\n var data = text.value;\n var inserted = sendText(data, true);\n if (data.length > MAX_LINE_LENGTH + 100\n || valueResetRegex.test(inserted)\n || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd) {\n resetSelection();\n }\n };\n var handleClipboardData = function (e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window[\"clipboardData\"];\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n }\n else {\n return clipboardData.getData(mime);\n }\n }\n catch (e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n var doCopy = function (e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n if (handleClipboardData(e, data)) {\n if (isIOS) {\n resetSelection(data);\n copied = data;\n setTimeout(function () {\n copied = false;\n }, 10);\n }\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n }\n else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function () {\n copied = false;\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n var onCut = function (e) {\n doCopy(e, true);\n };\n var onCopy = function (e) {\n doCopy(e, false);\n };\n var onPaste = function (e) {\n var data = handleClipboardData(e);\n if (clipboard.pasteCancelled())\n return;\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n event.addCommandKeyListener(text, function (e, hashId, keyCode) {\n if (inComposition)\n return;\n return host.onCommandKey(e, hashId, keyCode);\n }, host);\n event.addListener(text, \"select\", onSelect, host);\n event.addListener(text, \"input\", onInput, host);\n event.addListener(text, \"cut\", onCut, host);\n event.addListener(text, \"copy\", onCopy, host);\n event.addListener(text, \"paste\", onPaste, host);\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function (e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n }, host);\n }\n var onCompositionStart = function (e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly)\n return;\n inComposition = {};\n if (commandMode)\n return;\n if (e.data)\n inComposition.useTextareaForIME = false;\n setTimeout(onCompositionUpdate, 0);\n host._signal(\"compositionStart\");\n host.on(\"mousedown\", cancelComposition);\n var range = host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n inComposition.markerRange = range;\n inComposition.selectionStart = lastSelectionStart;\n host.onCompositionStart(inComposition);\n if (inComposition.useTextareaForIME) {\n lastValue = text.value = \"\";\n lastSelectionStart = 0;\n lastSelectionEnd = 0;\n }\n else {\n if (text.msGetInputContext)\n inComposition.context = text.msGetInputContext();\n if (text.getInputContext)\n inComposition.context = text.getInputContext();\n }\n };\n var onCompositionUpdate = function () {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n if (commandMode)\n return cancelComposition();\n if (inComposition.useTextareaForIME) {\n host.onCompositionUpdate(text.value);\n }\n else {\n var data = text.value;\n sendText(data);\n if (inComposition.markerRange) {\n if (inComposition.context) {\n inComposition.markerRange.start.column = inComposition.selectionStart\n = inComposition.context.compositionStartOffset;\n }\n inComposition.markerRange.end.column = inComposition.markerRange.start.column\n + lastSelectionEnd - inComposition.selectionStart + lastRestoreEnd;\n }\n }\n };\n var onCompositionEnd = function (e) {\n if (!host.onCompositionEnd || host.$readOnly)\n return;\n inComposition = false;\n host.onCompositionEnd();\n host.off(\"mousedown\", cancelComposition);\n if (e)\n onInput();\n };\n function cancelComposition() {\n ignoreFocusEvents = true;\n text.blur();\n text.focus();\n ignoreFocusEvents = false;\n }\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n function onKeyup(e) {\n if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n if (!inComposition)\n lastValue = text.value;\n lastSelectionStart = lastSelectionEnd = -1;\n resetSelection();\n }\n syncComposition();\n }\n event.addListener(text, \"compositionstart\", onCompositionStart, host);\n event.addListener(text, \"compositionupdate\", onCompositionUpdate, host);\n event.addListener(text, \"keyup\", onKeyup, host);\n event.addListener(text, \"keydown\", syncComposition, host);\n event.addListener(text, \"compositionend\", onCompositionEnd, host);\n this.getElement = function () {\n return text;\n };\n this.setCommandMode = function (value) {\n commandMode = value;\n text.readOnly = false;\n };\n this.setReadOnly = function (readOnly) {\n if (!commandMode)\n text.readOnly = readOnly;\n };\n this.setCopyWithEmptySelection = function (value) {\n };\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection();\n host._emit(\"nativecontextmenu\", { target: host, domEvent: e });\n this.moveToMouse(e, true);\n };\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight - 2;\n var move = function (e) {\n dom.translate(text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n };\n move(e);\n if (e.type != \"mousedown\")\n return;\n host.renderer.$isMousePressed = true;\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n host.renderer.$isMousePressed = false;\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$moveTextAreaToCursor();\n }, 0);\n }\n var onContextMenu = function (e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu, host);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu, host);\n event.addListener(text, \"contextmenu\", onContextMenu, host);\n if (isIOS)\n addIosSelectionHandler(parentNode, host, text);\n function addIosSelectionHandler(parentNode, host, text) {\n var typingResetTimeout = null;\n var typing = false;\n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout)\n clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n var detectArrowKeys = function (e) {\n if (document.activeElement !== text)\n return;\n if (typing || inComposition || host.$mouseHandler.isMousePressed)\n return;\n if (copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n }\n else if (selectionStart == 1) {\n key = KEYS.home;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n }\n else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n }\n else if (selectionStart < lastSelectionStart\n || (selectionStart == lastSelectionStart\n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd)) {\n key = KEYS.left;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n }\n else if (selectionEnd > lastSelectionEnd\n || (selectionEnd == lastSelectionEnd\n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd)) {\n key = KEYS.right;\n }\n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command)\n host.execCommand(command);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n resetSelection(\"\");\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n this.destroy = function () {\n if (text.parentElement)\n text.parentElement.removeChild(text);\n };\n};\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"../lib/useragent\");\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\nvar DefaultHandlers = /** @class */ (function () {\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler[\"selectByLines\"] = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler[\"selectByWords\"] = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n DefaultHandlers.prototype.onMouseDown = function (ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent)\n return;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n DefaultHandlers.prototype.select = function () {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n }\n else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.extendSelectionBy = function (unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n }\n else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n }\n else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n };\n DefaultHandlers.prototype.focusWait = function () {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n DefaultHandlers.prototype.onDoubleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n }\n else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n DefaultHandlers.prototype.onTripleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n }\n else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n DefaultHandlers.prototype.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n DefaultHandlers.prototype.onMouseWheel = function (ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n var editor = this.editor;\n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n var direction = Math.abs(vx / vy);\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n if (canScroll) {\n prevScroll.allowed = t;\n }\n else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n return DefaultHandlers;\n}());\nDefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd;\nexports.DefaultHandlers = DefaultHandlers;\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0)\n return { cursor: range.start, anchor: range.end };\n else\n return { cursor: range.end, anchor: range.start };\n}\n\n});\n\nace.define(\"ace/lib/scroll\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) {\n event.stopPropagation();\n var target = event.currentTarget;\n var contentOverflows = target.scrollHeight > target.clientHeight;\n if (!contentOverflows) {\n event.preventDefault();\n }\n};\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar Range = require(\"./range\").Range;\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar CLASSNAME = \"ace_tooltip\";\nvar Tooltip = /** @class */ (function () {\n function Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n }\n Tooltip.prototype.$init = function () {\n this.$element = dom.createElement(\"div\");\n this.$element.className = CLASSNAME;\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n Tooltip.prototype.getElement = function () {\n return this.$element || this.$init();\n };\n Tooltip.prototype.setText = function (text) {\n this.getElement().textContent = text;\n };\n Tooltip.prototype.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n Tooltip.prototype.setPosition = function (x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n Tooltip.prototype.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n Tooltip.prototype.setTheme = function (theme) {\n this.$element.className = CLASSNAME + \" \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n };\n Tooltip.prototype.show = function (text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n Tooltip.prototype.hide = function (e) {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.getElement().className = CLASSNAME;\n this.isOpen = false;\n }\n };\n Tooltip.prototype.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n Tooltip.prototype.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n Tooltip.prototype.destroy = function () {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n return Tooltip;\n}());\nvar PopupManager = /** @class */ (function () {\n function PopupManager() {\n this.popups = [];\n }\n PopupManager.prototype.addPopup = function (popup) {\n this.popups.push(popup);\n this.updatePopups();\n };\n PopupManager.prototype.removePopup = function (popup) {\n var index = this.popups.indexOf(popup);\n if (index !== -1) {\n this.popups.splice(index, 1);\n this.updatePopups();\n }\n };\n PopupManager.prototype.updatePopups = function () {\n var e_1, _a, e_2, _b;\n this.popups.sort(function (a, b) { return b.priority - a.priority; });\n var visiblepopups = [];\n try {\n for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) {\n var popup = _d.value;\n var shouldDisplay = true;\n try {\n for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) {\n var visiblePopup = visiblepopups_1_1.value;\n if (this.doPopupsOverlap(visiblePopup, popup)) {\n shouldDisplay = false;\n break;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (shouldDisplay) {\n visiblepopups.push(popup);\n }\n else {\n popup.hide();\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) {\n var rectA = popupA.getElement().getBoundingClientRect();\n var rectB = popupB.getElement().getBoundingClientRect();\n return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom\n > rectB.top);\n };\n return PopupManager;\n}());\nvar popupManager = new PopupManager();\nexports.popupManager = popupManager;\nexports.Tooltip = Tooltip;\nvar HoverTooltip = /** @class */ (function (_super) {\n __extends(HoverTooltip, _super);\n function HoverTooltip(parentNode) {\n if (parentNode === void 0) { parentNode = document.body; }\n var _this = _super.call(this, parentNode) || this;\n _this.timeout = undefined;\n _this.lastT = 0;\n _this.idleTime = 350;\n _this.lastEvent = undefined;\n _this.onMouseOut = _this.onMouseOut.bind(_this);\n _this.onMouseMove = _this.onMouseMove.bind(_this);\n _this.waitForHover = _this.waitForHover.bind(_this);\n _this.hide = _this.hide.bind(_this);\n var el = _this.getElement();\n el.style.whiteSpace = \"pre-wrap\";\n el.style.pointerEvents = \"auto\";\n el.addEventListener(\"mouseout\", _this.onMouseOut);\n el.tabIndex = -1;\n el.addEventListener(\"blur\", function () {\n if (!el.contains(document.activeElement))\n this.hide();\n }.bind(_this));\n el.addEventListener(\"wheel\", preventParentScroll);\n return _this;\n }\n HoverTooltip.prototype.addToEditor = function (editor) {\n editor.on(\"mousemove\", this.onMouseMove);\n editor.on(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().addEventListener(\"mouseout\", this.onMouseOut, true);\n };\n HoverTooltip.prototype.removeFromEditor = function (editor) {\n editor.off(\"mousemove\", this.onMouseMove);\n editor.off(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().removeEventListener(\"mouseout\", this.onMouseOut, true);\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n };\n HoverTooltip.prototype.onMouseMove = function (e, editor) {\n this.lastEvent = e;\n this.lastT = Date.now();\n var isMousePressed = editor.$mouseHandler.isMousePressed;\n if (this.isOpen) {\n var pos = this.lastEvent && this.lastEvent.getDocumentPosition();\n if (!this.range\n || !this.range.contains(pos.row, pos.column)\n || isMousePressed\n || this.isOutsideOfText(this.lastEvent)) {\n this.hide();\n }\n }\n if (this.timeout || isMousePressed)\n return;\n this.lastEvent = e;\n this.timeout = setTimeout(this.waitForHover, this.idleTime);\n };\n HoverTooltip.prototype.waitForHover = function () {\n if (this.timeout)\n clearTimeout(this.timeout);\n var dt = Date.now() - this.lastT;\n if (this.idleTime - dt > 10) {\n this.timeout = setTimeout(this.waitForHover, this.idleTime - dt);\n return;\n }\n this.timeout = null;\n if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) {\n this.$gatherData(this.lastEvent, this.lastEvent.editor);\n }\n };\n HoverTooltip.prototype.isOutsideOfText = function (e) {\n var editor = e.editor;\n var docPos = e.getDocumentPosition();\n var line = editor.session.getLine(docPos.row);\n if (docPos.column == line.length) {\n var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY);\n var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column);\n if (clippedPos.column != screenPos.column\n || clippedPos.row != screenPos.row) {\n return true;\n }\n }\n return false;\n };\n HoverTooltip.prototype.setDataProvider = function (value) {\n this.$gatherData = value;\n };\n HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) {\n var MARGIN = 10;\n if (startingEvent && startingEvent != this.lastEvent)\n return;\n if (this.isOpen && document.activeElement == this.getElement())\n return;\n var renderer = editor.renderer;\n if (!this.isOpen) {\n popupManager.addPopup(this);\n this.$registerCloseEvents();\n this.setTheme(renderer.theme);\n }\n this.isOpen = true;\n this.addMarker(range, editor.session);\n this.range = Range.fromPoints(range.start, range.end);\n var position = renderer.textToScreenCoordinates(range.start.row, range.start.column);\n var rect = renderer.scroller.getBoundingClientRect();\n if (position.pageX < rect.left)\n position.pageX = rect.left;\n var element = this.getElement();\n element.innerHTML = \"\";\n element.appendChild(domNode);\n element.style.maxHeight = \"\";\n element.style.display = \"block\";\n var labelHeight = element.clientHeight;\n var labelWidth = element.clientWidth;\n var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight;\n var isAbove = true;\n if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) {\n isAbove = false;\n }\n element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + \"px\";\n element.style.top = isAbove ? \"\" : position.pageY + renderer.lineHeight + \"px\";\n element.style.bottom = isAbove ? window.innerHeight - position.pageY + \"px\" : \"\";\n element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + \"px\";\n };\n HoverTooltip.prototype.addMarker = function (range, session) {\n if (this.marker) {\n this.$markerSession.removeMarker(this.marker);\n }\n this.$markerSession = session;\n this.marker = session && session.addMarker(range, \"ace_highlight-marker\", \"text\");\n };\n HoverTooltip.prototype.hide = function (e) {\n if (!e && document.activeElement == this.getElement())\n return;\n if (e && e.target && (e.type != \"keydown\" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target))\n return;\n this.lastEvent = null;\n if (this.timeout)\n clearTimeout(this.timeout);\n this.timeout = null;\n this.addMarker(null);\n if (this.isOpen) {\n this.$removeCloseEvents();\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n popupManager.removePopup(this);\n }\n };\n HoverTooltip.prototype.$registerCloseEvents = function () {\n window.addEventListener(\"keydown\", this.hide, true);\n window.addEventListener(\"wheel\", this.hide, true);\n window.addEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.$removeCloseEvents = function () {\n window.removeEventListener(\"keydown\", this.hide, true);\n window.removeEventListener(\"wheel\", this.hide, true);\n window.removeEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.onMouseOut = function (e) {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.lastEvent = null;\n if (!this.isOpen)\n return;\n if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n return;\n if (e && e.currentTarget.contains(e.relatedTarget))\n return;\n if (!e.relatedTarget.classList.contains(\"ace_content\"))\n this.hide();\n };\n return HoverTooltip;\n}(Tooltip));\nexports.HoverTooltip = HoverTooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/tooltip\",\"ace/config\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\nvar nls = require(\"../config\").nls;\nvar lang = require(\"../lib/lang\");\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\")\n return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n var tooltipTimeout, mouseEvent;\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n tooltip.showTooltip(row);\n if (!tooltip.isOpen)\n return;\n editor.on(\"mousewheel\", hideTooltip);\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n }\n else {\n var gutterRow = mouseEvent.getGutterRow();\n var gutterCell = gutter.$lines.get(gutterRow);\n if (gutterCell) {\n var gutterElement = gutterCell.element.querySelector(\".ace_gutter_annotation\");\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n else {\n moveTooltip(mouseEvent);\n }\n }\n }\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltip.isOpen) {\n tooltip.hideTooltip();\n editor.off(\"mousewheel\", hideTooltip);\n }\n }\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltip.isOpen || tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n editor.on(\"changeSession\", hideTooltip);\n editor.on(\"input\", hideTooltip);\n}\nexports.GutterHandler = GutterHandler;\nvar GutterTooltip = /** @class */ (function (_super) {\n __extends(GutterTooltip, _super);\n function GutterTooltip(editor) {\n var _this = _super.call(this, editor.container) || this;\n _this.editor = editor;\n return _this;\n }\n GutterTooltip.prototype.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n Object.defineProperty(GutterTooltip, \"annotationLabels\", {\n get: function () {\n return {\n error: {\n singular: nls(\"gutter-tooltip.aria-label.error.singular\", \"error\"),\n plural: nls(\"gutter-tooltip.aria-label.error.plural\", \"errors\")\n },\n security: {\n singular: nls(\"gutter-tooltip.aria-label.security.singular\", \"security finding\"),\n plural: nls(\"gutter-tooltip.aria-label.security.plural\", \"security findings\")\n },\n warning: {\n singular: nls(\"gutter-tooltip.aria-label.warning.singular\", \"warning\"),\n plural: nls(\"gutter-tooltip.aria-label.warning.plural\", \"warnings\")\n },\n info: {\n singular: nls(\"gutter-tooltip.aria-label.info.singular\", \"information message\"),\n plural: nls(\"gutter-tooltip.aria-label.info.plural\", \"information messages\")\n },\n hint: {\n singular: nls(\"gutter-tooltip.aria-label.hint.singular\", \"suggestion\"),\n plural: nls(\"gutter-tooltip.aria-label.hint.plural\", \"suggestions\")\n }\n };\n },\n enumerable: false,\n configurable: true\n });\n GutterTooltip.prototype.showTooltip = function (row) {\n var _a;\n var gutter = this.editor.renderer.$gutterLayer;\n var annotationsInRow = gutter.$annotations[row];\n var annotation;\n if (annotationsInRow)\n annotation = {\n displayText: Array.from(annotationsInRow.displayText),\n type: Array.from(annotationsInRow.type)\n };\n else\n annotation = { displayText: [], type: [] };\n var fold = gutter.session.getFoldLine(row);\n if (fold && gutter.$showFoldedAnnotations) {\n var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] };\n var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 };\n var mostSevereAnnotationTypeInFold;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!gutter.$annotations[i])\n continue;\n for (var j = 0; j < gutter.$annotations[i].text.length; j++) {\n var annotationType = gutter.$annotations[i].type[j];\n annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]);\n if (!mostSevereAnnotationTypeInFold ||\n severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) {\n mostSevereAnnotationTypeInFold = annotationType;\n }\n }\n }\n if ([\"error\", \"security\", \"warning\"].includes(mostSevereAnnotationTypeInFold)) {\n var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n annotation.displayText.push(summaryFoldedAnnotations);\n annotation.type.push(mostSevereAnnotationTypeInFold + \"_fold\");\n }\n }\n if (annotation.displayText.length === 0)\n return this.hide();\n var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] };\n var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n for (var i = 0; i < annotation.displayText.length; i++) {\n var lineElement = dom.createElement(\"span\");\n var iconElement = dom.createElement(\"span\");\n (_a = iconElement.classList).add.apply(_a, [\"ace_\".concat(annotation.type[i]), iconClassName]);\n iconElement.setAttribute(\"aria-label\", \"\".concat(GutterTooltip.annotationLabels[annotation.type[i].replace(\"_fold\", \"\")].singular));\n iconElement.setAttribute(\"role\", \"img\");\n iconElement.appendChild(dom.createTextNode(\" \"));\n lineElement.appendChild(iconElement);\n lineElement.appendChild(dom.createTextNode(annotation.displayText[i]));\n lineElement.appendChild(dom.createElement(\"br\"));\n annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(lineElement);\n }\n var tooltipElement = this.getElement();\n dom.removeChildren(tooltipElement);\n annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); });\n tooltipElement.setAttribute(\"aria-live\", \"polite\");\n if (!this.isOpen) {\n this.setTheme(this.editor.renderer.theme);\n this.setClassName(\"ace_gutter-tooltip\");\n }\n this.show();\n this.editor._signal(\"showGutterTooltip\", this);\n };\n GutterTooltip.prototype.hideTooltip = function () {\n this.$element.removeAttribute(\"aria-live\");\n this.hide();\n this.editor._signal(\"hideGutterTooltip\", this);\n };\n GutterTooltip.annotationsToSummaryString = function (annotations) {\n var e_1, _a;\n var summary = [];\n var annotationTypes = [\"error\", \"security\", \"warning\", \"info\", \"hint\"];\n try {\n for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) {\n var annotationType = annotationTypes_1_1.value;\n if (!annotations[annotationType].length)\n continue;\n var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural;\n summary.push(\"\".concat(annotations[annotationType].length, \" \").concat(label));\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return summary.join(\", \");\n };\n return GutterTooltip;\n}(Tooltip));\nexports.GutterTooltip = GutterTooltip;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = /** @class */ (function () {\n function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY;\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n }\n MouseEvent.prototype.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n MouseEvent.prototype.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n MouseEvent.prototype.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n MouseEvent.prototype.getDocumentPosition = function () {\n if (this.$pos)\n return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n MouseEvent.prototype.getGutterRow = function () {\n var documentRow = this.getDocumentPosition().row;\n var screenRow = this.editor.session.documentToScreenRow(documentRow, 0);\n var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0);\n return screenRow - screenTopRow;\n };\n MouseEvent.prototype.inSelection = function () {\n if (this.$inSelection !== null)\n return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n MouseEvent.prototype.getButton = function () {\n return event.getButton(this.domEvent);\n };\n MouseEvent.prototype.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n MouseEvent.prototype.getAccelKey = function () {\n return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey;\n };\n return MouseEvent;\n}());\nexports.MouseEvent = MouseEvent;\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function () {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragLeave = function (e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n this.onDrop = function (e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n }\n else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n }\n else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = { x: x, y: y };\n }\n else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n }\n else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = { row: cursor.row, column: cursor.column };\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n }\n else {\n autoScrollStartTime = null;\n }\n }\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n }\n catch (e) { }\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n return dropEffect;\n }\n}\n(function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n }\n else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function () {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n !selected && canExecuteCommand(\"selectall\") && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && canExecuteCommand(\"copy\") && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && canExecuteCommand(\"cut\") && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && canExecuteCommand(\"paste\") && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && canExecuteCommand(\"undo\") && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n canExecuteCommand(\"find\") && [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n canExecuteCommand(\"openCommandPalette\") && [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\n };\n var canExecuteCommand = function (/** @type {string} */ cmd) {\n return editor.commands.canExecute(cmd, editor);\n };\n var handleClick = function (e) {\n var action = e.target.getAttribute(\"action\");\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPalette\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function (e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function (e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!editor.getOption(\"enableMobileMenu\")) {\n if (contextMenu) {\n hideContextMenu();\n }\n return;\n }\n if (!contextMenu)\n createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n }\n else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n }\n else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function (e) {\n if (!pressed)\n return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n }\n else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n var weightedDistance = function (x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer)\n clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n }\n else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n }\n else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n }\n else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\")\n return;\n var touchObj = touches[0];\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function () {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01)\n vX = 0;\n if (Math.abs(vY) < 0.01)\n vY = 0;\n if (animationSteps < 20)\n vX = 0.9 * vX;\n if (animationSteps < 20)\n vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = /** @class */ (function () {\n function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout;\n var _self = this;\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n var focusEditor = function (e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n setTimeout(function () {\n if (!editor.isFocused())\n editor.focus();\n });\n };\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n addTouchListeners(editor.container, editor);\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n }\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n }\n else {\n renderer.setCursorStyle(\"\");\n }\n }, //@ts-expect-error TODO: seems mistyping - should be boolean\n editor);\n }\n MouseHandler.prototype.onMouseEvent = function (name, e) {\n if (!this.editor.session)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n MouseHandler.prototype.setState = function (state) {\n this.state = state;\n };\n MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n var self = this;\n var onMouseMove = function (e) {\n if (!e)\n return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n var onCaptureEnd = function (e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n clearInterval(timerId);\n if (editor.session)\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n var onCaptureInterval = function () {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () { onCaptureEnd(ev); });\n }\n var onOperationEnd = function (e) {\n if (!self.releaseMouse)\n return;\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({ command: { name: \"mouse\" } });\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n MouseHandler.prototype.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n MouseHandler.prototype.destroy = function () {\n if (this.releaseMouse)\n this.releaseMouse();\n };\n return MouseHandler;\n}());\nMouseHandler.prototype.releaseMouse = null;\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: { initialValue: 2 },\n dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n dragEnabled: { initialValue: true },\n focusTimeout: { initialValue: 0 },\n tooltipFollowsMouse: { initialValue: true }\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar FoldHandler = /** @class */ (function () {\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n e.stop();\n }\n var target = e.domEvent && e.domEvent.target;\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n if (fold) {\n session.removeFold(fold);\n }\n else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n }\n }\n e.stop();\n }\n });\n }\n return FoldHandler;\n}());\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = /** @class */ (function () {\n function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = { editor: editor };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n }\n KeyBinding.prototype.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n KeyBinding.prototype.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n this.addKeyboardHandler(kb, 1);\n };\n KeyBinding.prototype.addKeyboardHandler = function (kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n KeyBinding.prototype.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n KeyBinding.prototype.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n KeyBinding.prototype.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n }\n else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 &&\n toExecute[\"passEvent\"] != true && toExecute.command[\"passEvent\"] != true) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n if (!success && hashId == -1) {\n toExecute = { command: \"insertstring\" };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n KeyBinding.prototype.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n return KeyBinding;\n}());\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n }\n else {\n condPos = -1;\n }\n }\n cond = impTab[newState][6];\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n }\n else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n hiLevel |= newLevel;\n }\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n }\n else {\n break;\n }\n }\n }\n }\n }\n}\nfunction _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n return;\n }\n var len = _array.length, start = 0, end, lo, hi, tmp;\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n while (end < len && levels[end] >= lev) {\n end++;\n }\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n start = end;\n }\n start++;\n }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n var cType = types[ix], wType, nType, len, i;\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n case ON:\n case AN:\n return cType;\n case EN:\n return lastArabic ? AN : EN;\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n case WS:\n return ON;\n case CS:\n if (ix < 1 || (ix + 1) >= types.length ||\n ((wType = classes[ix - 1]) != EN && wType != AN) ||\n ((nType = types[ix + 1]) != EN && nType != AN)) {\n return ON;\n }\n if (lastArabic) {\n nType = AN;\n }\n return nType == wType ? nType : ON;\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n return EN;\n }\n return ON;\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n if (lastArabic) {\n return ON;\n }\n i = ix + 1;\n len = types.length;\n while (i < len && types[i] == ET) {\n i++;\n }\n if (i < len && types[i] == EN) {\n return EN;\n }\n return ON;\n case NSM:\n len = types.length;\n i = ix + 1;\n while (i < len && types[i] == NSM) {\n i++;\n }\n if (i < len) {\n var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n wType = types[i];\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n return classes[ix - 1];\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n case S:\n hasUBAT_S = true;\n return ON;\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n case BN:\n return ON;\n }\n}\nfunction _getCharacterType(ch) {\n var uc = ch.charCodeAt(0), hi = uc >> 8;\n if (hi == 0) {\n return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n }\n else if (hi == 5) {\n return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n }\n else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n return NSM;\n else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n return AN;\n else if (uc == 0x066A)\n return ET;\n else if (/[\\u06f0-\\u06f9]/.test(ch))\n return EN;\n else\n return AL;\n }\n else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n }\n else if (hi == 0xFE) {\n return (uc >= 0xFE70 ? AL : ON);\n }\n return ON;\n}\nfunction _isArabicDiacritics(ch) {\n return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2)\n return {};\n var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n dir = isRtl ? RTL : LTR;\n _computeLevels(chars, levels, chars.length, textCharTypes);\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n ;\n _invertLevel(2, levels, logicalFromVisual);\n _invertLevel(1, levels, logicalFromVisual);\n for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n }\n else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n }\n else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n if (chars[chars.length - 1] === exports.DOT)\n levels[chars.length - 1] = exports.B;\n if (chars[0] === '\\u202B')\n levels[0] = exports.RLE;\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n ret = true;\n }\n return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx)\n return i;\n }\n return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = /** @class */ (function () {\n function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n }\n BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n BidiHandler.prototype.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n BidiHandler.prototype.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n return docRow;\n };\n BidiHandler.prototype.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n else {\n splitIndex = this.currentRow;\n }\n return splitIndex;\n };\n BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n }\n else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n if (splitIndex == splits.length) {\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n }\n }\n }\n else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n BidiHandler.prototype.updateBidiMap = function () {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n }\n else {\n this.bidiMap = {};\n }\n };\n BidiHandler.prototype.markAsDirty = function () {\n this.currentRow = null;\n };\n BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n this.currentRow = null;\n };\n BidiHandler.prototype.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n BidiHandler.prototype.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n BidiHandler.prototype.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n BidiHandler.prototype.isRtlLine = function (row) {\n if (this.$isRtl)\n return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir;\n };\n BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) {\n var cursor = editor.getCursorPosition();\n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n }\n };\n BidiHandler.prototype.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n return left;\n };\n BidiHandler.prototype.getSelections = function (startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n }\n else if (!isSelected && isSelectedPrev) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n if (isSelected && (visIdx === levels.length)) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n if (this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n BidiHandler.prototype.offsetToCol = function (posX) {\n if (this.isRtlDir)\n posX -= this.rtlLineOffset;\n var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n if (posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n }\n else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n }\n else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n return (logicalIdx + this.wrapIndent);\n };\n return BidiHandler;\n}());\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = /** @class */ (function () {\n function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n var self = this;\n this.cursor.on(\"change\", function (e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n this.anchor.on(\"change\", function () {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n }\n Selection.prototype.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n Selection.prototype.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n Selection.prototype.getCursor = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.setAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n Selection.prototype.getAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n Selection.prototype.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n Selection.prototype.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n Selection.prototype.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n Selection.prototype.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n Selection.prototype.setRange = function (range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n Selection.prototype.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n Selection.prototype.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n Selection.prototype.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n Selection.prototype.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n Selection.prototype.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n Selection.prototype.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n Selection.prototype.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n Selection.prototype.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n Selection.prototype.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n Selection.prototype.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n Selection.prototype.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n Selection.prototype.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n Selection.prototype.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n Selection.prototype.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n Selection.prototype.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n Selection.prototype.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n Selection.prototype.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n Selection.prototype.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n }\n else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n Selection.prototype.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n Selection.prototype.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n Selection.prototype.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n Selection.prototype.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n }\n else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n }\n else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n Selection.prototype.moveCursorRight = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n }\n else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n Selection.prototype.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n Selection.prototype.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n Selection.prototype.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n Selection.prototype.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.$shortWordEndIndex = function (rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n return index;\n };\n Selection.prototype.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n Selection.prototype.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n Selection.prototype.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n Selection.prototype.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n Selection.prototype.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n }\n else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n Selection.prototype.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n Selection.prototype.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n Selection.prototype.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n Selection.prototype.toOrientedRange = function (range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n }\n else {\n range = r;\n }\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n Selection.prototype.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n }\n catch (e) {\n return Range.fromPoints(start, start);\n }\n finally {\n this.moveCursorToPosition(start);\n }\n };\n Selection.prototype.toJSON = function () {\n if (this.rangeCount) { var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n }\n else { var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n Selection.prototype.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n }\n else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n Selection.prototype.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n return Selection;\n}());\nSelection.prototype.setSelectionAnchor = Selection.prototype.setAnchor;\nSelection.prototype.getSelectionAnchor = Selection.prototype.getAnchor;\nSelection.prototype.setSelectionRange = Selection.prototype.setRange;\noop.implement(Selection.prototype, EventEmitter);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/report_error\"], function(require, exports, module){\"use strict\";\nvar reportError = require(\"./lib/report_error\").reportError;\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer(rules) {\n this.splitRegex;\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n var flag = \"g\";\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n flag += \"i\";\n if (rule.unicode && flag.indexOf(\"u\") === -1)\n flag += \"u\";\n if (rule.regex == null)\n continue;\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n }\n else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n }\n else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n }\n else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n }\n else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n }\n Tokenizer.prototype.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n Tokenizer.prototype.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{ type: types, value: str }];\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.$arrayTokens = function (str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n return r;\n };\n Tokenizer.prototype.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n }\n else if (square) {\n inChClass = true;\n }\n else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n stack--;\n }\n else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\")\n src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\")\n src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n Tokenizer.prototype.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n }\n else\n var stack = [];\n var currentState = /**@type{string}*/ (startState) || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = { type: null, value: \"\" };\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: skipped };\n }\n }\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined)\n continue;\n rule = state[mapping[i]];\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n }\n else {\n currentState = rule.next(currentState, stack);\n }\n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: value };\n }\n }\n else if (type) {\n if (token.type)\n tokens.push(token);\n token = { type: null, value: \"\" };\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n if (lastIndex == line.length)\n break;\n lastIndex = index;\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n if (token.type)\n tokens.push(token);\n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n return Tokenizer;\n}());\nTokenizer.prototype.reportError = reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nvar deepCopy = require(\"../lib/deep_copy\").deepCopy;\nvar TextHighlightRules;\nTextHighlightRules = function () {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n};\n(function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n this.getRules = function () {\n return this.$rules;\n };\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n }\n else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n this.addRules(embedRules, prefix);\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], deepCopy(escapeRules));\n }\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n this.getEmbeds = function () {\n return this.$embeds;\n };\n var pushState = function (currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function (currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state[\"processed\"] = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n }\n else if (next == \"pop\") {\n rule.next = popState;\n }\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n }\n else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (includeName === \"$self\")\n includeName = \"start\";\n if (Array.isArray(includeName))\n toInsert = includeName.map(function (x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function (x) { return !x.next; });\n state.splice.apply(state, args);\n i--;\n }\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--;) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase)\n word = word.toLowerCase();\n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase\n ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n : function (value) { return keywords[value] || defaultToken; };\n };\n this.getKeywords = function () {\n return this.$keywords;\n };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour;\nBehaviour = function () {\n this.$behaviours = {};\n};\n(function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n }\n else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n }\n else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = /** @class */ (function () {\n function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n }\n TokenIterator.prototype.stepBackward = function () {\n this.$tokenIndex -= 1;\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentTokenRow = function () {\n return this.$row;\n };\n TokenIterator.prototype.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n return column;\n };\n TokenIterator.prototype.getCurrentTokenPosition = function () {\n return { row: this.$row, column: this.getCurrentTokenColumn() };\n };\n TokenIterator.prototype.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n return TokenIterator;\n}());\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = { rangeCount: editor.multiSelect.rangeCount };\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\nvar CstyleBehaviour;\nCstyleBehaviour = function (options) {\n options = options || {};\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n var token = session.getTokenAt(cursor.row, cursor.column);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n }\n else if (token && /(?:string)\\.quasi|\\.xml/.test(token.type)) {\n var excludeTokens = [\n /tag\\-(?:open|name)/, /attribute\\-name/\n ];\n if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\\.quasi/.test(token.type)\n && token.value[cursor.column - token.start - 1] !== '$')\n return;\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n }\n else if (closing) {\n var next_indent = this.$getIndent(line);\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n }\n else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n }\n else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n }\n else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n }\n else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n }\n else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(rightChar);\n var pairQuotesAfter = session.$mode.$pairQuotesAfter;\n var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar);\n if ((!shouldPairQuotes && isWordBefore) || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n if (options.closeDocComment !== false) {\n this.add(\"doc comment end\", \"insertion\", function (state, action, editor, session, text) {\n if (state === \"doc-start\" && (text === \"\\n\" || text === \"\\r\\n\") && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n if (cursor.column === 0) {\n return;\n }\n var line = session.doc.getLine(cursor.row);\n var nextLine = session.doc.getLine(cursor.row + 1);\n var tokens = session.getTokens(cursor.row);\n var index = 0;\n for (var i = 0; i < tokens.length; i++) {\n index += tokens[i].value.length;\n var currentToken = tokens[i];\n if (index >= cursor.column) {\n if (index === cursor.column) {\n if (!/\\.doc/.test(currentToken.type)) {\n return;\n }\n if (/\\*\\//.test(currentToken.value)) {\n var nextToken = tokens[i + 1];\n if (!nextToken || !/\\.doc/.test(nextToken.type)) {\n return;\n }\n }\n }\n var cursorPosInToken = cursor.column - (index - currentToken.value.length);\n var closeDocPos = currentToken.value.indexOf(\"*/\");\n var openDocPos = currentToken.value.indexOf(\"/**\", closeDocPos > -1 ? closeDocPos + 2 : 0);\n if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) {\n return;\n }\n if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos\n && cursorPosInToken <= openDocPos || !/\\.doc/.test(currentToken.type)) {\n return;\n }\n break;\n }\n }\n var indent = this.$getIndent(line);\n if (/\\s*\\*/.test(nextLine)) {\n if (/^\\s*\\*/.test(line)) {\n return {\n text: text + indent + \"* \",\n selection: [1, 2 + indent.length, 1, 2 + indent.length]\n };\n }\n else {\n return {\n text: text + indent + \" * \",\n selection: [1, 3 + indent.length, 1, 3 + indent.length]\n };\n }\n }\n if (/\\/\\*\\*/.test(line.substring(0, cursor.column))) {\n return {\n text: text + indent + \" * \" + text + \" \" + indent + \"*/\",\n selection: [1, 4 + indent.length, 1, 4 + indent.length]\n };\n }\n }\n });\n }\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour[\"$matchTokenType\"] = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour[\"recordAutoInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isAutoInsertedClosing\"](cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\nCstyleBehaviour[\"recordMaybeInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isMaybeInsertedClosing\"](cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\nCstyleBehaviour[\"isAutoInsertedClosing\"] = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour[\"isMaybeInsertedClosing\"] = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour[\"popAutoInsertedClosing\"] = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\nCstyleBehaviour[\"clearMaybeInsertedClosing\"] = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode;\nMode = function () {\n this.HighlightRules = TextHighlightRules;\n};\n(function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n var comment = function (line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var uncomment = function (line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n var testRemove = function (line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n }\n else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n }\n else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n var uncomment = function (line, i) {\n var m = line.match(regexpStart);\n if (!m)\n return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function (line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n else\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var testRemove = function (line, i) {\n return regexpStart.test(line);\n };\n var shouldInsertSpace = function (line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n }\n else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n }\n else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n this.autoOutdent = function (state, doc, row) {\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n this.createWorker = function (session) {\n return null;\n };\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n var _loop_1 = function (i) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] =\n function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this_1));\n };\n var this_1 = this;\n for (var i = 0; i < delegations.length; i++) {\n _loop_1(i);\n }\n };\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]])\n continue;\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer[\"rules\"];\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n this.$createKeywordList = function () {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n }\n else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n }\n else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n break;\n }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = /** @class */ (function () {\n function Anchor(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof row != \"number\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n }\n Anchor.prototype.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n Anchor.prototype.getDocument = function () {\n return this.document;\n };\n Anchor.prototype.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n if (delta.start.row > this.row)\n return;\n var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n Anchor.prototype.setPosition = function (row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n }\n else {\n pos = this.$clipPositionToDocument(row, column);\n }\n if (this.row == pos.row && this.column == pos.column)\n return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n Anchor.prototype.detach = function () {\n this.document.off(\"change\", this.$onChange);\n };\n Anchor.prototype.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n Anchor.prototype.$clipPositionToDocument = function (row, column) {\n var pos = {};\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n if (column < 0)\n pos.column = 0;\n return pos;\n };\n return Anchor;\n}());\nAnchor.prototype.$insertRight = false;\noop.implement(Anchor.prototype, EventEmitter);\nfunction $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n}\nfunction $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n}\nexports.Anchor = Anchor;\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = /** @class */ (function () {\n function Document(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n }\n else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n }\n else {\n this.insert({ row: 0, column: 0 }, textOrLines);\n }\n }\n Document.prototype.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({ row: 0, column: 0 }, text || \"\");\n };\n Document.prototype.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n Document.prototype.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n Document.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n Document.prototype.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineMode = function () {\n return this.$newLineMode;\n };\n Document.prototype.isNewLine = function (text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n Document.prototype.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n Document.prototype.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n Document.prototype.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n Document.prototype.getLength = function () {\n return this.$lines.length;\n };\n Document.prototype.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n Document.prototype.getLinesForRange = function (range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n }\n else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n Document.prototype.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n Document.prototype.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n Document.prototype.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n Document.prototype.insert = function (position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n Document.prototype.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n Document.prototype.clippedPos = function (row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n }\n else if (row < 0) {\n row = 0;\n }\n else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return { row: row, column: column };\n };\n Document.prototype.clonePos = function (pos) {\n return { row: pos.row, column: pos.column };\n };\n Document.prototype.pos = function (row, column) {\n return { row: row, column: column };\n };\n Document.prototype.$clipPosition = function (position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n }\n else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n Document.prototype.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n }\n else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({ row: row, column: column }, lines);\n };\n Document.prototype.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n Document.prototype.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n });\n return this.clonePos(start);\n };\n Document.prototype.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n }, true);\n return this.clonePos(start);\n };\n Document.prototype.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n Document.prototype.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n Document.prototype.replace = function (range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n return end;\n };\n Document.prototype.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n Document.prototype.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n Document.prototype.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n Document.prototype.$safeApplyDelta = function (delta) {\n var docLength = this.$lines.length;\n if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength) {\n this.applyDelta(delta);\n }\n };\n Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row;\n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n Document.prototype.revertDelta = function (delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n Document.prototype.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return { row: i, column: index + lines[i].length + newlineLength };\n }\n return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n };\n Document.prototype.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n return index + pos.column;\n };\n Document.prototype.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n return Document;\n}());\nDocument.prototype.$autoNewLine = \"\";\nDocument.prototype.$newLineMode = \"auto\";\noop.implement(Document.prototype, EventEmitter);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = /** @class */ (function () {\n function BackgroundTokenizer(tokenizer, session) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n if (endLine == -1)\n endLine = currentLine;\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n }\n BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n BackgroundTokenizer.prototype.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", { data: data });\n };\n BackgroundTokenizer.prototype.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.scheduleStart = function () {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n this.lines[startRow] = null;\n }\n else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n BackgroundTokenizer.prototype.stop = function () {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n BackgroundTokenizer.prototype.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n BackgroundTokenizer.prototype.getState = function (row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n BackgroundTokenizer.prototype.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n }\n else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n return this.lines[row] = data.tokens;\n };\n BackgroundTokenizer.prototype.cleanup = function () {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.removeAllListeners();\n };\n return BackgroundTokenizer;\n}());\noop.implement(BackgroundTokenizer.prototype, EventEmitter);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = /** @class */ (function () {\n function SearchHighlight(regExp, clazz, type) {\n if (type === void 0) { type = \"text\"; }\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type;\n }\n SearchHighlight.prototype.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n SearchHighlight.prototype.update = function (html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n var renderedMarkerRanges = {};\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n for (var j = ranges.length; j--;) {\n var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n var rangeAsString = rangeToAddMarkerTo.toString();\n if (renderedMarkerRanges[rangeAsString])\n continue;\n renderedMarkerRanges[rangeAsString] = true;\n markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n }\n }\n };\n return SearchHighlight;\n}());\nSearchHighlight.prototype.MAX_RANGES = 500;\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n function UndoManager() {\n this.$keepRedoStack;\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.$undoDepth = Infinity;\n this.reset();\n }\n UndoManager.prototype.addSession = function (session) {\n this.$session = session;\n };\n UndoManager.prototype.add = function (delta, allowMerge, session) {\n if (this.$fromUndo)\n return;\n if (delta == this.$lastDelta)\n return;\n if (!this.$keepRedoStack)\n this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n var undoStackLength = this.$undoStack.length;\n if (undoStackLength > this.$undoDepth - 1) {\n this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n }\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n UndoManager.prototype.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n UndoManager.prototype.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n UndoManager.prototype.markIgnored = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n UndoManager.prototype.getSelection = function (rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n UndoManager.prototype.getRevision = function () {\n return this.$rev;\n };\n UndoManager.prototype.getDeltas = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i + 1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n UndoManager.prototype.getChangedRanges = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.getChangedLines = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.undo = function (session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n if (!rearrangeUndoStack(stack, stack.length))\n return;\n if (!session)\n session = this.$session;\n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n this.$fromUndo = true;\n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return undoSelectionRange;\n };\n UndoManager.prototype.redo = function (session, dontSelect) {\n this.lastDeltas = null;\n if (!session)\n session = this.$session;\n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function (x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return redoSelectionRange;\n };\n UndoManager.prototype.$syncRev = function () {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n UndoManager.prototype.reset = function () {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n UndoManager.prototype.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n UndoManager.prototype.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n UndoManager.prototype.bookmark = function (rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n UndoManager.prototype.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n UndoManager.prototype.toJSON = function () {\n return {\n $redoStack: this.$redoStack,\n $undoStack: this.$undoStack\n };\n };\n UndoManager.prototype.fromJSON = function (json) {\n this.reset();\n this.$undoStack = json.$undoStack;\n this.$redoStack = json.$redoStack;\n };\n UndoManager.prototype.$prettyPrint = function (delta) {\n if (delta)\n return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n return UndoManager;\n}());\nUndoManager.prototype.hasUndo = UndoManager.prototype.canUndo;\nUndoManager.prototype.hasRedo = UndoManager.prototype.canRedo;\nUndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark;\nUndoManager.prototype.markClean = UndoManager.prototype.bookmark;\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--;) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while (i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert)\n end = start;\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\nfunction clonePos(pos) {\n return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n }\n else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n }\n else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column\n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--;) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n }\n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore =\n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n }\n else {\n shift(d1, c1, 1);\n }\n }\n else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n }\n else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n }\n else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n }\n else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n }\n else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n }\n else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n }\n else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos);\n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col);\n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n }\n else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1);\n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = /** @class */ (function () {\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n }\n else {\n folds = this.folds = [folds];\n }\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n FoldLine.prototype.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n FoldLine.prototype.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n }\n else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n FoldLine.prototype.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n FoldLine.prototype.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n FoldLine.prototype.getNextFoldTo = function (row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n }\n else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n FoldLine.prototype.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column), fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n }\n else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n FoldLine.prototype.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\")\n return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n FoldLine.prototype.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n FoldLine.prototype.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n FoldLine.prototype.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n lastFoldEndColumn = fold.end.column;\n }\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n return FoldLine;\n}());\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = /** @class */ (function () {\n function RangeList() {\n this.ranges = [];\n this.$bias = 1;\n }\n RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n return -i - 1;\n }\n return -i - 1;\n };\n RangeList.prototype.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n RangeList.prototype.addList = function (list) {\n var removed = [];\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n RangeList.prototype.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n RangeList.prototype.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n this.ranges = list;\n return removed;\n };\n RangeList.prototype.contains = function (row, column) {\n return this.pointIndex({ row: row, column: column }) >= 0;\n };\n RangeList.prototype.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n RangeList.prototype.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n RangeList.prototype.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n var startIndex = this.pointIndex({ row: startRow, column: 0 });\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n RangeList.prototype.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n RangeList.prototype.attach = function (session) {\n if (this.session)\n this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n RangeList.prototype.detach = function () {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n RangeList.prototype.$onChange = function (delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n }\n else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > endRow)\n break;\n if (r.end.row < endRow\n && (startRow < r.end.row\n || startRow == r.end.row && start.column < r.end.column)) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n if (r.start.row < endRow\n && (startRow < r.start.row\n || startRow == r.start.row && start.column < r.start.column)) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n return RangeList;\n}());\nRangeList.prototype.comparePoints = comparePoints;\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar RangeList = require(\"../range_list\").RangeList;\nvar Fold = /** @class */ (function (_super) {\n __extends(Fold, _super);\n function Fold(range, placeholder) {\n var _this = _super.call(this) || this;\n _this.foldLine = null;\n _this.placeholder = placeholder;\n _this.range = range;\n _this.start = range.start;\n _this.end = range.end;\n _this.sameRow = range.start.row == range.end.row;\n _this.subFolds = _this.ranges = [];\n return _this;\n }\n Fold.prototype.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n Fold.prototype.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n Fold.prototype.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n Fold.prototype.addSubFold = function (fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0)\n j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n Fold.prototype.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n return Fold;\n}(RangeList));\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\nexports.Fold = Fold;\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\",\"ace/mouse/mouse_event\"], function(require, exports, module){// @ts-nocheck\n\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar MouseEvent = require(\"../mouse/mouse_event\").MouseEvent;\nfunction Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n }\n else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n }\n else if (cmp == 2) {\n continue;\n }\n else \n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n }\n else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n return folds;\n };\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n }\n else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData, rowCount = last - first + 1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last - start;\n else\n rowCount = 0; // in one fold\n }\n break;\n }\n else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;\n else\n rowCount -= end - first + 1;\n }\n }\n return rowCount;\n };\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n if (!fold.collapseChildren) {\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n }\n else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n }\n else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n return fold;\n };\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n }\n else \n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n }\n else \n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n }\n else \n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n }\n else \n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n fold.subFolds = [];\n };\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n this.unfold = function (location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null)\n expandInner = true;\n }\n else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n }\n else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n }\n else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function (range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n }\n else {\n range = location;\n }\n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0\n && Range.comparePoints(folds[0].end, range.end) > 0) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n if (expandInner != false) {\n this.removeFolds(folds);\n }\n else {\n this.expandFolds(folds);\n }\n if (outermostFolds.length)\n return outermostFolds;\n };\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n if (placeholder != null) {\n textLine += placeholder;\n }\n else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n }\n else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n if (fold) {\n this.expandFold(fold);\n return;\n }\n else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n }\n else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n }\n else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n range.start.column++;\n }\n else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n }\n else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n }\n else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n this.addFold(placeholder, range);\n };\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start|\\\\.doc\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + token.value.length;\n iterator = new TokenIterator(this, row, column);\n var initState = this.getState(iterator.$row);\n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (initState.toString() !== state.toString())\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n }\n else\n token = iterator.getCurrentToken();\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn();\n return range;\n }\n };\n this.foldAll = function (startRow, endRow, depth, test) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n if (test && !test(row))\n continue;\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n this.foldToLevel = function (level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\n this.foldAllComments = function () {\n var session = this;\n this.foldAll(null, null, null, function (row) {\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value))\n continue;\n if (/comment/.test(token.type))\n return true;\n return false;\n }\n });\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style)\n return;\n this.$foldStyle = style;\n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode)\n return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n this.onFoldWidgetClick = function (row, e) {\n if (e instanceof MouseEvent)\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n }\n else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n }\n else if (range) {\n if (options.all)\n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n return range;\n };\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n if (fold) {\n this.removeFold(fold);\n }\n else {\n this.addFold(\"...\", range);\n }\n }\n };\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n }\n else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0)\n return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\")\n return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = { row: pos.row, column: pos.column + 1 };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n }\n else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n return range;\n };\n this.getMatchingBracketRanges = function (pos, isBackwards) {\n var line = this.getLine(pos.row);\n var bracketsRegExp = /([\\(\\[\\{])|([\\)\\]\\}])/;\n var chr = !isBackwards && line.charAt(pos.column - 1);\n var match = chr && chr.match(bracketsRegExp);\n if (!match) {\n chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(bracketsRegExp);\n }\n if (!match)\n return null;\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n return [startRange, endRange];\n };\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n .replace(/-close\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n return null;\n };\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n .replace(/-open\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n valueIndex = 0;\n }\n return null;\n };\n this.getMatchingTags = function (pos) {\n var iterator = new TokenIterator(this, pos.row, pos.column);\n var token = this.$findTagName(iterator);\n if (!token)\n return;\n var prevToken = iterator.stepBackward();\n if (prevToken.value === '<') {\n return this.$findClosingTag(iterator, token);\n }\n else {\n return this.$findOpeningTag(iterator, token);\n }\n };\n this.$findTagName = function (iterator) {\n var token = iterator.getCurrentToken();\n var found = false;\n var backward = false;\n if (token && token.type.indexOf('tag-name') === -1) {\n do {\n if (backward)\n token = iterator.stepBackward();\n else\n token = iterator.stepForward();\n if (token) {\n if (token.value === \"/>\") {\n backward = true;\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n found = true;\n }\n }\n } while (token && !found);\n }\n return token;\n };\n this.$findClosingTag = function (iterator, token) {\n var prevToken;\n var currentTag = token.value;\n var tag = token.value;\n var depth = 0;\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n token = iterator.stepForward();\n var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n var foundOpenTagEnd = false;\n do {\n prevToken = token;\n if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n token = iterator.stepForward();\n if (token) {\n if (token.value === '>' && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n }\n else if (prevToken.value === '</') {\n depth--;\n if (depth < 0) { //found closing tag\n iterator.stepBackward();\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); //Range for </\n token = iterator.stepForward();\n var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n if (token.type.indexOf('tag-close') === -1) {\n token = iterator.stepForward();\n }\n if (token && token.value === '>') {\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n else {\n return;\n }\n }\n }\n }\n }\n else if (tag === currentTag && token.value === '/>') { // self-closing tag\n depth--;\n if (depth < 0) { //found self-closing tag end\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n var closeTagName = closeTagStart;\n var closeTagEnd = closeTagName;\n var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n }\n }\n }\n } while (token && depth >= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n this.$findOpeningTag = function (iterator, token) {\n var prevToken = iterator.getCurrentToken();\n var tag = token.value;\n var depth = 0;\n var startRow = iterator.getCurrentTokenRow();\n var startColumn = iterator.getCurrentTokenColumn();\n var endColumn = startColumn + 2;\n var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for </\n iterator.stepForward();\n var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n if (token.type.indexOf('tag-close') === -1) {\n token = iterator.stepForward();\n }\n if (!token || token.value !== \">\")\n return;\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n iterator.stepBackward();\n iterator.stepBackward();\n do {\n token = prevToken;\n startRow = iterator.getCurrentTokenRow();\n startColumn = iterator.getCurrentTokenColumn();\n endColumn = startColumn + token.value.length;\n prevToken = iterator.stepBackward();\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n if (depth > 0) { //found opening tag\n var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n do {\n token = iterator.stepForward();\n } while (token && token.value !== '>');\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n }\n else if (prevToken.value === '</') {\n depth--;\n }\n }\n }\n else if (token.value === '/>') { // self-closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n }\n else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/undomanager\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar EditSession = /** @class */ (function () {\n function EditSession(text, mode) { this.doc;\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.prevOp = {};\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n var _self = this;\n this.bgTokenizer.on(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(/**@type{string}*/ (text));\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.selection.on(\"changeCursor\", this.$onSelectionChange);\n this.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n this.destroyed = false;\n this.$initOperationListeners();\n }\n EditSession.prototype.$initOperationListeners = function () {\n var _this = this;\n this.curOp = null;\n this.on(\"change\", function () {\n if (!_this.curOp) {\n _this.startOperation();\n _this.curOp.selectionBefore = _this.$lastSel;\n }\n _this.curOp.docChanged = true;\n }, true);\n this.on(\"changeSelection\", function () {\n if (!_this.curOp) {\n _this.startOperation();\n _this.curOp.selectionBefore = _this.$lastSel;\n }\n _this.curOp.selectionChanged = true;\n }, true);\n this.$operationResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n };\n EditSession.prototype.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command) {\n return;\n }\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n commandEvent = {};\n }\n this.$operationResetTimer.schedule();\n this.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n this._signal(\"startOperation\", commandEvent);\n };\n EditSession.prototype.endOperation = function (e) {\n if (this.curOp) {\n if (e && e.returnValue === false) {\n this.curOp = null;\n this._signal(\"endOperation\", e);\n return;\n }\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\") {\n return;\n }\n var currentSelection = this.selection.toJSON();\n this.curOp.selectionAfter = currentSelection;\n this.$lastSel = this.selection.toJSON();\n this.getUndoManager().addSelection(currentSelection);\n this._signal(\"beforeEndOperation\");\n this.prevOp = this.curOp;\n this.curOp = null;\n this._signal(\"endOperation\", e);\n }\n };\n EditSession.prototype.setDocument = function (doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange, true);\n this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n EditSession.prototype.getDocument = function () {\n return this.doc;\n };\n EditSession.prototype.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n return low - 1;\n };\n EditSession.prototype.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (!this.destroyed)\n this.bgTokenizer.start(0);\n };\n EditSession.prototype.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n EditSession.prototype.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n this.$informUndoManager.schedule();\n }\n this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n EditSession.prototype.onSelectionChange = function () {\n this._signal(\"changeSelection\");\n };\n EditSession.prototype.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n EditSession.fromJSON = function (session) {\n if (typeof session == \"string\")\n session = JSON.parse(session);\n var undoManager = new UndoManager();\n undoManager.$undoStack = session.history.undo;\n undoManager.$redoStack = session.history.redo;\n undoManager.mark = session.history.mark;\n undoManager.$rev = session.history.rev;\n var editSession = new EditSession(session.value);\n session.folds.forEach(function (fold) {\n editSession.addFold(\"...\", Range.fromPoints(fold.start, fold.end));\n });\n editSession.setAnnotations(session.annotations);\n editSession.setBreakpoints(session.breakpoints);\n editSession.setMode(session.mode);\n editSession.setScrollLeft(session.scrollLeft);\n editSession.setScrollTop(session.scrollTop);\n editSession.setUndoManager(undoManager);\n editSession.selection.fromJSON(session.selection);\n return editSession;\n };\n EditSession.prototype.toJSON = function () {\n return {\n annotations: this.$annotations,\n breakpoints: this.$breakpoints,\n folds: this.getAllFolds().map(function (fold) {\n return fold.range;\n }),\n history: this.getUndoManager(),\n mode: this.$mode.$id,\n scrollLeft: this.$scrollLeft,\n scrollTop: this.$scrollTop,\n selection: this.selection.toJSON(),\n value: this.doc.getValue()\n };\n };\n EditSession.prototype.toString = function () {\n return this.doc.getValue();\n };\n EditSession.prototype.getSelection = function () {\n return this.selection;\n };\n EditSession.prototype.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n EditSession.prototype.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n EditSession.prototype.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n }\n else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n EditSession.prototype.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n else {\n this.$syncInformUndoManager = function () { };\n }\n };\n EditSession.prototype.markUndoGroup = function () {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n EditSession.prototype.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n EditSession.prototype.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n }\n else {\n return \"\\t\";\n }\n };\n EditSession.prototype.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n EditSession.prototype.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n EditSession.prototype.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n EditSession.prototype.getTabSize = function () {\n return this.$tabSize;\n };\n EditSession.prototype.isTabStop = function (position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n EditSession.prototype.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n EditSession.prototype.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n EditSession.prototype.getOverwrite = function () {\n return this.$overwrite;\n };\n EditSession.prototype.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n EditSession.prototype.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.getBreakpoints = function () {\n return this.$breakpoints;\n };\n EditSession.prototype.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoints = function () {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.setBreakpoint = function (row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return id;\n };\n EditSession.prototype.addDynamicMarker = function (marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return marker;\n };\n EditSession.prototype.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n EditSession.prototype.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n EditSession.prototype.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n EditSession.prototype.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n EditSession.prototype.getAnnotations = function () {\n return this.$annotations || [];\n };\n EditSession.prototype.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n EditSession.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n }\n else {\n this.$autoNewLine = \"\\n\";\n }\n };\n EditSession.prototype.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n var start = column;\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n return new Range(row, start, row, end);\n };\n EditSession.prototype.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n EditSession.prototype.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n EditSession.prototype.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n EditSession.prototype.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n EditSession.prototype.getUseWorker = function () { return this.$useWorker; };\n EditSession.prototype.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n EditSession.prototype.setMode = function (mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n }\n else {\n path = /**@type{string}*/ (mode) || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n }\n else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode)\n return;\n var oldMode = this.$mode;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker)\n this.$startWorker();\n var tokenizer = mode.getTokenizer();\n if (tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n this.bgTokenizer.setTokenizer(tokenizer);\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n }\n };\n EditSession.prototype.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n EditSession.prototype.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n }\n catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n EditSession.prototype.getMode = function () {\n return this.$mode;\n };\n EditSession.prototype.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n EditSession.prototype.getScrollTop = function () {\n return this.$scrollTop;\n };\n EditSession.prototype.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n EditSession.prototype.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n EditSession.prototype.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets)\n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n EditSession.prototype.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null)\n return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n EditSession.prototype.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n EditSession.prototype.getLine = function (row) {\n return this.doc.getLine(row);\n };\n EditSession.prototype.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n EditSession.prototype.getLength = function () {\n return this.doc.getLength();\n };\n EditSession.prototype.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n EditSession.prototype.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n EditSession.prototype.remove = function (range) {\n return this.doc.remove(range);\n };\n EditSession.prototype.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n EditSession.prototype.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n }\n else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n EditSession.prototype.$getUndoSelection = function (deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n var range, point;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start)\n continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n }\n else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n }\n else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n EditSession.prototype.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n EditSession.prototype.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n return toRange;\n };\n EditSession.prototype.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row = startRow; row <= endRow; row++)\n this.doc.insertInLine({ row: row, column: 0 }, indentString);\n };\n EditSession.prototype.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n }\n else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0)\n return 0;\n var diff = row - firstRow;\n }\n else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1)\n return 0;\n var diff = row - lastRow;\n }\n else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n EditSession.prototype.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n EditSession.prototype.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n EditSession.prototype.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n EditSession.prototype.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n EditSession.prototype.$clipColumnToRow = function (row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n EditSession.prototype.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n if (row < 0) {\n row = 0;\n column = 0;\n }\n else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n }\n else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n return {\n row: row,\n column: column\n };\n };\n EditSession.prototype.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n }\n else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n }\n else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n return range;\n };\n EditSession.prototype.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n EditSession.prototype.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = { min: $printMargin, max: $printMargin };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n EditSession.prototype.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n EditSession.prototype.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n EditSession.prototype.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n EditSession.prototype.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n lastRow = firstRow;\n }\n else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n }\n else \n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n }\n else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n EditSession.prototype.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n }\n else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n }\n else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2)\n len -= 1;\n }\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n }\n else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n EditSession.prototype.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n }\n else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n }\n else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n }\n else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n EditSession.prototype.getRowLength = function (row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n EditSession.prototype.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n }\n else {\n return this.$wrapData[row].length + 1;\n }\n };\n EditSession.prototype.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n }\n else {\n return 0;\n }\n };\n EditSession.prototype.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n EditSession.prototype.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n }\n else {\n return this.$wrapData[row];\n }\n };\n EditSession.prototype.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return { row: 0, column: 0 };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n }\n else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n }\n else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n }\n else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n return { row: docRow, column: docColumn };\n };\n EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column);\n else\n pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n var rowEnd, row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n screenRow += this.getRowLength(row);\n row = rowEnd;\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n }\n else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n EditSession.prototype.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n EditSession.prototype.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n EditSession.prototype.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n }\n else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n EditSession.prototype.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar)\n return;\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n };\n EditSession.prototype.getPrecedingCharacter = function () {\n var pos = this.selection.getCursor();\n if (pos.column === 0) {\n return pos.row === 0 ? \"\" : this.doc.getNewLineCharacter();\n }\n var currentLine = this.getLine(pos.row);\n return currentLine[pos.column - 1];\n };\n EditSession.prototype.destroy = function () {\n if (!this.destroyed) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer.cleanup();\n this.destroyed = true;\n }\n this.endOperation();\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n if (this.selection) {\n this.selection.off(\"changeCursor\", this.$onSelectionChange);\n this.selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.selection.detach();\n };\n return EditSession;\n}());\nEditSession.$uid = 0;\nEditSession.prototype.$modes = config.$modes;\nEditSession.prototype.getValue = EditSession.prototype.toString;\nEditSession.prototype.$defaultUndoManager = {\n undo: function () { },\n redo: function () { },\n hasUndo: function () { },\n hasRedo: function () { },\n reset: function () { },\n add: function () { },\n addSelection: function () { },\n startNewGroup: function () { },\n addSession: function () { }\n};\nEditSession.prototype.$overwrite = false;\nEditSession.prototype.$mode = null;\nEditSession.prototype.$modeId = null;\nEditSession.prototype.$scrollTop = 0;\nEditSession.prototype.$scrollLeft = 0;\nEditSession.prototype.$wrapLimit = 80;\nEditSession.prototype.$useWrapMode = false;\nEditSession.prototype.$wrapLimitRange = {\n min: null,\n max: null\n};\nEditSession.prototype.lineWidgets = null;\nEditSession.prototype.isFullWidth = isFullWidth;\noop.implement(EditSession.prototype, EventEmitter);\nvar CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\nfunction isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n}\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function (value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n }\n else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function () {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function (val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function () {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true\n },\n firstLineNumber: {\n set: function () { this._signal(\"changeBreakpoint\"); },\n initialValue: 1\n },\n useWorker: {\n set: function (useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: { initialValue: true },\n tabSize: {\n set: function (tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: { initialValue: false },\n foldStyle: {\n set: function (val) { this.setFoldStyle(val); },\n handlesSet: true\n },\n overwrite: {\n set: function (val) { this._signal(\"changeOverwrite\"); },\n initialValue: false\n },\n newLineMode: {\n set: function (val) { this.doc.setNewLineMode(val); },\n get: function () { return this.doc.getNewLineMode(); },\n handlesSet: true\n },\n mode: {\n set: function (val) { this.setMode(val); },\n get: function () { return this.$modeId; },\n handlesSet: true\n }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = /** @class */ (function () {\n function Search() {\n this.$options = {};\n }\n Search.prototype.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n Search.prototype.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n Search.prototype.setOptions = function (options) {\n this.$options = options;\n };\n Search.prototype.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && /**@type{Range}*/ (options.start).start\n && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) {\n firstRange = null;\n return false;\n }\n return true;\n });\n return firstRange;\n };\n Search.prototype.findAll = function (session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex) {\n continue;\n }\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2)\n row = row + len - 2;\n }\n }\n else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.end.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n i++;\n var endRow = range.end.row - range.start.row;\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n j--;\n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n return ranges;\n };\n Search.prototype.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n if (!re)\n return;\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n if (!options.regExp) {\n replacement = replacement.replace(/\\$/g, \"$$$$\");\n }\n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n return replacement;\n };\n Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle)\n return options.re = false;\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n try {\n new RegExp(needle, \"u\");\n options.$supportsUnicodeFlag = true;\n modifier += \"u\";\n }\n catch (e) {\n options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\\{2}/gu\n }\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n try {\n var re = new RegExp(needle, modifier);\n }\n catch (e) {\n re = false;\n }\n return options.re = re;\n };\n Search.prototype.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++)\n try {\n re.push(new RegExp(parts[i], modifier));\n }\n catch (e) {\n return false;\n }\n return re;\n };\n Search.prototype.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var supportsUnicodeFlag = re.unicode;\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n if (backwards) {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function (row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength())\n return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1)\n return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset)\n return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function (row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length)\n break;\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function (row, startIndex, callback) {\n var line = session.getLine(row);\n var last;\n var m;\n re.lastIndex = startIndex;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length))\n return true;\n if (!length) {\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n if (last >= line.length)\n return false;\n }\n }\n };\n }\n return { forEach: forEach };\n };\n return Search;\n}());\nfunction addWordBoundary(needle, options) {\n var supportsLookbehind = lang.supportsLookbehind();\n function wordBoundary(c, firstChar) {\n if (firstChar === void 0) { firstChar = true; }\n var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp(\"[\\\\p{L}\\\\p{N}_]\", \"u\") : new RegExp(\"\\\\w\");\n if (wordRegExp.test(c) || options.regExp) {\n if (supportsLookbehind && options.$supportsUnicodeFlag) {\n if (firstChar)\n return \"(?<=^|[^\\\\p{L}\\\\p{N}_])\";\n return \"(?=[^\\\\p{L}\\\\p{N}_]|$)\";\n }\n return \"\\\\b\";\n }\n return \"\";\n }\n var needleArray = Array.from(needle);\n var firstChar = needleArray[0];\n var lastChar = needleArray[needleArray.length - 1];\n return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false);\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})(); var keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nvar MultiHashHandler = /** @class */ (function () {\n function MultiHashHandler(config, platform) {\n this.$init(config, platform, false);\n }\n MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = $singleCommand;\n };\n MultiHashHandler.prototype.addCommand = function (command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n MultiHashHandler.prototype.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n }\n else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n MultiHashHandler.prototype.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n }\n else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n }\n else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n }\n else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n MultiHashHandler.prototype.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command)\n return;\n if (typeof command === \"string\")\n return this.bindKey(command, name);\n if (typeof command === \"function\")\n command = { exec: command };\n if (typeof command !== \"object\")\n return;\n if (!command.name)\n command.name = name;\n this.addCommand(command);\n }, this);\n };\n MultiHashHandler.prototype.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n MultiHashHandler.prototype.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n MultiHashHandler.prototype._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n MultiHashHandler.prototype.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return { key: key, hashId: -1 };\n else if (parts.length == 1 && parts[0] == \"shift\")\n return { key: key.toUpperCase(), hashId: -1 };\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return { key: key, hashId: hashId };\n };\n MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0)\n return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return { command: \"null\" };\n }\n }\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return { command: command };\n };\n MultiHashHandler.prototype.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n return MultiHashHandler;\n}());\nfunction getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n}\nvar HashHandler = /** @class */ (function (_super) {\n __extends(HashHandler, _super);\n function HashHandler(config, platform) {\n var _this = _super.call(this, config, platform) || this;\n _this.$singleCommand = true;\n return _this;\n }\n return HashHandler;\n}(MultiHashHandler));\nHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, true);\n};\nMultiHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, false);\n};\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = /** @class */ (function (_super) {\n __extends(CommandManager, _super);\n function CommandManager(platform, commands) {\n var _this = _super.call(this, commands, platform) || this;\n _this.byName = _this.commands;\n _this.setDefaultHandler(\"exec\", function (e) {\n if (!e.args) {\n return e.command.exec(e.editor, {}, e.event, true);\n }\n return e.command.exec(e.editor, e.args, e.event, false);\n });\n return _this;\n }\n CommandManager.prototype.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args))\n return true;\n }\n return false;\n }\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!this.canExecute(command, editor)) {\n return false;\n }\n var e = { editor: editor, command: command, args: args };\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n return e.returnValue === false ? false : true;\n };\n CommandManager.prototype.canExecute = function (command, editor) {\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!command)\n return false;\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n return true;\n };\n CommandManager.prototype.toggleRecording = function (editor) {\n if (this.$inReplay)\n return;\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length)\n this.macro = this.oldMacro;\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n CommandManager.prototype.replay = function (editor) {\n if (this.$inReplay || !this.macro)\n return;\n if (this.recording)\n return this.toggleRecording(editor);\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n }\n finally {\n this.$inReplay = false;\n }\n };\n CommandManager.prototype.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n return CommandManager;\n}(MultiHashHandler));\noop.implement(CommandManager.prototype, EventEmitter);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n return { win: win, mac: mac };\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function (editor) { editor.selectAll(); },\n readOnly: true\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function (editor) { editor.centerSelection(); },\n readOnly: true\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function (editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function (editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function (editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAllComments(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function (editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function (editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function (editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function (editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function (editor) { editor.toggleOverwrite(); },\n readOnly: true\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function (editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function (editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function (editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function (editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function (editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function (editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function (editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function (editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function (editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function (editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function (editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function (editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function (editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function (editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function (editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function (editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function (editor) { editor.selectPageDown(); },\n readOnly: true\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function (editor) { editor.scrollPageDown(); },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function (editor) { editor.gotoPageDown(); },\n readOnly: true\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function (editor) { editor.selectPageUp(); },\n readOnly: true\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function (editor) { editor.scrollPageUp(); },\n readOnly: true\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function (editor) { editor.gotoPageUp(); },\n readOnly: true\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function (editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function (editor) { editor.commands.replay(editor); },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function (editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function () { },\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function (editor) {\n },\n readOnly: true\n },\n {\n name: \"cut\",\n description: \"Cut\",\n exec: function (editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function (editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function (editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function (editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function (editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function (editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function (editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function (editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function (editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function (editor) { editor.undo(); }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function (editor) { editor.redo(); }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function (editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function (editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function (editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function (editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function (editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function (editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function (editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n }\n else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function (editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function (editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function (editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function (editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function (editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function (editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function (editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function (editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function (editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function (editor) { editor.transposeLetters(); },\n multiSelectAction: function (editor) { editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function (editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function (editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function (editor) { editor.autoIndent(); },\n scrollIntoView: \"animate\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"openlink\",\n bindKey: bindKey(\"Ctrl+F3\", \"F3\"),\n exec: function (editor) { editor.openLink(); }\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n }\n else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n }\n else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n editor.exitMultiSelectMode();\n editor.clearSelection();\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0)\n editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"openCommandPallete\",\n exec: function (editor) {\n console.warn(\"This is an obsolete command. Please use `openCommandPalette` instead.\");\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"openCommandPalette\",\n description: \"Open command palette\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function (editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n }];\nfor (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function (editor) { editor.session.foldToLevel(this.level); },\n scrollIntoView: \"center\",\n readOnly: true\n });\n}\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar LineWidgets = /** @class */ (function () {\n function LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n LineWidgets.prototype.getRowLength = function (row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else\n h = 0;\n if (!this[\"$useWrapMode\"] || !this[\"$wrapData\"][row]) {\n return 1 + h;\n }\n else {\n return this[\"$wrapData\"][row].length + 1 + h;\n }\n };\n LineWidgets.prototype.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n };\n LineWidgets.prototype.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n LineWidgets.prototype.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n if (this.editor == editor)\n return;\n this.detach();\n this.editor = editor;\n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n LineWidgets.prototype.detach = function (e) {\n var editor = this.editor;\n if (!editor)\n return;\n this.editor = null;\n editor.widgetManager = null;\n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function (w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n LineWidgets.prototype.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n }\n else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n LineWidgets.prototype.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n }\n else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n }\n else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n LineWidgets.prototype.$updateRows = function () {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var noWidgets = true;\n lineWidgets.forEach(function (w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n LineWidgets.prototype.$registerLineWidget = function (w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n this.session.lineWidgets[w.row] = w;\n return w;\n };\n LineWidgets.prototype.addLineWidget = function (w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n if (!this.editor)\n return w;\n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.text && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.textContent = w.text;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n if (w.className) {\n dom.addCssClass(w.el, w.className);\n }\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = \"5\";\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n if (!w.coverGutter) {\n w.el.style.zIndex = \"3\";\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n LineWidgets.prototype.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy)\n try {\n w.editor.destroy();\n }\n catch (e) { }\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n }\n else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n };\n LineWidgets.prototype.getWidgetsAtRow = function (row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n LineWidgets.prototype.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n LineWidgets.prototype.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n if (!changedWidgets || !changedWidgets.length)\n return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.session != this.session)\n continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n w.h = w.el.offsetHeight;\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n LineWidgets.prototype.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n while (first > 0 && !lineWidgets[first])\n first--;\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n }\n else {\n w.el.style.right = \"\";\n }\n }\n };\n return LineWidgets;\n}());\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/keyboard/gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/mouse/default_gutter_handler\"], function(require, exports, module){\"use strict\";\nvar keys = require('../lib/keys');\nvar GutterTooltip = require(\"../mouse/default_gutter_handler\").GutterTooltip;\nvar GutterKeyboardHandler = /** @class */ (function () {\n function GutterKeyboardHandler(editor) {\n this.editor = editor;\n this.gutterLayer = editor.renderer.$gutterLayer;\n this.element = editor.renderer.$gutter;\n this.lines = editor.renderer.$gutterLayer.$lines;\n this.activeRowIndex = null;\n this.activeLane = null;\n this.annotationTooltip = new GutterTooltip(this.editor);\n }\n GutterKeyboardHandler.prototype.addListener = function () {\n this.element.addEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.addEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.on(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.removeListener = function () {\n this.element.removeEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.removeEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.off(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) {\n if (this.annotationTooltip.isOpen) {\n e.preventDefault();\n if (e.keyCode === keys[\"escape\"])\n this.annotationTooltip.hideTooltip();\n return;\n }\n if (e.target === this.element) {\n if (e.keyCode != keys[\"enter\"]) {\n return;\n }\n e.preventDefault();\n var row = this.editor.getCursorPosition().row;\n if (!this.editor.isRowVisible(row))\n this.editor.scrollToLine(row, true, true);\n setTimeout(\n function () {\n var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row);\n var nearestFoldIndex = this.$findNearestFoldWidget(index);\n var nearestAnnotationIndex = this.$findNearestAnnotation(index);\n if (nearestFoldIndex === null && nearestAnnotationIndex === null)\n return;\n if (nearestFoldIndex === null && nearestAnnotationIndex !== null) {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n if (nearestFoldIndex !== null && nearestAnnotationIndex === null) {\n this.activeRowIndex = nearestFoldIndex;\n this.activeLane = \"fold\";\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n if (Math.abs(nearestAnnotationIndex - index) < Math.abs(nearestFoldIndex - index)) {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n else {\n this.activeRowIndex = nearestFoldIndex;\n this.activeLane = \"fold\";\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }.bind(this), 10);\n return;\n }\n this.$handleGutterKeyboardInteraction(e);\n setTimeout(function () {\n this.editor._signal(\"gutterkeydown\", new GutterKeyboardEvent(e, this));\n }.bind(this), 10);\n };\n GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) {\n if (e.keyCode === keys[\"tab\"]) {\n e.preventDefault();\n return;\n }\n if (e.keyCode === keys[\"escape\"]) {\n e.preventDefault();\n this.$blurGutter();\n this.element.focus();\n this.lane = null;\n return;\n }\n if (e.keyCode === keys[\"up\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetUp();\n break;\n case \"annotation\":\n this.$moveAnnotationUp();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"down\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetDown();\n break;\n case \"annotation\":\n this.$moveAnnotationDown();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"left\"]) {\n e.preventDefault();\n this.$switchLane(\"annotation\");\n return;\n }\n if (e.keyCode === keys[\"right\"]) {\n e.preventDefault();\n this.$switchLane(\"fold\");\n return;\n }\n if (e.keyCode === keys[\"enter\"] || e.keyCode === keys[\"space\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'start') {\n var rowFoldingWidget = this.$rowIndexToRow(this.activeRowIndex);\n this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e);\n setTimeout(\n function () {\n if (this.$rowIndexToRow(this.activeRowIndex) !== rowFoldingWidget) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = this.$rowToRowIndex(rowFoldingWidget);\n this.$focusFoldWidget(this.activeRowIndex);\n }\n }.bind(this), 10);\n break;\n }\n else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') {\n break;\n }\n return;\n case \"annotation\":\n var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2];\n var rect = gutterElement.getBoundingClientRect();\n var style = this.annotationTooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\n break;\n }\n return;\n }\n };\n GutterKeyboardHandler.prototype.$blurGutter = function () {\n if (this.activeRowIndex !== null) {\n switch (this.activeLane) {\n case \"fold\":\n this.$blurFoldWidget(this.activeRowIndex);\n break;\n case \"annotation\":\n this.$blurAnnotation(this.activeRowIndex);\n break;\n }\n }\n if (this.annotationTooltip.isOpen)\n this.annotationTooltip.hideTooltip();\n return;\n };\n GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getFoldWidget(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getAnnotation(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$getFoldWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[1];\n };\n GutterKeyboardHandler.prototype.$getAnnotation = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[2];\n };\n GutterKeyboardHandler.prototype.$findNearestFoldWidget = function (index) {\n if (this.$isFoldWidgetVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isFoldWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) {\n if (this.$isAnnotationVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isAnnotationVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) {\n if (index == null)\n return;\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n foldWidget.focus();\n };\n GutterKeyboardHandler.prototype.$focusAnnotation = function (index) {\n if (index == null)\n return;\n var annotation = this.$getAnnotation(index);\n annotation.classList.add(this.editor.renderer.keyboardFocusClassName);\n annotation.focus();\n };\n GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) {\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n foldWidget.blur();\n };\n GutterKeyboardHandler.prototype.$blurAnnotation = function (index) {\n var annotation = this.$getAnnotation(index);\n annotation.classList.remove(this.editor.renderer.keyboardFocusClassName);\n annotation.blur();\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isFoldWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isFoldWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) {\n switch (desinationLane) {\n case \"annotation\":\n if (this.activeLane === \"annotation\") {\n break;\n }\n var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex);\n if (annotationIndex == null) {\n break;\n }\n this.activeLane = \"annotation\";\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = annotationIndex;\n this.$focusAnnotation(this.activeRowIndex);\n break;\n case \"fold\":\n if (this.activeLane === \"fold\") {\n break;\n }\n var foldWidgetIndex = this.$findNearestFoldWidget(this.activeRowIndex);\n if (foldWidgetIndex == null) {\n break;\n }\n this.activeLane = \"fold\";\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = foldWidgetIndex;\n this.$focusFoldWidget(this.activeRowIndex);\n break;\n }\n return;\n };\n GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) {\n var cell = this.lines.get(index);\n if (cell)\n return cell.row;\n return null;\n };\n GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) {\n for (var i = 0; i < this.lines.getLength(); i++) {\n var cell = this.lines.get(i);\n if (cell.row == row)\n return i;\n }\n return null;\n };\n return GutterKeyboardHandler;\n}());\nexports.GutterKeyboardHandler = GutterKeyboardHandler;\nvar GutterKeyboardEvent = /** @class */ (function () {\n function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) {\n this.gutterKeyboardHandler = gutterKeyboardHandler;\n this.domEvent = domEvent;\n }\n GutterKeyboardEvent.prototype.getKey = function () {\n return keys.keyCodeToString(this.domEvent.keyCode);\n };\n GutterKeyboardEvent.prototype.getRow = function () {\n return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex);\n };\n GutterKeyboardEvent.prototype.isInAnnotationLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"annotation\";\n };\n GutterKeyboardEvent.prototype.isInFoldLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"fold\";\n };\n return GutterKeyboardEvent;\n}());\nexports.GutterKeyboardEvent = GutterKeyboardEvent;\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/line_widgets\",\"ace/keyboard/gutter_handler\",\"ace/config\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar LineWidgets = require(\"./line_widgets\").LineWidgets;\nvar GutterKeyboardHandler = require(\"./keyboard/gutter_handler\").GutterKeyboardHandler;\nvar nls = require(\"./config\").nls;\nvar clipboard = require(\"./clipboard\");\nvar keys = require('./lib/keys');\nvar Editor = /** @class */ (function () {\n function Editor(renderer, session, options) { this.session;\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n this.keyBinding = new KeyBinding(this);\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n if (this.session && !this.session.destroyed)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n }\n Editor.prototype.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n };\n Editor.prototype.startOperation = function (commandEvent) {\n this.session.startOperation(commandEvent);\n };\n Editor.prototype.endOperation = function (e) {\n this.session.endOperation(e);\n };\n Editor.prototype.onStartOperation = function (commandEvent) {\n this.curOp = this.session.curOp;\n this.curOp.scrollTop = this.renderer.scrollTop;\n this.prevOp = this.session.prevOp;\n if (!commandEvent) {\n this.previousCommand = null;\n }\n };\n Editor.prototype.onEndOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false) {\n this.curOp = null;\n return;\n }\n this._signal(\"beforeEndOperation\");\n if (!this.curOp)\n return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n this.$lastSel = this.session.selection.toJSON();\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n Editor.prototype.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas)\n return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n this.mergeNextCommand = true;\n }\n else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n if (this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n }\n else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n Editor.prototype.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n Editor.prototype.setSession = function (session) {\n if (this.session == session)\n return;\n if (this.curOp)\n this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.session.off(\"startOperation\", this.$onStartOperation);\n this.session.off(\"endOperation\", this.$onEndOperation);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.$onStartOperation = this.onStartOperation.bind(this);\n this.session.on(\"startOperation\", this.$onStartOperation);\n this.$onEndOperation = this.onEndOperation.bind(this);\n this.session.on(\"endOperation\", this.$onEndOperation);\n this.onChangeMode();\n this.onCursorChange();\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n }\n else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n session && session._signal(\"changeEditor\", { editor: this });\n if (session && !session.destroyed)\n session.bgTokenizer.scheduleStart();\n };\n Editor.prototype.getSession = function () {\n return this.session;\n };\n Editor.prototype.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n return val;\n };\n Editor.prototype.getValue = function () {\n return this.session.getValue();\n };\n Editor.prototype.getSelection = function () {\n return this.selection;\n };\n Editor.prototype.resize = function (force) {\n this.renderer.onResize(force);\n };\n Editor.prototype.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n Editor.prototype.getTheme = function () {\n return this.renderer.getTheme();\n };\n Editor.prototype.setStyle = function (style) {\n this.renderer.setStyle(style);\n };\n Editor.prototype.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n Editor.prototype.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n Editor.prototype.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n Editor.prototype.$highlightBrackets = function () {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || session.destroyed)\n return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function (id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var pos = self.getCursorPosition();\n var handler = self.getKeyboardHandler();\n var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self);\n var ranges = session.getMatchingBracketRanges(pos, isBackwards);\n if (!ranges) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n var tagNamesRanges = session.getMatchingTags(pos);\n if (tagNamesRanges) {\n ranges = [\n tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName,\n tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName\n ];\n }\n }\n }\n if (!ranges && session.$mode.getMatching)\n ranges = session.$mode.getMatching(self.session);\n if (!ranges) {\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n return;\n }\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n }\n else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function (range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n }, 50);\n };\n Editor.prototype.focus = function () {\n this.textInput.focus();\n };\n Editor.prototype.isFocused = function () {\n return this.textInput.isFocused();\n };\n Editor.prototype.blur = function () {\n this.textInput.blur();\n };\n Editor.prototype.onFocus = function (e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n Editor.prototype.onBlur = function (e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n Editor.prototype.$cursorChange = function () {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$updateHighlightActiveLine();\n };\n Editor.prototype.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n Editor.prototype.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n Editor.prototype.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n Editor.prototype.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n Editor.prototype.onCursorChange = function () {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n }\n else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n }\n else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n Editor.prototype.onSelectionChange = function (e) {\n var session = this.session;\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n }\n else {\n this.$updateHighlightActiveLine();\n }\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n return re;\n };\n Editor.prototype.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n Editor.prototype.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n Editor.prototype.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n Editor.prototype.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n Editor.prototype.onChangeMode = function (e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n Editor.prototype.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n Editor.prototype.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n Editor.prototype.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n Editor.prototype.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n Editor.prototype.getCopyText = function () {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine = false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = { text: text };\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n Editor.prototype.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n Editor.prototype.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n Editor.prototype.onPaste = function (text, event) {\n var e = { text: text, event: event };\n this.commands.exec(\"paste\", this, e);\n };\n Editor.prototype.$handlePaste = function (e) {\n if (typeof e == \"string\")\n e = { text: e };\n this._signal(\"paste\", e);\n var text = e.text;\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n }\n else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function (range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n }\n else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n session.insert(range.start, lines[i]);\n }\n }\n };\n Editor.prototype.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n Editor.prototype.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n }\n }\n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n }\n else { // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n Editor.prototype.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n var ranges = this.selection.isEmpty()\n ? [new Range(0, 0, session.doc.getLength() - 1, 0)]\n : this.selection.getAllRanges();\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var tab = session.getTabString();\n for (var i = 0; i < ranges.length; i++) {\n var startRow = ranges[i].start.row;\n var endRow = ranges[i].end.row;\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n var line = session.getLine(row);\n var currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n var range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({ row: row, column: 0 }, lineIndent);\n }\n }\n mode.autoOutdent(prevLineState, session, row);\n }\n }\n };\n Editor.prototype.onTextInput = function (text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n this.startOperation({ command: { name: \"insertstring\" } });\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n Editor.prototype.applyComposition = function (text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n Editor.prototype.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n Editor.prototype.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n Editor.prototype.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n Editor.prototype.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n Editor.prototype.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n Editor.prototype.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n Editor.prototype.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n Editor.prototype.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n Editor.prototype.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n Editor.prototype.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n Editor.prototype.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n Editor.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n Editor.prototype.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n Editor.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n Editor.prototype.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n Editor.prototype.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n Editor.prototype.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n Editor.prototype.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n Editor.prototype.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n Editor.prototype.setHighlightIndentGuides = function (highlight) {\n this.renderer.setHighlightIndentGuides(highlight);\n };\n Editor.prototype.getHighlightIndentGuides = function () {\n return this.renderer.getHighlightIndentGuides();\n };\n Editor.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n Editor.prototype.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n Editor.prototype.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n Editor.prototype.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n Editor.prototype.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n Editor.prototype.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n Editor.prototype.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n Editor.prototype.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n Editor.prototype.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n Editor.prototype.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n Editor.prototype.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n Editor.prototype.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n Editor.prototype.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n Editor.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n Editor.prototype.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.removeWordRight = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeWordLeft = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineStart = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineEnd = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n Editor.prototype.setGhostText = function (text, position) {\n if (!this.session.widgetManager) {\n this.session.widgetManager = new LineWidgets(this.session);\n this.session.widgetManager.attach(this);\n }\n this.renderer.setGhostText(text, position);\n };\n Editor.prototype.removeGhostText = function () {\n if (!this.session.widgetManager)\n return;\n this.renderer.removeGhostText();\n };\n Editor.prototype.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n }\n else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n Editor.prototype.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n }\n else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n Editor.prototype.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n Editor.prototype.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n Editor.prototype.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase())\n return -1;\n if (a.toLowerCase() > b.toLowerCase())\n return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n Editor.prototype.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n Editor.prototype.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n Editor.prototype.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n return null;\n };\n Editor.prototype.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n }\n else {\n amount *= Math.pow(10, nr.end - column);\n }\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n }\n else {\n this.toggleWord();\n }\n };\n Editor.prototype.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0)\n delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n }\n else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n Editor.prototype.findLinkAt = function (row, column) {\n var e_1, _a;\n var line = this.session.getLine(row);\n var wordParts = line.split(/((?:https?|ftp):\\/\\/[\\S]+)/);\n var columnPosition = column;\n if (columnPosition < 0)\n columnPosition = 0;\n var previousPosition = 0, currentPosition = 0, match;\n try {\n for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) {\n var item = wordParts_1_1.value;\n currentPosition = previousPosition + item.length;\n if (columnPosition >= previousPosition && columnPosition <= currentPosition) {\n if (item.match(/((?:https?|ftp):\\/\\/[\\S]+)/)) {\n match = item.replace(/[\\s:.,'\";}\\]]+$/, \"\");\n break;\n }\n }\n previousPosition = currentPosition;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return match;\n };\n Editor.prototype.openLink = function () {\n var cursor = this.selection.getCursor();\n var url = this.findLinkAt(cursor.row, cursor.column);\n if (url)\n window.open(url, '_blank');\n return url != null;\n };\n Editor.prototype.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n Editor.prototype.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n }\n else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range));\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n Editor.prototype.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n Editor.prototype.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n Editor.prototype.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n Editor.prototype.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n Editor.prototype.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n Editor.prototype.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1)\n moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n }\n else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff)\n ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1)\n rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy)\n diff = 0;\n totalDiff += diff;\n }\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n Editor.prototype.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n Editor.prototype.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n Editor.prototype.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n Editor.prototype.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n Editor.prototype.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n Editor.prototype.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n Editor.prototype.isRowVisible = function (row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n Editor.prototype.isRowFullyVisible = function (row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n Editor.prototype.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n Editor.prototype.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n }\n else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n Editor.prototype.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n Editor.prototype.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n Editor.prototype.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n Editor.prototype.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n Editor.prototype.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n Editor.prototype.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n Editor.prototype.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n Editor.prototype.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n Editor.prototype.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n Editor.prototype.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n Editor.prototype.getSelectionRange = function () {\n return this.selection.getRange();\n };\n Editor.prototype.selectAll = function () {\n this.selection.selectAll();\n };\n Editor.prototype.clearSelection = function () {\n this.selection.clearSelection();\n };\n Editor.prototype.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n Editor.prototype.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n Editor.prototype.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var tokenCount = 0;\n if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n prevToken = iterator.stepBackward();\n }\n var token = prevToken || iterator.stepForward();\n if (!token)\n return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n if (prevToken.value === '<' && tokenCount > 1) {\n depth[token.value]++;\n }\n else if (prevToken.value === '</') {\n depth[token.value]--;\n }\n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n if (!found) {\n prevToken = token;\n tokenCount++;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n if (!matchType)\n return;\n var range, pos;\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n if (!range) {\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1);\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column)\n < 2)\n range = this.session.getBracketRange(pos);\n }\n }\n else if (matchType === 'tag') {\n if (!token || token.type.indexOf('tag-name') === -1)\n return;\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2);\n if (range.compare(cursor.row, cursor.column) === 0) {\n var tagsRanges = this.session.getMatchingTags(cursor);\n if (tagsRanges) {\n if (tagsRanges.openTag.contains(cursor.row, cursor.column)) {\n range = tagsRanges.closeTag;\n pos = range.start;\n }\n else {\n range = tagsRanges.openTag;\n if (tagsRanges.closeTag.start.row === cursor.row && tagsRanges.closeTag.start.column\n === cursor.column)\n pos = range.end;\n else\n pos = range.start;\n }\n }\n }\n pos = pos || range.start;\n }\n pos = range && range.cursor || pos;\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n }\n else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n }\n else {\n this.selection.selectTo(pos.row, pos.column);\n }\n }\n else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n Editor.prototype.gotoLine = function (lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({ row: lineNumber - 1, column: column || 0 });\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n if (!this.isRowFullyVisible(lineNumber - 1))\n this.scrollToLine(lineNumber - 1, true, animate);\n };\n Editor.prototype.navigateTo = function (row, column) {\n this.selection.moveTo(row, column);\n };\n Editor.prototype.navigateUp = function (times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n Editor.prototype.navigateDown = function (times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n Editor.prototype.navigateLeft = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n this.clearSelection();\n };\n Editor.prototype.navigateRight = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n this.clearSelection();\n };\n Editor.prototype.navigateLineStart = function () {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n Editor.prototype.navigateLineEnd = function () {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n Editor.prototype.navigateFileEnd = function () {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n Editor.prototype.navigateFileStart = function () {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n Editor.prototype.navigateWordRight = function () {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n Editor.prototype.navigateWordLeft = function () {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n Editor.prototype.replace = function (replacement, options) {\n if (options)\n this.$search.set(options);\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range)\n return replaced;\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n return replaced;\n };\n Editor.prototype.replaceAll = function (replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length)\n return replaced;\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n for (var i = ranges.length - 1; i >= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n Editor.prototype.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n }\n else {\n return null;\n }\n };\n Editor.prototype.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n Editor.prototype.find = function (needle, options, animate) {\n if (!options)\n options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({ needle: needle });\n }\n this.$search.set(options);\n if (!options.start)\n this.$search.set({ start: range });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n Editor.prototype.findNext = function (options, animate) {\n this.find({ skipCurrent: true, backwards: false }, options, animate);\n };\n Editor.prototype.findPrevious = function (options, animate) {\n this.find(options, { skipCurrent: true, backwards: true }, animate);\n };\n Editor.prototype.revealRange = function (range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.destroy = function () {\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function (el) {\n el.destroy();\n });\n this.$toDestroy = null;\n }\n if (this.$mouseHandler)\n this.$mouseHandler.destroy();\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n Editor.prototype.setAutoScrollEditorIntoView = function (enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n }\n else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n }\n else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n Editor.prototype.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n Editor.prototype.prompt = function (message, options, callback) {\n var editor = this;\n config.loadModule(\"ace/ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n return Editor;\n}());\nEditor.$uid = 0;\nEditor.prototype.curOp = null;\nEditor.prototype.prevOp = {};\nEditor.prototype.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\nEditor.prototype.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n];\noop.implement(Editor.prototype, EventEmitter);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function (style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", { data: style });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function () { this.$updateHighlightActiveLine(); },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function (shouldHighlight) { this.$onSelectionChange(); },\n initialValue: true\n },\n readOnly: {\n set: function (readOnly) {\n this.textInput.setReadOnly(readOnly);\n this.$resetCursorStyle();\n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function (value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function (val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: { initialValue: true },\n wrapBehavioursEnabled: { initialValue: true },\n enableAutoIndent: { initialValue: true },\n autoScrollEditorIntoView: {\n set: function (val) { this.setAutoScrollEditorIntoView(val); }\n },\n keyboardHandler: {\n set: function (val) { this.setKeyboardHandler(val); },\n get: function () { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function (val) { this.session.setValue(val); },\n get: function () { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function (val) { this.setSession(val); },\n get: function () { return this.session; },\n handlesSet: true,\n hidden: true\n },\n showLineNumbers: {\n set: function (show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function (value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function (message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function () {\n var hasValue = this.session && (this.renderer.$composition ||\n this.session.getLength() > 1 || this.session.getLine(0).length > 0);\n if (hasValue && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n }\n else if (!hasValue && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n }\n else if (!hasValue && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n enableKeyboardAccessibility: {\n set: function (value) {\n var blurCommand = {\n name: \"blurTextInput\",\n description: \"Set focus to the editor content div to allow tabbing through the page\",\n bindKey: \"Esc\",\n exec: function (editor) {\n editor.blur();\n editor.renderer.scroller.focus();\n },\n readOnly: true\n };\n var focusOnEnterKeyup = function (e) {\n if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) {\n e.preventDefault();\n var row = this.getCursorPosition().row;\n if (!this.isRowVisible(row))\n this.scrollToLine(row, true, true);\n this.focus();\n }\n };\n var gutterKeyboardHandler;\n if (value) {\n this.renderer.enableKeyboardAccessibility = true;\n this.renderer.keyboardFocusClassName = \"ace_keyboard-focus\";\n this.textInput.getElement().setAttribute(\"tabindex\", -1);\n this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0);\n this.renderer.scroller.setAttribute(\"tabindex\", 0);\n this.renderer.scroller.setAttribute(\"role\", \"group\");\n this.renderer.scroller.setAttribute(\"aria-roledescription\", nls(\"editor.scroller.aria-roledescription\", \"editor\"));\n this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.setAttribute(\"aria-label\", nls(\"editor.scroller.aria-label\", \"Editor content, press Enter to start editing, press Escape to exit\"));\n this.renderer.scroller.addEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.addCommand(blurCommand);\n this.renderer.$gutter.setAttribute(\"tabindex\", 0);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", false);\n this.renderer.$gutter.setAttribute(\"role\", \"group\");\n this.renderer.$gutter.setAttribute(\"aria-roledescription\", nls(\"editor.gutter.aria-roledescription\", \"editor\"));\n this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"editor.gutter.aria-label\", \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\"));\n this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.content.setAttribute(\"aria-hidden\", true);\n if (!gutterKeyboardHandler)\n gutterKeyboardHandler = new GutterKeyboardHandler(this);\n gutterKeyboardHandler.addListener();\n this.textInput.setAriaOptions({\n setLabel: true\n });\n }\n else {\n this.renderer.enableKeyboardAccessibility = false;\n this.textInput.getElement().setAttribute(\"tabindex\", 0);\n this.textInput.setNumberOfExtraLines(0);\n this.renderer.scroller.setAttribute(\"tabindex\", -1);\n this.renderer.scroller.removeAttribute(\"role\");\n this.renderer.scroller.removeAttribute(\"aria-roledescription\");\n this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.removeAttribute(\"aria-label\");\n this.renderer.scroller.removeEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.removeCommand(blurCommand);\n this.renderer.content.removeAttribute(\"aria-hidden\");\n this.renderer.$gutter.setAttribute(\"tabindex\", -1);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", true);\n this.renderer.$gutter.removeAttribute(\"role\");\n this.renderer.$gutter.removeAttribute(\"aria-roledescription\");\n this.renderer.$gutter.removeAttribute(\"aria-label\");\n this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName);\n if (gutterKeyboardHandler)\n gutterKeyboardHandler.removeListener();\n }\n },\n initialValue: false\n },\n textInputAriaLabel: {\n set: function (val) { this.$textInputAriaLabel = val; },\n initialValue: \"\"\n },\n enableMobileMenu: {\n set: function (val) { this.$enableMobileMenu = val; },\n initialValue: true\n },\n customScrollbar: \"renderer\",\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n highlightIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n useResizeObserver: \"renderer\",\n useSvgGutterIcons: \"renderer\",\n showFoldedAnnotations: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\nvar relativeNumberRenderer = {\n getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, /**@type{number}*/ lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, /**@type{Editor}*/ editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (/**@type{Editor}*/ editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (/**@type{Editor}*/ editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = /** @class */ (function () {\n function Lines(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n }\n Lines.prototype.moveContainer = function (config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n Lines.prototype.pageChanged = function (oldConfig, newConfig) {\n return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n };\n Lines.prototype.computeLineTop = function (row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n Lines.prototype.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n Lines.prototype.getLength = function () {\n return this.cells.length;\n };\n Lines.prototype.get = function (index) {\n return this.cells[index];\n };\n Lines.prototype.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n Lines.prototype.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n Lines.prototype.push = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n this.element.appendChild(fragment);\n }\n else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n Lines.prototype.unshift = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n if (this.element.firstChild)\n this.element.insertBefore(fragment, this.element.firstChild);\n else\n this.element.appendChild(fragment);\n }\n else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n Lines.prototype.last = function () {\n if (this.cells.length)\n return this.cells[this.cells.length - 1];\n else\n return null;\n };\n Lines.prototype.$cacheCell = function (cell) {\n if (!cell)\n return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n Lines.prototype.createCell = function (row, config, session, initElement) {\n var cell = this.cellCache.pop();\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement)\n initElement(element);\n this.element.appendChild(element);\n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n cell.row = row;\n return cell;\n };\n return Lines;\n}());\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar nls = require(\"../config\").nls;\nvar Gutter = /** @class */ (function () {\n function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n }\n Gutter.prototype.setSession = function (session) {\n if (this.session)\n this.session.off(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n Gutter.prototype.addGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n Gutter.prototype.removeGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n Gutter.prototype.setAnnotations = function (annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] };\n var annoText = annotation.text;\n var displayAnnoText = annotation.text;\n var annoType = annotation.type;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) {\n rowInfo.text.push(annoText);\n rowInfo.type.push(annoType);\n rowInfo.displayText.push(displayAnnoText);\n }\n var className = annotation.className;\n if (className) {\n rowInfo.className = className;\n }\n else if (annoType === \"error\") {\n rowInfo.className = \" ace_error\";\n }\n else if (annoType === \"security\" && !/\\bace_error\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_security\";\n }\n else if (annoType === \"warning\" && !/\\bace_(error|security)\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_warning\";\n }\n else if (annoType === \"info\" && !rowInfo.className) {\n rowInfo.className = \" ace_info\";\n }\n else if (annoType === \"hint\" && !rowInfo.className) {\n rowInfo.className = \" ace_hint\";\n }\n }\n };\n Gutter.prototype.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n }\n else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n }\n else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n Gutter.prototype.update = function (config) {\n this.config = config;\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n this.oldLastRow = lastRow;\n this.config = config;\n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1)\n this.$lines.pop();\n break;\n }\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n }\n else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$updateGutterWidth = function (config) {\n var session = this.session;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n var gutterWidth = gutterRenderer\n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth; (this.element.parentNode).style.width =\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n Gutter.prototype.$updateCursorRow = function () {\n if (!this.$highlightGutterLine)\n return;\n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n this.$cursorRow = position.row;\n };\n Gutter.prototype.updateLineHighlight = function () {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n Gutter.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldLastRow > lastRow)\n for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n this.updateLineHighlight();\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$renderLines = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n row++;\n }\n return fragment;\n };\n Gutter.prototype.$renderCell = function (cell, config, fold, row) {\n var element = cell.element;\n var session = this.session;\n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n var annotationNode = element.childNodes[2];\n var annotationIconNode = annotationNode.firstChild;\n var firstLineNumber = session.$firstLineNumber;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n var lineHeight = config.lineHeight + \"px\";\n var className = this.$useSvgGutterIcons ? \"ace_gutter-cell_svg-icons \" : \"ace_gutter-cell \";\n var iconClassName = this.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n var rowText = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row] && row !== foldStart)\n className += this.$annotations[row].className;\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n if (c) {\n var foldClass = \"ace_fold-widget ace_\" + c;\n var isClosedFold = c == \"start\" && row == foldStart && row < fold.end.row;\n if (isClosedFold) {\n foldClass += \" ace_closed\";\n var foldAnnotationClass = \"\";\n var annotationInFold = false;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!this.$annotations[i])\n continue;\n if (this.$annotations[i].className === \" ace_error\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_error_fold\";\n break;\n }\n if (this.$annotations[i].className === \" ace_security\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_security_fold\";\n }\n else if (this.$annotations[i].className === \" ace_warning\" &&\n foldAnnotationClass !== \" ace_security_fold\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_warning_fold\";\n }\n }\n className += foldAnnotationClass;\n }\n else\n foldClass += \" ace_open\";\n if (foldWidget.className != foldClass)\n foldWidget.className = foldClass;\n dom.setStyle(foldWidget.style, \"height\", lineHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n foldWidget.setAttribute(\"role\", \"button\");\n foldWidget.setAttribute(\"tabindex\", \"-1\");\n var foldRange = session.getFoldWidgetRange(row);\n if (foldRange)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.range.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n foldRange.start.row + 1,\n foldRange.end.row + 1\n ]));\n else {\n if (fold)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.closed.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n fold.start.row + 1,\n fold.end.row + 1\n ]));\n else\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.open.aria-label\", \"Toggle code folding, row $0\", [row + 1]));\n }\n if (isClosedFold) {\n foldWidget.setAttribute(\"aria-expanded\", \"false\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.closed.title\", \"Unfold code\"));\n }\n else {\n foldWidget.setAttribute(\"aria-expanded\", \"true\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.open.title\", \"Fold code\"));\n }\n }\n else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n foldWidget.setAttribute(\"tabindex\", \"0\");\n foldWidget.removeAttribute(\"role\");\n foldWidget.removeAttribute(\"aria-label\");\n }\n }\n if (annotationInFold && this.$showFoldedAnnotations) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n annotationIconNode.className += foldAnnotationClass;\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (foldAnnotationClass) {\n case \" ace_error_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else if (this.$annotations[row]) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n if (this.$useSvgGutterIcons)\n annotationIconNode.className += this.$annotations[row].className;\n else\n element.classList.add(this.$annotations[row].className.replace(\" \", \"\"));\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (this.$annotations[row].className) {\n case \" ace_error\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n case \" ace_info\":\n ariaLabel = nls(\"gutter.annotation.aria-label.info\", \"Info, read annotations row $0\", [rowText]);\n break;\n case \" ace_hint\":\n ariaLabel = nls(\"gutter.annotation.aria-label.hint\", \"Suggestion, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else {\n dom.setStyle(annotationNode.style, \"display\", \"none\");\n annotationNode.removeAttribute(\"aria-label\");\n annotationNode.removeAttribute(\"role\");\n annotationNode.setAttribute(\"tabindex\", \"0\");\n }\n if (rowText !== textNode.data) {\n textNode.data = rowText;\n }\n if (element.className != className)\n element.className = className;\n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n cell.text = rowText;\n if (annotationNode.style.display === \"none\" && foldWidget.style.display === \"none\")\n cell.element.setAttribute(\"aria-hidden\", true);\n else\n cell.element.setAttribute(\"aria-hidden\", false);\n return cell;\n };\n Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n Gutter.prototype.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function () { return 0; },\n getText: function () { return \"\"; }\n };\n };\n Gutter.prototype.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n Gutter.prototype.setShowFoldWidgets = function (show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n Gutter.prototype.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n Gutter.prototype.$computePadding = function () {\n if (!this.element.firstChild)\n return { left: 0, right: 0 };\n var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild));\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n Gutter.prototype.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n return Gutter;\n}());\nGutter.prototype.$fixedWidth = false;\nGutter.prototype.$highlightGutterLine = true;\nGutter.prototype.$renderer = \"\";\nGutter.prototype.$showLineNumbers = true;\nGutter.prototype.$showFoldWidgets = true;\noop.implement(Gutter.prototype, EventEmitter);\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n var annotationNode = dom.createElement(\"span\");\n element.appendChild(annotationNode);\n var annotationIconNode = dom.createElement(\"span\");\n annotationNode.appendChild(annotationIconNode);\n return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = /** @class */ (function () {\n function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n }\n Marker.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Marker.prototype.setSession = function (session) {\n this.session = session;\n };\n Marker.prototype.setMarkers = function (markers) {\n this.markers = markers;\n };\n Marker.prototype.elt = function (className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n }\n else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n Marker.prototype.update = function (config) {\n if (!config)\n return;\n this.config = config;\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty())\n continue;\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n }\n else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n }\n else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n }\n else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n }\n else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i != -1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n Marker.prototype.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n }\n else {\n this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:\" + padding + \"px;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n }\n else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n \"right:\" + padding + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + (selection.width + (extraLength || 0)) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n }, this);\n };\n Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n return Marker;\n}());\nMarker.prototype.$padding = 0;\nfunction getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n}\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text_util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className.\nvar textTokens = new Set([\"text\", \"rparen\", \"lparen\"]);\nexports.isTextToken = function (tokenType) {\n return textTokens.has(tokenType);\n};\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\",\"ace/config\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar nls = require(\"../config\").nls;\nvar isTextToken = require(\"./text_util\").isTextToken;\nvar Text = /** @class */ (function () {\n function Text(parentEl) {\n this.dom = dom;\n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n }\n Text.prototype.$updateEolChar = function () {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n Text.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n Text.prototype.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n Text.prototype.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n Text.prototype.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", \n function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n Text.prototype.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n Text.prototype.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n Text.prototype.setSession = function (session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n Text.prototype.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n }\n else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n Text.prototype.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display)\n return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n Text.prototype.setHighlightIndentGuides = function (highlight) {\n if (this.$highlightIndentGuides === highlight)\n return false;\n this.$highlightIndentGuides = highlight;\n return highlight;\n };\n Text.prototype.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize; var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n }\n else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs\n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n Text.prototype.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n }\n else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx++;\n }\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > last)\n break; var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n Text.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldConfig.lastRow > config.lastRow)\n for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n this.$highlightIndentGuide();\n };\n Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var line = this.$lines.createCell(row, config, this.session);\n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n }\n else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n row++;\n }\n return fragment;\n };\n Text.prototype.update = function (config) {\n this.$lines.moveContainer(config);\n this.config = config;\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n Text.prototype.$renderToken = function (parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069\\u2060\\u2061\\u2062\\u2063\\u2064\\u206A\\u206B\\u206B\\u206C\\u206D\\u206E\\u206F]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n var valueFragment = this.dom.createFragment(this.element);\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n if (!self.showSpaces && simpleSpace)\n continue;\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n i = m.index + m[0].length;\n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n screenColumn += tabSize - 1;\n }\n else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n }\n else {\n valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element));\n }\n }\n else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n }\n else if (cjkSpace) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n }\n else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n if (!isTextToken(token.type)) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\") {\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n span.setAttribute(\"title\", nls(\"inline-fold.closed.title\", \"Unfold code\"));\n }\n span.className = classes;\n span.appendChild(valueFragment);\n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n return screenColumn + value.length;\n };\n Text.prototype.renderIndentGuide = function (parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols / this.tabSize;\n for (var i = 0; i < count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n else if (value[0] == \"\\t\") {\n for (var i = 0; i < cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n this.$highlightIndentGuide();\n return value;\n };\n Text.prototype.$highlightIndentGuide = function () {\n if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n return;\n this.$highlightIndentGuideMarker = {\n indentLevel: undefined,\n start: undefined,\n end: undefined,\n dir: undefined\n };\n var lines = this.session.doc.$lines;\n if (!lines)\n return;\n var cursor = this.session.selection.getCursor();\n var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n this.$highlightIndentGuideMarker = {\n indentLevel: elementIndentLevel,\n start: cursor.row\n };\n var bracketHighlight = this.session.$bracketHighlight;\n if (bracketHighlight) {\n var ranges = this.session.$bracketHighlight.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (cursor.row !== ranges[i].start.row) {\n this.$highlightIndentGuideMarker.end = ranges[i].start.row;\n if (cursor.row > ranges[i].start.row) {\n this.$highlightIndentGuideMarker.dir = -1;\n }\n else {\n this.$highlightIndentGuideMarker.dir = 1;\n }\n break;\n }\n }\n }\n if (!this.$highlightIndentGuideMarker.end) {\n if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n this.$highlightIndentGuideMarker.dir = 1;\n for (var i = cursor.row + 1; i < lines.length; i++) {\n var line = lines[i];\n var currentIndent = /^\\s*/.exec(line)[0].length;\n if (line !== '') {\n this.$highlightIndentGuideMarker.end = i;\n if (currentIndent <= initialIndent)\n break;\n }\n }\n }\n }\n this.$renderHighlightIndentGuide();\n };\n Text.prototype.$clearActiveIndentGuide = function () {\n var cells = this.$lines.cells;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var childNodes = cell.element.childNodes;\n if (childNodes.length > 0) {\n for (var j = 0; j < childNodes.length; j++) {\n if (childNodes[j].classList && childNodes[j].classList.contains(\"ace_indent-guide-active\")) {\n childNodes[j].classList.remove(\"ace_indent-guide-active\");\n break;\n }\n }\n }\n }\n };\n Text.prototype.$setIndentGuideActive = function (cell, indentLevel) {\n var line = this.session.doc.getLine(cell.row);\n if (line !== \"\") {\n var childNodes = cell.element.childNodes;\n if (childNodes) {\n var node = childNodes[indentLevel - 1];\n if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n node.classList.add(\"ace_indent-guide-active\");\n }\n }\n };\n Text.prototype.$renderHighlightIndentGuide = function () {\n if (!this.$lines)\n return;\n var cells = this.$lines.cells;\n this.$clearActiveIndentGuide();\n var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n if (indentLevel !== 0) {\n if (this.$highlightIndentGuideMarker.dir === 1) {\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n + 1) {\n if (cell.row >= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n else {\n for (var i = cells.length - 1; i >= 0; i--) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n if (cell.row <= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n }\n };\n Text.prototype.$createLineElement = function (parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n return lineEl;\n };\n Text.prototype.$renderWrappedLine = function (parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(lineEl, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n }\n else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n split++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n }\n }\n }\n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n Text.prototype.$renderSimpleLine = function (parent, tokens) {\n var screenColumn = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n value = this.renderIndentGuide(parent, value);\n if (!value)\n continue;\n }\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"<hide>\" : \"<click to see more...>\";\n parent.appendChild(overflowEl);\n };\n Text.prototype.$renderLine = function (parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n }\n else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n }\n else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n lastLineEl.appendChild(invisibleEl);\n }\n };\n Text.prototype.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\n }\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n }\n else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n var tokens = session.getTokens(row);\n foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n }\n else {\n if (isNewRow)\n tokens = session.getTokens(row);\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n Text.prototype.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n return Text;\n}());\nText.prototype.EOF_CHAR = \"\\xB6\";\nText.prototype.EOL_CHAR_LF = \"\\xAC\";\nText.prototype.EOL_CHAR_CRLF = \"\\xa4\";\nText.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF;\nText.prototype.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\nText.prototype.SPACE_CHAR = \"\\xB7\";\nText.prototype.$padding = 0;\nText.prototype.MAX_LINE_LENGTH = 10000;\nText.prototype.showInvisibles = false;\nText.prototype.showSpaces = false;\nText.prototype.showTabs = false;\nText.prototype.showEOL = false;\nText.prototype.displayIndentGuides = true;\nText.prototype.$highlightIndentGuides = true;\nText.prototype.$tabStrings = [];\nText.prototype.destroy = {};\nText.prototype.onChangeTabSize = Text.prototype.$computeTabString;\noop.implement(Text.prototype, EventEmitter);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = /** @class */ (function () {\n function Cursor(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n }\n Cursor.prototype.$updateOpacity = function (val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n Cursor.prototype.$startCssAnimation = function () {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n this.$isAnimating = true;\n setTimeout(function () {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n Cursor.prototype.$stopCssAnimation = function () {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n Cursor.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Cursor.prototype.setSession = function (session) {\n this.session = session;\n };\n Cursor.prototype.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n Cursor.prototype.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n Cursor.prototype.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n Cursor.prototype.addCursor = function () {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n Cursor.prototype.removeCursor = function () {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n Cursor.prototype.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n update(true);\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function () {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n }\n else {\n var blink = /**@this{Cursor}*/ function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n Cursor.prototype.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session)\n return { left: 0, top: 0 };\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n return { left: cursorLeft, top: cursorTop };\n };\n Cursor.prototype.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n Cursor.prototype.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n if (selections === undefined || selections.length === 0) {\n selections = [{ cursor: null }];\n }\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n }\n else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n }\n else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n Cursor.prototype.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n Cursor.prototype.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n return Cursor;\n}());\nCursor.prototype.$padding = 0;\nCursor.prototype.drawCursor = null;\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar Scrollbar = /** @class */ (function () {\n function Scrollbar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n }\n Scrollbar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return Scrollbar;\n}());\noop.implement(Scrollbar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n renderer.$scrollbarWidth =\n _this.width = dom.scrollbarWidth(parent.ownerDocument);\n _this.inner.style.width =\n _this.element.style.width = (_this.width || 15) + 5 + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n this.skipEvent = false;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollHeight = function (height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n }\n else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n return VScrollBar;\n}(Scrollbar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.height = renderer.$scrollbarWidth;\n _this.inner.style.height =\n _this.element.style.height = (_this.height || 15) + 5 + \"px\";\n return _this;\n }\n HScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n this.skipEvent = false;\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n HScrollBar.prototype.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n return HScrollBar;\n}(Scrollbar));\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n position: absolute;\\n background: rgba(128, 128, 128, 0.6);\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n border: 1px solid #bbb;\\n border-radius: 2px;\\n z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n position: absolute;\\n z-index: 6;\\n background: none;\\n overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n z-index: 6;\\n right: 0;\\n top: 0;\\n width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n z-index: 8;\\n right: 0;\\n width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n bottom: 0;\\n left: 0;\\n height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n bottom: 0;\\n height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n z-index: 8;\\n background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = /** @class */ (function () {\n function ScrollBar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_sb\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"\";\n this.element.appendChild(this.inner);\n this.VScrollWidth = 12;\n this.HScrollHeight = 12;\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n }\n ScrollBar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return ScrollBar;\n}());\noop.implement(ScrollBar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n _this.parent = parent;\n _this.width = _this.VScrollWidth;\n _this.renderer = renderer;\n _this.inner.style.width = _this.element.style.width = (_this.width || 15) + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageY = e.clientY;\n var onMouseMove = function (e) {\n mousePageY = e.clientY;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startY = e.clientY;\n var startTop = this.thumbTop;\n var onScrollInterval = function () {\n if (mousePageY === undefined)\n return;\n var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n if (scrollTop === self.scrollTop)\n return;\n self._emit(\"scroll\", { data: scrollTop });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n return event.preventDefault(e);\n };\n VScrollBar.prototype.getHeight = function () {\n return this.height;\n };\n VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) {\n var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n scrollTop = scrollTop >> 0;\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n else if (scrollTop > this.pageHeight - this.viewHeight) {\n scrollTop = this.pageHeight - this.viewHeight;\n }\n return scrollTop;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.height = Math.max(0, height);\n this.slideHeight = this.height;\n this.viewHeight = this.height;\n this.setScrollHeight(this.pageHeight, true);\n };\n VScrollBar.prototype.setScrollHeight = function (height, force) {\n if (this.pageHeight === height && !force)\n return;\n this.pageHeight = height;\n this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n if (this.thumbHeight > this.slideHeight)\n this.thumbHeight = this.slideHeight;\n if (this.thumbHeight < 15)\n this.thumbHeight = 15;\n this.inner.style.height = this.thumbHeight + \"px\";\n if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n this.scrollTop = (this.pageHeight - this.viewHeight);\n if (this.scrollTop < 0)\n this.scrollTop = 0;\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n this.scrollTop = scrollTop;\n if (scrollTop < 0)\n scrollTop = 0;\n this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n this.inner.style.top = this.thumbTop + \"px\";\n };\n return VScrollBar;\n}(ScrollBar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.scrollWidth = 0;\n _this.height = _this.HScrollHeight;\n _this.inner.style.height = _this.element.style.height = (_this.height || 12) + \"px\";\n _this.renderer = renderer;\n return _this;\n }\n HScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageX = e.clientX;\n var onMouseMove = function (e) {\n mousePageX = e.clientX;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startX = e.clientX;\n var startLeft = this.thumbLeft;\n var onScrollInterval = function () {\n if (mousePageX === undefined)\n return;\n var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n if (scrollLeft === self.scrollLeft)\n return;\n self._emit(\"scroll\", { data: scrollLeft });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n return event.preventDefault(e);\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) {\n var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n scrollLeft = scrollLeft >> 0;\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n else if (scrollLeft > this.pageWidth - this.viewWidth) {\n scrollLeft = this.pageWidth - this.viewWidth;\n }\n return scrollLeft;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.width = Math.max(0, width);\n this.element.style.width = this.width + \"px\";\n this.slideWidth = this.width;\n this.viewWidth = this.width;\n this.setScrollWidth(this.pageWidth, true);\n };\n HScrollBar.prototype.setScrollWidth = function (width, force) {\n if (this.pageWidth === width && !force)\n return;\n this.pageWidth = width;\n this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n if (this.thumbWidth > this.slideWidth)\n this.thumbWidth = this.slideWidth;\n if (this.thumbWidth < 15)\n this.thumbWidth = 15;\n this.inner.style.width = this.thumbWidth + \"px\";\n if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n this.scrollLeft = (this.pageWidth - this.viewWidth);\n if (this.scrollLeft < 0)\n this.scrollLeft = 0;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n this.scrollLeft = scrollLeft;\n if (scrollLeft < 0)\n scrollLeft = 0;\n this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n this.inner.style.left = (this.thumbLeft) + \"px\";\n };\n return HScrollBar;\n}(ScrollBar));\nHScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth;\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = /** @class */ (function () {\n function RenderLoop(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function (ts) {\n _self.pending = false;\n var changes = _self.changes;\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n if (_self.changes) {\n if (_self.$recursionLimit-- < 0)\n return;\n _self.schedule();\n }\n else {\n _self.$recursionLimit = 2;\n }\n };\n }\n RenderLoop.prototype.schedule = function (change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n RenderLoop.prototype.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n return RenderLoop;\n}());\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 512;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = /** @class */ (function () {\n function FontMetrics(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = { width: 0, height: 0 };\n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n }\n FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n }\n else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n FontMetrics.prototype.checkForSizeChanges = function (size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", { data: size });\n }\n };\n FontMetrics.prototype.$addObserver = function () {\n var self = this;\n this.$observer = new window.ResizeObserver(function (e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n FontMetrics.prototype.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n FontMetrics.prototype.setPolling = function (val) {\n if (val) {\n this.$pollSizeChanges();\n }\n else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n FontMetrics.prototype.$measureSizes = function (node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n FontMetrics.prototype.$measureCharWidth = function (ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n FontMetrics.prototype.getCharacterWidth = function (ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n FontMetrics.prototype.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n FontMetrics.prototype.$getZoom = function (element) {\n if (!element || !element.parentElement)\n return 1;\n return (Number(window.getComputedStyle(element)[\"zoom\"]) || 1) * this.$getZoom(element.parentElement);\n };\n FontMetrics.prototype.$initTransformMeasureNodes = function () {\n var t = function (t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n if (!this.els)\n this.$initTransformMeasureNodes();\n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n return FontMetrics;\n}());\nFontMetrics.prototype.$characterSize = { width: 0, height: 0 };\noop.implement(FontMetrics.prototype, EventEmitter);\nexports.FontMetrics = FontMetrics;\n\n});\n\nace.define(\"ace/css/editor-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n styles.push(\".ace_br\" + i + \"{\" + (\n [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n ).map(function(x, j) {\n return i & (1<<j) ? \"border-\" + x + \"-radius: 3px;\" : \"\"\n }).filter(Boolean).join(\" \") + \"}\")\n}\nstyles.join(\"\\\\n\")\n*/\nmodule.exports = \"\\n.ace_br1 {border-top-left-radius : 3px;}\\n.ace_br2 {border-top-right-radius : 3px;}\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\n.ace_br4 {border-bottom-right-radius: 3px;}\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\n.ace_br8 {border-bottom-left-radius : 3px;}\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n\\n\\n.ace_editor {\\n position: relative;\\n overflow: hidden;\\n padding: 0;\\n font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'Source Code Pro', 'source-code-pro', monospace;\\n direction: ltr;\\n text-align: left;\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n forced-color-adjust: none;\\n}\\n\\n.ace_scroller {\\n position: absolute;\\n overflow: hidden;\\n top: 0;\\n bottom: 0;\\n background-color: inherit;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n cursor: text;\\n}\\n\\n.ace_content {\\n position: absolute;\\n box-sizing: border-box;\\n min-width: 100%;\\n contain: style size layout;\\n font-variant-ligatures: no-common-ligatures;\\n}\\n\\n.ace_keyboard-focus:focus {\\n box-shadow: inset 0 0 0 2px #5E9ED6;\\n outline: none;\\n}\\n\\n.ace_dragging .ace_scroller:before{\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n content: '';\\n background: rgba(250, 250, 250, 0.01);\\n z-index: 1000;\\n}\\n.ace_dragging.ace_dark .ace_scroller:before{\\n background: rgba(0, 0, 0, 0.01);\\n}\\n\\n.ace_gutter {\\n position: absolute;\\n overflow : hidden;\\n width: auto;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n cursor: default;\\n z-index: 4;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n contain: style size layout;\\n}\\n\\n.ace_gutter-active-line {\\n position: absolute;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_scroller.ace_scroll-left:after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\n pointer-events: none;\\n}\\n\\n.ace_gutter-cell, .ace_gutter-cell_svg-icons {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n padding-left: 19px;\\n padding-right: 6px;\\n background-repeat: no-repeat;\\n}\\n\\n.ace_gutter-cell_svg-icons .ace_gutter_annotation {\\n margin-left: -14px;\\n float: left;\\n}\\n\\n.ace_gutter-cell .ace_gutter_annotation {\\n margin-left: -19px;\\n float: left;\\n}\\n\\n.ace_gutter-cell.ace_error, .ace_icon.ace_error, .ace_icon.ace_error_fold, .ace_gutter-cell.ace_security, .ace_icon.ace_security, .ace_icon.ace_security_fold {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_warning, .ace_icon.ace_warning, .ace_icon.ace_warning_fold {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_info, .ace_icon.ace_info, .ace_gutter-cell.ace_hint, .ace_icon.ace_hint {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info, .ace_dark .ace_gutter-cell.ace_hint, .ace_dark .ace_icon.ace_hint {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_icon_svg.ace_error {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_security {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iZGFya29yYW5nZSIgZmlsbD0ibm9uZSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdHJva2UtbGluZWpvaW4tcm91bmQiIGQ9Ik04IDE0LjgzMDdDOCAxNC44MzA3IDIgMTIuOTA0NyAyIDguMDg5OTJWMy4yNjU0OEM1LjMxIDMuMjY1NDggNy45ODk5OSAxLjM0OTE4IDcuOTg5OTkgMS4zNDkxOEM3Ljk4OTk5IDEuMzQ5MTggMTAuNjkgMy4yNjU0OCAxNCAzLjI2NTQ4VjguMDg5OTJDMTQgMTIuOTA0NyA4IDE0LjgzMDcgOCAxNC44MzA3WiIvPgogICAgICAgIDxwYXRoIGQ9Ik0yIDguMDg5OTJWMy4yNjU0OEM1LjMxIDMuMjY1NDggNy45ODk5OSAxLjM0OTE4IDcuOTg5OTkgMS4zNDkxOCIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMy45OSA4LjA4OTkyVjMuMjY1NDhDMTAuNjggMy4yNjU0OCA4IDEuMzQ5MTggOCAxLjM0OTE4Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTggNFY5Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTggMTBWMTIiLz4KICAgIDwvZz4KPC9zdmc+\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJkYXJrb3JhbmdlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+Cjxwb2x5Z29uIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiIHBvaW50cz0iOCAxIDE1IDE1IDEgMTUgOCAxIi8+CjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMC4wMSIgaGVpZ2h0PSIwLjAxIi8+CjxsaW5lIHgxPSI4IiB5MT0iNiIgeDI9IjgiIHkyPSIxMCIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n background-color: darkorange;\\n}\\n.ace_icon_svg.ace_info {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJibHVlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjgiIGN5PSI4IiByPSI3IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjxwb2x5bGluZSBwb2ludHM9IjggMTEgOCA4Ii8+Cjxwb2x5bGluZSBwb2ludHM9IjkgOCA2IDgiLz4KPGxpbmUgeDE9IjEwIiB5MT0iMTEiIHgyPSI2IiB5Mj0iMTEiLz4KPHJlY3QgeD0iOCIgeT0iNSIgd2lkdGg9IjAuMDEiIGhlaWdodD0iMC4wMSIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n background-color: royalblue;\\n}\\n.ace_icon_svg.ace_hint {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0ic2lsdmVyIiBmaWxsPSJub25lIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTYgMTRIMTAiLz4KICAgICAgICA8cGF0aCBkPSJNOCAxMUg5QzkgOS40NzAwMiAxMiA4LjU0MDAyIDEyIDUuNzYwMDJDMTIuMDIgNC40MDAwMiAxMS4zOSAzLjM2MDAyIDEwLjQzIDIuNjcwMDJDOSAxLjY0MDAyIDcuMDAwMDEgMS42NDAwMiA1LjU3MDAxIDIuNjcwMDJDNC42MTAwMSAzLjM2MDAyIDMuOTggNC40MDAwMiA0IDUuNzYwMDJDNCA4LjU0MDAyIDcuMDAwMDEgOS40NzAwMiA3LjAwMDAxIDExSDhaIi8+CiAgICA8L2c+Cjwvc3ZnPg==\\\");\\n background-color: silver;\\n}\\n\\n.ace_icon_svg.ace_error_fold {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSI+CiAgPHBhdGggZD0ibSAxOC45Mjk4NTEsNy44Mjk4MDc2IGMgMC4xNDYzNTMsNi4zMzc0NjA0IC02LjMyMzE0Nyw3Ljc3Nzg0NDQgLTcuNDc3OTEyLDcuNzc3ODQ0NCAtMi4xMDcyNzI2LC0wLjEyODc1IDUuMTE3Njc4LDAuMzU2MjQ5IDUuMDUxNjk4LC03Ljg3MDA2MTggLTAuNjA0NjcyLC04LjAwMzk3MzQ5IC03LjA3NzI3MDYsLTcuNTYzMTE4OSAtNC44NTczLC03LjQzMDM5NTU2IDEuNjA2LC0wLjExNTE0MjI1IDYuODk3NDg1LDEuMjYyNTQ1OTYgNy4yODM1MTQsNy41MjI2MTI5NiB6IiBmaWxsPSJjcmltc29uIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0ibSA4LjExNDc1NjIsMi4wNTI5ODI4IGMgMy4zNDkxNjk4LDAgNi4wNjQxMzI4LDIuNjc2ODYyNyA2LjA2NDEzMjgsNS45Nzg5NTMgMCwzLjMwMjExMjIgLTIuNzE0OTYzLDUuOTc4OTIwMiAtNi4wNjQxMzI4LDUuOTc4OTIwMiAtMy4zNDkxNDczLDAgLTYuMDY0MTc3MiwtMi42NzY4MDggLTYuMDY0MTc3MiwtNS45Nzg5MjAyIDAuMDA1MzksLTMuMjk5ODg2MSAyLjcxNzI2NTYsLTUuOTczNjQwOCA2LjA2NDE3NzIsLTUuOTc4OTUzIHogbSAwLC0xLjczNTgyNzE5IGMgLTQuMzIxNDgzNiwwIC03LjgyNDc0MDM4LDMuNDU0MDE4NDkgLTcuODI0NzQwMzgsNy43MTQ3ODAxOSAwLDQuMjYwNzI4MiAzLjUwMzI1Njc4LDcuNzE0NzQ1MiA3LjgyNDc0MDM4LDcuNzE0NzQ1MiA0LjMyMTQ0OTgsMCA3LjgyNDY5OTgsLTMuNDU0MDE3IDcuODI0Njk5OCwtNy43MTQ3NDUyIDAsLTIuMDQ2MDkxNCAtMC44MjQzOTIsLTQuMDA4MzY3MiAtMi4yOTE3NTYsLTUuNDU1MTc0NiBDIDEyLjE4MDIyNSwxLjEyOTk2NDggMTAuMTkwMDEzLDAuMzE3MTU1NjEgOC4xMTQ3NTYyLDAuMzE3MTU1NjEgWiBNIDYuOTM3NDU2Myw4LjI0MDU5ODUgNC42NzE4Njg1LDEwLjQ4NTg1MiA2LjAwODY4MTQsMTEuODc2NzI4IDguMzE3MDAzNSw5LjYwMDc5MTEgMTAuNjI1MzM3LDExLjg3NjcyOCAxMS45NjIxMzgsMTAuNDg1ODUyIDkuNjk2NTUwOCw4LjI0MDU5ODUgMTEuOTYyMTM4LDYuMDA2ODA2NiAxMC41NzMyNDYsNC42Mzc0MzM1IDguMzE3MDAzNSw2Ljg3MzQyOTcgNi4wNjA3NjA3LDQuNjM3NDMzNSA0LjY3MTg2ODUsNi4wMDY4MDY2IFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_security_fold {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTcgMTQiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTEwLjAwMDEgMTMuNjk5MkMxMC4wMDAxIDEzLjY5OTIgMTEuOTI0MSAxMy40NzYzIDEzIDEyLjY5OTJDMTQuNDEzOSAxMS42NzgxIDE2IDEwLjUgMTYuMTI1MSA2LjgxMTI2VjIuNTg5ODdDMTYuMTI1MSAyLjU0NzY4IDE2LjEyMjEgMi41MDYxOSAxNi4xMTY0IDIuNDY1NTlWMS43MTQ4NUgxNS4yNDE0TDE1LjIzMDcgMS43MTQ4NEwxNC42MjUxIDEuNjk5MjJWNi44MTEyM0MxNC42MjUxIDguNTEwNjEgMTQuNjI1MSA5LjQ2NDYxIDEyLjc4MjQgMTEuNzIxQzEyLjE1ODYgMTIuNDg0OCAxMC4wMDAxIDEzLjY5OTIgMTAuMDAwMSAxMy42OTkyWiIgZmlsbD0iY3JpbXNvbiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuMzM2MDkgMC4zNjc0NzVDNy4wMzIxNCAwLjE1MjY1MiA2LjYyNTQ4IDAuMTUzNjE0IDYuMzIyNTMgMC4zNjk5OTdMNi4zMDg2OSAwLjM3OTU1NEM2LjI5NTUzIDAuMzg4NTg4IDYuMjczODggMC40MDMyNjYgNi4yNDQxNyAwLjQyMjc4OUM2LjE4NDcxIDAuNDYxODYgNi4wOTMyMSAwLjUyMDE3MSA1Ljk3MzEzIDAuNTkxMzczQzUuNzMyNTEgMC43MzQwNTkgNS4zNzk5IDAuOTI2ODY0IDQuOTQyNzkgMS4xMjAwOUM0LjA2MTQ0IDEuNTA5NyAyLjg3NTQxIDEuODgzNzcgMS41ODk4NCAxLjg4Mzc3SDAuNzE0ODQ0VjIuNzU4NzdWNi45ODAxNUMwLjcxNDg0NCA5LjQ5Mzc0IDIuMjg4NjYgMTEuMTk3MyAzLjcwMjU0IDEyLjIxODVDNC40MTg0NSAxMi43MzU1IDUuMTI4NzQgMTMuMTA1MyA1LjY1NzMzIDEzLjM0NTdDNS45MjI4NCAxMy40NjY0IDYuMTQ1NjYgMTMuNTU1OSA2LjMwNDY1IDEzLjYxNjFDNi4zODQyMyAxMy42NDYyIDYuNDQ4MDUgMTMuNjY5IDYuNDkzNDkgMTMuNjg0OEM2LjUxNjIyIDEzLjY5MjcgNi41MzQzOCAxMy42OTg5IDYuNTQ3NjQgMTMuNzAzM0w2LjU2MzgyIDEzLjcwODdMNi41NjkwOCAxMy43MTA0TDYuNTcwOTkgMTMuNzExTDYuODM5ODQgMTMuNzUzM0w2LjU3MjQyIDEzLjcxMTVDNi43NDYzMyAxMy43NjczIDYuOTMzMzUgMTMuNzY3MyA3LjEwNzI3IDEzLjcxMTVMNy4xMDg3IDEzLjcxMUw3LjExMDYxIDEzLjcxMDRMNy4xMTU4NyAxMy43MDg3TDcuMTMyMDUgMTMuNzAzM0M3LjE0NTMxIDEzLjY5ODkgNy4xNjM0NiAxMy42OTI3IDcuMTg2MTkgMTMuNjg0OEM3LjIzMTY0IDEzLjY2OSA3LjI5NTQ2IDEzLjY0NjIgNy4zNzUwMyAxMy42MTYxQzcuNTM0MDMgMTMuNTU1OSA3Ljc1Njg1IDEzLjQ2NjQgOC4wMjIzNiAxMy4zNDU3QzguNTUwOTUgMTMuMTA1MyA5LjI2MTIzIDEyLjczNTUgOS45NzcxNSAxMi4yMTg1QzExLjM5MSAxMS4xOTczIDEyLjk2NDggOS40OTM3NyAxMi45NjQ4IDYuOTgwMThWMi43NTg4QzEyLjk2NDggMi43MTY2IDEyLjk2MTkgMi42NzUxMSAxMi45NTYxIDIuNjM0NTFWMS44ODM3N0gxMi4wODExQzEyLjA3NzUgMS44ODM3NyAxMi4wNzQgMS44ODM3NyAxMi4wNzA0IDEuODgzNzdDMTAuNzk3OSAxLjg4MDA0IDkuNjE5NjIgMS41MTEwMiA4LjczODk0IDEuMTI0ODZDOC43MzUzNCAxLjEyMzI3IDguNzMxNzQgMS4xMjE2OCA4LjcyODE0IDEuMTIwMDlDOC4yOTEwMyAwLjkyNjg2NCA3LjkzODQyIDAuNzM0MDU5IDcuNjk3NzkgMC41OTEzNzNDNy41Nzc3MiAwLjUyMDE3MSA3LjQ4NjIyIDAuNDYxODYgNy40MjY3NiAwLjQyMjc4OUM3LjM5NzA1IDAuNDAzMjY2IDcuMzc1MzkgMC4zODg1ODggNy4zNjIyNCAwLjM3OTU1NEw3LjM0ODk2IDAuMzcwMzVDNy4zNDg5NiAwLjM3MDM1IDcuMzQ4NDcgMC4zNzAwMiA3LjM0NTYzIDAuMzc0MDU0TDcuMzM3NzkgMC4zNjg2NTlMNy4zMzYwOSAwLjM2NzQ3NVpNOC4wMzQ3MSAyLjcyNjkxQzguODYwNCAzLjA5MDYzIDkuOTYwNjYgMy40NjMwOSAxMS4yMDYxIDMuNTg5MDdWNi45ODAxNUgxMS4yMTQ4QzExLjIxNDggOC42Nzk1MyAxMC4xNjM3IDkuOTI1MDcgOC45NTI1NCAxMC43OTk4QzguMzU1OTUgMTEuMjMwNiA3Ljc1Mzc0IDExLjU0NTQgNy4yOTc5NiAxMS43NTI3QzcuMTE2NzEgMTEuODM1MSA2Ljk2MDYyIDExLjg5OTYgNi44Mzk4NCAxMS45NDY5QzYuNzE5MDYgMTEuODk5NiA2LjU2Mjk3IDExLjgzNTEgNi4zODE3MyAxMS43NTI3QzUuOTI1OTUgMTEuNTQ1NCA1LjMyMzczIDExLjIzMDYgNC43MjcxNSAxMC43OTk4QzMuNTE2MDMgOS45MjUwNyAyLjQ2NDg0IDguNjc5NTUgMi40NjQ4NCA2Ljk4MDE4VjMuNTg5MDlDMy43MTczOCAzLjQ2MjM5IDQuODIzMDggMy4wODYzOSA1LjY1MDMzIDIuNzIwNzFDNi4xNDIyOCAyLjUwMzI0IDYuNTQ0ODUgMi4yODUzNyA2LjgzMjU0IDIuMTE2MjRDNy4xMjE4MSAyLjI4NTM1IDcuNTI3IDIuNTAzNTIgOC4wMjE5NiAyLjcyMTMxQzguMDI2MiAyLjcyMzE3IDguMDMwNDUgMi43MjUwNCA4LjAzNDcxIDIuNzI2OTFaTTUuOTY0ODQgMy40MDE0N1Y3Ljc3NjQ3SDcuNzE0ODRWMy40MDE0N0g1Ljk2NDg0Wk01Ljk2NDg0IDEwLjQwMTVWOC42NTE0N0g3LjcxNDg0VjEwLjQwMTVINS45NjQ4NFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning_fold {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC43NzY5IDE0LjczMzdMOC42NTE5MiAyLjQ4MzY5QzguMzI5NDYgMS44Mzg3NyA3LjQwOTEzIDEuODM4NzcgNy4wODY2NyAyLjQ4MzY5TDAuOTYxNjY5IDE0LjczMzdDMC42NzA3NzUgMTUuMzE1NSAxLjA5MzgzIDE2IDEuNzQ0MjkgMTZIMTMuOTk0M0MxNC42NDQ4IDE2IDE1LjA2NzggMTUuMzE1NSAxNC43NzY5IDE0LjczMzdaTTMuMTYwMDcgMTQuMjVMNy44NjkyOSA0LjgzMTU2TDEyLjU3ODUgMTQuMjVIMy4xNjAwN1pNOC43NDQyOSAxMS42MjVWMTMuMzc1SDYuOTk0MjlWMTEuNjI1SDguNzQ0MjlaTTYuOTk0MjkgMTAuNzVWNy4yNUg4Ljc0NDI5VjEwLjc1SDYuOTk0MjlaIiBmaWxsPSIjRUM3MjExIi8+CjxwYXRoIGQ9Ik0xMS4xOTkxIDIuOTUyMzhDMTAuODgwOSAyLjMxNDY3IDEwLjM1MzcgMS44MDUyNiA5LjcwNTUgMS41MDlMMTEuMDQxIDEuMDY5NzhDMTEuNjg4MyAwLjk0OTgxNCAxMi4zMzcgMS4yNzI2MyAxMi42MzE3IDEuODYxNDFMMTcuNjEzNiAxMS44MTYxQzE4LjM1MjcgMTMuMjkyOSAxNy41OTM4IDE1LjA4MDQgMTYuMDE4IDE1LjU3NDVDMTYuNDA0NCAxNC40NTA3IDE2LjMyMzEgMTMuMjE4OCAxNS43OTI0IDEyLjE1NTVMMTEuMTk5MSAyLjk1MjM4WiIgZmlsbD0iI0VDNzIxMSIvPgo8L3N2Zz4=\\\");\\n background-color: darkorange;\\n}\\n\\n.ace_scrollbar {\\n contain: strict;\\n position: absolute;\\n right: 0;\\n bottom: 0;\\n z-index: 6;\\n}\\n\\n.ace_scrollbar-inner {\\n position: absolute;\\n cursor: text;\\n left: 0;\\n top: 0;\\n}\\n\\n.ace_scrollbar-v{\\n overflow-x: hidden;\\n overflow-y: scroll;\\n top: 0;\\n}\\n\\n.ace_scrollbar-h {\\n overflow-x: scroll;\\n overflow-y: hidden;\\n left: 0;\\n}\\n\\n.ace_print-margin {\\n position: absolute;\\n height: 100%;\\n}\\n\\n.ace_text-input {\\n position: absolute;\\n z-index: 0;\\n width: 0.5em;\\n height: 1em;\\n opacity: 0;\\n background: transparent;\\n -moz-appearance: none;\\n appearance: none;\\n border: none;\\n resize: none;\\n outline: none;\\n overflow: hidden;\\n font: inherit;\\n padding: 0 1px;\\n margin: 0 -1px;\\n contain: strict;\\n -ms-user-select: text;\\n -moz-user-select: text;\\n -webkit-user-select: text;\\n user-select: text;\\n /*with `pre-line` chrome inserts instead of space*/\\n white-space: pre!important;\\n}\\n.ace_text-input.ace_composition {\\n background: transparent;\\n color: inherit;\\n z-index: 1000;\\n opacity: 1;\\n}\\n.ace_composition_placeholder { color: transparent }\\n.ace_composition_marker { \\n border-bottom: 1px solid;\\n position: absolute;\\n border-radius: 0;\\n margin-top: 1px;\\n}\\n\\n[ace_nocontext=true] {\\n transform: none!important;\\n filter: none!important;\\n clip-path: none!important;\\n mask : none!important;\\n contain: none!important;\\n perspective: none!important;\\n mix-blend-mode: initial!important;\\n z-index: auto;\\n}\\n\\n.ace_layer {\\n z-index: 1;\\n position: absolute;\\n overflow: hidden;\\n /* workaround for chrome bug https://github.com/ajaxorg/ace/issues/2312*/\\n word-wrap: normal;\\n white-space: pre;\\n height: 100%;\\n width: 100%;\\n box-sizing: border-box;\\n /* setting pointer-events: auto; on node under the mouse, which changes\\n during scroll, will break mouse wheel scrolling in Safari */\\n pointer-events: none;\\n}\\n\\n.ace_gutter-layer {\\n position: relative;\\n width: auto;\\n text-align: right;\\n pointer-events: auto;\\n height: 1000000px;\\n contain: style size layout;\\n}\\n\\n.ace_text-layer {\\n font: inherit !important;\\n position: absolute;\\n height: 1000000px;\\n width: 1000000px;\\n contain: style size layout;\\n}\\n\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\n contain: style size layout;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n contain: strict;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n contain: strict;\\n}\\n\\n.ace_cjk {\\n display: inline-block;\\n text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n z-index: 4;\\n}\\n\\n.ace_cursor {\\n z-index: 4;\\n position: absolute;\\n box-sizing: border-box;\\n border-left: 2px solid;\\n /* workaround for smooth cursor repaintng whole screen in chrome */\\n transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n border-left-width: 0;\\n border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: step-end;\\n animation-name: blink-ace-animate;\\n animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: ease-in-out;\\n animation-name: blink-ace-animate-smooth;\\n}\\n \\n@keyframes blink-ace-animate {\\n from, to { opacity: 1; }\\n 60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n from, to { opacity: 1; }\\n 45% { opacity: 1; }\\n 60% { opacity: 0; }\\n 85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n position: absolute;\\n z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n position: absolute;\\n z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n position: absolute;\\n z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n position: absolute;\\n border-bottom: 1px solid #DE5555;\\n border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n position: absolute;\\n z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n position: absolute;\\n z-index: 4;\\n box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n box-sizing: border-box;\\n\\n display: inline-block;\\n height: 11px;\\n margin-top: -2px;\\n vertical-align: middle;\\n\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat, repeat-x;\\n background-position: center center, top left;\\n color: transparent;\\n\\n border: 1px solid black;\\n border-radius: 2px;\\n\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n background-color: #f5f5f5;\\n border: 1px solid gray;\\n border-radius: 1px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n color: black;\\n max-width: 100%;\\n padding: 3px 4px;\\n position: fixed;\\n z-index: 999999;\\n box-sizing: border-box;\\n cursor: default;\\n white-space: pre-wrap;\\n word-wrap: break-word;\\n line-height: normal;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n pointer-events: none;\\n overflow: auto;\\n max-width: min(60em, 66vw);\\n overscroll-behavior: contain;\\n}\\n.ace_tooltip pre {\\n white-space: pre-wrap;\\n}\\n\\n.ace_tooltip.ace_dark {\\n background-color: #636363;\\n color: #fff;\\n}\\n\\n.ace_tooltip:focus {\\n outline: 1px solid #5E9ED6;\\n}\\n\\n.ace_icon {\\n display: inline-block;\\n width: 18px;\\n vertical-align: top;\\n}\\n\\n.ace_icon_svg {\\n display: inline-block;\\n width: 12px;\\n vertical-align: top;\\n -webkit-mask-repeat: no-repeat;\\n -webkit-mask-size: 12px;\\n -webkit-mask-position: center;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\\n padding-right: 13px;\\n}\\n\\n.ace_fold-widget {\\n box-sizing: border-box;\\n\\n margin: 0 -12px 0 1px;\\n display: none;\\n width: 11px;\\n vertical-align: top;\\n\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n border-radius: 3px;\\n \\n border: 1px solid transparent;\\n cursor: pointer;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n display: inline-block; \\n}\\n\\n.ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n border: 1px solid rgba(0, 0, 0, 0.3);\\n background-color: rgba(255, 255, 255, 0.2);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n border: 1px solid rgba(0, 0, 0, 0.4);\\n background-color: rgba(0, 0, 0, 0.05);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n border: 1px solid lightgray;\\n display: inline-block;\\n margin: -1px 8px;\\n padding: 0 5px;\\n pointer-events: auto;\\n cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n border-color: gray;\\n background: rgba(200,200,200,0.2);\\n display: inline-block;\\n pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n background-color: #FFB4B4;\\n border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n transition: opacity 0.4s ease 0.05s;\\n opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n transition: opacity 0.05s ease 0.05s;\\n opacity:1;\\n}\\n\\n.ace_underline {\\n text-decoration: underline;\\n}\\n\\n.ace_bold {\\n font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n font-weight: normal;\\n}\\n\\n.ace_italic {\\n font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n background-color: rgba(255, 0, 0,0.2);\\n position: absolute;\\n z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n background-color: rgba(255, 255, 0,0.2);\\n position: absolute;\\n z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n position: absolute;\\n line-height: 1.5;\\n border-radius: 4px;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n background: white;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #dcdcdc;\\n color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n background: #333;\\n color: #ccc;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n padding: 2px;\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_mobile-button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n position: relative;\\n font-family: arial;\\n transform: scale(0.9);\\n transform-origin: left;\\n white-space: pre;\\n opacity: 0.7;\\n margin: 0 10px;\\n z-index: 1;\\n}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n}\\n\\n.ace_ghost_text_container > div {\\n white-space: pre;\\n}\\n\\n.ghost_text_line_wrapped::after {\\n content: \\\"\\u21A9\\\";\\n position: absolute;\\n}\\n\\n.ace_lineWidgetContainer.ace_ghost_text {\\n margin: 0px 4px\\n}\\n\\n.ace_screenreader-only {\\n position:absolute;\\n left:-10000px;\\n top:auto;\\n width:1px;\\n height:1px;\\n overflow:hidden;\\n}\\n\\n.ace_hidden_token {\\n display: none;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = /** @class */ (function () {\n function Decorator(parent, renderer) {\n this.canvas = dom.createElement(\"canvas\");\n this.renderer = renderer;\n this.pixelRatio = 1;\n this.maxHeight = renderer.layerConfig.maxHeight;\n this.lineHeight = renderer.layerConfig.lineHeight;\n this.canvasHeight = parent.parent.scrollHeight;\n this.heightRatio = this.canvasHeight / this.maxHeight;\n this.canvasWidth = parent.width;\n this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n this.canvas.width = this.canvasWidth;\n this.canvas.height = this.canvasHeight;\n this.canvas.style.top = 0 + \"px\";\n this.canvas.style.right = 0 + \"px\";\n this.canvas.style.zIndex = 7 + \"px\";\n this.canvas.style.position = \"absolute\";\n this.colors = {};\n this.colors.dark = {\n \"error\": \"rgba(255, 18, 18, 1)\",\n \"warning\": \"rgba(18, 136, 18, 1)\",\n \"info\": \"rgba(18, 18, 136, 1)\"\n };\n this.colors.light = {\n \"error\": \"rgb(255,51,51)\",\n \"warning\": \"rgb(32,133,72)\",\n \"info\": \"rgb(35,68,138)\"\n };\n parent.element.appendChild(this.canvas);\n }\n Decorator.prototype.$updateDecorators = function (config) {\n var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n if (config) {\n this.maxHeight = config.maxHeight;\n this.lineHeight = config.lineHeight;\n this.canvasHeight = config.height;\n var allLineHeight = (config.lastRow + 1) * this.lineHeight;\n if (allLineHeight < this.canvasHeight) {\n this.heightRatio = 1;\n }\n else {\n this.heightRatio = this.canvasHeight / this.maxHeight;\n }\n }\n var ctx = this.canvas.getContext(\"2d\");\n function compare(a, b) {\n if (a.priority < b.priority)\n return -1;\n if (a.priority > b.priority)\n return 1;\n return 0;\n }\n var annotations = this.renderer.session.$annotations;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n if (annotations) {\n var priorities = {\n \"info\": 1,\n \"warning\": 2,\n \"error\": 3\n };\n annotations.forEach(function (item) {\n item.priority = priorities[item.type] || null;\n });\n annotations = annotations.sort(compare);\n var foldData = this.renderer.session.$foldData;\n for (var i = 0; i < annotations.length; i++) {\n var row = annotations[i].row;\n var compensateFold = this.compensateFoldRows(row, foldData);\n var currentY = Math.round((row - compensateFold) * this.lineHeight * this.heightRatio);\n var y1 = Math.round(((row - compensateFold) * this.lineHeight * this.heightRatio));\n var y2 = Math.round((((row - compensateFold) * this.lineHeight + this.lineHeight) * this.heightRatio));\n var height = y2 - y1;\n if (height < this.minDecorationHeight) {\n var yCenter = ((y1 + y2) / 2) | 0;\n if (yCenter < this.halfMinDecorationHeight) {\n yCenter = this.halfMinDecorationHeight;\n }\n else if (yCenter + this.halfMinDecorationHeight > this.canvasHeight) {\n yCenter = this.canvasHeight - this.halfMinDecorationHeight;\n }\n y1 = Math.round(yCenter - this.halfMinDecorationHeight);\n y2 = Math.round(yCenter + this.halfMinDecorationHeight);\n }\n ctx.fillStyle = colors[annotations[i].type] || null;\n ctx.fillRect(0, currentY, this.canvasWidth, y2 - y1);\n }\n }\n var cursor = this.renderer.session.selection.getCursor();\n if (cursor) {\n var compensateFold = this.compensateFoldRows(cursor.row, foldData);\n var currentY = Math.round((cursor.row - compensateFold) * this.lineHeight * this.heightRatio);\n ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n ctx.fillRect(0, currentY, this.canvasWidth, 2);\n }\n };\n Decorator.prototype.compensateFoldRows = function (row, foldData) {\n var compensateFold = 0;\n if (foldData && foldData.length > 0) {\n for (var j = 0; j < foldData.length; j++) {\n if (row > foldData[j].start.row && row < foldData[j].end.row) {\n compensateFold += row - foldData[j].start.row;\n }\n else if (row >= foldData[j].end.row) {\n compensateFold += foldData[j].end.row - foldData[j].start.row;\n }\n }\n }\n return compensateFold;\n };\n return Decorator;\n}());\noop.implement(Decorator.prototype, EventEmitter);\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor-css\",\"ace/layer/decorators\",\"ace/lib/useragent\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor-css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\nvar isTextToken = require(\"./layer/text_util\").isTextToken;\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = /** @class */ (function () {\n function VirtualRenderer(container, theme) {\n var _self = this;\n this.container = container || dom.createElement(\"div\");\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI)\n dom.addCssClass(this.container, \"ace_hidpi\");\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null)\n config.set(\"useStrictCSP\", false);\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", \"true\");\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar =\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function (e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n };\n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$keepTextAreaAtCursor = !useragent.isIOS;\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n this.$addResizeObserver();\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n }\n VirtualRenderer.prototype.updateCharacterSize = function () {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n VirtualRenderer.prototype.setSession = function (session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n VirtualRenderer.prototype.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n VirtualRenderer.prototype.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n VirtualRenderer.prototype.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n VirtualRenderer.prototype.updateFull = function (force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n VirtualRenderer.prototype.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n VirtualRenderer.prototype.$updateSizeAsync = function () {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!height && this.$maxLines && this.lineHeight > 1) {\n if (!el.style.height || el.style.height == \"0px\") {\n el.style.height = \"1px\";\n height = el.clientHeight || el.scrollHeight;\n }\n }\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (this.$resizeTimer)\n this.$resizeTimer.cancel();\n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n if (force)\n this.$gutterLayer.$padding = null;\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n if (this.$customScrollbar) {\n this.$updateCustomScrollbar(true);\n }\n };\n VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.setHeight(size.scrollerHeight);\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n this.scrollBarH.setWidth(size.scrollerWidth);\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n size.$dirty = !width || !height;\n if (changes)\n this._signal(\"resize\", oldSize);\n return changes;\n };\n VirtualRenderer.prototype.onGutterResize = function (width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else {\n this.$computeLayerConfig();\n }\n };\n VirtualRenderer.prototype.adjustWrapLimit = function () {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n VirtualRenderer.prototype.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n VirtualRenderer.prototype.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n VirtualRenderer.prototype.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n VirtualRenderer.prototype.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n VirtualRenderer.prototype.getHighlightIndentGuides = function () {\n return this.getOption(\"highlightIndentGuides\");\n };\n VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) {\n this.setOption(\"highlightIndentGuides\", highlight);\n };\n VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n VirtualRenderer.prototype.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) {\n this.setOption(\"printMarginColumn\", printMarginColumn);\n };\n VirtualRenderer.prototype.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n VirtualRenderer.prototype.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n VirtualRenderer.prototype.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n VirtualRenderer.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n VirtualRenderer.prototype.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n VirtualRenderer.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n VirtualRenderer.prototype.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n VirtualRenderer.prototype.getContainerElement = function () {\n return this.container;\n };\n VirtualRenderer.prototype.getMouseEventTarget = function () {\n return this.scroller;\n };\n VirtualRenderer.prototype.getTextAreaContainer = function () {\n return this.container;\n };\n VirtualRenderer.prototype.$moveTextAreaToCursor = function () {\n if (this.$isMousePressed)\n return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth + this.margin.left;\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n VirtualRenderer.prototype.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n VirtualRenderer.prototype.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n VirtualRenderer.prototype.getLastFullyVisibleRow = function () {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n VirtualRenderer.prototype.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n VirtualRenderer.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.$updateScrollBarV = function () {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n VirtualRenderer.prototype.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n VirtualRenderer.prototype.freeze = function () {\n this.$frozen = true;\n };\n VirtualRenderer.prototype.unfreeze = function () {\n this.$frozen = false;\n };\n VirtualRenderer.prototype.$renderChanges = function (changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return;\n }\n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n this._signal(\"beforeRender\", changes);\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller \" : \"ace_scroller ace_scroll-left \";\n if (this.enableKeyboardAccessibility)\n this.scroller.className += this.keyboardFocusClassName;\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n this._signal(\"afterRender\", changes);\n };\n VirtualRenderer.prototype.$autosize = function () {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n this._signal(\"autosize\");\n }\n };\n VirtualRenderer.prototype.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged)\n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n this.layerConfig = {\n width: longestLine,\n padding: this.$padding,\n firstRow: firstRow,\n firstRowScreen: firstRowScreen,\n lastRow: lastRow,\n lineHeight: lineHeight,\n characterWidth: this.characterWidth,\n minHeight: minHeight,\n maxHeight: maxHeight,\n offset: offset,\n gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height: this.$size.scrollerHeight\n };\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n return changes;\n };\n VirtualRenderer.prototype.$updateLines = function () {\n if (!this.$changedLines)\n return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n var layerConfig = this.layerConfig;\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n VirtualRenderer.prototype.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n VirtualRenderer.prototype.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n VirtualRenderer.prototype.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n VirtualRenderer.prototype.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.updateBreakpoints = function (rows) {\n this._rows = rows;\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n VirtualRenderer.prototype.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n VirtualRenderer.prototype.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var newLeft = pos.left;\n var newTop = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n if (this.$scrollAnimation) {\n this.$stopAnimation = true;\n }\n var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n if (currentTop + topMargin > newTop) {\n if (offset && currentTop + topMargin > newTop + this.lineHeight)\n newTop -= offset * this.$size.scrollerHeight;\n if (newTop === 0)\n newTop = -this.scrollMargin.top;\n this.session.setScrollTop(newTop);\n }\n else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) {\n if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight)\n newTop += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n var currentLeft = this.scrollLeft;\n var twoCharsWidth = 2 * this.layerConfig.characterWidth;\n if (newLeft - twoCharsWidth < currentLeft) {\n newLeft -= twoCharsWidth;\n if (newLeft < this.$padding + twoCharsWidth) {\n newLeft = -this.scrollMargin.left;\n }\n this.session.setScrollLeft(newLeft);\n }\n else {\n newLeft += twoCharsWidth;\n if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) {\n this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth));\n }\n else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n }\n };\n VirtualRenderer.prototype.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n VirtualRenderer.prototype.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n VirtualRenderer.prototype.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n VirtualRenderer.prototype.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n VirtualRenderer.prototype.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n VirtualRenderer.prototype.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = { row: cursor, column: 0 };\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n this.session.setScrollTop(offset);\n return offset;\n };\n VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n var func = function (t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n return steps;\n };\n VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n if (fromValue == toValue)\n return;\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n clearInterval(this.$timer);\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n function endAnimation() {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n _self.$stopAnimation = false;\n callback && callback();\n }\n this.$timer = setInterval(function () {\n if (_self.$stopAnimation) {\n endAnimation();\n return;\n }\n if (!_self.session)\n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n }\n else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n }\n else {\n endAnimation();\n }\n }, 10);\n };\n VirtualRenderer.prototype.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n VirtualRenderer.prototype.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n VirtualRenderer.prototype.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n };\n VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n VirtualRenderer.prototype.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.showComposition = function (composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n VirtualRenderer.prototype.setCompositionText = function (text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n VirtualRenderer.prototype.hideComposition = function () {\n if (!this.$composition)\n return;\n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n VirtualRenderer.prototype.setGhostText = function (text, position) {\n var cursor = this.session.selection.cursor;\n var insertPosition = position || { row: cursor.row, column: cursor.column };\n this.removeGhostText();\n var textChunks = this.$calculateWrappedTextChunks(text, insertPosition);\n this.addToken(textChunks[0].text, \"ghost_text\", insertPosition.row, insertPosition.column);\n this.$ghostText = {\n text: text,\n position: {\n row: insertPosition.row,\n column: insertPosition.column\n }\n };\n var widgetDiv = dom.createElement(\"div\");\n if (textChunks.length > 1) {\n var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column);\n var lastLineDiv;\n textChunks.slice(1).forEach(function (el) {\n var chunkDiv = dom.createElement(\"div\");\n var chunkSpan = dom.createElement(\"span\");\n chunkSpan.className = \"ace_ghost_text\";\n if (el.wrapped)\n chunkDiv.className = \"ghost_text_line_wrapped\";\n if (el.text.length === 0)\n el.text = \" \";\n chunkSpan.appendChild(dom.createTextNode(el.text));\n chunkDiv.appendChild(chunkSpan);\n widgetDiv.appendChild(chunkDiv);\n lastLineDiv = chunkDiv;\n });\n hiddenTokens.forEach(function (token) {\n var element = dom.createElement(\"span\");\n if (!isTextToken(token.type))\n element.className = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n element.appendChild(dom.createTextNode(token.value));\n lastLineDiv.appendChild(element);\n });\n this.$ghostTextWidget = {\n el: widgetDiv,\n row: insertPosition.row,\n column: insertPosition.column,\n className: \"ace_ghost_text_container\"\n };\n this.session.widgetManager.addLineWidget(this.$ghostTextWidget);\n var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true);\n var el = this.container;\n var height = el.getBoundingClientRect().height;\n var ghostTextHeight = textChunks.length * this.lineHeight;\n var fitsY = ghostTextHeight < (height - pixelPosition.top);\n if (fitsY)\n return;\n if (ghostTextHeight < height) {\n this.scrollBy(0, (textChunks.length - 1) * this.lineHeight);\n }\n else {\n this.scrollToRow(insertPosition.row);\n }\n }\n };\n VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth) - 2;\n limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small\n var textLines = text.split(/\\r?\\n/);\n var textChunks = [];\n for (var i = 0; i < textLines.length; i++) {\n var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column);\n var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize);\n if (wrapSplits.length > 0) {\n var start = 0;\n wrapSplits.push(textLines[i].length);\n for (var j = 0; j < wrapSplits.length; j++) {\n var textSlice = textLines[i].slice(start, wrapSplits[j]);\n textChunks.push({ text: textSlice, wrapped: true });\n start = wrapSplits[j];\n }\n }\n else {\n textChunks.push({ text: textLines[i], wrapped: false });\n }\n }\n return textChunks;\n };\n VirtualRenderer.prototype.removeGhostText = function () {\n if (!this.$ghostText)\n return;\n var position = this.$ghostText.position;\n this.removeExtraToken(position.row, position.column);\n if (this.$ghostTextWidget) {\n this.session.widgetManager.removeLineWidget(this.$ghostTextWidget);\n this.$ghostTextWidget = null;\n }\n this.$ghostText = null;\n };\n VirtualRenderer.prototype.addToken = function (text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = { type: type, value: text };\n var tokens = session.getTokens(row);\n if (column == null || !tokens.length) {\n tokens.push(newToken);\n }\n else {\n var l = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) {\n var tokens = this.session.getTokens(row);\n var l = 0;\n var hasPassedCursor = false;\n var hiddenTokens = [];\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (token.type === \"ghost_text\")\n continue;\n if (hasPassedCursor) {\n hiddenTokens.push({ type: token.type, value: token.value });\n token.type = \"hidden_token\";\n continue;\n }\n if (l === column) {\n hasPassedCursor = true;\n }\n }\n this.updateLines(row, row);\n return hiddenTokens;\n };\n VirtualRenderer.prototype.removeExtraToken = function (row, column) {\n this.session.bgTokenizer.lines[row] = null;\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.setTheme = function (theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange', { theme: theme });\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n }\n else {\n afterLoad(theme);\n }\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(module.cssText, module.cssClass, _self.container);\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding\n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n _self._dispatchEvent('themeLoaded', { theme: module });\n cb && cb();\n if (useragent.isSafari && _self.scroller) {\n _self.scroller.style.background = \"red\";\n _self.scroller.style.background = \"\";\n }\n }\n };\n VirtualRenderer.prototype.getTheme = function () {\n return this.$themeId;\n };\n VirtualRenderer.prototype.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n VirtualRenderer.prototype.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n VirtualRenderer.prototype.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n VirtualRenderer.prototype.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n VirtualRenderer.prototype.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n this.setOption(\"useResizeObserver\", false);\n };\n VirtualRenderer.prototype.$updateCustomScrollbar = function (val) {\n var _self = this;\n this.$horizScroll = this.$vScroll = null;\n this.scrollBarV.element.remove();\n this.scrollBarH.element.remove();\n if (this.$scrollDecorator) {\n delete this.$scrollDecorator;\n }\n if (val === true) {\n this.scrollBarV = new VScrollBarCustom(this.container, this);\n this.scrollBarH = new HScrollBarCustom(this.container, this);\n this.scrollBarV.setHeight(this.$size.scrollerHeight);\n this.scrollBarH.setWidth(this.$size.scrollerWidth);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n this.$scrollDecorator.$updateDecorators();\n }\n else {\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n }\n };\n VirtualRenderer.prototype.$addResizeObserver = function () {\n if (!window.ResizeObserver || this.$resizeObserver)\n return;\n var self = this;\n this.$resizeTimer = lang.delayedCall(function () {\n if (!self.destroyed)\n self.onResize();\n }, 50);\n this.$resizeObserver = new window.ResizeObserver(function (e) {\n var w = e[0].contentRect.width;\n var h = e[0].contentRect.height;\n if (Math.abs(self.$size.width - w) > 1\n || Math.abs(self.$size.height - h) > 1) {\n self.$resizeTimer.delay();\n }\n else {\n self.$resizeTimer.cancel();\n }\n });\n this.$resizeObserver.observe(this.container);\n };\n return VirtualRenderer;\n}());\nVirtualRenderer.prototype.CHANGE_CURSOR = 1;\nVirtualRenderer.prototype.CHANGE_MARKER = 2;\nVirtualRenderer.prototype.CHANGE_GUTTER = 4;\nVirtualRenderer.prototype.CHANGE_SCROLL = 8;\nVirtualRenderer.prototype.CHANGE_LINES = 16;\nVirtualRenderer.prototype.CHANGE_TEXT = 32;\nVirtualRenderer.prototype.CHANGE_SIZE = 64;\nVirtualRenderer.prototype.CHANGE_MARKER_BACK = 128;\nVirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256;\nVirtualRenderer.prototype.CHANGE_FULL = 512;\nVirtualRenderer.prototype.CHANGE_H_SCROLL = 1024;\nVirtualRenderer.prototype.$changes = 0;\nVirtualRenderer.prototype.$padding = null;\nVirtualRenderer.prototype.$frozen = false;\nVirtualRenderer.prototype.STEPS = 8;\noop.implement(VirtualRenderer.prototype, EventEmitter);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n useResizeObserver: {\n set: function (value) {\n if (!value && this.$resizeObserver) {\n this.$resizeObserver.disconnect();\n this.$resizeTimer.cancel();\n this.$resizeTimer = this.$resizeObserver = null;\n }\n else if (value && !this.$resizeObserver) {\n this.$addResizeObserver();\n }\n }\n },\n animatedScroll: { initialValue: false },\n showInvisibles: {\n set: function (value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function (val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function () {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function (show) {\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n useSvgGutterIcons: {\n set: function (value) {\n this.$gutterLayer.$useSvgGutterIcons = value;\n },\n initialValue: false\n },\n showFoldedAnnotations: {\n set: function (value) {\n this.$gutterLayer.$showFoldedAnnotations = value;\n },\n initialValue: false\n },\n fadeFoldWidgets: {\n set: function (show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function (show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n this.$textLayer.$highlightIndentGuide();\n }\n else {\n this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n }\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function (shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function (size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function (name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function (val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function (val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function (val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function (val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function (val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n customScrollbar: {\n set: function (val) {\n this.$updateCustomScrollbar(val);\n },\n initialValue: false\n },\n theme: {\n set: function (val) { this.setTheme(val); },\n get: function () { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker.onerror = function(e) {\n e.preventDefault();\n };\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener, true);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = /** @class */ (function () {\n function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate, true);\n this.$others = others;\n this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()[\"$undostack\"] || { length: -1 };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n }\n PlaceHolder.prototype.setup = function () {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function (other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n PlaceHolder.prototype.showOtherMarkers = function () {\n if (this.othersActive)\n return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function (anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n });\n };\n PlaceHolder.prototype.hideOtherMarkers = function () {\n if (!this.othersActive)\n return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n PlaceHolder.prototype.onUpdate = function (delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n var range = delta;\n if (range.start.row !== range.end.row)\n return;\n if (range.start.row !== this.pos.row)\n return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n this.updateAnchors(delta);\n if (inMainRange)\n this.length += lengthDiff;\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n }\n else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n this.$updating = false;\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateMarkers = function () {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function (pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n PlaceHolder.prototype.onCursorChange = function (event) {\n if (this.$updating || !this.session)\n return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n }\n else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n };\n PlaceHolder.prototype.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n PlaceHolder.prototype.cancel = function () {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager[\"$undostack\"]).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n return PlaceHolder;\n}());\noop.implement(PlaceHolder.prototype, EventEmitter);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n if (ctrl && useragent.isMac)\n button = ev.button;\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n if (button !== 0)\n return;\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function (e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n }\n else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n }\n else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.inVirtualSelectionMode = true;\n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function () {\n var tmpSel = selection.toOrientedRange();\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n }\n else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n }\n else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true;\n var initialRange;\n var rectSel = [];\n var blockSelect = function () {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n }\n else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead);\n else\n selection.moveToPosition(pos);\n screenCursor = { row: -1, column: -1 };\n var onMouseSelectionEnd = function (e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n return e.preventDefault();\n }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){/**\n * commands to enter multiselect mode\n * @type {import(\"../../ace-internal\").Ace.Command[]}\n */\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function (editor) { editor.selectMoreLines(-1); },\n bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function (editor) { editor.selectMoreLines(1); },\n bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function (editor) { editor.selectMoreLines(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function (editor) { editor.selectMoreLines(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function (editor) { editor.selectMore(-1); },\n bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function (editor) { editor.selectMore(1); },\n bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function (editor) { editor.selectMore(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function (editor) { editor.selectMore(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split selection into lines\",\n exec: function (editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n readOnly: true\n }, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function (editor) { editor.alignCursors(); },\n bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function (editor) { editor.findAll(); },\n bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function (editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * @typedef {import(\"./anchor\").Anchor} Anchor\n * @typedef {import(\"../ace-internal\").Ace.Point} Point\n * @typedef {import(\"../ace-internal\").Ace.ScreenCoordinates} ScreenCoordinates\n */\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function () {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function (range, $blockChangeEvents) {\n if (!range)\n return;\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n if (!range.cursor)\n range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length)\n this.$onRemoveRange(removed);\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function (range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function (pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function () {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", { range: range });\n };\n this.$onRemoveRange = function (removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n this._signal(\"removeRange\", { ranges: removed });\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function () {\n if (this.rangeList)\n return;\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n }\n else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n }\n else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n }\n else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n }\n else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n if (startRow == endRow)\n includeEmptyLines = true;\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n if (yBackwards)\n rectSel.reverse();\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function (orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function (range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n this.removeSelectionMarkers = function (ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n }\n else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n }\n else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n }\n else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n }\n else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n };\n this.forEachSelection = function (cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n return result;\n };\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n this.getSelectedText = function () {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n }\n else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n this.$checkMultiselectChange = function (e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row\n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function (needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n var selection = this.multiSelect;\n if (!additive)\n selection.toSingleRange(ranges[0]);\n for (var i = ranges.length; i--;)\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n return ranges.length;\n };\n this.selectMoreLines = function (dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n }\n else {\n var anchor = lead;\n }\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n }\n else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n }\n else {\n if (skip)\n var toRemove = range.cursor;\n }\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function (dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n for (var i = all.length; i--;) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp_1 = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp_1.start.row;\n range.start.column = tmp_1.start.column;\n range.end.row = tmp_1.end.row;\n range.end.column = tmp_1.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n var words = [];\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n for (var i = all.length; i--;) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function () {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function (r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n if (fr < 0)\n fr = 0;\n if (lr >= max)\n lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n }\n else {\n sameRowRanges.forEach(function (r) {\n sel.substractPoint(r.cursor);\n });\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function (r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function (r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n if (!editor.textInput)\n return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function (e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n }\n else if (altCursor) {\n reset();\n }\n }, editor);\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function (val) {\n MultiSelect(this);\n if (val) {\n this.on(\"mousedown\", onMouseDown);\n }\n else {\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function (val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\n };\n this.indentationBlock = function (session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1)\n continue;\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n endRow = row;\n }\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = { row: row, column: column + 1 };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n if (fw == \"start\" && end.row > start.row) {\n end.row--;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = { row: row, column: column };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start)\n return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nvar nls = require(\"../config\").nls;\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n }\n else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n }\n else if (oldWidget) {\n return;\n }\n else {\n gutterAnno = {\n displayText: [nls(\"error-marker.good-state\", \"Looks good!\")],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n var w = {\n row: pos.row,\n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n gutterAnno.displayText.forEach(function (annoTextLine, i) {\n el.appendChild(dom.createTextNode(annoTextLine));\n if (i < gutterAnno.displayText.length - 1) {\n el.appendChild(dom.createElement(\"br\"));\n }\n });\n el.appendChild(dom.createElement(\"div\"));\n var kb = function (_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return { command: \"null\" };\n }\n };\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n .error_widget_wrapper {\\n background: inherit;\\n color: inherit;\\n border:none\\n }\\n .error_widget {\\n border-top: solid 2px;\\n border-bottom: solid 2px;\\n margin: 5px 0;\\n padding: 10px 40px;\\n white-space: pre-wrap;\\n }\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\n border-color: #ff5a5a\\n }\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n border-color: #F1D817\\n }\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\n border-color: #5a5a5a\\n }\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n border-color: #5aaa5a\\n }\\n .error_widget_arrow {\\n position: absolute;\\n border: solid 5px;\\n border-top-color: transparent!important;\\n border-right-color: transparent!important;\\n border-left-color: transparent!important;\\n top: -5px;\\n }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @namespace Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n }\n else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el), doc, options);\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode)\n env.textarea = oldNode;\n editor.on(\"destroy\", function () {\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nvar version = exports.config.version;\nexports.version = version;\n\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n var global = (function () {\n return this;\n })();\n if (!global && typeof window != \"undefined\") global = window; // can happen in strict mode\n if (!global && typeof self != \"undefined\") global = self; // can happen in webworker\n \n if (!global.ace)\n global.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n global.ace[key] = a[key];\n global.ace[\"default\"] = global.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = global.ace;\n }\n });\n })();\n ","ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsonHighlightRules = function () {\n this.$rules = {\n \"start\": [\n {\n token: \"variable\", // single line\n regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n }, {\n token: \"string\", // single line\n regex: '\"',\n next: \"string\"\n }, {\n token: \"constant.numeric\", // hex\n regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n }, {\n token: \"constant.numeric\", // float\n regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token: \"constant.language.boolean\",\n regex: \"(?:true|false)\\\\b\"\n }, {\n token: \"text\", // single quoted strings are not allowed\n regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n }, {\n token: \"comment\", // comments are not allowed, but who cares?\n regex: \"\\\\/\\\\/.*$\"\n }, {\n token: \"comment.start\", // comments are not allowed, but who cares?\n regex: \"\\\\/\\\\*\",\n next: \"comment\"\n }, {\n token: \"paren.lparen\",\n regex: \"[[({]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\])}]\"\n }, {\n token: \"punctuation.operator\",\n regex: /[,]/\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }\n ],\n \"string\": [\n {\n token: \"constant.language.escape\",\n regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n }, {\n token: \"string\",\n regex: '\"|$',\n next: \"start\"\n }, {\n defaultToken: \"string\"\n }\n ],\n \"comment\": [\n {\n token: \"comment.end\", // comments are not allowed, but who cares?\n regex: \"\\\\*\\\\/\",\n next: \"start\"\n }, {\n defaultToken: \"comment\"\n }\n ]\n };\n};\noop.inherits(JsonHighlightRules, TextHighlightRules);\nexports.JsonHighlightRules = JsonHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n this.checkOutdent = function (line, input) {\n if (!/^\\s+$/.test(line))\n return false;\n return /^\\s*\\}/.test(input);\n };\n this.autoOutdent = function (doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n if (!match)\n return 0;\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n if (!openBracePos || openBracePos.row == row)\n return 0;\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column - 1), indent);\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n return \"\";\n }\n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n if (!fw && this.startRegionRe.test(line))\n return \"start\"; // lineCommentRegionStart\n return fw;\n };\n this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n if (this.startRegionRe.test(line))\n return this.getCommentRegionBlock(session, line, row);\n var match = line.match(this.foldingStartMarker);\n if (match) {\n var i = match.index;\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, i);\n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n }\n else if (foldStyle != \"all\")\n range = null;\n }\n return range;\n }\n if (foldStyle === \"markbegin\")\n return;\n var match = line.match(this.foldingStopMarker);\n if (match) {\n var i = match.index + match[0].length;\n if (match[1])\n return this.closingBracketBlock(session, match[1], row, i);\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n this.getSectionRange = function (session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1)\n continue;\n if (startIndent > indent)\n break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n }\n else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n }\n else if (startIndent == indent) {\n break;\n }\n }\n endRow = row;\n }\n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n this.getCommentRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m)\n continue;\n if (m[1])\n depth--;\n else\n depth++;\n if (!depth)\n break;\n }\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar Mode = function () {\n this.HighlightRules = HighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = this.$defaultBehaviour;\n this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n this.lineCommentStart = \"//\";\n this.blockComment = { start: \"/*\", end: \"*/\" };\n this.getNextLineIndent = function (state, line, tab) {\n var indent = this.$getIndent(line);\n if (state == \"start\") {\n var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n if (match) {\n indent += tab;\n }\n }\n return indent;\n };\n this.checkOutdent = function (state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n this.autoOutdent = function (state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n this.createWorker = function (session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/json_worker\", \"JsonWorker\");\n worker.attachToDocument(session.getDocument());\n worker.on(\"annotate\", function (e) {\n session.setAnnotations(e.data);\n });\n worker.on(\"terminate\", function () {\n session.clearAnnotations();\n });\n return worker;\n };\n this.$id = \"ace/mode/json\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n}); (function() {\n ace.require([\"ace/mode/json\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/theme/chrome-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-chrome .ace_gutter {\\n background: #ebebeb;\\n color: #333;\\n overflow : hidden;\\n}\\n\\n.ace-chrome .ace_print-margin {\\n width: 1px;\\n background: #e8e8e8;\\n}\\n\\n.ace-chrome {\\n background-color: #FFFFFF;\\n color: black;\\n}\\n\\n.ace-chrome .ace_cursor {\\n color: black;\\n}\\n\\n.ace-chrome .ace_invisible {\\n color: rgb(191, 191, 191);\\n}\\n\\n.ace-chrome .ace_constant.ace_buildin {\\n color: rgb(88, 72, 246);\\n}\\n\\n.ace-chrome .ace_constant.ace_language {\\n color: rgb(88, 92, 246);\\n}\\n\\n.ace-chrome .ace_constant.ace_library {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-chrome .ace_invalid {\\n background-color: rgb(153, 0, 0);\\n color: white;\\n}\\n\\n.ace-chrome .ace_fold {\\n}\\n\\n.ace-chrome .ace_support.ace_function {\\n color: rgb(60, 76, 114);\\n}\\n\\n.ace-chrome .ace_support.ace_constant {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-chrome .ace_support.ace_type,\\n.ace-chrome .ace_support.ace_class\\n.ace-chrome .ace_support.ace_other {\\n color: rgb(109, 121, 222);\\n}\\n\\n.ace-chrome .ace_variable.ace_parameter {\\n font-style:italic;\\n color:#FD971F;\\n}\\n.ace-chrome .ace_keyword.ace_operator {\\n color: rgb(104, 118, 135);\\n}\\n\\n.ace-chrome .ace_comment {\\n color: #236e24;\\n}\\n\\n.ace-chrome .ace_comment.ace_doc {\\n color: #236e24;\\n}\\n\\n.ace-chrome .ace_comment.ace_doc.ace_tag {\\n color: #236e24;\\n}\\n\\n.ace-chrome .ace_constant.ace_numeric {\\n color: rgb(0, 0, 205);\\n}\\n\\n.ace-chrome .ace_variable {\\n color: rgb(49, 132, 149);\\n}\\n\\n.ace-chrome .ace_xml-pe {\\n color: rgb(104, 104, 91);\\n}\\n\\n.ace-chrome .ace_entity.ace_name.ace_function {\\n color: #0000A2;\\n}\\n\\n\\n.ace-chrome .ace_heading {\\n color: rgb(12, 7, 255);\\n}\\n\\n.ace-chrome .ace_list {\\n color:rgb(185, 6, 144);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_selection {\\n background: rgb(181, 213, 255);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_step {\\n background: rgb(252, 255, 0);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_stack {\\n background: rgb(164, 229, 101);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_active-line {\\n background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-chrome .ace_gutter-active-line {\\n background-color : #dcdcdc;\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_selected-word {\\n background: rgb(250, 250, 255);\\n border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-chrome .ace_storage,\\n.ace-chrome .ace_keyword,\\n.ace-chrome .ace_meta.ace_tag {\\n color: rgb(147, 15, 128);\\n}\\n\\n.ace-chrome .ace_string.ace_regex {\\n color: rgb(255, 0, 0)\\n}\\n\\n.ace-chrome .ace_string {\\n color: #1A1AA6;\\n}\\n\\n.ace-chrome .ace_entity.ace_other.ace_attribute-name {\\n color: #994409;\\n}\\n\\n.ace-chrome .ace_indent-guide {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n \\n.ace-chrome .ace_indent-guide-active {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/chrome\",[\"require\",\"exports\",\"module\",\"ace/theme/chrome-css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-chrome\";\nexports.cssText = require(\"./chrome-css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n}); (function() {\n ace.require([\"ace/theme/chrome\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// runtime helper for setting properties on components\n// in a tree-shakable way\nexports.default = (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n};\n","module.exports = __WEBPACK_EXTERNAL_MODULE__380__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"\";","/* eslint-disable no-var */\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n var getCurrentScript = require('@soda/get-current-script')\n currentScript = getCurrentScript()\n\n // for backward compatibility, because previously we directly included the polyfill\n if (!('currentScript' in document)) {\n Object.defineProperty(document, 'currentScript', { get: getCurrentScript })\n }\n }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_public_path__ = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, createVNode as _createVNode, createElementVNode as _createElementVNode, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = [\"for\"]\nconst _hoisted_2 = {\n key: 0,\n class: \"required\"\n}\nconst _hoisted_3 = { class: \"invalid-feedback\" }\nconst _hoisted_4 = {\n key: 1,\n class: \"valid-feedback\"\n}\nconst _hoisted_5 = {\n key: 2,\n class: \"valid-feedback valid-feedback-none\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_v_ace_editor = _resolveComponent(\"v-ace-editor\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_ctx.label)\n ? (_openBlock(), _createElementBlock(\"label\", {\n key: 0,\n for: _ctx.$uid,\n class: \"form-label\"\n }, [\n _createTextVNode(_toDisplayString(_ctx.label), 1),\n (_ctx.required)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, \"*\"))\n : _createCommentVNode(\"\", true)\n ], 8, _hoisted_1))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_v_ace_editor, {\n id: _ctx.$uid,\n ref: \"aceEditor\",\n value: _ctx.value,\n \"onUpdate:value\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.value) = $event)),\n class: _normalizeClass(_ctx.classes),\n disabled: _ctx.disabled,\n readonly: _ctx.disabled,\n lang: _ctx.lang,\n theme: _ctx.theme,\n options: _ctx.options,\n \"min-lines\": _ctx.rows ?? 10,\n \"max-lines\": _ctx.rows ?? 25,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.click())),\n onBlur: _cache[2] || (_cache[2] = ($event: any) => (_ctx.changed('blur'))),\n onChange: _cache[3] || (_cache[3] = ($event: any) => (_ctx.changed('change')))\n }, null, 8, [\"id\", \"value\", \"class\", \"disabled\", \"readonly\", \"lang\", \"theme\", \"options\", \"min-lines\", \"max-lines\"]),\n _createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.invalidMessage), 1),\n (_ctx.help)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString(_ctx.help), 1))\n : (_openBlock(), _createElementBlock(\"p\", _hoisted_5))\n ], 64))\n}","<template>\n <label v-if=\"label\" :for=\"$uid\" class=\"form-label\"\n >{{ label }}<span v-if=\"required\" class=\"required\">*</span></label\n >\n\n <v-ace-editor\n :id=\"$uid\"\n ref=\"aceEditor\"\n v-model:value=\"value\"\n :class=\"classes\"\n :value=\"initial\"\n :disabled=\"disabled\"\n :readonly=\"disabled\"\n :lang=\"lang\"\n :theme=\"theme\"\n :options=\"options\"\n :min-lines=\"rows ?? 10\"\n :max-lines=\"rows ?? 25\"\n @click=\"click()\"\n @blur=\"changed('blur')\"\n @change=\"changed('change')\"\n />\n <p class=\"invalid-feedback\">\n {{ invalidMessage }}\n </p>\n <p v-if=\"help\" class=\"valid-feedback\">\n {{ help }}\n </p>\n <p v-else class=\"valid-feedback valid-feedback-none\" />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nimport { VAceEditor } from 'vue3-ace-editor'\nimport 'ace-builds/src-noconflict/mode-json'\nimport 'ace-builds/src-noconflict/theme-chrome'\n\nconst theme = 'chrome'\n\nexport default defineComponent({\n name: 'ClFieldEditor',\n components: {\n VAceEditor\n },\n inheritAttrs: false,\n props: {\n class: {\n type: String,\n default: `ace_editor ace-${theme}`\n },\n label: {\n type: String,\n default: undefined\n },\n initial: {\n type: String,\n default: ''\n },\n lang: {\n type: String,\n default: ''\n },\n rows: {\n type: Number,\n default: undefined\n },\n required: {\n type: Boolean,\n default: false\n },\n help: {\n type: String,\n default: undefined\n },\n error: {\n type: String,\n default: undefined\n },\n invalid: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n autofocus: {\n type: Boolean,\n default: false\n }\n },\n emits: ['change', 'update:valid', 'update:modelValue'],\n data () {\n return {\n valid: true,\n value: this.initial,\n invalidMessage: this.error || 'Input invalid.'\n }\n },\n computed: {\n theme: function (): string {\n return theme\n },\n classes: function (): string {\n return this.class + ' form-control' + (!this.valid ? ' invalid' : '')\n },\n options: function (): object {\n return {\n tabSize: 2\n }\n // switch (this.lang) {\n // case 'json':\n // return {} // worker needs dynamic loading\n // default:\n // return {}\n // }\n // return o\n }\n },\n methods: {\n setValue: function (value: string) {\n const ace = (this.$refs.aceEditor as any)._editor // eslint-disable-line @typescript-eslint/no-explicit-any\n ace?.setValue(value)\n },\n click: function () {\n this.changed()\n },\n changed: function () {\n this.valid = true\n if (this.required && (this.value ?? '').trim() === '') {\n this.setInvalid('This field may not be blank.')\n } else if (this.lang === 'json') {\n try {\n JSON.parse(this.value ?? '{}')\n } catch (e) {\n ;(e as { ignore: boolean }).ignore = true\n this.setInvalid('Please enter valid JSON.')\n }\n }\n this.$emit('update:modelValue', this.value)\n this.$emit('change')\n },\n setInvalid: function (message: string): void {\n this.valid = false\n this.invalidMessage = message\n this.$emit('update:valid', this.valid)\n }\n }\n})\n</script>\n\n<style lang=\"scss\" src=\"./style.scss\" />\n","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array<Array>} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array<ResizeObserverSPI>}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the <html> itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array<ResizeObservation>}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map<Element, ResizeObservation>}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n","import ace from 'ace-builds';\nimport { capitalize, defineComponent, markRaw, h } from 'vue';\nimport ResizeObserver from 'resize-observer-polyfill';\nconst Events = [\n 'blur',\n 'input',\n 'change',\n 'changeSelectionStyle',\n 'changeSession',\n 'copy',\n 'focus',\n 'paste',\n];\nexport const VAceEditor = defineComponent({\n name: 'VAceEditor',\n props: {\n value: {\n type: String,\n required: true,\n },\n lang: {\n type: String,\n default: 'text',\n },\n theme: {\n type: String,\n default: 'chrome',\n },\n options: Object,\n placeholder: String,\n readonly: Boolean,\n wrap: Boolean,\n printMargin: {\n type: [Boolean, Number],\n default: true,\n },\n minLines: Number,\n maxLines: Number,\n },\n emits: ['update:value', 'init', ...Events],\n render() {\n return h('div');\n },\n mounted() {\n const editor = this._editor = markRaw(ace.edit(this.$el, {\n placeholder: this.placeholder,\n readOnly: this.readonly,\n value: this.value,\n mode: 'ace/mode/' + this.lang,\n theme: 'ace/theme/' + this.theme,\n wrap: this.wrap,\n printMargin: this.printMargin,\n useWorker: false,\n minLines: this.minLines,\n maxLines: this.maxLines,\n ...this.options,\n }));\n this._contentBackup = this.value;\n this._isSettingContent = false;\n editor.on('change', () => {\n // ref: https://github.com/CarterLi/vue3-ace-editor/issues/11\n if (this._isSettingContent)\n return;\n const content = editor.getValue();\n this._contentBackup = content;\n this.$emit('update:value', content);\n });\n Events.forEach(x => {\n const eventName = 'on' + capitalize(x);\n if (typeof this.$.vnode.props[eventName] === 'function') {\n editor.on(x, this.$emit.bind(this, x));\n }\n });\n this._ro = new ResizeObserver(() => editor.resize());\n this._ro.observe(this.$el);\n this.$emit('init', editor);\n },\n beforeUnmount() {\n var _a, _b;\n (_a = this._ro) === null || _a === void 0 ? void 0 : _a.disconnect();\n (_b = this._editor) === null || _b === void 0 ? void 0 : _b.destroy();\n },\n methods: {\n focus() {\n this._editor.focus();\n },\n blur() {\n this._editor.blur();\n },\n selectAll() {\n this._editor.selectAll();\n },\n getAceInstance() {\n return this._editor;\n },\n },\n watch: {\n value(val) {\n if (this._contentBackup !== val) {\n try {\n this._isSettingContent = true;\n this._editor.setValue(val, 1);\n }\n finally {\n this._isSettingContent = false;\n }\n this._contentBackup = val;\n }\n },\n theme(val) {\n this._editor.setTheme('ace/theme/' + val);\n },\n options(val) {\n this._editor.setOptions(val);\n },\n readonly(val) {\n this._editor.setReadOnly(val);\n },\n placeholder(val) {\n this._editor.setOption('placeholder', val);\n },\n wrap(val) {\n this._editor.setWrapBehavioursEnabled(val);\n },\n printMargin(val) {\n this._editor.setOption('printMargin', val);\n },\n lang(val) {\n this._editor.setOption('mode', 'ace/mode/' + val);\n },\n minLines(val) {\n this._editor.setOption('minLines', val);\n },\n maxLines(val) {\n this._editor.setOption('maxLines', val);\n },\n }\n});\n//# sourceMappingURL=index.js.map","import { render } from \"./template.vue?vue&type=template&id=4392e753&ts=true\"\nimport script from \"./template.vue?vue&type=script&lang=ts\"\nexport * from \"./template.vue?vue&type=script&lang=ts\"\n\nimport \"./style.scss?vue&type=style&index=0&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import type { App } from 'vue'\nimport ClFieldEditor from './template.vue'\n\nClFieldEditor.install = (Vue: App) => {\n Vue.component(ClFieldEditor.name ?? 'ClNoName', ClFieldEditor)\n}\n\nexport default ClFieldEditor\n","import ClFieldEditor from './components/ClFieldEditor'\n\nimport type { App } from 'vue'\n\nconst components = {\n ClFieldEditor\n}\n\nexport function castlabsUiEditor (Vue: App): void {\n // tslixnt:disable-next-line: forin\n for (const component in components) {\n // @ts-expect-error We don't want to properly import all types just for this...\n Vue.component(components[component].name, components[component])\n }\n}\n\nexport { default as ClFieldEditor } from './components/ClFieldEditor'\n"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__380__","ACE_NAMESPACE","global","window","requirejs","deps","payload","arguments","length","modules","payloads","original","apply","console","error","trace","_require","parentId","callback","lookup","undefined","Object","prototype","toString","call","params","i","l","dep","push","packagedModule","normalizeModule","moduleName","indexOf","chunks","split","charAt","base","slice","join","previous","replace","mod","id","uri","packaged","req","returnValue","exportAce","ns","ace","defineProp","obj","name","val","defineProperty","value","enumerable","writable","configurable","String","startsWith","searchString","position","lastIndexOf","endsWith","subjectString","lastIndex","repeat","count","result","string","includes","str","assign","target","TypeError","output","index","source","keys","forEach","key","values","o","map","k","Array","find","predicate","len","thisArg","kValue","findIndex","item","fill","O","start","relativeStart","Math","max","min","end","relativeEnd","final","of","deepCopy","copy","isArray","last","a","stringReverse","reverse","stringRepeat","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copyArray","array","arrayToMap","arr","createMap","props","create","arrayRemove","splice","escapeRegExp","escapeHTML","getMatchOffsets","regExp","matches","offset","deferredCall","fcn","timer","deferred","timeout","cancel","setTimeout","schedule","clearTimeout","isPending","delayedCall","defaultTimeout","_self","delay","supportsLookbehind","RegExp","e","skipEmptyMatch","line","supportsUnicodeFlag","codePointAt","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","navigator","os","exec","platform","toLowerCase","ua","userAgent","appName","isWin","isIE","parseFloat","match","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isSafari","isEdge","isAIR","isAndroid","isChromeOS","isIOS","test","isMobile","strictCSP","useragent","XHTML_NS","buildDom","parent","refs","txt","document","createTextNode","appendChild","els","ch","el","createElement","options","childIndex","n","className","style","cssText","setAttribute","getDocumentHead","doc","head","getElementsByTagName","documentElement","tag","createElementNS","removeChildren","element","innerHTML","textContent","ownerDocument","createFragment","createDocumentFragment","hasCssClass","classes","addCssClass","removeCssClass","toggleCssClass","add","setCssClass","node","include","hasCssString","sheets","querySelectorAll","removeElementById","getElementById","remove","cssCache","insertPendingStyles","cache","importCssString","container","getRootNode","insertBefore","firstChild","useStrictCSP","importCssStylsheet","rel","href","scrollbarWidth","inner","width","minWidth","height","display","outer","left","overflow","body","noScrollbar","offsetWidth","withScrollbar","clientWidth","removeChild","computedStyle","getComputedStyle","setStyle","styles","property","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","div","transform","animationName","translate","tx","ty","round","top","dom","get","url","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","path","s","src","onload","_","isAbort","qualifyURL","inherits","ctor","superCtor","super_","constructor","mixin","implement","proto","EventEmitter","stopPropagation","propagationStopped","preventDefault","defaultPrevented","_emit","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","type","_signal","once","on","newCallback","off","Promise","resolve","setDefaultHandler","handlers","_disabled_","old","disabled","removeDefaultHandler","pop","addEventListener","capturing","removeListener","removeEventListener","removeAllListeners","reportError","msg","data","Error","defaultEnglishMessages","messages","nlsPlaceholders","oop","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","$options","filter","hidden","getOption","opt","warn","forwardTo","handlesSet","set","message","AppConfig","$defaultOptions","defineOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","setMessages","placeholders","nls","defaultString","translated","dollarMatch","curlyBracketMatch","isDark","cssClass","$id","lang","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","hasOwnProperty","all","$modes","moduleUrl","component","parts","sep","re","setModuleUrl","subst","customLoader","loader","cb","setLoader","dynamicModules","$loading","$loaded","loadModule","moduleId","onLoad","loadedModule","moduleType","load","afterLoad","err","reportErrorIfPathIsNotConfigured","then","default","$require","setModuleLoader","version","config","init","scriptOptions","scriptUrl","currentScript","_currentScript","currentDocument","scripts","script","getAttribute","attributes","j","attr","deHyphenate","m","m1","toUpperCase","Range","startRow","startColumn","endRow","endColumn","row","column","isEqual","range","contains","compare","compareRange","cmp","comparePoint","p","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","extend","isEmpty","clone","collapseRows","toScreenRange","session","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","Keys","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","codeToKeyCode","Command","Backspace","Tab","Return","Enter","Pause","Escape","PageUp","PageDown","End","Home","Insert","Delete","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","Backquote","Minus","Equal","BracketLeft","Backslash","BracketRight","Semicolon","Quote","Comma","Period","Slash","Space","NumpadAdd","NumpadDecimal","NumpadSubtract","NumpadDivide","NumpadMultiply","chr","fromCharCode","modifiers","Shift","Control","Alt","Meta","$codeToKeyCode","parseInt","enter","escape","esc","del","mods","pow","x","keyCodeToString","keyCode","keyString","activeListenerOptions","pressedKeys","ts","detectListenerOptionsSupport","createComment","passive","getListenerOptions","EventListener","elem","destroy","addListener","destroyer","$toDestroy","getModifierHash","ctrlKey","altKey","shiftKey","metaKey","normalizeCommandKeys","hashId","code","getModifierState","altGr","location","timeStamp","dt","resetPressedKeys","stopEvent","getButton","button","capture","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","factor","deltaX","deltaY","deltaMode","DOM_DELTA_PIXEL","wheelX","wheelY","DOM_DELTA_LINE","linePixels","DOM_DELTA_PAGE","pagePixels","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","clicks","eventNames","onMousedown","detail","isNewClick","abs","clientX","clientY","_clicks","getModifierString","addCommandKeyListener","lastDefaultPrevented","postMessage","postMessageId","nextTick","win","messageName","listener","$idleBlocked","onIdle","handler","$idleBlockId","blockIdle","nextFrame","requestAnimationFrame","bind","$cancelT","lineMode","pasteCancelled","Date","now","TextInput","event","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","valueResetRegex","parentNode","host","text","opacity","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","rowStart","Number","MAX_SAFE_INTEGER","rowEnd","MIN_SAFE_INTEGER","numberOfExtraLines","isFocused","activeElement","setNumberOfExtraLines","number","setAriaLabel","ariaLabel","$textInputAriaLabel","concat","selection","cursor","setAriaOptions","activeDescendant","inline","removeAttribute","role","setLabel","onBlur","hasFocus","onFocus","resetSelection","$focusScroll","focus","renderer","enableKeyboardAccessibility","preventScroll","isTransformed","getBoundingClientRect","ancestors","t","parentElement","nodeType","blur","curOp","commandName","command","isUserAction","docChanged","selectionChanged","onCompositionEnd","positionToSelection","getLine","newValue","selectionStart","selectionEnd","setSelectionRange","afterContextMenu","getRange","lines","prevLine","nextLine","isAllSelected","onSelect","selectAll","inputHandler","setInputHandler","getInputHandler","sendText","fromInput","onPaste","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","shouldReset","onTextInput","onInput","onCompositionUpdate","inputType","execCommand","handleClipboardData","forceIEMime","clipboardData","mime","setData","getData","doCopy","isCut","getCopyText","onCut","onCopy","select","onCommandKey","onCompositionStart","$readOnly","useTextareaForIME","cancelComposition","getSelectionRange","markerRange","msGetInputContext","context","getInputContext","compositionStartOffset","closeTimeout","syncComposition","onKeyup","onContextMenuClose","$isMousePressed","$keepTextAreaAtCursor","$moveTextAreaToCursor","getElement","setCommandMode","readOnly","setReadOnly","setCopyWithEmptySelection","onContextMenu","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","bottom","clientHeight","move","textInput","addIosSelectionHandler","typingResetTimeout","typing","detectArrowKeys","$mouseHandler","isMousePressed","modifier","up","home","option","down","right","shift","commands","findKeyCommand","scroller","$setUserAgentForTests","_isMobile","_isIOS","DRAG_OFFSET","SCROLL_COOLDOWN_T","DefaultHandlers","mouseHandler","$clickSelection","editor","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","extendSelectionBy","ev","inSelection","pos","getDocumentPosition","mousedownEvent","selectionRange","selectionEmpty","moveToPosition","time","$focusTimeout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","y","getShiftKey","selectToPosition","anchor","orientedRange","calcRangeOrientation","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectByLinesEnd","unsetStyle","focusWait","distance","calcDistance","getBracketRange","getWordRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","direction","canScroll","isScrollableBy","speed","isSlower","scrollBy","stop","ax","ay","bx","by","sqrt","selectEnd","selectAllEnd","selectByWordsEnd","preventParentScroll","currentTarget","contentOverflows","scrollHeight","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","__values","Symbol","iterator","next","done","CLASSNAME","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","html","setPosition","setClassName","setTheme","theme","show","hide","getHeight","offsetHeight","getWidth","PopupManager","popups","addPopup","popup","updatePopups","removePopup","e_1","_a","e_2","_b","sort","priority","visiblepopups","_c","_d","shouldDisplay","visiblepopups_1","visiblepopups_1_1","visiblePopup","doPopupsOverlap","e_2_1","return","e_1_1","popupA","popupB","rectA","rectB","popupManager","HoverTooltip","_super","_this","lastT","idleTime","lastEvent","onMouseOut","onMouseMove","waitForHover","whiteSpace","pointerEvents","tabIndex","addToEditor","getMouseEventTarget","removeFromEditor","isOutsideOfText","$gatherData","docPos","screenPos","pixelToScreenCoordinates","clippedPos","setDataProvider","showForRange","domNode","startingEvent","MARGIN","$registerCloseEvents","addMarker","textToScreenCoordinates","pageX","maxHeight","labelHeight","labelWidth","spaceBelow","innerHeight","pageY","lineHeight","isAbove","innerWidth","marker","$markerSession","removeMarker","$removeCloseEvents","relatedTarget","classList","GutterHandler","tooltipTimeout","mouseEvent","gutter","$gutterLayer","tooltip","GutterTooltip","showTooltip","maxRow","getLength","screenRow","$pos","documentToScreenRow","hideTooltip","$tooltipFollowsMouse","moveTooltip","gutterRow","getGutterRow","gutterCell","$lines","gutterElement","querySelector","gutterRegion","getRegion","selectTo","srcElement","$gutter","windowWidth","windowHeight","singular","plural","security","warning","info","hint","annotation","annotationsInRow","$annotations","displayText","from","fold","getFoldLine","$showFoldedAnnotations","mostSevereAnnotationTypeInFold","annotationsInFold","severityRank","annotationType","summaryFoldedAnnotations","annotationsToSummaryString","annotationMessages","iconClassName","$useSvgGutterIcons","lineElement","iconElement","annotationLabels","tooltipElement","annotations","summary","annotationTypes","annotationTypes_1","annotationTypes_1_1","label","MouseEvent","$inSelection","documentRow","screenTopRow","AUTOSCROLL_DELAY","SCROLL_CURSOR_DELAY","SCROLL_CURSOR_HYSTERESIS","DragdropHandler","dragImage","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","prevCursor","vMovement","hMovement","moveCursorToPosition","autoScroll","layerConfig","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","onDragInterval","addDragMarker","toOrientedRange","getSelectionStyle","clearSelection","$cursorLayer","setBlinking","clearInterval","setInterval","clearDragMarker","fromOrientedRange","$resetCursorStyle","onDragStart","cancelDrag","draggable","dataTransfer","effectAllowed","getReadOnly","setDragImage","clearData","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","insert","types","some","copyAllowed","moveAllowed","copyModifierState","dragWait","interval","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","state","dragDrop","$dragEnabled","clickCount","eventTarget","unselectable","addTouchListeners","touchStartT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","vX","vY","createContextMenu","updateMenu","selected","hasUndo","getUndoManager","replaceChild","canExecuteCommand","class","action","cmd","canExecute","handleClick","readText","writeText","ontouchstart","ontouchend","onclick","showContextMenu","pagePos","leftOffset","scrollLeft","hideContextMenu","handleLongTap","selectWord","switchToSelectionMode","setRange","animate","oldScrollTop","getScrollTop","textarea","touches","h","w","touchObj","cursorPos","getPixelPosition","anchorPos","offsetTop","offsetLeft","weightedDistance","diff1","diff2","DefaultGutterHandler","MouseHandler","$dragDelay","$mouseMoved","focusEditor","windowBlurred","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","endOperation","startOperation","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","args","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","LTR","RTL","L","R","EN","AN","ON","B","S","AL","WS","CS","ES","ET","NSM","LRE","RLE","PDF","LRO","RLO","BN","UnicodeTBL00","UnicodeTBL20","_computeLevels","chars","levels","charTypes","impTab","prevState","newClass","newLevel","newState","cond","condPos","ix","_getCharacterType","_getCharClass","_invertLevel","lev","_array","lo","hi","tmp","wType","nType","cType","c","rtlCandidate","uc","charCodeAt","ON_R","R_H","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","hasBidiCharacters","ret","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","getValue","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","onChange","delta","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","isLastRow","endOfLine","$useWrapMode","splits","$wrapData","indent","substring","size","isFullWidth","getScreenTabSize","$main","substr","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getCursorPosition","getSelectionAnchor","$bidiHandler","removeInLine","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","getDocument","lead","createAnchor","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","setAnchor","getAnchor","getSelectionLead","isBackwards","$setSelection","MAX_VALUE","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","moveCursorTo","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","excludeLastChar","foldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getTabSize","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","beforeCursor","getDisplayLine","leadingSpace","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","search","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","lineWidgets","widget","rowsAbove","rowCount","keepDesiredColumn","moveCursorToScreen","desiredColumn","r","getRangeOfMovements","func","toJSON","rangeCount","ranges","r1","fromJSON","rangeList","toSingleRange","addRange","MAX_TOKEN_COUNT","Tokenizer","rules","splitRegex","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","defaultToken","flag","splitterRurles","rule","caseInsensitive","unicode","regex","adjustedregex","matchcount","token","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","digit","removeCapturingGroups","createSplitterRegexp","$setMaxTokenCount","tokens","stack","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","consumeLineEnd","merge","unshift","TextHighlightRules","$rules","addRules","prefix","nextState","getRules","embedRules","HighlightRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","normalizeRules","processState","toInsert","stateName","includeName","noEscape","keywordMap","createKeywordMapper","ignoreCase","splitChar","keywords","$keywordList","list","word","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","getCurrentTokenRange","CstyleBehaviour","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","getWrapBehavioursEnabled","excludeTokens","recordAutoInsert","isSaneInsertion","braces","recordMaybeInsert","rightChar","matching","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","findMatchingBracket","next_indent","$getIndent","getTabString","quotes","$mode","$quotes","lineCommentStart","quote","leftChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","pairQuotesAfter","$pairQuotesAfter","shouldPairQuotes","charBefore","closeDocComment","currentToken","nextToken","cursorPosInToken","closeDocPos","openDocPos","$matchTokenType","iterator2","bracket","wordChars","Mode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","commentWithSpace","comment","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","fun","minEmptyLength","floor","toggleBlockComment","colDiff","initialRange","startRange","endRange","getNextLineIndent","tab","checkOutdent","input","autoOutdent","createWorker","createModeDelegates","delegations","_loop_1","scope","functionName","$delegator","this_1","method","language","transformAction","param","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","score","meta","applyDelta","docLines","doNotValidate","Anchor","$onChange","$clipPositionToDocument","point","$getTransformedPoint","$insertRight","noClip","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","Document","textOrLines","insertMergedLines","setValue","getAllLines","getNewLineCharacter","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","$split","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","$safeApplyDelta","docLength","MAX","to","chunk","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","$updateOnChange","getState","cleanup","SearchHighlight","clazz","setRegexp","update","markerLayer","renderedMarkerRanges","MAX_RANGES","rangeToAddMarkerTo","rangeAsString","drawSingleLineMarker","UndoManager","$keepRedoStack","$maxRev","$fromUndo","$undoDepth","reset","addSession","allowMerge","$lastDelta","$redoStack","lastDeltas","undoStackLength","$undoStack","$rev","addSelection","rev","startNewGroup","markIgnored","ignore","getSelection","getRevision","getDeltas","getChangedRanges","getChangedLines","undo","dontSelect","rearrangeUndoStack","$redoStackBaseRev","deltaSet","undoSelectionRange","undoChanges","$syncRev","redo","diff","rebaseRedoStack","redoSelectionRange","redoChanges","nextDelta","mark","canUndo","canRedo","bookmark","isAtBookmark","json","$prettyPrint","stringifyDelta","swapped","swapGroups","hasRedo","isClean","markClean","cloneDelta","stringifyRange","swap","d1","d2","i1","i2","ds1","ds2","selectionBefore","selectionAfter","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","rest","moveDeltasByOne","redoStack","xformed","deltaSets","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","walk","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","RangeList","$bias","pointIndex","excludeEdges","startIndex","addList","removed","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","subFold","collapseChildren","addSubFold","consumeRange","afterStart","firstConsumed","consumedFolds","restoreRange","consumePoint","restorePoint","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","trim","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","outermostFolds","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","initState","depth","getFoldWidget","getFoldWidgetRange","foldToLevel","foldAllComments","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","charBeforeCursor","$findClosingBracket","getMatchingBracketRanges","bracketsRegExp","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","getMatchingTags","$findTagName","prevToken","$findClosingTag","$findOpeningTag","found","backward","currentTag","openTagStart","openTagName","foundOpenTagEnd","openTagEnd","closeTagStart","closeTagName","closeTagEnd","openTag","closeTag","stepCount","tmpToken","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","prevOp","$uid","bgTokenizer","onChangeFold","$onSelectionChange","onSelectionChange","setMode","destroyed","$initOperationListeners","$lastSel","$operationResetTimer","commandEvent","currentSelection","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","JSON","parse","undoManager","history","editSession","setAnnotations","setBreakpoints","breakpoints","setScrollLeft","setScrollTop","scrollTop","$scrollLeft","$scrollTop","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","setOverwrite","overwrite","$overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","addDynamicMarker","markerId","markers","getMarkers","highlight","$searchHighlight","highlightLines","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$onChangeMode","$modeId","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","getMode","isNaN","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","$getUndoSelection","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","setUseWrapMode","useWrapMode","setWrapLimitRange","$wrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","getWrapIndent","indentation","SPACE","TAB","TAB_SPACE","addSplit","minSplit","PUNCTUATION","CHAR_EXT","CHAR","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","getPrecedingCharacter","wrap","$wrap","firstLineNumber","useSoftTabs","foldStyle","Search","$matchIterator","sr","sc","er","ec","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","caseSensitive","$supportsUnicodeFlag","wholeWord","addWordBoundary","$assembleMultilineRegExp","backwards","forEachInLine","wordBoundary","firstChar","wordRegExp","needleArray","lastChar","MultiHashHandler","$singleCommand","commandKeyBinding","addCommands","addCommand","removeCommand","bindKey","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","other","otherPos","removeCommands","bindKeys","keyList","$keyChain","isDefault","HashHandler","CommandManager","byName","$checkCommandState","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","description","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","gotoLine","prompt","$type","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","passEvent","cutLine","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","autoIndent","openLink","firstLineEndCol","selectedText","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","$registerLineWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","updateFull","changedWidgets","fixedWidth","ceil","coverLine","gutterWidth","fullWidth","padding","scrollBar","GutterKeyboardHandler","gutterLayer","activeRowIndex","activeLane","annotationTooltip","$onGutterKeyDown","$blurGutter","isRowVisible","scrollToLine","$rowToRowIndex","$cursorCell","nearestFoldIndex","$findNearestFoldWidget","nearestAnnotationIndex","$findNearestAnnotation","$focusAnnotation","$focusFoldWidget","$handleGutterKeyboardInteraction","GutterKeyboardEvent","lane","$switchLane","$rowIndexToRow","rowFoldingWidget","$blurFoldWidget","cells","childNodes","$moveFoldWidgetDown","$moveAnnotationDown","$moveFoldWidgetUp","$moveAnnotationUp","$blurAnnotation","$isFoldWidgetVisible","isRowFullyVisible","isIconVisible","$getFoldWidget","$isAnnotationVisible","$getAnnotation","cell","foldWidget","keyboardFocusClassName","desinationLane","annotationIndex","foldWidgetIndex","gutterKeyboardHandler","getKey","getRow","isInAnnotationLane","isInFoldLane","defaultCommands","Editor","getContainerElement","getTextAreaContainer","keyBinding","$search","$historyTracker","_$emitInputEvent","setSession","onStartOperation","previousCommand","onEndOperation","scrollSelectionIntoView","animateScrolling","$mergeUndoDeltas","prev","mergeableCommands","$mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onStartOperation","$onEndOperation","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","oldEditor","getSession","resize","onResize","getTheme","getFontSize","setFontSize","$highlightBrackets","$highlightPending","$bracketHighlight","markerIds","$getDirectionForHighlight","tagNamesRanges","getMatching","markerType","getHighlightIndentGuides","$textLayer","$highlightIndentGuide","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","$updateHighlightActiveLine","updateLines","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","inVirtualSelectionMode","isFullLine","getBehavioursEnabled","lineState","shouldOutdent","$enableAutoIndent","lineIndent","prevLineState","currIndent","composition","applyComposition","forEachSelection","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","setHighlightIndentGuides","setShowPrintMargin","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","setGhostText","removeGhostText","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","currWordStart","wordParts","curLength","itLength","that","reg","wordPairs","$toggleWordPairs","negate","firstCondition","secondCondition","res","findLinkAt","columnPosition","previousPosition","currentPosition","wordParts_1","wordParts_1_1","sel","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","center","alignCursor","getCursorPositionScreen","expand","tokenCount","matchType","bracketType","brackets","tagsRanges","lineNumber","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","copyWithEmptySelection","behavioursEnabled","wrapBehavioursEnabled","enableAutoIndent","autoScrollEditorIntoView","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeNumberRenderer","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","hasValue","$composition","placeholderNode","$placeholder","content","blurCommand","focusOnEnterKeyup","textInputAriaLabel","enableMobileMenu","$enableMobileMenu","customScrollbar","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","highlightIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","useResizeObserver","useSvgGutterIcons","showFoldedAnnotations","getText","lastLineNumber","$renderer","Lines","canvasHeight","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","lineTop","computeLineHeight","$cacheCell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","$updateAnnotations","rowInfo","annoText","displayAnnoText","annoType","gutterOffset","oldLastRow","$updateCursorRow","onCreateCell","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","$padding","$computePadding","$highlightGutterLine","$cursorRow","updateLineHighlight","scrollLines","$renderLines","textNode","annotationNode","annotationIconNode","decorations","rowText","foldClass","isClosedFold","foldAnnotationClass","annotationInFold","foldRange","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","setPadding","setMarkers","elt","css","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","curr","lineRange","getBorderClass","range1","drawBidiSingleLineMarker","radiusClass","extraLength","tl","tr","br","bl","textTokens","Set","isTextToken","tokenType","has","Text","$updateEolChar","unixMode","EOL_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","margin","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","showSpaces","showTabs","showEOL","$highlightIndentGuides","tabStr","$tabStrings","span","TAB_CHAR","$indentGuideRe","spaceClass","spaceContent","SPACE_CHAR","tabClass","tabContent","lineElements","lineElementsIdx","heightChanged","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","renderIndentGuide","cols","$highlightIndentGuideMarker","indentLevel","initialIndent","elementIndentLevel","bracketHighlight","currentIndent","$renderHighlightIndentGuide","$clearActiveIndentGuide","$setIndentGuideActive","$createLineElement","$renderWrappedLine","splitChars","$renderOverflowMessage","$renderSimpleLine","overflowEl","$getFoldLineTokens","lastLineEl","invisibleEl","EOF_CHAR","renderTokens","addTokens","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$isAnimating","$stopCssAnimation","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","$isSmoothBlinking","blink","onScreen","cursorLeft","cursorTop","isCursorInView","pixelPos","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","MAX_SCROLL_H","Scrollbar","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","$scrollbarWidth","$minWidth","setHeight","setScrollHeight","setInnerHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBar","ScrollBarV","ScrollBarH","VScrollWidth","HScrollHeight","eType","mousePageY","startTop","thumbTop","onScrollInterval","scrollTopFromThumbTop","thumbHeight","pageHeight","viewHeight","slideHeight","scrollWidth","mousePageX","startLeft","thumbLeft","scrollLeftFromThumbLeft","thumbWidth","pageWidth","viewWidth","slideWidth","RenderLoop","onRender","pending","changes","$recursionLimit","_flush","change","clear","CHAR_COUNT","USE_OBSERVER","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","isRoot","visibility","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","observe","setPolling","disconnect","$getZoom","$initTransformMeasureNodes","transformCoordinates","clientPos","elPos","zoom","mul","solve","l1","l2","det","sub","m2","ut","u","f","Decorator","canvas","pixelRatio","heightRatio","canvasWidth","minDecorationHeight","halfMinDecorationHeight","colors","dark","light","$updateDecorators","allLineHeight","ctx","getContext","clearRect","priorities","compensateFold","compensateFoldRows","currentY","y1","y2","yCenter","fillStyle","fillRect","GutterLayer","MarkerLayer","TextLayer","CursorLayer","HScrollBarCustom","VScrollBarCustom","editorCss","VirtualRenderer","onGutterResize","$markerBack","textLayer","$markerFront","$horizScroll","$vScroll","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","v","$renderChanges","defaultView","CHANGE_FULL","$addResizeObserver","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","CHANGE_LINES","CHANGE_TEXT","CHANGE_MARKER","updateFontSize","$updateSizeAsync","resizing","$updateCachedSize","$resizeTimer","$changes","$customScrollbar","$updateCustomScrollbar","$extraHeight","oldSize","CHANGE_SIZE","CHANGE_SCROLL","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$printMarginEl","containerEl","posTop","posLeft","setScrollMargin","sm","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","freeze","$frozen","unfreeze","CHANGE_H_SCROLL","st","$scrollDecorator","$updateLines","CHANGE_CURSOR","CHANGE_MARKER_FRONT","CHANGE_MARKER_BACK","$autosize","desiredHeight","$maxPixelHeight","hideScrollbars","$gutterWidth","screenLines","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","_rows","$viewMargin","newLeft","newTop","topMargin","bottomMargin","$stopAnimation","currentTop","currentLeft","twoCharsWidth","alignment","$calcSteps","fromValue","toValue","STEPS","steps","x_min","dx","initialScroll","oldSteps","$timer","endAnimation","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","$useTextareaForIME","addToken","removeExtraToken","insertPosition","textChunks","$calculateWrappedTextChunks","$ghostText","widgetDiv","lastLineDiv","hiddenTokens","hideTokensAfterPosition","chunkDiv","chunkSpan","wrapped","$ghostTextWidget","pixelPosition","ghostTextHeight","fitsY","textLines","displayTokens","wrapSplits","textSlice","newToken","hasPassedCursor","$themeId","$theme","background","setMouseCursor","attachToShadowRoot","$resizeObserver","contentRect","$workerBlob","workerUrl","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","blobBuilder","getBlob","Worker","blob","URL","webkitURL","blobURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","changeListener","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","deltaQueue","onerror","$doc","emit","ex","attachToDocument","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undoStackDepth","setup","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","onMouseSelection","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onMouseSelectionEnd","onSelectionInterval","selectMoreLines","selectMore","joinSelections","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","docEnd","yBackwards","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","addAltCursorListeners","altCursor","altDown","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","keepOrder","$byLines","cmdResult","anim","buf","additive","skip","screenLead","toRemove","tmp_1","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","alignRight","unAlign","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","binarySearch","comparator","findAnnotations","matched","oldWidget","gutterAnno","arrow","annoTextLine","onmousedown","Renderer","edit","_id","env","tagName","oldNode","createEditSession","JsonHighlightRules","MatchingBraceOutdent","BaseFoldMode","commentRegex","singleLineBlockCommentRe","tripleStarBlockCommentRe","startRegionRe","_getFoldWidgetBase","forceMultiline","getCommentRegionBlock","getSectionRange","startIndent","subRange","CStyleFoldMode","$outdent","sfc","__vccOpts","__webpack_module_cache__","__webpack_require__","cachedModule","loaded","__webpack_modules__","amdD","definition","g","globalThis","Function","prop","toStringTag","nmd","paths","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","render","_ctx","_cache","$props","$setup","_component_v_ace_editor","_resolveComponent","_openBlock","_createElementBlock","_Fragment","for","_createTextVNode","_toDisplayString","required","_createCommentVNode","_createVNode","ref","$event","_normalizeClass","readonly","onClick","click","changed","_createElementVNode","invalidMessage","help","Map","getIndex","entry","class_1","__entries__","delete","entries","_i","leadingCall","trailingCall","lastCallTime","resolvePending","proxy","timeoutCallback","MutationObserver","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","refresh","addObserver","observer","connect_","removeObserver","observers","disconnect_","changesDetected","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","childList","characterData","subtree","propertyName","isReflowProperty","getInstance","instance_","ownerGlobal","positions","reduce","paddings","positions_1","bbox","getBBox","horizPad","vertPad","boxSizing","vertScrollbar","horizScrollbar","SVGGraphicsElement","SVGElement","Constr","DOMRectReadOnly","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","isActive","broadcastRect","ResizeObserverEntry","rectInit","ResizeObserverSPI","controller","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","Element","observations","unobserve","clearActive","observation","WeakMap","defineComponent","emits","mounted","_editor","markRaw","$el","_contentBackup","_isSettingContent","$emit","capitalize","$","vnode","_ro","beforeUnmount","methods","getAceInstance","watch","components","VAceEditor","inheritAttrs","initial","invalid","autofocus","valid","computed","$refs","aceEditor","setInvalid","ClFieldEditor","install","Vue","castlabsUiEditor"],"sourceRoot":""}
|