function Ymacs_Exception(e){this.message=e}DEFINE_CLASS("Ymacs",DlLayout,function(e,t,i){function n(e,t){if(e.length>0){for(var i=e.peek().getPos().x,n=[e.pop()];e.length>0&&e.peek().getPos().x==i;)n.push(e.pop());return n.minElement(function(e){return Math.abs(t.y-e.getPos().y-e.getSize().y/2)})}}function r(e,t){if(e.length>0){for(var i=e.peek().getPos().y,n=[e.pop()];e.length>0&&e.peek().getPos().y==i;)n.push(e.pop());return n.minElement(function(e){return Math.abs(t.x-e.getPos().x-e.getSize().x/2)})}}function s(){if(!window.localStorage||!window.localStorage.getItem)throw new Ymacs_Exception("Local storage facility not available in this browser")}e.DEFAULT_EVENTS=["onBufferSwitch","onCreateBuffer","onDeleteBuffer"],e.DEFAULT_ARGS={buffers:["buffers",null],frames:["frames",null],cf_lineNumbers:["lineNumbers",!1],cf_frameStyle:["frameStyle",null],cf_blinkCursor:["blinkCursor",!0],_focusable:["focusable",!0]},e.FIXARGS=function(e){e.buffers||(e.buffers=[]),e.frames||(e.frames=[]),e.cf_frameStyle||(e.cf_frameStyle={})},e.CONSTRUCT=function(){this.buffers.foreach(function(e){e.ymacs=this,this._addBufferListeners(e)},this),this.killRing=[],this.killMasterOfRings=[],this.progress={},this.__macro_recording=null,this.__macro_finished=null,this.__error_thrown=!1,this.__running_macro=null,this.__macro_times=0,this.__macro_step=0,this.__macro_timer=null,this.__input_frame=null,this.minibuffer=this.createBuffer({hidden:!0,isMinibuffer:!0}),this.minibuffer.cmd("minibuffer_mode"),this.minibuffer_frame=this.createFrame({isMinibuffer:!0,buffer:this.minibuffer,hidden:!0,highlightCurrentLine:!1,className:"Ymacs_Minibuffer"}),0==this.buffers.length&&this.createBuffer();var e=this.createFrame({buffer:this.buffers[0]});this.packWidget(this.minibuffer_frame,{pos:"bottom"}),this.packWidget(e,{pos:"top",fill:"*"}),this.setActiveFrame(e),e._redrawCaret()},t._addBufferListeners=function(e){var t=this;e.addEventListener("onDestroy",function(){var i=t.getActiveFrame();t.getBufferFrames(e).foreach(function(e){e!==i&&t.deleteFrame(e)}),t.buffers.remove(e),t.getActiveBuffer()===e&&t.nextHiddenBuffer(e)})},t.pushToKillRing=function(e,t){t?this.killRing.unshift(e):this.killRing.push(e)},t.killRingToMaster=function(){!this.killRing.length||0!=this.killMasterOfRings.length&&this.killMasterOfRings.peek().join("")==this.killRing.join("")||this.killMasterOfRings.push(this.killRing),this.killRing=[]},t.killRingText=function(){return this.killRing.join("")},t.rotateKillRing=function(e){e?(this.killMasterOfRings.push(this.killRing),this.killRing=this.killMasterOfRings.shift()):(this.killMasterOfRings.unshift(this.killRing),this.killRing=this.killMasterOfRings.pop())},t.getBuffer=function(e){return e instanceof Ymacs_Buffer||(e=this.buffers.grep_first(function(t){return t.name==e})),e},t.killBuffer=function(e){e=this.getBuffer(e),this.callHooks("onDeleteBuffer",e),e.destroy()},t.renameBuffer=function(e,t){e=this.getBuffer(e),e.name=t,e.callHooks("onProgressChange")},t._do_switchToBuffer=function(e){this.getActiveFrame().setBuffer(e),this.callHooks("onBufferSwitch",e)},t.switchToBuffer=function(e){var t=this.getBuffer(e),i=this.buffers;return t||(t=this.createBuffer({name:e})),i.remove(t),i.unshift(t),this._do_switchToBuffer(t),t},t.nextHiddenBuffer=function(e){var t=this.buffers.grep(function(t){if(t===e)return!1;var i=!0;return t.forAllFrames(function(){i=!1}),i});if(t.length>0){var i=t[0];this.buffers.remove(i),this.buffers.push(i),this._do_switchToBuffer(i)}else this.switchToBuffer("*scratch*")},t.switchToNextBuffer=function(){var e=this.buffers;if(e.length>1){var t=e.shift();e.push(t),this._do_switchToBuffer(e[0])}},t.switchToPreviousBuffer=function(){var e=this.buffers;if(e.length>1){var t=e.pop();e.unshift(t),this._do_switchToBuffer(t)}},t.getNextBuffer=function(e,t){null==t&&(t=1);var i=this.buffers;return i[i.rotateIndex(i.find(e)+t)]},t.getPrevBuffer=function(e,t){null==t&&(t=1);var i=this.buffers;return i[i.rotateIndex(i.find(e)-t)]},t.getBufferFrames=function(e){return e=this.getBuffer(e),this.frames.grep(function(t){return t.buffer===e})},t.createBuffer=function(e){e||(e={}),Object.merge(e,{ymacs:this});var t=new Ymacs_Buffer(e);return this._addBufferListeners(t),e.hidden||this.buffers.push(t),this.callHooks("onCreateBuffer",t),t},t.createFrame=function(e){e||(e={}),Object.merge(e,{ymacs:this});var t=new Ymacs_Frame(e);return e.hidden||this.frames.unshift(t),t.addEventListener("onDestroy",function(e){this.frames.remove(e)}.$(this,t)),t.setStyle(this.cf_frameStyle),t},t.setFrameStyle=function(e,t){e=this.cf_frameStyle=t?Object.makeCopy(e):Object.merge(this.cf_frameStyle,e),[this.minibuffer_frame].concat(this.frames).foreach(function(t){t.setStyle(e),t.setStyle("height","")}),this.minibuffer_frame.getOverlaysContainer().style.height="",this.doLayout()},t.keepOnlyFrame=function(e){if(this.frames.length>1){for(var t=e.parent;t.parent!=this;)t=t.parent;this.replaceWidget(t,e),t.destroy(),this.setActiveFrame(e),this.doLayout()}},t.deleteFrame=function(e){if(this.frames.length>1){var t=e.parent,n=t.children().grep_first(function(t){return t instanceof DlLayout||t instanceof Ymacs_Frame&&t!==e});t._resizeBar&&(t._resizeBar._widget=n),t.parent.replaceWidget(t,n),t.destroy();try{i.walk(n.getElement(),function(e){if(e=DlWidget.getFromElement(e),e&&e instanceof Ymacs_Frame)throw e})}catch(r){if(!(r instanceof Ymacs_Frame))throw r;n=r}this.setActiveFrame(n),this.doLayout()}},t.focusOtherFrame=function(){this.setActiveFrame(this.frames[0])},t.focus=function(){e.BASE.focus.apply(this,arguments),this.frames.peek().focus()},t.setInputFrame=function(e){this.__input_frame=e},t.setActiveFrame=function(e,t){if(!e.isMinibuffer){var i=this.getActiveFrame();i&&i.delClass("Ymacs_Frame-active"),this.frames.remove(e),this.frames.push(e)}this.__input_frame=e,t||e.focus()},t.getActiveFrame=function(){return this.frames.peek()},t.getActiveBuffer=function(){var e=this.getActiveFrame();return e?e.buffer:this.buffers.peek()},t.setColorTheme=function(e){this.delClass(/Ymacs-Theme-[^\s]*/g),e instanceof Array||(e=[e]),e.foreach(function(e){this.addClass("Ymacs-Theme-"+e)},this)},t.getFrameInDirection=function(e,t,n){n||(n=this.getActiveFrame());var r=n.getCaretElement();t||(t=i.getPos(r)),t.sz||(t.sz=i.getOuterSize(r));var s=this.frames.mergeSort(function(e,t){return e.getPos().x-t.getPos().x}),o=this.frames.mergeSort(function(e,t){return e.getPos().y-t.getPos().y});return this["_get_frameInDir_"+e](s,o,t,n)},t._get_frameInDir_left=function(e,t,i,r){return e=e.grep(function(e){var t=e.getPos(),n=e.getSize();return e!==r&&t.x<i.x&&t.y-i.sz.y<=i.y&&t.y+n.y>i.y}),n(e,i)},t._get_frameInDir_right=function(e,t,i,r){return e.reverse(),e=e.grep(function(e){var t=e.getPos(),n=e.getSize();return e!==r&&t.x>i.x&&t.y-i.sz.y<=i.y&&t.y+n.y>i.y}),n(e,i)},t._get_frameInDir_up=function(e,t,i,n){return t=t.grep(function(e){var t=e.getPos(),r=e.getSize();return e!==n&&t.y<i.y&&t.x-i.sz.x<=i.x&&t.x+r.x>i.x}),r(t,i)},t._get_frameInDir_down=function(e,t,i,n){return t.reverse(),t=t.grep(function(e){var t=e.getPos(),r=e.getSize();return e!==n&&t.y>i.y&&t.x-i.sz.x<=i.x&&t.x+r.x>i.x}),r(t,i)},t.ls_get=function(){return s(),DlJSON.decode(localStorage.getItem(".ymacs")||"{}",!0)},t.ls_set=function(e){s(),localStorage.setItem(".ymacs",DlJSON.encode(e))},t.ls_getFileContents=function(e,t){var i,n=this.ls_getFileDirectory(e),r=n.other;if(1==r.length&&(i=n.dir[r[0]]),null==i&&!t)throw new Ymacs_Exception("File not found");return i},t.ls_setFileContents=function(e,t){var i=this.ls_getFileDirectory(e,"file");i.dir[i.other[0]]=t,this.ls_set(i.store)},t.ls_getFileDirectory=function(e,t){var i,n=i=this.ls_get(),r=[];e=e.replace(/^[~\x2f]+/,"").split(/\x2f+/);for(var s=[],o=[];e.length>0;){var a=e.shift();"."!=a&&(".."==a?(s.pop(),n=r.pop()):"~"==a?(s=[],o=[],r=[],n=i):n.hasOwnProperty(a)&&"string"!=typeof n[a]?(r.push(n),n=n[a],s.push(a)):o.push(a))}if(t){for(var c="file"==t?1:0;o.length>c;)n=n[o.shift()]={};this.ls_set(i)}return{store:i,dir:n,path:s,other:o,full:s.concat(o).join("/")}},t.ls_deleteFile=function(e){var t=this.ls_getFileDirectory(e);delete t.dir[t.other.join("/")],this.ls_set(t.store)},t.fs_normalizePath=function(e){e=e.replace(/^[~\x2f]+/,"").split(/\x2f+/);for(var t=[];e.length>0;){var i=e.shift();"."!=i&&(".."==i?t.pop():"~"==i?t=[]:t.push(i))}return t.join("/")},t.fs_fileType=function(e,t){try{this.ls_getFileContents(e),t(!0)}catch(i){t(null)}},t.fs_getFileContents=function(e,t,i){var n=this.ls_getFileContents(e,t);i(n,n)},t.fs_setFileContents=function(e,t,i,n){i&&(this.ls_getFileContents(e,!0)||"")!=i?n(null):(this.ls_setFileContents(e,t),n(t))},t.fs_getDirectory=function(e,t){var i=this.ls_getFileDirectory(e,!1);if(e=i.path.join("/"),i){var n={};for(var r in i.dir)Object.HOP(i.dir,r)&&(n[r]={name:r,path:e+"/"+r,type:"string"==typeof i.dir[r]?"regular":"directory"});t(n)}else t(null)},t.fs_deleteFile=function(e,t){this.ls_deleteFile(e),t()},t.fs_remapDir=function(e,t){t(e)},t.isRunningMacro=function(){return!!this.__running_macro},t.isRecordingMacro=function(){return!!this.__macro_recording},t.indicateError=function(){this.__error_thrown=!0},t.startMacro=function(e){return this.isRecordingMacro()?!1:(e?(this.__macro_recording=this.__macro_finished||[],this.__macro_finished=null):this.__macro_recording=[],!0)},t.stopMacro=function(){this.__macro_recording&&(this.__macro_finished=this.__macro_recording,this.__macro_recording=null)},t.getLastMacro=function(){return this.__macro_finished},t.stepMacro=function(){for(;;){if(this.__macro_step>=this.__running_macro.length&&(this.__macro_times--,this.__macro_step=0),0==this.__macro_times||this.__error_thrown)return this.__macro_times=0,this.__macro_step=0,void(this.__running_macro=null);var e=this.__running_macro[this.__macro_step];this.processKeyEvent(e,e.wasKeypress),this.__macro_step++}},t.runMacro=function(e,t){if(this.isRecordingMacro())return!1;this.__error_thrown=!1,this.__running_macro=t,this.__macro_step=0,this.__macro_times=e;var i=this;return setTimeout(function(){i.stepMacro()},0),!0},t.processKeyEvent=function(e,t){var i=this.__input_frame,n=i.buffer;if(e.wasKeypress=t,e._keyCode||(e._keyCode=e.keyCode),t)return is_gecko||(e.keyCode=0),this.__macro_recording&&this.__macro_recording.push(e),n._handleKeyEvent(e);if(!is_gecko){var r=window.KEYBOARD_INSANITY,s=e.keyCode||e._keyCode;return 0==s||s in r.modifiers?!1:!(s in r.letters||s in r.digits||s in r.symbols)||e.ctrlKey||e.altKey?(e.charCode=r.getCharCode(s,e.shiftKey),e.charCode&&(e.keyCode=0),this.__macro_recording&&this.__macro_recording.push(e),n._handleKeyEvent(e)):!1}}}),function(){function e(e,i){var n=t[e]||s[e]||a[e];return n?i?n[1]:n[0]:null}for(var t={},i=65;90>=i;++i)t[i]=[i,i+32];t[32]=[32,32];var n=[16,17,18,20,144].toHash(!0),r=[[49,33],[50,64],[51,35],[52,36],[53,37],[54,94],[55,38],[56,42],[57,40],[48,41]],s=[49,50,51,52,53,54,55,56,57,48].toHash(function(e,t){return r[t]}),o=[[59,58],[61,43],[44,60],[45,95],[46,62],[47,63],[96,126],[91,123],[92,124],[93,125],[39,34]],a=(is_gecko?[59,61,188,109,190,191,192,219,220,221,222]:is_opera?[59,61,44,45,46,47,96,91,92,93,39]:[186,187,188,189,190,191,192,219,220,221,222]).toHash(function(e,t){return o[t]}),c=[37,38,39,40].toHash(!0),l=[45,46,36,35,33,34,112,113,114,115,116,117,118,119,120,121,122,123].toHash(!0);window.KEYBOARD_INSANITY={letters:t,modifiers:n,digits:s,symbols:a,arrows:c,specials:l,getCharCode:e}}(),window.Ymacs_Regexp=function(){function e(e){e instanceof RegExp&&(e=e.toString());var t=e.lastIndexOf("/"),i="";return i=e.substr(t+1),e=e.substring(1,t),{pattern:e,flags:i}}var t={};return{search_backward:function(i){var n=i.toString(),r=t[n];return r||(i=e(n),i.flags=i.flags.replace(/g/g,"")+"g",r=new RegExp("([^]*)("+i.pattern+")",i.flags),t[n]=r),r.lastIndex=0,r}}}(),DEFINE_CLASS("Ymacs_Frame",DlContainer,function(e,t,i){function n(e,t,i){function n(e){for(var o=e.firstChild;o;o=o.nextSibling)if(3==o.nodeType){var a=o.length;if(r+a>t){var c=t-r,l=o.splitText(c);throw e.insertBefore(i,l),s}if(r+a==t)throw e.insertBefore(i,o.nextSibling),s;r+=a}else 1==o.nodeType&&n(o)}if(/^br$/i.test(e.firstChild.tagName))return e.insertBefore(i,e.firstChild),i;var r=0,s={};try{n(e)}catch(o){if(o===s)return i;throw o}}function r(){u=null}function s(e){var t=e.computePos(this.getContentElement()),i=this.coordinatesToRowCol(t.x,t.y);this.buffer.cmd("goto_char",this.buffer._rowColToPosition(i.row,i.col)),this.buffer.ensureTransientMark(),this.ensureCaretVisible()}function o(e){DlEvent.releaseGlobals(this._dragSelectCaptures)}var a=300,c=DlException.stopEventBubbling,l=i.createElement("div",null,{className:"line",innerHTML:"<br/>"}),h=225;e.DEFAULT_EVENTS=["onPointChange"],e.DEFAULT_ARGS={highlightCurrentLine:["highlightCurrentLine",!0],buffer:["buffer",null],ymacs:["ymacs",null],isMinibuffer:["isMinibuffer",!1],_focusable:["focusable",!0],_fillParent:["fillParent",!0]},e.CONSTRUCT=function(){this.__blinkCaret=this.__blinkCaret.$(this),this.__caretId=Dynarch.ID(),this.redrawModelineWithTimer=this.redrawModeline.clearingTimeout(0,this),this.getElement().innerHTML=f,this.addEventListener({onDestroy:this._on_destroy,onFocus:this._on_focus,onBlur:this._on_blur,onMouseDown:this._on_mouseDown,onKeyDown:this._on_keyDown,onKeyPress:this._on_keyPress,onKeyUp:this._on_keyUp,onResize:this._on_resize.clearingTimeout(5),onMouseWheel:this._on_mouseWheel}),this._dragSelectCaptures={onMouseOver:c,onMouseOut:c,onMouseEnter:c,onMouseLeave:c,onMouseMove:s.$(this),onMouseUp:o.$(this)},this._bufferEvents={onLineChange:this._on_bufferLineChange.$(this),onInsertLine:this._on_bufferInsertLine.$(this),onDeleteLine:this._on_bufferDeleteLine.$(this),onPointChange:this._on_bufferPointChange.$(this),onResetCode:this._on_bufferResetCode.$(this),onOverwriteMode:this._on_bufferOverwriteMode.$(this),onProgressChange:this._on_bufferProgressChange.$(this),beforeInteractiveCommand:this._on_bufferBeforeInteractiveCommand.$(this),afterInteractiveCommand:this._on_bufferAfterInteractiveCommand.$(this),onOverlayDelete:this._on_bufferOverlayDelete.$(this)},this._moreBufferEvents={onMessage:this._on_bufferMessage.$(this),onOverlayChange:this._on_bufferOverlayChange.$(this),afterInteractiveCommand:function(){this.__ensureCaretVisible&&this.ensureCaretVisible()}.$(this)};var e=this.buffer;this.buffer=null,e&&this.setBuffer(e),!this.isMinibuffer&&this.ymacs.cf_lineNumbers&&this.toggleLineNumbers(),this.getOverlaysContainer().onscroll=this._on_scroll.$(this)};var f=String.buffer("<div class='Ymacs-frame-overlays'>","<div class='Ymacs-frame-content'></div>","</div>","<div class='Ymacs_Modeline'></div>").get();t.focus=function(t){e.BASE.focus.call(this),t instanceof Function&&(this.removeEventListener("onBlur",this.__exitFocusHandler),this.addEventListener("onBlur",this.__exitFocusHandler=function(){t.call(this.buffer)?this.removeEventListener("onBlur",this.__exitFocusHandler):this.focus.delayed(2,this,null)}))},t.blur=function(t){t&&this.removeEventListener("onBlur",this.__exitFocusHandler),e.BASE.blur.call(this)},t.getOverlaysContainer=function(){return this.getElement().firstChild},t.getModelineElement=function(){return this.getElement().childNodes[1]},t.getContentElement=function(){return this.getElement().firstChild.firstChild},t.getCaretElement=function(){return document.getElementById(this.__caretId)},t.getLineDivElement=function(e){return this.getContentElement().childNodes[e]||null},t.ensureCaretVisible=function(){this._redrawCaret();var e=!1,t=this.getCaretElement();if(!t)return e;var i=this.getOverlaysContainer(),n=this.getLineDivElement(this.buffer._rowcol.row),r=n.offsetTop+n.offsetHeight-(i.scrollTop+i.clientHeight);return r>0?(i.scrollTop+=r,e=!0):(r=n.offsetTop-i.scrollTop,0>r&&(i.scrollTop+=r,e=!0)),r=t.offsetLeft+t.offsetWidth-(i.scrollLeft+i.clientWidth),r>0?(i.scrollLeft+=r,e=!0):(r=t.offsetLeft-i.scrollLeft,0>r&&(i.scrollLeft+=r,e=!0)),e},t.setBuffer=function(e){this.buffer&&(this.caretMarker&&!this.isMinibuffer&&(this.caretMarker.destroy(),this.caretMarker=null),this.buffer.removeEventListener(this._bufferEvents),this.buffer.removeEventListener(this._moreBufferEvents)),this.buffer=e,e&&(e.addEventListener(this._bufferEvents),this.focusInside()&&e.addEventListener(this._moreBufferEvents),this.isMinibuffer?this.caretMarker=e.caretMarker:this.caretMarker=e.createMarker(e.caretMarker.getPosition(),!1,"framecaret"),this._redrawBuffer(),this._redrawCaret(!0),this.centerOnCaret())},t.centerOnCaret=function(){this.centerOnLine(this.buffer._rowcol.row)},t.centerOnLine=function(e){var t=this.getLineDivElement(e),i=this.getOverlaysContainer();i.scrollTop=Math.round(t.offsetTop-i.clientHeight/2+t.offsetHeight/2)},t.setModelineContent=function(e){this.getModelineElement().innerHTML=e},t.deleteOtherFrames=function(){this.ymacs.keepOnlyFrame(this)},t.deleteFrame=function(){this.ymacs.deleteFrame(this)},t.vsplit=function(e){null==e&&(e="50%");var t=this.parent,i=this.ymacs.createFrame({buffer:this.buffer}),n=new DlLayout,r=new DlResizeBar({widget:this,keepPercent:!0,horiz:!0,className:"Ymacs-splitbar-horiz"});return this._resizeBar&&(this._resizeBar._widget=n,n._resizeBar=this._resizeBar),this._resizeBar=r,t.replaceWidget(this,n),n.packWidget(this,{pos:"top",fill:e}),n.packWidget(r,{pos:"top"}),n.packWidget(i,{pos:"top",fill:"*"}),t.__doLayout(),i.centerOnCaret(),i},t.hsplit=function(e){null==e&&(e="50%");var t=this.parent,i=this.ymacs.createFrame({buffer:this.buffer}),n=new DlLayout,r=new DlResizeBar({widget:this,keepPercent:!0,className:"Ymacs-splitbar-vert"});return this._resizeBar&&(this._resizeBar._widget=n,n._resizeBar=this._resizeBar),this._resizeBar=r,t.replaceWidget(this,n),n.packWidget(this,{pos:"left",fill:e}),n.packWidget(r,{pos:"left"}),n.packWidget(i,{pos:"left",fill:"*"}),t.__doLayout(),i.centerOnCaret(),i},t.toggleLineNumbers=function(){this.condClass(this.__lineNumbers=!this.__lineNumbers,"Ymacs-line-numbers"),this.buffer.transientMarker&&this.buffer.ensureTransientMark()},t.setMarkerAtPos=function(e,t){return e.tagName||(e=this.getLineDivElement(e)),e?n(e,t,i.createElement("span")):void 0},t.__restartBlinking=function(){this.ymacs.cf_blinkCursor&&(this.__stopBlinking(),this.focusInside()&&(this.__caretTimer=setTimeout(this.__blinkCaret,2*h)))},t.__stopBlinking=function(){this.ymacs.cf_blinkCursor&&(clearTimeout(this.__caretTimer),this.__showCaret())},t.__blinkCaret=function(){i.condClass(this.getCaretElement(),this.BLINKING=!this.BLINKING,"Ymacs-caret"),this.__caretTimer=setTimeout(this.__blinkCaret,h)},t.__showCaret=function(){i.addClass(this.getCaretElement(),"Ymacs-caret")},t._unhoverLine=function(){null!=this.__hoverLine&&(i.delClass(this.getLineDivElement(this.__hoverLine),"Ymacs-current-line"),this.__hoverLine=null)},t._redrawCaret=function(e){this.isMinibuffer&&(e=!0);var t=this.ymacs.getActiveFrame()===this;if(e||t){t&&!this.isMinibuffer&&this.focusInside()&&this.caretMarker.setPosition(this.buffer.caretMarker.getPosition());var n=this.buffer._rowcol;this.highlightCurrentLine&&(this._unhoverLine(),i.addClass(this.getLineDivElement(n.row),"Ymacs-current-line"),this.__hoverLine=n.row),Array.$(this.getElement().querySelectorAll(".Ymacs-caret, #"+this.__caretId)).foreach(function(e){e.id="",e.className=""}),null!=this.__prevCaretLine&&this._on_bufferLineChange(this.__prevCaretLine),this.__prevCaretLine!=n.row&&(this.__prevCaretLine=n.row,this._on_bufferLineChange(n.row)),t&&this.__restartBlinking(),this.callHooks("onPointChange",n.row,n.col),this.redrawModelineWithTimer(n)}},t._getLineHTML=function(e){var t=this.buffer.formatLineHTML(e,this.caretMarker),i=t.indexOf("Ymacs-caret'>");return i>=0&&(t=t.substr(0,i+12)+" id='"+this.__caretId+"'"+t.substr(i+12)),t},t._redrawBuffer=function(){this.setContent(this.buffer.code.map(function(e,t){return this._getLineHTML(t).htmlEmbed("div","line")},this).join(""))},t.coordinatesToRowCol=function(e,t){function i(e,n){if(e>=n)return e;var s=Math.floor((e+n)/2),o=r.getLineDivElement(s),a=o.offsetTop,c=a+o.offsetHeight;return t>c?i(s+1,n):a>t?i(e,s-1):s}function n(t,i){if(t>=i)return t;var o=Math.floor((t+i)/2),a=r.coordinates(s,o),c=r.coordinates(s,o+1);return c.x<e?n(o+1,i):e<a.x?n(t,o-1):o}var r=this,s=i(0,this.buffer.code.length-1),o=n(0,this.buffer.code[s].length);return{row:s,col:o}},t.coordinates=function(e,t){var n=this.getLineDivElement(e),r=this.setMarkerAtPos(n,t),s={x:r.offsetLeft,y:n.offsetTop,h:n.offsetHeight};return i.trash(r),s},t.heightInLines=function(){return Math.floor(this.getOverlaysContainer().clientHeight/this.getContentElement().firstChild.offsetHeight)},t.setOuterSize=t.setSize=function(t){e.BASE.setOuterSize.apply(this,arguments),i.setOuterSize(this.getOverlaysContainer(),t.x,t.y-this.getModelineElement().offsetHeight),i.setOuterSize(this.getModelineElement(),t.x)},t.redrawModeline=function(e){e||(e=this.caretMarker.getRowCol());var t=this.buffer.code.length-1,i=this.firstLineVisible(),n=this.lastLineVisible(),r=0==i?"Top":n==t?"Bot":Math.round(n/t*100)+"%";this.setModelineContent(this.buffer.renderModelineContent(e,r))},t._on_bufferLineChange=function(e){var t=this.getLineDivElement(e);t&&(t.innerHTML=this._getLineHTML(e))},t._on_bufferInsertLine=function(e,t){var i=l.cloneNode(!0);this.getContentElement().insertBefore(i,this.getLineDivElement(e)),t&&(i.innerHTML=this._getLineHTML(e))},t._on_bufferDeleteLine=function(e){i.trash(this.getLineDivElement(e))},t._on_bufferPointChange=function(e,t){this._redrawCaret()},t._on_bufferResetCode=function(){this._redrawBuffer()},t._on_bufferOverwriteMode=function(e){this.condClass(e,"Ymacs-overwrite-mode")},t._on_bufferMessage=function(e,t,i,n){var r=this.isMinibuffer?this.ymacs:this,s=Ymacs_Message_Popup.get(0);s.popup({content:i?t:t.htmlEscape(),widget:r,anchor:r.getElement(),align:{prefer:"CC",fallX1:"CC",fallX2:"CC",fallY1:"CC",fallY2:"CC"}}),s.hide(n||5e3)},t._on_bufferBeforeInteractiveCommand=function(){this.__ensureCaretVisible=!0,this._unhoverLine(),Ymacs_Message_Popup.clearAll()},t._on_bufferAfterInteractiveCommand=function(){},t._on_bufferProgressChange=function(){this.redrawModelineWithTimer(null)},t.getOverlayId=function(e){return this.id+"-ovl-"+e},t.getOverlayHTML=function(e,t){if(t.line1==t.line2&&t.col1==t.col2)return this._on_bufferOverlayDelete(e,t),null;var i=this.coordinates(t.line1,t.col1),n=this.coordinates(t.line2,t.col2),r=this.__lineNumbers?this.coordinates(t.line1,0):{x:0,y:0};i.x-=r.x,n.x-=r.x;var s=String.buffer("<div id='",this.getOverlayId(e),"' class='Ymacs_Overlay ",e,"' style='top:",i.y,"px;left:",r.x,"px'>");return t.line1==t.line2?s("<div class='",e,"' style='margin-left:",i.x,"px; width:",n.x-i.x,"px;height:",n.h,"px;'>&nbsp;</div>"):(s("<div class='",e,"' style='margin-left:",i.x,"px;height:",i.h,"px;'>&nbsp;</div>"),t.line2-t.line1>1&&s("<div class='",e,"' style='height:",n.y-i.y-i.h,"px'></div>"),s("<div class='",e,"' style='width:",n.x,"px;height:",n.h,"px;'>&nbsp;</div>")),s("</div>"),s.get()},t.getOverlaysCount=function(){return this.getOverlaysContainer().childNodes.length-1},t._on_bufferOverlayChange=function(e,t,n){var r=this.getOverlayHTML(e,t);if(r){r=i.createFromHtml(r);var s=this.getOverlaysContainer(),o=!n&&document.getElementById(this.getOverlayId(e));o?s.replaceChild(r,o):s.appendChild(r)}},t._on_bufferOverlayDelete=function(e,t,n){i.trash(document.getElementById(this.getOverlayId(e)))},t._on_destroy=function(){this.setBuffer(null),this.__stopBlinking()},t._on_focus=function(){window.focus(),this.ymacs.setActiveFrame(this,!0),this.addClass("Ymacs_Frame-active"),this.isMinibuffer||this.buffer.cmd("goto_char",this.caretMarker.getPosition()),this.buffer.addEventListener(this._moreBufferEvents),this._redrawCaret(),this.__restartBlinking()},t._on_blur=function(){this.isMinibuffer||this.caretMarker.setPosition(this.buffer.caretMarker.getPosition()),this.buffer.removeEventListener(this._moreBufferEvents),this.__stopBlinking()};var u=0,_=null;t._on_mouseDown=function(e){if(!e.ctrlKey||!e.shiftKey){clearTimeout(_),u++,_=r.delayed(a),this.__restartBlinking();var t=e.computePos(this.getContentElement()),i=this.coordinatesToRowCol(t.x,t.y),n=this.buffer;n.clearTransientMark(),n.cmd("goto_char",n._rowColToPosition(i.row,i.col)),n.callInteractively("keyboard_quit"),1==u?(n.ensureTransientMark(),DlEvent.captureGlobals(this._dragSelectCaptures)):2==u?(n.cmd("forward_word"),n.cmd("backward_word"),n.cmd("forward_word_mark")):3==u?(n.cmd("beginning_of_line"),n.cmd("end_of_line_mark")):4==u&&(n.cmd("backward_paragraph"),n.cmd("forward_whitespace"),n.cmd("beginning_of_line"),n.cmd("forward_paragraph_mark")),c()}},t._on_keyDown=function(e){this.ymacs.processKeyEvent(e,!1)&&c()},t._on_keyPress=function(e){this.ymacs.processKeyEvent(e,!0)&&c()},t._on_keyUp=function(e){},t._on_resize=function(){this.destroyed||(this.centerOnCaret(),this.redrawModelineWithTimer())},t._on_scroll=function(){this.redrawModelineWithTimer()},t._on_mouseWheel=function(e){this.buffer._handleKeyEvent(e),e.domStop=!0},t.firstLineVisible=function(){var e=this.getOverlaysContainer();return this.coordinatesToRowCol(1,e.scrollTop+1).row},t.lastLineVisible=function(){var e=this.getOverlaysContainer();return this.coordinatesToRowCol(e.clientWidth-2,e.scrollTop+e.clientHeight-2).row},t.scrollUp=function(e){var t=this.getOverlaysContainer(),i=Math.max(this.firstLineVisible()-e,0);i=this.getLineDivElement(i),t.scrollTop=i.offsetTop,this.__ensureCaretVisible=!1},t.scrollDown=function(e){var t=this.getOverlaysContainer(),i=Math.min(this.firstLineVisible()+e,this.buffer.code.length-1);i=this.getLineDivElement(i),t.scrollTop=i.offsetTop,this.__ensureCaretVisible=!1}}),DEFINE_CLASS("Ymacs_Message_Popup",DlPopup,function(e,t){e.FIXARGS=function(e){e.focusable=!1,e.autolink=!1,e.zIndex=5e3}}),DEFINE_CLASS("Ymacs_Text_Properties",DlEventProxy,function(e,t){e.DEFAULT_EVENTS=["onChange"],e.DEFAULT_ARGS={buffer:["buffer",null]},e.CONSTRUCT=t.reset=function(){this.props=[]},t.insertLine=function(e){this.props.length<e?this.props[e]=null:this.props.splice(e,0,null)},t.deleteLine=function(e){this.props.splice(e,1)},t.replaceLine=function(e,t){var i=this.props[e];i&&i.length>t.length&&i.splice(t.length,i.length)},t.addLineProps=function(e,t,i,n,r){var s,o=this.props,a=!1;if(i>t){for(o=o[e]||(o[e]=[]);i>t;)s=o[t]||(o[t]={}),s[n]!=r&&(a=!0),s[n]=r,++t;a&&this.callHooks("onChange",e)}return a},t.removeLineProps=function(e,t,i,n){var r,s=this.props[e],o=!1;if(s&&i>t){for(;i>t;)r=s[t],r&&n in r&&(o=!0,delete r[n]),++t;o&&this.callHooks("onChange",e)}return o},t.getLineHTML=function(e,t,i){var n=this.props[e];if(null===i){if(""==t)return"<br/>";if(!n||0==n.length)return t.htmlEscape()}else{if(""==t)return"<span class='Ymacs-caret'>&nbsp;</span>";if(!n||0==n.length)return i===t.length?t.htmlEscape()+"<span class='Ymacs-caret'>&nbsp;</span>":t.substr(0,i).htmlEscape()+"<span class='Ymacs-caret'>"+t.charAt(i).htmlEscape()+"</span>"+t.substr(i+1).htmlEscape()}for(var r,s,o=0,a=t.length,c=null,l="";a>o;){switch(r=n[o],r=r&&r.css,o===i&&(r=r?r+" Ymacs-caret":"Ymacs-caret"),r&&r!=c?(c&&(l+="</span>"),l+="<span class='"+r+"'>"):!r&&c&&(l+="</span>"),c=r,s=t.charAt(o)){case"<":l+="&lt;";break;case">":l+="&gt;";break;case"&":l+="&amp;";break;default:l+=s}++o}return c&&(l+="</span>"),o===i&&(l+="<span class='Ymacs-caret'>&nbsp;</span>"),l}}),function(){function e(e){var t=this.getPrefixArg(!0);t&&(e=t+" "+e),this.cmd("minibuffer_prompt",e)}function t(t,i){console.log("read_function_name",t),e.call(this,t),this.cmd("minibuffer_read_function",i)}function i(t,i){e.call(this,t),this.cmd("minibuffer_read_buffer",i)}function n(t,i){e.call(this,t),this.cmd("minibuffer_read_buffer",i)}function r(e,t){}function s(t,i){e.call(this,t),this.cmd("minibuffer_read_command",i)}function o(e,t){t.call(this,this.point())}function a(e,t){}function c(e,t){t.call(this,null)}function l(e,t){}function h(e,t){}function f(e,t){t.call(this,this.markMarker.getPosition())}function u(t,i){e.call(this,t),this.cmd("minibuffer_read_string",null,i)}function _(t,i){e.call(this,t),this.cmd("minibuffer_read_number",i)}function d(e,t){var i=parseInt(this.getPrefixArg(),10);isNaN(i)?_.call(this,e,t):t.call(this,i)}function m(e,t){var i=parseInt(this.getPrefixArg(),10);isNaN(i)&&(i=null),t.call(this,i)}function p(e,t){e=this.getPrefixArg(),""===e&&(e=M),t.call(this,e)}function g(e,t){var i=this.getRegion();t.call(this,i.begin,i.end)}function v(e,t){}function b(t,i){e.call(this,t),this.cmd("minibuffer_read_variable",i)}function w(t,i){e.call(this,t),this.cmd("minibuffer_read_existing_file",i)}function k(t,i){e.call(this,t),this.cmd("minibuffer_read_file",i)}function y(t,i){e.call(this,t),this.cmd("minibuffer_read_file_or_directory",i)}function C(t,i){e.call(this,t),this.cmd("minibuffer_read_directory",i)}function x(e,t){var i=e.charAt(0);return e=e.substr(1),E[i].$(null,e,t)}window.Ymacs_Interactive=function(e,t){if(1==arguments.length)t=e,e=null;else{var i;t instanceof Function||(i=t,t=arguments[2],t.ymacsDoc=i)}if(t.ymacsInteractive=!0,e instanceof Function)t.ymacsGetArgs=e;else if(null!=e){if(!(e instanceof Array)){var n=/^[\^\@\*]+/.exec(e);n&&(n=n[0],e=e.substr(n.length),n.indexOf("^")>=0&&(t.ymacsMarkExtend=!0),n.indexOf("*")>=0&&(t.ymacsWarnReadonly=!0),n.indexOf("@")>=0&&(t.ymacsSelectFrame=!0)),e&&(e=e.split(/\n+/))}if(e){for(var r,s=function(){return r.append(Array.$(arguments)),this.callInteractively(t,r,!0)};e.length>0;)s=x(e.pop(),function(e){r.append(Array.$(arguments,1)),e.call(this)}.$(null,s));t.ymacsCallInteractively=function(){return r=[],s.call(this)}}}return t},window.Ymacs_Interactive_X=function(e){return Ymacs_Interactive("p",function(t){null==t&&(t=1),t.times(e,this)})};var M=function(){};M.toString=function(){return""},M.empty=!0;var E={a:t,b:i,B:n,c:r,C:s,d:o,e:a,i:c,k:l,K:h,m:f,M:u,n:_,N:d,p:m,P:p,r:g,s:u,U:v,v:b,f:w,F:k,G:y,D:C}}(),DEFINE_CLASS("Ymacs_Buffer",DlEventProxy,function(e,t){function i(e,t){if("string"==typeof e)return void 0===t?delete this[e]:this[e]=t,t instanceof Function&&(t.ymacsCommand=e),t;var n={};for(var r in e)n[r]=this[r],i.call(this,r,e[r]);return n}function n(e){return e instanceof Ymacs_Marker?e.getPosition():e}function r(e){if(e){var t=e.charCodeAt(0);return t>=48&&57>=t||e.toUpperCase()!=e.toLowerCase()}}function s(e){if(e){var t=e.charCodeAt(0);return t>=48&&57>=t||"_"==e||e.toUpperCase()!=e.toLowerCase()}}e.DEFAULT_EVENTS=["onLineChange","onInsertLine","onDeleteLine","onPointChange","onResetCode","onMessage","onOverwriteMode","onOverlayChange","onOverlayDelete","beforeInteractiveCommand","afterInteractiveCommand","beforeRedraw","afterRedraw","finishedEvent","onProgressChange","onTextInsert","onTextDelete"],e.DEFAULT_ARGS={name:["name","*scratch*"],_code:["code",null],ymacs:["ymacs",null],tokenizer:["tokenizer",null],isMinibuffer:["isMinibuffer",!1]};var o={case_fold_search:!0,line_movement_requested_col:0,fill_column:78,tab_width:8,indent_level:4,syntax_word:{test:r},syntax_word_dabbrev:{test:s},syntax_paragraph_sep:/\n\s*\n/g},a=5e4;t.lastIndexOfRegexp=function(e,t,i,n){e=e.substring(0,i),t=Ymacs_Regexp.search_backward(t),t.lastIndex=n||0;var r=t.exec(e);if(r){var s=Array.$(r,2);return s.index=r.index+r[1].length,s.after=r.index+r[0].length,s[0]=e.substring(s.index,s.after),this.matchData=s,s}},e.COMMANDS=t.COMMANDS={},e.newCommands=t.newCommands=function(){return i.apply(this.COMMANDS,arguments)},e.replaceCommands=t.replaceCommands=function(e){this.COMMANDS=Object.makeCopy(this.COMMANDS);var t={};return Object.foreach(e,function(e,i){"string"==typeof e&&(e=this[e]),t[i]=e},this.COMMANDS),this.newCommands(t)},e.newMode=t.newMode=function(t,i){var n="*"+t+"*",r=n+"hooks";e.setGlobal(r,[]),this.COMMANDS[t]=Ymacs_Interactive("P",function(e){var s=this.getq(n);if(s)e!==!0&&(this.getq(r).foreach(function(e){e.call(this,!1)},this),s instanceof Function&&s.call(this),this.setq(n,null),this.modes.remove(t));else if(e!==!1){var o=i.apply(this,arguments);o instanceof Function||(o=!0),this.setq(n,o),this.modes.push(t),this.getq(r).foreach(function(e){e.call(this,!0);
},this)}return s})},e.addModeHook=t.addModeHook=function(e,t){"string"==typeof t&&(t=this.COMMANDS[t]);var i="*"+e+"*hooks";this.getq(i).pushUnique(t)},e.removeModeHook=t.removeModeHook=function(e,t){"string"==typeof t&&(t=this.COMMANDS[t]);var i="*"+e+"*hooks";this.getq(i).remove(t)},e.FIXARGS=function(e){null==e.code&&(e.code="")},e.CONSTRUCT=function(){this.__savingExcursion=0,this.__preventUpdates=0,this.__preventUndo=0,this.__undoInProgress=0,this.__dirtyLines=[],this.__undoQueue=[],this.__undoPointer=0,this.__overlays={},this.markers=[],this.caretMarker=this.createMarker(0,!1,"point"),this.markMarker=this.createMarker(0,!0,"mark"),this.matchData=[],this.previousCommand=null,this.currentCommand=null,this.currentKeys=[],this.progress={},this.variables={},this.globalVariables=o,this.modes=[],this.caretMarker.onChange.push(function(e){this._rowcol=this.caretMarker.getRowCol(),0==this.__preventUpdates&&this.callHooks("onPointChange",this._rowcol,this.point())}),this._tokenizerEvents={onFoundToken:this._on_tokenizerFoundToken.$(this)},this._textProperties=new Ymacs_Text_Properties({buffer:this}),this._textProperties.addEventListener("onChange",this._on_textPropertiesChange.$(this)),this.keymap=[],this.pushKeymap(this.makeDefaultKeymap()),this.setCode(this._code),this._lastCommandWasKill=0,delete this._code},t.withVariables=function(e,t){var i,n={};for(i in e)n[i]=this.variables[i],this.variables[i]=e[i];try{return t instanceof Function?t.apply(this,Array.$(arguments,2)):this.cmdApply(t,Array.$(arguments,2))}finally{for(i in n)void 0===n[i]?delete this.variables[i]:this.variables[i]=n[i]}},t.withCommands=function(e,t){var i=this.COMMANDS;this.COMMANDS=Object.makeCopy(i),Object.merge(this.COMMANDS,e);try{return t instanceof Function?t.apply(this,Array.$(arguments,2)):this.cmdApply(t,Array.$(arguments,2))}finally{this.COMMANDS=i}},t.getVariable=function(e){return e in this.variables?this.variables[e]:o[e]},t.setVariable=function(){return i.apply(this.variables,arguments)},e.setq=e.setVariable=e.setGlobal=t.setGlobal=function(){return i.apply(o,arguments)},t.setq=t.setVariable,t.getq=t.getVariable,e.getq=e.getVariable=function(e){return o[e]},t.pushKeymap=function(e){e instanceof Array?e.foreach(this.pushKeymap,this):(this.popKeymap(e),this.keymap.push(e),e.attached(this))},t.popKeymap=function(e){this.keymap.remove(e),e.detached(this)},t.makeDefaultKeymap=function(){return Ymacs_Keymap_Emacs()},t.signalError=function(e,t,i){this.ymacs.indicateError(),this.callHooks("onMessage","error",e,t,i)},t.signalInfo=function(e,t,i){this.callHooks("onMessage","info",e,t,i)},t.createMarker=function(e,t,i){return null==e&&(e=this.point()),new Ymacs_Marker({editor:this,pos:e,name:i,before:t})},t.point=function(){return this.caretMarker.getPosition()},t.dirty=function(e){return arguments.length>0&&(this.__isDirty=e,this.__undoQueue.foreach(function(e){3!==e.type&&(e.dirty=!0)}),this.updateModeline()),this.__isDirty},t.setCode=function(e){this.__isDirty=!1,this.__code=e,this.__size=e.length,this.__undoQueue=[],this.__undoPointer=0,this.__overlays={},this.markers.map("setPosition",0,!0,!0),this.code=e.split(/\n/),this._textProperties.reset(),this.tokenizer&&this.tokenizer.reset(),this.callHooks("onResetCode",this.code),this.caretMarker.setPosition(0,!1,!0),this.markMarker.setPosition(0,!0),this.forAllFrames(function(e){e.ensureCaretVisible(),e.redrawModelineWithTimer()})},t.setTokenizer=function(e){null!=this.tokenizer&&this.tokenizer.removeEventListener(this._tokenizerEvents),this.tokenizer=e,e?e.addEventListener(this._tokenizerEvents):(this._textProperties.reset(),this.callHooks("onResetCode",this.code))},t.getCode=function(){return this.__code||(this.__code=this.code.join("\n"))},t.getCodeSize=function(){if(this.__size)return this.__size;for(var e=this.code.length,t=e>0?-1:0;--e>=0;)t+=this.code[e].length+1;return this.__size=t},t.getLine=function(e){return null==e&&(e=this._rowcol.row),this.code[e]},t.charAtRowCol=function(e,t){var i=this.code.length;if(e>=i--)return null;var n=this.code[e];return t==n.length?e==i&&n.charAt(t)||"\n":n.charAt(t)},t.charAt=function(e){null==e?e=this.point():(e=n(e),0>e&&(e+=this.point()));var t=this._positionToRowCol(e);return this.charAtRowCol(t.row,t.col)},t.callInteractively=function(e,t,i){t||(t=[]);var n;if(e instanceof Function?n=e.ymacsCommand||null:(n=e,e=this.COMMANDS[e]),e.ymacsCallInteractively&&!i)return e.ymacsCallInteractively.apply(this,t);this.currentCommand=n,this.previousCommand!=n?(this.sameCommandCount(0),"undo"!=n&&this._placeUndoBoundary()):("self_insert_command"!=n||this.sameCommandCount()%20==0)&&"undo"!=n&&this._placeUndoBoundary(),this.preventUpdates();try{return this.callHooks("beforeInteractiveCommand",n,e),e.ymacsMarkExtend||this.clearTransientMark(),e.apply(this,t)}catch(r){if(!(r instanceof Ymacs_Exception))throw r;this.signalError(r.message)}finally{"undo"!=n&&(this.__undoPointer=this.__undoQueue.length),this.resumeUpdates(),this.callHooks("afterInteractiveCommand",n,e),this.previousCommand=n,this.sameCommandCount(1)}},t.resetOverwriteMode=function(e){0==arguments.length&&(e=this.overwriteMode),this.callHooks("onOverwriteMode",this.overwriteMode=!e),this.signalInfo(e?"Insert mode":"Overwrite mode")},t.getMinibuffer=function(){return this.whenYmacs(function(e){return e.minibuffer})},t.getMinibufferFrame=function(){return this.whenYmacs(function(e){return e.minibuffer_frame})},t.setMinibuffer=function(e){this.whenMinibuffer(function(t){t.setCode(e),t.cmd("end_of_buffer")})},t.cmd=function(e){return this.COMMANDS[e].apply(this,Array.$(arguments,1))},t.cmdApply=function(e,t){return this.COMMANDS[e].apply(this,t)},t.createDialog=function(e){e.parent||(e.parent=this.getActiveFrame()&&this.getActiveFrame().getParentDialog(),"noShadows"in e||(e.noShadows=!0));var t=new DlDialog(e);return this.whenActiveFrame(function(e){t.addEventListener("onDestroy",e.focus.clearingTimeout(0,e))}),t},t.getActiveFrame=function(){return this.whenYmacs("getActiveFrame")},t.when=function(e,t){return e=this[e]||this.getq(e),null!=e?t instanceof Function?t.call(this,e):e[t].apply(e,Array.$(arguments,2)):void 0},t.whenActiveFrame=function(){var e=this.getActiveFrame();if(e.buffer===this){this.activeFrame=e;var t=Array.$(arguments);return t.unshift("activeFrame"),this.when.apply(this,t)}this.activeFrame=null},t.forAllFrames=function(e){this.ymacs&&this.ymacs.getBufferFrames(this).foreach(e)},t.whenYmacs=function(){var e=Array.$(arguments);return e.unshift("ymacs"),this.when.apply(this,e)},t.whenMinibuffer=function(e){return this.whenYmacs(function(t){return t.minibuffer?e.call(this,t.minibuffer):void 0})},t.preventUpdates=function(){++this.__preventUpdates},t.resumeUpdates=function(){0==(this.__preventUpdates=Math.max(this.__preventUpdates-1,0))&&this.redrawDirtyLines()},t.getRegion=function(e,t){if(null==e&&(e=this.caretMarker),null==t&&(t=this.markMarker),e=n(e),t=n(t),e>t){var i=e;e=t,t=i}return{begin:e,end:t}},t.redrawDirtyLines=function(){this.callHooks("beforeRedraw"),this.__dirtyLines.foreach(function(e,t){e&&this.callHooks("onLineChange",t)},this),this.__dirtyLines=[],this.callHooks("afterRedraw")},t.getOverlays=function(){return this.__overlays},t.getOverlay=function(e){return this.__overlays[e]},t.setOverlay=function(e,t){var i,n=this.__overlays[e],r=!n;r?n=this.__overlays[e]=t:Object.merge(n,t),n.line2<n.line1?(i=n.line2,n.line2=n.line1,n.line1=i,i=n.col2,n.col2=n.col1,n.col1=i):n.line2==n.line1&&n.col2<n.col1&&(i=n.col2,n.col2=n.col1,n.col1=i),this.callHooks("onOverlayChange",e,n,r)},t.deleteOverlay=function(e){delete this.__overlays[e],this.callHooks("onOverlayDelete",e)},t.ensureTransientMark=function(){var e,t=this._rowcol;this.transientMarker||(this.transientMarker=this.createMarker(),this.markMarker.setPosition(this.point()),e=t),e||(e=this.transientMarker.getRowCol()),this.setOverlay("selection",{line1:e.row,col1:e.col,line2:t.row,col2:t.col})},t.clearTransientMark=function(){this.transientMarker&&(this.transientMarker.destroy(),this.transientMarker=null,this.deleteOverlay("selection"))},t.deleteTransientRegion=function(){return this.transientMarker?(this._deleteText(this.caretMarker,this.transientMarker),this.clearTransientMark(),this._placeUndoBoundary(),!0):void 0};var c=0;t.sameCommandCount=function(e){return null==e?c:0==e?c=0:c+=e};var l;t.interactiveEvent=function(e){return 0==arguments.length?l:l=e},t.getPrefixArg=function(e){var t=this.getq("universal_prefix");return e||(this.setq("universal_prefix",void 0),this.isMinibuffer||this.setMinibuffer("")),t},t.setPrefixArg=function(e){return this.setq("universal_prefix",e)},t.updateProgress=function(e,t){null==t?delete this.progress[e]:this.progress[e]=t,this.callHooks("onProgressChange")},t.updateModeline=function(){this.callHooks("onProgressChange")},t.renderModelineContent=function(e,t){var i=String.buffer(this.__isDirty?"**":"--"," <b>",this.name.htmlEscape(),"</b>","  ",t," of ",this.getCodeSize().formatBytes(2).toLowerCase(),"  ","(",e.row+1,",",e.col,") "),n=this.getq("modeline_custom_handler");n&&(n=n.call(this,this,e),n&&i("[",n,"] "));var r=[];for(var s in this.progress)r.push(s+": "+this.progress[s]);return r.length>0&&i("{",r.join(", "),"}"),i.get()},t._recordChange=function(e,t,i,n){if(i>0){var r=this.__undoQueue;r.push({type:e,pos:t,len:i,text:n,dirty:this.__isDirty}),this.__isDirty=!0,r.length>a&&r.shift()}},t._placeUndoBoundary=function(){var e=this.__undoQueue,t=this.markers.map(function(e){return[e,e.getPosition()]}),i=e.peek();i&&3==i.type?i.markers=t:e.push({type:3,markers:t})},t._playbackUndo=function(){var e=this.__undoQueue;if(0==e.length)return!1;++this.__undoInProgress;for(var t,i=!1;--this.__undoPointer>=0;){if(t=e[this.__undoPointer],3==t.type){if(t.markers.foreach(function(e){e[0].setPosition(e[1])}),!i)continue;break}i=!0;var n=t.pos;switch(t.type){case 1:this._deleteText(n,n+t.len);break;case 2:this._insertText(t.text,n)}this.__isDirty=t.dirty}return--this.__undoInProgress,i},t._replaceLine=function(e,t){this.code[e]=t,this._textProperties.replaceLine(e,t),0==this.__preventUpdates?this.callHooks("onLineChange",e):this.__dirtyLines[e]=!0},t._deleteLine=function(e){this.code.splice(e,1),this._textProperties.deleteLine(e),this.tokenizer&&this.tokenizer.quickDeleteLine(e),this.__dirtyLines.splice(e,1),this.callHooks("onDeleteLine",e)},t._insertLine=function(e,t){this.code.splice(e,0,t),this._textProperties.insertLine(e),this.tokenizer&&this.tokenizer.quickInsertLine(e);var i=0==this.__preventUpdates;this.callHooks("onInsertLine",e,i),i||(this.__dirtyLines.length<=e?this.__dirtyLines[e]=!0:this.__dirtyLines.splice(e,0,!0))},t._insertText=function(e,t){if(0!=e.length){null==t&&(t=this.caretMarker.getPosition()),t=n(t),0==this.__preventUndo&&this._recordChange(1,t,e.length);var i=t==this.point()?this._rowcol:this._positionToRowCol(t),r=i.row;if(/^\n+$/.test(e)&&0==i.col)e.length.times(function(e){this._insertLine(r+e,"")},this);else{var s=e.split("\n"),o=this.code[r],a=o.substr(i.col);s.length>1?(this._replaceLine(r,o.substr(0,i.col)+s.shift()),s.foreach(function(e){this._insertLine(++r,e)},this),this._replaceLine(r,this.code[r]+a)):this._replaceLine(r,o.substr(0,i.col)+s[0]+o.substr(i.col))}this._updateMarkers(t,e.length),this.callHooks("onTextInsert",t,e)}},t._deleteText=function(e,t){if(e=this._boundPosition(n(e)),t=this._boundPosition(n(t)),e!=t){if(e>t){var i=e;e=t,t=i}0==this.__preventUndo&&this._recordChange(2,e,t-e,this._bufferSubstring(e,t));var r=this._positionToRowCol(e),s=this._positionToRowCol(t),o=this.code[r.row];r.row==s.row?(o=o.substr(0,r.col)+o.substr(s.col),this._replaceLine(r.row,o)):(o=o.substr(0,r.col)+this.code[s.row].substr(s.col),this._replaceLine(r.row,o),o=r.row+1,(s.row-r.row).times(this._deleteLine.$(this,o))),this._updateMarkers(e,e-t,e),this.callHooks("onTextDelete",e,t)}},t._replaceText=function(e,t,i){this._deleteText(e,t),this._insertText(i,e)},t._swapAreas=function(e){e=e.map(n).mergeSort();var t=e[0],i=e[1],r=e[2],s=e[3],o=this._bufferSubstring(t,i),a=this._bufferSubstring(r,s);return this._replaceText(r,s,o),this._replaceText(t,i,a),s},t._bufferSubstring=function(e,t){if(e=null==e?this.point():n(e),t=null==t?this.getCodeSize():n(t),e>t){var i=e;e=t,t=i}return this.getCode().substring(e,t)},t._killingAction=function(e,t,i,r){e=n(e),t=n(t);var s=this._bufferSubstring(e,t);this._saveKilledText(s,i),r||this._deleteText(e,t)},t._saveKilledText=function(e,t){this._lastCommandWasKill||this.ymacs.killRingToMaster(),this.ymacs.pushToKillRing(e,t),this._lastCommandWasKill++},t._positionToRowCol=function(e){for(var t=0,i=this.code,n=i.length;e>0&&n>t;){var r=i[t].length;if(r>=e)break;e-=r+1,t++}return{row:t,col:e}},t._rowColToPosition=function(e,t){var i=0,n=this.code,r=Math.min(e,n.length-1),s=r;if(0>r)return 0;for(;--r>=0;)i+=n[r].length+1;return i+Math.min(t,n[s].length)},t._boundPosition=function(e){return 0>e?0:Math.min(e,this.getCodeSize())},t._repositionCaret=function(e){var t=this.caretMarker.getPosition();return null==e&&(e=t),e=n(e),e=this._boundPosition(e),this.caretMarker.setPosition(e),e!=t},t._updateMarkers=function(e,t,i){this.__size=null,this.__code=null,this.markers.map("editorChange",e,t,i||0),this.tokenizer&&this.tokenizer.quickUpdate(Math.min(e,e+t))},t._saveExcursion=function(e,t){var i=this.createMarker(null,t);++this.__savingExcursion;try{return e.call(this)}finally{--this.__savingExcursion,this.caretMarker.swap(i,!1,!0),i.destroy()}},t._disableUndo=function(e){++this.__preventUndo;try{return e.call(this)}finally{--this.__preventUndo}},t._handleKeyEvent=function(e){var t=!1;this.interactiveEvent(e);var i=this._lastCommandWasKill;this.__nextIsMeta&&(e.altKey=!0),this.__nextIsMeta=!1;var n=Ymacs_Keymap.unparseKey(e),r=this.currentKeys,s=!1;return r.push(n),this.keymap.r_foreach(function(e){var i=e.getHandler(r);i instanceof Array?(this.callInteractively(i[0],i[1]),t=!0):i?t=s=!0:"ESCAPE"===n?(this.__nextIsMeta=!0,t=!0):e.defaultHandler&&1==r.length&&(t=this.callInteractively(e.defaultHandler[0],e.defaultHandler[1])),t&&$BREAK()},this),s||(t||r.length>1&&(this.signalError(r.join(" ").bold()+" is undefined",!0),t=!0),r.splice(0,r.length)),this._lastCommandWasKill!=i||"object"==typeof t||this.__nextIsMeta||(this._lastCommandWasKill=0),this.callHooks("finishedEvent",t),this.interactiveEvent(null),t},t._on_tokenizerFoundToken=function(e,t,i,n){n?this._textProperties.addLineProps(e,t,i,"css",n):this._textProperties.removeLineProps(e,t,i,"css")},t._on_textPropertiesChange=function(e){0==this.__preventUpdates?this.callHooks("onLineChange",e):this.__dirtyLines[e]=!0},t.formatLineHTML=function(e,t){var i=this._rowcol;return t instanceof Ymacs_Marker&&(i=t.getRowCol()),t=e==i.row?i.col:null,this._textProperties.getLineHTML(e,this.code[e],t)}}),DEFINE_CLASS("Ymacs_Marker",null,function(e,t){e.DEFAULT_ARGS={position:["pos",null],editor:["editor",null],before:["before",!1],name:["name",null]},e.CONSTRUCT=function(){this.editor.markers.push(this),this.rowcol=null,this.onChange=[]},t.destroy=function(){this.editor.markers.remove(this),this.editor=null},t.editorChange=function(e,t,i){var n=this.position;this.before&&--n,0!=t&&n>=e&&(this.rowcol=null,this.position+=t,this.position<i&&(this.position=i),this.callHooks(this.onChange,this.position))},t.callHooks=function(e,t){for(var i=e.length;--i>=0;)e[i].call(this.editor,t)},t.getPosition=function(){return this.position},t.setPosition=function(e,t,i){(i||this.position!=e)&&(this.rowcol=null,this.position=e,t||this.callHooks(this.onChange,this.position))},t.getRowCol=function(){return this.rowcol||(this.rowcol=this.editor._positionToRowCol(this.position))},t.updateMarkers=function(e){this.editor._updateMarkers(this.getPosition(),e)},t.swap=function(e,t,i){var n=this.getPosition();this.setPosition(e.getPosition(),t,i),e.setPosition(n,t,i)}}),Ymacs_Buffer.newCommands({forward_char:Ymacs_Interactive("p",function(e){return null==e&&(e=1),this.cmd("goto_char",this.point()+e)}),backward_char:Ymacs_Interactive("p",function(e){return null==e&&(e=1),this.cmd("forward_char",-e)}),forward_line:Ymacs_Interactive("p",function(e){null==e&&(e=1);var t=this._rowcol;/^(forward|backward)_line$/.test(this.previousCommand)||this.setq("line_movement_requested_col",t.col);var i=this.cmd("goto_char",this._rowColToPosition(t.row+e,Math.max(t.col,this.getq("line_movement_requested_col"))));return i||this.setq("line_movement_requested_col",t.col),i}),backward_line:Ymacs_Interactive("p",function(e){return null==e&&(e=1),this.cmd("forward_line",-e)}),forward_whitespace:Ymacs_Interactive("P",function(e){var t=e?/[^\x20\t\xA0]/g:/[^\s]/g;return this.cmd("search_forward_regexp",t)?(this.cmd("backward_char"),!0):e?void 0:this.cmd("end_of_buffer")}),backward_whitespace:Ymacs_Interactive("P",function(e){var t=e?/[^\x20\t\xA0]/g:/[^\s]/g;return this.cmd("search_backward_regexp",t)?(this.cmd("forward_char"),!0):e?void 0:this.cmd("beginning_of_buffer")}),beginning_of_line:Ymacs_Interactive(function(){return this.cmd("goto_char",this._rowColToPosition(this._rowcol.row,0))}),back_to_indentation:Ymacs_Interactive(function(){var e=this._rowcol,t=this.code[e.row],i=/\S/.exec(t);return i?this.cmd("goto_char",this._rowColToPosition(e.row,i.index)):void 0}),beginning_of_indentation_or_line:Ymacs_Interactive(function(){return this.cmd("back_to_indentation")||this.cmd("beginning_of_line")}),end_of_line:Ymacs_Interactive(function(){var e=this._rowcol;return this.cmd("goto_char",this._rowColToPosition(e.row,this.code[e.row].length))}),beginning_of_buffer:Ymacs_Interactive(function(){return this.cmd("goto_char",0)}),end_of_buffer:Ymacs_Interactive(function(){return this.cmd("goto_char",this.getCodeSize())}),eob_p:function(){return this.point()==this.getCodeSize()},bob_p:function(){return 0==this.point()},eol_p:function(){var e=this._positionToRowCol(this.point());return e.col==this.code[e.line].length},bol_p:function(){return 0==this._positionToRowCol(this.point()).col},backward_delete_char:Ymacs_Interactive("^p",function(e){if(!this.deleteTransientRegion()){null==e&&(e=1);var t=this.point();t>0&&this._deleteText(t-e,t)}}),delete_char:Ymacs_Interactive("^p",function(e){if(!this.deleteTransientRegion()){null==e&&(e=1);var t=this.point();this._deleteText(t,t+e)}}),delete_whitespace:Ymacs_Interactive("^P",function(e){if(!this.deleteTransientRegion()){var t=this.point();if(this.cmd("forward_whitespace",e))return this._deleteText(t,this.point()),!0}}),backward_delete_whitespace:Ymacs_Interactive("^P",function(e){if(!this.deleteTransientRegion()){var t=this.point();if(this.cmd("backward_whitespace",e))return this._deleteText(this.point(),t),!0}}),delete_indentation:Ymacs_Interactive("P",function(e){e&&this.cmd("forward_line"),this.cmd("back_to_indentation"),this.cmd("backward_delete_whitespace"),this.cmd("insert"," ")}),universal_argument:Ymacs_Interactive("^",function(){this.pushKeymap(Ymacs_Keymap_UniversalArgument()),this.isMinibuffer||this.setMinibuffer("C-u")}),overwrite_mode:Ymacs_Interactive(function(){this.resetOverwriteMode()}),self_insert_command:Ymacs_Interactive("^p",function(e){var t=this.interactiveEvent(),i=String.fromCharCode(t.charCode),n=this._rowcol;if(t.charCode&&i&&!t.altKey&&!t.ctrlKey){if(this.deleteTransientRegion(),null!=e&&(i=i.x(e)),this.overwriteMode){var r=this.code[n.row],s=r.length-n.col;s>0&&this.cmd("delete_char",Math.min(s,e||1))}return this.cmd("insert",i),t.domStop=!0,!0}return!1}),newline:Ymacs_Interactive("^p",function(e){null==e&&(e=1),this.deleteTransientRegion(),this.cmd("insert","\n".x(e))}),newline_and_indent:Ymacs_Interactive("^p",function(e){e?this.cmd("newline",e):(this.cmd("backward_delete_whitespace",!0),this.cmd("newline"),this.cmd("indent_line"))}),indent_line:Ymacs_Interactive("P",function(e){if(this.tokenizer){var t=this.tokenizer.getIndentation(this._rowcol.row,this);if(null!=t){if(!e||/\S/.test(this.getLine())){var i=this.cmd("save_excursion",function(){return this.cmd("back_to_indentation"),this._rowcol.col!=t&&(this.cmd("beginning_of_line"),this.cmd("delete_whitespace",!0),this.cmd("insert"," ".x(t))),this.point()});this.point()<i&&this.cmd("goto_char",i)}return}}this.cmd("insert"," ".x(this.getq("indent_line")))}),indent_region:Ymacs_Interactive("r",function(e,t){if(e>t){var i=e;e=t,t=i}this.cmd("save_excursion",function(){var i=this.createMarker(t);for(this.cmd("goto_char",e);this.point()<i.getPosition()&&(this.cmd("indent_line",!0),this.cmd("beginning_of_line"),this.cmd("forward_line")););i.destroy()})}),make_marker:function(e){return this.createMarker(e)},looking_at:function(e){var t=e.lastIndex=this.point(),i=this.matchData=e.exec(this.getCode());return i&&(i.after=e.lastIndex),i&&i.index==t},looking_back:function(e){var t=this.lastIndexOfRegexp(this.getCode(),e,this.point());return t&&t.after==this.point()},search_forward:Ymacs_Interactive("sSearch: ",function(e,t){var i=this.getCode(),n=this.point();this.getq("case_fold_search")&&(i=i.toLowerCase(),e=e.toLowerCase());var r=i.indexOf(e,n);return r>=0&&(null==t||t>=r)?(this.cmd("goto_char",r+e.length),!0):void 0}),search_backward:Ymacs_Interactive("sSearch backward: ",function(e,t){var i=this.getCode(),n=this.point();this.getq("case_fold_search")&&(i=i.toLowerCase(),e=e.toLowerCase());var r=i.lastIndexOf(e,n);return r==n&&(r=i.lastIndexOf(e,n-1)),r>=0&&r!=n&&(null==t||r>=t)?(this.cmd("goto_char",r),!0):void 0}),make_regexp:function(e){if(!(e instanceof RegExp)){var t=e.toLowerCase()!=e.toUpperCase();try{e=new RegExp(e,t?"ig":"g")}catch(i){throw new Ymacs_Exception("Invalid regexp")}}return e},search_forward_regexp:Ymacs_Interactive("sRegExp search: ",function(e){e=this.cmd("make_regexp",e);var t=this.getCode(),i=e.lastIndex=this.point(),n=this.matchData=e.exec(t);return n&&e.lastIndex!=i?(n.after=e.lastIndex,this.cmd("goto_char",e.lastIndex),!0):void 0}),search_backward_regexp:Ymacs_Interactive("sBackward RegExp search: ",function(e){e=this.cmd("make_regexp",e);var t=this.lastIndexOfRegexp(this.getCode(),e,this.point());return t&&t.index!=this.point()?(this.cmd("goto_char",t.index),!0):void 0}),forward_word:Ymacs_Interactive_X(function(){for(var e=this.getq("syntax_word"),t=!1;!t&&!e.test(this.charAt());)this.cmd("forward_char")||(t=!0);for(;!t&&e.test(this.charAt());)this.cmd("forward_char")||(t=!0)}),backward_word:Ymacs_Interactive_X(function(){for(var e=this.getq("syntax_word"),t=!1;!t&&!e.test(this.charAt(-1));)this.cmd("backward_char")||(t=!0);for(;!t&&e.test(this.charAt(-1));)this.cmd("backward_char")||(t=!0)}),forward_paragraph:Ymacs_Interactive_X(function(){this.cmd("forward_whitespace"),this.cmd("search_forward_regexp",this.getq("syntax_paragraph_sep"))?this.cmd("goto_char",this.cmd("match_beginning")+1):this.cmd("end_of_buffer")}),backward_paragraph:Ymacs_Interactive_X(function(){this.cmd("backward_whitespace"),this.cmd("search_backward_regexp",this.getq("syntax_paragraph_sep"))?this.cmd("goto_char",this.cmd("match_end")-1):this.cmd("beginning_of_buffer")}),transpose_words:Ymacs_Interactive_X(function(){this.cmd("backward_char"),this.getq("syntax_word").test(this.charAt())&&this.cmd("forward_word");var e=[];this.cmd("forward_word"),e.push(this.point()),this.cmd("backward_word"),e.push(this.point()),this.cmd("backward_word"),e.push(this.point()),this.cmd("forward_word"),e.push(this.point()),this.cmd("goto_char",this._swapAreas(e))}),transpose_lines:Ymacs_Interactive_X(function(){var e=[];this.cmd("backward_line"),this.cmd("beginning_of_line"),e.push(this.point()),this.cmd("end_of_line"),e.push(this.point()),this.cmd("forward_char"),e.push(this.point()),this.cmd("end_of_line"),e.push(this.point()),this.cmd("goto_char",this._swapAreas(e)+1)}),transpose_chars:Ymacs_Interactive_X(function(){var e=this.point();this.cmd("backward_char")&&this.cmd("goto_char",this._swapAreas([e-1,e,e,e+1]))}),kill_word:Ymacs_Interactive_X(function(){var e=this.point();this.cmd("forward_word");var t=this.point();this._killingAction(e,t,!1)}),backward_kill_word:Ymacs_Interactive_X(function(){var e=this.point();this.cmd("backward_word");var t=this.point();this._killingAction(e,t,!0)}),_apply_operation_on_word:function(e,t){var i=this.point();if(this.getq("syntax_word").test(this.charAt())){var n=this.cmd("save_excursion",function(){return this.cmd("forward_word"),this.point()}),r=e.call(this._bufferSubstring(i,n));this._deleteText(i,n),this._insertText(r)}else this.cmd("forward_word"),this.cmd("backward_word"),i!=this.point()&&this.cmd(t)},capitalize_word:Ymacs_Interactive_X(function(){this.cmd("_apply_operation_on_word",function(){return this.charAt(0).toUpperCase()+this.substr(1).toLowerCase()},"capitalize_word")}),downcase_word:Ymacs_Interactive_X(function(){this.cmd("_apply_operation_on_word",String.prototype.toLowerCase,"downcase_word")}),upcase_word:Ymacs_Interactive_X(function(){this.cmd("_apply_operation_on_word",String.prototype.toUpperCase,"upcase_word")}),goto_char:Ymacs_Interactive("NGoto char: ",function(e){return this._repositionCaret(e)}),goto_line:Ymacs_Interactive("NGoto line: ",function(e){var t=this._rowColToPosition(e-1,0);return this.cmd("goto_char",t)}),move_to_column:Ymacs_Interactive("NMove to column: ",function(e,t){var i=this._positionToRowCol(this.point()),n=this.code[i.row];n.length<e?t?(this.cmd("end_of_line"),this.cmd("insert"," ".x(e-n.length))):this.cmd("end_of_line"):this.cmd("goto_char",this._rowColToPosition(i.row,e))}),delete_region:Ymacs_Interactive("r",function(e,t){this._deleteText(e,t)}),insert:Ymacs_Interactive("sInsert text: ",function(){return this._insertText(Array.$(arguments).join(""))}),keyboard_quit:Ymacs_Interactive("^p",Function.noop),buffer_substring:function(e,t){if(0==arguments.length){var i=this.getRegion();e=i.begin,t=i.end}return this._bufferSubstring(e,t)},kill_line:Ymacs_Interactive_X(function(){var e=this.point(),t=this._rowcol,i=this.code[t.row],n=e+i.length-t.col;t.row<this.code.length-1&&this.cmd("looking_at",/\s*$/gm)&&n++,this._killingAction(e,n)}),save_excursion:function(){return this._saveExcursion.apply(this,arguments)},prevent_undo:function(){return this._disableUndo.apply(this,arguments)},point:function(){return this.caretMarker.getPosition()},kill_region:Ymacs_Interactive("r",function(e,t){this._killingAction(e,t)}),copy_region_as_kill:Ymacs_Interactive("r",function(e,t){this._killingAction(e,t,!1,!0)}),yank:Ymacs_Interactive("^P",function(e){this.deleteTransientRegion();var t=this.point();this._insertText(this.ymacs.killRingText()),this.cmd("set_mark_command",t),e&&this.cmd("exchange_point_and_mark")}),yank_pop:Ymacs_Interactive(function(){/^yank/.test(this.previousCommand)?(this.ymacs.rotateKillRing(!1),this._deleteText(this.caretMarker,this.markMarker),this.cmd("yank")):this.signalError("Previous command was not a yank")}),yank_shift:Ymacs_Interactive(function(){/^yank/.test(this.previousCommand)?(this.ymacs.rotateKillRing(!0),this._deleteText(this.caretMarker,this.markMarker),this.cmd("yank")):this.signalError("Previous command was not a yank")}),mark:function(){return this.markMarker.getPosition()},set_mark_command:Ymacs_Interactive("d",function(e){"set_mark_command"==this.currentCommand&&this.signalInfo("Mark set",null,1e3),this.markMarker.setPosition(e)}),exchange_point_and_mark:Ymacs_Interactive("^",function(){this.caretMarker.swap(this.markMarker)}),mark_whole_buffer:Ymacs_Interactive(function(){this.clearTransientMark(),this.cmd("end_of_buffer"),this.ensureTransientMark(),this.cmd("beginning_of_buffer"),this.ensureTransientMark()}),recenter_top_bottom:Ymacs_Interactive(function(){this.whenActiveFrame(function(e){e.centerOnCaret()})}),ensure_caret_visible:Ymacs_Interactive(function(){this.whenActiveFrame(function(e){e.ensureCaretVisible()&&e.centerOnCaret()})}),fill_paragraph:Ymacs_Interactive("P",function(e){this.cmd("save_excursion",function(){this.cmd("looking_at",this.getq("syntax_paragraph_sep"))||this.cmd("forward_paragraph");var t=this.createMarker(this.point()-1);this.cmd("backward_paragraph"),this.point()>0&&this.cmd("forward_char");var i="",n=/\s+/g;for(this.cmd("looking_at",/\s*\/\/+\s*/g)?(i=this.matchData[0],n=/\s*\/\/+\s*/g):this.cmd("looking_at",/\s*\/\*\s*/g)?(i=" ".x(this.matchData[0].length),n=/\s*\**\s*/g):this.cmd("looking_at",/\s*([-*]|[0-9]+\.|\(?[a-z][\).])?\s+/gi)?(i=" ".x(this.matchData[0].length),n=/\s*[#>;\s]*\s*/g):this.cmd("looking_at",/\s*[#>;\s]+\s*/g)&&(i=this.matchData[0],n=/\s*[#>;\s]*\s*/g),e&&(this._deleteText(this.point(),this.point()+this.matchData[0].length),i="");;){if(this.cmd("end_of_line"),this.cmd("backward_delete_whitespace"),this.point()>=t.getPosition())break;this._replaceText(this.point(),this.point()+1," "),n&&this.cmd("looking_at",n)&&this._deleteText(this.point(),this.point()+this.matchData[0].length)}this.cmd("beginning_of_line");for(var r=5e3;this.point()<t.getPosition()&&0!=--r;){var s=this.point();if(!this.cmd("search_forward_regexp",/\s/g))break;if(this.point()>t.getPosition())break;this._rowcol.col>this.getq("fill_column")&&(this.cmd("goto_char",s),this.cmd("backward_delete_whitespace"),this.cmd("newline"),this.cmd("insert",i))}t.destroy(),this.cmd("recenter_top_bottom")})}),fill_paragraph_no_prefix:Ymacs_Interactive(function(){return this.cmd("fill_paragraph",!0)}),start_next_paragraph:Ymacs_Interactive(function(){this.cmd("backward_paragraph"),this.point()>0&&this.cmd("forward_char");var e="";this.cmd("looking_at",/(\s*)([0-9]+)(\.\s+)/g)?e=this.matchData[1]+(parseInt(this.matchData[2],10)+1)+this.matchData[3]:this.cmd("looking_at",/(\s*\(?)([a-z])([\.\)]\s+)/gi)?e=this.matchData[1]+String.fromCharCode(this.matchData[2].charCodeAt(0)+1)+this.matchData[3]:this.cmd("looking_at",/\s*[#>;*\s-]+\s*/g)&&(e=this.matchData[0]),this.cmd("forward_paragraph"),this.cmd("eob_p")&&this.cmd("newline"),this.cmd("insert","\n",e),this.cmd("looking_at",/\n\n/g)||(this.cmd("newline"),this.cmd("backward_char"))}),scroll_down_half:Ymacs_Interactive_X(function(){this.whenActiveFrame(function(e){var t=e.heightInLines();this.cmd("forward_line",Math.round(t/1.33)),this.cmd("recenter_top_bottom")})}),scroll_up_half:Ymacs_Interactive_X(function(){this.whenActiveFrame(function(e){var t=e.heightInLines();this.cmd("backward_line",Math.round(t/1.33)),this.cmd("recenter_top_bottom")})}),scroll_up:Ymacs_Interactive("p",function(e){null==e&&(e=3),this.whenActiveFrame(function(t){t.scrollUp(e)})}),scroll_down:Ymacs_Interactive("p",function(e){null==e&&(e=3),this.whenActiveFrame(function(t){t.scrollDown(e)})}),nuke_trailing_whitespace:Ymacs_Interactive(function(){this.cmd("save_excursion",function(){for(this.cmd("goto_char",0);this._rowcol.row<this.code.length;){var e=this.code[this._rowcol.row],t=/\s+$/.exec(e);if(t&&(this.cmd("beginning_of_line"),this._deleteText(this.point()+t.index,this.point()+e.length)),!this.cmd("forward_line"))break}})}),match_string:function(e){return this.matchData[e]},match_beginning:function(){return this.matchData.index},match_end:function(){return this.matchData.index+this.matchData[0].length},undo:Ymacs_Interactive_X(function(){this._placeUndoBoundary(),this._playbackUndo()||this.signalError("No further undo information")}),center_line:Ymacs_Interactive("p",function(e){null==e&&(e=1),e.times(function(e){e>0&&this.cmd("forward_line"),this.cmd("save_excursion",function(){this.cmd("end_of_line"),this.cmd("backward_delete_whitespace",!0),this.cmd("beginning_of_line"),this.cmd("delete_whitespace",!0);var e=this.code[this._rowcol.row],t=Math.floor((this.getq("fill_column")-e.length)/2);this.cmd("insert"," ".x(t))})},this)}),dabbrev_expand:Ymacs_Interactive_X(function(){"dabbrev_expand"!=this.previousCommand&&this.setq("dabbrev_context",null);var e=this.getq("dabbrev_context");if(!e){e=this.setq("dabbrev_context",{});var t=this.cmd("save_excursion",function(){return this.cmd("bind_variables",{syntax_word:this.getq("syntax_word_dabbrev")},"backward_word"),this.point()});if(t==this.point())return this.signalError("Nothing to expand");e.search=this.cmd("buffer_substring",t,this.point()),e.point=t,e.length=this.point()-t,e.lastSearch=t,
e.encountered={},e.forward=!1,e.buffer=this,e.startBuffer=this}var i;e.buffer.cmd("save_excursion",function n(){var t,r=this.getq("syntax_word_dabbrev"),s=!1;if(this.cmd("goto_char",e.lastSearch),e.forward){for(;this.cmd("search_forward",e.search);)if(!r.test(this.charAt(-e.search.length-1))){s=!0;break}if(!s)return e.buffer=this.whenYmacs("getNextBuffer",this),e.buffer===e.startBuffer?(i=e.search,e.startBuffer.signalError("No more completions"),e.lastSearch=e.point+e.length,void e.startBuffer.setq("dabbrev_context",null)):(e.lastSearch=0,void e.buffer.cmd("save_excursion",n));e.lastSearch=this.point(),t=this.point()-e.search.length}else{for(;this.cmd("search_backward",e.search);)if(!r.test(this.charAt(-1))){s=!0;break}if(!s)return e.forward=!0,e.lastSearch=e.point+e.length,void n.call(this);t=this.point(),e.lastSearch=t,this.cmd("goto_char",t+e.search.length)}null!=t&&(this.cmd("bind_variables",{syntax_word:this.getq("syntax_word_dabbrev")},"forward_word"),i=this.cmd("buffer_substring",t,this.point()),Object.HOP(e.encountered,i)&&n.call(this))}),null!=i&&(this._replaceText(e.point,e.point+e.length,i),e.length=i.length,e.encountered[i]=!0)}),split_frame_vertically:Ymacs_Interactive("p",function(e){null==e?e="50%":e+="%",this.whenActiveFrame("vsplit",e)}),split_frame_horizontally:Ymacs_Interactive("p",function(e){null==e?e="50%":e+="%",this.whenActiveFrame("hsplit",e)}),delete_other_frames:Ymacs_Interactive(function(){this.whenActiveFrame("deleteOtherFrames")}),delete_frame:Ymacs_Interactive(function(){this.whenActiveFrame("deleteFrame")}),other_frame:Ymacs_Interactive(function(){this.whenYmacs("focusOtherFrame")}),windmove:function(e){this.whenYmacs(function(t){var i=t.getFrameInDirection(e);i&&i.focus()})},next_buffer:Ymacs_Interactive(function(){this.whenYmacs("switchToNextBuffer",this.sameCommandCount()+1)}),previous_buffer:Ymacs_Interactive(function(){this.whenYmacs("switchToPreviousBuffer",this.sameCommandCount()+1)}),switch_to_buffer:Ymacs_Interactive("BSwitch to buffer: ",function(e){this.whenYmacs(function(t){if(!/\S/.test(e)){if(t.buffers.length<2)return;e=t.buffers[1]}t.switchToBuffer(e)})}),kill_buffer:Ymacs_Interactive(function(){function e(){t.whenYmacs(function(e){e.killBuffer(t)})}var t=this;if(t.dirty()){var i="Buffer "+t.name+" modified; kill anyway?";t.cmd("minibuffer_yn",i,function(t){t&&e()})}else e()}),rename_buffer:Ymacs_Interactive("sRename current buffer to: ",function(e){this.whenYmacs(function(t){t.renameBuffer(this,e)})}),delete_region_or_line:Ymacs_Interactive("^",function(){if(!this.deleteTransientRegion()){this.cmd("beginning_of_line");var e=this.point();if(this.cmd("forward_line")||this.cmd("end_of_line"))return this._deleteText(e,this.point()),!0}}),close_last_xml_tag:Ymacs_Interactive_X(function(){var e;if(this.cmd("save_excursion",function(){for(var t=1;0!=t&&this.cmd("search_backward_regexp",/<\x2f?([a-zA-Z0-9:_-]+)/g);)e=this.cmd("match_string",1),this.cmd("looking_at",/<\x2f/g)?++t:this.cmd("looking_at",/<[^\x2f][^>]*?\x2f>/g)||--t;0!=t&&(e=null)}),!e)throw new Ymacs_Exception("Couldn't find a tag to close");this.cmd("insert","</",e,">")}),bind_variables:function(){return this.withVariables.apply(this,arguments)},for_region:Ymacs_Interactive("^r\nCExecute command within region: ",function(e,t,i){if(e>t){var n=e;e=t,t=n}i instanceof Function||(i=this.COMMANDS[i]),this.clearTransientMark(),this.cmd("goto_char",e),e=this.createMarker(e,!0),t=this.createMarker(t),this.withCommands({goto_char:function(i){if(i>=e.getPosition()&&i<=t.getPosition())return this._repositionCaret(i);throw"YMACS_RESTRICT"}},function(){try{for(;;){var n=this.point();if(i.call(this),this.point()==n&&!this.cmd("forward_line"))break}}catch(r){if("YMACS_RESTRICT"!==r)throw r}finally{e.destroy(),t.destroy()}})}),get_line_comment_syntax:function(){var e=this.getq("syntax_comment_line");if(!e)throw new Ymacs_Exception("Unknown comment syntax");return e},comment_region:Ymacs_Interactive("^r",function(e,t){var i=this.cmd("get_line_comment_syntax");this.clearTransientMark(),this.cmd("save_excursion",function(){t=this.createMarker(t),this.cmd("goto_char",e);var n=1e5;e:for(;this.point()<t.getPosition();){for(;this.cmd("looking_at",/\s*$/gm);)if(!this.cmd("forward_line"))break e;for(var r=this._rowcol.col;this.cmd("looking_at",/\s/g)&&n>r;){if(!this.cmd("forward_char"))break e;++r}if(n>r&&(n=r),this.cmd("insert",i.ch," "),this.cmd("beginning_of_line"),!this.cmd("forward_line"))break e}this.cmd("goto_char",t),this._rowcol.col>0&&!this.cmd("looking_at",/\s*$/gm)&&this.cmd("newline_and_indent")})}),uncomment_region:Ymacs_Interactive("r",function(e,t){var i=this.cmd("get_line_comment_syntax");this.clearTransientMark(),this.cmd("save_excursion",function(){for(t=this.createMarker(t),this.cmd("goto_char",e);this.point()<t.getPosition()&&(this.cmd("forward_whitespace"),this.cmd("looking_at",i.rx)&&this.cmd("delete_char",this.matchData[0].length),this.cmd("forward_line")););})}),comment_dwim:Ymacs_Interactive("^r",function(e,t){var i=this.cmd("get_line_comment_syntax");this.transientMarker?this.cmd("save_excursion",function(){this.cmd("goto_char",e);var n=this.cmd("looking_at",i.rx);n?this.cmd("uncomment_region",e,t):this.cmd("comment_region",e,t)}):(this.cmd("end_of_line"),this.cmd("insert"," ",i.ch," "),this.cmd("indent_line"))})}),function(){function e(e,t,i,n){e.cmd("save_excursion",function(){for(var e=this._positionToRowCol(t),r=this._positionToRowCol(i),s=Math.abs(r.col-e.col),o=e.row;o<=r.row;++o){this.cmd("goto_char",this._rowColToPosition(o,0));var a=this.code[o],c=e.col,l=r.col,h=this.point(),f=0;if(c>l){var u=c;c=l,l=u}c>a.length&&(f=c-a.length,c=a.length),l>a.length&&(l=a.length),n.call(this,h+c,h+l,f,s)}},t==e.point())}Ymacs_Buffer.newCommands({string_rectangle:Ymacs_Interactive("r\nsString rectangle: ",function(t,i,n){e(this,t,i,function(e,t,i){i>0?this._insertText(" ".x(i),e):this._deleteText(e,t),this._insertText(n,e+i)})}),kill_rectangle:Ymacs_Interactive("r",function(t,i){var n=[];e(this,t,i,function(e,t,i,r){var s=this._bufferSubstring(e,t);r>t-e&&(s+=" ".x(r-t+e)),n.push(s),this._deleteText(e,t)}),this.setq("killed_rectangle",n)}),clear_rectangle:Ymacs_Interactive("r",function(e,t){this.cmd("string_rectangle",e,t," ".x(Math.abs(this._positionToRowCol(t).col-this._positionToRowCol(e).col)))}),insert_rectangle:function(e,t){var i=this._positionToRowCol(e).col;this.cmd("set_mark_command",e),t.foreach(function(e,t){t>0&&(this.cmd("forward_line")||(this.cmd("end_of_line"),this.cmd("newline")),this.cmd("move_to_column",i,!0)),this.cmd("insert",e)},this)},yank_rectangle:Ymacs_Interactive("d",function(e){var t=this.getq("killed_rectangle");if(null==t)throw new Ymacs_Exception("No killed rectangle");this.cmd("insert_rectangle",e,t)})})}(),function(){Ymacs_Buffer.newCommands({kmacro_start_macro:Ymacs_Interactive("p",function(e){if(!this.ymacs.isRunningMacro()){if(this.ymacs.isRecordingMacro())return void this.signalError("Already defining keyboard macro.");this.signalInfo("Defining keyboard macro"),this.ymacs.startMacro(null!==e)}}),kmacro_end_macro:Ymacs_Interactive(function(){if(!this.ymacs.isRunningMacro()){if(!this.ymacs.isRecordingMacro())return void this.signalInfo("Not defining kbd macro");this.signalInfo("Keyboard macro defined"),this.ymacs.stopMacro()}}),kmacro_end_and_call_macro:Ymacs_Interactive("p",function(e){this.ymacs.stopMacro(),null===e&&(e=1);var t=this.ymacs.getLastMacro();this.interactiveEvent(null),this.ymacs.runMacro(e,t)})})}(),function(){function e(e,t,i,n,r){var s=e.createDialog({title:i,quitBtn:"destroy",modal:!0}),o=new DlLayout({parent:s,outerSpace:5}),a=new DlEntry({type:"textarea",fillParent:!0,value:n});s._focusedWidget=a,"copy"==t?a.addEventListener("onCopy",function(e){s.destroy(),r()}.clearingTimeout(0)):"paste"==t&&a.addEventListener("onPaste",function(e){var t=a.getValue();s.destroy(),r(t)}.clearingTimeout(0)),o.packWidget(a,{pos:"top",fill:"*"}),o.setSize({x:350,y:250}),s.show(!0),a.select()}Ymacs_Buffer.newCommands({yank_from_operating_system:Ymacs_Interactive(function(){var t=this;e(t,"paste","Paste below (press CTRL-V)",null,function(e){t._saveKilledText(e),t.cmd("yank"),t.cmd("recenter_top_bottom")})}),copy_for_operating_system:Ymacs_Interactive("r",function(t,i){var n=this;e(n,"copy","Press CTRL-C to copy",n.cmd("buffer_substring"),function(){n.cmd("copy_region_as_kill",t,i)})})})}(),["forward_char","forward_word","forward_line","forward_paragraph","forward_sexp","beginning_of_line","beginning_of_indentation_or_line","beginning_of_buffer","backward_char","backward_word","backward_line","backward_paragraph","backward_sexp","end_of_line","end_of_buffer"].foreach(function(e){Ymacs_Buffer.COMMANDS[e+"_mark"]=Ymacs_Interactive("^",function(){this.ensureTransientMark(),this.cmdApply(e,arguments),this.ensureTransientMark()})}),Ymacs_Buffer.newCommands({get_region:function(){return this.getRegion()},figure_out_mode:function(e){e||(e=this.getCode());var t=e.split(/\n/);return t.length>4&&t.splice(2,t.length-4),t.foreach(function(e,t){(t=/-\*-\s*(.*?)\s*-\*-/i.exec(e))&&$RETURN(t[1])})},mode_from_name:function(e){e||(e=this.name);var t=(/\.[^.]+$/.exec(e)||[""])[0];switch(t){case".css":return"css";case".js":return"javascript";case".lisp":case".scm":return"lisp"}return null},set_buffer_mode:function(e){e||(e=this.cmd("figure_out_mode")||this.cmd("mode_from_name")),e&&(Object.HOP(this.COMMANDS,e)?this.cmd(e,!0):Object.HOP(this.COMMANDS,e+"_mode")&&this.cmd(e+"_mode",!0))},cperl_lineup:Ymacs_Interactive("r",function(e,t){this.cmd("save_excursion",function(){var i=this._positionToRowCol(t),n=0,r=[];this.cmd("goto_char",e),this.cmd("forward_whitespace",!0);var s=this.charAt();if(s.toLowerCase()!=s.toUpperCase())return void this.signalError("Cannot lineup here");for(;this._rowcol.row<=i.row;){var o=this.getLine().indexOf(s);if(o>=0&&(o>n&&(n=o),r.push([this._rowcol.row,o])),!this.cmd("forward_line"))break}++n,r.foreach(function(e){this.cmd("goto_char",this._rowColToPosition(e[0],e[1])),this.cmd("insert"," ".x(n-e[1]))},this)})}),htmlize_region:Ymacs_Interactive("r\nP",function(e,t,i){this.tokenizer.finishParsing();var n,r=this._positionToRowCol(e).row,s=String.buffer(),o=r;for(i&&!i.empty&&(o=parseInt(i,10)),t=this._positionToRowCol(t).row,n=String(t).length;t>=r;)s("<div class='line'>"),i&&s("<span class='line-number'>",o.zeroPad(n," "),"</span>"),++o,s(this._textProperties.getLineHTML(r,this.code[r],null),"</div>\n"),++r;s=s.get();var a=this.ymacs.switchToBuffer("*Htmlize*");a.setCode(s),a.cmd("xml_mode",!0)}),execute_extended_command:Ymacs_Interactive("^CM-x ",function(e){this.callInteractively(e)}),set_variable:Ymacs_Interactive("vSet variable: \nsTo value: ",function(e,t){var i=parseFloat(t);isNaN(i)||(t=i),this.setq(e,t)}),eval_string:Ymacs_Interactive("^MEval string: ",function(e){try{var t=[this,this.ymacs];e=new Function("buffer","ymacs",e),e.apply(this,t),this.clearTransientMark()}catch(i){this.signalError(i.type+": "+i.message),window.console&&console.log(i)}}),eval_region:Ymacs_Interactive("^r",function(e,t){this.cmd("eval_string",this.cmd("buffer_substring",e,t))}),eval_buffer:Ymacs_Interactive(function(){this.cmd("eval_string",this.getCode())}),toggle_line_numbers:Ymacs_Interactive("^",function(){this.whenActiveFrame("toggleLineNumbers")}),save_file:Ymacs_Interactive("FWrite file: ",function(e){this.ymacs.ls_setFileContents(e,this.getCode()),this.signalInfo("Saved in local storage")}),load_file:Ymacs_Interactive("fFind file: ",function(e){var t=this.ymacs.ls_getFileContents(e),i=this.ymacs.createBuffer({name:e});i.setCode(t),i.cmd("set_buffer_mode"),i.cmd("switch_to_buffer",e)}),find_file:Ymacs_Interactive("FFind file: ",function(e){var t=this;e=t.ymacs.fs_normalizePath(e),t.ymacs.fs_fileType(e,function(i){"directory"===i?t.signalInfo("Can't open directory"):t.ymacs.fs_getFileContents(e,!0,function(i,n){function r(){s.setCode(i||""),s.stamp=n,s.dirty(!1),s.cmd("set_buffer_mode"),s.cmd("switch_to_buffer",e)}var s=t.ymacs.getBuffer(e);if(s)if(null==n)r();else if(s.stamp==n)s.cmd("switch_to_buffer",e);else{var o="File "+e+" changed on disk.  "+(s.dirty()?"Discard your edits?":"Reread from disk?");s.cmd("minibuffer_yn",o,function(e){e&&r()})}else s=t.ymacs.createBuffer({name:e,stamp:n}),null==i&&t.signalInfo("New file"),r()})})}),write_file:Ymacs_Interactive("FWrite file: ",function(e){function t(){i.ymacs.fs_setFileContents(e,i.getCode(),null,function(t){i.cmd("rename_buffer",e),i.dirty(!1),i.stamp=t,i.signalInfo("Wrote "+e)})}var i=this,n=i.ymacs.getBuffer(e);if(n){var r="A buffer is visiting "+e+"; proceed?";n.cmd("minibuffer_yn",r,function(e){e&&(i.ymacs.killBuffer(n),t())})}else t()}),save_some_buffers:function(){this.cmd("save_some_buffers_with_continuation",!0,function(){})},save_some_buffers_with_continuation:function(e,t){function i(r){n.length>0?n.shift().cmd("save_buffer_with_continuation",e,i):t()}var n=this.ymacs.buffers.slice();i(!1)},save_buffer_with_continuation:function(e,t){function i(e){r.dirty(!1),r.stamp=e,t(!0)}function n(){r.ymacs.fs_setFileContents(r.name,r.getCode(),r.stamp,function(e){null!=e?i(e):r.cmd("minibuffer_yn",r.name+" has changed since visited or saved.  Save anyway?",function(e){e?r.ymacs.fs_setFileContents(r.name,r.getCode(),null,function(e){i(e)}):t(!1)})})}var r=this;!r.dirty()||e&&r.name.match(/^\*.*\*$/)?t(!1):e?r.cmd("minibuffer_yn","Save file "+r.name+"?",function(e){e?n():t(!1)}):n()},save_buffer:Ymacs_Interactive("",function(){var e=this;e.dirty()?e.cmd("save_buffer_with_continuation",!1,function(t){t&&e.signalInfo("Wrote "+e.name)}):e.signalInfo("No changes need to be saved")}),delete_file:Ymacs_Interactive("fDelete file: ",function(e){var t=this;t.ymacs.fs_deleteFile(e,function(){t.signalInfo("Deleted "+e)})}),eval_file:Ymacs_Interactive("fEval file: ",function(e){var t=this;t.ymacs.fs_getFileContents(e,!1,function(e,i){t.cmd("eval_string",e)})})}),DEFINE_CLASS("Ymacs_Keymap",null,function(e,t){var i={};Object.foreach(DlKeyboard,function(e,t){"number"==typeof e&&(i[e]=t)}),e.CONSTRUCT=function(){this.definitions=Object.makeCopy(this.__originalDefs)},t.FINISH_OBJECT_DEF=function(){this.__originalDefs?this.__originalDefs=Object.makeCopy(this.__originalDefs):this.__originalDefs={};var e=this.constructor.KEYS;e&&this.defineKeys(e)},t.parseKey=function(e){var t={},i=e.split(/-/);i.reverse(),i.foreach(function(e,n){if(0==n)"WHEEL_UP"==e||"WHEEL_DOWN"==e?t.charCode=e:"number"==typeof DlKeyboard[e]?t.keyCode=DlKeyboard[e]:(i[n]=e.toLowerCase(),t.charCode=i[n].charCodeAt(0));else switch(e){case"C":t.ctrlKey=!0;break;case"M":t.metaKey=!0;break;case"S":t.shiftKey=!0}}),i.reverse();var n=i.pop();return t.str=i.sort().join("-"),t.str&&(t.str+="-"),t.str+=n,t},e.unparseKey=function(e){var t,n=[];return"wheelDelta"in e?t=e.wheelDelta>0?"WHEEL_UP":"WHEEL_DOWN":e.keyCode in i?t=i[e.keyCode]:e.charCode&&(t=32==e.charCode?"SPACE":45==e.charCode?"DASH":String.fromCharCode(e.charCode).toLowerCase()),e.ctrlKey&&n.push("C"),e.altKey&&n.push("M"),e.shiftKey&&(e.charCode&&/^[a-zA-Z0-9]$/.test(t)||e.keyCode)&&n.push("S"),n.sort(),n=n.join("-"),n&&(n+="-"),n+t},t.defineKey=function(e,t,i){if(t instanceof Array&&(i=t.slice(1),t=t[0]),e=e.trim().split(/\s*&&\s*/),e.length>1)e.foreach(function(e){this.defineKey(e,t,i)},this);else{e=e[0].trim();var n=this.definitions||this.__originalDefs;if(e.indexOf(" ")>=0){var r=e.split(/\s+/);e=r.pop(),r.foreach(function(e){e=this.parseKey(e).str,n[e]||(n[e]={}),n=n[e]},this)}e=this.parseKey(e),n[e.str]=[t,i]}},t.defineKeys=function(e){Object.foreach(e,function(e,t){this.defineKey(t,e)},this)},t.getHandler=function(e){var t=null,i=this.definitions;return e.foreach(function(e){var n=t?t[e]:i[e];n?(t=n,t instanceof Array&&$BREAK()):(t=null,$BREAK())}),t},t.attached=Function.noop,t.detached=Function.noop}),DEFINE_SINGLETON("Ymacs_Keymap_Emacs",Ymacs_Keymap,function(e,t){var i=String.template("<table>","<tr><td style='text-align: right; font-weight: bold'>Char:</td><td><tt> $ch </tt></td></tr>","<tr><td style='text-align: right; font-weight: bold'>Char code:</td><td> $code / 0x$codeHex </td></tr>","<tr><td style='text-align: right; font-weight: bold'>Position:</td><td> $point </td></tr>","<tr><td style='text-align: right; font-weight: bold'>Mark:</td><td> $mark </td></tr>","<tr><td style='text-align: right; font-weight: bold'>Buffer size:</td><td> $sizeKB </td></tr>","</table>");e.KEYS={"ARROW_UP     && C-p":"backward_line","ARROW_DOWN   && C-n":"forward_line","ARROW_LEFT   && C-b":"backward_char","ARROW_RIGHT  && C-f":"forward_char",HOME:"beginning_of_indentation_or_line","END && C-e":"end_of_line","C-a":"beginning_of_line","C-HOME && M-<":"beginning_of_buffer","C-END && M->":"end_of_buffer","C-ARROW_RIGHT && M-f":"forward_word","C-ARROW_LEFT && M-b":"backward_word","C-ARROW_DOWN":"forward_paragraph","C-ARROW_UP":"backward_paragraph","C-l":"recenter_top_bottom","PAGE_UP && M-v":"scroll_up_half","PAGE_DOWN && C-v":"scroll_down_half",WHEEL_UP:"scroll_up",WHEEL_DOWN:"scroll_down","S-ARROW_UP       && S-C-p":"backward_line_mark","S-ARROW_DOWN     && S-C-n":"forward_line_mark","S-ARROW_LEFT     && S-C-b":"backward_char_mark","S-ARROW_RIGHT    && S-C-f":"forward_char_mark","S-C-ARROW_RIGHT  && S-M-f":"forward_word_mark","S-C-ARROW_LEFT   && S-M-b":"backward_word_mark","S-C-ARROW_DOWN":"forward_paragraph_mark","S-C-ARROW_UP":"backward_paragraph_mark","S-HOME":"beginning_of_indentation_or_line_mark","S-C-a":"beginning_of_line_mark","S-END && S-C-e":"end_of_line_mark","S-C-HOME":"beginning_of_buffer_mark","S-C-END":"end_of_buffer_mark",BACKSPACE:"backward_delete_char","DELETE && C-d":"delete_char","ENTER && C-m":"newline","M-d && C-DELETE":"kill_word","C-BACKSPACE && M-BACKSPACE && M-DELETE":"backward_kill_word","C-k":"kill_line","C-y && S-INSERT":"yank","M-y":"yank_pop","C-SPACE":"set_mark_command","C-x C-x":"exchange_point_and_mark","C-w":"kill_region","M-t":"transpose_words","C-t":"transpose_chars","C-x C-t":"transpose_lines","M-w":"copy_region_as_kill","M-c":"capitalize_word","M-u":"upcase_word","M-l":"downcase_word",F11:"nuke_trailing_whitespace",TAB:"indent_line","C-M-\\":"indent_region","M-q":"fill_paragraph","C-/ && C-x u && C-_ && C-z":"undo",INSERT:"overwrite_mode","M-s":"center_line","M-/":"dabbrev_expand","C-s":"isearch_forward","C-r":"isearch_backward","M-C-s":"isearch_forward_regexp","M-C-r":"isearch_backward_regexp","C-u":"universal_argument","M-g":"goto_line","C-x h":"mark_whole_buffer","C-g":"keyboard_quit","M-^":"delete_indentation","M-;":"comment_dwim","C-x r t":"string_rectangle","C-x r c":"clear_rectangle","C-x r k":"kill_rectangle","C-x r y":"yank_rectangle","C-x C-ARROW_RIGHT && C-x ARROW_RIGHT && C-TAB":"next_buffer","C-x C-ARROW_LEFT && C-x ARROW_LEFT && C-S-TAB":"previous_buffer","C-x b":"switch_to_buffer","C-x k":"kill_buffer","C-x 0":"delete_frame","C-x 1":"delete_other_frames","C-x 2":"split_frame_vertically","C-x 3":"split_frame_horizontally","C-x o":"other_frame","C-x l":"toggle_line_numbers","M-x":"execute_extended_command","C-S-y":"yank_from_operating_system","M-S-w":"copy_for_operating_system","M-S-y":"yank_shift","C-c /":"close_last_xml_tag","S-BACKSPACE":"backward_delete_whitespace","S-DELETE":"delete_whitespace","C-M-d":"delete_region_or_line","M-ENTER":"start_next_paragraph","M-S-q":"fill_paragraph_no_prefix","C-M-|":"cperl_lineup","C-F4":"kill_buffer","M-ARROW_LEFT":["windmove","left"],"M-ARROW_RIGHT":["windmove","right"],"M-ARROW_UP":["windmove","up"],"M-ARROW_DOWN":["windmove","down"],"C-x e":"kmacro_end_and_call_macro","C-x (":"kmacro_start_macro","C-x )":"kmacro_end_macro","C-x C-f":"find_file","C-x C-w":"write_file","C-x C-s":"save_buffer","C-x s":"save_some_buffers","C-x =":function(){var e=this.charAt(),t=e;" "==e?t="<SPACE>":"\n"==e?t="<NEWLINE>":"-"==e&&(t="<DASH>"),this.signalInfo(i({ch:t.htmlEscape(),code:e.charCodeAt(0),codeHex:e.charCodeAt().hex(),point:this.point(),mark:this.markMarker.getPosition(),size:this.getCodeSize(),sizeKB:this.getCodeSize().formatBytes(2)}),!0)}},t.defaultHandler=["self_insert_command"]}),DEFINE_SINGLETON("Ymacs_Keymap_UniversalArgument",Ymacs_Keymap,function(e,t){t.defaultHandler=[Ymacs_Interactive("^",function(){var e=this.interactiveEvent(),t=String.fromCharCode(e.charCode),i=this.getPrefixArg(!0);return e.charCode&&(/^[0-9]$/.test(t)||"-"===t&&""===i)&&!e.altKey&&!e.ctrlKey?(i+=t,this.setPrefixArg(i),this.isMinibuffer||this.whenMinibuffer(function(e){e.cmd("insert"," ",t)}),!0):(this.popKeymap(Ymacs_Keymap_UniversalArgument()),!1)})],t.attached=function(e){e.setPrefixArg("")}}),DEFINE_SINGLETON("Ymacs_Keymap_ISearch",Ymacs_Keymap,function(e,t){function i(e){return this._isearchContext?void 0:(this.pushKeymap(Ymacs_Keymap_ISearch()),this.cmd("set_mark_command",this.point()),this.setMinibuffer(e?"I-Search: ":"I-Search backward: "),this._isearchContext={forward:e,point:this.point(),mbMark:this.getMinibuffer().createMarker(null,!0)},!0)}function n(e){this._isearchContext.forward=e,this._isearchContext.point=this.point();var t=s(this);return!/\S/.test(t)&&this.getq("isearch_last_text")&&(this.getMinibuffer()._placeUndoBoundary(),this.getMinibuffer().cmd("insert",this.getq("isearch_last_text")),t=this.getq("isearch_last_text")),r.call(this,t)}function r(e){null==e&&(e=s(this));var t=this.cmd("bind_variables",{case_fold_search:e==e.toLowerCase()},this.cmd,this._isearchContext.forward?"search_forward":"search_backward",e);if(t){this.cmd("ensure_caret_visible");var i=this._positionToRowCol(this.point()+(this._isearchContext.forward?-1:1)*e.length);this.setOverlay("isearch",{line1:i.row,line2:this._rowcol.row,col1:i.col,col2:this._rowcol.col})}return t}function s(e){return e.cmd("isearch_get_search_text")}e.KEYS={"C-g && ESCAPE":["isearch_abort",!0],"C-w":"isearch_yank_word_or_char","C-s":"isearch_forward","C-r":"isearch_backward",BACKSPACE:function(){this.getMinibuffer().point()>this._isearchContext.mbMark.getPosition()&&(this.getMinibuffer().cmd("backward_delete_char"),this.cmd("goto_char",this._isearchContext.point),n.call(this,this._isearchContext.forward))},ENTER:"isearch_abort"},e.CONSTRUCT=function(){this.defaultHandler=["isearch_printing_char"]},Ymacs_Buffer.newCommands({isearch_get_search_text:Ymacs_Interactive(function(){return this._isearchContext?this.getMinibuffer()._bufferSubstring(this._isearchContext.mbMark):void 0}),isearch_forward:Ymacs_Interactive(function(){i.call(this,!0)||n.call(this,!0)||this.signalError("No more forward occurrences of the search text")}),isearch_forward_regexp:Ymacs_Interactive(function(){this.signalError("Not implemented, but should be easy.  Volunteers?")}),isearch_backward_regexp:Ymacs_Interactive(function(){this.signalError("Not implemented, but should be easy.  Volunteers?")}),isearch_backward:Ymacs_Interactive(function(){i.call(this,!1)||n.call(this,!1)||this.signalError("No more backward occurrences of the search text")}),isearch_yank_word_or_char:Ymacs_Interactive(function(){var e=this.point(),t=this.cmd("save_excursion",function(){return this.cmd("forward_word"),this.point()});if(t!=e){var i=this._bufferSubstring(e,t);this.getMinibuffer()._placeUndoBoundary(),this.getMinibuffer().cmd("insert",i.toLowerCase()),i=s(this),this._isearchContext.forward&&this.cmd("goto_char",t-i.length),r.call(this,i)}}),isearch_printing_char:Ymacs_Interactive(function(){var e=this.interactiveEvent();return!e.charCode||e.ctrlKey||e.altKey?0!=e.keyCode||e.ctrlKey||e.altKey?(this.cmd("isearch_abort"),!1):void 0:(this.getMinibuffer().cmd("self_insert_command"),this.cmd("goto_char",this._isearchContext.point),r.call(this,s(this)),e.domStop=!0)}),isearch_abort:Ymacs_Interactive(function(e){return e||this.setGlobal("isearch_last_text",s(this)),this.setMinibuffer(""),this.popKeymap(Ymacs_Keymap_ISearch()),this._isearchContext.mbMark.destroy(),this._isearchContext=null,e&&this.cmd("exchange_point_and_mark"),this.deleteOverlay("isearch"),this.deleteOverlay("isearch-lazy"),!0})})}),Ymacs_Buffer.newMode("minibuffer_mode",function(){var e=this.createMarker(0,!0),t=this.setq({minibuffer_end_marker:e}),i=Ymacs_Keymap_Minibuffer();return this.pushKeymap(i),function(){this.setq(t),e.destroy(),this.popKeymap(i)}}),function(){function e(e,t){var i=this;u&&u.destroy(),u=new DlVMenu({}),t.foreach(function(e,t){var i=e;"string"!=typeof e&&(i=e.completion,e=e.label),new DlMenuItem({parent:u,label:e.htmlEscape(),data:i,name:t}).addEventListener("onMouseEnter",function(){_!=t&&(null!=_&&u.children(_).callHooks("onMouseLeave"),_=t)})}),u.addEventListener({onSelect:function(e,t){_=e,o.call(i)}});var n=Ymacs_Completion_Popup.get();n.popup({timeout:0,content:u,align:{prefer:"Tr",fallX1:"_r",fallX2:"_L",fallY1:"B_",fallY2:"T_"},anchor:e.getCaretElement(),widget:e,onHide:function(){f=!1,i.popKeymap(m),_=null,u=null},isContext:!0}),f=!0,i.pushKeymap(m),r.call(i)}function t(e,t,i){this.whenMinibuffer(function(n){var r=n.setq({completion_list:e,minibuffer_validation:function(e,t){null==e&&(e=n.cmd("minibuffer_contents")),i?i.call(this,n,e,t):t(!0)}.$(this),minibuffer_continuation:function(e){n.setq(r),t&&t.call(this,e)}.$(this)})})}function i(t,i,n,r){var s=this,o=i.lastIndexOf("/"),a=i.slice(0,o+1),c=i.slice(o+1);s.ymacs.fs_getDirectory(a,function(n){function o(e){return"directory"==n[e].type?e+"/":e}if(n){var l=[];for(var h in n)0==h.indexOf(c)&&l.push(o(h));if(0==l.length)r([]);else{var f=l.common_prefix();f!=c?(t.cmd("minibuffer_replace_input",a+f),r(null)):1==l.length?r([i]):(l=l.map(function(e){return{label:e,completion:a+e}}),e.call(t,s.getMinibufferFrame(),l),r(null))}}else t.signalError("Not found"),r(null)})}function n(e){var t,i=_;switch(e){case"next":null==_&&(_=-1),_=u.children().rotateIndex(++_);break;case"prev":null==_&&(_=0),_=u.children().rotateIndex(--_)}null!=i&&(t=u.children(i),t.callHooks("onMouseLeave")),i=_,t=u.children(_),t.callHooks("onMouseEnter")}function r(){return f?n.call(this,"next"):void 0}function s(){return f?n.call(this,"prev"):void 0}function o(){f?null!=_?(this.cmd("minibuffer_replace_input",u.children()[_].userData),DlPopup.clearAllPopups()):this.signalError("Select something..."):this.cmd("minibuffer_complete_and_exit")}function a(){f?r.call(this):this.cmd("minibuffer_complete")}function c(){s.call(this)}function l(){this.cmd("goto_char",this.getq("minibuffer_end_marker"))}function h(){this.ensureTransientMark(),this.cmd("goto_char",this.getq("minibuffer_end_marker")),this.ensureTransientMark()}var f=!1,u=null,_=null;Ymacs_Buffer.newCommands({minibuffer_prompt:function(e,t){this.whenMinibuffer(function(i){var n=this.getMinibufferFrame();this.ymacs.setInputFrame(n),i.setCode(""),i.cmd("prevent_undo",function(){i.cmd("insert",e)}),i.getq("minibuffer_end_marker").setPosition(i.point()),i._textProperties.addLineProps(0,0,i.point(),"css","minibuffer-prompt"),n._redrawCaret(!0),t||n.focus()})},minibuffer_yn:function(e,t){this.cmd("minibuffer_prompt",e+" (yes or no) "),this.cmd("minibuffer_read_yn",function(e){t("yes"==e)})},minibuffer_read_yn:function(e){t.call(this,["yes","no"],e,function(e,t,i){"yes"==t||"no"==t?i(!0):e.signalError("Please enter yes or no")})},minibuffer_read_number:function(e){t.call(this,null,e,function(e,t,i){var n=parseInt(t,10);isNaN(n)&&e.signalError("Please enter a number"),i(!isNaN(n))})},minibuffer_read_command:function(e){var i=Array.hashKeys(this.COMMANDS).grep(function(e){return this.COMMANDS[e].ymacsInteractive},this).sort();t.call(this,i,e,function(e,t,i){var n=this.COMMANDS[t],r=n&&n.ymacsInteractive;r||e.signalError("No such command: "+t),i(r)})},minibuffer_read_function:function(e){var i=Array.hashKeys(this.COMMANDS).sort();t.call(this,i,e,function(e,t,i){var n=this.COMMANDS[t],r=!!n;r||e.signalError("No such function: "+t),i(r)})},minibuffer_read_buffer:function(e){this.whenYmacs(function(i){var n=i.buffers.map("name");n.push(n.shift()),t.call(this,n,e)})},minibuffer_read_string:function(e,i){t.call(this,e,i)},minibuffer_read_variable:function(e){var i=this.globalVariables;Object.merge(i,this.variables);var n=Array.hashKeys(i).grep(function(e){return!/^\*/.test(e)}).sort();t.call(this,n,e)},minibuffer_read_existing_file:function(e){var n=this;n.cmd("minibuffer_replace_input_by_current_dir",function(){t.call(n,i,e,function(e,t,i){n.ymacs.fs_fileType(t,function(n){null==n?(e.signalError("No such file: "+t),i(!1)):i(!0)})})})},minibuffer_read_file:function(e){var n=this;n.cmd("minibuffer_replace_input_by_current_dir",function(){t.call(n,i,e)})},minibuffer_read_file_or_directory:function(e){var n=this;n.cmd("minibuffer_replace_input_by_current_dir",function(){t.call(n,i,e)})},minibuffer_read_directory:function(e){var n=this;n.cmd("minibuffer_replace_input_by_current_dir",function(){t.call(n,i,e)})},minibuffer_prompt_end:function(){return this.whenMinibuffer(function(e){return e.getq("minibuffer_end_marker").getPosition()})},minibuffer_contents:function(){return this.whenMinibuffer(function(e){return e._bufferSubstring(e.getq("minibuffer_end_marker"))})},minibuffer_replace_input:function(e){this.whenMinibuffer(function(t){t._replaceText(t.getq("minibuffer_end_marker"),t.getCodeSize(),e),this.getMinibufferFrame()._redrawCaret(!0)})},minibuffer_replace_input_by_current_dir:function(e){this.whenYmacs(function(t){var i=this,n=t.getActiveBuffer().name,r=n.slice(0,n.lastIndexOf("/")+1);t.fs_remapDir(r,function(t){i.cmd("minibuffer_replace_input",t),e()})})},minibuffer_complete:function(){var t=this;t.whenMinibuffer(function(i){function n(n){if(n&&0!=n.length){var r=n.common_prefix();r!=s?i.cmd("minibuffer_replace_input",r):1==n.length?i.signalError("Sole completion"):e.call(i,t.getMinibufferFrame(),n)}else i.signalError("No completions")}var r=i.getq("completion_list"),s=i.cmd("minibuffer_contents"),o=s.replace(/([\[\]\(\)\{\}\.\*\+\?\|\\])/g,"\\$1").replace(/([_-])/g,"[^_-]*[_-]");o=new RegExp("^"+o,"i"),r instanceof Function?r.call(t,i,s,o,function(e){e&&n(e)}):r&&r.length>0?(r=r.grep(function(e){return o.test(e)}),n(r)):n(r)})},minibuffer_complete_and_exit:function(){var e=this;e.whenMinibuffer(function(t){t.getq("minibuffer_validation").call(t,null,function(i){i&&t.cmd("minibuffer_keyboard_quit",e.getq("minibuffer_continuation"))})})},minibuffer_keyboard_quit:function(e){this.whenMinibuffer(function(t){var i=this.cmd("minibuffer_contents");t.setCode(""),this.ymacs.setInputFrame(this.ymacs.getActiveFrame()),this.ymacs.getActiveFrame().focus(),function(t){e&&e.call(this,t),this.getPrefixArg()}.delayed(1,this,i)}),DlPopup.clearAllPopups()}});var d={TAB:a,ENTER:o,"HOME && C-a":l,"S-HOME && S-C-a":Ymacs_Interactive("^",h)};DEFINE_SINGLETON("Ymacs_Keymap_Minibuffer",Ymacs_Keymap,function(e,t){e.KEYS=Object.merge({"C-g && ESCAPE":"minibuffer_keyboard_quit"},d)});var m=DEFINE_CLASS(null,Ymacs_Keymap,function(e,t){e.KEYS=Object.merge({"S-TAB":c,"ARROW_DOWN && ARROW_RIGHT && C-n && C-f":r,"ARROW_UP && ARROW_LEFT && C-p && C-b":s,ESCAPE:function(){DlPopup.clearAllPopups()}},d),t.defaultHandler=[function(){return DlPopup.clearAllPopups(),!1}]});m=new m}(),DEFINE_CLASS("Ymacs_Completion_Popup",DlCompletionPopup),DEFINE_CLASS("Ymacs_Stream",null,function(e,t){e.DEFAULT_ARGS={buffer:["buffer",null],line:["line",0],col:["col",0]},t.nextCol=function(){++this.col},t.prevCol=function(){--this.col},t.nextLine=function(){++this.line,this.col=0},t.prevLine=function(){--this.line,this.col=0},t.peek=function(e){return null==e&&(e=0),this.buffer.code[this.line].charAt(this.col+e)},t.next=function(){var e=this.peek();return this.nextCol(),this.col>=this.buffer.code[this.line].length&&this.nextLine(),e},t.get=function(){var e=this.peek();return this.nextCol(),e},t.lineText=function(e){return null==e&&(e=this.line),this.buffer.code[e]},t.lineIndentation=function(e){return/^\s*/.exec(this.lineText(e))[0].length},t.lookingAt=function(e){var t=this.buffer.code[this.line];return e instanceof RegExp?e.exec(t.substr(this.col)):t.substr(this.col,e.length)==e},t.textBefore=function(e){return null==e&&(e=this.buffer._rowColToPosition(this.line,this.col)),this.buffer.getCode().substr(0,e)},t.textAfter=function(e){return null==e&&(e=this.buffer._rowColToPosition(this.line,this.col)),
this.buffer.getCode().substr(e)},t.substring=function(e,t){return this.buffer.getCode().substring(e,t)},t.substr=function(e,t){return this.buffer.getCode().substr(e,t)},t.eol=function(){return this.col==this.buffer.code[this.line].length},t.eof=function(){var e=this.buffer.code.length,t=this.line;return t>=e||t==e-1&&this.eol()},t.length=function(){return this.buffer.code.length},t.lineLength=function(e){return null==e&&(e=this.line),this.buffer.code[e].length},t.save=function(){return{buffer:this.buffer,line:this.line,col:this.col}},t.restore=function(e){this.buffer=e.buffer,this.line=e.line,this.col=e.col},t.checkStop=function(){if(this.eof())throw this.EOF;if(this.eol())throw this.EOL},t.EOL={},t.EOF={},t.skip_ws=function(){for(;Ymacs_Simple_Stream.is_whitespace(this.peek());)this.next()}}),DEFINE_CLASS("Ymacs_Simple_Stream",null,function(e,t){e.DEFAULT_ARGS={buffer:["buffer",null],line:["line",0],col:["col",0],pos:["pos",null]},e.CONSTRUCT=function(){if(null==this.pos)this.pos=this.buffer._rowColToPosition(this.line,this.col);else{var e=this.buffer._positionToRowCol(this.pos);this.line=e.row,this.col=e.col}},t.peek=function(){var e=this.buffer.code,t=e[this.line];return null==t?null:this.col==t.length?this.line==e.length-1?null:"\n":t.charAt(this.col)},t.next=function(){var e=this.peek();return e&&(++this.pos,++this.col,this.col>this.buffer.code[this.line].length&&(this.col=0,++this.line)),e},t.read_while=function(e){for(var t,i="";(t=this.peek())&&e(t);)i+=this.next();return i},t.is_whitespace=e.is_whitespace=function(e){switch(e){case" ":case"\n":case"	":case"\f":case"\u2028":case"\u2029":case" ":return!0}},t.skip_ws=function(){return this.read_while(this.is_whitespace)},t.looking_at=function(e){var t=this.buffer.code[this.line];return e instanceof RegExp?e.exec(t.substr(this.col)):t.substr(this.col,e.length)==e}}),DEFINE_CLASS("Ymacs_Tokenizer",DlEventProxy,function(e,t){var i={};e.define=function(e,t){i[e.toLowerCase()]=t},e.DEFAULT_EVENTS=["onFoundToken"],e.DEFAULT_ARGS={buffer:["buffer",null],type:["type",null]},e.FIXARGS=function(e){"string"==typeof e.type&&(e.type=i[e.type.toLowerCase()])},e.CONSTRUCT=function(){var e=null,t=null;this.quickUpdate=function(i){var n=this.buffer._positionToRowCol(i).row;this.parsers.splice(n-1,this.parsers.length+1),e=null!=e?Math.min(n,e):n,clearTimeout(t),t=function(){this._do_quickUpdate(e),e=null}.delayed(1,this)},this._stopQuickUpdate=function(){clearTimeout(t),clearTimeout(this.timerUpdate)},this.reset()},t.reset=function(){this.stream=new Ymacs_Stream({buffer:this.buffer}),this.theParser=this.type(this.stream,this),this.parsers=[],this.parsers[-1]=this.theParser.copy(),this.timerUpdate=null,this.quickUpdate(0)},t.getLanguage=function(e,t){return i[e](this.stream,this,t)},t.showProgress=function(e){null!=e&&(e=Math.round(e/this.stream.length()*100)+"%"),this.buffer.updateProgress("Syntax highlighting",e)},t._do_quickUpdate=function(e){this._stopQuickUpdate();var t,i,n=this.stream,r=this.parsers;for(n.line=e-1;!(t=r[n.line]);)n.prevLine();n.nextLine(),t=t();var s=0,o=!0,a=function(){for(this.buffer.preventUpdates(),i=100,++s>10&&this.showProgress(this.stream.line);;)try{for(;;)t.next()}catch(e){if(e!==n.EOL){if(e===n.EOF){r[n.line]=t.copy(),this.buffer.resumeUpdates(),t.on_EOF&&t.on_EOF();break}throw e}if(r[n.line]=t.copy(),n.nextLine(),0==--i)return this.buffer.resumeUpdates(),this.timerUpdate=setTimeout(a,25),void(o=!1)}this.showProgress()}.$(this);a()},t.quickInsertLine=function(e){this.parsers.splice(e,this.parsers.length+1)},t.quickDeleteLine=function(e){this.parsers.splice(e,this.parsers.length+1)},t.onToken=function(e,t,i,n){this.callHooks("onFoundToken",e,t,i,n)},t.getParserForLine=function(e){this._stopQuickUpdate();var t,i=this.stream,n=this.parsers;i.line;for(i.line=e-1;!(t=n[i.line]);)i.prevLine();i.nextLine(),t=t();try{for(this.buffer.preventUpdates();;){if(i.line==e)return t;try{for(;;)t.next()}catch(r){if(r!==i.EOL){if(r===i.EOF)break;throw r}n[i.line]=t.copy(),i.nextLine()}}}finally{this.buffer.resumeUpdates(),i.line<i.length()&&(this.timerUpdate=this._do_quickUpdate.delayed(50,this,i.line))}},t.reparseAll=function(){return this.parsers.splice(0,this.parsers.length),this.finishParsing()},t.finishParsing=function(){return this.getParserForLine(this.stream.length()),this.getLastParser()},t.getLastParser=function(){return this.parsers.peek()},t.getIndentation=function(e,t){var i=this.getParserForLine(e);return i&&i.indentation instanceof Function?i.indentation(t):void 0}}),DEFINE_SINGLETON("Ymacs_Keymap_ParenMatch",Ymacs_Keymap,function(e,t){function i(e,t){return e.line<t.line?-1:e.line>t.line?1:e.col-t.col}function n(e){throw new Ymacs_Exception("Balanced expression not found")}function r(e){var t=e.context.passedParens;return t instanceof Function?t():t}e.KEYS={"C-c \\":"goto_matching_paren","C-M-q":"indent_sexp","C-M-f && C-M-n":"forward_sexp","C-M-b && C-M-p":"backward_sexp","C-M-u && M-a && C-M-ARROW_UP":"backward_up_list","M-e":"up_list","C-M-ARROW_DOWN":"down_list","M-C-k":"kill_sexp","M-C-SPACE":"mark_sexp","M-C-t":"transpose_sexps","M-(":["paredit_wrap_round","("],"M-[":["paredit_wrap_round","["],"M-{":["paredit_wrap_round","{"],'M-"':["paredit_wrap_round",'"'],"M-'":["paredit_wrap_round","'"],"M-r":"paredit_raise_sexp","M-s":"paredit_splice_sexp",BACKSPACE:"paredit_backward_delete_char","DELETE && C-d":"paredit_delete_char"};var s={"(":")","[":"]","{":"}",'"':{close:'"',backslash:/[\x22\\]/g},"'":{close:"'",backslash:/[\x27\\]/g}},o={")":"(","]":"[","}":"{",'"':'"'};Ymacs_Buffer.newCommands({matching_paren:function(){var e=this.tokenizer.getLastParser(),t=this._rowcol;if(e){var i=r(e);return i.foreach(function(e){var i=e.closed;e.line==t.row&&e.col==t.col?$RETURN(this._rowColToPosition(i.line,i.col+1)):i.line==t.row&&i.col==t.col-1&&$RETURN(this._rowColToPosition(e.line,e.col))},this)}},indent_sexp:Ymacs_Interactive(function(){var e=this.cmd("matching_paren");null!=e?this.cmd("indent_region",this.point(),e):n(this)}),goto_matching_paren:Ymacs_Interactive(function(){var e=this.cmd("matching_paren");return null!=e?(this.cmd("goto_char",e),!0):void 0}),forward_sexp:Ymacs_Interactive(function(){var e=this._rowcol,t=this.tokenizer.finishParsing();if(t){var s=r(t).mergeSort(i),o=s.foreach(function(t){(t.line>e.row||t.line==e.row&&t.col>=e.col)&&$RETURN(t)});if(!o||!o.closed)return void n(this);var a=this._rowColToPosition(o.line,o.col);return this._rowcol.row==o.line&&this._rowcol.col==o.col||!/\S/.test(this._bufferSubstring(null,a))?this.cmd("goto_char",this._rowColToPosition(o.closed.line,o.closed.col)+1):this.cmd("goto_char",a),!0}}),backward_sexp:Ymacs_Interactive(function(){var e=this._rowcol,t=this.tokenizer.finishParsing();if(t){var s=r(t).grep("closed").map("closed").mergeSort(i),o=s.r_foreach(function(t){(t.line<e.row||t.line==e.row&&t.col<e.col)&&$RETURN(t)});return o?(this.cmd("goto_char",this._rowColToPosition(o.opened.line,o.opened.col)),!0):void n(this)}}),mark_sexp:Ymacs_Interactive("^r",function(e,t){this.cmd("save_excursion",function(){this.transientMarker&&this.cmd("goto_char",t),this.ensureTransientMark(),this.cmd("forward_sexp"),this.cmd("set_mark_command",this.point()),this.transientMarker.swap(this.caretMarker)}),this.ensureTransientMark()}),kill_sexp:Ymacs_Interactive(function(){this._killingAction(this.point(),this.cmd("save_excursion",function(){return this.cmd("forward_sexp"),this.point()}))}),transpose_sexps:Ymacs_Interactive(function(){var e=[];this.cmd("forward_sexp"),e.push(this.point()),this.cmd("backward_sexp"),e.push(this.point()),this.cmd("backward_sexp"),e.push(this.point()),this.cmd("forward_sexp"),e.push(this.point()),this.cmd("goto_char",this._swapAreas(e))}),paredit_wrap_round:Ymacs_Interactive("^",function(e,t){e||(e="(");var i=s[e],n=this.transientMarker?this.getRegion():this.cmd("save_excursion",function(){var e=this.point();return t||this.cmd("forward_sexp"),{begin:e,end:this.point()}}),r=this._bufferSubstring(n.begin,n.end),o=this.point()<n.end;"string"!=typeof i&&(r=r.replace(i.backslash,function(e){return"\\"+e}),i=i.close);var a=this.createMarker(n.end);this.cmd("save_excursion",function(){this._replaceText(n.begin,n.end,e+r+i)},o),this.cmd("forward_char",o?1:-1),this.clearTransientMark(),this.cmd("indent_region",n.begin,a.getPosition()),a.destroy()}),down_list:Ymacs_Interactive(function(){var e=this._rowcol,t=this.tokenizer.finishParsing();if(t){var s={line:e.row,col:e.col};t=r(t).grep("closed").mergeSort(i).grep_first(function(e){return i(e,s)>=0}),null!=t?this.cmd("goto_char",this._rowColToPosition(t.line,t.col)+1):n(this)}}),backward_up_list:Ymacs_Interactive(function(){var e=this._rowcol,t=this.tokenizer.finishParsing();if(t){var s={line:e.row,col:e.col};t=r(t).grep("closed").mergeSort(i).grep_last(function(e){return i(e,s)<0&&i(e.closed,s)>=0}),null!=t?this.cmd("goto_char",this._rowColToPosition(t.line,t.col)):n(this)}}),up_list:Ymacs_Interactive(function(){this.cmd("backward_up_list"),this.cmd("forward_sexp")}),paredit_raise_sexp:Ymacs_Interactive(function(){this.cmd("forward_sexp"),this.cmd("backward_sexp");var e=this.point();this.cmd("forward_sexp");var t=this.point();this.cmd("backward_up_list");var i=this.point();this.cmd("forward_sexp");var n=this.point(),r=this.cmd("buffer_substring",e,t);this._replaceText(i,n,r),this.cmd("goto_char",i),this.cmd("indent_region",i,i+r.length)}),paredit_splice_sexp:Ymacs_Interactive(function(){this.cmd("save_excursion",function(){this.cmd("backward_up_list");var e=this.point();this.cmd("forward_sexp"),this.cmd("backward_delete_char");var t=this.point();this.cmd("goto_char",e),this.cmd("delete_char"),this.cmd("indent_region",e,t-1)})}),paredit_backward_delete_char:Ymacs_Interactive("^p",function(e){if(null!=e)return this.cmd("backward_delete_char",e);if(!this.deleteTransientRegion()){if(this.cmd("looking_back",/[\(\[\{\"]/g)){var t=s[this.matchData[0]];if(t){t.close&&(t=t.close);var i=new RegExp("\\s*\\"+t,"mg");this.cmd("looking_at",i)&&this.cmd("save_excursion",function(){this.cmd("delete_whitespace"),this.cmd("delete_char")})}}this.cmd("backward_delete_char")}}),paredit_delete_char:Ymacs_Interactive("^p",function(e){if(null!=e)return this.cmd("delete_char",e);if(!this.deleteTransientRegion()){if(this.cmd("looking_at",/[\]\}\)\"]/g)){var t=o[this.matchData[0]];if(t){var i=new RegExp("\\"+t+"\\s*","mg");this.cmd("looking_back",i)&&this.cmd("save_excursion",function(){this.cmd("backward_delete_whitespace"),this.cmd("backward_delete_char")})}}this.cmd("delete_char")}})}),Ymacs_Buffer.newMode("paren_match_mode",function(){var e=Ymacs_Keymap_ParenMatch();this.pushKeymap(e);var t=!1,i=function(){t&&this.deleteOverlay("match-paren")}.clearingTimeout(500,this),n={beforeInteractiveCommand:function(){i.doItNow()},afterInteractiveCommand:function(){var e=this.tokenizer.getLastParser(),n=this._rowcol;e&&r(e).foreach(function(e){var r=e.closed;(e.line==n.row&&e.col==n.col||r.line==n.row&&r.col==n.col-1)&&(t=!0,this.setOverlay("match-paren",{line1:e.line,line2:r.line,col1:e.col,col2:r.col+1}),i())},this)}.clearingTimeout(100)};return this.addEventListener(n),function(){i.doItNow(),this.popKeymap(e),this.removeEventListener(n)}})}),function(){function e(e){this.value=e}function t(t,i){function n(){return w.peek()}function r(){return w.next()}function s(){return w.read_while(function(e){return k||null==C||w.pos!=C?w.is_whitespace(e):!1})}function o(e){r()}function a(e){return w.read_while(e)}function c(t,i,n){o(t);for(var s=!1,a="";;){var c=r();if(!c)throw new e(a);if(s)a+=c,s=!1;else if("\\"==c)n&&(a+=c),s=!0;else{if(c==i)break;a+=c}}return a}function l(){return a(function(e){return e&&"\n"!=e})}function h(){var e=a(function(){return!w.looking_at("|#")});return o(),o(),e}function f(){return c('"','"')}function u(t,i){var r=y;y=0;try{var a=[];o(t);e:for(;;)switch(s(),n()){case i:break e;case null:throw new e(a);default:a.push(g()),++y}return o(i),a}finally{y=r}}function _(){var e=c("/","/",!0),t=a(function(e){if(e)switch(e.toLowerCase()){case"y":case"m":case"g":case"i":return!0}}).toLowerCase();return{pattern:e,modifiers:t}}function d(){return a(function(e){switch(e){case null:case"(":case")":case"{":case"}":case"[":case"]":case"#":case";":case"`":case"'":case'"':case"|":case" ":case"\n":case"	":case"\f":case"\u2028":case"\u2029":case" ":return!1}return!0})}function m(){return r()+a(function(e){return e>="a"&&"z">=e||e>="A"&&"z">=e||e>="0"&&"9">=e||"-"==e||"_"==e})}function p(){switch(o("#"),n()){case"\\":return r(),b("char",m);case"/":return b("regexp",_);case"(":return b("vector",u.$C("(",")"));case"'":return r(),b("function",d);case"|":return r(),b("comment",h);default:return b("unknown",g)}}function g(){if(s(),!(k||null==C||w.pos!=C||x&&"list"!=x.type))return k=b("caret");switch(n()){case";":return b("comment",l);case'"':return b("string",f);case"(":return b("list",u.$C("(",")"));case"{":return b("list",u.$C("{","}"));case"[":return b("list",u.$C("[","]"));case"#":return b("sharp",p);case"`":return r(),b("qq",g,-1);case",":return r(),"@"==n()?(r(),b("splice",g,-2)):b("unquote",g,-1);case"'":return r(),b("quote",g,-1);case")":return null;case null:return null}return b("symbol",d)}function v(){for(var e=[];null!=n();){var t=g();if(null==t)break;e.push(t),++y}return e}function b(t,i,n){null==n&&(n=0);var s=x;try{var o={value:null,index:y,type:t,start:w.pos+n,parent:x,depth:x?x.depth+1:0,partial:!1};"list"==t&&(x=o);try{i&&(o.value=i(),""===o.value&&r())}catch(a){if(!(a instanceof e))throw a;o.value=a.value,o.partial=!0}return o.end=w.pos,null!=C&&o.start<=C&&o.end>=C&&(M||(M=o)),o}finally{x=s}}var w=new Ymacs_Simple_Stream({buffer:t,pos:i}),k=null,y=0,C=null,x=null,M=null;return{parse:function(e){return C=e,b("list",v)},read:function(){return g()},prev_exp:function(){return k?k.parent.value[k.index-1]:M?"list"==M.type&&M.end==C+1?M.value.peek():M.parent.value[M.index]:void 0},caret_token:function(){return k},cont_exp:function(){return M},list:function(){for(var e=M;e&&("list"!=e.type||e.end==C);)e=e.parent;return e}}}function i(e,t){return"string"==typeof e&&(e=e.qw()),new RegExp("^("+e.join("|")+")$",t)}function n(e){return l[e]}function r(e){return h[e]}Ymacs_Buffer.newCommands({test_lisp_parse:Ymacs_Interactive(function(){try{var e=t(this),i=e.parse(this.point());console.log(i),console.log(e.caret_token()),console.log(e.cont_exp()),console.log(e.prev_exp())}catch(n){console.log(n)}}),lisp_make_quick_parser:function(){var e=Array.$(arguments);return e.unshift(this),t.apply(this,e)},lisp_forward_sexp:Ymacs_Interactive(function(){var e=t(this,this.point()),i=e.read();i&&this.cmd("goto_char",i.end)}),lisp_backward_sexp:Ymacs_Interactive(function(){var e=t(this);e.parse(this.point());var i=e.prev_exp();i&&this.cmd("goto_char",i.start)}),lisp_backward_up_list:Ymacs_Interactive(function(){var e=t(this);e.parse(this.point());var i=e.list();i&&i.parent&&this.cmd("goto_char",i.start)}),lisp_open_paren:Ymacs_Interactive(function(e){null==e&&(e="("),e+=n(e),this.cmd("insert",e),this.cmd("backward_char")}),lisp_close_paren:Ymacs_Interactive(function(e){var t=new RegExp("\\s*\\"+e,"ig");this.cmd("looking_at",t)&&this._deleteText(this.point(),this.matchData.after),this.cmd("insert",e)}),lisp_close_all_parens:Ymacs_Interactive(function(){var e=this.tokenizer.getParserForLine(this._rowcol.row);if(e){var t=this.tokenizer.stream;t.line=this._rowcol.row,t.col=0;try{for(;t.col<this._rowcol.col;)e.next()}catch(i){}e=e.copy().context.parens,e.r_foreach(function(e){this.cmd("lisp_close_paren",n(e.type))},this)}}),lisp_handle_string_quote:Ymacs_Interactive(function(){var e=t(this);e.parse(this.point());var i=e.prev_exp();i&&"string"==i.type&&this.point()<i.end?this.cmd("looking_at",/\"/g)?this.cmd("forward_char"):this.cmd("looking_back",/\\/g)?this.cmd("insert",'"'):this.cmd("insert",'\\"'):(this.cmd("insert",'""'),this.cmd("backward_char"))})});var s=i("define defvar defparameter deftype defstruct defclass defsetf destructuring-bind defmacro defun defmethod defgeneric defpackage in-package defreadtable in-readtable when cond unless etypecase typecase ctypecase lambda λ let load-time-value quote macrolet progn begin prog1 prog2 progv go flet the if throw eval-when multiple-value-prog1 multiple-value-bind unwind-protect let\\* ignore-errors handler-case handler-bind invoke-restart restart-case restart-bind case labels function symbol-macrolet block tagbody catch locally inc! dec! cons c[ad]{1,4}r list and or not null null\\? return return-from setq set! set-car! set-cdr! setf multiple-value-call values","i"),o="error warn".qw().toHash(),a="loop do while dotimes".qw().toHash(),c="t nil".qw().toHash(),l={"(":")","{":"}","[":"]"},h={")":"(","}":"{","]":"["},f="defun defmacro defgeneric defmethod".qw().toHash(),u="deftype defclass defstruct".qw().toHash(),_={"if":"3+",when:"1*",lambda:"1*",unless:"1*",defun:"2*",defpackage:"1*",defgeneric:"2*",defmethod:"2*",defclass:"2*",defmacro:"2*",progn:"0+",begin:"0+",prog1:"1*",prog2:"2*",let:"1*",labels:"1*",flet:"1*",macrolet:"1*","destructuring-bind":"2*","unwind-protect":"1*","catch":"1*","case":"1*",ecase:"1*",cond:"0+","handler-bind":"1*","handler-case":"1*","restart-bind":"1*","restart-case":"1*","return-from":"1*",block:"1*",dotimes:"1*",dolist:"1*","multiple-value-bind":"2*"},d="labels flet macrolet".qw().toHash();Ymacs_Tokenizer.define("lisp",function(e,t,i){function l(e){return i.rx_special&&i.rx_special.test(e)?!1:e.toLowerCase()!=e.toUpperCase()||/^[-|0-9!#$%&*+./:<=>?@\^_~]$/i.test(e)}function h(e){return l(e)}function m(){function e(){return M=t.cont.slice(0),E=t.inString,I=t.quote,T=t.inComment,A=t.parens.slice(0),S=t.passedParens.slice(0),Y=t.backList.slice(0),L=t.list.slice(0),P}var t=e.context={cont:M.slice(0),quote:I,inString:E,inComment:T,parens:A.slice(0),passedParens:S.slice(0),backList:Y.slice(0),list:L.slice(0)};return e}function p(i,n,r){t.onToken(e.line,i,n,r)}function g(t){null==t&&(t={c1:e.col}),L.push(t)}function v(){return e.buffer.getq("indent_level")}function b(){for(var t=e.col,i=e.get(),n=i;!e.eol()&&(i=e.peek(),l(i));)n+=i,e.nextCol();var r=i&&{line:e.line,c1:t,c2:e.col,id:n.toLowerCase()};return r.c2>r.c1?r:void 0}function w(t,i){for(var n,r=!1,s=e.col;!e.eol();){if(n=e.peek(),n===t&&!r)return M.pop(),E=null,p(s,e.col,i),p(e.col,++e.col,i+"-stopper"),!0;r=!r&&"\\"===n,e.nextCol()}p(s,e.col,i)}function k(){var t=e.lineText(),i=t.indexOf("|#",e.col),n=/^\s*\|+/.exec(t.substr(e.col));n&&p(e.col,e.col+=n[0].length,"mcomment-starter"),i>=0?(M.pop(),T=null,p(e.col,i,"mcomment"),p(i,i+=2,"mcomment-stopper"),e.col=i):(p(e.col,t.length,"mcomment"),e.col=t.length)}function y(e){var t=L&&L.length>0&&L[0].id;return t?(t=t.toLowerCase(),null==e?t:"string"==typeof e?t==e:t in e):void 0}function C(){if(e.checkStop(),M.length>0)return M.peek()();var t,i=e.peek();if(t=e.lookingAt(/^#\\.[a-z0-9_-]*/i))g(),p(e.col,e.col+=t[0].length,"constant");else if(t=e.lookingAt(/^#\x2f((\\.|[^\x2f])*)\x2f([igsm]*)/))g(),p(e.col,e.col+=2,"regexp-starter"),p(e.col,e.col+=t[1].length,"regexp"),p(e.col,e.col+=1,"regexp-stopper"),t[3]&&p(e.col,e.col+=t[3].length,"regexp-modifier");else if(e.lookingAt(/^#\x27[^(]/))g(),e.col+=2,t=b(),p(t.c1,t.c2,"function-name");else if(e.lookingAt("#|"))T={line:e.line,c1:e.col},p(e.col,e.col+=2,"mcomment-starter"),M.push(k);else if(t=e.lookingAt(/^;+/))p(e.col,e.col+=t[0].length,"comment-starter"),p(e.col,e.col=e.lineLength(),"comment");else if('"'===i)g(),E={line:e.line,c1:e.col},p(e.col,++e.col,"string-starter"),M.push(w.$C(i,"string"));else if(t=e.lookingAt(/^[+-]?(#x[0-9a-f]+|#o[0-7]+|#b[01]+|[0-9]*\.?[0-9]+e?[0-9]*)(\x2f(#x[0-9a-f]+|#o[0-7]+|#b[01]+|[0-9]*\.?[0-9]+e?[0-9]*))?/))g(),p(e.col,e.col+=t[0].length,"number");else if(t=n(i))g(),Y.push(L),L=[],A.push({line:e.line,col:e.col,type:i}),p(e.col,++e.col,"open-paren");else if(t=r(i)){var l=A.pop();l&&l.type==t?(l.closed={line:e.line,col:e.col,opened:l},S.push(l),L=Y.pop(),p(e.col,++e.col,"close-paren")):p(e.col,++e.col,"error")}else if(h(i)&&(t=b())){var _=":"==i?"lisp-keyword":"&"==i?"type":/^#:/.test(t.id)?"constant":s.test(t.id)?"keyword":t.id in o?"error":t.id in a?"builtin":t.id in c?"constant":null;_||(y(f)&&1==L.length?_="function-name":y(u)&&1==L.length?_="type":/^with(out)?[-\x2f]|:with(out)?[-\x2f]/i.test(t.id)&&(_="builtin")),g(t),p(t.c1,t.c2,_)}else p(e.col,++e.col,null)}function x(){var t=e.lineText();if(E)return Math.max(0,t.search(/[^\s\t\n]/));var i=0,n=A.peek();if(n){var r=e.lineText(n.line);if(i=n.col+1,/[\#\']/.test(r.charAt(n.col-1)))return i;var s;if(h(r.charAt(i))){var o=/\s\S/g;o.lastIndex=n.col,s=o.exec(r),s&&(i=s=s.index+1)}if(L&&L.length){var a=y();if(a){a=a.replace(/\*$/,"");var c=_[a];if(!c&&/^with|:with/.test(a)&&(c="0*"),!c&&/^def/.test(a)&&(c=s&&/[\(\[\{]/.test(r.charAt(s))?"1*":"2*"),!c)try{Object.HOP(d,Y[Y.length-2][0].id)&&(c="1*")}catch(l){}if(c){var f=parseInt(c,10),u=/\+/.test(c);/\*/.test(c);i=n.col+v(),u&&s?i=s:f>0&&L.length-1<f&&(s?i=s:i+=v())}}}}return i}i||(i={});var M=[],E=!1,T=!1,I=null,A=[],S=[],Y=[],L=[],P={next:C,copy:m,indentation:x};return P})}(),DEFINE_SINGLETON("Ymacs_Keymap_LispMode",Ymacs_Keymap,function(e,t){e.KEYS={"ENTER && C-j && C-m":"newline_and_indent","(":["lisp_open_paren","("],")":["lisp_close_paren",")"],"[":["lisp_open_paren","["],"]":["lisp_close_paren","]"],"{":["lisp_open_paren","{"],"}":["lisp_close_paren","}"],'"':["lisp_handle_string_quote"],"C-c ] && C-c C-]":"lisp_close_all_parens"}}),Ymacs_Buffer.newMode("lisp_mode",function(){var e=this.tokenizer;this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:"lisp"}));var t=this.setq({indent_level:2,syntax_comment_line:{rx:/\s*;+\s?/g,ch:";;"},syntax_word_dabbrev:{test:function(e){if(e){var t=e.charCodeAt(0);return t>=48&&57>=t||e.toUpperCase()!=e.toLowerCase()||"-"==e||"*"==e||"%"==e||"+"==e||"/"==e||"@"==e||"&"==e||"$"==e||"."==e||"="==e||"~"==e}}}}),i=Ymacs_Keymap_LispMode();this.pushKeymap(i);var n=this.cmd("paren_match_mode",!0),r=this.replaceCommands({forward_sexp:"lisp_forward_sexp",backward_sexp:"lisp_backward_sexp",backward_up_list:"lisp_backward_up_list"});return function(){this.setTokenizer(e),this.setq(t),this.newCommands(r),this.popKeymap(i),n||this.cmd("paren_match_mode",!1)}}),function(){function e(e){return e.toLowerCase()!=e.toUpperCase()}function t(t){return t&&(e(t)||/^[_$]$/.test(t))}function i(t){return t&&(e(t)||/^[0-9_$]$/.test(t))}function n(e){return f[e]}function r(e){return u[e]}function s(e,s,o,a,c,l){function u(){return c.buffer.getq("indent_level")}function _(){function e(){return k=t.cont.slice(0),x=t.inComment,M=t.inString,y=t.parens.slice(0),C=t.passedParens.slice(0),E}var t=e.context={cont:k.slice(0),inComment:x,inString:M,parens:y.slice(0),passedParens:C.slice(0)};return e}function d(e,t,i){l.onToken(c.line,e,t,i)}function m(){for(var e=c.col,t=c.get(),n=t;!c.eol()&&(t=c.peek(),i(t));)n+=t,c.nextCol();return t&&{line:c.line,c1:e,c2:c.col,id:n}}function p(){var e=c.lineText(),t=e.indexOf("*/",c.col),i=/^\s*\*+/.exec(e.substr(c.col));i&&d(c.col,c.col+=i[0].length,"mcomment-starter"),t>=0?(k.pop(),x=null,d(c.col,t,"mcomment"),d(t,t+=2,"mcomment-stopper"),c.col=t):(d(c.col,e.length,"mcomment"),c.col=e.length)}function g(e,t){for(var i,n=!1,r=c.col;!c.eol();){if(i=c.peek(),i===e&&!n)return k.pop(),M=null,d(r,c.col,t),d(c.col,++c.col,t+"-stopper"),!0;n=!n&&"\\"===i,c.nextCol()}d(r,c.col,t)}function v(){for(var e,t=!1,i=0,s=c.col;!c.eol();){if(e=c.peek(),!n(e)||t||i||i++,r(e)&&!t&&(i--,0>i&&(i=0)),"/"===e&&!t&&!i){k.pop(),M=null,d(s,c.col,"regexp"),d(c.col,++c.col,"regexp-stopper");var o=c.lookingAt(/^[gmsiy]+/);return o&&d(c.col,c.col+=o[0].length,"regexp-modifier"),!0}t=!t&&"\\"===e,c.nextCol()}d(s,c.col,"regexp")}function b(){if(c.checkStop(),k.length>0)return k.peek()();var i,l,f=c.peek();if(c.lookingAt("/*"))x={line:c.line,c1:c.col},d(c.col,c.col+=2,"mcomment-starter"),k.push(p);else if(c.lookingAt("//"))d(c.col,c.col+=2,"comment-starter"),d(c.col,c.col=c.lineLength(),"comment");else if('"'===f||"'"===f)M={line:c.line,c1:c.col},d(c.col,++c.col,"string-starter"),k.push(g.$C(f,"string"));else if(i=c.lookingAt(/^0x[0-9a-f]+|^[0-9]*\.?[0-9]+/))d(c.col,c.col+=i[0].length,"number");else if(t(f)&&(l=m())){var u=l.id in e?"keyword":l.id in s?"type":l.id in o?"constant":l.id in a?"builtin":null;d(l.c1,l.c2,u)}else if(l=n(f))y.push({line:c.line,col:c.col,type:f}),d(c.col,++c.col,"open-paren");else if(l=r(f)){var _=y.pop();_&&_.type==l?(_.closed={line:c.line,col:c.col,opened:_},C.push(_),d(c.col,++c.col,"close-paren")):d(c.col,++c.col,"error")}else"/"===f&&h.test(c.textBefore())?(d(c.col,++c.col,"regexp-starter"),k.push(v)):(i=c.lookingAt(/^\s+$/))?d(c.col,c.col+=i[0].length,"trailing-whitespace"):d(c.col,++c.col,null)}function w(){if(M)return 0;var e=c.line,t=c.lineText(),i=0;if(x){var n=c.lineText(x.line);if(i=x.c1+1,!/^\s*\*/.test(t)){var r=/[^\s*]/g;r.lastIndex=x.c1+1;var s=r.exec(n);s&&(i=s.index)}return i}var o=y.peek();if(o){var r=new RegExp("^\\s*\\"+f[o.type]),a=r.test(t),l=c.lineText(o.line);r=/\S/g,r.lastIndex=o.col+1;var s=r.exec(l);s?i=a?o.col:s.index:(i=c.lineIndentation(o.line)+u(),a&&(i-=u()))}if(e>0){var h=c.textBefore();if(/\)\s*$/.test(h)&&C.length>0){o=C.peek();var _=c.lineText(o.line);/^\s*(if|for|while)\W/.test(_)&&(i+=u())}else/\Welse\s*$/.test(h)&&(i+=u())}return/^\s*(case|default)\W/.test(t)&&(i-=u()/2),i}var k=[],y=[],C=[],x=null,M=null,E={next:b,copy:_,indentation:w};return E}var o="abstract break case catch class const continue debugger default delete do else enum export extends final finally for function goto if implements import in instanceof interface native new package private protected public return static super switch synchronized throw throws transient try typeof var void let yield volatile while with".qw(),a="boolean byte char double float int long short void Array Date Function Math Number Object RegExp String".qw(),c="false null undefined Infinity NaN true arguments this".qw(),l="Infinity NaN Packages decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt undefined window document alert prototype constructor".qw(),h=/[\[({,;+\-*=?&|!:][\x20\t\n\xa0]*$|return\s+$|typeof\s+$/,f={"(":")","{":"}","[":"]"},u={")":"(","}":"{","]":"["};Ymacs_Tokenizer.define("js",s.$C(o.toHash(!0),a.toHash(!0),c.toHash(!0),l.toHash(!0)));var _=l.concat("DEFINE_CLASS DEFINE_SINGLETON DEFINE_HIDDEN_CLASS DEFAULT_ARGS DEFAULT_EVENTS FIXARGS CONSTRUCT BEFORE_BASE FINISH_OBJECT_DEF D P $".qw());Ymacs_Tokenizer.define("js-dynarchlib",s.$C(o.toHash(!0),a.toHash(!0),c.toHash(!0),_.toHash(!0)))}(),DEFINE_SINGLETON("Ymacs_Keymap_CLanguages",Ymacs_Keymap,function(e,t){e.KEYS={ENTER:"newline_and_indent","} && ) && ] && : && ; && { && ( && [ && *":"c_insert_and_indent","{":"c_electric_block"}}),DEFINE_SINGLETON("Ymacs_Keymap_JS",Ymacs_Keymap_CLanguages().constructor,function(e,t){}),Ymacs_Buffer.newMode("javascript_mode",function(e){var t=this.tokenizer,i=Ymacs_Keymap_JS();this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:e?"js-dynarchlib":"js"})),this.pushKeymap(i);var n=this.cmd("paren_match_mode",!0);this.setq({syntax_comment_line:{rx:/\s*\x2f+\s?/g,ch:"//"}});return function(){this.setTokenizer(t),this.popKeymap(i),n||this.cmd("paren_match_mode",!1)}}),Ymacs_Buffer.newCommands({javascript_dl_mode:Ymacs_Interactive(function(){return this.cmd("javascript_mode",!0)}),c_electric_block:Ymacs_Interactive(function(){this.cmd("indent_line"),this.cmd("insert","{\n\n}"),this.cmd("indent_line"),this.cmd("backward_line",1),this.cmd("indent_line")}),c_insert_and_indent:Ymacs_Interactive(function(){var e;return(e=this.cmd("self_insert_command"))?(this.cmd("indent_line"),e):void 0})}),Ymacs_Tokenizer.define("xml",function(e,t){function i(){function e(){return p=i.slice(0),m=t.slice(0),g=n,v=r,b}var t=m.slice(0),i=p.slice(0),n=g,r=v;return e}function n(){return e.buffer.getq("indent_level")}function r(i,n,r){t.onToken(e.line,i,n,r)}function s(e){return e.toLowerCase()!=e.toUpperCase()}function o(e){return e&&(s(e)||/^[:_-]$/.test(e))}function a(e){return e&&(s(e)||/^[0-9:_-]$/.test(e))}function c(){for(var t=e.col,i=e.get(),n=i;!e.eol()&&(i=e.peek(),a(i));)n+=i,e.nextCol();return i&&{line:e.line,c1:t,c2:e.col,id:n}}function l(t){for(var i,n=!1,s=e.col;!e.eol();){if(i=e.peek(),i===t&&!n)return p.pop(),r(s,e.col,"string"),void r(e.col,++e.col,"string-stopper");n=!n&&"\\"===i,e.nextCol()}r(s,e.col,"string")}function h(){var t,i=e.peek();e.lookingAt(/^\x2f>/)?(p.pop(),g=null,r(e.col,++e.col,"xml-closetag-slash"),r(e.col,++e.col,"xml-close-bracket")):">"===i?(p.pop(),m.push(g),g=null,r(e.col,++e.col,"xml-close-bracket")):o(i)&&(t=c())?r(t.c1,t.c2,"xml-attribute"):'"'===i||"'"===i?(r(e.col,++e.col,"string-starter"),p.push(l.$C(i))):r(e.col,++e.col,null)}function f(t,i){var n=e.lineText(),s=n.indexOf(i,e.col);s>=0?(p.pop(),r(e.col,s,t),v=null,r(s,s+=i.length,t+"-stopper"),e.col=s):(r(e.col,n.length,t),e.col=n.length)}function u(){var t=e.lookingAt(/^([\s\xA0]*)(>?)/);t&&t[0]?(t[1]&&r(e.col,e.col+=t[1].length,null),t[2]&&(r(e.col,e.col+=t[2].length,"xml-close-bracket"),p.pop())):r(e.col,++e.col,"error")}function _(){if(e.checkStop(),p.length>0)return p.peek()();var t,i=e.peek();if(e.lookingAt("<![CDATA["))r(e.col,e.col+=9,"xml-cdata-starter"),v={line:e.line,c1:e.col},p.push(f.$C("xml-cdata","]]>"));else if(e.lookingAt("<!--"))r(e.col,e.col+=4,"mcomment-starter"),v={line:e.line,c1:e.col},p.push(f.$C("mcomment","-->"));else if(e.lookingAt(/^<\x2f/)&&o(e.peek(2))){r(e.col,++e.col,"xml-open-bracket"),r(e.col,++e.col,"xml-closetag-slash");var n=c(),s=m.pop();r(n.c1,n.c2,s&&s.id==n.id?"xml-close-tag":"error"),p.push(u)}else if("<"===i&&o(e.peek(1))){r(e.col,++e.col,"xml-open-bracket");var n=c();r(n.c1,n.c2,"xml-open-tag"),g=n,p.push(h)}else(t=e.lookingAt(/^&.*?;/))?(r(e.col,++e.col,"xml-entity-starter"),r(e.col,e.col+=t[0].length-2,"xml-entity"),r(e.col,++e.col,"xml-entity-stopper")):"&"===i?r(e.col,++e.col,"error"):r(e.col,++e.col,null)}function d(){var t,i;if(v)t=e.lineIndentation(v.line)+n();else if(g){var r=e.lineText(g.line);t=/^\s*$/.test(r.substr(0,g.c1-1))?g.c1+g.id.length+1:e.lineIndentation(g.line)}else(i=m.peek())&&(t=e.lineIndentation(i.line)+n(),/^\s*<\x2f/.test(e.lineText())&&(t-=n()));return t}var m=[],p=[],g=null,v=null,b={next:_,copy:i,indentation:d};return b}),DEFINE_SINGLETON("Ymacs_Keymap_XML",Ymacs_Keymap,function(e,t){e.KEYS={"C-c /":"xml_close_tag","C-ENTER":"xml_zen_expand",ENTER:"newline_and_indent"}}),Ymacs_Buffer.newMode("xml_mode",function(){var e=this.tokenizer;this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:"xml"}));var t=Ymacs_Keymap_XML();this.pushKeymap(t);var i=this.setq({indent_level:2});return function(){this.setTokenizer(e),this.popKeymap(t),this.setq(i)}}),function(){function e(t,i){for(var n=t.repeat||1,r=1;n>=r;++r)r>1&&i("\n"),i("<",t.type),t.id&&i(' id="',t.id.replace(/\$/g,r),'"'),t.klass&&i(' class="',t.klass.replace(/\$/g,r),'"'),t.attributes&&t.attributes.foreach(function(e){i(" ",e,'="|"')}),i(">"),t.child?(i("\n"),e(t.child,i),i("\n")):i("|"),i("</",t.type,">"),t.next&&(i("\n"),e(t.next,i))}function t(e,i){var c={type:""},l=n;e:for(;i<e.length;){var h=e.charAt(i++);switch(h){case"#":l=s,c.id="";break;case".":l=r,null!=c.klass?c.klass+=" ":c.klass="";break;case":":l=a,null==c.attributes&&(c.attributes=[]),c.attributes.push("");break;case"*":l=o,c.repeat="";break;case">":c.child=t(e,i),i=c.child.i;break e;case"(":c.child=t(e,i),i=c.child.i;break;case")":break e;case"+":c.next=t(e,i),i=c.next.i;break e;default:switch(l){case n:c.type+=h;break;case r:c.klass+=h;break;case s:c.id+=h;break;case o:c.repeat=parseInt(String(c.repeat)+h,10);break;case a:c.attributes.push(c.attributes.pop()+h)}}}return c.i=i,c}function i(){var e=this.point(),t=this.getq("xml_zen_markers"),i=t[0],n=t.peek();(e<i.getPosition()||e>n.getPosition()||n.getPosition()==t.peek(1).getPosition())&&this.cmd("xml_zen_stop")}DEFINE_SINGLETON("Ymacs_Keymap_XML_Zen",Ymacs_Keymap,function(e,t){e.KEYS={TAB:"xml_zen_next_poi","S-TAB":"xml_zen_prev_poi","C-g":"xml_zen_stop"
}});var n=1,r=2,s=3,o=4,a=5;Ymacs_Buffer.newCommands({xml_close_tag:Ymacs_Interactive(function(){this.cmd("close_last_xml_tag"),this.cmd("indent_line")}),xml_zen_expand:Ymacs_Interactive(function(){this.cmd("xml_zen_stop");var n=String.buffer(),r=this.cmd("save_excursion",function(){for(this.cmd("backward_whitespace");!this.cmd("looking_back",/[\x20\xa0\s\t\n;&]/)&&this.cmd("backward_char"););return this.point()}),s=this.point();try{e(t(this.cmd("buffer_substring",r,s).trim(),0),n)}catch(o){throw new Ymacs_Exception("The Zen is not strong today :-/")}n=n.get(),this.cmd("delete_region",r,s),this.cmd("insert",n),r=this.createMarker(r,!1,"xml_zen");var a=this.createMarker(this.point(),!0,"xml_zen"),c=[];for(this.cmd("goto_char",r.getPosition());this.cmd("search_forward","|",a.getPosition());)this.cmd("backward_delete_char"),c.push(this.createMarker(this.point(),!0,"xml_zen_start")),c.push(this.createMarker(this.point(),!1,"xml_zen_end"));this.cmd("indent_region",r.getPosition(),a.getPosition());var l=c.length;l>0?(this.cmd("goto_char",c[0]),c.unshift(r),c.push(a),this.setq("xml_zen_markers",c),this.pushKeymap(Ymacs_Keymap_XML_Zen()),this.addEventListener("afterInteractiveCommand",i)):(r.destroy(),a.destroy())}),xml_zen_stop:Ymacs_Interactive(function(){var e=this.getq("xml_zen_markers");e&&(e.map("destroy"),this.setq("xml_zen_markers",null)),this.popKeymap(Ymacs_Keymap_XML_Zen()),this.removeEventListener("afterInteractiveCommand",i)}),xml_zen_next_poi:Ymacs_Interactive(function(){var e=this.getq("xml_zen_markers"),t=this.point();e.foreach(function(e){e.getPosition()>t&&(this.cmd("goto_char",e.getPosition()),$BREAK())},this)}),xml_zen_prev_poi:Ymacs_Interactive(function(){var e=this.getq("xml_zen_markers"),t=this.point();e.r_foreach(function(e){e.getPosition()<t&&(this.cmd("goto_char",e.getPosition()),$BREAK())},this)})})}(),Ymacs_Tokenizer.define("css",function(e,t){function i(){function e(){return u=t.parens.slice(0),_=t.passedParens.slice(0),d=t.cont.slice(0),m=t.inString,p=t.inComment,f}var t=e.context={parens:u.slice(0),passedParens:_.slice(0),cont:d.slice(0),inString:m,inComment:p};return e}function n(){return t.buffer.getq("indent_level")}function r(e){return g[e]}function s(e){return v[e]}function o(i,n,r){t.onToken(e.line,i,n,r)}function a(){var t=e.lineText(),i=t.indexOf("*/",e.col),n=/^\s*\*+/.exec(t.substr(e.col));n&&o(e.col,e.col+=n[0].length,"mcomment-starter"),i>=0?(d.pop(),p=null,o(e.col,i,"mcomment"),o(i,i+=2,"mcomment-stopper"),e.col=i):(o(e.col,t.length,"mcomment"),e.col=t.length)}function c(t,i){for(var n,r=!1,s=e.col;!e.eol();){if(n=e.peek(),n===t&&!r)return d.pop(),m=null,o(s,e.col,i),o(e.col,++e.col,i+"-stopper"),!0;r=!r&&"\\"===n,e.nextCol()}o(s,e.col,i)}function l(){if(e.checkStop(),d.length>0)return d.peek()();var t,i=e.peek();if(e.lookingAt("/*"))p={line:e.line,c1:e.col},o(e.col,e.col+=2,"mcomment-starter"),d.push(a);else if('"'===i||"'"===i)m={line:e.line,c1:e.col},o(e.col,++e.col,"string-starter"),d.push(c.$C(i,"string"));else if(t=r(i))u.push({line:e.line,col:e.col,type:i}),o(e.col,++e.col,"open-paren");else if(t=s(i)){var n=u.pop();n&&n.type==t?(n.closed={line:e.line,col:e.col,opened:n},_.push(n),o(e.col,++e.col,"close-paren")):o(e.col,++e.col,"error")}else(t=e.lookingAt(/^([a-zA-z-]+):/))?(o(e.col,e.col+=t[1].length,"keyword"),o(e.col,++e.col,"operator")):(t=e.lookingAt(/^([0-9.]+)(px|pt|em|ex|in|cm|mm|%)/))?(o(e.col,e.col+=t[1].length,"number"),o(e.col,e.col+=t[2].length,"type")):(t=e.lookingAt(/^(\.[a-zA-Z0-9_:-]+)/))?o(e.col,e.col+=t[1].length,"function-name"):(t=e.lookingAt(/^(#[a-zA-Z0-9_:-]+)/))?o(e.col,e.col+=t[1].length,"constant"):(t=e.lookingAt(/^(@[a-zA-Z0-9_:-]+)/))?o(e.col,e.col+=t[1].length,"builtin"):(t=e.lookingAt(/^(url|none|auto|bold|italic|normal|inherit|print|screen|all)/))?o(e.col,e.col+=t[1].length,"builtin"):o(e.col,++e.col,null)}function h(){if(m)return 0;var t=(e.line,e.lineText()),i=0;if(p){var r=e.lineText(p.line);if(i=p.c1+1,!/^\s*\*/.test(t)){var s=/[^\s*]/g;s.lastIndex=p.c1+1;var o=s.exec(r);o&&(i=o.index)}return i}var a=u.peek();if(a){var s=new RegExp("^\\s*\\"+g[a.type]),c=s.test(t),l=e.lineText(a.line);s=/\S/g,s.lastIndex=a.col+1;var o=s.exec(l);o?i=c?a.col:o.index:(i=e.lineIndentation(a.line)+n(),c&&(i-=n()))}return i}var f={next:l,copy:i,indentation:h},u=[],_=[],d=[],m=null,p=null,g={"(":")","{":"}","[":"]"},v={")":"(","}":"{","]":"["};return f}),DEFINE_SINGLETON("Ymacs_Keymap_CSS",Ymacs_Keymap),Ymacs_Keymap_CSS().defineKeys({ENTER:"newline_and_indent",": && } && )":"c_insert_and_indent"}),Ymacs_Buffer.newMode("css_mode",function(){var e=this.tokenizer;this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:"css"}));var t=this.cmd("paren_match_mode",!0);return this.pushKeymap(Ymacs_Keymap_CSS()),function(){this.setTokenizer(e),t||this.cmd("paren_match_mode",!1),this.popKeymap(Ymacs_Keymap_CSS())}}),Ymacs_Tokenizer.define("markdown",function(e,t){function i(){function e(){return s}e.context={};return e}function n(i,n,r){t.onToken(e.line,i,n,r)}function r(){e.checkStop();var i;0==e.col&&(i=e.lookingAt(/^(#+)/))?n(0,e.col=e.lineLength(),"markdown-heading"+i[0].length):e.line>0&&0==e.col&&(i=e.lookingAt(/^[=-]+$/))&&/\S/.test(e.lineText(e.line-1))?(i="="==i[0].charAt(0)?1:2,i="markdown-heading"+i,t.onToken(e.line-1,0,e.lineLength(e.line-1),i),n(0,e.col=e.lineLength(),i)):0==e.col&&(i=e.lookingAt(/^[>\s]*/))?(i=i[0].replace(/\s+/g,"").length,i>3&&(i=""),i="markdown-blockquote"+i,n(0,e.col=e.lineLength(),i)):n(e.col,++e.col,null)}var s={next:r,copy:i};return s}),Ymacs_Buffer.newMode("markdown_mode",function(){var e=this.tokenizer;return this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:"markdown"})),function(){this.setTokenizer(e)}});
//# sourceMappingURL=ymacs-min.js.map