(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror"],a)}else{a(CodeMirror)}}})(function(f){var e={pairs:"()[]{}''\"\"",triples:"",explode:"[]{}"};var p=f.Pos;f.defineOption("autoCloseBrackets",false,function(i,t,s){if(s&&s!=f.Init){i.removeKeyMap(l);i.state.closeBrackets=null}if(t){i.state.closeBrackets=t;i.addKeyMap(l)}});function a(s,i){if(i=="pairs"&&typeof s=="string"){return s}if(typeof s=="object"&&s[i]!=null){return s[i]}return e[i]}var m=e.pairs+"`";var l={Backspace:d,Enter:b};for(var j=0;j=0;v--){var y=t[v].head;s.replaceRange("",p(y.line,y.ch-1),p(y.line,y.ch+1),"+delete")}}function b(s){var u=o(s);var w=u&&a(u,"explode");if(!w||s.getOption("disableInput")){return f.Pass}var t=s.listSelections();for(var v=0;v0;return{anchor:new p(s.anchor.line,s.anchor.ch+(i?-1:1)),head:new p(s.head.line,s.head.ch+(i?1:-1))}}function q(F,s){var A=o(F);if(!A||F.getOption("disableInput")){return f.Pass}var u=a(A,"pairs");var D=u.indexOf(s);if(D==-1){return f.Pass}var I=a(A,"triples");var E=u.charAt(D+1)==s;var t=F.listSelections();var v=D%2==0;var B;for(var x=0;x=0&&F.getRange(H,p(H.line,H.ch+3))==s+s+s){C="skipThree"}else{C="skip"}}}else{if(E&&H.ch>1&&I.indexOf(s)>=0&&F.getRange(p(H.line,H.ch-2),H)==s+s&&(H.ch<=2||F.getRange(p(H.line,H.ch-3),p(H.line,H.ch-2))!=s)){C="addFour"}else{if(E){if(!f.isWordChar(y)&&n(F,H,s)){C="both"}else{return f.Pass}}else{if(v&&(F.getLine(H.line).length==H.ch||c(y,u)||/\s/.test(y))){C="both"}else{return f.Pass}}}}}if(!B){B=C}else{if(B!=C){return f.Pass}}}var w=D%2?u.charAt(D-1):s;var G=D%2?s:u.charAt(D+1);F.operation(function(){if(B=="skip"){F.execCommand("goCharRight")}else{if(B=="skipThree"){for(var K=0;K<3;K++){F.execCommand("goCharRight")}}else{if(B=="surround"){var J=F.getSelections();for(var K=0;K-1&&t%2==1}function h(i,t){var s=i.getRange(p(t.line,t.ch-1),p(t.line,t.ch+1));return s.length==2?s:null}function n(i,x,v){var s=i.getLine(x.line);var u=i.getTokenAt(x);if(/\bstring2?\b/.test(u.type)){return false}var w=new f.StringStream(s.slice(0,x.ch)+v+s.slice(x.ch),4);w.pos=w.start=u.start;for(;;){var t=i.getMode().token(w,u.state);if(w.pos>=x.ch+1){return/\bstring2?\b/.test(t)}w.start=w.pos}}function k(i,t){var s=i.getTokenAt(p(t.line,t.ch+1));return/\bstring/.test(s.type)&&s.start==t.ch}});