X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Ffeta-bolletjes.mf;h=60c6564867f2572dbdbab37689daa52e5238b347;hb=b95222d4f362ff37c54f9130a7d94b368942dfac;hp=877d03cc59c4f7056e42513ae34b7d7bc802489f;hpb=095750f4177ff3c486c33ec5475d20620d4ea926;p=lilypond.git diff --git a/mf/feta-bolletjes.mf b/mf/feta-bolletjes.mf index 877d03cc59..60c6564867 100644 --- a/mf/feta-bolletjes.mf +++ b/mf/feta-bolletjes.mf @@ -3,8 +3,9 @@ % % source file of LilyPond's pretty-but-neat music font % -% (c) 1997--2000 Jan Nieuwenhuizen +% (c) 1997--2002 Jan Nieuwenhuizen % & Han-Wen Nienhuys +% & Juergen Reuter % @@ -21,178 +22,10 @@ fet_begingroup("noteheads"); noteheight#:=staff_space#+ (1 + overdone_heads) *stafflinethickness#; define_pixels(noteheight); - -%%%%%%%% -% -% -% -% MENSURAL NOTATION -% -% -% -brevis_wid# := 2 staff_space#; - -def draw_brevis(expr brevwid) = - save beamheight, head_width; - save holeheight, stem_width; - save serif_size, serif_protrude; - - head_width# = brevwid; - holeheight = 3 stafflinethickness; - stem_width = 1.4 stafflinethickness; - - - define_pixels(head_width); - set_char_box(0, head_width#, noteheight#/2, noteheight#/2); - - 2 beamheight + holeheight = noteheight; - serif_size = (holeheight - stafflinethickness)/2; - serif_protrude = 1.5 serif_size; - penpos1(stem_width, 0); - penpos2(stem_width, 0); - penpos3(beamheight, 90); - penpos4(beamheight, 90); - penpos5(stem_width, 180); - - z1l = (0, 0); - z2l = (0, -stafflinethickness/2); - z3r = z2r + serif_size *(1,-1); - y4r = y3r; - x4r = head_width/2; - z5l = z3l + (-serif_size, -serif_protrude); - - penlabels(1,2,3,4, 5); - fill z1r -- z1l -- z5r{down} .. z5l{up} .. z3l{right} - -- z4l -- z4r -- z3r{left} .. z2r{up} -- cycle; - - addto currentpicture also currentpicture yscaled -1; - show z4r; show z4l; - addto currentpicture also currentpicture - shifted (-x4r,0) xscaled -1 shifted (x4l,0); - -enddef; - - % -% Some sources (eg Musix/OpusTeX think that the appendage should be on -% the left, some say right. Right wins democratically. -% -def draw_longa (expr wid) = - draw_brevis(wid); - save theta; - - x7r = head_width; - y7 = y5; -% z7 = z5; - z6 - z7 = (stem_width/2, -staff_space); - theta = angle(z6-z7)+ 90; - penpos7(stem_width, theta); - penpos6(1.2 stem_width, theta); - - fill z7r .. z6r{z6-z7} .. {z7-z6} z6l -- z7l -- cycle; - penlabels(6,7); -enddef; - -% -% En wij presenteren U: de opvolgster van Emily -% -% (ze is wel breed) -% -fet_beginchar("Maxima notehead", "-3mensural", "mensuralmaximahead"); - draw_longa (1.3 brevis_wid#) -fet_endchar; - -fet_beginchar("Longa notehead", "-2mensural", "mensurallongahead"); - draw_longa (brevis_wid#) -fet_endchar; - -fet_beginchar("Brevis notehead", "-1mensural", "mensuralbrevishead") - draw_brevis(brevis_wid#); -fet_endchar; - -def draw_mensural_black_head (expr wid) = - save head_width; - head_width# = wid; - set_char_box (0, head_width#, noteheight#/2, noteheight#/2); - - - y3 = y1 =0; - x2 = x4 = (x1 + x3) /2; - define_pixels (head_width); - pickup pencircle scaled blot_diameter; - top y2 = h; - bot y4 = -d; - lft x1 = 0; - rt x3 = w; - - filldraw z1 -- z2 -- z3 -- z4 -- cycle; -enddef; - -def draw_mensural_open_head (expr wid)= - draw_mensural_black_head (wid); - save diamNW, diamSW; - diamNW = length (z2 - z1) + blot_diameter; - diamSW = length (z4 - z1) + blot_diameter; - - save hole_widthNW, hole_widthSW; - hole_widthNW = 0.34 diamNW ; - hole_widthSW + 2.6 stafflinethickness = diamSW; - - (z7 + z5)/2 = (w/2, 0); - (z8 + z6)/2 = (w/2, 0); - (z6 - z5) = hole_widthNW * unitvector (z2 - z1); - (z7 - z6) = hole_widthSW * unitvector (z4 - z1); - - labels (1,2,3,4,5,6,7,8); - - unfill z5 -- z6 -- z7 -- z8 --cycle; -enddef; - -fet_beginchar("Mensural open head","0mensural","mensuralminimhead") - draw_mensural_open_head (staff_space#); -fet_endchar; - -fet_beginchar("Mensural open head","1mensural","mensuralsemiminimhead") - draw_mensural_open_head (staff_space#); -fet_endchar; - -fet_beginchar("Mensural black head","2mensural","fusahead") - draw_mensural_black_head (staff_space#); -fet_endchar; - - -%%%%%%%%%%%% -% -% -% ledger (leger) lines -% -fet_beginchar("Ledger ending", "ledgerending", "ledgerending") -set_char_box (5/2 ledgerlinethickness#, 5/2 ledgerlinethickness#, - ledgerlinethickness#/2,ledgerlinethickness#/2); - pickup pencircle scaled 1.3 blot_diameter; - - rt x2 = w; - lft x1 = -b; - x3 = x2; - bot y1 = -d; - y2 = y1; - - top y3 = h; - y4 = y3; - x4 = x1; - - filldraw z1 --- z2 --- z3 --- z4 --- cycle ; -fet_endchar; - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% +%%% TODO: Document these! % -% -% -% TODO: Document these! % setup user vars def setup_notehead_vars = @@ -288,8 +121,8 @@ fet_beginchar ("Brevis notehead", "-1", "brevishead"); y4 = y2; y3 = y1; - draw z1 -- z2; - draw z3 -- z4; + draw_gridline(z1,z2,stemthick); + draw_gridline(z3,z4,stemthick); fet_endchar; % whole note @@ -440,17 +273,180 @@ fet_beginchar("Quart diamondhead", "2diamond", "diamondhead") fill black; fet_endchar; + + +begingroup; +def def_triangle = + save triangle,kern; path triangle; + kern = 1/3(x2-x1); + z2 = z1 rotated 120; + z3 = z1 rotated 240; + z12 = caveness[.5[z1,z2],z3]; + z23 = z12 rotated 120; + z31 = z12 rotated 240; + triangle = z1 .. z12 .. z2 .. + z2 .. z23 .. z3 .. + z3 .. z31 .. z1 .. + cycle; + triangle := triangle shifted (-x1+pent/2-kern,0) xscaled xs; + pickup pencircle scaled pent xscaled xs; + hei = max(y1,-y2)+pent/2; + %set_char_box(-kern*xs*fac, ((x3-x1)*fac+pent#)*xs,hei*fac,hei*fac); + set_char_box(0, ((x3-x1-kern)*fac+pent#)*xs,hei*fac,hei*fac); +enddef; +save fac,pent; +fac = noteheight#/noteheight; +pent# = 2stafflinethickness#; +define_pixels(pent); + + +fet_beginchar("Whole trianglehead", "0triangle", "wholetrianglehead") + save hei,xs; + z1 = dir(130)*3/4noteheight; + xs = 1.5; + caveness:=0.1; + def_triangle; + draw triangle; +fet_endchar; + +fet_beginchar("Half trianglehead", "1triangle", "halftrianglehead") + save hei,xs; + z1 = dir(130)*2/3noteheight; + xs = 1.2; + caveness:=0.1; + def_triangle; + draw triangle; +fet_endchar; + +fet_beginchar("Quart trianglehead", "2triangle", "trianglehead") + save hei,xs; + z1 = dir(130)*2/3noteheight; + xs = 1.0; + caveness:=0.1; + def_triangle; + filldraw triangle; +fet_endchar; + +endgroup; + +%%% Editable values: + +slash_slope := 1.7; % slope of slash. From scm/grob-description.scm. How to auto-copy? +slt# := 2/3*0.48staff_space#; % thickness of lines. quarter notes get 1.5slt width. +slh# := 2staff_space#; % height of char. + +%%% Calculated values: +sxa# := 0; % how much the char exceeds the boundingbox horizontally: + + % Width of hor. pen - with thanks to Pythagoras +slxt# := sqrt(slt#*slt#+(slt#/slash_slope)*(slt#/slash_slope)); +slw# := slh#/slash_slope; % width of sloping part of slash: + +define_pixels(slt,slh,sxa,slxt,slw); + + +% +% +% UUGGGH! FIXME -- get rid of those sharp corners. +% +% +% + + +def draw_slash(expr hwid_hash) = + wid# := slw#+2slxt#+hwid_hash; + set_char_box(0,wid#-2sxa#,slh#/2,slh#/2); + define_pixels (wid#); + pickup penrazor scaled slxt; + draw (-b+slxt/2-sxa,-d) -- (-b+slxt/2+slw-sxa,h); + draw (w-slxt/2-slw+sxa,-d) -- (w-slxt/2+sxa,h); + pickup penrazor scaled slt rotated 90; + draw (-b+slxt-sxa,-d+slt/2) -- (w-slw+sxa,-d+slt/2); + draw (-b+slw-sxa,h-slt/2) -- (w-slxt+sxa,h-slt/2); +enddef; + +fet_beginchar("Whole slashhead","0slash","wholeslashhead") + draw_slash(staff_space#); +fet_endchar; + +fet_beginchar("Half slashhead","1slash","halfslashhead") + draw_slash(0.6staff_space#); +fet_endchar; + +fet_beginchar("Quart slashhead","2slash","quartslashhead") + draw_slash(-slxt#/2); +fet_endchar; + +% thick is the distance between the two parallel lines in the cross (distance between centres of lines) +def draw_cross(expr thick) = + pent := 1.2stafflinethickness; + pickup pencircle scaled pent; + % alfa is the slant of the lines (i.e. 1 means 45 degrees) + alfa := (2h-pent)/(w-pent); + % llen is the length of the little outer lines + % llen = thick / sin(2atan(alfa)) + llen := thick/(ypart(dir(2angle(1,alfa)))); + xa := llen/sqrt(1+alfa**2); + ya := xa*alfa; + xl := w/2-xa-pent/2; + yl := h-ya-pent/2; + save crz; path crz; + crz = (xa,0) -- (xa+xl,yl) -- (xl,yl+ya) -- (0,ya); + draw crz shifted(w/2,0); + draw crz xscaled -1 shifted(w/2,0); + draw crz yscaled -1 shifted(w/2,0); + draw crz scaled -1 shifted(w/2,0); +enddef; + +fet_beginchar("Whole Crossed notehead", "0cross", "wholecrossedhead") + wid# := black_notehead_width#+4stafflinethickness#; + hei# := noteheight#+stafflinethickness#; + set_char_box(0, wid#,hei#/2,hei#/2); + draw_cross(3.75stafflinethickness); +fet_endchar; + +fet_beginchar("Half Crossed notehead", "1cross", "halfcrossedhead") + wid# := black_notehead_width#+2stafflinethickness#; + hei# := noteheight#+stafflinethickness#/2; + set_char_box(0, wid#,hei#/2,hei#/2); + draw_cross(3stafflinethickness); +fet_endchar; + fet_beginchar("Crossed notehead", "2cross", "crossedhead") - set_char_box(0, black_notehead_width#, noteheight#/2, noteheight#/2); - pickup pencircle scaled 1.5 stafflinethickness; - lft x1 = 0; - bot y1 = -d; - top y2 = h; - rt x2 = w; + wid# := black_notehead_width#; + hei# := noteheight#; + set_char_box(0, wid#,hei#/2,hei#/2); + draw_cross(stafflinethickness/4); +fet_endchar; + +fet_beginchar("X-Circled notehead", "2xcircle", "xcircledhead") + wid# := black_notehead_width#*sqrt(sqrt2); + hei# := noteheight#*sqrt(sqrt2); + set_char_box(0, wid#,hei#/2,hei#/2); + cthick := (1.2+1/4)*stafflinethickness; + cxr := w/2-cthick/2; + cyr := h-cthick/2; + pickup pencircle scaled cthick; + draw fullcircle xscaled 2cxr yscaled 2cyr shifted (w/2,0); + xpos := cxr/sqrt2; + ypos := cyr/sqrt2; + draw (-xpos+w/2,-ypos) -- (xpos+w/2,ypos); + draw (-xpos+w/2,ypos) -- (xpos+w/2,-ypos); +fet_endchar; + - draw z1 .. z2; - draw (z1 .. z2) yscaled -1; -fet_endchar +%%%%%%%%%%%% +% +% +% ledger (leger) lines +% +fet_beginchar("Ledger ending", "ledgerending", "ledgerending") +set_char_box (5/2 ledgerlinethickness#, 5/2 ledgerlinethickness#, + ledgerlinethickness#/2,ledgerlinethickness#/2); + + + draw_rounded_block((-b,-d),(w,h), 0.8 ledgerlinethickness); +fet_endchar; fet_endgroup("noteheads");