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="𝄍";continue 13case"%":gch.text="𝄎";continue 14case"%%":gch.text="𝄎";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