0){g=a;for(var o=0;og){g=this.voices[p].getNextX();d=this.voices[p].getSpacingUnits()}}this.spacingunits+=d;this.w=g;for(p=0;p6){m=0}}}}var g=l.y;for(var d=0;d1){l.printStem(this.startx,0.6,h,c)}l.y=g};if(!window.ABCJS){window.ABCJS={}}if(!window.ABCJS.write){window.ABCJS.write={}}(function(){var a=5;ABCJS.write.TempoElement=function(b){this.tempo=b;this.tempoHeightAbove=a;this.pitch=undefined};ABCJS.write.TempoElement.prototype.setUpperAndLowerElements=function(b){this.pitch=b.tempoHeightAbove};ABCJS.write.TempoElement.prototype.setX=function(b){this.x=b
};ABCJS.write.TempoElement.prototype.draw=function(v){var m=this.x;if(this.pitch===undefined){window.console.error("Tempo Element y-coordinate not set.")}var k=v.calcY(this.pitch);var q;if(this.tempo.preString){q=v.renderText(m,k,this.tempo.preString,"tempofont","tempo","start");var B=q.getBBox().width;var g=B/this.tempo.preString.length;m+=B+g}if(this.tempo.duration){var h=0.75;var z=this.pitch-a+1;var b=this.tempo.duration[0];var p=new ABCJS.write.AbsoluteElement(this.tempo,b,1,"tempo");var w=Math.floor(Math.log(b)/Math.log(2));var s=0;for(var o=Math.pow(2,w),l=o/2;o=this.children.length)};ABCJS.write.VoiceElement.prototype.getDurationIndex=function(){return this.durationindex-(this.children[this.i]&&(this.children[this.i].duration>0)?0:5e-7)
};ABCJS.write.VoiceElement.prototype.getSpacingUnits=function(){return Math.sqrt(this.spacingduration*8)};ABCJS.write.VoiceElement.prototype.getNextX=function(){return Math.max(this.minx,this.nextx)};ABCJS.write.VoiceElement.prototype.beginLayout=function(a){this.i=0;this.durationindex=0;this.startx=a;this.minx=a;this.nextx=a;this.spacingduration=0};ABCJS.write.VoiceElement.prototype.layoutOneItem=function(a,d){var c=this.children[this.i];if(!c){return 0}var b=a-this.minx;if(b0?"+"+e:e);l=d[3]?d[3]=="0"?"0":d[3].charAt(1):" ";b=d[5]-String(e).length;j=d[5]?str_repeat(l,b):"";k.push(d[4]?e+j:j+e)}else{throw ("Huh ?!")}}}h=h.substring(d[0].length)}return k.join("")};if(!window.ABCJS){window.ABCJS={}}if(!window.ABCJS.edit){window.ABCJS.edit={}}window.ABCJS.edit.EditArea=function(a){this.textarea=document.getElementById(a);this.initialText=this.textarea.value;this.isDragging=false};window.ABCJS.edit.EditArea.prototype.addSelectionListener=function(a){this.textarea.onmousemove=function(b){if(this.isDragging){a.fireSelectionChanged()}}};window.ABCJS.edit.EditArea.prototype.addChangeListener=function(a){this.changelistener=a;this.textarea.onkeyup=function(){a.fireChanged()};this.textarea.onmousedown=function(){this.isDragging=true;a.fireSelectionChanged()};this.textarea.onmouseup=function(){this.isDragging=false;a.fireChanged()};this.textarea.onchange=function(){a.fireChanged()}};window.ABCJS.edit.EditArea.prototype.getSelection=function(){return{start:this.textarea.selectionStart,end:this.textarea.selectionEnd}};window.ABCJS.edit.EditArea.prototype.setSelection=function(c,a){if(this.textarea.setSelectionRange){this.textarea.setSelectionRange(c,a)}else{if(this.textarea.createTextRange){var b=this.textarea.createTextRange();b.collapse(true);b.moveEnd("character",a);b.moveStart("character",c);b.select()}}this.textarea.focus()};window.ABCJS.edit.EditArea.prototype.getString=function(){return this.textarea.value};window.ABCJS.edit.EditArea.prototype.setString=function(a){this.textarea.value=a;this.initialText=this.getString();if(this.changelistener){this.changelistener.fireChanged()}};window.ABCJS.edit.EditArea.prototype.getElem=function(){return this.textarea};window.ABCJS.Editor=function(a,b){if(b.indicate_changed){this.indicate_changed=true}if(typeof a==="string"){this.editarea=new window.ABCJS.edit.EditArea(a)}else{this.editarea=a}this.editarea.addSelectionListener(this);this.editarea.addChangeListener(this);if(b.canvas_id){this.div=document.getElementById(b.canvas_id)}else{if(b.paper_id){this.div=document.getElementById(b.paper_id)}else{this.div=document.createElement("DIV");this.editarea.getElem().parentNode.insertBefore(this.div,this.editarea.getElem())}}if(b.generate_midi||b.midi_id){if(b.midi_id){this.mididiv=document.getElementById(b.midi_id)}else{this.mididiv=this.div}}if(b.generate_warnings||b.warnings_id){if(b.warnings_id){this.warningsdiv=document.getElementById(b.warnings_id)}else{this.warningsdiv=this.div}}this.parserparams=b.parser_options||{};this.midiparams=b.midi_options||{};this.onchangeCallback=b.onchange;this.engraverparams=b.render_options||{};if(b.gui){this.target=document.getElementById(a);this.engraverparams.editable=true}this.oldt="";this.bReentry=false;this.parseABC();this.modelChanged();this.addClassName=function(d,e){var c=function(f,g){var h=f.className;return(h.length>0&&(h===g||new RegExp("(^|\\s)"+g+"(\\s|$)").test(h)))};if(!c(d,e)){d.className+=(d.className?" ":"")+e}return d};this.removeClassName=function(c,d){c.className=window.ABCJS.parse.strip(c.className.replace(new RegExp("(^|\\s+)"+d+"(\\s+|$)")," "));return c};this.setReadOnly=function(e){var d="abc_textarea_readonly";var c=this.editarea.getElem();if(e){c.setAttribute("readonly","yes");this.addClassName(c,d)}else{c.removeAttribute("readonly");this.removeClassName(c,d)}}};window.ABCJS.Editor.prototype.renderTune=function(a,g,h){var e=new ABCJS.TuneBook(a);var d=window.ABCJS.parse.Parse();d.parse(e.tunes[0].abc,g);var b=d.getTune();var f=Raphael(h,800,400);var c=new ABCJS.write.EngraverController(f,this.engraverparams);c.engraveABC(b)};window.ABCJS.Editor.prototype.modelChanged=function(){if(this.tunes===undefined){if(this.mididiv!==undefined&&this.mididiv!==this.div){this.mididiv.innerHTML=""}this.div.innerHTML="";return}if(this.bReentry){return}this.bReentry=true;this.timerId=null;this.div.innerHTML="";var c=Raphael(this.div,800,400);this.engraver_controller=new ABCJS.write.EngraverController(c,this.engraverparams);
this.engraver_controller.engraveABC(this.tunes);this.tunes[0].engraver=this.engraver_controller;if(ABCJS.midi.MidiWriter&&this.mididiv){if(this.mididiv!==this.div){this.mididiv.innerHTML=""}var b=new ABCJS.midi.MidiWriter(this.mididiv,this.midiparams);b.addListener(this.engraver_controller);b.writeABC(this.tunes[0])}if(this.warningsdiv){this.warningsdiv.innerHTML=(this.warnings)?this.warnings.join("
"):"No errors"}if(this.target){var a=new window.ABCJS.transform.TextPrinter(this.target,true);a.printABC(this.tunes[0])}this.engraver_controller.addSelectListener(this);this.updateSelection();this.bReentry=false};window.ABCJS.Editor.prototype.paramChanged=function(a){this.engraverparams=a;this.oldt="";this.fireChanged()};window.ABCJS.Editor.prototype.parseABC=function(){var d=this.editarea.getString();if(d===this.oldt){this.updateSelection();return false}this.oldt=d;if(d===""){this.tunes=undefined;this.warnings="";return true}var f=new ABCJS.TuneBook(d);this.tunes=[];this.warnings=[];for(var c=0;c0&&(k===j||new RegExp("(^|\\s)"+j+"(\\s|$)").test(k)))};if(!f(g,h)){g.className+=(g.className?" ":"")+h}return g};var a=function(f,g){f.className=window.ABCJS.parse.strip(f.className.replace(new RegExp("(^|\\s+)"+g+"(\\s+|$)")," "));return f};var e="abc_textarea_dirty";var b=this.editarea.getElem();if(d){c(b,e)}else{a(b,e)}};window.ABCJS.Editor.prototype.fireChanged=function(){if(this.bIsPaused){return}if(this.parseABC()){var a=this;if(this.timerId){clearTimeout(this.timerId)}this.timerId=setTimeout(function(){a.modelChanged()},300);var b=this.isDirty();if(this.wasDirty!==b){this.wasDirty=b;this.setDirtyStyle(b)}if(this.onchangeCallback){this.onchangeCallback(this)}}};window.ABCJS.Editor.prototype.setNotDirty=function(){this.editarea.initialText=this.editarea.getString();this.wasDirty=false;this.setDirtyStyle(false)};window.ABCJS.Editor.prototype.isDirty=function(){if(this.indicate_changed===undefined){return false}return this.editarea.initialText!==this.editarea.getString()};window.ABCJS.Editor.prototype.highlight=function(a){this.editarea.setSelection(a.startChar,a.endChar)};window.ABCJS.Editor.prototype.pause=function(a){this.bIsPaused=a;if(!a){this.fireChanged()}};window.ABCJS.Editor.prototype.pauseMidi=function(a){if(a&&this.mididiv){this.mididivSave=this.mididiv;this.addClassName(this.mididiv,"hidden");this.mididiv=null}else{if(!a&&this.mididivSave){this.mididiv=this.mididivSave;this.removeClassName(this.mididiv,"hidden");this.mididivSave=null}}};