openc3-cosmos-tool-admin 5.14.1 → 5.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/tools/admin/js/{537.js → 25.js} +2 -2
  3. data/tools/admin/js/25.js.map +1 -0
  4. data/tools/admin/js/272.js +2 -0
  5. data/tools/admin/js/{540.js.map → 272.js.map} +1 -1
  6. data/tools/admin/js/31.js +2 -0
  7. data/tools/admin/js/31.js.map +1 -0
  8. data/tools/admin/js/314.js +2 -0
  9. data/tools/admin/js/314.js.map +1 -0
  10. data/tools/admin/js/542.js +41 -0
  11. data/tools/admin/js/542.js.map +1 -0
  12. data/tools/admin/js/55.js +2 -0
  13. data/tools/admin/js/55.js.map +1 -0
  14. data/tools/admin/js/565.js +2 -0
  15. data/tools/admin/js/{593.js.map → 565.js.map} +1 -1
  16. data/tools/admin/js/625.js +2 -0
  17. data/tools/admin/js/{162.js.map → 625.js.map} +1 -1
  18. data/tools/admin/js/{837.js → 627.js} +3 -3
  19. data/tools/admin/js/{837.js.map → 627.js.map} +1 -1
  20. data/tools/admin/js/664.js +2 -0
  21. data/tools/admin/js/{797.js.map → 664.js.map} +1 -1
  22. data/tools/admin/js/670.js +2 -0
  23. data/tools/admin/js/{830.js.map → 670.js.map} +1 -1
  24. data/tools/admin/js/712.js +2 -0
  25. data/tools/admin/js/712.js.map +1 -0
  26. data/tools/admin/js/838.js +2 -0
  27. data/tools/admin/js/{267.js.map → 838.js.map} +1 -1
  28. data/tools/admin/js/854.js +2 -0
  29. data/tools/admin/js/854.js.map +1 -0
  30. data/tools/admin/js/900.js +2 -0
  31. data/tools/admin/js/900.js.map +1 -0
  32. data/tools/admin/js/936.js +2 -0
  33. data/tools/admin/js/{388.js.map → 936.js.map} +1 -1
  34. data/tools/admin/js/953.js +2 -0
  35. data/tools/admin/js/{478.js.map → 953.js.map} +1 -1
  36. data/tools/admin/js/977.js +2 -0
  37. data/tools/admin/js/977.js.map +1 -0
  38. data/tools/admin/js/app.js +1 -1
  39. data/tools/admin/js/app.js.map +1 -1
  40. metadata +38 -38
  41. data/tools/admin/js/117.js +0 -2
  42. data/tools/admin/js/117.js.map +0 -1
  43. data/tools/admin/js/162.js +0 -2
  44. data/tools/admin/js/24.js +0 -2
  45. data/tools/admin/js/24.js.map +0 -1
  46. data/tools/admin/js/240.js +0 -2
  47. data/tools/admin/js/240.js.map +0 -1
  48. data/tools/admin/js/267.js +0 -2
  49. data/tools/admin/js/27.js +0 -2
  50. data/tools/admin/js/27.js.map +0 -1
  51. data/tools/admin/js/388.js +0 -2
  52. data/tools/admin/js/405.js +0 -2
  53. data/tools/admin/js/405.js.map +0 -1
  54. data/tools/admin/js/478.js +0 -2
  55. data/tools/admin/js/537.js.map +0 -1
  56. data/tools/admin/js/540.js +0 -2
  57. data/tools/admin/js/593.js +0 -2
  58. data/tools/admin/js/713.js +0 -2
  59. data/tools/admin/js/713.js.map +0 -1
  60. data/tools/admin/js/797.js +0 -2
  61. data/tools/admin/js/829.js +0 -2
  62. data/tools/admin/js/829.js.map +0 -1
  63. data/tools/admin/js/830.js +0 -2
  64. data/tools/admin/js/876.js +0 -41
  65. data/tools/admin/js/876.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/876.js","mappings":"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AG,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,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GA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","sources":["webpack://@openc3/cosmos-tool-admin/../../node_modules/ace-builds/src-min-noconflict/ext-language_tools.js","webpack://@openc3/cosmos-tool-admin/../../node_modules/ace-builds/src-min-noconflict/ext-searchbox.js","webpack://@openc3/cosmos-tool-admin/../../node_modules/ace-builds/src-min-noconflict/mode-ruby.js","webpack://@openc3/cosmos-tool-admin/../../node_modules/ace-builds/src-min-noconflict/theme-twilight.js","webpack://@openc3/cosmos-tool-admin/../../node_modules/ace-builds/src-noconflict/ace.js"],"sourcesContent":["ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"],function(e,t,n){\"use strict\";function p(e){var t=(new Date).toLocaleString(\"en-us\",e);return t.length==1?\"0\"+t:t}var r=e(\"./lib/dom\"),i=e(\"./lib/oop\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./lib/lang\"),u=e(\"./range\").Range,a=e(\"./range_list\").RangeList,f=e(\"./keyboard/hash_handler\").HashHandler,l=e(\"./tokenizer\").Tokenizer,c=e(\"./clipboard\"),h={CURRENT_WORD:function(e){return e.session.getTextRange(e.session.getWordRange())},SELECTION:function(e,t,n){var r=e.session.getTextRange();return n?r.replace(/\\n\\r?([ \\t]*\\S)/g,\"\\n\"+n+\"$1\"):r},CURRENT_LINE:function(e){return e.session.getLine(e.getCursorPosition().row)},PREV_LINE:function(e){return e.session.getLine(e.getCursorPosition().row-1)},LINE_INDEX:function(e){return e.getCursorPosition().row},LINE_NUMBER:function(e){return e.getCursorPosition().row+1},SOFT_TABS:function(e){return e.session.getUseSoftTabs()?\"YES\":\"NO\"},TAB_SIZE:function(e){return e.session.getTabSize()},CLIPBOARD:function(e){return c.getText&&c.getText()},FILENAME:function(e){return/[^/\\\\]*$/.exec(this.FILEPATH(e))[0]},FILENAME_BASE:function(e){return/[^/\\\\]*$/.exec(this.FILEPATH(e))[0].replace(/\\.[^.]*$/,\"\")},DIRECTORY:function(e){return this.FILEPATH(e).replace(/[^/\\\\]*$/,\"\")},FILEPATH:function(e){return\"/not implemented.txt\"},WORKSPACE_NAME:function(){return\"Unknown\"},FULLNAME:function(){return\"Unknown\"},BLOCK_COMMENT_START:function(e){var t=e.session.$mode||{};return t.blockComment&&t.blockComment.start||\"\"},BLOCK_COMMENT_END:function(e){var t=e.session.$mode||{};return t.blockComment&&t.blockComment.end||\"\"},LINE_COMMENT:function(e){var t=e.session.$mode||{};return t.lineCommentStart||\"\"},CURRENT_YEAR:p.bind(null,{year:\"numeric\"}),CURRENT_YEAR_SHORT:p.bind(null,{year:\"2-digit\"}),CURRENT_MONTH:p.bind(null,{month:\"numeric\"}),CURRENT_MONTH_NAME:p.bind(null,{month:\"long\"}),CURRENT_MONTH_NAME_SHORT:p.bind(null,{month:\"short\"}),CURRENT_DATE:p.bind(null,{day:\"2-digit\"}),CURRENT_DAY_NAME:p.bind(null,{weekday:\"long\"}),CURRENT_DAY_NAME_SHORT:p.bind(null,{weekday:\"short\"}),CURRENT_HOUR:p.bind(null,{hour:\"2-digit\",hour12:!1}),CURRENT_MINUTE:p.bind(null,{minute:\"2-digit\"}),CURRENT_SECOND:p.bind(null,{second:\"2-digit\"})};h.SELECTED_TEXT=h.SELECTION;var d=function(){function e(){this.snippetMap={},this.snippetNameMap={},this.variables=h}return e.prototype.getTokenizer=function(){return e.$tokenizer||this.createTokenizer()},e.prototype.createTokenizer=function(){function t(e){return e=e.substr(1),/^\\d+$/.test(e)?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function n(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}var r={regex:\"/(\"+n(\"/\")+\"+)/\",onMatch:function(e,t,n){var r=n[0];return r.fmtString=!0,r.guard=e.slice(1,-1),r.flag=\"\",\"\"},next:\"formatString\"};return e.$tokenizer=new l({start:[{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1&&(e=r),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\\$(?:\\d+|\\w+)/,onMatch:t},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(e,n,r){var i=t(e.substr(1));return r.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+n(\"\\\\|\")+\"*\\\\|\",onMatch:function(e,t,n){var r=e.slice(1,-1).replace(/\\\\[,|\\\\]|,/g,function(e){return e.length==2?e[1]:\"\\0\"}).split(\"\\0\").map(function(e){return{value:e}});return n[0].choices=r,[r[0]]},next:\"start\"},r,{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"start\"}],formatString:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectElse?(n[0].expectElse=!1,n[0].ifEnd={elseEnd:n[0]},[n[0].ifEnd]):\":\"}},{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1?e=r:r==\"n\"?e=\"\\n\":r==\"t\"?e=\"\t\":\"ulULE\".indexOf(r)!=-1&&(e={changeCase:r,local:r>\"a\"}),[e]}},{regex:\"/\\\\w*}\",onMatch:function(e,t,n){var r=n.shift();return r&&(r.flag=e.slice(1,-1)),this.next=r&&r.tabstopId?\"start\":\"\",[r||e]},next:\"start\"},{regex:/\\$(?:\\d+|\\w+)/,onMatch:function(e,t,n){return[{text:e.slice(1)}]}},{regex:/\\${\\w+/,onMatch:function(e,t,n){var r={text:e.slice(2)};return n.unshift(r),[r]},next:\"formatStringVar\"},{regex:/\\n/,token:\"newline\",merge:!1},{regex:/}/,onMatch:function(e,t,n){var r=n.shift();return this.next=r&&r.tabstopId?\"start\":\"\",[r||e]},next:\"start\"}],formatStringVar:[{regex:/:\\/\\w+}/,onMatch:function(e,t,n){var r=n[0];return r.formatFunction=e.slice(2,-1),[n.shift()]},next:\"formatString\"},r,{regex:/:[\\?\\-+]?/,onMatch:function(e,t,n){e[1]==\"+\"&&(n[0].ifEnd=n[0]),e[1]==\"?\"&&(n[0].expectElse=!0)},next:\"formatString\"},{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"formatString\"}]}),e.$tokenizer},e.prototype.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},e.prototype.getVariableValue=function(e,t,n){if(/^\\d+$/.test(t))return(this.variables.__||{})[t]||\"\";if(/^[A-Z]\\d+$/.test(t))return(this.variables[t[0]+\"__\"]||{})[t.substr(1)]||\"\";t=t.replace(/^TM_/,\"\");if(!this.variables.hasOwnProperty(t))return\"\";var r=this.variables[t];return typeof r==\"function\"&&(r=this.variables[t](e,t,n)),r==null?\"\":r},e.prototype.tmStrFormat=function(e,t,n){if(!t.fmt)return e;var r=t.flag||\"\",i=t.guard;i=new RegExp(i,r.replace(/[^gim]/g,\"\"));var s=typeof t.fmt==\"string\"?this.tokenizeTmSnippet(t.fmt,\"formatString\"):t.fmt,o=this,u=e.replace(i,function(){var e=o.variables.__;o.variables.__=[].slice.call(arguments);var t=o.resolveVariables(s,n),r=\"E\";for(var i=0;i<t.length;i++){var u=t[i];if(typeof u==\"object\"){t[i]=\"\";if(u.changeCase&&u.local){var a=t[i+1];a&&typeof a==\"string\"&&(u.changeCase==\"u\"?t[i]=a[0].toUpperCase():t[i]=a[0].toLowerCase(),t[i+1]=a.substr(1))}else u.changeCase&&(r=u.changeCase)}else r==\"U\"?t[i]=u.toUpperCase():r==\"L\"&&(t[i]=u.toLowerCase())}return o.variables.__=e,t.join(\"\")});return u},e.prototype.tmFormatFunction=function(e,t,n){return t.formatFunction==\"upcase\"?e.toUpperCase():t.formatFunction==\"downcase\"?e.toLowerCase():e},e.prototype.resolveVariables=function(e,t){function f(t){var n=e.indexOf(t,s+1);n!=-1&&(s=n)}var n=[],r=\"\",i=!0;for(var s=0;s<e.length;s++){var o=e[s];if(typeof o==\"string\"){n.push(o),o==\"\\n\"?(i=!0,r=\"\"):i&&(r=/^\\t*/.exec(o)[0],i=/\\S/.test(o));continue}if(!o)continue;i=!1;if(o.fmtString){var u=e.indexOf(o,s+1);u==-1&&(u=e.length),o.fmt=e.slice(s+1,u),s=u}if(o.text){var a=this.getVariableValue(t,o.text,r)+\"\";o.fmtString&&(a=this.tmStrFormat(a,o,t)),o.formatFunction&&(a=this.tmFormatFunction(a,o,t)),a&&!o.ifEnd?(n.push(a),f(o)):!a&&o.ifEnd&&f(o.ifEnd)}else o.elseEnd?f(o.elseEnd):o.tabstopId!=null?n.push(o):o.changeCase!=null&&n.push(o)}return n},e.prototype.getDisplayTextForSnippet=function(e,t){var n=v.call(this,e,t);return n.text},e.prototype.insertSnippetForSelection=function(e,t,n){n===void 0&&(n={});var r=v.call(this,e,t,n),i=e.getSelectionRange(),s=e.session.replace(i,r.text),o=new m(e),u=e.inVirtualSelectionMode&&e.selection.index;o.addTabstops(r.tabstops,i.start,s,u)},e.prototype.insertSnippet=function(e,t,n){n===void 0&&(n={});var r=this;if(e.inVirtualSelectionMode)return r.insertSnippetForSelection(e,t,n);e.forEachSelection(function(){r.insertSnippetForSelection(e,t,n)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},e.prototype.$getScope=function(e){var t=e.session.$mode.$id||\"\";t=t.split(\"/\").pop();if(t===\"html\"||t===\"php\"){t===\"php\"&&!e.session.$mode.inlinePhp&&(t=\"html\");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r==\"object\"&&(r=r[0]),r.substring&&(r.substring(0,3)==\"js-\"?t=\"javascript\":r.substring(0,4)==\"css-\"?t=\"css\":r.substring(0,4)==\"php-\"&&(t=\"php\"))}return t},e.prototype.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push(\"_\"),n},e.prototype.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},e.prototype.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},e.prototype.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[\"\"],i.matchAfter=i.endRe?i.endRe.exec(n):[\"\"],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:\"\",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:\"\",i}},e.prototype.register=function(e,t){function s(e){return e&&!/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e)&&(e=\"(?:\"+e+\")\"),e||\"\"}function u(e,t,n){return e=s(e),t=s(t),n?(e=t+e,e&&e[e.length-1]!=\"$\"&&(e+=\"$\")):(e+=t,e&&e[0]!=\"^\"&&(e=\"^\"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||\"_\"),t=e.scope,n[t]||(n[t]=[],r[t]={});var s=r[t];if(e.name){var a=s[e.name];a&&i.unregister(a),s[e.name]=e}n[t].push(e),e.prefix&&(e.tabTrigger=e.prefix),!e.content&&e.body&&(e.content=Array.isArray(e.body)?e.body.join(\"\\n\"):e.body),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\\w/.test(e.tabTrigger)&&(e.guard=\"\\\\b\"),e.trigger=o.escapeRegExp(e.tabTrigger));if(!e.trigger&&!e.guard&&!e.endTrigger&&!e.endGuard)return;e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),Array.isArray(e)?e.forEach(a):Object.keys(e).forEach(function(t){a(e[t])}),this._signal(\"registerSnippets\",{scope:t})},e.prototype.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},e.prototype.parseSnippetFile=function(e){e=e.replace(/\\r/g,\"\");var t=[],n={},r=/^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\\t/gm,\"\"),t.push(n),n={};else{var o=i[2],u=i[3];if(o==\"regex\"){var a=/\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o==\"snippet\"?(n.tabTrigger=u.match(/^\\S*/)[0],n.name||(n.name=u)):o&&(n[o]=u)}}return t},e.prototype.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r},e}();i.implement(d.prototype,s);var v=function(e,t,n){function l(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof r==\"object\"){if(f[r.tabstopId])continue;var i=e.lastIndexOf(r,n-1);r=t[i]||{tabstopId:r.tabstopId}}t[n]=r}return t}n===void 0&&(n={});var r=e.getCursorPosition(),i=e.session.getLine(r.row),s=e.session.getTabString(),o=i.match(/^\\s*/)[0];r.column<o.length&&(o=o.slice(0,r.column)),t=t.replace(/\\r/g,\"\");var u=this.tokenizeTmSnippet(t);u=this.resolveVariables(u,e),u=u.map(function(e){return e==\"\\n\"&&!n.excludeExtraIndent?e+o:typeof e==\"string\"?e.replace(/\\t/g,s):e});var a=[];u.forEach(function(e,t){if(typeof e!=\"object\")return;var n=e.tabstopId,r=a[n];r||(r=a[n]=[],r.index=n,r.value=\"\",r.parents={});if(r.indexOf(e)!==-1)return;e.choices&&!r.choices&&(r.choices=e.choices),r.push(e);var i=u.indexOf(e,t+1);if(i===-1)return;var s=u.slice(t+1,i),o=s.some(function(e){return typeof e==\"object\"});o&&!r.value?r.value=s:s.length&&(!r.value||typeof r.value!=\"string\")&&(r.value=s.join(\"\"))}),a.forEach(function(e){e.length=0});var f={};for(var c=0;c<u.length;c++){var h=u[c];if(typeof h!=\"object\")continue;var p=h.tabstopId,d=a[p],v=u.indexOf(h,c+1);if(f[p]){f[p]===h&&(delete f[p],Object.keys(f).forEach(function(e){d.parents[e]=!0}));continue}f[p]=h;var m=d.value;typeof m!=\"string\"?m=l(m):h.fmt&&(m=this.tmStrFormat(m,h,e)),u.splice.apply(u,[c+1,Math.max(0,v-c)].concat(m,h)),d.indexOf(h)===-1&&d.push(h)}var g=0,y=0,b=\"\";return u.forEach(function(e){if(typeof e==\"string\"){var t=e.split(\"\\n\");t.length>1?(y=t[t.length-1].length,g+=t.length-1):y+=e.length,b+=e}else e&&(e.start?e.end={row:g,column:y}:e.start={row:g,column:y})}),{text:b,tabstops:a,tokens:u}},m=function(){function e(e){this.index=0,this.ranges=[],this.tabstops=[];if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=o.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)}return e.prototype.attach=function(e){this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.session=e.session,this.editor.on(\"change\",this.$onChange),this.editor.on(\"changeSelection\",this.$onChangeSelection),this.editor.on(\"changeSession\",this.$onChangeSession),this.editor.commands.on(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},e.prototype.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges.length=0,this.tabstops.length=0,this.selectedTabstop=null,this.editor.off(\"change\",this.$onChange),this.editor.off(\"changeSelection\",this.$onChangeSelection),this.editor.off(\"changeSession\",this.$onChangeSession),this.editor.commands.off(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.session=null,this.editor=null},e.prototype.onChange=function(e){var t=e.action[0]==\"r\",n=this.selectedTabstop||{},r=n.parents||{},i=this.tabstops.slice();for(var s=0;s<i.length;s++){var o=i[s],u=o==n||r[o.index];o.rangeList.$bias=u?0:1;if(e.action==\"remove\"&&o!==n){var a=o.parents&&o.parents[n.index],f=o.rangeList.pointIndex(e.start,a);f=f<0?-f-1:f+1;var l=o.rangeList.pointIndex(e.end,a);l=l<0?-l-1:l-1;var c=o.rangeList.ranges.slice(f,l);for(var h=0;h<c.length;h++)this.removeRange(c[h])}o.rangeList.$onChange(e)}var p=this.session;!this.$inChange&&t&&p.getLength()==1&&!p.getValue()&&this.detach()},e.prototype.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges||!e.firstNonLinked)return;this.$inChange=!0;var n=this.session,r=n.getTextRange(e.firstNonLinked);for(var i=0;i<e.length;i++){var s=e[i];if(!s.linked)continue;var o=s.original,u=t.snippetManager.tmStrFormat(r,o,this.editor);n.replace(s,u)}this.$inChange=!1},e.prototype.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},e.prototype.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=0;r<this.ranges.length;r++){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},e.prototype.onChangeSession=function(){this.detach()},e.prototype.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},e.prototype.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;var n=t.firstNonLinked||t;t.choices&&(n.cursor=n.start);if(!this.editor.inVirtualSelectionMode){var r=this.editor.multiSelect;r.toSingleRange(n);for(var i=0;i<t.length;i++){if(t.hasLinkedRanges&&t[i].linked)continue;r.addRange(t[i].clone(),!0)}}else this.editor.selection.fromOrientedRange(n);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler),this.selectedTabstop&&this.selectedTabstop.choices&&this.editor.execCommand(\"startAutocomplete\",{matches:this.selectedTabstop.choices})},e.prototype.addTabstops=function(e,t,n){var r=this.useLink||!this.editor.getOption(\"enableMultiselect\");this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var i=u.fromPoints(n,n);y(i.start,t),y(i.end,t),e[0]=[i],e[0].index=0}var s=this.index,o=[s+1,0],f=this.ranges;e.forEach(function(e,n){var i=this.$openTabstops[n]||e;for(var s=0;s<e.length;s++){var l=e[s],c=u.fromPoints(l.start,l.end||l.start);g(c.start,t),g(c.end,t),c.original=l,c.tabstop=i,f.push(c),i!=e?i.unshift(c):i[s]=c,l.fmtString||i.firstNonLinked&&r?(c.linked=!0,i.hasLinkedRanges=!0):i.firstNonLinked||(i.firstNonLinked=c)}i.firstNonLinked||(i.hasLinkedRanges=!1),i===e&&(o.push(i),this.$openTabstops[n]=i),this.addTabstopMarkers(i),i.rangeList=i.rangeList||new a,i.rangeList.$bias=0,i.rangeList.addList(i)},this),o.length>2&&(this.tabstops.length&&o.push(o.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,o))},e.prototype.addTabstopMarkers=function(e){var t=this.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},e.prototype.removeTabstopMarkers=function(e){var t=this.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},e.prototype.removeRange=function(e){var t=e.tabstop.indexOf(e);t!=-1&&e.tabstop.splice(t,1),t=this.ranges.indexOf(e),t!=-1&&this.ranges.splice(t,1),t=e.tabstop.rangeList.ranges.indexOf(e),t!=-1&&e.tabstop.splice(t,1),this.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},e}();m.prototype.keyboardHandler=new f,m.prototype.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1),e.renderer.scrollCursorIntoView()},\"Shift-Tab\":function(e){e.tabstopManager.tabNext(-1),e.renderer.scrollCursorIntoView()},Esc:function(e){e.tabstopManager.detach()}});var g=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},y=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};r.importCssString(\"\\n.ace_snippet-marker {\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n background: rgba(194, 193, 208, 0.09);\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\n position: absolute;\\n}\",\"snippets.css\",!1),t.snippetManager=new d;var b=e(\"./editor\").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(b.prototype)}),ace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"../virtual_renderer\").VirtualRenderer,i=e(\"../editor\").Editor,s=e(\"../range\").Range,o=e(\"../lib/event\"),u=e(\"../lib/lang\"),a=e(\"../lib/dom\"),f=e(\"../config\").nls,l=e(\"./../lib/useragent\"),c=function(e){return\"suggest-aria-id:\".concat(e)},h=l.isSafari?\"menu\":\"listbox\",p=l.isSafari?\"menuitem\":\"option\",d=l.isSafari?\"aria-current\":\"aria-selected\",v=function(e){var t=new r(e);t.$maxLines=4;var n=new i(t);return n.setHighlightActiveLine(!1),n.setShowPrintMargin(!1),n.renderer.setShowGutter(!1),n.renderer.setHighlightGutterLine(!1),n.$mouseHandler.$focusTimeout=0,n.$highlightTagPending=!0,n},m=function(){function e(e){var t=a.createElement(\"div\"),n=v(t);e&&e.appendChild(t),t.style.display=\"none\",n.renderer.content.style.cursor=\"default\",n.renderer.setStyle(\"ace_autocomplete\"),n.renderer.$textLayer.element.setAttribute(\"role\",h),n.renderer.$textLayer.element.setAttribute(\"aria-roledescription\",f(\"Autocomplete suggestions\")),n.renderer.$textLayer.element.setAttribute(\"aria-label\",f(\"Autocomplete suggestions\")),n.renderer.textarea.setAttribute(\"aria-hidden\",\"true\"),n.setOption(\"displayIndentGuides\",!1),n.setOption(\"dragDelay\",150);var r=function(){};n.focus=r,n.$isFocused=!0,n.renderer.$cursorLayer.restartTimer=r,n.renderer.$cursorLayer.element.style.opacity=\"0\",n.renderer.$maxLines=8,n.renderer.$keepTextAreaAtCursor=!1,n.setHighlightActiveLine(!1),n.session.highlight(\"\"),n.session.$searchHighlight.clazz=\"ace_highlight-marker\",n.on(\"mousedown\",function(e){var t=e.getDocumentPosition();n.selection.moveToPosition(t),m.start.row=m.end.row=t.row,e.stop()});var i,l=new s(-1,0,-1,Infinity),m=new s(-1,0,-1,Infinity);m.id=n.session.addMarker(m,\"ace_active-line\",\"fullLine\"),n.setSelectOnHover=function(e){e?l.id&&(n.session.removeMarker(l.id),l.id=null):l.id=n.session.addMarker(l,\"ace_line-hover\",\"fullLine\")},n.setSelectOnHover(!1),n.on(\"mousemove\",function(e){if(!i){i=e;return}if(i.x==e.x&&i.y==e.y)return;i=e,i.scrollTop=n.renderer.scrollTop,n.isMouseOver=!0;var t=i.getDocumentPosition().row;l.start.row!=t&&(l.id||n.setRow(t),y(t))}),n.renderer.on(\"beforeRender\",function(){if(i&&l.start.row!=-1){i.$pos=null;var e=i.getDocumentPosition().row;l.id||n.setRow(e),y(e,!0)}}),n.renderer.on(\"afterRender\",function(){var e=n.getRow(),t=n.renderer.$textLayer,r=t.element.childNodes[e-t.config.firstRow],i=document.activeElement;r!==n.selectedNode&&n.selectedNode&&(a.removeCssClass(n.selectedNode,\"ace_selected\"),i.removeAttribute(\"aria-activedescendant\"),n.selectedNode.removeAttribute(d),n.selectedNode.removeAttribute(\"id\")),n.selectedNode=r;if(r){a.addCssClass(r,\"ace_selected\");var s=c(e);r.id=s,t.element.setAttribute(\"aria-activedescendant\",s),i.setAttribute(\"aria-activedescendant\",s),r.setAttribute(\"role\",p),r.setAttribute(\"aria-roledescription\",f(\"item\")),r.setAttribute(\"aria-label\",n.getData(e).value),r.setAttribute(\"aria-setsize\",n.data.length),r.setAttribute(\"aria-posinset\",e+1),r.setAttribute(\"aria-describedby\",\"doc-tooltip\"),r.setAttribute(d,\"true\")}});var g=function(){y(-1)},y=function(e,t){e!==l.start.row&&(l.start.row=l.end.row=e,t||n.session._emit(\"changeBackMarker\"),n._emit(\"changeHoverMarker\"))};n.getHoveredRow=function(){return l.start.row},o.addListener(n.container,\"mouseout\",function(){n.isMouseOver=!1,g()}),n.on(\"hide\",g),n.on(\"changeSelection\",g),n.session.doc.getLength=function(){return n.data.length},n.session.doc.getLine=function(e){var t=n.data[e];return typeof t==\"string\"?t:t&&t.value||\"\"};var b=n.session.bgTokenizer;return b.$tokenizeRow=function(e){function s(e,n){e&&r.push({type:(t.className||\"\")+(n||\"\"),value:e})}var t=n.data[e],r=[];if(!t)return r;typeof t==\"string\"&&(t={value:t});var i=t.caption||t.value||t.name,o=i.toLowerCase(),u=(n.filterText||\"\").toLowerCase(),a=0,f=0;for(var l=0;l<=u.length;l++)if(l!=f&&(t.matchMask&1<<l||l==u.length)){var c=u.slice(f,l);f=l;var h=o.indexOf(c,a);if(h==-1)continue;s(i.slice(a,h),\"\"),a=h+c.length,s(i.slice(h,a),\"completion-highlight\")}return s(i.slice(a,i.length),\"\"),r.push({type:\"completion-spacer\",value:\" \"}),t.meta&&r.push({type:\"completion-meta\",value:t.meta}),t.message&&r.push({type:\"completion-message\",value:t.message}),r},b.$updateOnChange=r,b.start=r,n.session.$computeWidth=function(){return this.screenWidth=0},n.isOpen=!1,n.isTopdown=!1,n.autoSelect=!0,n.filterText=\"\",n.isMouseOver=!1,n.data=[],n.setData=function(e,t){n.filterText=t||\"\",n.setValue(u.stringRepeat(\"\\n\",e.length),-1),n.data=e||[],n.setRow(0)},n.getData=function(e){return n.data[e]},n.getRow=function(){return m.start.row},n.setRow=function(e){e=Math.max(this.autoSelect?0:-1,Math.min(this.data.length-1,e)),m.start.row!=e&&(n.selection.clearSelection(),m.start.row=m.end.row=e||0,n.session._emit(\"changeBackMarker\"),n.moveCursorTo(e||0,0),n.isOpen&&n._signal(\"select\"))},n.on(\"changeSelection\",function(){n.isOpen&&n.setRow(n.selection.lead.row),n.renderer.scrollCursorIntoView()}),n.hide=function(){this.container.style.display=\"none\",n.anchorPos=null,n.anchor=null,n.isOpen&&(n.isOpen=!1,this._signal(\"hide\"))},n.tryShow=function(e,t,r,s){if(!s&&n.isOpen&&n.anchorPos&&n.anchor&&n.anchorPos.top===e.top&&n.anchorPos.left===e.left&&n.anchor===r)return!0;var o=this.container,u=window.innerHeight,a=window.innerWidth,f=this.renderer,l=f.$maxLines*t*1.4,c={top:0,bottom:0,left:0},h=u-e.top-3*this.$borderSize-t,p=e.top-3*this.$borderSize;r||(p<=h||h>=l?r=\"bottom\":r=\"top\"),r===\"top\"?(c.bottom=e.top-this.$borderSize,c.top=c.bottom-l):r===\"bottom\"&&(c.top=e.top+t+this.$borderSize,c.bottom=c.top+l);var d=c.top>=0&&c.bottom<=u;if(!s&&!d)return!1;d?f.$maxPixelHeight=null:r===\"top\"?f.$maxPixelHeight=p:f.$maxPixelHeight=h,r===\"top\"?(o.style.top=\"\",o.style.bottom=u-c.bottom+\"px\",n.isTopdown=!1):(o.style.top=c.top+\"px\",o.style.bottom=\"\",n.isTopdown=!0),o.style.display=\"\";var v=e.left;return v+o.offsetWidth>a&&(v=a-o.offsetWidth),o.style.left=v+\"px\",o.style.right=\"\",n.isOpen||(n.isOpen=!0,this._signal(\"show\"),i=null),n.anchorPos=e,n.anchor=r,!0},n.show=function(e,t,n){this.tryShow(e,t,n?\"bottom\":undefined,!0)},n.goTo=function(e){var t=this.getRow(),n=this.session.getLength()-1;switch(e){case\"up\":t=t<=0?n:t-1;break;case\"down\":t=t>=n?-1:t+1;break;case\"start\":t=0;break;case\"end\":t=n}this.setRow(t)},n.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},n.$imageSize=0,n.$borderSize=1,n}return e}();a.importCssString('\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #CAD6FA;\\n z-index: 1;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #3a674e;\\n}\\n.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid #abbffe;\\n margin-top: -1px;\\n background: rgba(233,233,253,0.4);\\n position: absolute;\\n z-index: 2;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid rgba(109, 150, 13, 0.8);\\n background: rgba(58, 103, 78, 0.62);\\n}\\n.ace_completion-meta {\\n opacity: 0.5;\\n margin-left: 0.9em;\\n}\\n.ace_completion-message {\\n margin-left: 0.9em;\\n color: blue;\\n}\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #2d69c7;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #93ca12;\\n}\\n.ace_editor.ace_autocomplete {\\n width: 300px;\\n z-index: 200000;\\n border: 1px lightgray solid;\\n position: fixed;\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n line-height: 1.4;\\n background: #fefefe;\\n color: #111;\\n}\\n.ace_dark.ace_editor.ace_autocomplete {\\n border: 1px #484747 solid;\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\n line-height: 1.4;\\n background: #25282c;\\n color: #c1c1c1;\\n}\\n.ace_autocomplete .ace_text-layer {\\n width: calc(100% - 8px);\\n}\\n.ace_autocomplete .ace_line {\\n display: flex;\\n align-items: center;\\n}\\n.ace_autocomplete .ace_line > * {\\n min-width: 0;\\n flex: 0 0 auto;\\n}\\n.ace_autocomplete .ace_line .ace_ {\\n flex: 0 1 auto;\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n.ace_autocomplete .ace_completion-spacer {\\n flex: 1;\\n}\\n.ace_autocomplete.ace_loading:after {\\n content: \"\";\\n position: absolute;\\n top: 0px;\\n height: 2px;\\n width: 8%;\\n background: blue;\\n z-index: 100;\\n animation: ace_progress 3s infinite linear;\\n animation-delay: 300ms;\\n transform: translateX(-100%) scaleX(1);\\n}\\n@keyframes ace_progress {\\n 0% { transform: translateX(-100%) scaleX(1) }\\n 50% { transform: translateX(625%) scaleX(2) } \\n 100% { transform: translateX(1500%) scaleX(3) } \\n}\\n@media (prefers-reduced-motion) {\\n .ace_autocomplete.ace_loading:after {\\n transform: translateX(625%) scaleX(2);\\n animation: none;\\n }\\n}\\n',\"autocompletion.css\",!1),t.AcePopup=m,t.$singleLineEditor=v,t.getAriaId=c}),ace.define(\"ace/autocomplete/inline_screenreader\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(){function e(e){this.editor=e,this.screenReaderDiv=document.createElement(\"div\"),this.screenReaderDiv.classList.add(\"ace_screenreader-only\"),this.editor.container.appendChild(this.screenReaderDiv)}return e.prototype.setScreenReaderContent=function(e){!this.popup&&this.editor.completer&&this.editor.completer.popup&&(this.popup=this.editor.completer.popup,this.popup.renderer.on(\"afterRender\",function(){var e=this.popup.getRow(),t=this.popup.renderer.$textLayer,n=t.element.childNodes[e-t.config.firstRow];if(n){var r=\"doc-tooltip \";for(var i=0;i<this._lines.length;i++)r+=\"ace-inline-screenreader-line-\".concat(i,\" \");n.setAttribute(\"aria-describedby\",r)}}.bind(this)));while(this.screenReaderDiv.firstChild)this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild);this._lines=e.split(/\\r\\n|\\r|\\n/);var t=this.createCodeBlock();this.screenReaderDiv.appendChild(t)},e.prototype.destroy=function(){this.screenReaderDiv.remove()},e.prototype.createCodeBlock=function(){var e=document.createElement(\"pre\");e.setAttribute(\"id\",\"ace-inline-screenreader\");for(var t=0;t<this._lines.length;t++){var n=document.createElement(\"code\");n.setAttribute(\"id\",\"ace-inline-screenreader-line-\".concat(t));var r=document.createTextNode(this._lines[t]);n.appendChild(r),e.appendChild(n)}return e},e}();t.AceInlineScreenReader=r}),ace.define(\"ace/autocomplete/inline\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete/inline_screenreader\"],function(e,t,n){\"use strict\";var r=e(\"../snippets\").snippetManager,i=e(\"./inline_screenreader\").AceInlineScreenReader,s=function(){function e(){this.editor=null}return e.prototype.show=function(e,t,n){n=n||\"\",e&&this.editor&&this.editor!==e&&(this.hide(),this.editor=null,this.inlineScreenReader=null);if(!e||!t)return!1;this.inlineScreenReader||(this.inlineScreenReader=new i(e));var s=t.snippet?r.getDisplayTextForSnippet(e,t.snippet):t.value;return t.hideInlinePreview||!s||!s.startsWith(n)?!1:(this.editor=e,this.inlineScreenReader.setScreenReaderContent(s),s=s.slice(n.length),s===\"\"?e.removeGhostText():e.setGhostText(s),!0)},e.prototype.isOpen=function(){return this.editor?!!this.editor.renderer.$ghostText:!1},e.prototype.hide=function(){return this.editor?(this.editor.removeGhostText(),!0):!1},e.prototype.destroy=function(){this.hide(),this.editor=null,this.inlineScreenReader&&(this.inlineScreenReader.destroy(),this.inlineScreenReader=null)},e}();t.AceInline=s}),ace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.parForEach=function(e,t,n){var r=0,i=e.length;i===0&&n();for(var s=0;s<i;s++)t(e[s],function(e,t){r++,r===i&&n(e,t)})};var r=/[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;t.retrievePrecedingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t-1;s>=0;s--){if(!n.test(e[s]))break;i.push(e[s])}return i.reverse().join(\"\")},t.retrieveFollowingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t;s<e.length;s++){if(!n.test(e[s]))break;i.push(e[s])}return i},t.getCompletionPrefix=function(e){var t=e.getCursorPosition(),n=e.session.getLine(t.row),r;return e.completers.forEach(function(e){e.identifierRegexps&&e.identifierRegexps.forEach(function(e){!r&&e&&(r=this.retrievePrecedingIdentifier(n,t.column,e))}.bind(this))}.bind(this)),r||this.retrievePrecedingIdentifier(n,t.column)},t.triggerAutocomplete=function(e){var t=e.getCursorPosition(),n=e.session.getLine(t.row),r=t.column===0?0:t.column-1,i=n[r];return e.completers.some(function(e){if(e.triggerCharacters&&Array.isArray(e.triggerCharacters))return e.triggerCharacters.includes(i)})}}),ace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/inline\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\",\"ace/lib/event\",\"ace/lib/scroll\"],function(e,t,n){\"use strict\";var r=e(\"./keyboard/hash_handler\").HashHandler,i=e(\"./autocomplete/popup\").AcePopup,s=e(\"./autocomplete/inline\").AceInline,o=e(\"./autocomplete/popup\").getAriaId,u=e(\"./autocomplete/util\"),a=e(\"./lib/lang\"),f=e(\"./lib/dom\"),l=e(\"./snippets\").snippetManager,c=e(\"./config\"),h=e(\"./lib/event\"),p=e(\"./lib/scroll\").preventParentScroll,d=function(e,t){t.completer&&t.completer.destroy()},v=function(){function e(){this.autoInsert=!1,this.autoSelect=!0,this.autoShown=!1,this.exactMatch=!1,this.inlineEnabled=!1,this.keyboardHandler=new r,this.keyboardHandler.bindKeys(this.commands),this.parentNode=null,this.setSelectOnHover=!1,this.hasSeen=new Set,this.showLoadingState=!1,this.stickySelectionDelay=500,this.blurListener=this.blurListener.bind(this),this.changeListener=this.changeListener.bind(this),this.mousedownListener=this.mousedownListener.bind(this),this.mousewheelListener=this.mousewheelListener.bind(this),this.onLayoutChange=this.onLayoutChange.bind(this),this.changeTimer=a.delayedCall(function(){this.updateCompletions(!0)}.bind(this)),this.tooltipTimer=a.delayedCall(this.updateDocTooltip.bind(this),50),this.popupTimer=a.delayedCall(this.$updatePopupPosition.bind(this),50),this.stickySelectionTimer=a.delayedCall(function(){this.stickySelection=!0}.bind(this),this.stickySelectionDelay),this.$firstOpenTimer=a.delayedCall(function(){var t=this.completionProvider&&this.completionProvider.initialPosition;if(this.autoShown||this.popup&&this.popup.isOpen||!t||this.editor.completers.length===0)return;this.completions=new g(e.completionsForLoading),this.openPopup(this.editor,t.prefix,!1),this.popup.renderer.setStyle(\"ace_loading\",!0)}.bind(this),this.stickySelectionDelay)}return Object.defineProperty(e,\"completionsForLoading\",{get:function(){return[{caption:c.nls(\"Loading...\"),value:\"\"}]},enumerable:!1,configurable:!0}),e.prototype.$init=function(){return this.popup=new i(this.parentNode||document.body||document.documentElement),this.popup.on(\"click\",function(e){this.insertMatch(),e.stop()}.bind(this)),this.popup.focus=this.editor.focus.bind(this.editor),this.popup.on(\"show\",this.$onPopupShow.bind(this)),this.popup.on(\"hide\",this.$onHidePopup.bind(this)),this.popup.on(\"select\",this.$onPopupChange.bind(this)),h.addListener(this.popup.container,\"mouseout\",this.mouseOutListener.bind(this)),this.popup.on(\"changeHoverMarker\",this.tooltipTimer.bind(null,null)),this.popup.renderer.on(\"afterRender\",this.$onPopupRender.bind(this)),this.popup},e.prototype.$initInline=function(){if(!this.inlineEnabled||this.inlineRenderer)return;return this.inlineRenderer=new s,this.inlineRenderer},e.prototype.getPopup=function(){return this.popup||this.$init()},e.prototype.$onHidePopup=function(){this.inlineRenderer&&this.inlineRenderer.hide(),this.hideDocTooltip(),this.stickySelectionTimer.cancel(),this.popupTimer.cancel(),this.stickySelection=!1},e.prototype.$seen=function(e){!this.hasSeen.has(e)&&e&&e.completer&&e.completer.onSeen&&typeof e.completer.onSeen==\"function\"&&(e.completer.onSeen(this.editor,e),this.hasSeen.add(e))},e.prototype.$onPopupChange=function(e){if(this.inlineRenderer&&this.inlineEnabled){var t=e?null:this.popup.getData(this.popup.getRow());this.$updateGhostText(t);if(this.popup.isMouseOver&&this.setSelectOnHover){this.tooltipTimer.call(null,null);return}this.popupTimer.schedule(),this.tooltipTimer.schedule()}else this.popupTimer.call(null,null),this.tooltipTimer.call(null,null)},e.prototype.$updateGhostText=function(e){var t=this.base.row,n=this.base.column,r=this.editor.getCursorPosition().column,i=this.editor.session.getLine(t).slice(n,r);this.inlineRenderer.show(this.editor,e,i)?this.$seen(e):this.inlineRenderer.hide()},e.prototype.$onPopupRender=function(){var e=this.inlineRenderer&&this.inlineEnabled;if(this.completions&&this.completions.filtered&&this.completions.filtered.length>0)for(var t=this.popup.getFirstVisibleRow();t<=this.popup.getLastVisibleRow();t++){var n=this.popup.getData(t);n&&(!e||n.hideInlinePreview)&&this.$seen(n)}},e.prototype.$onPopupShow=function(e){this.$onPopupChange(e),this.stickySelection=!1,this.stickySelectionDelay>=0&&this.stickySelectionTimer.schedule(this.stickySelectionDelay)},e.prototype.observeLayoutChanges=function(){if(this.$elements||!this.editor)return;window.addEventListener(\"resize\",this.onLayoutChange,{passive:!0}),window.addEventListener(\"wheel\",this.mousewheelListener);var e=this.editor.container.parentNode,t=[];while(e)t.push(e),e.addEventListener(\"scroll\",this.onLayoutChange,{passive:!0}),e=e.parentNode;this.$elements=t},e.prototype.unObserveLayoutChanges=function(){var e=this;window.removeEventListener(\"resize\",this.onLayoutChange,{passive:!0}),window.removeEventListener(\"wheel\",this.mousewheelListener),this.$elements&&this.$elements.forEach(function(t){t.removeEventListener(\"scroll\",e.onLayoutChange,{passive:!0})}),this.$elements=null},e.prototype.onLayoutChange=function(){if(!this.popup.isOpen)return this.unObserveLayoutChanges();this.$updatePopupPosition(),this.updateDocTooltip()},e.prototype.$updatePopupPosition=function(){var e=this.editor,t=e.renderer,n=t.layerConfig.lineHeight,r=t.$cursorLayer.getPixelPosition(this.base,!0);r.left-=this.popup.getTextLeftOffset();var i=e.container.getBoundingClientRect();r.top+=i.top-t.layerConfig.offset,r.left+=i.left-e.renderer.scrollLeft,r.left+=t.gutterWidth;var s={top:r.top,left:r.left};t.$ghostText&&t.$ghostTextWidget&&this.base.row===t.$ghostText.position.row&&(s.top+=t.$ghostTextWidget.el.offsetHeight);var o=e.container.getBoundingClientRect().bottom-n,u=o<s.top?{top:o,left:s.left}:s;if(this.popup.tryShow(u,n,\"bottom\"))return;if(this.popup.tryShow(r,n,\"top\"))return;this.popup.show(r,n)},e.prototype.openPopup=function(e,t,n){this.$firstOpenTimer.cancel(),this.popup||this.$init(),this.inlineEnabled&&!this.inlineRenderer&&this.$initInline(),this.popup.autoSelect=this.autoSelect,this.popup.setSelectOnHover(this.setSelectOnHover);var r=this.popup.getRow(),i=this.popup.data[r];this.popup.setData(this.completions.filtered,this.completions.filterText),this.editor.textInput.setAriaOptions&&this.editor.textInput.setAriaOptions({activeDescendant:o(this.popup.getRow()),inline:this.inlineEnabled}),e.keyBinding.addKeyboardHandler(this.keyboardHandler);var s;this.stickySelection&&(s=this.popup.data.indexOf(i));if(!s||s===-1)s=0;this.popup.setRow(this.autoSelect?s:-1),s===r&&i!==this.completions.filtered[s]&&this.$onPopupChange();var u=this.inlineRenderer&&this.inlineEnabled;if(s===r&&u){var a=this.popup.getData(this.popup.getRow());this.$updateGhostText(a)}n?n&&!t&&this.detach():(this.popup.setTheme(e.getTheme()),this.popup.setFontSize(e.getFontSize()),this.$updatePopupPosition(),this.tooltipNode&&this.updateDocTooltip()),this.changeTimer.cancel(),this.observeLayoutChanges()},e.prototype.detach=function(){this.editor&&(this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.off(\"changeSelection\",this.changeListener),this.editor.off(\"blur\",this.blurListener),this.editor.off(\"mousedown\",this.mousedownListener),this.editor.off(\"mousewheel\",this.mousewheelListener)),this.$firstOpenTimer.cancel(),this.changeTimer.cancel(),this.hideDocTooltip(),this.completionProvider&&this.completionProvider.detach(),this.popup&&this.popup.isOpen&&this.popup.hide(),this.popup&&this.popup.renderer&&this.popup.renderer.off(\"afterRender\",this.$onPopupRender),this.base&&this.base.detach(),this.activated=!1,this.completionProvider=this.completions=this.base=null,this.unObserveLayoutChanges()},e.prototype.changeListener=function(e){var t=this.editor.selection.lead;(t.row!=this.base.row||t.column<this.base.column)&&this.detach(),this.activated?this.changeTimer.schedule():this.detach()},e.prototype.blurListener=function(e){var t=document.activeElement,n=this.editor.textInput.getElement(),r=e.relatedTarget&&this.tooltipNode&&this.tooltipNode.contains(e.relatedTarget),i=this.popup&&this.popup.container;t!=n&&t.parentNode!=i&&!r&&t!=this.tooltipNode&&e.relatedTarget!=n&&this.detach()},e.prototype.mousedownListener=function(e){this.detach()},e.prototype.mousewheelListener=function(e){this.popup.isMouseOver||this.detach()},e.prototype.mouseOutListener=function(e){this.popup.isOpen&&this.$updatePopupPosition()},e.prototype.goTo=function(e){this.popup.goTo(e)},e.prototype.insertMatch=function(e,t){e||(e=this.popup.getData(this.popup.getRow()));if(!e)return!1;if(e.value===\"\")return this.detach();var n=this.completions,r=this.getCompletionProvider().insertMatch(this.editor,e,n.filterText,t);return this.completions==n&&this.detach(),r},e.prototype.showPopup=function(e,t){this.editor&&this.detach(),this.activated=!0,this.editor=e,e.completer!=this&&(e.completer&&e.completer.detach(),e.completer=this),e.on(\"changeSelection\",this.changeListener),e.on(\"blur\",this.blurListener),e.on(\"mousedown\",this.mousedownListener),e.on(\"mousewheel\",this.mousewheelListener),this.updateCompletions(!1,t)},e.prototype.getCompletionProvider=function(e){return this.completionProvider||(this.completionProvider=new m(e)),this.completionProvider},e.prototype.gatherCompletions=function(e,t){return this.getCompletionProvider().gatherCompletions(e,t)},e.prototype.updateCompletions=function(t,n){if(t&&this.base&&this.completions){var r=this.editor.getCursorPosition(),i=this.editor.session.getTextRange({start:this.base,end:r});if(i==this.completions.filterText)return;this.completions.setFilter(i);if(!this.completions.filtered.length)return this.detach();if(this.completions.filtered.length==1&&this.completions.filtered[0].value==i&&!this.completions.filtered[0].snippet)return this.detach();this.openPopup(this.editor,i,t);return}if(n&&n.matches){var r=this.editor.getSelectionRange().start;return this.base=this.editor.session.doc.createAnchor(r.row,r.column),this.base.$insertRight=!0,this.completions=new g(n.matches),this.openPopup(this.editor,\"\",t)}var s=this.editor.getSession(),r=this.editor.getCursorPosition(),i=u.getCompletionPrefix(this.editor);this.base=s.doc.createAnchor(r.row,r.column-i.length),this.base.$insertRight=!0;var o={exactMatch:this.exactMatch,ignoreCaption:this.ignoreCaption};this.getCompletionProvider({prefix:i,pos:r}).provideCompletions(this.editor,o,function(n,r,i){var s=r.filtered,o=u.getCompletionPrefix(this.editor);this.$firstOpenTimer.cancel();if(i){if(!s.length){var a=!this.autoShown&&this.emptyMessage;typeof a==\"function\"&&(a=this.emptyMessage(o));if(a){var f=[{caption:a,value:\"\"}];this.completions=new g(f),this.openPopup(this.editor,o,t),this.popup.renderer.setStyle(\"ace_loading\",!1);return}return this.detach()}if(s.length==1&&s[0].value==o&&!s[0].snippet)return this.detach();if(this.autoInsert&&!this.autoShown&&s.length==1)return this.insertMatch(s[0])}this.completions=!i&&this.showLoadingState?new g(e.completionsForLoading.concat(s),r.filterText):r,this.openPopup(this.editor,o,t),this.popup.renderer.setStyle(\"ace_loading\",!i)}.bind(this)),this.showLoadingState&&!this.autoShown&&(!this.popup||!this.popup.isOpen)&&this.$firstOpenTimer.delay(this.stickySelectionDelay/2)},e.prototype.cancelContextMenu=function(){this.editor.$mouseHandler.cancelContextMenu()},e.prototype.updateDocTooltip=function(){var e=this.popup,t=this.completions.filtered,n=t&&(t[e.getHoveredRow()]||t[e.getRow()]),r=null;if(!n||!this.editor||!this.popup.isOpen)return this.hideDocTooltip();var i=this.editor.completers.length;for(var s=0;s<i;s++){var o=this.editor.completers[s];if(o.getDocTooltip&&n.completerId===o.id){r=o.getDocTooltip(n);break}}!r&&typeof n!=\"string\"&&(r=n),typeof r==\"string\"&&(r={docText:r});if(!r||!r.docHTML&&!r.docText)return this.hideDocTooltip();this.showDocTooltip(r)},e.prototype.showDocTooltip=function(e){this.tooltipNode||(this.tooltipNode=f.createElement(\"div\"),this.tooltipNode.style.margin=\"0\",this.tooltipNode.style.pointerEvents=\"auto\",this.tooltipNode.style.overscrollBehavior=\"contain\",this.tooltipNode.tabIndex=-1,this.tooltipNode.onblur=this.blurListener.bind(this),this.tooltipNode.onclick=this.onTooltipClick.bind(this),this.tooltipNode.id=\"doc-tooltip\",this.tooltipNode.setAttribute(\"role\",\"tooltip\"),this.tooltipNode.addEventListener(\"wheel\",p));var t=this.editor.renderer.theme;this.tooltipNode.className=\"ace_tooltip ace_doc-tooltip \"+(t.isDark?\"ace_dark \":\"\")+(t.cssClass||\"\");var n=this.tooltipNode;e.docHTML?n.innerHTML=e.docHTML:e.docText&&(n.textContent=e.docText),n.parentNode||this.popup.container.appendChild(this.tooltipNode);var r=this.popup,i=r.container.getBoundingClientRect();n.style.top=r.container.style.top,n.style.bottom=r.container.style.bottom,n.style.display=\"block\",window.innerWidth-i.right<320?i.left<320?r.isTopdown?(n.style.top=i.bottom+\"px\",n.style.left=i.left+\"px\",n.style.right=\"\",n.style.bottom=\"\"):(n.style.top=r.container.offsetTop-n.offsetHeight+\"px\",n.style.left=i.left+\"px\",n.style.right=\"\",n.style.bottom=\"\"):(n.style.right=window.innerWidth-i.left+\"px\",n.style.left=\"\"):(n.style.left=i.right+1+\"px\",n.style.right=\"\")},e.prototype.hideDocTooltip=function(){this.tooltipTimer.cancel();if(!this.tooltipNode)return;var e=this.tooltipNode;!this.editor.isFocused()&&document.activeElement==e&&this.editor.focus(),this.tooltipNode=null,e.parentNode&&e.parentNode.removeChild(e)},e.prototype.onTooltipClick=function(e){var t=e.target;while(t&&t!=this.tooltipNode){if(t.nodeName==\"A\"&&t.href){t.rel=\"noreferrer\",t.target=\"_blank\";break}t=t.parentNode}},e.prototype.destroy=function(){this.detach();if(this.popup){this.popup.destroy();var e=this.popup.container;e&&e.parentNode&&e.parentNode.removeChild(e)}this.editor&&this.editor.completer==this&&(this.editor.off(\"destroy\",d),this.editor.completer=null),this.inlineRenderer=this.popup=this.editor=null},e}();v.prototype.commands={Up:function(e){e.completer.goTo(\"up\")},Down:function(e){e.completer.goTo(\"down\")},\"Ctrl-Up|Ctrl-Home\":function(e){e.completer.goTo(\"start\")},\"Ctrl-Down|Ctrl-End\":function(e){e.completer.goTo(\"end\")},Esc:function(e){e.completer.detach()},Return:function(e){return e.completer.insertMatch()},\"Shift-Return\":function(e){e.completer.insertMatch(null,{deleteSuffix:!0})},Tab:function(e){var t=e.completer.insertMatch();if(!!t||!!e.tabstopManager)return t;e.completer.goTo(\"down\")},PageUp:function(e){e.completer.popup.gotoPageUp()},PageDown:function(e){e.completer.popup.gotoPageDown()}},v.for=function(e){return e.completer instanceof v?e.completer:(e.completer&&(e.completer.destroy(),e.completer=null),c.get(\"sharedPopups\")?(v.$sharedInstance||(v.$sharedInstance=new v),e.completer=v.$sharedInstance):(e.completer=new v,e.once(\"destroy\",d)),e.completer)},v.startCommand={name:\"startAutocomplete\",exec:function(e,t){var n=v.for(e);n.autoInsert=!1,n.autoSelect=!0,n.autoShown=!1,n.showPopup(e,t),n.cancelContextMenu()},bindKey:\"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"};var m=function(){function e(e){this.initialPosition=e,this.active=!0}return e.prototype.insertByIndex=function(e,t,n){return!this.completions||!this.completions.filtered?!1:this.insertMatch(e,this.completions.filtered[t],n)},e.prototype.insertMatch=function(e,t,n){if(!t)return!1;e.startOperation({command:{name:\"insertMatch\"}});if(t.completer&&t.completer.insertMatch)t.completer.insertMatch(e,t);else{if(!this.completions)return!1;var r=this.completions.filterText.length,i=0;t.range&&t.range.start.row===t.range.end.row&&(r-=this.initialPosition.prefix.length,r+=this.initialPosition.pos.column-t.range.start.column,i+=t.range.end.column-this.initialPosition.pos.column);if(r||i){var s;e.selection.getAllRanges?s=e.selection.getAllRanges():s=[e.getSelectionRange()];for(var o=0,u;u=s[o];o++)u.start.column-=r,u.end.column+=i,e.session.remove(u)}t.snippet?l.insertSnippet(e,t.snippet):this.$insertString(e,t),t.completer&&t.completer.onInsert&&typeof t.completer.onInsert==\"function\"&&t.completer.onInsert(e,t),t.command&&t.command===\"startAutocomplete\"&&e.execCommand(t.command)}return e.endOperation(),!0},e.prototype.$insertString=function(e,t){var n=t.value||t;e.execCommand(\"insertstring\",n)},e.prototype.gatherCompletions=function(e,t){var n=e.getSession(),r=e.getCursorPosition(),i=u.getCompletionPrefix(e),s=[];this.completers=e.completers;var o=e.completers.length;return e.completers.forEach(function(a,f){a.getCompletions(e,n,r,i,function(n,r){a.hideInlinePreview&&(r=r.map(function(e){return Object.assign(e,{hideInlinePreview:a.hideInlinePreview})})),!n&&r&&(s=s.concat(r)),t(null,{prefix:u.getCompletionPrefix(e),matches:s,finished:--o===0})})}),!0},e.prototype.provideCompletions=function(e,t,n){var r=function(e){var r=e.prefix,i=e.matches;this.completions=new g(i),t.exactMatch&&(this.completions.exactMatch=!0),t.ignoreCaption&&(this.completions.ignoreCaption=!0),this.completions.setFilter(r),(e.finished||this.completions.filtered.length)&&n(null,this.completions,e.finished)}.bind(this),i=!0,s=null;this.gatherCompletions(e,function(e,t){if(!this.active)return;e&&(n(e,[],!0),this.detach());var o=t.prefix;if(o.indexOf(t.prefix)!==0)return;if(i){s=t;return}r(t)}.bind(this)),i=!1;if(s){var o=s;s=null,r(o)}},e.prototype.detach=function(){this.active=!1,this.completers&&this.completers.forEach(function(e){typeof e.cancel==\"function\"&&e.cancel()})},e}(),g=function(){function e(e,t){this.all=e,this.filtered=e,this.filterText=t||\"\",this.exactMatch=!1,this.ignoreCaption=!1}return e.prototype.setFilter=function(e){if(e.length>this.filterText&&e.lastIndexOf(this.filterText,0)===0)var t=this.filtered;else var t=this.all;this.filterText=e,t=this.filterCompletions(t,this.filterText),t=t.sort(function(e,t){return t.exactMatch-e.exactMatch||t.$score-e.$score||(e.caption||e.value).localeCompare(t.caption||t.value)});var n=null;t=t.filter(function(e){var t=e.snippet||e.caption||e.value;return t===n?!1:(n=t,!0)}),this.filtered=t},e.prototype.filterCompletions=function(e,t){var n=[],r=t.toUpperCase(),i=t.toLowerCase();e:for(var s=0,o;o=e[s];s++){var u=!this.ignoreCaption&&o.caption||o.value||o.snippet;if(!u)continue;var a=-1,f=0,l=0,c,h;if(this.exactMatch){if(t!==u.substr(0,t.length))continue e}else{var p=u.toLowerCase().indexOf(i);if(p>-1)l=p;else for(var d=0;d<t.length;d++){var v=u.indexOf(i[d],a+1),m=u.indexOf(r[d],a+1);c=v>=0?m<0||v<m?v:m:m;if(c<0)continue e;h=c-a-1,h>0&&(a===-1&&(l+=10),l+=h,f|=1<<d),a=c}}o.matchMask=f,o.exactMatch=l?0:1,o.$score=(o.score||0)-l,n.push(o)}return n},e}();t.Autocomplete=v,t.CompletionProvider=m,t.FilteredList=g}),ace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){function s(e,t){var n=e.getTextRange(r.fromPoints({row:0,column:0},t));return n.split(i).length-1}function o(e,t){var n=s(e,t),r=e.getValue().split(i),o=Object.create(null),u=r[n];return r.forEach(function(e,t){if(!e||e===u)return;var i=Math.abs(n-t),s=r.length-i;o[e]?o[e]=Math.max(s,o[e]):o[e]=s}),o}var r=e(\"../range\").Range,i=/[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;t.getCompletions=function(e,t,n,r,i){var s=o(t,n),u=Object.keys(s);i(null,u.map(function(e){return{caption:e,value:e,score:s[e],meta:\"local\"}}))}}),ace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../snippets\").snippetManager,i=e(\"../autocomplete\").Autocomplete,s=e(\"../config\"),o=e(\"../lib/lang\"),u=e(\"../autocomplete/util\"),a=e(\"../autocomplete/text_completer\"),f={getCompletions:function(e,t,n,r,i){if(t.$mode.completer)return t.$mode.completer.getCompletions(e,t,n,r,i);var s=e.session.getState(n.row),o=t.$mode.getCompletions(s,t,n,r);o=o.map(function(e){return e.completerId=f.id,e}),i(null,o)},id:\"keywordCompleter\"},l=function(e){var t={};return e.replace(/\\${(\\d+)(:(.*?))?}/g,function(e,n,r,i){return t[n]=i||\"\"}).replace(/\\$(\\d+?)/g,function(e,n){return t[n]})},c={getCompletions:function(e,t,n,i,s){var o=[],u=t.getTokenAt(n.row,n.column);u&&u.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/)?o.push(\"html-tag\"):o=r.getActiveScopes(e);var a=r.snippetMap,f=[];o.forEach(function(e){var t=a[e]||[];for(var n=t.length;n--;){var r=t[n],i=r.name||r.tabTrigger;if(!i)continue;f.push({caption:i,snippet:r.content,meta:r.tabTrigger&&!r.name?r.tabTrigger+\"\\u21e5 \":\"snippet\",completerId:c.id})}},this),s(null,f)},getDocTooltip:function(e){e.snippet&&!e.docHTML&&(e.docHTML=[\"<b>\",o.escapeHTML(e.caption),\"</b>\",\"<hr></hr>\",o.escapeHTML(l(e.snippet))].join(\"\"))},id:\"snippetCompleter\"},h=[c,a,f];t.setCompleters=function(e){h.length=0,e&&h.push.apply(h,e)},t.addCompleter=function(e){h.push(e)},t.textCompleter=a,t.keyWordCompleter=f,t.snippetCompleter=c;var p={name:\"expandSnippet\",exec:function(e){return r.expandWithTab(e)},bindKey:\"Tab\"},d=function(e,t){v(t.session.$mode)},v=function(e){typeof e==\"string\"&&(e=s.$modes[e]);if(!e)return;r.files||(r.files={}),m(e.$id,e.snippetFileId),e.modes&&e.modes.forEach(v)},m=function(e,t){if(!t||!e||r.files[e])return;r.files[e]={},s.loadModule(t,function(t){if(!t)return;r.files[e]=t,!t.snippets&&t.snippetText&&(t.snippets=r.parseSnippetFile(t.snippetText)),r.register(t.snippets||[],t.scope),t.includeScopes&&(r.snippetMap[t.scope].includeScopes=t.includeScopes,t.includeScopes.forEach(function(e){v(\"ace/mode/\"+e)}))})},g=function(e){var t=e.editor,n=t.completer&&t.completer.activated;if(e.command.name===\"backspace\")n&&!u.getCompletionPrefix(t)&&t.completer.detach();else if(e.command.name===\"insertstring\"&&!n){y=e;var r=e.editor.$liveAutocompletionDelay;r?b.delay(r):w(e)}},y,b=o.delayedCall(function(){w(y)},0),w=function(e){var t=e.editor,n=u.getCompletionPrefix(t),r=u.triggerAutocomplete(t);if(n&&n.length>=t.$liveAutocompletionThreshold||r){var s=i.for(t);s.autoShown=!0,s.showPopup(t)}},E=e(\"../editor\").Editor;e(\"../config\").defineOptions(E.prototype,\"editor\",{enableBasicAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:h),this.commands.addCommand(i.startCommand)):this.commands.removeCommand(i.startCommand)},value:!1},enableLiveAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:h),this.commands.on(\"afterExec\",g)):this.commands.off(\"afterExec\",g)},value:!1},liveAutocompletionDelay:{initialValue:0},liveAutocompletionThreshold:{initialValue:0},enableSnippets:{set:function(e){e?(this.commands.addCommand(p),this.on(\"changeMode\",d),d(null,this)):(this.commands.removeCommand(p),this.off(\"changeMode\",d))},value:!1}})}); (function() {\n ace.require([\"ace/ext/language_tools\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/ext/searchbox-css\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports='\\n\\n/* ------------------------------------------------------------------------------------------\\n * Editor Search Form\\n * --------------------------------------------------------------------------------------- */\\n.ace_search {\\n background-color: #ddd;\\n color: #666;\\n border: 1px solid #cbcbcb;\\n border-top: 0 none;\\n overflow: hidden;\\n margin: 0;\\n padding: 4px 6px 0 4px;\\n position: absolute;\\n top: 0;\\n z-index: 99;\\n white-space: normal;\\n}\\n.ace_search.left {\\n border-left: 0 none;\\n border-radius: 0px 0px 5px 0px;\\n left: 0;\\n}\\n.ace_search.right {\\n border-radius: 0px 0px 0px 5px;\\n border-right: 0 none;\\n right: 0;\\n}\\n\\n.ace_search_form, .ace_replace_form {\\n margin: 0 20px 4px 0;\\n overflow: hidden;\\n line-height: 1.9;\\n}\\n.ace_replace_form {\\n margin-right: 0;\\n}\\n.ace_search_form.ace_nomatch {\\n outline: 1px solid red;\\n}\\n\\n.ace_search_field {\\n border-radius: 3px 0 0 3px;\\n background-color: white;\\n color: black;\\n border: 1px solid #cbcbcb;\\n border-right: 0 none;\\n outline: 0;\\n padding: 0;\\n font-size: inherit;\\n margin: 0;\\n line-height: inherit;\\n padding: 0 6px;\\n min-width: 17em;\\n vertical-align: top;\\n min-height: 1.8em;\\n box-sizing: content-box;\\n}\\n.ace_searchbtn {\\n border: 1px solid #cbcbcb;\\n line-height: inherit;\\n display: inline-block;\\n padding: 0 6px;\\n background: #fff;\\n border-right: 0 none;\\n border-left: 1px solid #dcdcdc;\\n cursor: pointer;\\n margin: 0;\\n position: relative;\\n color: #666;\\n}\\n.ace_searchbtn:last-child {\\n border-radius: 0 3px 3px 0;\\n border-right: 1px solid #cbcbcb;\\n}\\n.ace_searchbtn:disabled {\\n background: none;\\n cursor: default;\\n}\\n.ace_searchbtn:hover {\\n background-color: #eef1f6;\\n}\\n.ace_searchbtn.prev, .ace_searchbtn.next {\\n padding: 0px 0.7em\\n}\\n.ace_searchbtn.prev:after, .ace_searchbtn.next:after {\\n content: \"\";\\n border: solid 2px #888;\\n width: 0.5em;\\n height: 0.5em;\\n border-width: 2px 0 0 2px;\\n display:inline-block;\\n transform: rotate(-45deg);\\n}\\n.ace_searchbtn.next:after {\\n border-width: 0 2px 2px 0 ;\\n}\\n.ace_searchbtn_close {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\n border-radius: 50%;\\n border: 0 none;\\n color: #656565;\\n cursor: pointer;\\n font: 16px/16px Arial;\\n padding: 0;\\n height: 14px;\\n width: 14px;\\n top: 9px;\\n right: 7px;\\n position: absolute;\\n}\\n.ace_searchbtn_close:hover {\\n background-color: #656565;\\n background-position: 50% 100%;\\n color: white;\\n}\\n\\n.ace_button {\\n margin-left: 2px;\\n cursor: pointer;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -o-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n overflow: hidden;\\n opacity: 0.7;\\n border: 1px solid rgba(100,100,100,0.23);\\n padding: 1px;\\n box-sizing: border-box!important;\\n color: black;\\n}\\n\\n.ace_button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_button.checked {\\n border-color: #3399ff;\\n opacity:1;\\n}\\n\\n.ace_search_options{\\n margin-bottom: 3px;\\n text-align: right;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -o-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n clear: both;\\n}\\n\\n.ace_search_counter {\\n float: left;\\n font-family: arial;\\n padding: 0 8px;\\n}'}),ace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/ext/searchbox-css\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/lang\"),s=e(\"../lib/event\"),o=e(\"./searchbox-css\"),u=e(\"../keyboard/hash_handler\").HashHandler,a=e(\"../lib/keys\"),f=e(\"../config\").nls,l=999;r.importCssString(o,\"ace_searchbox\",!1);var c=function(){function e(e,t,n){this.activeInput;var i=r.createElement(\"div\");r.buildDom([\"div\",{\"class\":\"ace_search right\"},[\"span\",{action:\"hide\",\"class\":\"ace_searchbtn_close\"}],[\"div\",{\"class\":\"ace_search_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:f(\"Search for\"),spellcheck:\"false\"}],[\"span\",{action:\"findPrev\",\"class\":\"ace_searchbtn prev\"},\"\\u200b\"],[\"span\",{action:\"findNext\",\"class\":\"ace_searchbtn next\"},\"\\u200b\"],[\"span\",{action:\"findAll\",\"class\":\"ace_searchbtn\",title:\"Alt-Enter\"},f(\"All\")]],[\"div\",{\"class\":\"ace_replace_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:f(\"Replace with\"),spellcheck:\"false\"}],[\"span\",{action:\"replaceAndFindNext\",\"class\":\"ace_searchbtn\"},f(\"Replace\")],[\"span\",{action:\"replaceAll\",\"class\":\"ace_searchbtn\"},f(\"All\")]],[\"div\",{\"class\":\"ace_search_options\"},[\"span\",{action:\"toggleReplace\",\"class\":\"ace_button\",title:f(\"Toggle Replace mode\"),style:\"float:left;margin-top:-2px;padding:0 5px;\"},\"+\"],[\"span\",{\"class\":\"ace_search_counter\"}],[\"span\",{action:\"toggleRegexpMode\",\"class\":\"ace_button\",title:f(\"RegExp Search\")},\".*\"],[\"span\",{action:\"toggleCaseSensitive\",\"class\":\"ace_button\",title:f(\"CaseSensitive Search\")},\"Aa\"],[\"span\",{action:\"toggleWholeWords\",\"class\":\"ace_button\",title:f(\"Whole Word Search\")},\"\\\\b\"],[\"span\",{action:\"searchInSelection\",\"class\":\"ace_button\",title:f(\"Search In Selection\")},\"S\"]]],i),this.element=i.firstChild,this.setSession=this.setSession.bind(this),this.$init(),this.setEditor(e),r.importCssString(o,\"ace_searchbox\",e.container)}return e.prototype.setEditor=function(e){e.searchBox=this,e.renderer.scroller.appendChild(this.element),this.editor=e},e.prototype.setSession=function(e){this.searchRange=null,this.$syncOptions(!0)},e.prototype.$initElements=function(e){this.searchBox=e.querySelector(\".ace_search_form\"),this.replaceBox=e.querySelector(\".ace_replace_form\"),this.searchOption=e.querySelector(\"[action=searchInSelection]\"),this.replaceOption=e.querySelector(\"[action=toggleReplace]\"),this.regExpOption=e.querySelector(\"[action=toggleRegexpMode]\"),this.caseSensitiveOption=e.querySelector(\"[action=toggleCaseSensitive]\"),this.wholeWordOption=e.querySelector(\"[action=toggleWholeWords]\"),this.searchInput=this.searchBox.querySelector(\".ace_search_field\"),this.replaceInput=this.replaceBox.querySelector(\".ace_search_field\"),this.searchCounter=e.querySelector(\".ace_search_counter\")},e.prototype.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,\"mousedown\",function(e){setTimeout(function(){t.activeInput.focus()},0),s.stopPropagation(e)}),s.addListener(e,\"click\",function(e){var n=e.target||e.srcElement,r=n.getAttribute(\"action\");r&&t[r]?t[r]():t.$searchBarKb.commands[r]&&t.$searchBarKb.commands[r].exec(t),s.stopPropagation(e)}),s.addCommandKeyListener(e,function(e,n,r){var i=a.keyCodeToString(r),o=t.$searchBarKb.findKeyCommand(n,i);o&&o.exec&&(o.exec(t),s.stopEvent(e))}),this.$onChange=i.delayedCall(function(){t.find(!1,!1)}),s.addListener(this.searchInput,\"input\",function(){t.$onChange.schedule(20)}),s.addListener(this.searchInput,\"focus\",function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()}),s.addListener(this.replaceInput,\"focus\",function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()})},e.prototype.setSearchRange=function(e){this.searchRange=e,e?this.searchRangeMarker=this.editor.session.addMarker(e,\"ace_active-line\"):this.searchRangeMarker&&(this.editor.session.removeMarker(this.searchRangeMarker),this.searchRangeMarker=null)},e.prototype.$syncOptions=function(e){r.setCssClass(this.replaceOption,\"checked\",this.searchRange),r.setCssClass(this.searchOption,\"checked\",this.searchOption.checked),this.replaceOption.textContent=this.replaceOption.checked?\"-\":\"+\",r.setCssClass(this.regExpOption,\"checked\",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,\"checked\",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,\"checked\",this.caseSensitiveOption.checked);var t=this.editor.getReadOnly();this.replaceOption.style.display=t?\"none\":\"\",this.replaceBox.style.display=this.replaceOption.checked&&!t?\"\":\"none\",this.find(!1,!1,e)},e.prototype.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},e.prototype.find=function(e,t,n){var i=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n,range:this.searchRange}),s=!i&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",s),this.editor._emit(\"findSearchBox\",{match:!s}),this.highlight(),this.updateCounter()},e.prototype.updateCounter=function(){var e=this.editor,t=e.$search.$options.re,n=t.unicode,r=0,s=0;if(t){var o=this.searchRange?e.session.getTextRange(this.searchRange):e.getValue(),u=e.session.doc.positionToIndex(e.selection.anchor);this.searchRange&&(u-=e.session.doc.positionToIndex(this.searchRange.start));var a=t.lastIndex=0,c;while(c=t.exec(o)){r++,a=c.index,a<=u&&s++;if(r>l)break;if(!c[0]){t.lastIndex=a+=i.skipEmptyMatch(o,a,n);if(a>=o.length)break}}}this.searchCounter.textContent=f(\"$0 of $1\",[s,r>l?l+\"+\":r])},e.prototype.findNext=function(){this.find(!0,!1)},e.prototype.findPrev=function(){this.find(!0,!0)},e.prototype.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",t),this.editor._emit(\"findSearchBox\",{match:!t}),this.highlight(),this.hide()},e.prototype.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},e.prototype.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},e.prototype.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},e.prototype.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off(\"changeSession\",this.setSession),this.element.style.display=\"none\",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},e.prototype.show=function(e,t){this.active=!0,this.editor.on(\"changeSession\",this.setSession),this.element.style.display=\"\",this.replaceOption.checked=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},e.prototype.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput},e}(),h=new u;h.bindKeys({\"Ctrl-f|Command-f\":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?\"\":\"none\",e.replaceOption.checked=!1,e.$syncOptions(),e.searchInput.focus()},\"Ctrl-H|Command-Option-F\":function(e){if(e.editor.getReadOnly())return;e.replaceOption.checked=!0,e.$syncOptions(),e.replaceInput.focus()},\"Ctrl-G|Command-G\":function(e){e.findNext()},\"Ctrl-Shift-G|Command-Shift-G\":function(e){e.findPrev()},esc:function(e){setTimeout(function(){e.hide()})},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},\"Shift-Return\":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},\"Alt-Return\":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),h.addCommands([{name:\"toggleRegexpMode\",bindKey:{win:\"Alt-R|Alt-/\",mac:\"Ctrl-Alt-R|Ctrl-Alt-/\"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:\"toggleCaseSensitive\",bindKey:{win:\"Alt-C|Alt-I\",mac:\"Ctrl-Alt-R|Ctrl-Alt-I\"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:\"toggleWholeWords\",bindKey:{win:\"Alt-B|Alt-W\",mac:\"Ctrl-Alt-B|Ctrl-Alt-W\"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}},{name:\"toggleReplace\",exec:function(e){e.replaceOption.checked=!e.replaceOption.checked,e.$syncOptions()}},{name:\"searchInSelection\",exec:function(e){e.searchOption.checked=!e.searchRange,e.setSearchRange(e.searchOption.checked&&e.editor.getSelectionRange()),e.$syncOptions()}}]);var p=new u([{bindKey:\"Esc\",name:\"closeSearchBar\",exec:function(e){e.searchBox.hide()}}]);c.prototype.$searchBarKb=h,c.prototype.$closeSearchBarKb=p,t.SearchBox=c,t.Search=function(e,t){var n=e.searchBox||new c(e);n.show(e.session.getTextRange(),t)}}); (function() {\n ace.require([\"ace/ext/searchbox\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"};t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"};var o=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},u=t.constantNumericBinary={token:\"constant.numeric\",regex:/\\b(0[bB][01](?:[01]|_(?=[01]))*)\\b/},a=t.constantNumericDecimal={token:\"constant.numeric\",regex:/\\b(0[dD](?:[1-9](?:[\\d]|_(?=[\\d]))*|0))\\b/},f=t.constantNumericDecimal={token:\"constant.numeric\",regex:/\\b(0[oO]?(?:[1-7](?:[0-7]|_(?=[0-7]))*|0))\\b/},l=t.constantNumericRational={token:\"constant.numeric\",regex:/\\b([\\d]+(?:[./][\\d]+)?ri?)\\b/},c=t.constantNumericComplex={token:\"constant.numeric\",regex:/\\b([\\d]i)\\b/},h=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?i?\\\\b\"},p=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},d=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many|p|warn|refine|using|module_function|extend|alias_method|private_class_method|remove_method|undef_method\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|__ENCODING__|prepend\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING|RUBY_PATCHLEVEL|RUBY_REVISION|RUBY_COPYRIGHT|RUBY_ENGINE|RUBY_ENGINE_VERSION|RUBY_DESCRIPTION\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\"),d=\"\\\\\\\\(?:n(?:[1-7][0-7]{0,2}|0)|[nsrtvfbae'\\\"\\\\\\\\]|c(?:\\\\\\\\M-)?.|M-(?:\\\\\\\\C-|\\\\\\\\c)?.|C-(?:\\\\\\\\M-)?.|[0-7]{3}|x[\\\\da-fA-F]{2}|u[\\\\da-fA-F]{4}|u{[\\\\da-fA-F]{1,6}(?:\\\\s[\\\\da-fA-F]{1,6})*})\",v={\"(\":\")\",\"[\":\"]\",\"{\":\"}\",\"<\":\">\",\"^\":\"^\",\"|\":\"|\",\"%\":\"%\"};this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment.multiline\",regex:\"^=begin(?=$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:/[/](?=.*\\/)/,next:\"regex\"},[{token:[\"constant.other.symbol.ruby\",\"string.start\"],regex:/(:)?(\")/,push:[{token:\"constant.language.escape\",regex:d},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:d},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:[\"constant.other.symbol.ruby\",\"string.start\"],regex:/(:)?(')/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/%[qwx]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"qStateWithoutInterpolation\",this.token}},{token:\"string.start\",regex:/%[QWX]?([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"qStateWithInterpolation\",this.token}},{token:\"constant.other.symbol.ruby\",regex:/%[si]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"sStateWithoutInterpolation\",this.token}},{token:\"constant.other.symbol.ruby\",regex:/%[SI]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"sStateWithInterpolation\",this.token}},{token:\"string.regexp\",regex:/%[r]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"rState\",this.token}}],{token:\"punctuation\",regex:\"::\"},p,{token:\"variable.global\",regex:\"[$][a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]*\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)([a-zA-Z_\\d]+)(?=\\()/},{token:[\"punctuation.operator\",\"identifier\"],regex:/(\\.)([a-zA-Z_][a-zA-Z_\\d]*)/},{token:\"string.character\",regex:\"\\\\B\\\\?(?:\"+d+\"|\\\\S)\"},{token:\"punctuation.operator\",regex:/\\?(?=.+:)/},l,c,s,o,h,u,a,f,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"||e[2]==\"~\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<[-~]?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\||\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\",onMatch:function(e,t,n){return this.next=\"\",e==\"}\"&&n.length>1&&n[1]!=\"start\"&&(n.shift(),this.next=n.shift()),this.token}},{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.operator\",regex:/[?:,;.]/}],comment:[{token:\"comment.multiline\",regex:\"^=end(?=$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qStateWithInterpolation:[{token:\"string.start\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"string\"}},{token:\"constant.language.escape\",regex:d},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"string\")}},{defaultToken:\"string\"}],qStateWithoutInterpolation:[{token:\"string.start\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"string\"}},{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"string.end\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"string\")}},{defaultToken:\"string\"}],sStateWithoutInterpolation:[{token:\"constant.other.symbol.ruby\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.other.symbol.ruby\"}},{token:\"constant.other.symbol.ruby\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.other.symbol.ruby\")}},{defaultToken:\"constant.other.symbol.ruby\"}],sStateWithInterpolation:[{token:\"constant.other.symbol.ruby\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.other.symbol.ruby\"}},{token:\"constant.language.escape\",regex:d},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"constant.other.symbol.ruby\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.other.symbol.ruby\")}},{defaultToken:\"constant.other.symbol.ruby\"}],rState:[{token:\"string.regexp\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.language.escape\"}},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.regexp\",regex:/\\//},{token:\"string.regexp\",regex:/[)\\]>}^|%][imxouesn]*/,onMatch:function(e,t,n){return n.length&&e[0]===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.language.escape\")}},{include:\"regex\"},{defaultToken:\"string.regexp\"}],regex:[{token:\"regexp.keyword\",regex:/\\\\[wWdDhHsS]/},{token:\"constant.language.escape\",regex:/\\\\[AGbBzZ]/},{token:\"constant.language.escape\",regex:/\\\\g<[a-zA-Z0-9]*>/},{token:[\"constant.language.escape\",\"regexp.keyword\",\"constant.language.escape\"],regex:/(\\\\p{\\^?)(Alnum|Alpha|Blank|Cntrl|Digit|Graph|Lower|Print|Punct|Space|Upper|XDigit|Word|ASCII|Any|Assigned|Arabic|Armenian|Balinese|Bengali|Bopomofo|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Ethiopic|Georgian|Glagolitic|Gothic|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hebrew|Hiragana|Inherited|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Lao|Latin|Lepcha|Limbu|Linear_B|Lycian|Lydian|Malayalam|Mongolian|Myanmar|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Italic|Old_Persian|Oriya|Osmanya|Phags_Pa|Phoenician|Rejang|Runic|Saurashtra|Shavian|Sinhala|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Ugaritic|Vai|Yi|Ll|Lm|Lt|Lu|Lo|Mn|Mc|Me|Nd|Nl|Pc|Pd|Ps|Pe|Pi|Pf|Po|No|Sm|Sc|Sk|So|Zs|Zl|Zp|Cc|Cf|Cn|Co|Cs|N|L|M|P|S|Z|C)(})/},{token:[\"constant.language.escape\",\"invalid\",\"constant.language.escape\"],regex:/(\\\\p{\\^?)([^/]*)(})/},{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:/[/][imxouesn]*/,next:\"start\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?(?:[:=!>]|<'?[a-zA-Z]*'?>|<[=!])|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"regexp.keyword\",regex:/\\[\\[:(?:alnum|alpha|blank|cntrl|digit|graph|lower|print|punct|space|upper|xdigit|word|ascii):\\]\\]/},{token:\"constant.language.escape\",regex:/\\[\\^?/,push:\"regex_character_class\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.keyword\",regex:/\\\\[wWdDhHsS]/},{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:/&?&?\\[\\^?/,push:\"regex_character_class\"},{token:\"constant.language.escape\",regex:\"]\",next:\"pop\"},{token:\"constant.language.escape\",regex:\"-\"},{defaultToken:\"string.regexp.characterclass\"}]},this.normalizeRules()};r.inherits(d,i),t.RubyHighlightRules=d}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.indentKeywords={\"class\":1,def:1,module:1,\"do\":1,unless:1,\"if\":1,\"while\":1,\"for\":1,until:1,begin:1,\"else\":0,elsif:0,rescue:0,ensure:0,when:0,end:-1,\"case\":1,\"=begin\":1,\"=end\":-1},this.foldingStartMarker=/(?:\\s|^)(def|do|while|class|unless|module|if|for|until|begin|else|elsif|case|rescue|ensure|when)\\b|({\\s*$)|(=begin)/,this.foldingStopMarker=/(=end(?=$|\\s.*$))|(^\\s*})|\\b(end)\\b/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]){if(o[1]==\"if\"||o[1]==\"else\"||o[1]==\"while\"||o[1]==\"until\"||o[1]==\"unless\"){if(o[1]==\"else\"&&/^\\s*else\\s*$/.test(r)===!1)return;if(/^\\s*(?:if|else|while|until|unless)\\s*/.test(r)===!1)return}if(o[1]==\"when\"&&/\\sthen\\s/.test(r)===!0)return;if(e.getTokenAt(n,o.index+2).type===\"keyword\")return\"start\"}else{if(!o[3])return\"start\";if(e.getTokenAt(n,o.index+1).type===\"comment.multiline\")return\"start\"}}if(t!=\"markbeginend\"||!s||i&&s)return\"\";var o=r.match(this.foldingStopMarker);if(o[3]===\"end\"){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"end\"}else{if(!o[1])return\"end\";if(e.getTokenAt(n,o.index+1).type===\"comment.multiline\")return\"end\"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]||i[3]?this.rubyBlock(e,n,i.index+2):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[3]===\"end\"&&e.getTokenAt(n,i.index+1).type===\"keyword\"?this.rubyBlock(e,n,i.index+1):i[1]===\"=end\"&&e.getTokenAt(n,i.index+1).type===\"comment.multiline\"?this.rubyBlock(e,n,i.index+1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.rubyBlock=function(e,t,n,r){var i=new o(e,t,n),u=i.getCurrentToken();if(!u||u.type!=\"keyword\"&&u.type!=\"comment.multiline\")return;var a=u.value,f=e.getLine(t);switch(u.value){case\"if\":case\"unless\":case\"while\":case\"until\":var l=new RegExp(\"^\\\\s*\"+u.value);if(!l.test(f))return;var c=this.indentKeywords[a];break;case\"when\":if(/\\sthen\\s/.test(f))return;case\"elsif\":case\"rescue\":case\"ensure\":var c=1;break;case\"else\":var l=new RegExp(\"^\\\\s*\"+u.value+\"\\\\s*$\");if(!l.test(f))return;var c=1;break;default:var c=this.indentKeywords[a]}var h=[a];if(!c)return;var p=c===-1?e.getLine(t-1).length:e.getLine(t).length,d=t,v=[];v.push(i.getCurrentTokenRange()),i.step=c===-1?i.stepBackward:i.stepForward;if(u.type==\"comment.multiline\")while(u=i.step()){if(u.type!==\"comment.multiline\")continue;if(c==1){p=6;if(u.value==\"=end\")break}else if(u.value==\"=begin\")break}else while(u=i.step()){var m=!1;if(u.type!==\"keyword\")continue;var g=c*this.indentKeywords[u.value];f=e.getLine(i.getCurrentTokenRow());switch(u.value){case\"do\":for(var y=i.$tokenIndex-1;y>=0;y--){var b=i.$rowTokens[y];if(b&&(b.value==\"while\"||b.value==\"until\"||b.value==\"for\")){g=0;break}}break;case\"else\":var l=new RegExp(\"^\\\\s*\"+u.value+\"\\\\s*$\");if(!l.test(f)||a==\"case\")g=0,m=!0;break;case\"if\":case\"unless\":case\"while\":case\"until\":var l=new RegExp(\"^\\\\s*\"+u.value);l.test(f)||(g=0,m=!0);break;case\"when\":if(/\\sthen\\s/.test(f)||a==\"case\")g=0,m=!0}if(g>0)h.unshift(u.value);else if(g<=0&&m===!1){h.shift();if(!h.length){if((a==\"while\"||a==\"until\"||a==\"for\")&&u.value!=\"do\")break;if(u.value==\"do\"&&c==-1&&g!=0)break;if(u.value!=\"do\")break}g===0&&h.unshift(u.value)}}if(!u)return null;if(r)return v.push(i.getCurrentTokenRange()),v;var t=i.getCurrentTokenRow();if(c===-1){if(u.type===\"comment.multiline\")var w=6;else var w=e.getLine(t).length;return new s(t,w,d-1,p)}return new s(d,p,t-1,e.getLine(t-1).length)}}.call(u.prototype)}),ace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/folding/ruby\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./folding/ruby\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour,this.foldingRules=new a,this.indentKeywords=this.foldingRules.indentKeywords};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when|elsif|unless|while|for|begin|rescue|ensure)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else|rescue|ensure)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.getMatching=function(e,t,n){if(t==undefined){var r=e.selection.lead;n=r.column,t=r.row}var i=e.getTokenAt(t,n);if(i&&i.value in this.indentKeywords)return this.foldingRules.rubyBlock(e,t,n,!0)},this.$id=\"ace/mode/ruby\",this.snippetFileId=\"ace/snippets/ruby\"}.call(f.prototype),t.Mode=f}); (function() {\n ace.require([\"ace/mode/ruby\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/theme/twilight-css\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports=\".ace-twilight .ace_gutter {\\n background: #232323;\\n color: #E2E2E2\\n}\\n\\n.ace-twilight .ace_print-margin {\\n width: 1px;\\n background: #232323\\n}\\n\\n.ace-twilight {\\n background-color: #141414;\\n color: #F8F8F8\\n}\\n\\n.ace-twilight .ace_cursor {\\n color: #A7A7A7\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_selection {\\n background: rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-twilight.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px #141414;\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_step {\\n background: rgb(102, 82, 0)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_active-line {\\n background: rgba(255, 255, 255, 0.031)\\n}\\n\\n.ace-twilight .ace_gutter-active-line {\\n background-color: rgba(255, 255, 255, 0.031)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_selected-word {\\n border: 1px solid rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-twilight .ace_invisible {\\n color: rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-twilight .ace_keyword,\\n.ace-twilight .ace_meta {\\n color: #CDA869\\n}\\n\\n.ace-twilight .ace_constant,\\n.ace-twilight .ace_constant.ace_character,\\n.ace-twilight .ace_constant.ace_character.ace_escape,\\n.ace-twilight .ace_constant.ace_other,\\n.ace-twilight .ace_heading,\\n.ace-twilight .ace_markup.ace_heading,\\n.ace-twilight .ace_support.ace_constant {\\n color: #CF6A4C\\n}\\n\\n.ace-twilight .ace_invalid.ace_illegal {\\n color: #F8F8F8;\\n background-color: rgba(86, 45, 86, 0.75)\\n}\\n\\n.ace-twilight .ace_invalid.ace_deprecated {\\n text-decoration: underline;\\n font-style: italic;\\n color: #D2A8A1\\n}\\n\\n.ace-twilight .ace_support {\\n color: #9B859D\\n}\\n\\n.ace-twilight .ace_fold {\\n background-color: #AC885B;\\n border-color: #F8F8F8\\n}\\n\\n.ace-twilight .ace_support.ace_function {\\n color: #DAD085\\n}\\n\\n.ace-twilight .ace_list,\\n.ace-twilight .ace_markup.ace_list,\\n.ace-twilight .ace_storage {\\n color: #F9EE98\\n}\\n\\n.ace-twilight .ace_entity.ace_name.ace_function,\\n.ace-twilight .ace_meta.ace_tag {\\n color: #AC885B\\n}\\n\\n.ace-twilight .ace_string {\\n color: #8F9D6A\\n}\\n\\n.ace-twilight .ace_string.ace_regexp {\\n color: #E9C062\\n}\\n\\n.ace-twilight .ace_comment {\\n font-style: italic;\\n color: #5F5A60\\n}\\n\\n.ace-twilight .ace_variable {\\n color: #7587A6\\n}\\n\\n.ace-twilight .ace_xml-pe {\\n color: #494949\\n}\\n\\n.ace-twilight .ace_indent-guide {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-twilight .ace_indent-guide-active {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQIW2PQ1dX9zzBz5sz/ABCcBFFentLlAAAAAElFTkSuQmCC) right repeat-y;\\n}\\n\"}),ace.define(\"ace/theme/twilight\",[\"require\",\"exports\",\"module\",\"ace/theme/twilight-css\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-twilight\",t.cssText=e(\"./twilight-css\");var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass,!1)}); (function() {\n ace.require([\"ace/theme/twilight\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","/* ***** 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, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\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/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/report_error\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar reportError = require(\"./report_error\").reportError;\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 AppConfig = /** @class */ (function () {\n function AppConfig() {\n this.$defaultOptions = {};\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) {\n messages = value;\n };\n AppConfig.prototype.nls = function (string, params) {\n if (messages && !messages[string]) {\n warn(\"No message found for '\" + string + \"' in the provided messages, falling back to default English message.\");\n }\n var translated = messages && messages[string] || string;\n if (params) {\n translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, name) {\n if (name == \"$\")\n return \"$\";\n return params[name];\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.32.3\";\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){/*! @license\n==========================================================================\nSproutCore -- JavaScript Application Framework\ncopyright 2006-2009, Sprout Systems Inc., Apple Inc. and contributors.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\nSproutCore and the SproutCore logo are trademarks of Sprout Systems, Inc.\n\nFor more information about SproutCore, visit http://www.sproutcore.com\n\n\n==========================================================================\n@license */\n\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = (function () {\n var ret = {\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 96: \"Numpad0\",\n 97: \"Numpad1\",\n 98: \"Numpad2\",\n 99: \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n };\n ret.PRINTABLE_KEYS[173] = '-';\n var name, i;\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n (function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) {\n ret.KEY_MODS[i] = mods.filter(function (x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n return ret;\n})();\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};\nvar getModifierHash = function (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 (!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 = \"location\" in e ? e.location : e.keyLocation;\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 var location = \"location\" in e ? e.location : e.keyLocation;\n if (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.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(\"editor\"));\n if (host.session) {\n var row = host.session.selection.cursor.row;\n text.setAttribute(\"aria-label\", nls(\"Cursor at row $0\", [row + 1]));\n }\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 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, host.onCommandKey.bind(host), 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\"], 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;\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: { singular: nls(\"error\"), plural: nls(\"errors\") },\n warning: { singular: nls(\"warning\"), plural: nls(\"warnings\") },\n info: { singular: nls(\"information message\"), plural: nls(\"information messages\") }\n };\n },\n enumerable: false,\n configurable: true\n });\n GutterTooltip.prototype.showTooltip = function (row) {\n var gutter = this.editor.renderer.$gutterLayer;\n var annotationsInRow = gutter.$annotations[row];\n var annotation;\n if (annotationsInRow)\n annotation = { text: Array.from(annotationsInRow.text), type: Array.from(annotationsInRow.type) };\n else\n annotation = { text: [], type: [] };\n var fold = gutter.session.getFoldLine(row);\n if (fold && gutter.$showFoldedAnnotations) {\n var annotationsInFold = { error: [], warning: [], info: [] };\n var mostSevereAnnotationInFoldType;\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 (annotationType === \"error\") {\n mostSevereAnnotationInFoldType = \"error_fold\";\n continue;\n }\n if (annotationType === \"warning\") {\n mostSevereAnnotationInFoldType = \"warning_fold\";\n continue;\n }\n }\n }\n if (mostSevereAnnotationInFoldType === \"error_fold\" || mostSevereAnnotationInFoldType === \"warning_fold\") {\n var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n annotation.text.push(summaryFoldedAnnotations);\n annotation.type.push(mostSevereAnnotationInFoldType);\n }\n }\n if (annotation.text.length === 0)\n return this.hide();\n var annotationMessages = { error: [], warning: [], info: [] };\n var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n for (var i = 0; i < annotation.text.length; i++) {\n var line = \"<span class='ace_\".concat(annotation.type[i], \" \").concat(iconClassName, \"' aria-label='\").concat(GutterTooltip.annotationLabels[annotation.type[i].replace(\"_fold\", \"\")].singular, \"' role=img> </span> \").concat(annotation.text[i]);\n annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(line);\n }\n var tooltipContent = [].concat(annotationMessages.error, annotationMessages.warning, annotationMessages.info).join(\"<br>\");\n this.setHtml(tooltipContent);\n this.$element.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', 'warning', 'info'];\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 && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\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 (!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 if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\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 var line = session.doc.getLine(cursor.row);\n var nextLine = session.doc.getLine(cursor.row + 1);\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, 3 + indent.length, 1, 3 + 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) && !/^comment.end/.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + (/^comment.start/.test(token.type) ? token.value.length : 2);\n iterator = new TokenIterator(this, row, column);\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 (!re.test(state))\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type) && !/^comment.start/.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 if (!/^comment.end/.test(token.type)) {\n range.end.column += token.value.length - 2;\n }\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 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 token = iterator.stepForward();\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 token = iterator.stepForward();\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.$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.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n this.destroyed = false;\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.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.destroy = function () {\n if (!this.destroyed) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer.cleanup();\n this.destroyed = true;\n }\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\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 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 (!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 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.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 multiSelectAction: \"forEachLine\",\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 this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\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 }.bind(this), 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 }.bind(this), true);\n };\n Editor.prototype.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n this.previousCommand = null;\n commandEvent = {};\n }\n this.$opResetTimer.schedule();\n this.curOp = this.session.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n };\n Editor.prototype.endOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false || !this.session)\n return (this.curOp = null);\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n return;\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 var sel = this.selection.toJSON();\n this.curOp.selectionAfter = sel;\n this.$lastSel = this.selection.toJSON();\n this.session.getUndoManager().addSelection(sel);\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 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.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 = [tagNamesRanges.openTagName, tagNamesRanges.closeTagName];\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 startRow, endRow;\n if (this.selection.isEmpty()) {\n startRow = 0;\n endRow = session.doc.getLength() - 1;\n }\n else {\n var selectedRange = this.getSelectionRange();\n startRow = selectedRange.start.row;\n endRow = selectedRange.end.row;\n }\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var line, currIndent, range;\n var tab = session.getTabString();\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 line = session.getLine(row);\n currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n 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 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\"));\n this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.setAttribute(\"aria-label\", nls(\"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\"));\n this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"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 }\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 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: [] };\n var annoText = annotation.text;\n var annoType = annotation.type;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) {\n rowInfo.text.push(annoText);\n rowInfo.type.push(annoType);\n }\n var className = annotation.className;\n if (className)\n rowInfo.className = className;\n else if (annoType == \"error\")\n rowInfo.className = \" ace_error\";\n else if (annoType == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (annoType == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\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_warning\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_warning_fold\";\n continue;\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(\"Toggle code folding, rows $0 through $1\", [foldRange.start.row + 1, foldRange.end.row + 1]));\n else {\n if (fold)\n foldWidget.setAttribute(\"aria-label\", nls(\"Toggle code folding, rows $0 through $1\", [fold.start.row + 1, fold.end.row + 1]));\n else\n foldWidget.setAttribute(\"aria-label\", nls(\"Toggle code folding, row $0\", [row + 1]));\n }\n if (isClosedFold) {\n foldWidget.setAttribute(\"aria-expanded\", \"false\");\n foldWidget.setAttribute(\"title\", nls(\"Unfold code\"));\n }\n else {\n foldWidget.setAttribute(\"aria-expanded\", \"true\");\n foldWidget.setAttribute(\"title\", nls(\"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 annotationNode.setAttribute(\"aria-label\", nls(\"Read annotations row $0\", [rowText]));\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 annotationNode.setAttribute(\"aria-label\", nls(\"Read annotations row $0\", [rowText]));\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:0;\" + \"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:0;\" +\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]+)|(\\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(\"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 (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}\\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 {\\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 {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info {\\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_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\\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_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 &nbsp; 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 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}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n white-space: pre;\\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});\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\"], 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\");\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 (!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 textLines = text.split(\"\\n\");\n this.addToken(textLines[0], \"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 if (textLines.length > 1) {\n this.$ghostTextWidget = {\n text: textLines.slice(1).join(\"\\n\"),\n row: insertPosition.row,\n column: insertPosition.column,\n className: \"ace_ghost_text\"\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 = textLines.length * this.lineHeight;\n var fitsY = ghostTextHeight < height - pixelPosition.top;\n if (fitsY)\n return;\n if (ghostTextHeight < height) {\n this.scrollBy(0, (textLines.length - 1) * this.lineHeight);\n }\n else {\n this.scrollBy(0, pixelPosition.top);\n }\n }\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.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 }\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 text: [nls(\"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 el.innerHTML = gutterAnno.text.join(\"<br>\");\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;\nexports.version = exports.config.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 "],"names":["ace","define","e","t","n","p","Date","toLocaleString","length","r","i","s","EventEmitter","o","u","Range","a","RangeList","f","HashHandler","l","Tokenizer","c","h","CURRENT_WORD","session","getTextRange","getWordRange","SELECTION","replace","CURRENT_LINE","getLine","getCursorPosition","row","PREV_LINE","LINE_INDEX","LINE_NUMBER","SOFT_TABS","getUseSoftTabs","TAB_SIZE","getTabSize","CLIPBOARD","getText","FILENAME","exec","this","FILEPATH","FILENAME_BASE","DIRECTORY","WORKSPACE_NAME","FULLNAME","BLOCK_COMMENT_START","$mode","blockComment","start","BLOCK_COMMENT_END","end","LINE_COMMENT","lineCommentStart","CURRENT_YEAR","bind","year","CURRENT_YEAR_SHORT","CURRENT_MONTH","month","CURRENT_MONTH_NAME","CURRENT_MONTH_NAME_SHORT","CURRENT_DATE","day","CURRENT_DAY_NAME","weekday","CURRENT_DAY_NAME_SHORT","CURRENT_HOUR","hour","hour12","CURRENT_MINUTE","minute","CURRENT_SECOND","second","SELECTED_TEXT","d","snippetMap","snippetNameMap","variables","prototype","getTokenizer","$tokenizer","createTokenizer","substr","test","tabstopId","parseInt","text","regex","onMatch","fmtString","guard","slice","flag","next","indexOf","shift","unshift","token","merge","snippetVar","split","map","value","choices","formatString","expectElse","ifEnd","elseEnd","changeCase","local","formatStringVar","formatFunction","tokenizeTmSnippet","getLineTokens","tokens","getVariableValue","__","hasOwnProperty","tmStrFormat","fmt","RegExp","call","arguments","resolveVariables","toUpperCase","toLowerCase","join","tmFormatFunction","push","getDisplayTextForSnippet","v","insertSnippetForSelection","getSelectionRange","m","inVirtualSelectionMode","selection","index","addTabstops","tabstops","insertSnippet","forEachSelection","keepOrder","tabstopManager","tabNext","$getScope","$id","pop","inlinePhp","getState","substring","getActiveScopes","includeScopes","apply","expandWithTab","expandSnippetForSelection","column","some","findMatchingSnippet","dryRun","doc","removeInLine","replaceBefore","replaceAfter","M__","matchBefore","T__","matchAfter","content","startRe","endRe","triggerRe","endTriggerRe","register","scope","name","unregister","prefix","tabTrigger","body","Array","isArray","trigger","escapeRegExp","endTrigger","endGuard","forEach","Object","keys","_signal","splice","parseSnippetFile","JSON","parse","match","getSnippetByName","implement","lastIndexOf","getTabString","excludeExtraIndent","parents","Math","max","concat","g","y","b","ranges","$onChange","onChange","$onChangeSelection","delayedCall","onChangeSelection","schedule","$onChangeSession","onChangeSession","$onAfterExec","onAfterExec","attach","$openTabstops","selectedTabstop","editor","on","commands","keyBinding","addKeyboardHandler","keyboardHandler","detach","removeTabstopMarkers","off","removeKeyboardHandler","action","rangeList","$bias","pointIndex","removeRange","$inChange","getLength","getValue","updateLinkedFields","hasLinkedRanges","firstNonLinked","linked","original","snippetManager","command","readOnly","lead","anchor","isEmpty","contains","min","selectTabstop","addTabstopMarkers","cursor","fromOrientedRange","multiSelect","toSingleRange","addRange","clone","execCommand","matches","useLink","getOption","fromPoints","tabstop","addList","markerId","addMarker","removeMarker","bindKeys","Tab","renderer","scrollCursorIntoView","Esc","importCssString","Editor","expandSnippet","VirtualRenderer","nls","isSafari","$maxLines","setHighlightActiveLine","setShowPrintMargin","setShowGutter","setHighlightGutterLine","$mouseHandler","$focusTimeout","$highlightTagPending","createElement","appendChild","style","display","setStyle","$textLayer","element","setAttribute","textarea","setOption","focus","$isFocused","$cursorLayer","restartTimer","opacity","$keepTextAreaAtCursor","highlight","$searchHighlight","clazz","getDocumentPosition","moveToPosition","stop","Infinity","id","setSelectOnHover","x","scrollTop","isMouseOver","setRow","$pos","getRow","childNodes","config","firstRow","document","activeElement","selectedNode","removeCssClass","removeAttribute","addCssClass","getData","data","_emit","getHoveredRow","addListener","container","bgTokenizer","$tokenizeRow","type","className","caption","filterText","matchMask","meta","message","$updateOnChange","$computeWidth","screenWidth","isOpen","isTopdown","autoSelect","setData","setValue","stringRepeat","clearSelection","moveCursorTo","hide","anchorPos","tryShow","top","left","window","innerHeight","innerWidth","bottom","$borderSize","$maxPixelHeight","offsetWidth","right","show","undefined","goTo","getTextLeftOffset","$padding","$imageSize","AcePopup","$singleLineEditor","getAriaId","screenReaderDiv","classList","add","setScreenReaderContent","popup","completer","_lines","firstChild","removeChild","createCodeBlock","destroy","remove","createTextNode","AceInlineScreenReader","inlineScreenReader","snippet","hideInlinePreview","startsWith","removeGhostText","setGhostText","$ghostText","AceInline","parForEach","retrievePrecedingIdentifier","reverse","retrieveFollowingIdentifier","getCompletionPrefix","completers","identifierRegexps","triggerAutocomplete","triggerCharacters","includes","preventParentScroll","autoInsert","autoShown","exactMatch","inlineEnabled","parentNode","hasSeen","Set","showLoadingState","stickySelectionDelay","blurListener","changeListener","mousedownListener","mousewheelListener","onLayoutChange","changeTimer","updateCompletions","tooltipTimer","updateDocTooltip","popupTimer","$updatePopupPosition","stickySelectionTimer","stickySelection","$firstOpenTimer","completionProvider","initialPosition","completions","completionsForLoading","openPopup","defineProperty","get","enumerable","configurable","$init","documentElement","insertMatch","$onPopupShow","$onHidePopup","$onPopupChange","mouseOutListener","$onPopupRender","$initInline","inlineRenderer","getPopup","hideDocTooltip","cancel","$seen","has","onSeen","$updateGhostText","base","filtered","getFirstVisibleRow","getLastVisibleRow","observeLayoutChanges","$elements","addEventListener","passive","unObserveLayoutChanges","removeEventListener","layerConfig","lineHeight","getPixelPosition","getBoundingClientRect","offset","scrollLeft","gutterWidth","$ghostTextWidget","position","el","offsetHeight","textInput","setAriaOptions","activeDescendant","inline","setTheme","getTheme","setFontSize","getFontSize","tooltipNode","activated","getElement","relatedTarget","getCompletionProvider","showPopup","gatherCompletions","setFilter","createAnchor","$insertRight","getSession","ignoreCaption","pos","provideCompletions","emptyMessage","delay","cancelContextMenu","getDocTooltip","completerId","docText","docHTML","showDocTooltip","margin","pointerEvents","overscrollBehavior","tabIndex","onblur","onclick","onTooltipClick","theme","isDark","cssClass","innerHTML","textContent","offsetTop","isFocused","target","nodeName","href","rel","Up","Down","Return","deleteSuffix","PageUp","gotoPageUp","PageDown","gotoPageDown","for","$sharedInstance","once","startCommand","bindKey","active","insertByIndex","startOperation","range","getAllRanges","$insertString","onInsert","endOperation","getCompletions","assign","finished","all","filterCompletions","sort","$score","localeCompare","filter","score","Autocomplete","CompletionProvider","FilteredList","create","abs","getTokenAt","escapeHTML","setCompleters","addCompleter","textCompleter","keyWordCompleter","snippetCompleter","$modes","files","snippetFileId","modes","loadModule","snippets","snippetText","$liveAutocompletionDelay","w","$liveAutocompletionThreshold","E","defineOptions","enableBasicAutocompletion","set","addCommand","removeCommand","enableLiveAutocompletion","liveAutocompletionDelay","initialValue","liveAutocompletionThreshold","enableSnippets","require","module","exports","activeInput","buildDom","placeholder","spellcheck","title","setSession","setEditor","searchBox","scroller","searchRange","$syncOptions","$initElements","querySelector","replaceBox","searchOption","replaceOption","regExpOption","caseSensitiveOption","wholeWordOption","searchInput","replaceInput","searchCounter","setTimeout","stopPropagation","srcElement","getAttribute","$searchBarKb","addCommandKeyListener","keyCodeToString","findKeyCommand","stopEvent","find","setSearchRange","searchRangeMarker","setCssClass","checked","getReadOnly","$search","$options","re","updateBackMarkers","skipCurrent","backwards","wrap","regExp","caseSensitive","wholeWord","preventScroll","updateCounter","unicode","positionToIndex","lastIndex","skipEmptyMatch","findNext","findPrev","findAll","replaceAndFindNext","replaceAll","$closeSearchBarKb","select","isReplace","esc","addCommands","win","mac","SearchBox","Search","TextHighlightRules","constantOtherSymbol","qString","qqString","tString","constantNumericHex","constantNumericBinary","constantNumericDecimal","constantNumericRational","constantNumericComplex","constantNumericFloat","instanceVariable","$keywords","createKeywordMapper","keyword","$rules","defaultToken","stateName","splitRegex","rules","heredoc","indentedHeredoc","comment","qStateWithInterpolation","qStateWithoutInterpolation","sStateWithoutInterpolation","sStateWithInterpolation","rState","include","regex_character_class","normalizeRules","inherits","RubyHighlightRules","checkOutdent","autoOutdent","findMatchingBracket","$getIndent","MatchingBraceOutdent","FoldMode","TokenIterator","indentKeywords","def","unless","until","begin","elsif","rescue","ensure","when","foldingStartMarker","foldingStopMarker","getFoldWidget","getFoldWidgetRange","rubyBlock","openingBracketBlock","closingBracketBlock","getCurrentToken","getCurrentTokenRange","step","stepBackward","stepForward","getCurrentTokenRow","$tokenIndex","$rowTokens","Mode","HighlightRules","$outdent","$behaviour","$defaultBehaviour","foldingRules","getNextLineIndent","getMatching","cssText","ACE_NAMESPACE","global","requirejs","deps","payload","modules","payloads","console","error","trace","_require","parentId","callback","lookup","toString","params","dep","packagedModule","normalizeModule","moduleName","chunks","charAt","previous","mod","uri","packaged","req","returnValue","exportAce","ns","root","defineProp","obj","val","writable","String","searchString","endsWith","subjectString","repeat","count","result","string","str","TypeError","output","source","key","values","k","predicate","len","thisArg","kValue","findIndex","item","fill","O","relativeStart","relativeEnd","final","of","deepCopy","copy","last","stringReverse","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copyArray","array","arrayToMap","arr","createMap","props","arrayRemove","getMatchOffsets","deferredCall","fcn","timer","deferred","timeout","clearTimeout","isPending","defaultTimeout","_self","supportsLookbehind","line","supportsUnicodeFlag","codePointAt","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","navigator","os","platform","ua","userAgent","appName","isWin","isIE","parseFloat","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isEdge","isAIR","isAndroid","isChromeOS","isIOS","isMobile","strictCSP","useragent","XHTML_NS","parent","refs","txt","els","ch","options","childIndex","getDocumentHead","head","getElementsByTagName","tag","createElementNS","removeChildren","ownerDocument","createFragment","createDocumentFragment","hasCssClass","classes","toggleCssClass","node","hasCssString","sheets","querySelectorAll","removeElementById","getElementById","cssCache","insertPendingStyles","cache","getRootNode","insertBefore","useStrictCSP","importCssStylsheet","scrollbarWidth","inner","width","minWidth","height","outer","overflow","noScrollbar","withScrollbar","clientWidth","computedStyle","getComputedStyle","styles","property","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","div","transform","animationName","translate","tx","ty","round","dom","url","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","path","src","onload","_","isAbort","qualifyURL","ctor","superCtor","super_","constructor","mixin","proto","propagationStopped","preventDefault","defaultPrevented","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","newCallback","Promise","resolve","setDefaultHandler","handlers","_disabled_","old","disabled","removeDefaultHandler","capturing","removeListener","removeAllListeners","reportError","msg","Error","messages","oop","optionsProvider","setOptions","optList","getOptions","optionNames","hidden","opt","warn","forwardTo","handlesSet","AppConfig","$defaultOptions","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","setMessages","translated","lang","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","moduleUrl","component","parts","sep","setModuleUrl","subst","customLoader","loader","cb","setLoader","dynamicModules","$loading","$loaded","moduleId","onLoad","loadedModule","moduleType","load","afterLoad","err","reportErrorIfPathIsNotConfigured","then","default","$require","setModuleLoader","version","init","scriptOptions","scriptUrl","currentScript","_currentScript","currentDocument","scripts","script","attributes","j","attr","deHyphenate","m1","startRow","startColumn","endRow","endColumn","isEqual","compare","compareRange","cmp","comparePoint","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","lastRow","extend","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","Keys","ret","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","enter","escape","del","mods","pow","keyCode","keyString","fromCharCode","activeListenerOptions","pressedKeys","ts","detectListenerOptionsSupport","createComment","getListenerOptions","EventListener","elem","destroyer","$toDestroy","getButton","ctrlKey","altKey","shiftKey","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","clientX","clientY","_clicks","getModifierHash","metaKey","normalizeCommandKeys","hashId","getModifierState","altGr","location","keyLocation","timeStamp","dt","resetPressedKeys","getModifierString","lastDefaultPrevented","postMessage","postMessageId","nextTick","messageName","listener","$idleBlocked","onIdle","handler","$idleBlockId","blockIdle","nextFrame","requestAnimationFrame","$cancelT","lineMode","pasteCancelled","now","TextInput","event","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","valueResetRegex","host","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","rowStart","Number","MAX_SAFE_INTEGER","rowEnd","MIN_SAFE_INTEGER","numberOfExtraLines","setNumberOfExtraLines","number","role","setLabel","onBlur","hasFocus","onFocus","resetSelection","$focusScroll","enableKeyboardAccessibility","isTransformed","ancestors","parentElement","nodeType","blur","curOp","commandName","isUserAction","docChanged","selectionChanged","onCompositionEnd","positionToSelection","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","handleClipboardData","forceIEMime","clipboardData","mime","doCopy","isCut","getCopyText","onCut","onCopy","onCommandKey","onCompositionStart","$readOnly","useTextareaForIME","cancelComposition","markerRange","msGetInputContext","context","getInputContext","compositionStartOffset","closeTimeout","syncComposition","onKeyup","onContextMenuClose","$isMousePressed","$moveTextAreaToCursor","setCommandMode","setReadOnly","setCopyWithEmptySelection","onContextMenu","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","clientHeight","move","addIosSelectionHandler","typingResetTimeout","typing","detectArrowKeys","isMousePressed","modifier","up","home","option","down","$setUserAgentForTests","_isMobile","_isIOS","DRAG_OFFSET","SCROLL_COOLDOWN_T","DefaultHandlers","mouseHandler","$clickSelection","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","extendSelectionBy","ev","inSelection","mousedownEvent","selectionRange","selectionEmpty","time","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","orientedRange","calcRangeOrientation","setSelectionAnchor","unitName","cmpStart","cmpEnd","selectByLinesEnd","unsetStyle","focusWait","distance","calcDistance","getBracketRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","direction","canScroll","isScrollableBy","speed","isSlower","scrollBy","ax","ay","bx","by","sqrt","selectEnd","selectAllEnd","selectByWordsEnd","currentTarget","contentOverflows","scrollHeight","__extends","extendStatics","setPrototypeOf","__proto__","__values","Symbol","iterator","done","CLASSNAME","Tooltip","$element","$parentNode","setText","setHtml","html","setPosition","setClassName","getHeight","getWidth","PopupManager","popups","addPopup","updatePopups","removePopup","e_1","_a","e_2","_b","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","addToEditor","getMouseEventTarget","removeFromEditor","isOutsideOfText","$gatherData","docPos","screenPos","pixelToScreenCoordinates","clippedPos","setDataProvider","showForRange","domNode","startingEvent","MARGIN","$registerCloseEvents","textToScreenCoordinates","pageX","maxHeight","labelHeight","labelWidth","spaceBelow","pageY","isAbove","marker","$markerSession","$removeCloseEvents","GutterHandler","tooltipTimeout","mouseEvent","gutter","$gutterLayer","tooltip","GutterTooltip","showTooltip","maxRow","screenRow","documentToScreenRow","hideTooltip","$tooltipFollowsMouse","moveTooltip","gutterRow","getGutterRow","gutterCell","$lines","gutterElement","gutterRegion","getRegion","selectTo","$gutter","windowWidth","windowHeight","singular","plural","warning","info","annotation","annotationsInRow","$annotations","from","fold","getFoldLine","$showFoldedAnnotations","mostSevereAnnotationInFoldType","annotationsInFold","annotationType","summaryFoldedAnnotations","annotationsToSummaryString","annotationMessages","iconClassName","$useSvgGutterIcons","annotationLabels","tooltipContent","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","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","onDragInterval","addDragMarker","toOrientedRange","getSelectionStyle","setBlinking","clearInterval","setInterval","clearDragMarker","$resetCursorStyle","onDragStart","cancelDrag","draggable","self","dataTransfer","effectAllowed","setDragImage","clearData","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","insert","types","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","class","handleClick","readText","writeText","ontouchstart","ontouchend","showContextMenu","pagePos","leftOffset","hideContextMenu","handleLongTap","selectWord","switchToSelectionMode","setRange","animate","oldScrollTop","getScrollTop","touches","touchObj","cursorPos","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","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","$defaultHandler","setKeyboardHandler","handleKeyboard","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","rtlCandidate","uc","charCodeAt","ON_R","R_H","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","hasBidiCharacters","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","delta","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","isLastRow","endOfLine","$useWrapMode","splits","$wrapData","indent","size","isFullWidth","getScreenTabSize","$main","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getSelectionAnchor","$bidiHandler","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","getDocument","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","setAnchor","getAnchor","getSelectionLead","isBackwards","$setSelection","MAX_VALUE","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","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","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","getRangeOfMovements","func","toJSON","rangeCount","r1","fromJSON","MAX_TOKEN_COUNT","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","splitterRurles","rule","caseInsensitive","adjustedregex","matchcount","groupCount","tokenArray","$arrayTokens","$applyToken","digit","removeCapturingGroups","createSplitterRegexp","$setMaxTokenCount","stack","inChClass","lastCapture","parenOpen","parenClose","square","startState","currentState","matchAttempts","skipped","consumeLineEnd","addRules","nextState","getRules","embedRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","processState","toInsert","includeName","noEscape","keywordMap","ignoreCase","splitChar","keywords","$keywordList","list","word","getKeywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","initialRow","initialColumn","$session","$row","getTokens","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","CstyleBehaviour","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","rightChar","matching","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","next_indent","quotes","$quotes","quote","leftChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","pairQuotesAfter","$pairQuotesAfter","shouldPairQuotes","charBefore","closeDocComment","$matchTokenType","iterator2","bracket","wordChars","code","$highlightRules","$highlightRuleConfig","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","insertAtTabStop","regexpStart","uncomment","shouldInsertSpace","commentWithSpace","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","fun","minEmptyLength","floor","toggleBlockComment","colDiff","initialRange","startRange","endRange","tab","input","createWorker","createModeDelegates","delegations","_loop_1","functionName","$delegator","this_1","method","language","transformAction","param","completionKeywords","ruleItr","aLength","$createKeywordList","applyDelta","docLines","doNotValidate","Anchor","$clipPositionToDocument","point","$getTransformedPoint","noClip","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","Document","textOrLines","insertMergedLines","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","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","cleanup","SearchHighlight","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","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","excludeEdges","startIndex","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","depth","foldToLevel","foldAllComments","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","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","$uid","onChangeFold","setMode","destroyed","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","undoManager","history","editSession","setAnnotations","setBreakpoints","breakpoints","setScrollLeft","setScrollTop","$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","markers","getMarkers","highlightLines","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$onChangeMode","$modeId","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","terminate","getMode","isNaN","getScrollLeft","getScreenWidth","getLineWidgetMaxWidth","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","$wrap","firstLineNumber","useSoftTabs","foldStyle","$matchIterator","sr","sc","er","ec","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","$supportsUnicodeFlag","addWordBoundary","$assembleMultilineRegExp","forEachInLine","wordBoundary","firstChar","wordRegExp","needleArray","lastChar","MultiHashHandler","$singleCommand","commandKeyBinding","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","other","otherPos","removeCommands","keyList","$keyChain","isDefault","CommandManager","byName","$checkCommandState","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","description","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","gotoLine","prompt","$type","multiSelectAction","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","selectPageUp","scrollPageUp","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","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","$moveFoldWidgetDown","$moveAnnotationDown","$moveFoldWidgetUp","$moveAnnotationUp","$blurAnnotation","$isFoldWidgetVisible","isRowFullyVisible","isIconVisible","$getFoldWidget","$isAnnotationVisible","$getAnnotation","cell","foldWidget","keyboardFocusClassName","desinationLane","annotationIndex","foldWidgetIndex","gutterKeyboardHandler","getKey","isInAnnotationLane","isInFoldLane","defaultCommands","getContainerElement","getTextAreaContainer","$historyTracker","$initOperationListeners","_$emitInputEvent","$opResetTimer","$lastSel","commandEvent","prevOp","previousCommand","scrollSelectionIntoView","animateScrolling","sel","$mergeUndoDeltas","prev","mergeableCommands","$mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","oldEditor","resize","onResize","$highlightBrackets","$highlightPending","$bracketHighlight","markerIds","$getDirectionForHighlight","tagNamesRanges","markerType","getHighlightIndentGuides","$highlightIndentGuide","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","$updateHighlightActiveLine","updateLines","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","isFullLine","getBehavioursEnabled","lineState","shouldOutdent","$enableAutoIndent","lineIndent","selectedRange","currIndent","prevLineState","composition","applyComposition","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","shouldHighlight","getHighlightActiveLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","setHighlightIndentGuides","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","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","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","center","alignCursor","getCursorPositionScreen","expand","tokenCount","matchType","bracketType","brackets","tagsRanges","lineNumber","navigateTo","replaced","$tryReplace","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onBeforeRender","onAfterRender","$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","blurCommand","focusOnEnterKeyup","customScrollbar","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","highlightIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","useResizeObserver","useSvgGutterIcons","showFoldedAnnotations","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","annoType","gutterOffset","oldLastRow","$updateCursorRow","onCreateCell","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","$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","isTextToken","tokenType","Text","$updateEolChar","unixMode","EOL_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","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","lineElement","$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","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","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","onGutterResize","$markerBack","textLayer","$markerFront","$horizScroll","$vScroll","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","$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","$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","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","textLines","pixelPosition","ghostTextHeight","fitsY","newToken","$themeId","$theme","setMouseCursor","attachToShadowRoot","$resizeObserver","contentRect","$workerBlob","workerUrl","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","blobBuilder","getBlob","Worker","blob","URL","webkitURL","blobURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","deltaQueue","onerror","$doc","cmd","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","$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","indentationBlock","startLevel","binarySearch","comparator","findAnnotations","matched","oldWidget","gutterAnno","arrow","onmousedown","Renderer","edit","_id","env","tagName","oldNode","createEditSession"],"sourceRoot":""}