+
+%%%%
+% PERCUSSION
+%
+%
+
+
+
+%%
+%
+% The perc clef extent is not coincident with its bbox, since
+% the perc clef needs more space in front than a normal clef.
+%
+
+def draw_percussion_clef(expr reduction) =
+ save reduced_ss, razt;
+
+ reduced_ss# = staff_space# * reduction;
+ define_pixels(reduced_ss);
+ set_char_box(-.67reduced_ss#,2.0reduced_ss#,reduced_ss#,reduced_ss#);
+ razt := 0.45reduced_ss;
+ draw_block((-b,-d),(-b+razt,h));
+ draw_block((w-razt,-d),(w,h));
+enddef;
+
+fet_beginchar("percussion clef", "percussion", "percussionclef")
+ draw_percussion_clef(1.0);
+fet_endchar;
+
+fet_beginchar("percussion clef (reduced)", "percussion_change", "cpercussionclef")
+ draw_percussion_clef(.8);
+fet_endchar;
+
+def draw_tab_T(expr pos, siz, slant) =
+ begingroup;
+ clearxy;
+ pair vx,vy;
+ vx=(xpart siz) * dir 0;
+ vy=(ypart siz) * dir 90;
+
+ penpos1(.75penh, 100);
+ z1=z2+(1/6*vx-.15*vy);
+ penpos2(.9penw, 0);
+ z2l = pos+.75vy;
+ penpos3(penh,-100);
+ z3l = pos+.4vx+vy;
+ penpos4(penh,-90);
+ z4=-.1vy+.5[z3,z5];
+ penpos5(.8penh,-30);
+ x5r=xpart (pos+siz);
+ y5l=ypart (pos+siz);
+
+ penpos10(penw,170);
+ z10=pos+.55vx+.85vy;
+ penpos11(.75[penh,penw],170);
+ z11=z10-.5vy+.025vx;
+ penpos12(penh,100);
+ z12l=(xpart .5[z13,z11],ypart (pos-.025*siz));
+ penpos13(.75penh,60);
+ z13=pos +.2vx+.15vy;
+
+ % penlabels (1,2,3,4,5,10,11,12,13);
+
+ soft_penstroke (z1e..tension 1.1
+ ..z2e
+ ..z3e{right}..tension 1.5
+ ..z4e
+ ..z5e
+ ) slanted slant shifted (slant*-ypart pos,0);
+
+ soft_penstroke (z10e..tension 1.5
+ ..z11e
+ ..z12e..tension 1.1
+ ..z13e{(z13r-z13l) rotated 90}
+ ) slanted slant shifted (slant*-ypart pos,0);
+ endgroup;
+enddef;
+
+def draw_tab_A(expr pos, siz, slant) =
+ begingroup;
+ clearxy;
+ pair vx,vy;
+ vx=(xpart siz) * dir 0;
+ vy=(ypart siz) * dir 90;
+
+ penpos1(.75penh,-110);
+ z1r=pos+.07vy;
+ penpos2(penh,-75);
+ z2r=(.5[x1,x3],ypart pos);
+ penpos3(.25[penh,penw],-30);
+ z3=(.45[x2,x4],.15[y2,y4]);
+ penpos4(1[penh,penw],0);
+ z4=pos+.5vx+.975vy;
+
+ penpos5(1[penh,penw],-180);
+ z5=z4;
+ penpos6(.2[penh,penw],-150);
+ z6l=(.8[x5l,x7l],.9[y5l,y7l]);
+ penpos7(penh,-90);
+ z7r=(.5[x6,x8],ypart pos);
+ penpos8(.75penh,-70);
+ z8r=(xpart(pos+siz),y7r+.075ypart(siz));
+
+ penpos10(penh,-105);
+ z10=.2[z3,z4];
+ penpos11(.9penh,-90);
+ z11=.4[z10,z6]-0.05vy;
+ penpos12(.75penh,-75);
+ z12=.3[z11,z6]+0.02vy;
+
+ % penlabels(1,2,3,4,5,6,7,8,10,11,12);
+
+ soft_penstroke (z1e {(z1r-z1l) rotated 90}
+ ..z2e
+ ..z3e
+ ..z4e
+ ) slanted slant shifted (slant*-ypart pos,0);
+
+ soft_penstroke (z5e
+ ..z6e
+ ..z7e
+ ..z8e {(z8r-z8l) rotated 90}
+ ) slanted slant shifted (slant*-ypart pos,0);
+
+ soft_penstroke (z10e
+ ..z11e
+ ..z12e
+ ) slanted slant shifted (slant*-ypart pos,0);
+
+ endgroup;
+enddef;
+
+def draw_tab_B(expr pos, siz, slant) =
+ begingroup;
+ clearxy;
+ pair vx,vy;
+ vx=(xpart siz) * dir 0;
+ vy=(ypart siz) * dir 90;
+
+ penpos1(.75penh, 100);
+ z1=z2+(.15*vx-.1*vy);
+ penpos2(.9penw, 0);
+ z2l = pos+.75vy;
+ penpos3(penh,-100);
+ z3l = pos+.4vx+1.05vy;
+ penpos4(.8[penh,penw],-180);
+ z4=(xpart(pos+.75siz),.5[y3,y5]);
+ penpos5(.8penh,90);
+ z5=(.5[x10,x4],ypart (pos+.55siz));
+
+ penpos6(.8penh,270);
+ z6=z5;
+ penpos7(penw,180);
+ z7l=(xpart(pos+siz),.5[y6,y8]);
+ penpos8(.8penh,45);
+ z8=.5[z12l,z11l]+.15vx-.05vy;
+
+ penpos10(.75[penh,penw],170);
+ z10=pos+.375vx+.95vy;
+ penpos11(.8[penh,penw],150);
+ z11=z10-.5vy+.04vx;
+ penpos12(penh,100);
+ z12l=(xpart .5[z13,z11],ypart pos);
+ penpos13(.75penh,60);
+ z13=pos+.1vx+.15vy;
+
+ % penlabels (1,2,3,4,5,6,7,8,10,11,12,13);
+
+ soft_penstroke (z1e..tension 1.1
+ ..z2e
+ ..z3e
+ ..z4e
+ ..z5e{left}
+ ) slanted slant shifted (slant*-ypart pos,0);
+
+ soft_penstroke (z6e{right}
+ ..z7e
+ ..z8e{(z8r-z8l) rotated 90}
+ ) slanted slant shifted (slant*-ypart pos,0);
+
+ soft_penstroke (z10e.. tension 1.5
+ ..z11e
+ ..z12e..tension 1.1
+ ..z13e{(z13r-z13l) rotated 90}
+ ) slanted slant shifted (slant*-ypart pos,0);
+ endgroup;
+enddef;
+
+def draw_tab_clef(expr reduction) =
+ save reduced_ss,vx,vy,letterheight,penw,penh;
+ reduced_ss# = staff_space# * reduction;
+ letterheight# = 1.8*reduced_ss#;
+ define_pixels(reduced_ss,letterheight);
+ set_char_box(-.2*reduced_ss#,2.8*reduced_ss#,1.6*letterheight#,1.6*letterheight#);
+
+ %draw_staff (-3,2, 0.5);
+
+ penw = .45reduced_ss;
+ penh = .2reduced_ss;
+
+ draw_tab_T((-b+.15reduced_ss,h-letterheight),
+ (2.1*reduced_ss,letterheight),0.2);
+ draw_tab_A((-b-.05reduced_ss,-.5letterheight +.15reduced_ss),
+ (2.2*reduced_ss,letterheight),0.4);
+ draw_tab_B((-b+.025reduced_ss,-d),
+ (2.1*reduced_ss,letterheight),0.25);
+enddef;
+
+fet_beginchar("tab clef", "tab", "tabclef")
+ draw_tab_clef(1.0);
+fet_endchar;
+
+fet_beginchar("tab clef (reduced)", "tab_change", "ctabclef")
+ draw_tab_clef(.8);