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//abc2svg-jazzchord.js-Adds jazz chord styling to chord symbols
5abc2svg.jazzchord={gch_build:function(of,s){var gch,i,ix,t
6if(!this.cfmt().jazzchord){of(s)
7return}
8for(ix=0;ix<s.a_gch.length;ix++){gch=s.a_gch[ix]
9t=gch.text
10if(gch.type!='g'||t.indexOf('$')>=0)
11continue
12switch(t){case"/":gch.text="&#x1d10d;";continue
13case"%":gch.text="&#x1d10e;";continue
14case"%%":gch.text="&#x1d10e;";continue}
15if(abc2svg.jazzchord.rep){t=t.replace(abc2svg.jazzchord.reg,function(x){return abc2svg.jazzchord.rep[x]})}
16t=t.replace(/-|°|º|ᵒ|0|6\/9|\^/g,function(x){switch(x){case'-':return"–"
17case'0':return"ø"
18case'6/9':return"⁶⁄₉"
19case'^':return"∆"
20default:return"o"}})
21if(t[0]=='(')
22t=t.slice(1,-1)
23i=1
24switch(t[1]){case"\u266f":case"\u266d":i++
25break}
26a=t.match(/([A-G])([#♯b♭]?)([^/]*)\/?(.*)/)
27if(!a)
28continue
29if(!a[2])
30t=a[1]
31else
32t="$6"+a[1]+"$7"+a[2]+"$0"
33if(a[3])
34t+="$8"+a[3]+"$0"
35if(a[4])
36t+="/$9"+a[4]+"$0"
37if(gch.text[0]=='(')
38gch.text='('+t+')'
39else
40gch.text=t}
41of(s)},set_fmt:function(of,cmd,parm){var r,k
42if(cmd=="jazzchord"){this.cfmt().jazzchord=this.get_bool(parm)
43if(parm&&parm.indexOf('=')>0){parm=parm.split(/[\s]+/)
44abc2svg.jazzchord.rep={}
45r=[]
46for(cmd=0;cmd<parm.length;cmd++){k=parm[cmd].split('=')
47if(k.length==2){abc2svg.jazzchord.rep[k[0]]=k[1]
48r.push(k[0])}}
49abc2svg.jazzchord.reg=new RegExp(r.join('|'))}
50return}
51of(cmd,parm)},set_hooks:function(abc){abc.gch_build=abc2svg.jazzchord.gch_build.bind(abc,abc.gch_build)
52abc.set_format=abc2svg.jazzchord.set_fmt.bind(abc,abc.set_format)
53abc.add_style("\n.jc6{letter-spacing:-0.05em}\
54\n.jc7{baseline-shift:30%;font-size:75%}\
55\n.jc8{baseline-shift:25%;font-size:75%;letter-spacing:-0.05em}\
56\n.jc9{font-size:75%;letter-spacing:-0.05em}\
57")
58abc.param_set_font("setfont-6","* * class=jc6")
59abc.param_set_font("setfont-7","* * class=jc7")
60abc.param_set_font("setfont-8","* * class=jc8")
61abc.param_set_font("setfont-9","* * class=jc9")}}
62abc2svg.modules.hooks.push(abc2svg.jazzchord.set_hooks)
63abc2svg.modules.jazzchord.loaded=true
64