X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Ffeta-eindelijk.mf;h=4da3607f7ff46678e40f9c0d2d5c4eea09c9b163;hb=251d6e2d7fd25808d8320baaf7b2c21ce16c72ae;hp=d6d7cfcf5448b752cb7d9d99b477cb7c350a9a9b;hpb=2f558a5087e74382789fc16e34eff918a94987ae;p=lilypond.git diff --git a/mf/feta-eindelijk.mf b/mf/feta-eindelijk.mf index d6d7cfcf54..4da3607f7f 100644 --- a/mf/feta-eindelijk.mf +++ b/mf/feta-eindelijk.mf @@ -1,8 +1,10 @@ -% eindelijk.mf -% LilyPond's own rest(s) - -% todo breve/longa rests - +% feta-eindelijk.mf -- implement rest symbols -*-Fundamental-*- +% +% part of LilyPond's pretty-but-neat music font +% +% source file of the Feta (not the Font-En-Tja) music font +% +% (c) 1997--2002 Jan Nieuwenhuizen fet_begingroup("rests"); @@ -11,7 +13,7 @@ begingroup thick#:=1/16designsize; define_blacker_pixels(thick); -rthin:=1/8*interline; +rthin:=1/8*staff_space; % rthick:=2rthin; rthick:=2thick+rthin; @@ -23,37 +25,31 @@ enddef; % save stem, ball_crook_stem, ball_crook_balldiam, flare; +% stem#:=1/8*staff_space#; +stem# = 1/5staff_space#; +% flare# = 2/3staff_space#; +flare# = 2/3staff_space# - 1/8stafflinethickness#; + define_pixels(stem,flare); -% stem#:=1/8*interline#; -stem# = 1/5interline#; + ball_crook_stem = stem; ball_crook_balldiam =flare; -flare# = 2/3interline#; -save block_rest_y, block_rest_x; -block_rest_y# = 5/8 interline#; -block_rest_x# = 3/2 interline#; +save block_rest_y, block_rest_x; -define_pixels(block_rest_y, block_rest_x); +save breve_rest_y, breve_rest_x; -def block_rest= - pickup pencircle scaled blot_diameter; +breve_rest_y# = staff_space#; +breve_rest_x# = 3/5 staff_space#; +block_rest_y# = 5/8 staff_space#; +block_rest_x# = 3/2 staff_space#; - bot y1 = 0; - top y2 = block_rest_y; - y3 = y2; - y4 = y1; +define_pixels(block_rest_y, block_rest_x); - rt x1 = block_rest_x; - x2 = x1; - lft x3 = 0; - x4 = x3; - save p; - path p; - p:=z1 -- z2 -- z3 -- z4 -- cycle; - draw_rounded_path(p, blot_diameter); -enddef; +def block_rest = + draw_block ((0,0), (block_rest_x, block_rest_y)); + enddef; fet_beginchar( "whole rest", "0", "wholerest"); set_char_box(0, block_rest_x#, @@ -72,33 +68,68 @@ fet_endchar; % should use ledgerline thickness? % fet_beginchar( "whole rest (outside staff)", "0o", "outsidewholerest"); - set_char_box(block_rest_y#, block_rest_x# + block_rest_y#, + set_char_box(0, block_rest_x#, block_rest_y#, ledgerlinethickness#/2); block_rest; currentpicture := currentpicture shifted (0, - block_rest_y); pickup pencircle scaled ledgerlinethickness; y5 = y6 = 0; - lft x5 = - b; - rt x6 = w; - draw z5 .. z6; + lft x5 = - b - block_rest_y; + rt x6 = w + block_rest_y; + draw_gridline(z5,z6,ledgerlinethickness); fet_endchar; fet_beginchar("half rest (outside staff)", "1o", "outsidehalfrest"); - set_char_box(block_rest_y#, block_rest_x#+ block_rest_y#, + set_char_box(0, block_rest_x#, ledgerlinethickness#/2, block_rest_y#); block_rest; pickup pencircle scaled ledgerlinethickness; y5 = y6 = 0; - lft x5 = - b; - rt x6 = w; - draw z5 .. z6; + lft x5 = - b - block_rest_y ; + rt x6 = w + block_rest_y; + draw_gridline (z5,z6,ledgerlinethickness); fet_endchar; + + +define_pixels(breve_rest_y, breve_rest_x, multi_rest_x, multi_beam_height); + +fet_beginchar("maxima rest", "-3", "maximarest"); + set_char_box(0, 3 breve_rest_x#, breve_rest_y#, breve_rest_y#); + draw_block ((0,-floor (breve_rest_y)), (breve_rest_x, floor (breve_rest_y))); + addto currentpicture also currentpicture shifted (2 breve_rest_x, 0); +fet_endchar; + +fet_beginchar("longa rest", "-2", "longarest"); + set_char_box(0, breve_rest_x#, breve_rest_y#, breve_rest_y#); + draw_block ((0,-floor (breve_rest_y)), (breve_rest_x, floor (breve_rest_y))); +fet_endchar; + +fet_beginchar("breve rest", "-1", "breverest"); + set_char_box(0, breve_rest_x#, 0, breve_rest_y#); + draw_block ((0,0), (breve_rest_x, floor (breve_rest_y))); +fet_endchar; + + +tracingvariables := 1; + fet_beginchar("Quarter rest","2","quartrest"); - save alpha; +% draw_staff (-2, 2, 0.0); + save alpha, yshift, height; alpha:=-50; + yshift# = -1.25 staff_space#; + height# = 2.8125 staff_space#; + define_pixels (yshift, height); + save xcenter; + xcenter = -0.1 staff_space; + + set_char_box(0, 0.95 staff_space#, + -yshift#, + yshift# + height#); + save ne,nw,se,sw; pair ne,nw,se,sw; + se=dir alpha; nw=dir (alpha+180); ne=dir (alpha+90); sw=dir (alpha-90); penpos1(rthin,alpha+90); @@ -117,136 +148,432 @@ fet_beginchar("Quarter rest","2","quartrest"); % z13=z2r+1/2rthin*ne; z13=z2r+1/2rthin*ne+1/2rthin*nw; - y1l=7/2interline; x1l=1/3interline; - z2r=z1+interline*se; + y1r = h; + x1l=xcenter + 1/3staff_space; + z2r=z1+staff_space*se; z3=1/2[z2,z4]; - x4=3/8interline; y4=2interline; - z5=z4l+1.3interline*se; - x6l=x4l; y6l=y4r; - x7=2/5interline; y7=3/4interline; + x4= xcenter + 3/8staff_space; + y4= 0; + z5=z4l+1.3staff_space*se; + x6l=x4l; + y6l=y4r; + x7= xcenter + 2/5staff_space; + y7= -d; + fill z1l{se}..{se}z10..z3l..z11{se}..{se}z5l..z5r{nw}..{nw}z12..z3r..z13{nw}..{nw}z1r.. cycle; fill z5r{nw}..tension1.4..z6l..tension1.4..{se}z7l..z7r{nw}..tension1.4..z6r..tension1.4..{se}z5l..cycle; penlabels(1,2,3,4,5,6,7); penlabels(10,11,12,13); - set_char_box(0, 27/25interline#, -3/4 interline#, 18/5interline#); + +% 3/4 staff_space# + yshift#, +% 18/5staff_space# + yshift#) + fet_endchar; def rest_crook(expr a, w) = balled_crook(a, w, ball_crook_balldiam, ball_crook_stem) enddef; -fet_beginchar("8th rest","3","eighthrest"); - set_char_box(0, 4/3interline#,-interline#, 8/3interline#+2stafflinethickness#); - save x,y, ht; - ht = h + d; - x1=w-stem/6; y1=ht-flare/4; - rest_crook (z1,w-stem/6); - z2-z1=whatever*dir70; - y2=stem/2; - brush(z1,2/3stem,z2,stem); - % ugh - currentpicture:=currentpicture shifted (0,interline); - fet_endchar; +% +% Notes about 8th rest: +% +% * 8th rest should be no wider than the black note head +% +% * The inside corner of the horizontal portion is usually a little blotted. +% +% * The top of the crook chops off the vertical brush +% +% * The crook widens a little +% +% * The bottom of the brush is slightly flat, as it has to align with +% stafflines if it is inside the staff. +% +% * The top of the brush usually is a little lower than the top of bulb. +% +% * The bulb can vary. Sometimes it is open (like in the clefs). Sometimes +% it is closed, or even a flare. +% + +% from an email to Rune Zedeler: +% +% +% For example, the 8th rest was vaguely based on a book with trumpet +% studies by Duhem, and by Baerenreiters cello suites. I included my +% findings in a comment in the mf file. One of the things that I tried +% to do was make the rest a little lighter and narrower than the black +% note head. I think this looks better in polyphonic music, when the +% rest is below a head from a different voice. +% +% + + +def draw_rest_bulb(expr ycenter, ycut, pat, stretch) = +begingroup; + save x,y,pt; + z1l = point 0 of pat; + z2l = point 1 of pat; + z2r = point 3 of pat; + z1r = point 4 of pat; + z1 = 0.5[z1l,z1r]; + z2 = 0.5[z2l,z2r]; + y10 = ycenter; + z10 = whatever[z2, z1] + left*bulb_diam*stretch; + + + z3 = z10+bulb_diam/2.15*dir(-72) ; + + + x4 = x10+bulb_diam*.62 ; + y4 := ceiling (y10 - 2 stafflinethickness + crook_thin); + + z5 = z10 + up*bulb_diam/2 + right*stafflinethickness/3; + + + z7 = 0.5 [z4, z5] + (0.45 stafflinethickness,0.4 stafflinethickness); + x8 = x10-0.4bulb_diam; + y8 = y10 + 0.25 stafflinethickness; + + z6 = whatever [z1l, z2l]; + z6 = z3+whatever * dir(12); + + (pt,whatever) = pat intersectiontimes ((0,ycut)--(w,ycut)); + + fill point pt of pat {-direction pt of pat} .. tension 2 + .. z4{left} .. tension 0.9 .. z7 + .. z5{left} .. z8 .. z3{right} + .. {curl 0.2} z6 {right} .. tension 10 .. {left} point pt of pat -- cycle; + + labels(3, 4, 5, 6, 7, 8, 9, 10); + +endgroup; +enddef; + +def draw_eighth_rest = + save width, bulb_diam, thin, thick; + save ycenter, crook_thick, crook_thin; + save crook_dir, lower_brush, pat; + pair crook_dir; + path pat; + + width# := 1.0 staff_space#; + bulb_diam# := 0.64 staff_space#; + thin# := 1.2 stafflinethickness#; + thick# := 2.2 stafflinethickness#; + crook_thick# := 1.8 stafflinethickness#; + crook_thin := 1.3 stafflinethickness; + + lower_brush := 1.5 stafflinethickness; + + define_pixels (width, bulb_diam, thin, thick, crook_thick); + set_char_box (0, width#, + 1.0 staff_space# + 0.5 stafflinethickness#, 0.5 staff_space# + bulb_diam#/2); + + penpos1 (thick, 0); + penpos2 (thin, 10); + + y1 = - staff_space ; + y2 = h - lower_brush; + x2r = width; + z2 = z1 + whatever*dir(72); + z9 = z2 + 0.5 stafflinethickness * dir (angle(z2 - z1)- 10); + pat = z1l --- z2l .. z9 .. z2r --- simple_serif (z1r, z1l, -40) .. cycle; + fill pat; + + + draw_rest_bulb(0.5 staff_space , y2r , pat , 1.0); + penlabels (1, 2); + labels(9); + + % draw_staff (-2,2,0.0); -def tand(expr alpha) = - (sind alpha/cosd alpha); enddef; +fet_beginchar("Classical quarter rest","2classical","clasquartrest"); + draw_eighth_rest; + currentpicture := currentpicture xscaled -1 shifted (w,0); + fet_endchar; + +fet_beginchar("8th rest","3","eighthrest"); + draw_eighth_rest; + fet_endchar; + fet_beginchar("16th rest","4","sixteenthrest"); - save alpha,cw,h,w; - alpha=74; - cw#=7/6interline#; - h#=5/3interline#+interline#+2stafflinethickness#; - w#=cw#+(h#-3/2interline#)/tand(alpha); - set_char_box(0,w#,0,h#); - define_pixels(cw); - save x,y; - x1=w-stem/6; y1=h-flare/4; - z2-z1=whatever*dir alpha; - y2=stem/2; - brush(z1,2/3stem,z2,stem); - rest_crook (z1,cw); - z3-z1=whatever*dir alpha; - y3=y1-interline; - rest_crook (z3,cw); - penlabels(1,2); + save width, bulb_diam, thin, thick; + save ycenter, crook_thick, crook_thin; + save crook_dir, lower_brush, pat; + pair crook_dir; + path pat; + + width# := 1.2 staff_space#; + bulb_diam# := 0.64 staff_space#; + thin# := 1.2 stafflinethickness#; + thick# := 2.2 stafflinethickness#; + crook_thick# := 1.8 stafflinethickness#; + crook_thin := 1.3 stafflinethickness; + + lower_brush := 1.5 stafflinethickness; + + define_pixels (width, bulb_diam, thin, thick, crook_thick); + set_char_box (0, width#, + 2.0 staff_space# + 0.5 stafflinethickness#, 0.5 staff_space# + bulb_diam#/2); + + penpos1 (thick, 0); + penpos2 (thin, 10); + + y1 = -2 staff_space ; + y2 = h - lower_brush; + x2r = width; + z2 = z1 + whatever*dir(74); + z9 = z2 + 0.5 stafflinethickness * dir (angle(z2 - z1)- 10); + pat = z1l --- z2l .. z9 .. z2r --- simple_serif (z1r, z1l, -40) .. cycle; + fill pat; + + + draw_rest_bulb(0.5 staff_space , y2r , pat , 0.98); + draw_rest_bulb(-0.5 staff_space , (-0.5+0.2)*staff_space , pat , 1.02); + penlabels (1, 2); + labels(9); + + % draw_staff (-2,2,0.0); fet_endchar; fet_beginchar("32th rest","5","thirtysecondrest"); - save alpha,cw,h,w; - alpha=76; - cw#=7/6interline#; - h#=5/3interline#+2interline#+2stafflinethickness#; - w#=cw#+(h#-3/2interline#)/tand(alpha); - set_char_box(0,w#,0,h#); - define_pixels(cw); - save x,y; - x1=w-stem/6; y1=h-flare/4; - z2-z1=whatever*dir alpha; - y2=stem/2; - brush(z1,2/3stem,z2,stem); - rest_crook (z1,cw); - z3-z1=whatever*dir alpha; - y3=y1-interline; - rest_crook (z3,cw); - z4-z1=whatever*dir alpha; - y4=y1-2interline; - rest_crook (z4,cw); + save width, bulb_diam, thin, thick; + save ycenter, crook_thick, crook_thin; + save crook_dir, lower_brush, pat; + pair crook_dir; + path pat; + + width# := 1.3 staff_space#; + bulb_diam# := 0.64 staff_space#; + thin# := 1.2 stafflinethickness#; + thick# := 2.2 stafflinethickness#; + crook_thick# := 1.8 stafflinethickness#; + crook_thin := 1.3 stafflinethickness; + + lower_brush := 1.5 stafflinethickness; + + define_pixels (width, bulb_diam, thin, thick, crook_thick); + set_char_box (0, width#, + 2.0 staff_space# + 0.5 stafflinethickness#, 1.5 staff_space# + bulb_diam#/2); + + penpos1 (thick, 0); + penpos2 (thin, 10); + + y1 = -2 staff_space ; + y2 = h - lower_brush; + x2r = width; + z2 = z1 + whatever*dir(76); + z9 = z2 + 0.5 stafflinethickness * dir (angle(z2 - z1)- 10); + pat = z1l --- z2l .. z9 .. z2r --- simple_serif (z1r, z1l, -40) .. cycle; + fill pat; + + + draw_rest_bulb(1.5 staff_space , y2r , pat , 0.96); + draw_rest_bulb(0.5 staff_space , (0.5+0.2)*staff_space , pat , 1.00); + draw_rest_bulb(-0.5 staff_space , (-0.5+0.21)*staff_space , pat , 1.04); + penlabels (1, 2); + labels(9); + + % draw_staff (-2,2,0.0); fet_endchar; fet_beginchar("64th rest","6","sixtyfourthrest"); - save alpha,cw,h,w; - alpha=78; - cw#=7/6interline#; - h#=5/3interline#+3interline#+2stafflinethickness#; - w#=cw#+(h#-3/2interline#)/tand(alpha); - set_char_box(0,w#,0,h#); - define_pixels(cw); - save x,y; - x1=w-stem/6; y1=h-flare/4; - z2-z1=whatever*dir alpha; - y2=stem/2; - brush (z1,2/3stem,z2,stem); - rest_crook (z1,cw); - z3-z1=whatever*dir alpha; - y3=y1-interline; - rest_crook (z3,cw); - z4-z1=whatever*dir alpha; - y4=y1-2interline; - rest_crook (z4,cw); - z5-z1=whatever*dir alpha; - y5=y1-3interline; - rest_crook (z5,cw); + save width, bulb_diam, thin, thick; + save ycenter, crook_thick, crook_thin; + save crook_dir, lower_brush, pat; + pair crook_dir; + path pat; + + width# := 1.4 staff_space#; + bulb_diam# := 0.64 staff_space#; + thin# := 1.2 stafflinethickness#; + thick# := 2.2 stafflinethickness#; + crook_thick# := 1.8 stafflinethickness#; + crook_thin := 1.3 stafflinethickness; + + lower_brush := 1.5 stafflinethickness; + + define_pixels (width, bulb_diam, thin, thick, crook_thick); + set_char_box (0, width#, + 3.0 staff_space# + 0.5 stafflinethickness#, 1.5 staff_space# + bulb_diam#/2); + + penpos1 (thick, 0); + penpos2 (thin, 10); + + y1 = -3 staff_space ; + y2 = h - lower_brush; + x2r = width; + z2 = z1 + whatever*dir(78); + z9 = z2 + 0.5 stafflinethickness * dir (angle(z2 - z1)- 10); + pat = z1l --- z2l .. z9 .. z2r --- simple_serif (z1r, z1l, -40) .. cycle; + fill pat; + + + draw_rest_bulb(1.5 staff_space , y2r , pat , 0.94); + draw_rest_bulb(0.5 staff_space , (0.5+0.20)*staff_space , pat , 0.98); + draw_rest_bulb(-0.5 staff_space , (-0.5+0.21)*staff_space , pat , 1.02); + draw_rest_bulb(-1.5 staff_space , (-1.5+0.22)*staff_space , pat , 1.06); + penlabels (1, 2); + labels(9); + + % draw_staff (-2,2,0.0); fet_endchar; -fet_beginchar("128th rest","7","hundredtwentyeighthrest"); - save alpha,cw,h,w; - alpha=78; - cw#=7/6interline#; - h#=5/3interline#+4interline#+2stafflinethickness#; - w#=cw#+(h#-3/2interline#)/tand(alpha); - set_char_box(0,w#,0,h#); - define_pixels(cw); - save x,y; - x1=w-stem/6; y1=h-flare/4; - z2-z1=whatever*dir alpha; - y2=stem/2; - brush (z1,2/3stem,z2,stem); - rest_crook (z1,cw); - z3-z1=whatever*dir alpha; - y3=y1-interline; - rest_crook (z3,cw); - z4-z1=whatever*dir alpha; - y4=y1-2interline; - rest_crook (z4,cw); - z5-z1=whatever*dir alpha; - y5=y1-3interline; - rest_crook (z5,cw); - z6-z1=whatever*dir alpha; - y6=y1-4interline; - rest_crook (z6,cw); +fet_beginchar("128th rest","7","hundredtwentyeighthrest"); + save width, bulb_diam, thin, thick; + save ycenter, crook_thick, crook_thin; + save crook_dir, lower_brush, pat; + pair crook_dir; + path pat; + + width# = 1.5 staff_space#; + bulb_diam# := 0.64 staff_space#; + thin# := 1.2 stafflinethickness#; + thick# := 2.2 stafflinethickness#; + crook_thick# := 1.8 stafflinethickness#; + crook_thin := 1.3 stafflinethickness; + + lower_brush := 1.5 stafflinethickness; + + define_pixels (width, bulb_diam, thin, thick, crook_thick); + set_char_box (0, width#, + 3.0 staff_space# + 0.5 stafflinethickness#, 2.5 staff_space# + bulb_diam#/2); + + penpos1 (thick, 0); + penpos2 (thin, 10); + + y1 = -3 staff_space ; + y2 = h - lower_brush; + x2r = width; + z2 = z1 + whatever*dir(80); + z9 = z2 + 0.5 stafflinethickness * dir (angle(z2 - z1)- 10); + pat = z1l --- z2l .. z9 .. z2r --- simple_serif (z1r, z1l, -40) .. cycle; + fill pat; + + + draw_rest_bulb(2.5 staff_space , y2r , pat , 0.92); + draw_rest_bulb(1.5 staff_space , (1.5+0.20)*staff_space , pat , 0.96); + draw_rest_bulb(0.5 staff_space , (0.5+0.21)*staff_space , pat , 1.0); + draw_rest_bulb(-0.5 staff_space , (-0.5+0.22)*staff_space , pat , 1.04); + draw_rest_bulb(-1.5 staff_space , (-1.5+0.23)*staff_space , pat , 1.08); + penlabels (1, 2); + labels(9); + + % draw_staff (-2,2,0.0); fet_endchar; + endgroup; -fet_endgroup("rests"); + +%%%%%%%% +% +% +% +% MENSURAL NOTATION +% +% +% + +% Neo-mensural longa and breve are identical with default longa and breve. + +neomens_block_rest_x# = 2/5 staff_space#; +neomens_block_rest_y# = 1/1 staff_space#; +neomens_half_block_rest_y# = 5/8 staff_space#; + +define_pixels(neomens_block_rest_x, + neomens_block_rest_y, neomens_half_block_rest_y); + +def neomens_half_block_rest = + draw_block ((0,0), (neomens_block_rest_x, neomens_half_block_rest_y)); + enddef; + +fet_beginchar("Neo-mensural maxima rest", "-3neo_mensural", "neomensmaximarest"); + set_char_box(0, neomens_block_rest_x#, + neomens_block_rest_y#, 2 neomens_block_rest_y#); + draw_block ((0,-neomens_block_rest_y), + (neomens_block_rest_x, 2 neomens_block_rest_y)); +fet_endchar; + +fet_beginchar("Neo-mensural longa rest", "-2neo_mensural", "neomenslongarest"); + set_char_box(0, neomens_block_rest_x#, + neomens_block_rest_y#, neomens_block_rest_y#); + draw_block ((0,-neomens_block_rest_y), + (neomens_block_rest_x, neomens_block_rest_y)); +fet_endchar; + +fet_beginchar("Neo-mensural breve rest", "-1neo_mensural", "neomensbreverest"); + set_char_box(0, neomens_block_rest_x#, + 0, neomens_block_rest_y#); + draw_block ((0,0), (neomens_block_rest_x, neomens_block_rest_y)); +fet_endchar; + +fet_beginchar("Neo-mensural whole rest", "0neo_mensural", "neomenssemibrevisrest"); + set_char_box(0, neomens_block_rest_x#, + neomens_half_block_rest_y#, 0); + neomens_half_block_rest; + currentpicture := + currentpicture shifted (0,- neomens_half_block_rest_y); +fet_endchar; + +fet_beginchar("Neo-mensural half rest", "1neo_mensural", "neomensminimahalfrest"); + set_char_box(0, neomens_block_rest_x#, + 0, neomens_half_block_rest_y#); + neomens_half_block_rest; +fet_endchar; + +neomensrestsize# = 0.8 staff_space#; + +fet_beginchar("Neo-mensural 4th rest","2neo_mensural","neomenssemiminimarest") + set_char_box(0,neomensrestsize#,0,neomensrestsize#); + pickup pencircle scaled 2 stafflinethickness; + lft x1 = 0; + bot y1 = 0; + lft x2 = 0; + top y2 = h; + rt x3 = w; + bot y3 = h/2; + draw z1 .. z2; + draw z2 .. z3; +fet_endchar + +fet_beginchar("Neo-mensural 8th rest","3neo_mensural","neomensfusarest") + set_char_box(0,neomensrestsize#,0,neomensrestsize#); + pickup pencircle scaled 2 stafflinethickness; + rt x1 = w; + bot y1 = 0; + rt x2 = w; + top y2 = h; + lft x3 = 0; + bot y3 = h/2; + draw z1 .. z2; + draw z2 .. z3; +fet_endchar + +fet_beginchar("Neo-mensural 16th rest","4neo_mensural","neomenssemifusarest") + set_char_box(0,neomensrestsize#,0,staff_space#); + pickup pencircle scaled 2 stafflinethickness; + rt x1 = w; + bot y1 = 0; + rt x2 = w; + top y2 = h; + + draw z1 .. z2; + + pickup pencircle scaled 2 stafflinethickness; + rt x3 = w; + top y3 = h; + lft x4 = 0; + bot y4 = h/2; + rt x5 = w; + top y5 = 5/8h; + lft x6 = 0; + bot y6 = h/8; + + draw z3 .. z4; + draw z5 .. z6; +fet_endchar + + +fet_endgroup("rests")