-input feta-macros;
-input feta-params;
-input feta-autometric;
+% feta-haak.mf -- implement bracket tips -*-Fundamental-*-
+%
+% part of LilyPond's pretty-but-neat music font
+%
+% source file of the Feta (not the Font-En-Tja) music font
+%
+% (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+fet_begingroup ("brackettips");
+
+def draw_bracket (expr thick_sharp, width_sharp, updown) =
+begingroup;
+ save p, thin, thick, flattening, width, hair, flare;
+ path p;
+ pair tipdir;
-save code;
-code :=0;
+ flattening = 0.72;
+ thick# = thick_sharp;
+ flare# = flattening * width#;
+ width# = width_sharp;
+ define_pixels (thick, width, flare);
+ if updown = 1:
+ set_char_box (0, width#,
+ .5 thick#, flare#);
+ else:
+ set_char_box (0, width#,
+ flare#, .5 thick#);
+ fi;
-def draw_bracket( expr height_sharp, width_sharp) =
- save alpha, height, p, width, thin, thick;
- height# := height_sharp;
- width# := width_sharp;
+ thin = 2 linethickness;
+ hair = 1.25 linethickness;
- beginchar(incr code, width#, height#/2, height#/2);
-
- define_pixels (height, width);
- thin = 2 stafflinethickness;
- thick = .5 interline;
-
pickup pencircle scaled thin;
- lft x1 = 0;
- top y1 = height/2 + thick + thin;
+ y7 = y1;
+ x7 = x2;
+ z2 = z4r + (thin, 0);
- x2 = x1;
- z2 = (x1, 0);
- rt x3 = thick;
- y3 = y2;
+ penpos3 (thin, 0);
+ penpos4 (thin, 90);
- x4 = x3;
- bot y4 = y1 - thick + thin/2;
+ z3 = z4;
- alpha = 50;
- z5 = z1 + (width, 3/4interline);
+ top y3 = 0.5 thick;
+ lft x3 = 0.0;
+ x1 = x3l;
+ y1 = -0.5 thick;
- % need silly z6?
- % strange turning path when invoked via MakeTeXTFM...?
- % mf "\\mode:=ljfour; mag:=1; scrollmode; input feta-brackets16"
- z6 = z5 - (0, thin/16);
+ z8 = .5 [z2, z7];
+ top y5 = flare;
+ rt x5 = width;
- filldraw z5{dir(180+alpha)}..{left}z1--z2--z3..{up}z4{right}
- ..{dir(alpha)}z6..cycle;
+ p := z8{right}
+ ..tension 1.2.. z5{curl 0};
+ tipdir := direction 1 of p;
-% % try control points to do this in ps
-% currentpicture:=currentpicture shifted (-x5/2,(x5-x4)/2);
-%
-% s7 := 0.4*(x5-x1);
-% x7 = x1 + s7 * cosd(0);
-% y7 = y1 + s7 * sind(0);
-%
-% s8 := -0.25*(x5-x1);
-% x8 := x5 + s8 * cosd(alpha);
-% y8 := y5 + s8 * sind(alpha);
-%
-% s9 := 0.5*(x5-x4);
-% x9 := x4 + s9 * cosd(0);
-% y9 := y4 + s9 * sind(0);
-%
-% s10 := -0.15*(x5-x4);
-% x10 := x5 + s10 * cosd(alpha);
-% y10 := y5 + s10 * sind(alpha);
-%
-% draw z5..controls z8 and z7..z1--z2--z3..{up}z4
-% ..controls z9 and z10..z6..cycle;
-%
-% labels(1,2,3,4,5,6,7,8,9,10);
- addto currentpicture also currentpicture yscaled -1;
-endchar;
+ penpos5 (hair, angle tipdir);
+ penpos6 (hair, 90 + angle tipdir);
+
+ z5 = z6;
+
+ pickup pencircle scaled 1;
+
+ fill (z1
+ -- z3l{up}
+ .. z4r{right}
+ -- z2{right}
+ .. z6r{tipdir}
+ .. z5r
+ .. z6l{-tipdir}
+ ..tension 1.1.. z7{left}
+ & z7
+ -- z1
+ & cycle) yscaled updown;
+
+ if updown = 1:
+ penlabels (1, 2, 3, 4, 5, 6, 7, 8);
+ fi;
+endgroup;
enddef;
-% for h := staffsize# step 1 pt# until (1.1 * staffsize#):
-for h := staffsize# step 1 pt# until (7 * staffsize#):
- draw_bracket(h, 2interline# );
-endfor
+fet_beginchar ("bracket tip up", "up");
+ draw_bracket (0.45 staff_space#, 1.9 staff_space#, 1);
+fet_endchar;
+
+
+fet_beginchar ("bracket tip down", "down");
+ draw_bracket (0.45 staff_space#, 1.9 staff_space#, -1);
+fet_endchar;
+
+fet_endgroup ("brackettips");