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