openc3-cosmos-tool-admin 5.5.2 → 5.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/tools/admin/index.html +1 -4
  3. data/tools/admin/js/126.js +2 -0
  4. data/tools/admin/js/126.js.map +1 -0
  5. data/tools/admin/js/133.js +2 -0
  6. data/tools/admin/js/133.js.map +1 -0
  7. data/tools/admin/js/19.js +2 -0
  8. data/tools/admin/js/19.js.map +1 -0
  9. data/tools/admin/js/224.js +2 -0
  10. data/tools/admin/js/224.js.map +1 -0
  11. data/tools/admin/js/303.js +1 -1
  12. data/tools/admin/js/303.js.map +1 -1
  13. data/tools/admin/js/317.js +2 -0
  14. data/tools/admin/js/317.js.map +1 -0
  15. data/tools/admin/js/398.js +2 -0
  16. data/tools/admin/js/398.js.map +1 -0
  17. data/tools/admin/js/446.js +2 -0
  18. data/tools/admin/js/446.js.map +1 -0
  19. data/tools/admin/js/559.js +2 -0
  20. data/tools/admin/js/559.js.map +1 -0
  21. data/tools/admin/js/566.js +2 -0
  22. data/tools/admin/js/566.js.map +1 -0
  23. data/tools/admin/js/635.js +2 -0
  24. data/tools/admin/js/635.js.map +1 -0
  25. data/tools/admin/js/661.js +2 -0
  26. data/tools/admin/js/661.js.map +1 -0
  27. data/tools/admin/js/837.js +8 -0
  28. data/tools/admin/js/837.js.map +1 -0
  29. data/tools/admin/js/876.js +41 -0
  30. data/tools/admin/js/876.js.map +1 -0
  31. data/tools/admin/js/{355.js → 999.js} +2 -2
  32. data/tools/admin/js/{355.js.map → 999.js.map} +1 -1
  33. data/tools/admin/js/app.js +1 -1
  34. data/tools/admin/js/app.js.map +1 -1
  35. metadata +30 -26
  36. data/tools/admin/js/13.js +0 -2
  37. data/tools/admin/js/13.js.map +0 -1
  38. data/tools/admin/js/193.js +0 -2
  39. data/tools/admin/js/193.js.map +0 -1
  40. data/tools/admin/js/374.js +0 -2
  41. data/tools/admin/js/374.js.map +0 -1
  42. data/tools/admin/js/461.js +0 -2
  43. data/tools/admin/js/461.js.map +0 -1
  44. data/tools/admin/js/519.js +0 -2
  45. data/tools/admin/js/519.js.map +0 -1
  46. data/tools/admin/js/549.js +0 -2
  47. data/tools/admin/js/549.js.map +0 -1
  48. data/tools/admin/js/558.js +0 -2
  49. data/tools/admin/js/558.js.map +0 -1
  50. data/tools/admin/js/664.js +0 -2
  51. data/tools/admin/js/664.js.map +0 -1
  52. data/tools/admin/js/731.js +0 -2
  53. data/tools/admin/js/731.js.map +0 -1
  54. data/tools/admin/js/734.js +0 -2
  55. data/tools/admin/js/734.js.map +0 -1
  56. data/tools/admin/js/921.js +0 -9
  57. data/tools/admin/js/921.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/876.js","mappings":"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,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,KAAM,GAAI,MAAO,GAAI,KAAM,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG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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(){this.snippetMap={},this.snippetNameMap={}};(function(){i.implement(this,s),this.getTokenizer=function(){return d.$tokenizer||this.createTokenizer()},this.createTokenizer=function(){function e(e){return e=e.substr(1),/^\\d+$/.test(e)?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}var n={regex:\"/(\"+t(\"/\")+\"+)/\",onMatch:function(e,t,n){var r=n[0];return r.fmtString=!0,r.guard=e.slice(1,-1),r.flag=\"\",\"\"},next:\"formatString\"};return d.$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:e},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1));return r.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+t(\"\\\\|\")+\"*\\\\|\",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\"},n,{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\"},n,{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\"}]}),d.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.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},this.variables=h,this.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},this.tmFormatFunction=function(e,t,n){return t.formatFunction==\"upcase\"?e.toUpperCase():t.formatFunction==\"downcase\"?e.toLowerCase():e},this.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};var e=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}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\"?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}};this.getDisplayTextForSnippet=function(t,n){var r=e.call(this,t,n);return r.text},this.insertSnippetForSelection=function(t,n,r){var i=e.call(this,t,n),s=t.getSelectionRange();r&&r.compareRange(s)===0&&(s=r);var o=t.session.replace(s,i.text),u=new v(t),a=t.inVirtualSelectionMode&&t.selection.index;u.addTabstops(i.tabstops,s.start,o,a)},this.insertSnippet=function(e,t,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()},this.$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},this.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},this.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},this.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},this.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}},this.snippetMap={},this.snippetNameMap={},this.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})},this.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)},this.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},this.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}}).call(d.prototype);var v=function(e){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)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,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)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener(\"change\",this.$onChange),this.editor.removeListener(\"changeSelection\",this.$onChangeSelection),this.editor.removeListener(\"changeSession\",this.$onChangeSession),this.editor.commands.removeListener(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.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.editor.session;!this.$inChange&&t&&p.getLength()==1&&!p.getValue()&&this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges||!e.firstNonLinked)return;this.$inChange=!0;var n=this.editor.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},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.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()},this.onChangeSession=function(){this.detach()},this.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()},this.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})},this.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);g(i.start,t),g(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);m(c.start,t),m(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))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.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.editor.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())},this.keyboardHandler=new f,this.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()}})}).call(v.prototype);var m=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},g=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 y=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(y.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\"],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=function(e){return\"suggest-aria-id:\".concat(e)},l=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},c=function(){function e(e){var t=a.createElement(\"div\"),n=new l(t);e&&e.appendChild(t),t.style.display=\"none\",n.renderer.content.style.cursor=\"default\",n.renderer.setStyle(\"ace_autocomplete\"),n.renderer.container.setAttribute(\"role\",\"listbox\"),n.renderer.container.setAttribute(\"aria-label\",\"Autocomplete suggestions\"),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),h.start.row=h.end.row=t.row,e.stop()});var i,c=new s(-1,0,-1,Infinity),h=new s(-1,0,-1,Infinity);h.id=n.session.addMarker(h,\"ace_active-line\",\"fullLine\"),n.setSelectOnHover=function(e){e?c.id&&(n.session.removeMarker(c.id),c.id=null):c.id=n.session.addMarker(c,\"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;var t=i.getDocumentPosition().row;c.start.row!=t&&(c.id||n.setRow(t),d(t))}),n.renderer.on(\"beforeRender\",function(){if(i&&c.start.row!=-1){i.$pos=null;var e=i.getDocumentPosition().row;c.id||n.setRow(e),d(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!==t.selectedNode&&t.selectedNode&&(a.removeCssClass(t.selectedNode,\"ace_selected\"),i.removeAttribute(\"aria-activedescendant\"),t.selectedNode.removeAttribute(\"id\")),t.selectedNode=r;if(r){a.addCssClass(r,\"ace_selected\");var s=f(e);r.id=s,n.renderer.container.setAttribute(\"aria-activedescendant\",s),i.setAttribute(\"aria-activedescendant\",s),r.setAttribute(\"role\",\"option\"),r.setAttribute(\"aria-label\",n.getData(e).value),r.setAttribute(\"aria-setsize\",n.data.length),r.setAttribute(\"aria-posinset\",e)}});var p=function(){d(-1)},d=function(e,t){e!==c.start.row&&(c.start.row=c.end.row=e,t||n.session._emit(\"changeBackMarker\"),n._emit(\"changeHoverMarker\"))};n.getHoveredRow=function(){return c.start.row},o.addListener(n.container,\"mouseout\",p),n.on(\"hide\",p),n.on(\"changeSelection\",p),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 v=n.session.bgTokenizer;return v.$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),\"\"),t.meta&&r.push({type:\"completion-meta\",value:t.meta}),t.message&&r.push({type:\"completion-message\",value:t.message}),r},v.$updateOnChange=r,v.start=r,n.session.$computeWidth=function(){return this.screenWidth=0},n.isOpen=!1,n.isTopdown=!1,n.autoSelect=!0,n.filterText=\"\",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 h.start.row},n.setRow=function(e){e=Math.max(this.autoSelect?0:-1,Math.min(this.data.length,e)),h.start.row!=e&&(n.selection.clearSelection(),h.start.row=h.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: 0 0.9em;\\n}\\n.ace_completion-message {\\n color: blue;\\n}\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #2d69c7;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #93ca12;\\n}\\n.ace_editor.ace_autocomplete {\\n width: 300px;\\n z-index: 200000;\\n border: 1px lightgray solid;\\n position: fixed;\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n line-height: 1.4;\\n background: #fefefe;\\n color: #111;\\n}\\n.ace_dark.ace_editor.ace_autocomplete {\\n border: 1px #484747 solid;\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\n line-height: 1.4;\\n background: #25282c;\\n color: #c1c1c1;\\n}\\n.ace_autocomplete_right .ace_text-layer {\\n width: calc(100% - 8px);\\n}\\n.ace_autocomplete_right .ace_line {\\n display: flex;\\n}\\n.ace_autocomplete_right .ace_completion-meta {\\n flex: 1;\\n text-align: right;\\n}\\n\",\"autocompletion.css\",!1),t.AcePopup=c,t.$singleLineEditor=l,t.getAriaId=f}),ace.define(\"ace/autocomplete/inline\",[\"require\",\"exports\",\"module\",\"ace/snippets\"],function(e,t,n){\"use strict\";var r=e(\"../snippets\").snippetManager,i=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);if(!e||!t)return!1;var i=t.snippet?r.getDisplayTextForSnippet(e,t.snippet):t.value;return!i||!i.startsWith(n)?!1:(this.editor=e,i=i.slice(n.length),i===\"\"?e.removeGhostText():e.setGhostText(i),!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},e}();t.AceInline=i}),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)}}),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\"],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=function(e,t){t.completer&&t.completer.destroy()},p=function(){function e(){this.autoInsert=!1,this.autoSelect=!0,this.exactMatch=!1,this.inlineEnabled=!1,this.keyboardHandler=new r,this.keyboardHandler.bindKeys(this.commands),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.changeTimer=a.delayedCall(function(){this.updateCompletions(!0)}.bind(this)),this.tooltipTimer=a.delayedCall(this.updateDocTooltip.bind(this),50)}return e.prototype.$init=function(){return this.popup=new i(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.$onPopupChange.bind(this)),this.popup.on(\"hide\",this.$onHidePopup.bind(this)),this.popup.on(\"select\",this.$onPopupChange.bind(this)),this.popup.on(\"changeHoverMarker\",this.tooltipTimer.bind(null,null)),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()},e.prototype.$onPopupChange=function(e){if(this.inlineRenderer&&this.inlineEnabled){var t=e?null:this.popup.getData(this.popup.getRow()),n=u.getCompletionPrefix(this.editor);this.inlineRenderer.show(this.editor,t,n)||this.inlineRenderer.hide(),this.$updatePopupPosition()}this.tooltipTimer.call(null,null)},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);if(this.popup.tryShow(s,n,\"bottom\"))return;if(this.popup.tryShow(r,n,\"top\"))return;this.popup.show(r,n)},e.prototype.openPopup=function(e,t,n){this.popup||this.$init(),this.inlineEnabled&&!this.inlineRenderer&&this.$initInline(),this.popup.autoSelect=this.autoSelect,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),this.popup.setRow(this.autoSelect?0:-1),n?n&&!t&&this.detach():(this.popup.setTheme(e.getTheme()),this.popup.setFontSize(e.getFontSize()),this.$updatePopupPosition(),this.tooltipNode&&this.updateDocTooltip()),this.changeTimer.cancel()},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.changeTimer.cancel(),this.hideDocTooltip(),this.completionProvider&&this.completionProvider.detach(),this.popup&&this.popup.isOpen&&this.popup.hide(),this.base&&this.base.detach(),this.activated=!1,this.completionProvider=this.completions=this.base=null},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.detach()},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;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(){return this.completionProvider||(this.completionProvider=new d),this.completionProvider},e.prototype.gatherCompletions=function(e,t){return this.getCompletionProvider().gatherCompletions(e,t)},e.prototype.updateCompletions=function(e,t){if(e&&this.base&&this.completions){var n=this.editor.getCursorPosition(),r=this.editor.session.getTextRange({start:this.base,end:n});if(r==this.completions.filterText)return;this.completions.setFilter(r);if(!this.completions.filtered.length)return this.detach();if(this.completions.filtered.length==1&&this.completions.filtered[0].value==r&&!this.completions.filtered[0].snippet)return this.detach();this.openPopup(this.editor,r,e);return}if(t&&t.matches){var n=this.editor.getSelectionRange().start;return this.base=this.editor.session.doc.createAnchor(n.row,n.column),this.base.$insertRight=!0,this.completions=new v(t.matches),this.openPopup(this.editor,\"\",e)}var i=this.editor.getSession(),n=this.editor.getCursorPosition(),r=u.getCompletionPrefix(this.editor);this.base=i.doc.createAnchor(n.row,n.column-r.length),this.base.$insertRight=!0;var s={exactMatch:this.exactMatch};this.getCompletionProvider().provideCompletions(this.editor,s,function(t,n,r){var i=n.filtered,s=u.getCompletionPrefix(this.editor);if(r){if(!i.length)return this.detach();if(i.length==1&&i[0].value==s&&!i[0].snippet)return this.detach();if(this.autoInsert&&i.length==1)return this.insertMatch(i[0])}this.completions=n,this.openPopup(this.editor,s,e)}.bind(this))},e.prototype.cancelContextMenu=function(){this.editor.$mouseHandler.cancelContextMenu()},e.prototype.updateDocTooltip=function(){var e=this.popup,t=e.data,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.className=\"ace_tooltip ace_doc-tooltip\",this.tooltipNode.style.margin=0,this.tooltipNode.style.pointerEvents=\"auto\",this.tooltipNode.tabIndex=-1,this.tooltipNode.onblur=this.blurListener.bind(this),this.tooltipNode.onclick=this.onTooltipClick.bind(this));var t=this.tooltipNode;e.docHTML?t.innerHTML=e.docHTML:e.docText&&(t.textContent=e.docText),t.parentNode||document.body.appendChild(t);var n=this.popup,r=n.container.getBoundingClientRect();t.style.top=n.container.style.top,t.style.bottom=n.container.style.bottom,t.style.display=\"block\",window.innerWidth-r.right<320?r.left<320?n.isTopdown?(t.style.top=r.bottom+\"px\",t.style.left=r.left+\"px\",t.style.right=\"\",t.style.bottom=\"\"):(t.style.top=n.container.offsetTop-t.offsetHeight+\"px\",t.style.left=r.left+\"px\",t.style.right=\"\",t.style.bottom=\"\"):(t.style.right=window.innerWidth-r.left+\"px\",t.style.left=\"\"):(t.style.left=r.right+1+\"px\",t.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\",h),this.editor.completer=null),this.inlineRenderer=this.popup=this.editor=null},e}();p.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()}},p.for=function(e){return e.completer instanceof p?e.completer:(e.completer&&(e.completer.destroy(),e.completer=null),c.get(\"sharedPopups\")?(p.$sharedInstance||(p.$sharedInstance=new p),e.completer=p.$sharedInstance):(e.completer=new p,e.once(\"destroy\",h)),e.completer)},p.startCommand={name:\"startAutocomplete\",exec:function(e,t){var n=p.for(e);n.autoInsert=!1,n.autoSelect=!0,n.showPopup(e,t),n.cancelContextMenu()},bindKey:\"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"};var d=function(){function 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;if(this.completions.filterText){var r=e.selection.getAllRanges();for(var i=0,s;s=r[i];i++)s.start.column-=this.completions.filterText.length,e.session.remove(s)}t.snippet?l.insertSnippet(e,t.snippet,t.range):this.$insertString(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;if(t.range){if(e.inVirtualSelectionMode)return e.session.replace(t.range,n);e.forEachSelection(function(){var r=e.getSelectionRange();t.range.compareRange(r)===0?e.session.replace(t.range,n):e.insert(n)},null,{keepOrder:!0})}else e.execCommand(\"insertstring\",n)},e.prototype.gatherCompletions=function(e,t){var n=e.getSession(),r=e.getCursorPosition(),i=u.getCompletionPrefix(e),s=[],o=e.completers.length;return e.completers.forEach(function(a,f){a.getCompletions(e,n,r,i,function(n,r){!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 v(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},e}(),v=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=p,t.CompletionProvider=d,t.FilteredList=v}),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\"){var r=u.getCompletionPrefix(t);if(r&&!n){var s=i.for(t);s.autoInsert=!1,s.showPopup(t)}}},y=e(\"../editor\").Editor;e(\"../config\").defineOptions(y.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.removeListener(\"afterExec\",g)},value:!1},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\"],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=999;r.importCssString(o,\"ace_searchbox\",!1);var l=function(){function e(e,t,n){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:\"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\"},\"All\"]],[\"div\",{\"class\":\"ace_replace_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:\"Replace with\",spellcheck:\"false\"}],[\"span\",{action:\"replaceAndFindNext\",\"class\":\"ace_searchbtn\"},\"Replace\"],[\"span\",{action:\"replaceAll\",\"class\":\"ace_searchbtn\"},\"All\"]],[\"div\",{\"class\":\"ace_search_options\"},[\"span\",{action:\"toggleReplace\",\"class\":\"ace_button\",title:\"Toggle Replace mode\",style:\"float:left;margin-top:-2px;padding:0 5px;\"},\"+\"],[\"span\",{\"class\":\"ace_search_counter\"}],[\"span\",{action:\"toggleRegexpMode\",\"class\":\"ace_button\",title:\"RegExp Search\"},\".*\"],[\"span\",{action:\"toggleCaseSensitive\",\"class\":\"ace_button\",title:\"CaseSensitive Search\"},\"Aa\"],[\"span\",{action:\"toggleWholeWords\",\"class\":\"ace_button\",title:\"Whole Word Search\"},\"\\\\b\"],[\"span\",{action:\"searchInSelection\",\"class\":\"ace_button\",title:\"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),this.$searchBarKb=new u,this.$searchBarKb.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()}}),this.$searchBarKb.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()}}]),this.$closeSearchBarKb=new u([{bindKey:\"Esc\",name:\"closeSearchBar\",exec:function(e){e.searchBox.hide()}}])}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=0,r=0;if(t){var i=this.searchRange?e.session.getTextRange(this.searchRange):e.getValue(),s=e.session.doc.positionToIndex(e.selection.anchor);this.searchRange&&(s-=e.session.doc.positionToIndex(this.searchRange.start));var o=t.lastIndex=0,u;while(u=t.exec(i)){n++,o=u.index,o<=s&&r++;if(n>f)break;if(!u[0]){t.lastIndex=o+=1;if(o>=i.length)break}}}this.searchCounter.textContent=r+\" of \"+(n>f?f+\"+\":n)},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}();t.SearchBox=l,t.Search=function(e,t){var n=e.searchBox||new l(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/behaviour/cstyle\",\"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(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/ruby\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f,this.indentKeywords=this.foldingRules.indentKeywords};r.inherits(l,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(l.prototype),t.Mode=l}); (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/lang\",[\"require\",\"exports\",\"module\"], 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 = 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};\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};\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.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/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\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}\nfunction 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}\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 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 return console.error(\"loader is not configured\");\n};\nexports.setLoader = function (cb) {\n loader = cb;\n};\nexports.dynamicModules = Object.create(null);\nexports.$loading = {};\nexports.loadModule = function (moduleName, onLoad) {\n var module, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\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 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 module = require(moduleName);\n }\n catch (e) { }\n load(module);\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.17.0\";\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 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 comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\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 = comparePoints;\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.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\";\nvar 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 }\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, 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 if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function (e) {\n lastKeyDownKeyCode = e.keyCode;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n }, destroyer);\n }\n else {\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 }\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/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 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 = 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 try {\n var isFocused = document.activeElement === text;\n }\n catch (e) { }\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 };\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 if (isMobile && !isIOS)\n document.removeEventListener(\"selectionchange\", detectSelectionChange);\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 if (isMobile && !isIOS)\n document.addEventListener(\"selectionchange\", detectSelectionChange);\n }, host);\n this.$focusScroll = false;\n this.focus = function () {\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 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 selectionStart = range.start.column;\n selectionEnd = range.end.column;\n line = host.session.getLine(row);\n if (range.start.row != row) {\n var prevLine = host.session.getLine(row - 1);\n selectionStart = range.start.row < row - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row != row) {\n var nextLine = host.session.getLine(row + 1);\n selectionEnd = range.end.row > row + 1 ? nextLine.length : selectionEnd;\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 }\n var newValue = line + \"\\n\\n\";\n if (newValue != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\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 function detectSelectionChange(e) {\n if (!text || !text.parentNode)\n document.removeEventListener(\"selectionchange\", detectSelectionChange);\n if (inComposition)\n return;\n if (text.selectionStart !== text.selectionEnd)\n return;\n var startDiff = text.selectionStart - lastSelectionStart;\n var oldLenght = lastSelectionEnd - lastSelectionStart;\n if (startDiff > 0) {\n startDiff = Math.max(startDiff - oldLenght, 1);\n }\n else if (startDiff === 0 && oldLenght) {\n startDiff = -1;\n }\n var repeat = Math.abs(startDiff);\n var key = startDiff > 0 ? KEYS.right : KEYS.left;\n for (var i = 0; i < repeat; i++) {\n host.onCommandKey({}, 0, key);\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/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\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.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 () {\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}());\nexports.Tooltip = Tooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/tooltip\"], 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 dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\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, tooltipAnnotation;\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation)\n return hideTooltip();\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 var annotationMessages = { error: [], warning: [], info: [] };\n var annotationLabels = {\n error: { singular: \"error\", plural: \"errors\" },\n warning: { singular: \"warning\", plural: \"warnings\" },\n info: { singular: \"information message\", plural: \"information messages\" }\n };\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(annotationLabels[annotation.type[i]].singular, \"' role=img> </span> \").concat(annotation.text[i]);\n annotationMessages[annotation.type[i]].push(line);\n }\n var tooltipBody = \"<div class='ace_gutter-tooltip_body'>\";\n tooltipBody += [].concat(annotationMessages.error, annotationMessages.warning, annotationMessages.info).join(\"<br>\");\n tooltipBody += '</div>';\n var isMoreThanOneAnnotationType = false;\n var tooltipHeader = \"<div class='ace_gutter-tooltip_header'>\";\n for (var i = 0; i < 3; i++) {\n var annotationType = ['error', 'warning', 'info'][i];\n if (annotationMessages[annotationType].length > 0) {\n var label = annotationMessages[annotationType].length === 1 ? annotationLabels[annotationType].singular : annotationLabels[annotationType].plural;\n tooltipHeader += \"\".concat(isMoreThanOneAnnotationType ? ', ' : '').concat(annotationMessages[annotationType].length, \" \").concat(label);\n isMoreThanOneAnnotationType = true;\n }\n }\n tooltipHeader += \"</div>\";\n tooltipAnnotation = tooltipHeader + tooltipBody;\n tooltip.setHtml(tooltipAnnotation);\n tooltip.setClassName(\"ace_gutter-tooltip\");\n tooltip.$element.setAttribute(\"aria-live\", \"polite\");\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n }\n else {\n var gutterElement = mouseEvent.domEvent.target;\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 }\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\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 (tooltipAnnotation && 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 (!tooltipAnnotation || tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n editor.on(\"changeSession\", hideTooltip);\n}\nvar GutterTooltip = /** @class */ (function (_super) {\n __extends(GutterTooltip, _super);\n function GutterTooltip() {\n return _super !== null && _super.apply(this, arguments) || 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 return GutterTooltip;\n}(Tooltip));\nexports.GutterHandler = GutterHandler;\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) {\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 this.getAccelKey = useragent.isMac ? function () {\n return this.domEvent.metaKey;\n } : function () {\n return this.domEvent.ctrlKey;\n };\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.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 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: \"openCommandPallete\" }, \"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 != \"openCommandPallete\")\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) {\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 }, 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(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 = function (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(function () {\n oop.implement(this, EventEmitter);\n this.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n this.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n this.getCursor = function () {\n return this.lead.getPosition();\n };\n this.setAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n this.setSelectionAnchor = this.setAnchor;\n this.getAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n this.getSelectionAnchor = this.getAnchor;\n this.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n this.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 this.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 this.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n this.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n this.setRange =\n this.setSelectionRange = 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 this.$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 this.$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 this.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n this.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n this.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n this.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n this.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n this.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n this.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n this.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n this.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n this.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n this.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n this.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n this.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n this.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n this.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 this.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n this.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n this.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 this.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n this.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n this.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n this.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 this.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 this.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 this.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 this.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 this.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n this.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n this.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 this.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 this.$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 this.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 this.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 this.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n this.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n this.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 this.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n this.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 this.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n this.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n this.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n this.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 this.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 this.toJSON = function () {\n if (this.rangeCount) {\n 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 {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n this.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 this.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}).call(Selection.prototype);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar config = require(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer(rules) {\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 = 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 = config.reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = 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]], lang.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 = 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 = function (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 && 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};\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 = 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 for (var i = 0; i < delegations.length; i++) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\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 column == \"undefined\")\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 return Document;\n}());\nDocument.prototype.$split = (\"aaa\".split(/a/).length === 0) ? function (text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n} : function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\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, editor) {\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/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\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\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\";\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 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/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 EditSession = /** @class */ (function () {\n function EditSession(text, mode) {\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(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.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 = 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, b) {\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(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(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 && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(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 if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\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 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 += 1;\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 += 1;\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 function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp)\n return \"\\\\b\";\n return \"\";\n }\n return wordBoundary(needle[0]) + needle\n + wordBoundary(needle[needle.length - 1]);\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 keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nfunction HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n}\nfunction MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n}\nMultiHashHandler.prototype = HashHandler.prototype;\n(function () {\n this.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 this.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 this.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 || key });\n 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 function getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n }\n this._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 this.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 this.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n this.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n this._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n this.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 this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n this.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 this.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n}).call(HashHandler.prototype);\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 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/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/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 clipboard = require(\"./clipboard\");\nvar keys = require('./lib/keys');\nvar Editor = /** @class */ (function () {\n function Editor(renderer, session, options) {\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 = new 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), false);\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 value = this.session && (this.renderer.$composition || this.getValue());\n if (value && 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 (!value && !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 (!value && 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.content.focus();\n },\n readOnly: true\n };\n var focusOnEnterKeyup = function (e) {\n if (e.target == this.renderer.content && e.keyCode === keys['enter']) {\n e.stopPropagation();\n e.preventDefault();\n this.focus();\n }\n };\n var keyboardFocusClassName = \"ace_keyboard-focus\";\n if (value) {\n this.textInput.getElement().setAttribute(\"tabindex\", -1);\n this.renderer.content.setAttribute(\"tabindex\", 0);\n this.renderer.content.classList.add(keyboardFocusClassName);\n this.renderer.content.setAttribute(\"aria-label\", \"Editor, press Enter key to start editing, press Escape key to exit\");\n this.renderer.content.addEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.addCommand(blurCommand);\n }\n else {\n this.textInput.getElement().setAttribute(\"tabindex\", 0);\n this.renderer.content.setAttribute(\"tabindex\", -1);\n this.renderer.content.classList.remove(keyboardFocusClassName);\n this.renderer.content.setAttribute(\"aria-label\", \"\");\n this.renderer.content.removeEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.removeCommand(blurCommand);\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 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 (session, row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (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/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n function UndoManager() {\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 };\n UndoManager.prototype.fromJSON = function () {\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/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\"], 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 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;\n 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 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;\n if (this.$useSvgGutterIcons) {\n className = \"ace_gutter-cell_svg-icons \";\n if (this.$annotations[row]) {\n annotationNode.className = \"ace_icon_svg\" + this.$annotations[row].className;\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n }\n else {\n dom.setStyle(annotationNode.style, \"display\", \"none\");\n }\n }\n else {\n className = \"ace_gutter-cell \";\n dom.setStyle(annotationNode.style, \"display\", \"none\");\n }\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])\n className += this.$annotations[row].className;\n if (element.className != className)\n element.className = 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 className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row)\n className += \" ace_closed\";\n else\n className += \" ace_open\";\n if (foldWidget.className != className)\n foldWidget.className = className;\n dom.setStyle(foldWidget.style, \"height\", lineHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n }\n else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n var text = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n if (text !== textNode.data) {\n textNode.data = text;\n }\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 = text;\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(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 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\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"], 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 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\", 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;\n 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;\n 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.com.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 (!this.$textToken[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.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.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\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 = 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_icon_svg{\\n margin-left: -14px;\\n float: left;\\n}\\n\\n.ace_gutter-cell.ace_error, .ace_icon.ace_error {\\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 {\\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,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+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,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJibHVlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjgiIGN5PSI4IiByPSI3IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjxwb2x5bGluZSBwb2ludHM9IjggMTEgOCA4Ii8+Cjxwb2x5bGluZSBwb2ludHM9IjkgOCA2IDgiLz4KPGxpbmUgeDE9IjEwIiB5MT0iMTEiIHgyPSI2IiB5Mj0iMTEiLz4KPHJlY3QgeD0iOCIgeT0iNSIgd2lkdGg9IjAuMDEiIGhlaWdodD0iMC4wMSIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n background-color: royalblue;\\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;\\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}\\n\\n.ace_tooltip:focus {\\n outline: 1px solid black;\\n}\\n\\n.ace_gutter-tooltip_header {\\n font-weight: bold;\\n}\\n\\n.ace_gutter-tooltip_body {\\n padding-top: 5px;\\n}\\n\\n.ace_gutter-tooltip .ace_icon {\\n display: inline-block;\\n width: 18px;\\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});\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.getDisplayIndentGuide = 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 (showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\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 }\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.$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 }\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 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 = 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){// commands to enter multiselect mode\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){var 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 = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.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(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n }\n else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\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\"], function(require, exports, module){\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\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: [\"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 * @class 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 if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n window.ace[\"default\"] = window.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = window.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","implement","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","variables","__","hasOwnProperty","tmStrFormat","fmt","RegExp","call","arguments","resolveVariables","toUpperCase","toLowerCase","join","tmFormatFunction","push","lastIndexOf","getTabString","match","column","forEach","index","parents","some","v","Object","keys","m","splice","apply","Math","max","concat","g","y","b","tabstops","getDisplayTextForSnippet","insertSnippetForSelection","getSelectionRange","compareRange","inVirtualSelectionMode","selection","addTabstops","insertSnippet","forEachSelection","keepOrder","tabstopManager","tabNext","$getScope","$id","pop","inlinePhp","getState","substring","getActiveScopes","includeScopes","expandWithTab","expandSnippetForSelection","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","_signal","parseSnippetFile","JSON","parse","getSnippetByName","prototype","$onChange","onChange","$onChangeSelection","delayedCall","onChangeSelection","schedule","$onChangeSession","onChangeSession","$onAfterExec","onAfterExec","attach","ranges","$openTabstops","selectedTabstop","editor","on","commands","keyBinding","addKeyboardHandler","keyboardHandler","detach","removeTabstopMarkers","removeListener","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","$maxLines","setHighlightActiveLine","setShowPrintMargin","setShowGutter","setHighlightGutterLine","$mouseHandler","$focusTimeout","$highlightTagPending","createElement","appendChild","style","display","setStyle","container","setAttribute","setOption","focus","$isFocused","$cursorLayer","restartTimer","element","opacity","$keepTextAreaAtCursor","highlight","$searchHighlight","clazz","getDocumentPosition","moveToPosition","stop","Infinity","id","setSelectOnHover","x","scrollTop","setRow","$pos","getRow","$textLayer","childNodes","config","firstRow","document","activeElement","selectedNode","removeCssClass","removeAttribute","addCssClass","getData","data","_emit","getHoveredRow","addListener","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","snippet","startsWith","removeGhostText","setGhostText","$ghostText","destroy","AceInline","parForEach","retrievePrecedingIdentifier","reverse","retrieveFollowingIdentifier","getCompletionPrefix","completers","identifierRegexps","completer","autoInsert","exactMatch","inlineEnabled","blurListener","changeListener","mousedownListener","mousewheelListener","changeTimer","updateCompletions","tooltipTimer","updateDocTooltip","$init","popup","documentElement","insertMatch","$onPopupChange","$onHidePopup","$initInline","inlineRenderer","getPopup","hideDocTooltip","$updatePopupPosition","layerConfig","lineHeight","getPixelPosition","base","getBoundingClientRect","offset","scrollLeft","gutterWidth","$ghostTextWidget","position","el","offsetHeight","openPopup","completions","filtered","textInput","setAriaOptions","activeDescendant","inline","setTheme","getTheme","setFontSize","getFontSize","tooltipNode","cancel","off","completionProvider","activated","getElement","relatedTarget","parentNode","getCompletionProvider","showPopup","gatherCompletions","setFilter","createAnchor","$insertRight","getSession","provideCompletions","cancelContextMenu","getDocTooltip","completerId","docText","docHTML","showDocTooltip","margin","pointerEvents","tabIndex","onblur","onclick","onTooltipClick","innerHTML","textContent","offsetTop","isFocused","removeChild","target","nodeName","href","rel","Up","Down","Return","deleteSuffix","PageUp","gotoPageUp","PageDown","gotoPageDown","for","get","$sharedInstance","once","startCommand","bindKey","active","insertByIndex","startOperation","getAllRanges","remove","range","$insertString","endOperation","insert","getCompletions","finished","ignoreCaption","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","defineOptions","enableBasicAutocompletion","set","addCommand","removeCommand","enableLiveAutocompletion","enableSnippets","require","module","exports","buildDom","placeholder","spellcheck","title","firstChild","setSession","setEditor","$searchBarKb","isReplace","replaceBox","replaceOption","checked","$syncOptions","searchInput","getReadOnly","replaceInput","findNext","findPrev","esc","setTimeout","activeInput","replaceAll","findAll","addCommands","win","mac","regExpOption","caseSensitiveOption","wholeWordOption","searchOption","searchRange","setSearchRange","$closeSearchBarKb","searchBox","scroller","$initElements","querySelector","searchCounter","stopPropagation","srcElement","getAttribute","addCommandKeyListener","keyCodeToString","findKeyCommand","stopEvent","find","searchRangeMarker","setCssClass","$search","$options","re","updateBackMarkers","skipCurrent","backwards","wrap","regExp","caseSensitive","wholeWord","preventScroll","updateCounter","positionToIndex","lastIndex","replaceAndFindNext","select","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","w","Mode","CstyleBehaviour","HighlightRules","$outdent","$behaviour","foldingRules","getNextLineIndent","getMatching","isDark","cssClass","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","defineProperty","enumerable","writable","configurable","String","searchString","endsWith","subjectString","repeat","count","result","string","includes","str","assign","TypeError","output","source","key","values","k","predicate","len","thisArg","kValue","findIndex","item","fill","O","relativeStart","relativeEnd","final","of","last","stringReverse","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copy","copyArray","array","deepCopy","arrayToMap","arr","createMap","props","arrayRemove","getMatchOffsets","deferredCall","fcn","timer","deferred","timeout","clearTimeout","isPending","defaultTimeout","_self","delay","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","MSStream","isMobile","strictCSP","useragent","XHTML_NS","parent","refs","txt","createTextNode","els","ch","options","childIndex","getDocumentHead","head","getElementsByTagName","tag","createElementNS","removeChildren","ownerDocument","createFragment","createDocumentFragment","hasCssClass","classes","toggleCssClass","add","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","addEventListener","capturing","removeEventListener","removeAllListeners","oop","optionsProvider","setOptions","optList","getOptions","optionNames","hidden","opt","warn","forwardTo","handlesSet","reportError","msg","Error","AppConfig","$defaultOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","lang","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","moduleUrl","component","parts","sep","setModuleUrl","subst","loader","cb","setLoader","dynamicModules","$loading","onLoad","moduleType","load","afterLoad","err","reportErrorIfPathIsNotConfigured","then","default","setModuleLoader","version","init","scriptOptions","scriptUrl","currentScript","_currentScript","currentDocument","scripts","script","attributes","j","attr","deHyphenate","m1","comparePoints","p1","p2","startRow","startColumn","endRow","endColumn","isEqual","compare","cmp","comparePoint","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","lastRow","extend","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","Keys","ret","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","enter","escape","del","mods","pow","keyCode","keyString","fromCharCode","activeListenerOptions","pressedKeys","ts","detectListenerOptionsSupport","createComment","passive","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","isOldGecko","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","postMessageId","nextTick","messageName","listener","$idleBlocked","onIdle","handler","$idleBlockId","blockIdle","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","$cancelT","lineMode","pasteCancelled","now","event","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","valueResetRegex","TextInput","host","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","role","onBlur","detectSelectionChange","hasFocus","onFocus","resetSelection","$focusScroll","isTransformed","ancestors","parentElement","nodeType","blur","curOp","commandName","isUserAction","docChanged","selectionChanged","onCompositionEnd","newValue","selectionStart","selectionEnd","setSelectionRange","afterContextMenu","line","getRange","prevLine","nextLine","isAllSelected","onSelect","selectAll","startDiff","oldLenght","onCommandKey","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","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","selectByLines","extendSelectionBy","selectByWords","ev","inSelection","pos","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","CLASSNAME","Tooltip","$element","$parentNode","setText","setHtml","html","setPosition","setClassName","getHeight","getWidth","__extends","extendStatics","setPrototypeOf","__proto__","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","tooltip","GutterTooltip","showTooltip","annotation","$annotations","hideTooltip","maxRow","screenRow","pixelToScreenCoordinates","documentToScreenRow","annotationMessages","warning","info","annotationLabels","singular","plural","iconClassName","$useSvgGutterIcons","tooltipBody","isMoreThanOneAnnotationType","tooltipHeader","annotationType","label","$tooltipFollowsMouse","moveTooltip","gutterElement","gutterRegion","getRegion","selectTo","$gutter","_super","windowWidth","windowHeight","MouseEvent","$inSelection","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","onMouseMove","clearDragMarker","$resetCursorStyle","onDragStart","cancelDrag","draggable","self","dataTransfer","effectAllowed","setDragImage","clearData","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","types","copyAllowed","moveAllowed","copyModifierState","dragWait","interval","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","state","dragDrop","$dragEnabled","clickCount","eventTarget","unselectable","addTouchListeners","touchStartT","lastT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","vX","vY","createContextMenu","updateMenu","selected","hasUndo","getUndoManager","replaceChild","class","handleClick","readText","writeText","ontouchstart","ontouchend","showContextMenu","pagePos","textToScreenCoordinates","leftOffset","pageX","pageY","hideContextMenu","handleLongTap","selectWord","switchToSelectionMode","setRange","animate","oldScrollTop","getScrollTop","textarea","touches","touchObj","cursorPos","offsetLeft","weightedDistance","diff1","diff2","DefaultGutterHandler","MouseHandler","focusEditor","windowBlurred","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","$dragDelay","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","$defaultHandler","setKeyboardHandler","handleKeyboard","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","args","passEvent","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","lines","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","Number","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","rowEnd","rowStart","foldLine","getFoldLine","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","screenPos","lineWidgets","widget","rowsAbove","rowCount","docPos","keepDesiredColumn","moveCursorToScreen","desiredColumn","getRangeOfMovements","func","toJSON","rangeCount","r1","fromJSON","MAX_TOKEN_COUNT","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","splitterRurles","rule","caseInsensitive","unicode","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","processed","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","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","iterator","$matchTokenType","iterator2","bracket","wordChars","code","$defaultBehaviour","$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","functionName","$delegator","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","$lines","insertMergedLines","getAllLines","getNewLineCharacter","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","$split","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","$safeApplyDelta","docLength","MAX","from","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","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","_this","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","$fromUndo","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","reset","getSelection","undoManager","addSession","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","setOverwrite","overwrite","$overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","marker","addDynamicMarker","markers","getMarkers","highlightLines","setAnnotations","annotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$onChangeMode","$modeId","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","terminate","getMode","setScrollTop","$scrollTop","isNaN","setScrollLeft","$scrollLeft","getScrollLeft","getScreenWidth","getLineWidgetMaxWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","selectionBefore","$getUndoSelection","redoChanges","selectionAfter","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","diff","$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","undo","redo","hasRedo","addSelection","startNewGroup","$wrap","firstLineNumber","useSoftTabs","foldStyle","$matchIterator","sr","sc","er","ec","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","addWordBoundary","$assembleMultilineRegExp","forEachInLine","wordBoundary","commandKeyBinding","$singleCommand","MultiHashHandler","isDefault","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","other","otherPos","removeCommands","keyList","$keyChain","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","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","__values","Symbol","done","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","theme","$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","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","number","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","currWordStart","wordParts","curLength","itLength","that","reg","wordPairs","$toggleWordPairs","negate","firstCondition","secondCondition","res","findLinkAt","e_1","_a","columnPosition","previousPosition","currentPosition","wordParts_1","wordParts_1_1","e_1_1","return","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","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","$composition","placeholderNode","$placeholder","enableKeyboardAccessibility","blurCommand","focusOnEnterKeyup","keyboardFocusClassName","classList","customScrollbar","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","highlightIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","useResizeObserver","useSvgGutterIcons","lastLineNumber","$renderer","UndoManager","$maxRev","$undoDepth","allowMerge","$lastDelta","$keepRedoStack","$redoStack","lastDeltas","undoStackLength","$undoStack","$rev","rev","markIgnored","ignore","getRevision","getDeltas","getChangedRanges","getChangedLines","rearrangeUndoStack","$redoStackBaseRev","deltaSet","undoSelectionRange","$syncRev","rebaseRedoStack","redoSelectionRange","nextDelta","mark","canUndo","canRedo","bookmark","isAtBookmark","$prettyPrint","stringifyDelta","swapped","swapGroups","isClean","markClean","cloneDelta","stringifyRange","d1","d2","i1","i2","ds1","ds2","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","rest","moveDeltasByOne","redoStack","xformed","deltaSets","Lines","canvasHeight","cells","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","lineTop","computeLineHeight","$cacheCell","cell","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","$cursorCell","scrollLines","$renderLines","textNode","foldWidget","annotationNode","breakpoints","decorations","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","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","com","$textToken","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","maxHeight","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","MAX_SCROLL_H","Scrollbar","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","scrollHeight","$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","whiteSpace","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","observe","setPolling","disconnect","$getZoom","zoom","$initTransformMeasureNodes","transformCoordinates","clientPos","elPos","mul","solve","l1","l2","det","sub","m2","ut","Decorator","canvas","pixelRatio","heightRatio","canvasWidth","minDecorationHeight","halfMinDecorationHeight","colors","dark","light","$updateDecorators","allLineHeight","ctx","getContext","priority","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","getDisplayIndentGuide","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","$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","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","$doc","cmd","emit","ex","attachToDocument","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$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","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":""}