1// abc2svg - ABC to SVG translator 2// @source: https://chiselapp.com/user/moinejf/repository/abc2svg 3// Copyright (C) 2014-2020 Jean-Francois Moine - LGPL3+ 4//capo.js-module to add a capo chord line 5abc2svg.capo={gch_build:function(of,s){var t,i,gch,gch2,i2,abc=this,p_v=abc.get_curvoice(),a_gch=s.a_gch 6if(p_v.capo&&a_gch){t=p_v.capo 7i=0 8while(1){gch=a_gch[i++] 9if(!gch) 10return 11if(gch.type=='g') 12break} 13gch2=Object.create(gch) 14gch2.capo=false 15gch2.text=abc.gch_tr1(gch2.text,-abc2svg.ifb40[t%12]) 16if(!p_v.capo_first){p_v.capo_first=true 17gch2.text+=" (capo: "+t.toString()+")"} 18gch2.font=abc.get_font(abc.cfmt().capofont?"capo":"annotation") 19a_gch.splice(i,0,gch2) 20gch.capo=true} 21of(s)},set_fmt:function(of,cmd,param){if(cmd=="capo"){this.set_v_param("capo_",param) 22return} 23of(cmd,param)},set_vp:function(of,a){var i,v,p_v=this.get_curvoice() 24for(i=0;i<a.length;i++){if(a[i]=="capo_="){v=Number(a[++i]) 25if(isNaN(v)||v<=0) 26this.syntax(1,"Bad fret number in %%capo") 27else 28p_v.capo=v 29break}} 30of(a)},set_hooks:function(abc){abc.gch_build=abc2svg.capo.gch_build.bind(abc,abc.gch_build);abc.set_format=abc2svg.capo.set_fmt.bind(abc,abc.set_format) 31abc.set_vp=abc2svg.capo.set_vp.bind(abc,abc.set_vp)}} 32abc2svg.modules.hooks.push(abc2svg.capo.set_hooks);abc2svg.modules.capo.loaded=true 33