X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Ffeta-slag.mf;h=101385cfec13c42082db4c51523bc6a40b847929;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=7d8f1d52ac969ccb0d9895c13cdda32ad36ed4c1;hpb=51c60f298f38254add022ecc3df3c7c8a265b1b4;p=lilypond.git diff --git a/mf/feta-slag.mf b/mf/feta-slag.mf index 7d8f1d52ac..101385cfec 100644 --- a/mf/feta-slag.mf +++ b/mf/feta-slag.mf @@ -1,145 +1,315 @@ -% -*- Fundamental -*- (emacs-20 mf mode mucks +% -*- Fundamental -*- (emacs-20 mf mode sucks) % feta-slag.mf -- implement trill symbols -% -% source file of the Feta (defintively not an abbreviation for Font-En-Tja) +% +% source file of the Feta (definitely not an abbreviation for Font-En-Tja) % music font -% -% (c) 1998 Jan Nieuwenhuizen -% +% +% (c) 1998--2008 Jan Nieuwenhuizen +% % this file is included by feta-scripts.mf -tfat := 1/2; -%twidth# := 0.5interline#; -%theight# := 0.55interline#; -% tthin# := stafflinethickness#; -tthin# := 1.6stafflinethickness#; - -twidth# := 2/3interline#; -theight# := 1/2interline#; - -% uhg/ uhuh? -% toverlap# := tfat*twidth#+tthin#; -toverlap# := tfat*twidth#+0.45tthin#; -define_pixels(twidth,theight,tthin,toverlap); - -def draw_trillelement = - save x, y; - - pickup pencircle scaled tthin; - - lft x1 = -twidth; -% x3 = -1/3*twidth; - x3 = -0.3*twidth; - top y3 = theight; - - z3 - z1 = whatever * (0.5twidth, theight); - z2 = tfat[z3, z1]; - - path p; - p = z3 -- z2 -- z1 -- z2; - p := p -- (p scaled -1) -- cycle; - filldraw p; - labels(1,2,3); -enddef; +trill_thin# = 0.1 staff_space# + 0.6 stafflinethickness#; +trill_stemwidth# = trill_thin#; +define_pixels (trill_thin); +define_whole_blacker_pixels (trill_stemwidth); -def draw_trill_two = - draw_trillelement; - currentpicture := currentpicture shifted (-2*twidth+toverlap, 0); - draw_trillelement; - currentpicture := currentpicture shifted (twidth-0.5toverlap, 0); -enddef; +trill_thick = 1/2 staff_space; +trill_overlap = 1/6 staff_space; -def draw_trill_three = - draw_trillelement; - currentpicture := currentpicture shifted (-2*twidth+toverlap, 0); - draw_trillelement; - currentpicture := currentpicture shifted (-2*twidth+toverlap, 0); - draw_trillelement; - currentpicture := currentpicture shifted (2twidth-toverlap, 0); -enddef; +trill_width# = 5/6 staff_space#; +trill_height# = 1/2 staff_space#; +define_pixels (trill_height); +define_whole_pixels (trill_width); -def draw_trill_four = - draw_trillelement; - currentpicture := currentpicture shifted (-2*twidth+toverlap, 0); - draw_trillelement; - currentpicture := currentpicture shifted (-2*twidth+toverlap, 0); - draw_trillelement; - currentpicture := currentpicture shifted (-2*twidth+toverlap, 0); - draw_trillelement; - currentpicture := currentpicture shifted (3twidth-1.5toverlap, 0); -enddef; +pair trill_ne; +trill_ne := unitvector ((2, 3)); + + +% +% The trill element sticks out on both the left and right side +% of the normal bbox, so you can glue them together easily. +% +% `ending' is either 0 for none, 1 for left, or 2 for right. +% + +def draw_trillelement (expr offset, ending) = + clearxy; + +begingroup; + save nw, pat, nw_dist, ne_dist; + pair nw, nw_dist, ne_dist; + path pat; + + pickup pencircle scaled trill_thin; + + x1 = -.5 trill_width; + y1 = 0; + z3 = whatever * trill_ne + z1; + top y3 = vround trill_height; + z2 = z3 - (trill_thick - trill_thin) * trill_ne; + + bot z3' = (top z3) scaled -1; -def draw_mordent(expr a) = - pickup pencircle scaled tthin; - save x, y; - top y1 = 4/3theight; - x1 = x2 = a; - y2 = - y1; - draw z1 -- z2; + nw = unitvector (z2 - z3'); + ne_dist = (nw rotated -90) * 0.5 trill_thin; + nw_dist = (trill_ne rotated 90) * 0.5 trill_thin; + + z5 = whatever * trill_ne + (z1 - nw_dist); + z5 = whatever * nw + (z3' - ne_dist); + + pat := z5 + -- (z1 - nw_dist){-trill_ne} + -- (z1 + nw_dist){trill_ne} + -- (z3 + nw_dist){trill_ne} + .. top z3{right} + .. (z3 + ne_dist){-nw}; + pat := pat + -- pat scaled -1 shifted (-feta_eps, -feta_eps) + -- cycle; + pat := pat shifted (offset, 0); + fill pat; + + z4 = z1 - trill_ne * trill_overlap; + x4 := hround (x4 + 0.5 trill_thin) - 0.5 trill_thin; + + pat := (z4 - nw_dist){-trill_ne} + .. bot z4{left} + .. lft z4{up} + .. (z4 + nw_dist){trill_ne} + -- (z1 + nw_dist){trill_ne} + -- (z1 - nw_dist){-trill_ne} + -- cycle; + + if ending = 1: + fill pat shifted (offset, 0); + elseif ending = 2: + pat := pat scaled -1 shifted (-feta_eps, -feta_eps); + fill pat shifted (offset, 0); + fi; +endgroup; enddef; -fet_beginchar("trilelement", "trilelement", "trilelement") -% set_char_box(twidth#, twidth#, theight#, theight#); - set_char_box(twidth#, twidth#-toverlap#, theight#, theight#); - draw_trillelement; + +fet_beginchar ("trilelement", "trilelement"); + set_char_box (.5 trill_width#, .5 trill_width#, + trill_height#, trill_height#); + + draw_trillelement (0, 0); + labels (1, 2, 3, 3', 4, 5, 5'); +fet_endchar; + + +fet_beginchar ("prall", "prall"); + set_char_box (trill_width#, trill_width#, + trill_height#, trill_height#); + + draw_trillelement (-hround (.5 trill_width), 1); + draw_trillelement (-hround (.5 trill_width) + trill_width, 2); +fet_endchar; + + +fet_beginchar ("mordent", "mordent"); + set_char_box (trill_width#, trill_width#, + 4/3 trill_height#, 4/3 trill_height#); + + draw_trillelement (-hround (.5 trill_width), 1); + draw_trillelement (-hround (.5 trill_width) + trill_width, 2); + + clearxy; + + pickup pencircle scaled trill_stemwidth; + + top y1 = h; + bot y2 = -d; + x1 = x2; + x2 = 0; + + draw_gridline (z2, z1, trill_stemwidth); + + labels (1, 2); +fet_endchar; + + +fet_beginchar ("prallprall", "prallprall"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + trill_height#, trill_height#); + + draw_trillelement (-trill_width, 1); + draw_trillelement (0, 0); + draw_trillelement (trill_width, 2); +fet_endchar; + + +fet_beginchar ("prallmordent", "prallmordent"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + 4/3 trill_height#, 4/3 trill_height#); + + draw_trillelement (-trill_width, 1); + draw_trillelement (0, 0); + draw_trillelement (trill_width, 2); + + clearxy; + + pickup pencircle scaled trill_stemwidth; + + top y1 = h; + bot y2 = -d; + x1 = x2 ; + x2 = good.x (.5 trill_width); + + draw_gridline (z2, z1, trill_stemwidth); + + labels (1, 2); fet_endchar; -fet_beginchar("prall", "prall", "prall") - trills := 2; - set_char_box(trills*twidth#-0.5toverlap#, trills*twidth#-0.5toverlap#, theight#, theight#); - draw_trill_two; + +save remember_pic; +picture remember_pic; + + +fet_beginchar ("upprall", "upprall"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + trill_height#, trill_height#); + + draw_trillelement (-trill_width, 1); + draw_trillelement (0, 0); + draw_trillelement (trill_width, 2); + + z11 = z4 shifted (-trill_width, 0); + z12 = z11 + (0, -2 trill_height); + + penpos11 (trill_thin, angle (trill_ne) - 90); + penpos12 (trill_thin, angle (trill_ne yscaled -1) + 90); + penlabels (11, 12); + + pickup pencircle scaled trill_stemwidth; + + fill z11l{-trill_ne} + .. z12l{trill_ne yscaled -1} + .. bot z12 + .. rt z12 + .. z12r{-trill_ne yscaled -1} + .. z11r{trill_ne} + -- cycle; + + remember_pic := currentpicture; fet_endchar; -fet_beginchar("mordent", "mordent", "mordent") - trills := 2; - set_char_box(trills*twidth#-0.5toverlap#, trills*twidth#-0.5toverlap#, theight#, theight#); - draw_trill_two; - draw_mordent(0); + +fet_beginchar ("upmordent", "upmordent"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + 4/3 trill_height#, 4/3 trill_height#); + + currentpicture := remember_pic; + + clearxy; + + pickup pencircle scaled trill_stemwidth; + + top y1 = h; + bot y2 = -d; + x1 = x2; + x2 = good.x (.5 trill_width); + + draw_gridline (z2, z1, trill_stemwidth); + + labels (1, 2); fet_endchar; -% in modern typesetting, i've seen these double symbols implemented -% as three trills rather than the actual double four [gerou and lusk]. -% it looks nicer and i don't think it introduces ambiguity. -% would like to have more references -- jcn. +fet_beginchar ("pralldown", "pralldown"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + trill_height#, trill_height#); -fet_beginchar("prallprall", "prallprall", "prallprall") - trills := 3; - set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#); - draw_trill_three; - draw_mordent(twidth-0.5toverlap); + currentpicture := remember_pic xscaled -1; fet_endchar; -fet_beginchar("prallmordent", "prallmordent", "prallmordent") - trills := 3; - set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#); - draw_trill_three; - draw_mordent(twidth-0.5toverlap); + +fet_beginchar ("downprall", "downprall"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + trill_height#, trill_height#); + + draw_trillelement (-trill_width, 1); + draw_trillelement (0, 0); + draw_trillelement (trill_width, 2); + + z11 = z4 shifted (-trill_width, 0); + z12 = z11 + (0, 2 trill_height); + + penpos11 (trill_thin, angle (trill_ne xscaled -1) - 90); + penpos12 (trill_thin, angle (trill_ne) - 90); + penlabels (11, 12); + + pickup pencircle scaled trill_stemwidth; + + fill z11l{trill_ne xscaled -1} + .. z12l{trill_ne} + .. top z12 + .. rt z12 + .. z12r{-trill_ne} + .. z11r{-trill_ne xscaled -1} + -- cycle; + + remember_pic := currentpicture; fet_endchar; -input feta-sleur; - -fet_beginchar("upprall", "upprall", "upprall") -% trills := 4; - trills := 3; - set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#); -% draw_slur(-2twidth#,-2theight#,0,-1); -% currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.75tthin); - draw_slur(0,-2theight#,0,-1); -% currentpicture := currentpicture shifted (-0.5w+1.3tthin,-tfat*theight+1.5tthin); - currentpicture := currentpicture shifted (-0.5w+1.65tthin,-tfat*theight+1.15tthin); -% draw_trill_four; - draw_trill_three; + +fet_beginchar ("downmordent", "downmordent"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + 4/3 trill_height#, 4/3 trill_height#); + + currentpicture := remember_pic; + + clearxy; + + pickup pencircle scaled trill_stemwidth; + + top y1 = h; + bot y2 = -d; + x1 = x2; + x2 = good.x (.5 trill_width); + + draw_gridline (z2, z1, trill_stemwidth); + + labels (1, 2); fet_endchar; -fet_beginchar("downprall", "downprall", "downprall") - trills := 3; - set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#); -% draw_slur(-2twidth#,2theight#,0,1); - draw_slur(0,2theight#,0,1); -% currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.75tthin); - currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.5tthin); - draw_trill_three; + +fet_beginchar ("prallup", "prallup"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + trill_height#, trill_height#); + + currentpicture := remember_pic xscaled -1; fet_endchar; + +fet_beginchar ("lineprall", "lineprall"); + set_char_box (1.5 trill_width#, 1.5 trill_width#, + trill_height#, 4 trill_height#); + + draw_trillelement (-trill_width, 1); + + labels (1, 2, 3, 3', 4, 5, 5'); + + pickup pencircle scaled trill_stemwidth; + + penpos10 (trill_stemwidth, 0); + penpos11 (trill_stemwidth, 0); + + x10l = x4 - .5 trill_thin - trill_width; + y10 = y4; + z11 = z10 + (0, h); + + penlabels (10, 11); + + fill z11l + .. top z11 + .. z11r + -- z10r + -- z10l + -- cycle; + + draw_trillelement (0, 0); + draw_trillelement (trill_width, 2); +fet_endchar;