%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Metafont programs for () [] <> {} in the style of the METAFONT logo % Damian Cugley, SEH Sun 2 Jul 1989 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def brackpoints(expr left_p) = pair out; if left_p: w - x1 = w - x1' = x2 = x2' = x3 = leftstemloc; out = left else: x1 = x1' = w - x2 = w - x2' = w - x3 = leftstemloc ; out = right fi; top y1 = top y2 = h + o; y3 = 1/2[y1,y1'] = 1/2[y2,y2'] = barheight; enddef; def lbrack = brackpoints(true) enddef; def rbrack = brackpoints(false) enddef; def make_brackets(expr lcode, rcode, desc, u_width)(text t) = beginlogochar(lcode,u_width); "Left " & desc & " " & lcode; lbrack; t endchar; beginlogochar(rcode,u_width); "Right " & desc & " " & rcode; rbrack; t endchar; enddef; make_brackets("(",")","parenthesis",8, half_super(1,3,1'); labels(1,3,1') ); make_brackets("[","]","bracket",8, draw z1 -- z2 -- z3 -- z2' -- z1'; labels(1,2,3,2',1') ); make_brackets("<",">","angle bracket",12, draw z1 -- z3 -- z1'; labels(1,3,1') ); make_brackets("{","}","brace",10, x4 = x4' = x5 = x5' = 1/2[x1,x2]; y4 = 2barheight - y4' = 0.8[y3,y1]; y5 = 2barheight - y5' = 0.2[y3,y1]; draw z1{out} ... z4{down} ... {down}z5 ... {out}z3 & z3{-out} ... z5'{down} ... {down}z4' ... z1'{-out}; labels(1,4,5,3,5',4',1') );