fet_begingroup ("brackettips"); def draw_bracket(expr thick_sharp, width_sharp, updown) = begingroup; save p, thin, thick, flattening, width, hair; path p; pair tipdir; flattening = 0.70; thick# := thick_sharp; width# := width_sharp; define_pixels (thick, width); if updown = 1: set_char_box (0, width#, .5 thick# , flattening * width#); else: set_char_box (0, width#, flattening * width#, .5 thick#); fi; thin = 2 linethickness; hair = linethickness; pickup pencircle scaled thin; penpos3(thin, 0); penpos4(thin, 90); z3 = z4; top y3 = 0.5 thick; lft x3 = 0.0; x1 = x3l; y1 = -0.5 thick; save tight; tight := 1.3; z5 = .5 [z1, z3] + (width - thin, flattening * width - .5 thin); p := .5 [z1, z3]{right} .. tension tight .. z5; tipdir := (direction 1 of p); penpos5 (hair, angle (tipdir)); penpos6 (hair, 90 + angle (tipdir)); z5 = z6; z7 = z1 + (thick,0); z2 = z4r + (thin, 0); pickup pencircle scaled 1; % draw p; fill (z1{up} .. z3l{up} .. z4r{right} .. z2{right} .. tension tight .. z6r{tipdir} .. z5r .. z6l{-tipdir} .. tension tight .. z7{left} .. z1{left} & cycle) yscaled updown; if updown = 1: penlabels (1,2,3,4,5,6,7); fi; endgroup; enddef; fet_beginchar ("bracket tip up", "up"); draw_bracket (0.45 staff_space#, 2.0 staff_space#, 1); fet_endchar; fet_beginchar ("bracket tip down", "down"); draw_bracket (0.45 staff_space#, 2.0 staff_space#, -1); fet_endchar; fet_endgroup ("brackettips");