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//diag.js-module to insert guitar chord diagrams
5abc2svg.diag={do_diag:function(){var glyphs=this.get_glyphs(),voice_tb=this.get_voice_tb()
6if(!glyphs['fb']){var i,j,d,decos=this.get_decos();ns="CDEFGAB",ms=["","m","7","m7","maj7","sus4"]
7this.add_style("\
8\n.diag {font:6px sans-serif}\
9\n.frn {font:italic 7px sans-serif}")
10for(i=0;i<ns.length;i++){for(j=0;j<ms.length;j++){d=ns[i]+ms[j];decos[d]="3 "+d+" 40 0 0"}}
11for(j=0;j<ms.length;j++){d="F♯"+ms[j]
12decos[d]="3 F#"+ms[j]+" 40 0 0"}
13glyphs['fb']='<g id="fb">\n\
14<path class="stroke" stroke-width="0.4" d="\
15M-10 -34h20m0 6h-20\
16m0 6h20m0 6h-20\
17m0 6h20"/>\n\
18<path class="stroke" stroke-width="0.5" d="\
19M-10 -34v24m4 0v-24\
20m4 0v24m4 0v-24\
21m4 0v24m4 0v-24"/>\n\
22</g>';glyphs['nut']='<path id="nut" class="stroke" stroke-width="1.6" d="\
23M-10.2 -34.5h20.4"/>';glyphs['barre']='<path id="barre" class="stroke" stroke-width=".9" d="\
24M-10.2 -31h20.4"/>';glyphs['fr1']='<text id="fr1" x="-20" y="-29" class="frn">fr1</text>';glyphs['fr2']='<text id="fr2" x="-20" y="-29" class="frn">fr2</text>';glyphs['fr3']='<text id="fr3" x="-20" y="-29" class="frn">fr3</text>';glyphs['ddot']='<circle id="ddot" class="fill" r="1.5"/>';glyphs['C']='<g id="C">\n\
25<use xlink:href="#nut"/>\n\
26<use xlink:href="#fb"/>\n\
27<text x="-8,-3,4" y="-36" class="diag">321</text>\n\
28<use x="-6" y="-19" xlink:href="#ddot"/>\n\
29<use x="-2" y="-25" xlink:href="#ddot"/>\n\
30<use x="6" y="-31" xlink:href="#ddot"/>\n\
31</g>';glyphs['Cm']='<g id="Cm">\n\
32<use xlink:href="#barre"/>\n\
33<use xlink:href="#fr3"/>\n\
34<use xlink:href="#fb"/>\n\
35<text x="-4,0,4" y="-36" class="diag">342</text>\n\
36<use x="2" y="-19" xlink:href="#ddot"/>\n\
37<use x="-2" y="-19" xlink:href="#ddot"/>\n\
38<use x="6" y="-25" xlink:href="#ddot"/>\n\
39</g>';glyphs['C7']='<g id="C7">\n\
40<use xlink:href="#nut"/>\n\
41<use xlink:href="#fb"/>\n\
42<text x="-8,-4,0,4" y="-36" class="diag">3241</text>\n\
43<use x="2" y="-19" xlink:href="#ddot"/>\n\
44<use x="-6" y="-19" xlink:href="#ddot"/>\n\
45<use x="-2" y="-25" xlink:href="#ddot"/>\n\
46<use x="6" y="-31" xlink:href="#ddot"/>\n\
47</g>';glyphs['Cm7']='<g id="Cm7">\n\
48<use xlink:href="#barre"/>\n\
49<use xlink:href="#fr3"/>\n\
50<use xlink:href="#fb"/>\n\
51<text x="-12,-4,4" y="-36" class="diag">x32</text>\n\
52<use x="-2" y="-19" xlink:href="#ddot"/>\n\
53<use x="6" y="-25" xlink:href="#ddot"/>\n\
54</g>';glyphs['Cmaj7']='<g id="Cmaj7">\n\
55<use xlink:href="#nut"/>\n\
56<use xlink:href="#fb"/>\n\
57<text x="-12,-8,-4" y="-36" class="diag">x21</text>\n\
58<use x="-2" y="-25" xlink:href="#ddot"/>\n\
59<use x="-6" y="-19" xlink:href="#ddot"/>\n\
60</g>';glyphs['Csus4']='<g id="Csus4">\n\
61<use xlink:href="#barre"/>\n\
62<use xlink:href="#fr3"/>\n\
63<use xlink:href="#fb"/>\n\
64<text x="-12,0,4" y="-36" class="diag">x34</text>\n\
65<use x="6" y="-13" xlink:href="#ddot"/>\n\
66<use x="2" y="-19" xlink:href="#ddot"/>\n\
67</g>';glyphs['D']='<g id="D">\n\
68<use xlink:href="#nut"/>\n\
69<use xlink:href="#fb"/>\n\
70<text x="-12,0,4,8" y="-36" class="diag">x132</text>\n\
71<use x="6" y="-19" xlink:href="#ddot"/>\n\
72<use x="10" y="-25" xlink:href="#ddot"/>\n\
73<use x="2" y="-25" xlink:href="#ddot"/>\n\
74</g>';glyphs['Dm']='<g id="Dm">\n\
75<use xlink:href="#nut"/>\n\
76<use xlink:href="#fb"/>\n\
77<text x="-12,0,4,8" y="-36" class="diag">x231</text>\n\
78<use x="6" y="-19" xlink:href="#ddot"/>\n\
79<use x="2" y="-25" xlink:href="#ddot"/>\n\
80<use x="10" y="-31" xlink:href="#ddot"/>\n\
81</g>';glyphs['D7']='<g id="D7">\n\
82<use xlink:href="#nut"/>\n\
83<use xlink:href="#fb"/>\n\
84<text x="-12,0,4,8" y="-36" class="diag">x312</text>\n\
85<use x="10" y="-25" xlink:href="#ddot"/>\n\
86<use x="2" y="-25" xlink:href="#ddot"/>\n\
87<use x="6" y="-31" xlink:href="#ddot"/>\n\
88</g>';glyphs['Dm7']='<g id="Dm7">\n\
89<use xlink:href="#nut"/>\n\
90<use xlink:href="#fb"/>\n\
91<text x="-12,-8,0,4,8" y="-36" class="diag">xx211</text>\n\
92<use x="2" y="-25" xlink:href="#ddot"/>\n\
93<use x="10" y="-31" xlink:href="#ddot"/>\n\
94<use x="6" y="-31" xlink:href="#ddot"/>\n\
95</g>';glyphs['Dmaj7']='<g id="Dmaj7">\n\
96<use xlink:href="#nut"/>\n\
97<use xlink:href="#fb"/>\n\
98<text x="-12,-8,0,4,8" y="-36" class="diag">xx123</text>\n\
99<use x="10" y="-25" xlink:href="#ddot"/>\n\
100<use x="6" y="-25" xlink:href="#ddot"/>\n\
101<use x="2" y="-25" xlink:href="#ddot"/>\n\
102</g>';glyphs['Dsus4']='<g id="Dsus4">\n\
103<use xlink:href="#nut"/>\n\
104<use xlink:href="#fb"/>\n\
105<text x="-12,-8,0,4,8" y="-36" class="diag">xx123</text>\n\
106<use x="10" y="-19" xlink:href="#ddot"/>\n\
107<use x="6" y="-19" xlink:href="#ddot"/>\n\
108<use x="2" y="-25" xlink:href="#ddot"/>\n\
109</g>';glyphs['E']='<g id="E">\n\
110<use xlink:href="#nut"/>\n\
111<use xlink:href="#fb"/>\n\
112<text x="-8,-4,0" y="-36" class="diag">231</text>\n\
113<use x="-2" y="-25" xlink:href="#ddot"/>\n\
114<use x="-6" y="-25" xlink:href="#ddot"/>\n\
115<use x="2" y="-31" xlink:href="#ddot"/>\n\
116</g>';glyphs['Em']='<g id="Em">\n\
117<use xlink:href="#nut"/>\n\
118<use xlink:href="#fb"/>\n\
119<text x="-8,-4" y="-36" class="diag">23</text>\n\
120<use x="-2" y="-25" xlink:href="#ddot"/>\n\
121<use x="-6" y="-25" xlink:href="#ddot"/>\n\
122</g>';glyphs['E7']='<g id="E7">\n\
123<use xlink:href="#nut"/>\n\
124<use xlink:href="#fb"/>\n\
125<text x="-8,0" y="-36" class="diag">21</text>\n\
126<use x="2" y="-31" xlink:href="#ddot"/>\n\
127<use x="-6" y="-25" xlink:href="#ddot"/>\n\
128</g>';glyphs['Em7']='<g id="Em7">\n\
129<use xlink:href="#nut"/>\n\
130<use xlink:href="#fb"/>\n\
131<text x="-8" y="-36" class="diag">1</text>\n\
132<use x="-6" y="-25" xlink:href="#ddot"/>\n\
133</g>';glyphs['Emaj7']='<g id="Emaj7">\n\
134<use xlink:href="#nut"/>\n\
135<use xlink:href="#fb"/>\n\
136<text x="-8,-4,0" y="-36" class="diag">312</text>\n\
137<use x="2" y="-31" xlink:href="#ddot"/>\n\
138<use x="-2" y="-31" xlink:href="#ddot"/>\n\
139<use x="-6" y="-25" xlink:href="#ddot"/>\n\
140</g>';glyphs['Esus4']='<g id="Esus4">\n\
141<use xlink:href="#nut"/>\n\
142<use xlink:href="#fb"/>\n\
143<text x="-4,0" y="-36" class="diag">12</text>\n\
144<use x="2" y="-25" xlink:href="#ddot"/>\n\
145<use x="-2" y="-25" xlink:href="#ddot"/>\n\
146</g>';glyphs['F']='<g id="F">\n\
147<use xlink:href="#barre"/>\n\
148<use xlink:href="#fr1"/>\n\
149<use xlink:href="#fb"/>\n\
150<text x="-8,-4,0" y="-36" class="diag">342</text>\n\
151<use x="-2" y="-19" xlink:href="#ddot"/>\n\
152<use x="-6" y="-19" xlink:href="#ddot"/>\n\
153<use x="2" y="-25" xlink:href="#ddot"/>\n\
154</g>';glyphs['Fm']='<g id="Fm">\n\
155<use xlink:href="#barre"/>\n\
156<use xlink:href="#fr1"/>\n\
157<use xlink:href="#fb"/>\n\
158<text x="-8,-4" y="-36" class="diag">34</text>\n\
159<use x="-2" y="-19" xlink:href="#ddot"/>\n\
160<use x="-6" y="-19" xlink:href="#ddot"/>\n\
161</g>';glyphs['F7']='<g id="F7">\n\
162<use xlink:href="#barre"/>\n\
163<use xlink:href="#fr1"/>\n\
164<use xlink:href="#fb"/>\n\
165<text x="-8,0" y="-36" class="diag">32</text>\n\
166<use x="2" y="-25" xlink:href="#ddot"/>\n\
167<use x="-6" y="-19" xlink:href="#ddot"/>\n\
168</g>';glyphs['Fm7']='<g id="Fm7">\n\
169<use xlink:href="#barre"/>\n\
170<use xlink:href="#fr1"/>\n\
171<use xlink:href="#fb"/>\n\
172<text x="-8" y="-36" class="diag">3</text>\n\
173<use x="-6" y="-19" xlink:href="#ddot"/>\n\
174</g>';glyphs['Fmaj7']='<g id="Fmaj7">\n\
175<use xlink:href="#barre"/>\n\
176<use xlink:href="#fr1"/>\n\
177<use xlink:href="#fb"/>\n\
178<text x="-8,-4,0" y="-36" class="diag">423</text>\n\
179<use x="2" y="-25" xlink:href="#ddot"/>\n\
180<use x="-2" y="-25" xlink:href="#ddot"/>\n\
181<use x="-6" y="-19" xlink:href="#ddot"/>\n\
182</g>';glyphs['Fsus4']='<g id="Fsus4">\n\
183<use xlink:href="#barre"/>\n\
184<use xlink:href="#fr1"/>\n\
185<use xlink:href="#fb"/>\n\
186<text x="-4,0" y="-36" class="diag">34</text>\n\
187<use x="2" y="-19" xlink:href="#ddot"/>\n\
188<use x="-2" y="-19" xlink:href="#ddot"/>\n\
189</g>';glyphs['F#']='<g id="F#">\n\
190<use xlink:href="#barre"/>\n\
191<use xlink:href="#fr2"/>\n\
192<use xlink:href="#fb"/>\n\
193<text x="-8,-4,0" y="-36" class="diag">342</text>\n\
194<use x="-2" y="-19" xlink:href="#ddot"/>\n\
195<use x="-6" y="-19" xlink:href="#ddot"/>\n\
196<use x="2" y="-25" xlink:href="#ddot"/>\n\
197</g>';glyphs['F#m']='<g id="F#m">\n\
198<use xlink:href="#barre"/>\n\
199<use xlink:href="#fr2"/>\n\
200<use xlink:href="#fb"/>\n\
201<text x="-8,-4" y="-36" class="diag">34</text>\n\
202<use x="-2" y="-19" xlink:href="#ddot"/>\n\
203<use x="-6" y="-19" xlink:href="#ddot"/>\n\
204</g>';glyphs['F#7']='<g id="F#7">\n\
205<use xlink:href="#barre"/>\n\
206<use xlink:href="#fr2"/>\n\
207<use xlink:href="#fb"/>\n\
208<text x="-8,0" y="-36" class="diag">32</text>\n\
209<use x="2" y="-25" xlink:href="#ddot"/>\n\
210<use x="-6" y="-19" xlink:href="#ddot"/>\n\
211</g>';glyphs['F#m7']='<g id="F#m7">\n\
212<use xlink:href="#barre"/>\n\
213<use xlink:href="#fr2"/>\n\
214<use xlink:href="#fb"/>\n\
215<text x="-8" y="-36" class="diag">3</text>\n\
216<use x="-6" y="-19" xlink:href="#ddot"/>\n\
217</g>';glyphs['F#maj7']='<g id="F#maj7">\n\
218<use xlink:href="#barre"/>\n\
219<use xlink:href="#fr2"/>\n\
220<use xlink:href="#fb"/>\n\
221<text x="-8,-4,0" y="-36" class="diag">423</text>\n\
222<use x="2" y="-25" xlink:href="#ddot"/>\n\
223<use x="-2" y="-25" xlink:href="#ddot"/>\n\
224<use x="-6" y="-19" xlink:href="#ddot"/>\n\
225</g>';glyphs['F#sus4']='<g id="F#sus4">\n\
226<use xlink:href="#barre"/>\n\
227<use xlink:href="#fr2"/>\n\
228<use xlink:href="#fb"/>\n\
229<text x="-4,0" y="-36" class="diag">34</text>\n\
230<use x="2" y="-19" xlink:href="#ddot"/>\n\
231<use x="-2" y="-19" xlink:href="#ddot"/>\n\
232</g>';glyphs['G']='<g id="G">\n\
233<use xlink:href="#nut"/>\n\
234<use xlink:href="#fb"/>\n\
235<text x="-12,-8,8" y="-36" class="diag">234</text>\n\
236<use x="10" y="-19" xlink:href="#ddot"/>\n\
237<use x="-10" y="-19" xlink:href="#ddot"/>\n\
238<use x="-6" y="-25" xlink:href="#ddot"/>\n\
239</g>';glyphs['Gm']='<g id="Gm">\n\
240<use xlink:href="#barre"/>\n\
241<use xlink:href="#fr3"/>\n\
242<use xlink:href="#fb"/>\n\
243<text x="-8,-4" y="-36" class="diag">34</text>\n\
244<use x="-2" y="-19" xlink:href="#ddot"/>\n\
245<use x="-6" y="-19" xlink:href="#ddot"/>\n\
246</g>';glyphs['G7']='<g id="G7">\n\
247<use xlink:href="#nut"/>\n\
248<use xlink:href="#fb"/>\n\
249<text x="-12,-8,8" y="-36" class="diag">321</text>\n\
250<use x="-10" y="-19" xlink:href="#ddot"/>\n\
251<use x="-6" y="-25" xlink:href="#ddot"/>\n\
252<use x="10" y="-31" xlink:href="#ddot"/>\n\
253</g>';glyphs['Gm7']='<g id="Gm7">\n\
254<use xlink:href="#barre"/>\n\
255<use xlink:href="#fr3"/>\n\
256<use xlink:href="#fb"/>\n\
257<text x="-8" y="-36" class="diag">3</text>\n\
258<use x="-6" y="-19" xlink:href="#ddot"/>\n\
259</g>';glyphs['Gmaj7']='<g id="Gmaj7">\n\
260<use xlink:href="#nut"/>\n\
261<use xlink:href="#fb"/>\n\
262<text x="-12,-8,8" y="-36" class="diag">312</text>\n\
263<use x="10" y="-25" xlink:href="#ddot"/>\n\
264<use x="-6" y="-25" xlink:href="#ddot"/>\n\
265<use x="-10" y="-19" xlink:href="#ddot"/>\n\
266</g>';glyphs['Gsus4']='<g id="Gsus4">\n\
267<use xlink:href="#barre"/>\n\
268<use xlink:href="#fr3"/>\n\
269<use xlink:href="#fb"/>\n\
270<text x="-4,0" y="-36" class="diag">34</text>\n\
271<use x="2" y="-19" xlink:href="#ddot"/>\n\
272<use x="-2" y="-19" xlink:href="#ddot"/>\n\
273</g>';glyphs['A']='<g id="A">\n\
274<use xlink:href="#nut"/>\n\
275<use xlink:href="#fb"/>\n\
276<text x="-4,0,4" y="-36" class="diag">234</text>\n\
277<use x="6" y="-25" xlink:href="#ddot"/>\n\
278<use x="2" y="-25" xlink:href="#ddot"/>\n\
279<use x="-2" y="-25" xlink:href="#ddot"/>\n\
280</g>';glyphs['Am']='<g id="Am">\n\
281<use xlink:href="#nut"/>\n\
282<use xlink:href="#fb"/>\n\
283<text x="-4,0,4" y="-36" class="diag">231</text>\n\
284<use x="2" y="-25" xlink:href="#ddot"/>\n\
285<use x="-2" y="-25" xlink:href="#ddot"/>\n\
286<use x="6" y="-31" xlink:href="#ddot"/>\n\
287</g>';glyphs['A7']='<g id="A7">\n\
288<use xlink:href="#nut"/>\n\
289<use xlink:href="#fb"/>\n\
290<text x="-4,4" y="-36" class="diag">23</text>\n\
291<use x="6" y="-25" xlink:href="#ddot"/>\n\
292<use x="-2" y="-25" xlink:href="#ddot"/>\n\
293</g>';glyphs['Am7']='<g id="Am7">\n\
294<use xlink:href="#nut"/>\n\
295<use xlink:href="#fb"/>\n\
296<text x="-4,4" y="-36" class="diag">21</text>\n\
297<use x="6" y="-31" xlink:href="#ddot"/>\n\
298<use x="-2" y="-25" xlink:href="#ddot"/>\n\
299</g>';glyphs['Amaj7']='<g id="Amaj7">\n\
300<use xlink:href="#nut"/>\n\
301<use xlink:href="#fb"/>\n\
302<text x="-12,-4,0,4" y="-36" class="diag">x213</text>\n\
303<use x="6" y="-25" xlink:href="#ddot"/>\n\
304<use x="2" y="-31" xlink:href="#ddot"/>\n\
305<use x="-2" y="-25" xlink:href="#ddot"/>\n\
306</g>';glyphs['Asus4']='<g id="Asus4">\n\
307<use xlink:href="#nut"/>\n\
308<use xlink:href="#fb"/>\n\
309<text x="-12,0,4" y="-36" class="diag">x12</text>\n\
310<use x="6" y="-19" xlink:href="#ddot"/>\n\
311<use x="2" y="-25" xlink:href="#ddot"/>\n\
312</g>';glyphs['B']='<g id="B">\n\
313<use xlink:href="#barre"/>\n\
314<use xlink:href="#fr2"/>\n\
315<use xlink:href="#fb"/>\n\
316<text x="-4,0,4" y="-36" class="diag">234</text>\n\
317<use x="6" y="-19" xlink:href="#ddot"/>\n\
318<use x="2" y="-19" xlink:href="#ddot"/>\n\
319<use x="-2" y="-19" xlink:href="#ddot"/>\n\
320</g>';glyphs['Bm']='<g id="Bm">\n\
321<use xlink:href="#barre"/>\n\
322<use xlink:href="#fr2"/>\n\
323<use xlink:href="#fb"/>\n\
324<text x="-4,0,4" y="-36" class="diag">341</text>\n\
325<use x="6" y="-25" xlink:href="#ddot"/>\n\
326<use x="2" y="-19" xlink:href="#ddot"/>\n\
327<use x="-2" y="-19" xlink:href="#ddot"/>\n\
328</g>';glyphs['B7']='<g id="B7">\n\
329<use xlink:href="#nut"/>\n\
330<use xlink:href="#fb"/>\n\
331<text x="-12,-8,-4,0,8" y="-36" class="diag">x2134</text>\n\
332<use x="10" y="-25" xlink:href="#ddot"/>\n\
333<use x="2" y="-25" xlink:href="#ddot"/>\n\
334<use x="-6" y="-25" xlink:href="#ddot"/>\n\
335<use x="-2" y="-31" xlink:href="#ddot"/>\n\
336</g>';glyphs['Bm7']='<g id="Bm7">\n\
337<use xlink:href="#barre"/>\n\
338<use xlink:href="#fr2"/>\n\
339<use xlink:href="#fb"/>\n\
340<text x="-12,0,8" y="-36" class="diag">x32</text>\n\
341<use x="-2" y="-19" xlink:href="#ddot"/>\n\
342<use x="6" y="-25" xlink:href="#ddot"/>\n\
343</g>';glyphs['Bmaj7']='<g id="Bmaj7">\n\
344<use xlink:href="#barre"/>\n\
345<use xlink:href="#fr2"/>\n\
346<use xlink:href="#fb"/>\n\
347<text x="-12,-4,0,4" y="-36" class="diag">x324</text>\n\
348<use x="6" y="-19" xlink:href="#ddot"/>\n\
349<use x="2" y="-25" xlink:href="#ddot"/>\n\
350<use x="-2" y="-19" xlink:href="#ddot"/>\n\
351</g>';glyphs['Bsus4']='<g id="Bsus4">\n\
352<use xlink:href="#barre"/>\n\
353<use xlink:href="#fr2"/>\n\
354<use xlink:href="#fb"/>\n\
355<text x="-12,0,4" y="-36" class="diag">x34</text>\n\
356<use x="6" y="-19" xlink:href="#ddot"/>\n\
357<use x="2" y="-25" xlink:href="#ddot"/>\n\
358</g>'}
359function ch_cnv(t){var a=t.match(/[A-G][#♯b♭]?([^/]*)\/?/)
360if(a&&a[1]){a[2]=abc2svg.ch_alias[a[1]]
361if(a[2]!=undefined)
362t=t.replace(a[1],a[2])}
363return t}
364var s,i,gch
365for(s=voice_tb[0].sym;s;s=s.next){if(!s.a_gch)
366continue
367for(i=0;i<s.a_gch.length;i++){gch=s.a_gch[i]
368if(!gch||gch.type!='g'||gch.capo)
369continue
370this.deco_cnv([ch_cnv(gch.otext)],s,null)}}},output_music:function(of){if(this.cfmt().diag)
371abc2svg.diag.do_diag.call(this)
372of()},set_fmt:function(of,cmd,param){if(cmd=="diagram"){this.cfmt().diag=param
373return}
374of(cmd,param)},set_hooks:function(abc){abc.output_music=abc2svg.diag.output_music.bind(abc,abc.output_music);abc.set_format=abc2svg.diag.set_fmt.bind(abc,abc.set_format)}}
375abc2svg.modules.hooks.push(abc2svg.diag.set_hooks);abc2svg.modules.diagram.loaded=true
376