diff options
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/fdsymbol/fdgeometric.mf')
-rw-r--r-- | Master/texmf-dist/fonts/source/public/fdsymbol/fdgeometric.mf | 1837 |
1 files changed, 1837 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/fdsymbol/fdgeometric.mf b/Master/texmf-dist/fonts/source/public/fdsymbol/fdgeometric.mf new file mode 100644 index 00000000000..520b34e5ec7 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/fdsymbol/fdgeometric.mf @@ -0,0 +1,1837 @@ +% +% Copyright (c) 2011, Michael Ummels <michael.ummels@rwth-aachen.de> +% +% This Font Software is licensed under the SIL Open Font License, +% Version 1.1. This license is in the accompanying file OFL.txt, and +% is also available with a FAQ at: http://scripts.sil.org/OFL +% + +beginsymbol(2dot_size# + 2side_bearing#, vcentre(2dot_size#)); "centre dot"; + fill dot((w/2, (h-d)/2), dot_size); +endchar; + +for alpha = 0, 90, 45, 135: + beginsymbol((4dot_size# + equal_spread#) * abs (cosd alpha) + 2dot_size# * abs (sind alpha) + 2side_bearing#, vcentre(2dot_size# * abs (cosd alpha) + (4dot_size# + equal_spread#) * abs (sind alpha))); "colon (" & decimal alpha & ")"; + pair centre; + centre := (w/2, (h-d)/2); + + z1 - z0 = (2dot_size + equal_spread) * dir alpha; + 1/2[z0,z1] = centre; + + fill dot(z0, dot_size); + fill dot(z1, dot_size); + endchar; +endfor; + +for alpha = 0, 90, 45, 135: + beginsymbol((6dot_size# + 2equal_spread#) * abs (cosd alpha) + 2dot_size# * abs (sind alpha) + 2side_bearing#, vcentre(2dot_size# * abs (cosd alpha) + (6dot_size# + 2equal_spread#) * abs (sind alpha))); "triple colon (" & decimal alpha & ")"; + pair centre; + centre := (w/2, (h-d)/2); + + z1 - z0 = (2dot_size + equal_spread) * dir alpha; + z2 - z1 = (2dot_size + equal_spread) * dir alpha; + z1 = centre; + + fill dot(z0, dot_size); + fill dot(z1, dot_size); + fill dot(z2, dot_size); + endchar; +endfor; + +for alpha = 0, 90, 180, 270: + beginoperator(plus_size#, 1); "therefore (" & decimal alpha & ")"; + r := 1/2plus_size - dot_size; + r := r * 1/3[1, sqrt 2]; + + z1 = z0 + r * dir alpha; + z2 = z0 + r * dir (alpha + 120); + z3 = z0 + r * dir (alpha + 240); + + 1/2[z1,1/2[z2,z3]] = centre; + + fill dot(z1, dot_size); + fill dot(z2, dot_size); + fill dot(z3, dot_size); + endchar; +endfor; + +beginoperator(plus_size#, 1); "double colon"; + r := (1/2plus_size - dot_size) * sqrt(2); + + fill dot(centre + r * dir 45, dot_size); + fill dot(centre + r * dir 135, dot_size); + fill dot(centre + r * dir 225, dot_size); + fill dot(centre + r * dir 315, dot_size); +endchar; + +beginoperator(plus_size#, 1); "minus"; + draw_line(centre + radius * right, centre + radius * left, true); +endchar; + +beginoperator(plus_size#, 1); "medium slash"; + draw_line(centre + 4/3radius * dir 45, centre + 4/3radius * dir 225, true); +endchar; + +beginoperator(plus_size#, 1); "medium backslash"; + draw_line(centre + 4/3radius * dir 135, centre + 4/3radius * dir 315, true); +endchar; + +beginoperator(plus_size#, 1); "plus"; + draw_line(centre + radius * right, centre + radius * left, true); + draw_line(centre + radius * up, centre + radius * down, true); +endchar; + +beginoperator(plus_size#, 1); "times"; + r := 4/3radius; + + draw_line(centre + r * dir 45, centre + r * dir 225, true); + draw_line(centre + r * dir 135, centre + r * dir 315, true); +endchar; + +beginoperator(plus_size#, 1.25); "plus minus"; + centre := centre + 0.125plus_size * up; + pair bt; + bt := centre + (radius + 0.25plus_size) * down; + + draw_line(centre + radius * right, centre + radius * left, true); + draw_line(centre + radius * up, centre + radius * down, true); + draw_line(bt + radius * right, bt + radius * left, true); +endchar; + +beginoperator(plus_size#, 1.25); "minus plus"; + centre := centre + 0.125plus_size * down; + pair tp; + tp := centre + (radius + 0.25plus_size) * up; + + draw_line(centre + radius * right, centre + radius * left, true); + draw_line(centre + radius * up, centre + radius * down, true); + draw_line(tp + radius * right, tp + radius * left, true); +endchar; + +for angle = 0, 180: + beginoperator(plus_size#, 1); "dot minus (" & decimal angle & ")"; + draw_line(centre - radius * dir angle, centre + radius * dir angle, true); + fill dot(centre + equal_spread * dir (angle + 90), 3/4dot_size); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "minus with two dots"; + draw_line(centre + radius * right, centre + radius * left, true); + fill dot(centre + sign * (radius - 3/4dot_size) * left + equal_spread * up, 3/4dot_size); + fill dot(centre + sign * (radius - 3/4dot_size) * right + equal_spread * down, 3/4dot_size); + endchar; +endfor; + +beginoperator(plus_size#, 1); "minus with four dots"; + draw_line(centre + radius * right, centre + radius * left, true); + fill dot(centre + (radius - 3/4dot_size) * left + equal_spread * up, 3/4dot_size); + fill dot(centre + (radius - 3/4dot_size) * right + equal_spread * up, 3/4dot_size); + fill dot(centre + (radius - 3/4dot_size) * left + equal_spread * down, 3/4dot_size); + fill dot(centre + (radius - 3/4dot_size) * right + equal_spread * down, 3/4dot_size); +endchar; + +beginoperator(plus_size#, 1); "divide"; + draw_line(centre + radius * right, centre + radius * left, true); + fill dot(centre + equal_spread * up, 3/4dot_size); + fill dot(centre + equal_spread * down, 3/4dot_size); +endchar; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "logical not"; + draw_line(centre + radius * left, centre + radius * right, true); + draw_line(centre + sign * radius * right, centre + sign * radius * right + equal_spread * down, true); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "upside down logical not"; + draw_line(centre + radius * left, centre + radius * right, true); + draw_line(centre + sign * radius * right, centre + sign * radius * right + equal_spread * up, true); + endchar; +endfor; + +for sign = -1, 1: + beginoperator(plus_size#, 1); "three times"; + r := 4/3radius; + + z0 = centre + r * dir (sign * 45); + z1 = centre + r * dir (sign * 225); + z2 = centre + r * dir (270 + sign * 45); + z3 = centre + 1/4line_thickness * dir (270 + sign * 45); + + draw_line(z0, z1, true); + draw_line(z3, z2, true); + endchar; +endfor; + +for alpha = 0, 90, 180, 270: + beginoperator(plus_size#, 1); "closed times (" & decimal alpha & ")"; + thick := line_thickness; + r := 4/3radius; + + z0 = centre + (r + 1/2line_thickness) * dir (alpha + 45); + z1 = centre + r * dir (alpha + 315); + z2 = centre + r * dir (alpha + 225); + z3 = centre + (r + 1/2line_thickness) * dir (alpha + 135); + + penpos0(thick,alpha + 315); + penpos1(thick,alpha + 45); + penpos2(thick,alpha + 315); + penpos3(thick,alpha + 45); + + z5 = z1r + whatever * dir (270 + alpha - 15); + z6 = z2l + whatever * dir (270 + alpha + 15); + z5 = whatever[z1r + thick * dir (270 + alpha), z2l + thick * dir (270 + alpha)]; + z6 = whatever[z1r + thick * dir (270 + alpha), z2l + thick * dir (270 + alpha)]; + + fill stroke z0e -- z2e; + fill stroke z1e -- z3e; + fill z1r -- z5 -- z6 -- z2l -- cycle; + + penlabels(0,1,2,3,5,6); + endchar; +endfor; + +for alpha = 0, 90: + beginoperator(plus_size#, 1); "bowtie (" & decimal alpha & ")"; + thick := line_thickness; + r := 4/3radius; + + z0 = centre + r * dir (alpha + 135); + z1 = centre + r * dir (alpha + 45); + z2 = centre + r * dir (alpha + 315); + z3 = centre + r * dir (alpha + 225); + + penpos0(thick,alpha + 45); + penpos1(thick,alpha + 135); + penpos2(thick,alpha + 45); + penpos3(thick,alpha + 135); + + z4 = z0r + whatever * dir (180 + alpha + 15); + z5 = z1r + whatever * dir (alpha - 15); + z6 = z2l + whatever * dir (alpha + 15); + z7 = z3l + whatever * dir (180 + alpha - 15); + z4 = whatever[z0r + thick * dir (180 + alpha), z3l + thick * dir (180 + alpha)]; + z5 = whatever[z1r + thick * dir alpha, z2l + thick * dir alpha]; + z6 = whatever[z1r + thick * dir alpha, z2l + thick * dir alpha]; + z7 = whatever[z0r + thick * dir (180 + alpha), z3l + thick * dir (180 + alpha)]; + + fill stroke z0e -- z2e; + fill stroke z1e -- z3e; + fill z1r -- z5 -- z6 -- z2l -- cycle; + fill z0r -- z4 -- z7 -- z3l -- cycle; + + penlabels(0,1,2,3,4,5,6,7); + endchar; +endfor; + +for alpha = 0, 90, 180, 270: + beginoperator(plus_size#, 1); "Y (" & decimal alpha & ")"; + s := 1/15plus_size; + + draw_line(centre - s * dir alpha, centre + radius * dir alpha, true); + draw_line(centre - s * dir alpha, centre - s * dir alpha + (radius + s) * dir (alpha + 135), true); + draw_line(centre - s * dir alpha, centre - s * dir alpha + (radius + s) * dir (alpha + 225), true); + endchar; +endfor; + +% operators + +for sign = 1, -1: + beginoperator(plus_size#, 1); "wedge"; + draw_less(a, centre + sign * plus_size/2 * up, centre - sign * plus_size/2 * up, 2radius, line_thickness, false); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "wedge dot"; + draw_less(a, centre + sign * plus_size/2 * up, centre - sign * plus_size/2 * up, 2radius, line_thickness, false); + fill dot(centre - sign * 1/3plus_size * up, 3/4dot_size); + endchar; +endfor; + +for sign = 1, -1: + beginsymbol(13/9plus_size# + 2side_bearing#, vcentre(plus_size#)); "double wedge"; + 1/2[z0,z1] = (w/2, (h-d)/2); + z1 - z0 = 4/9plus_size * right; + + draw_less(a, z0 + sign * plus_size/2 * up, z0 - sign * plus_size/2 * up, 2radius, line_thickness, false); + draw_less(b, z1 + sign * plus_size/2 * up, z1 - sign * plus_size/2 * up, 2radius, line_thickness, false); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "curly wedge"; + draw_prec(a, centre + sign * plus_size/2 * up, centre - sign * plus_size/2 * up, 2radius, line_thickness, false); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "curly wedge dot"; + draw_prec(a, centre + sign * plus_size/2 * up, centre - sign * plus_size/2 * up, 2radius, line_thickness, false); + fill dot(1/2[z1a.l,z0a.r] + sign * 3/4dot_size * up, 3/4dot_size); + endchar; +endfor; + +for sign = 1, -1: + beginsymbol(13/9plus_size# + 2side_bearing#, vcentre(plus_size#)); "double curly wedge"; + 1/2[z0,z1] = (w/2, (h-d)/2); + z1 - z0 = 4/9plus_size * right; + + draw_prec(a, z0 + sign * plus_size/2 * up, z0 - sign * plus_size/2 * up, 2radius, line_thickness, false); + draw_prec(b, z1 + sign * plus_size/2 * up, z1 - sign * plus_size/2 * up, 2radius, line_thickness, false); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "union"; + draw_subset(a,centre - sign * plus_size/2 * up, centre + sign * plus_size/2 * up, 2radius, line_thickness); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(4/3plus_size#, 1); "double union"; + draw_subset(a, centre - sign * 5/18plus_size * up, centre + sign * 2/3plus_size * up, 5/6radius, line_thickness); + draw_subset(b, centre - sign * 2/3plus_size * up, centre + sign * 2/3plus_size * up, 2radius, line_thickness); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "union dot"; + draw_subset(a, centre - sign * plus_size/2 * up, centre + sign * plus_size/2 * up, 2radius, line_thickness); + fill dot(centre + sign * 1/6plus_size * up, 3/4dot_size); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "union plus"; + draw_subset(a, centre - sign * plus_size/2 * up, centre + sign * plus_size/2 * up, 2radius, line_thickness); + + t := 22/10line_thickness; + r := radius - t; + + draw_line(centre + sign * 1/6plus_size * up + r * right, centre + sign * 1/6plus_size * up + r * left, true); + draw_line(centre + (r + sign * 1/6plus_size) * up, centre + (r - sign * 1/6plus_size) * down, true); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "square union"; + z3 - z0 = z2 - z1 = 2radius * right; + z0 - z1 = sign * 2radius * up; + 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre; + + draw_line(z0, z1, true); + draw_line(z1, z2, false); + draw_line(z2, z3, true); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(4/3plus_size#, 1); "double square union"; + z3a - z0a = z2a - z1a = 2radius * right; + z0a - z1a = sign * 2radius * up; + 1/2[1/2[z0a,z1a], 1/2[z2a,z3a]] = centre; + z3b - z0b = z2b - z1b = 5/9plus_size * right; + z0b - z1b = sign * 17/12radius * up; + y0b = y0a; + 1/2[x0b, x3b] = xpart centre; + + draw_line(z0a, z1a, true); + draw_line(z1a, z2a, false); + draw_line(z2a, z3a, true); + draw_line(z0b, z1b, true); + draw_line(z1b, z2b, false); + draw_line(z2b, z3b, true); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "square union dot"; + z3 - z0 = z2 - z1 = 2radius * right; + z0 - z1 = sign * 2radius * up; + 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre; + + draw_line(z0, z1, true); + draw_line(z1, z2, false); + draw_line(z2, z3, true); + fill dot(centre + sign * 1/6plus_size * up, 3/4dot_size); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "square union plus"; + z3 - z0 = z2 - z1 = 2radius * right; + z0 - z1 = sign * 2radius * up; + 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre; + + draw_line(z0, z1, true); + draw_line(z1, z2, false); + draw_line(z2, z3, true); + + t := 22/10line_thickness; + r := radius - t; + + draw_line(centre + sign * 1/6plus_size * up + r * right, centre + sign * 1/6plus_size * up + r * left, true); + draw_line(centre + (r + sign * 1/6plus_size) * up, centre + (r - sign * 1/6plus_size) * down, true); + endchar; +endfor; + +for alpha = 0, 180: + beginoperator(plus_size#, 1); "corner with dot"; + z3 - z0 = z2 - z1 = 2radius * dir alpha; + z0 - z1 = 2radius * dir (alpha + 90); + 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre; + + draw_line(z1, z2, true); + draw_line(z2, z3, true); + fill dot(centre, 3/4dot_size); + endchar; +endfor; + +% triangles + +for alpha = 0, 90, 180, 270: + beginsymbol((3/4small_op_size# + 3/2line_thickness#) * abs(cosd alpha) + sqrt(3) * (small_op_size#/2 + line_thickness#) * abs(sind alpha) + 2side_bearing#, vcentre(sqrt(3) * (small_op_size#/2 + line_thickness#) * abs(cosd alpha) + (3/4small_op_size# + 3/2line_thickness#) * abs(sind alpha))); "small triangle (" & decimal alpha & ")"; + thick := line_thickness; + radius := small_op_size/2; + centre := (w/2, (h - d)/2) - 1/4(radius + thick) * dir alpha; + + draw_triangle(a, centre, radius, alpha, thick); + endchar; +endfor; + +for alpha = 0, 90, 180, 270: + beginsymbol((3/4small_op_size# + 3/2line_thickness#) * abs(cosd alpha) + sqrt(3) * (small_op_size#/2 + line_thickness#) * abs(sind alpha) + 2side_bearing#, vcentre(sqrt(3) * (small_op_size#/2 + line_thickness#) * abs(cosd alpha) + (3/4small_op_size# + 3/2line_thickness#) * abs(sind alpha))); "small filled triangle (" & decimal alpha & ")"; + thick := line_thickness; + radius := small_op_size/2; + centre := (w/2, (h - d)/2) - 1/4(radius + thick) * dir alpha; + + filldraw_triangle(a, centre, radius, alpha, thick); + endchar; +endfor; + +for alpha = 0, 90, 180, 270: + beginsymbol((3/4med_op_size# + 3/2line_thickness#) * abs(cosd alpha) + sqrt(3) * (med_op_size#/2 + line_thickness#) * abs(sind alpha) + 2side_bearing#, vcentre(sqrt(3) * (med_op_size#/2 + line_thickness#) * abs(cosd alpha) + (3/4med_op_size# + 3/2line_thickness#) * abs(sind alpha))); "medium triangle (" & decimal alpha & ")"; + thick := line_thickness; + radius := med_op_size/2; + centre := (w/2, (h - d)/2) - 1/4(radius + thick) * dir alpha; + + draw_triangle(a, centre, radius, alpha, thick); + endchar; +endfor; + +for alpha = 0, 90, 180, 270: + beginsymbol((3/4med_op_size# + 3/2line_thickness#) * abs(cosd alpha) + sqrt(3) * (med_op_size#/2 + line_thickness#) * abs(sind alpha) + 2side_bearing#, vcentre(sqrt(3) * (med_op_size#/2 + line_thickness#) * abs(cosd alpha) + (3/4med_op_size# + 3/2line_thickness#) * abs(sind alpha))); "medium filled triangle (" & decimal alpha & ")"; + thick := line_thickness; + radius := med_op_size/2; + centre := (w/2, (h - d)/2) - 1/4(radius + thick) * dir alpha; + + filldraw_triangle(a, centre, radius, alpha, thick); + endchar; +endfor; + +for alpha = 90, 270: + beginsymbol(sqrt(3) * (large_op_size#/2 + line_thickness#) + 2side_bearing#, vcentre(3/4large_op_size# + 3/2line_thickness#)); "large triangle (" & decimal alpha & ")"; + thick := line_thickness; + radius := large_op_size/2; + centre := (w/2, (h - d)/2) - 1/4(radius + thick) * dir alpha; + + draw_triangle(a, centre, radius, alpha, thick); + endchar; +endfor; + +% circles + +beginoperator(4/5small_op_size#, 1); "small circle"; + draw_circle(centre, radius, line_thickness); +endchar; + +beginoperator(4/5small_op_size#, 1); "small filled circle"; + filldraw_circle(centre, radius, line_thickness); +endchar; + +beginoperator(4/5med_op_size#, 1); "medium circle"; + draw_circle(centre, radius, line_thickness); +endchar; + +beginoperator(4/5med_op_size#, 1); "medium filled circle"; + filldraw_circle(centre, radius, line_thickness); +endchar; + +beginoperator(4/5med_op_size#, 1); "medium circle minus"; + draw_circle(centre, radius, line_thickness); + draw_line(centre + radius * left, centre + radius * right, false); +endchar; + +beginoperator(4/5med_op_size#, 1); "medium circle bar"; + draw_circle(centre, radius, line_thickness); + draw_line(centre + radius * up, centre + radius * down, false); +endchar; + +beginoperator(4/5med_op_size#, 1); "medium circle slash"; + draw_circle(centre, radius, line_thickness); + draw_line(centre + radius * dir 45, centre + radius * dir 225, false); +endchar; + +beginoperator(4/5med_op_size#, 1); "medium circle backslash"; + draw_circle(centre, radius, line_thickness); + draw_line(centre + radius * dir 135, centre + radius * dir 315, false); +endchar; + +beginoperator(4/5med_op_size#, 1); "medium circle plus"; + draw_circle(centre, radius, line_thickness); + draw_line(centre + radius * left, centre + radius * right, false); + draw_line(centre + radius * up, centre + radius * down, false); +endchar; + +beginoperator(4/5med_op_size#, 1); "medium circle times"; + draw_circle(centre, radius, line_thickness); + draw_line(centre + radius * dir 45, centre + radius * dir 225, false); + draw_line(centre + radius * dir 135, centre + radius * dir 315, false); +endchar; + +beginoperator(4/5med_op_size#, 1); "medium circle dot"; + draw_circle(centre, radius, line_thickness); + fill dot(centre, dot_size); +endchar; + +beginoperator(4/5med_op_size#, 1); "medium circle circle"; + draw_circle(centre, radius, line_thickness); + draw_circle(centre, 2/5radius, line_thickness); +endchar; + +beginoperator(4/5med_op_size#, 1); "medium circle asterisk"; + thick := line_thickness; + + draw_circle(centre, radius, thick); + + penpos a0(4/3thick, 0); + penpos a1(4/3thick, 60); + penpos a2(4/3thick, 120); + penpos a3(4/3thick, 180); + penpos a4(4/3thick, 240); + penpos a5(4/3thick, 300); + + penpos b0(2/3thick, 0); + penpos b1(2/3thick, 60); + penpos b2(2/3thick, 120); + penpos b3(2/3thick, 180); + penpos b4(2/3thick, 240); + penpos b5(2/3thick, 300); + + reg_poly_points(a)(6, centre, radius, 90); + + z.b0 = z.b1 = z.b2 = z.b3 = z.b4 = z.b5 = centre; + + fill stroke z.a0e -- z.b0e; + fill stroke z.a1e -- z.b1e; + fill stroke z.a2e -- z.b2e; + fill stroke z.a3e -- z.b3e; + fill stroke z.a4e -- z.b4e; + fill stroke z.a5e -- z.b5e; +endchar; + +beginoperator(4/5med_op_size#, 1); "medium circle dash"; + draw_circle(centre, radius, line_thickness); + draw_line(centre + 2/3radius * left, centre + 2/3radius * right, false); +endchar; + +beginoperator(4/5med_op_size#, 1); "medium circle equal"; + draw_circle(centre, radius, line_thickness); + draw_line(centre + 2/5equal_spread * up + 2/3radius * left, centre + 2/5equal_spread * up + 2/3radius * right, false); + draw_line(centre + 2/5equal_spread * down + 2/3radius * left, centre + 2/5equal_spread * down + 2/3radius * right, false); +endchar; + +for sign = 1,-1: + beginoperator(4/5med_op_size#, 1); "negated medium circle"; + r := 4/3radius; + + draw_circle(centre, radius, line_thickness); + draw_line(centre + r * dir (sign * 45), centre + r * dir (sign * 225), true); + endchar; +endfor; + +beginoperator(4/5large_op_size#, 1); "large circle"; + draw_circle(centre, radius, line_thickness); +endchar; + +beginoperator(4/5large_op_size#, 1); "large filled circle"; + filldraw_circle(centre, radius, line_thickness); +endchar; + +% squares + +beginoperator(small_op_size#/sqrt(2), 1); "small square"; + draw_square(centre, radius, 0, line_thickness); +endchar; + +beginoperator(small_op_size#/sqrt(2), 1); "small filled square"; + filldraw_square(centre, radius, 0, line_thickness); +endchar; + +beginoperator(med_op_size#/sqrt(2), 1); "medium square"; + draw_square(centre, radius, 0, line_thickness); +endchar; + +beginoperator(med_op_size#/sqrt(2), 1); "medium filled square"; + filldraw_square(centre, radius, 0, line_thickness); +endchar; + +beginoperator(med_op_size#/sqrt(2), 1); "medium square minus"; + draw_square(centre, radius, 0, line_thickness); + draw_line(centre + radius * right, centre + radius * left, false); +endchar; + +beginoperator(med_op_size#/sqrt(2), 1); "medium square vert"; + draw_square(centre, radius, 0, line_thickness); + draw_line(centre + radius * up, centre + radius * down, false); +endchar; + +beginoperator(med_op_size#/sqrt(2), 1); "medium square slash"; + r := radius * sqrt(2); + + draw_square(centre, radius, 0, line_thickness); + draw_line(centre + r * dir 45, centre + r * dir 225, false); +endchar; + +beginoperator(med_op_size#/sqrt(2), 1); "medium square backslash"; + r := radius * sqrt(2); + + draw_square(centre, radius, 0, line_thickness); + draw_line(centre + r * dir 135, centre + r * dir 315, false); +endchar; + +beginoperator(med_op_size#/sqrt(2), 1); "medium square plus"; + draw_square(centre, radius, 0, line_thickness); + draw_line(centre + radius * right, centre + radius * left, false); + draw_line(centre + radius * up, centre + radius * down, false); +endchar; + +beginoperator(med_op_size#/sqrt(2), 1); "medium square times"; + r := radius * sqrt(2); + + draw_square(centre, radius, 0, line_thickness); + draw_line(centre + r * dir 45, centre + r * dir 225, false); + draw_line(centre + r * dir 135, centre + r * dir 315, false); +endchar; + +beginoperator(med_op_size#/sqrt(2), 1); "medium square dot"; + draw_square(centre, radius, 0, line_thickness); + fill dot(centre, dot_size); +endchar; + +beginoperator(med_op_size#/sqrt(2), 1); "medium square square"; + draw_square(centre, radius, 0, line_thickness); + draw_square(centre, 2/5radius, 0, line_thickness); +endchar; + +beginoperator(large_op_size#/sqrt(2), 1); "large square"; + draw_square(centre, radius, 0, line_thickness); +endchar; + +beginoperator(large_op_size#/sqrt(2), 1); "large filled square"; + filldraw_square(centre, radius, 0, line_thickness); +endchar; + +beginoperator(small_op_size#, 1); "small diamond"; + draw_square(centre, radius / sqrt(2), 45, line_thickness); +endchar; + +beginoperator(small_op_size#, 1); "small filled diamond"; + filldraw_square(centre, radius / sqrt(2), 45, line_thickness); +endchar; + +beginoperator(med_op_size#, 1); "medium diamond"; + draw_square(centre, radius / sqrt(2), 45, line_thickness); +endchar; + +beginoperator(med_op_size#, 1); "medium filled diamond"; + filldraw_square(centre, radius / sqrt(2), 45, line_thickness); +endchar; + +beginoperator(med_op_size#, 1); "medium diamond minus"; + draw_square(centre, radius / sqrt(2), 45, line_thickness); + draw_line(centre + radius * right, centre + radius * left, false); +endchar; + +beginoperator(med_op_size#, 1); "medium diamond vert"; + draw_square(centre, radius / sqrt(2), 45, line_thickness); + draw_line(centre + radius * up, centre + radius * down, false); +endchar; + +beginoperator(med_op_size#, 1); "medium diamond slash"; + r := radius / sqrt(2); + + draw_square(centre, r, 45, line_thickness); + draw_line(centre + r * dir 45, centre + r * dir 225, false); +endchar; + +beginoperator(med_op_size#, 1); "medium diamond backslash"; + r := radius / sqrt(2); + + draw_square(centre, r, 45, line_thickness); + draw_line(centre + r * dir 135, centre + r * dir 315, false); +endchar; + +beginoperator(med_op_size#, 1); "medium diamond plus"; + draw_square(centre, radius / sqrt(2), 45, line_thickness); + draw_line(centre + radius * right, centre + radius * left, false); + draw_line(centre + radius * up, centre + radius * down, false); +endchar; + +beginoperator(med_op_size#, 1); "medium diamond times"; + r := radius / sqrt(2); + + draw_square(centre, r, 45, line_thickness); + draw_line(centre + r * dir 45, centre + r * dir 225, false); + draw_line(centre + r * dir 135, centre + r * dir 315, false); +endchar; + +beginoperator(med_op_size#, 1); "medium diamond dot"; + draw_square(centre, radius / sqrt(2), 45, line_thickness); + fill dot(centre, dot_size); +endchar; + +beginoperator(med_op_size#, 1); "medium diamond diamond"; + draw_square(centre, radius / sqrt(2), 45, line_thickness); + draw_square(centre, 2/5radius / sqrt(2), 45, line_thickness); +endchar; + +beginoperator(5/6small_op_size#, 8/5); "small lozenge"; + x0 = w - x2 = side_bearing; + y0 = y2 = ypart centre; + x1 = x3 = xpart centre; + y1 = h; + y3 = -d; + + theta := angle(z1 - z0); + + x0' = x0 + line_thickness / sind theta; + x2' = x2 - line_thickness / sind theta; + y0' = y2' = y0; + y1' = y1 - line_thickness / cosd theta; + y3' = y3 + line_thickness / cosd theta; + x1' = x3' = x1; + + fill z0 -- z1 -- z2 -- z3 -- cycle; + unfill z0' -- z1' -- z2' -- z3' -- cycle; +endchar; + +beginoperator(5/6small_op_size#, 8/5); "small filled lozenge"; + x0 = w - x2 = side_bearing; + y0 = y2 = ypart centre; + x1 = x3 = xpart centre; + y1 = h; + y3 = -d; + + fill z0 -- z1 -- z2 -- z3 -- cycle; +endchar; + +beginoperator(1/sqrt(2)*med_op_size#, 8/5); "medium lozenge"; + x0 = w - x2 = side_bearing; + y0 = y2 = ypart centre; + x1 = x3 = xpart centre; + y1 = h; + y3 = -d; + + theta := angle(z1 - z0); + + x0' = x0 + line_thickness / sind theta; + x2' = x2 - line_thickness / sind theta; + y0' = y2' = y0; + y1' = y1 - line_thickness / cosd theta; + y3' = y3 + line_thickness / cosd theta; + x1' = x3' = x1; + + fill z0 -- z1 -- z2 -- z3 -- cycle; + unfill z0' -- z1' -- z2' -- z3' -- cycle; +endchar; + +beginoperator(1/sqrt(2)*med_op_size#, 8/5); "medium filled lozenge"; + x0 = w - x2 = side_bearing; + y0 = y2 = ypart centre; + x1 = x3 = xpart centre; + y1 = h; + y3 = -d; + + fill z0 -- z1 -- z2 -- z3 -- cycle; +endchar; + +beginoperator(1/sqrt(2)*med_op_size#, 8/5); "medium lozenge minus"; + thick := line_thickness; + + x0 = w - x2 = side_bearing; + y0 = y2 = ypart centre; + x1 = x3 = xpart centre; + y1 = h; + y3 = -d; + + theta := angle(z1 - z0); + + x0' = x0 + thick / sind theta; + x2' = x2 - thick / sind theta; + y0' = y2' = y0; + y1' = y1 - thick / cosd theta; + y3' = y3 + thick / cosd theta; + x1' = x3' = x1; + + fill z0 -- z1 -- z2 -- z3 -- cycle; + unfill z0' -- z1' -- z2' -- z3' -- cycle; + draw_line(z0', z2', true); +endchar; + +beginoperator(5/4small_op_size#, 1); "small star"; + r := radius + line_thickness; + t := 1/11r; + + reg_poly_points(a)(5, centre - t * up, r, 90); + reg_poly_points(b)(5, centre - t * up, .4r, 126); + + s := r - 4/5line_thickness / sind (270 - angle (z.b0 - z.a0)); + + reg_poly_points(c)(5, centre - t * up, s, 90); + reg_poly_points(d)(5, centre - t * up, .4s, 126); + + fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle; + unfill z.c0 -- z.d0 -- z.c1 -- z.d1 -- z.c2 -- z.d2 -- z.c3 -- z.d3 -- z.c4 -- z.d4 -- cycle; +endchar; + +beginoperator(small_op_size#, 1); "small filled star"; + r := radius + line_thickness; + t := 1/11r; + + reg_poly_points(a)(5, centre - t * up, r, 90); + reg_poly_points(b)(5, centre - t * up, .4r, 126); + + fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle; +endchar; + +beginoperator(med_op_size#, 1); "medium star"; + r := radius + line_thickness; + t := 1/11r; + + reg_poly_points(a)(5, centre - t * up, r, 90); + reg_poly_points(b)(5, centre - t * up, .4r, 126); + + s := r - line_thickness / sind (270 - angle (z.b0 - z.a0)); + + reg_poly_points(c)(5, centre - t * up, s, 90); + reg_poly_points(d)(5, centre - t * up, .4s, 126); + + fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle; + unfill z.c0 -- z.d0 -- z.c1 -- z.d1 -- z.c2 -- z.d2 -- z.c3 -- z.d3 -- z.c4 -- z.d4 -- cycle; +endchar; + +beginoperator(med_op_size#, 1); "medium filled star"; + r := radius + line_thickness; + t := 1/11r; + + reg_poly_points(a)(5, centre - t * up, r, 90); + reg_poly_points(b)(5, centre - t * up, .4r, 126); + + fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle; +endchar; + +beginoperator(large_op_size#, 1); "large star"; + r := radius + line_thickness; + t := 1/11r; + + reg_poly_points(a)(5, centre - t * up, r, 90); + reg_poly_points(b)(5, centre - t * up, .4r, 126); + + s := r - line_thickness / sind (270 - angle (z.b0 - z.a0)); + + reg_poly_points(c)(5, centre - t * up, s, 90); + reg_poly_points(d)(5, centre - t * up, .4s, 126); + + fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle; + unfill z.c0 -- z.d0 -- z.c1 -- z.d1 -- z.c2 -- z.d2 -- z.c3 -- z.d3 -- z.c4 -- z.d4 -- cycle; +endchar; + +beginoperator(large_op_size#, 1); "large filled star"; + r := radius + line_thickness; + t := 1/11r; + + reg_poly_points(a)(5, centre - t * up, r, 90); + reg_poly_points(b)(5, centre - t * up, .4r, 126); + + fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle; +endchar; + +beginoperator(small_op_size#, 1); "asterisk"; + r := w/2 - side_bearing; + + penpos a0(4/3line_thickness, 0); + penpos a1(4/3line_thickness, 60); + penpos a2(4/3line_thickness, 120); + penpos a3(4/3line_thickness, 180); + penpos a4(4/3line_thickness, 240); + penpos a5(4/3line_thickness, 300); + + penpos b0(2/3line_thickness, 0); + penpos b1(2/3line_thickness, 60); + penpos b2(2/3line_thickness, 120); + penpos b3(2/3line_thickness, 180); + penpos b4(2/3line_thickness, 240); + penpos b5(2/3line_thickness, 300); + + reg_poly_points(a)(6, centre, r, 90); + + z.b0 = z.b1 = z.b2 = z.b3 = z.b4 = z.b5 = centre; + + fill stroke z.a0e -- z.b0e; + fill stroke z.a1e -- z.b1e; + fill stroke z.a2e -- z.b2e; + fill stroke z.a3e -- z.b3e; + fill stroke z.a4e -- z.b4e; + fill stroke z.a5e -- z.b5e; +endchar; + +beginsymbol(18/10order_width# + 2side_bearing#, vcentre(2equal_spread# + line_thickness#)); "infinity"; + pair centre; + centre := (w/2, (h-d)/2); + thick := line_thickness; + alpha := 0; + + z0 = centre - (9/10order_width - 1/2thick) * dir alpha; + z1 = centre + (9/10order_width - 1/2thick) * dir alpha; + z6 = 1/5[z0,z1]; + z7 = 4/5[z0,z1]; + z2 = z6 + equal_spread * dir (alpha + 90); + z3 = z6 - equal_spread * dir (alpha + 90); + z4 = z7 + equal_spread * dir (alpha + 90); + z5 = z7 - equal_spread * dir (alpha + 90); + z8 = z9 = centre; + + penpos0(thick, alpha); + penpos1(thick, alpha); + penpos2(thick, alpha - 90); + penpos3(thick, alpha + 90); + penpos4(thick, alpha + 90); + penpos5(thick, alpha - 90); + penpos8(thick, alpha - 135); + penpos9(thick, alpha + 135); + + fill stroke z4.e{dir (alpha + 180)} + .. {dir (alpha + 225)}z9.e + .. {dir (alpha + 180)}z3.e + .. {dir (alpha + 90)}z0.e + .. {dir alpha}z2.e + .. {dir (alpha - 45)}z8.e + .. {dir alpha}z5.e + .. {dir (alpha + 90)}z1.e + .. cycle; + + penlabels (0,1,2,3,4,5,6,7,8,9); +endchar; + +for alpha = 0, 180: + beginsymbol(16/10order_width# + 2side_bearing#, vcentre(2equal_spread# + line_thickness#)); "proportional"; + pair centre; + centre := (w/2, (h-d)/2); + thick := line_thickness; + + z0 = centre - (8/10order_width - 1/2thick) * dir alpha; + z1 = centre + (7/10order_width - 1/2thick) * dir alpha; + z4 = z1 + equal_spread * dir (alpha + 90); + z5 = z1 - equal_spread * dir (alpha + 90); + z6 - z4 = z7 - z5 = (1/10order_width + 1/2thick) * dir alpha; + z10 = 1/4[z0,z1]; + z2 = z10 + equal_spread * dir (alpha + 90); + z3 = z10 - equal_spread * dir (alpha + 90); + z8 = z9 = centre + 1/10order_width * dir alpha; + + penpos0(thick, alpha); + penpos2(thick, alpha - 90); + penpos3(thick, alpha + 90); + penpos4(thick, alpha + 90); + penpos5(thick, alpha - 90); + penpos6(thick, alpha + 90); + penpos7(thick, alpha - 90); + penpos8(thick, alpha + 225); + penpos9(thick, alpha + 135); + + fill stroke z6.e + -- z4.e{dir (alpha + 180)} + .. {dir (alpha + 225)}z9.e + .. {dir (alpha + 180)}z3.e + .. {dir (alpha + 90)}z0.e + .. {dir alpha}z2.e + .. {dir (alpha - 45)}z8.e + .. {dir alpha}z5.e + -- z7.e; + + penlabels (0,1,2,3,4,5,6,7,8,9); + endchar; +endfor; + +beginsymbol(14/10order_width# + 2side_bearing#, vcentre(2equal_spread# + line_thickness#)); "crossing"; + pair centre; + centre := (w/2, (h-d)/2); + thick := line_thickness; + alpha := 0; + + z0 = centre - (6/10order_width - 1/2thick) * dir alpha; + z1 = centre + (6/10order_width - 1/2thick) * dir alpha; + z2 = z0 + equal_spread * dir (alpha + 90); + z3 = z0 - equal_spread * dir (alpha + 90); + z4 = z1 + equal_spread * dir (alpha + 90); + z5 = z1 - equal_spread * dir (alpha + 90); + z6 - z4 = z7 - z5 = (1/10order_width + 1/2thick) * dir alpha; + z2 - z8 = z3 - z9 = (1/10order_width + 1/2thick) * dir alpha; + z10 = z11 = 1/2[z0,z1]; + + penpos2(thick, alpha + 90); + penpos3(thick, alpha + 90); + penpos4(thick, alpha + 90); + penpos5(thick, alpha + 90); + penpos6(thick, alpha + 90); + penpos7(thick, alpha + 90); + penpos8(thick, alpha + 90); + penpos9(thick, alpha + 90); + penpos10(thick, alpha + 45); + penpos11(thick, alpha + 135); + + fill stroke z6.e + -- z4.e{dir (alpha + 180)} + .. {dir (alpha + 225)}z11.e + .. {dir (alpha + 180)}z3.e + -- z9.e; + fill stroke z8.e + -- z2.e{dir alpha} + .. {dir (alpha - 45)}z10.e + .. {dir alpha}z5.e + -- z7.e; + + penlabels (0,1,2,3,4,5,6,7,8,9,10,11); +endchar; + +beginsymbol(equal_spread# + line_thickness# + 2side_bearing#, vcentre(med_op_size#)); "between"; + pair centre; + centre := (w/2, (h-d)/2); + r := med_op_size/2; + + z0 = centre; + z1 = centre; + + draw_smile(a, 1, z0 - r * up, z0 + r * up, equal_spread, line_thickness, true); + draw_smile(b, -1, z1 - r * up, z1 + r * up, equal_spread, line_thickness, true); +endchar; + +beginsymbol(11/5equal_spread# + line_thickness# + 2side_bearing#, vcentre(med_op_size#)); "reversed between"; + pair centre; + centre := (w/2, (h-d)/2); + r := med_op_size/2; + + z0 = centre + 3/4equal_spread * right; + z1 = centre - 3/4equal_spread * right; + + draw_smile(a, -1, z0 - r * up, z0 + r * up, 2/3equal_spread, line_thickness, true); + draw_smile(b, 1, z1 - r * up, z1 + r * up, 2/3equal_spread, line_thickness, true); +endchar; + +for sign = 1, -1: + beginsymbol(order_width# + 2side_bearing#, cap_height#, 0); "top"; + z1 - z0 = z3 - z2 = (order_width - line_thickness) * right; + z2 - z0 = sign * (cap_height - line_thickness) * up; + + 1/2[1/2[z0,z1], 1/2[z2,z3]] = (w/2, (h-d)/2); + + draw_line(z0, z1, true); + draw_line(1/2[z0,z1], 1/2[z2,z3], true); + endchar; +endfor; + +beginsymbol(2/3equal_spread# + line_thickness# + 2side_bearing#, vcentre(plus_size#)); "wreath"; + pair centre; + centre := (w/2, (h-d)/2); + + draw_sim(a, centre + 1/2plus_size * up, centre - 1/2plus_size * up, 1/3equal_spread, thick); +endchar; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "angle"; + z0 = centre + (plus_size - line_thickness)/2 * down; + z1 = z0 + sign * 1/2plus_size * right; + z2 = z0 + sign * 1/2plus_size * left; + x3 = xpart centre + sign * 1/2plus_size; + y3 = ypart centre + 2/3plus_size; + z4 = 4/5[z2,z3]; + z5 = z4l + whatever * (z2 - z4); + z5 = z1r + whatever * right; + z6 = z4r + whatever * (z2 - z4); + z6 = z1r + whatever * right; + z7 = z1l + whatever * right; + z7 = z6 + whatever * dir (90 + sign * 17); + + penpos1(line_thickness, 90); + penpos4(line_thickness, angle(z3 - z2) + sign * 90); + + fill z1r -- z5 -- z4l -- z4r -- z6 -- z7 -- z1l -- cycle; + + penlabels(1,2,3,4,5,6,7); + endchar; +endfor; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "measured angle"; + z0 = centre + (plus_size - line_thickness)/2 * down; + z1 = z0 + sign * 1/2plus_size * right; + z2 = z0 + sign * 1/2plus_size * left; + x3 = xpart centre + sign * 1/2plus_size; + y3 = ypart centre + 2/3plus_size; + z4 = 4/5[z2,z3]; + z5 = z4l + whatever * (z2 - z4); + z5 = z1r + whatever * right; + z6 = z4r + whatever * (z2 - z4); + z6 = z1r + whatever * right; + z7 = z1l + whatever * right; + z7 = z6 + whatever * dir (90 + sign * 17); + z8 = 2/3[z2,z1]; + z9 = z2 + sign * ((z8 - z2) rotated angle (z3 - z2)); + + penpos1(line_thickness, 90); + penpos4(line_thickness, angle(z3 - z2) + sign * 90); + penpos8(line_thickness, 90 - sign * 90); + penpos9(line_thickness, angle(z3 - z2)); + + fill z1r -- z5 -- z4l -- z4r -- z6 -- z7 -- z1l -- cycle; + fill stroke z8.e{up} .. {dir (angle (z3 - z2) + sign * 90)}z9.e; + + penlabels(1,2,3,4,5,6,7,8,9); + endchar; +endfor; + +for alpha = 0, 90, 180, 270: + beginoperator(plus_size#, 1); "spherical angle (" & decimal alpha & ")"; + draw_less(a, centre - 1/2plus_size * dir alpha, centre + 1/2plus_size * dir alpha, 2radius, line_thickness, false); + z3 = 2/3[z2a, z0a]; + z4 = 2/3[z2a, z1a]; + + penpos3(line_thickness, alpha + 35); + penpos4(line_thickness, alpha - 35); + + fill stroke z4.e{dir (alpha + 55)} .. {dir (alpha + 125)}z3.e; + + penlabels(3,4); + endchar; +endfor; + +beginoperator(plus_size#, 1); "right angle"; + z3 - z0 = z2 - z1 = 2radius * right; + z0 - z1 = 2radius * up; + 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre; + + draw_line(z0, z1, true); + draw_line(z1, z2, true); +endchar; + +beginoperator(plus_size#, 1); "measured right angle"; + thick := line_thickness; + + z3 - z0 = z2 - z1 = 2radius * right; + z0 - z1 = 2radius * up; + 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre; + z4 = 3/5[z1,z0] + (1/2thick - eps) * right; + z5 = 3/5[z1,z2] + (1/2thick - eps) * up; + + penpos4(thick, 90); + penpos5(thick, 0); + + draw_line(z0, z1, true); + draw_line(z1, z2, true); + fill stroke z4.e{right} .. {down}z5.e; + + penlabels(0,1,2,3,4,5); +endchar; + +beginoperator(plus_size#, 1); "squared right angle"; + z3 - z0 = z2 - z1 = 2radius * right; + z0 - z1 = 2radius * up; + 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre; + z4 = 1/2[z1,z0]; + z5 = 1/2[z1,z2]; + + penpos4(line_thickness, 90); + penpos5(line_thickness, 0); + + draw_line(z0, z1, true); + draw_line(z1, z2, true); + draw_line(z4, centre, true); + draw_line(z5, centre, true); + + penlabels(0,1,2,3,4,5); +endchar; + +beginoperator(plus_size#, 1); "right angle with dot"; + thick := line_thickness; + + z3 - z0 = z2 - z1 = 2radius * right; + z0 - z1 = 2radius * up; + 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre; + z4 = 3/5[z1,z0] + (1/2thick - eps) * right; + z5 = 3/5[z1,z2] + (1/2thick - eps) * up; + z6 = 1/4[z1,z3]; + + penpos4(line_thickness, 90); + penpos5(line_thickness, 0); + + draw_line(z0, z1, true); + draw_line(z1, z2, true); + fill stroke z4.e{right} .. {down}z5.e; + fill dot(z6, 1/2dot_size); + + penlabels(0,1,2,3,4,5); +endchar; + +beginsymbol(4u#, 4/5asc_height#, 0); "prime"; + z0 = (w, h); + z1 = z0 + 2u * left; + z2 = (1u, 1/9h); + z3 = z2 + 4/3u * right; + + fill z0 -- z1 -- z2 -- z3 -- cycle; +endchar; + +beginsymbol(4u#, 4/5asc_height#, 0); "backprime"; + z0 = (0, h); + z1 = z0 + 2u * right; + z2 = (w - 1u, 1/9h); + z3 = z2 + 4/3u * left; + + fill z0 -- z1 -- z2 -- z3 -- cycle; +endchar; + +for sign = 1, -1: + beginoperator(plus_size#, 1); "product"; + draw_product(centre, plus_size, plus_size, sign, 4/3line_thickness); + endchar; +endfor; + +beginsymbol(2/5asc_height# + 2side_bearing#, asc_height#, 0); "small integral"; + pair centre; + centre := (w/2, (h - d)/2); + + draw_integral(a, 1/2, centre, 4/3line_thickness); +endchar; + +beginsymbol(13u# + 2side_bearing#, asc_height#, 0); "check mark"; + x1l = side_bearing; + y1 = math_axis; + x2 = side_bearing + 3u; + y2 = -d; + x3 = w -x2; + y3 = h; + x4r = w - side_bearing; + y4l = h; + z5r = 1/10[z4r,z1r]; + + theta := angle(z3 - z2); + + penpos1(4/3thick, 30); + penpos2(thick, 0); + penpos3(thick, -90 + theta); + penpos4(1/3thick, -80); + penpos5(thick, -50); + + z6 = z1r + whatever * (z2l - z1l); + z6 = z3l + whatever * (z3r - z2r); + + fill z1l -- z2l -- z2r{z3r - z2r} .. {dir 40}z5r .. z4r -- z4l{dir 180} ... z5l{dir 220} .. {z2l - z3l}z6 -- z1r -- cycle; + + penlabels(1,2,3,4,5,6); +endchar; + +beginsymbol(7u# + 2side_bearing#, 5/4asc_height#, 1/8asc_height#); "lightning"; + thick := line_thickness; + + x3r = w - side_bearing; + x2l = side_bearing + u; + x4 = 1/3w; + y1l = h; + y3r = 14/24h; + y4 = -d + 1/2thick; + z6 - z5 = whatever * dir 15; + + penpos1(3/2thick, -20); + penpos2(3/2thick, 15); + penpos3(2thick, 15); + penpos4(thick, -20); + penpos5(thick, -75); + penpos6(thick, -75); + + z1 - z2 = whatever * (z4 - z3); + z5r = z2; + z6l = z3; + z7 = whatever[z1r,z2r]; + z7 = whatever[z5l,z6l]; + z8 = whatever[z4l,z3l]; + z8 = whatever[z6r,z5r]; + + fill z1l -- z2l -- z8 -- z4l -- z4r -- z3r -- z7 -- z1r -- cycle; + draw_arrowhead(z4, angle (z4l - z3l), 4/5arrow_spread, thick); + + penlabels(1,2,3,4,7,8); +endchar; + +for filled = false, true: + beginsymbol(13u#, cap_height#, 0); "diamond suit"; + thick := line_thickness; + bend := 5; + + x0 = x2 = x4 = x6 = w/2; + 1/2[y0,y2] = 1/2[y4,y6] = h/2; + y2 - y0 = h; + 1/2[x1,x3] = 1/2[x5,x7] = w/2; + x3 - x1 = w - 2side_bearing; + y1 = y3 = y5 = y7 = h/2; + + theta := angle(z2 - z1); + + y6 - y4 = h - 2thick / cosd theta; + x7 - x5 = w - 2side_bearing - 2thick / sind theta; + + fill z0{dir (180-theta-bend)} .. {dir (180-theta+bend)}z1{dir (theta-bend)} .. {dir (theta+bend)}z2{dir (-theta-bend)} .. {dir (-theta+bend)}z3{dir (180+theta-bend)} .. {dir (180+theta+bend)}z0 & cycle; + if not filled: + unfill z4{dir (180-theta-bend)} .. {dir (180-theta+bend)}z5{dir (theta-bend)} .. {dir (theta+bend)}z6{dir (-theta-bend)} .. {dir (-theta+bend)}z7{dir (180+theta-bend)} .. {dir (180+theta+bend)}z4 & cycle; + fi; + labels(0,1,2,3,4,5,6,7); + endchar; +endfor; + +for filled = false, true: + beginsymbol(14u#, cap_height#, 0); "heart suit"; + thick := line_thickness; + + x0 = x1l = x1'l = w/2; + y0 = 0; + 1/2[x2l,x3l] = w/2; + x3l - x2l = w - 2side_bearing; + y1r = y1'r; + y2l = y3l = 3/4h; + x4 = 1/2[x1,x2]; + x5 = 1/2[x1',x3]; + y4l = y5l = h; + h - y2 = 2(h - y1l); + + penpos1(thick, 180+45); + penpos1'(thick, -45); + penpos2(thick, 0); + penpos3(thick, 180); + penpos4(thick, -90); + penpos5(thick, -90); + + path p[]; + numeric t[]; + + z6 = z1r + whatever * dir (270+45); + z6 = z1'r + whatever * dir (270-45); + z7 = z0 + thick * dir 20; + z8 = z0 + thick * dir (180-20); + p1 = z7{dir (90+35)} .. {dir 90}z2r; + p2 = z3r{dir 270} .. {dir (270-35)}z8; + (t1,t2) = p1 intersectiontimes p2; + + fill z0{dir (90+35)} .. {dir 90}z2l .. {dir 0}z4l .. {dir (270+45)}z1l{dir (90-45)} .. {dir 0}z5l .. {dir 270}z3l .. {dir (270-35)}z0 & cycle; + if not filled: + unfill subpath (t1,1) of p1 & z2r{dir 90} .. {dir 0}z4r .. {dir (270+45)}z1r -- z6 -- z1'r{dir (90-45)} .. {dir 0}z5r .. {dir 270}z3r & subpath (0,t2) of p2 -- cycle; + fi; + + penlabels(0,1,1',2,3,4,5,6,7,8); + endchar; +endfor; + +beginsymbol(13u#, cap_height#, 0); "spade suit"; + x0 = x1 = w/2; + y0 = h; + 1/2[x2,x3] = w/2; + x3 - x2 = w - 2side_bearing; + y2 = y3; + x4 = 1/2[x1,x2]; + x5 = 1/2[x1,x3]; + y4 = y5 = 1/6h; + y2 - y4 = x4 - x2; + y1 = 3/5[y2,y4]; + x6 = x0; + y6 = 0; + + penpos1(2u, 0); + penpos6(3u, 0); + + fill z0{dir (270-30)} .. z2 .. z4 .. {dir (90-30)}z1l + -- z1r{dir (270+30)} .. z5 .. z3 .. {dir (90+30)}z0 -- cycle; + fill stroke z1e -- z6e; + + penlabels(0,1,2,3,4,5,6); +endchar; + +beginsymbol(14u#, cap_height#, 0); "club suit"; + r := 1/4(w - 2side_bearing); + + x0 = w/2; + y0 = h - 2.5r; + x1 = w - x3 = side_bearing + r; + y1 = y3 = y0; + x2 = x4 = x0; + y2 = h - r; + y4 = 0; + + penpos0(3/2u, 0); + penpos2(3/2u, 0); + penpos4(3u, 0); + + fill circle(z1, r); + fill circle(z2, r); + fill circle(z3, r); + fill stroke z2e -- z0e -- z4e; + + penlabels(0,1,2,3,4); +endchar; + +beginoperator(med_op_size#, 1); "maltese"; + r := 1/2med_op_size; + thick := line_thickness; + + 1/2[z0,z1] = centre + r * left; + 1/2[z2,z3] = centre + r * down; + 1/2[z4,z5] = centre + r * right; + 1/2[z6,z7] = centre + r * up; + z0 - z1 = z5 - z4 = r * up; + z3 - z2 = z6 - z7 = r * right; + 1/2[z8,z9] = centre + 1/2thick * up; + 1/2[z10,z11] = centre - 1/2thick * up; + z9 - z8 = z11 - z10 = 2thick * right; + 1/2[z12,z13] = centre + thick * up; + 1/2[z14,z15] = centre - thick * up; + z13 - z12 = z15 - z14 = thick * right; + + fill z0 -- z1 -- z10 -- z11 -- z4 -- z5 -- z9 -- z8 -- cycle; + fill z6 -- z7 -- z12 -- z14 -- z2 -- z3 -- z15 -- z13 -- cycle; + + labels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); +endchar; + +beginoperator(med_op_size#, 2/sqrt(3)); "star of david"; + r := med_op_size/sqrt(3); + + reg_poly_points(a)(6, centre, r, 90); + + s := r - 4/5line_thickness / sind (270 - angle (z.a2 - z.a0)); + + reg_poly_points(b)(6, centre, s, 90); + + z0.r = z.a0; z0.l = z.b0; + z1.r = z.a2; z1.l = z.b2; + z2.r = z.a4; z2.l = z.b4; + z3.r = z.a1; z3.l = z.b1; + z4.r = z.a3; z4.l = z.b3; + z5.r = z.a5; z5.l = z.b5; + + fill stroke z0.e -- z1.e -- z2.e -- cycle; + fill stroke z4.e -- z5.e -- z3.e -- cycle; + + penlabels(0,1,2,3,4,5); +endchar; + +beginoperator(plus_size#, 1); "sector"; + thick := line_thickness; + alpha := 90; + + z0 = centre - 1/2plus_size * dir alpha; + z1 = z0 + 9/10plus_size * dir alpha; + + draw_less(a, z0, z1, 9/10plus_size, thick, false); + + theta := angle(z0a - z2a) - alpha; + + z0a - z4 = 1/2thick * dir (alpha + theta); + z1a - z5 = 1/2thick * dir (alpha - theta); + + penpos4(thick, alpha + theta); + penpos5(thick, alpha - theta); + + fill stroke z4.e{dir (alpha + theta - 90)} .. {dir(alpha - theta - 90)}z5.e; +endchar; + +beginsymbol(5/4order_width# + 2side_bearing#, cap_height#, 0); "forall"; + thick := 5/4line_thickness; + + x0 = side_bearing + 1/2thick; + x1 = w - side_bearing - 1/2thick; + x2 = w/2 - 1/4thick; + x3 = w/2 + 1/4thick; + y0 = y1 = h; + y2 = y3 = 0; + + penpos0(thick * cosd(angle(z2 - z0) + 90), 0); + penpos1(thick * cosd(angle(z2 - z0) + 90), 0); + + z4 = z0l + whatever * (z2 - z0) = z2 + whatever * right; + z5 = z1r + whatever * (z3 - z1) = z2 + whatever * right; + z6 = z0r + whatever * (z2 - z0) = z1l + whatever * (z3 - z1); + z7 = whatever [z0,z2]; + z8 = whatever [z1,z2]; + y7 = y8 = 0.6 * y0; + + fill z0l -- z4 -- z5 -- z1r -- z1l -- z6 -- z0r -- cycle; + draw_line(z7, z8, false); + + penlabels(0,1,2,3,4,5,6,7,8); +endchar; + +for negated = 0, 1: + beginsymbol(order_width# + 2side_bearing#, if negated = 0: cap_height# else: cap_height# + 2/3equal_spread# fi, if negated = 0: 0 else: 2/3equal_spread# fi); "exists"; + thick := 5/4line_thickness; + + x1 = x3 = w - side_bearing - thick/2; + y1 = cap_height; + y3 = 0; + x1' = x3' = w - side_bearing; + x0 = x2 = side_bearing; + y0 = y1' = cap_height - line_thickness/2; + y2 = y3' = line_thickness/2; + z4 = 1/8[1/2[z0,z2], 1/2[z1,z3]]; + + draw_straight(z1, z3, thick, false); + draw_line(z0, z1', false); + draw_line(z4, 1/2[z1,z3], false); + draw_line(z2, z3', false); + + if negated = 1: + stroke_through(1/2[1/2[z0,z2], 1/2[z1,z3]], h + d - stroke_through_thickness) + fi; + endchar; +endfor; + +beginsymbol(order_width# + 2side_bearing#, cap_height#, 0); "exists finitely many"; + thick := 5/4line_thickness; + + x1 = x3 = w - side_bearing - thick/2; + y1 = cap_height; + y3 = 0; + x3' = w - side_bearing; + x0 = x2 = side_bearing; + y0 = cap_height - line_thickness/2; + y2 = y3' = line_thickness/2; + z4 = 1/8[1/2[z0,z2], 1/2[z1,z3]]; + + draw_straight(z1, z3, thick, false); + draw_line(z4, 1/2[z1,z3], false); + draw_line(z2, z3', false); +endchar; + +beginsymbol(5/4order_width# + 2side_bearing#, cap_height#, 0); "game quantifier"; + thick := 5/4line_thickness; + + x0 = x1 = 1/2order_width + side_bearing; + y0 = cap_height - 1/2thick; + y1 = 1/2line_thickness; + x2 = w - side_bearing - 1/2thick; + y2 = (h - d)/2; + x3r = x4r = side_bearing; + y3 = 5/6cap_height; + y4 = 1/6cap_height; + + penpos0(thick, 90); + penpos1(thick, -90); + penpos2(thick, 0); + penpos3(thick, 125); + penpos4(thick, -125); + + fill stroke z3.e .. z0.e .. z2.e{down} .. z1.e{left} .. z4.e; + draw_straight(z4r + 1/2thick * right, 2/5[z4r,z3r] + 1/2thick * right, thick, false); + draw_line(2/5[z4r,z3r], 2/5[z4r,z3r] + 1/2order_width * right, false); + + penlabels(0,1,2,3,4); +endchar; + +beginsymbol(7/8order_width# + 2side_bearing#, cap_height#, 0); "complement"; + thick := 5/4line_thickness; + + z0 - z1 = (cap_height - thick) * up; + z3 - z2 = (w - 2side_bearing - thick) * right; + 1/2[z0,z1] = 1/2[z2,z3] = (w/2,(h-d)/2); + x4 = x6 = x2; + x5 = x7 = x3; + y4 = y5 = 1/4[y0,y1]; + y6 = y7 = 3/4[y0,y1]; + + penpos0(thick, 90); + penpos1(thick, -90); + penpos4(thick, -180); + penpos5(thick, 0); + penpos6(thick, -180); + penpos7(thick, 0); + + fill stroke z5.e{up} .. z0.e .. {down}z4.e -- z6.e{down} .. z1.e .. {up}z7.e; + + penlabels(0,1,2,3,4,5,6,7); +endchar; + +beginsymbol(6u# + 2side_bearing#, asc_height#, 1/2line_thickness#); "flat"; + thick := line_thickness; + + x0l = x1l = side_bearing; + x4l = x5 = side_bearing + thick; + y0 = -d; + y1 = h; + x2r = w - side_bearing; + x3 = w/2; + y3r = x_height; + y2 = 1/2[y0,y1]; + y4r = 5/6x_height; + y5 = thick * (1 + sind 35) / cosd 35 - d; + + penpos0(thick, 0); + penpos1(thick, 0); + penpos2(3/2thick, 0); + penpos3(thick, 90); + penpos4(thick, 130); + + fill z1.l -- z0.l{dir 35} ... {up}z2.r .. {left}z3.r ..{dir 230}z4.r -- z4.l{dir 50} .. {right}z3.l .. {down}z2.l .. {dir 215}z5 -- z1.r -- cycle; + + penlabels (0,1,2,3,4,5); +endchar; + +beginsymbol(6u# + 2side_bearing#, asc_height#, desc_depth#); "natural"; + thick := line_thickness; + + x0l = x1l = w - x2r = w - x3r = side_bearing; + x4 = x5 = w - x6 = w - x7 = side_bearing; + y1 = y3 = h; + y7r = x_height; + y4l = 0; + y0 = y2 = -d; + z6 = z4 + whatever * dir 15; + z5 = z7 + whatever * dir 15; + + penpos0(thick, 0); + penpos1(thick, 0); + penpos2(thick, 0); + penpos3(thick, 0); + penpos4(3/2thick, 90); + penpos5(3/2thick, 90); + penpos6(3/2thick, 90); + penpos7(3/2thick, 90); + + z8 = whatever[z0,z1] = whatever[z4,z6]; + z9 = whatever[z2,z3] = whatever[z5,z7]; + + penpos8(thick, 0); + penpos9(thick, 0); + + fill stroke z1e -- z8e; + fill stroke z9e -- z2e; + fill stroke z4e -- z6e; + fill stroke z5e -- z7e; + + penlabels(1,2,4,5,6,7); +endchar; + +beginsymbol(6u# + 2side_bearing#, asc_height#, desc_depth#); "sharp"; + thick := line_thickness; + + x0l = x1l = w - x2r = w - x3r = side_bearing + u; + x4 = x5 = w - x6 = w - x7 = side_bearing; + y3 = h; + y7r = x_height; + y4l = 0; + y0 = -d; + z2 = z0 + whatever * dir 20; + z1 = z3 + whatever * dir 20; + z6 = z4 + whatever * dir 15; + z5 = z7 + whatever * dir 15; + + penpos0(thick, 0); + penpos1(thick, 0); + penpos2(thick, 0); + penpos3(thick, 0); + penpos4(3/2thick, 90); + penpos5(3/2thick, 90); + penpos6(3/2thick, 90); + penpos7(3/2thick, 90); + + fill stroke z0e -- z1e; + fill stroke z2e -- z3e; + fill stroke z4e -- z6e; + fill stroke z5e -- z7e; + + penlabels (0,1,2,3,4,5,6,7); +endchar; + +beginsymbol(10u# + 2side_bearing#, cap_height#, 0); "aleph"; + thick := line_thickness; + + x0l = x2l = side_bearing; + x1r = x3r = w - side_bearing; + y0 = h; + y1 = h; + y2 = 0; + y3 = 0; + + penpos0(3/2thick, 20); + penpos1(4/3thick, 2); + penpos2(3/2thick, 0); + penpos3(4/3thick, 20); + + path p; + p = z0{dir -70} .. {dir -70}z3; + + z4 = point 3/10 of p; + z5 = point 5/8 of p; + + penpos4(5/4thick, -40); + penpos5(5/4thick, -45); + + fill stroke z0.e{dir -70} .. {dir -70}z3.e; + fill stroke z2.e{up} .. {dir 50}z4.e; + fill stroke z5.e{dir 45} .. {up}z1.e; + + penlabels(0,1,2,3,4,5); +endchar; + +beginsymbol(10u# + 2side_bearing#, cap_height#, 0); "beth"; + thick := line_thickness; + + x0 = u + side_bearing; + x1 = 5/8[x2,x4]; + x2 = side_bearing; + x3 = w - side_bearing; + y0r = h; + y1r = h; + y2l = 0; + y3l = 0; + z4r = 7/8[z2,z3]; + x5 = x4; + y5 = 2/3h; + + penpos0(3/2thick, 75); + penpos1(3/2thick * sind 75, 90); + penpos2(3/2thick, 75); + penpos3(3/2thick, 75); + penpos4(5/4thick, 0); + penpos5(5/4thick, 0); + + fill stroke z2.e -- z3.e; + fill stroke z0.e -- z1.e{right} ..tension3/4.. {down}z5.e -- z4.e; + + penlabels(0,1,2,3,4,5); +endchar; + +beginsymbol(7u# + 2side_bearing#, cap_height#, 0); "gimel"; + thick := line_thickness; + + x0 = x2 = side_bearing; + x2'r = 1/8[x0,x1]; + x1 = x3r = w - side_bearing; + x4 = 1/4[x0,x1]; + x5 = 1/2[x0,x1]; + x6 = 2/3[x0,x1]; + y0 = y1 = h; + y2l = y3 = 0; + y2' = y2; + y4r = h + 1/4thick; + z5 = z4 + whatever * dir -30; + y6 = 2/3h; + + penpos2(3/2thick, 80); + penpos2'(3/2thick * sind 80, 90); + penpos3(4/3thick, 0); + penpos4(3/2thick, 60); + penpos5(3/2thick, 60); + penpos6(5/4thick, 0); + + path p; + p = z6{dir -82} .. {dir -67}z3; + z7 = point 1/4 of p; + x8 = 2/5[x0,x1]; + z7 = z8 + whatever * dir 60; + + penpos7(thick, 150); + penpos8(thick, 150); + + fill stroke z4.e -- z5.e{dir -30} .. {dir -82}z6.e .. {dir -67}z3.e; + fill stroke z2.e -- z2'.e{right} ..tension 3/4 and 1.. {dir 60}z8.e -- z7.e; + + penlabels(2,3,4,5,6,7,8); +endchar; + +beginsymbol(9u# + 2side_bearing#, cap_height#, 0); "daleth"; + thick := line_thickness; + + x0 = side_bearing; + x1 = w - side_bearing; + y0r = y1r = h; + x3r = x2r = 4/5[x0,x1]; + y2 = y0; + y3 = 0; + + penpos0(3/2thick, 75); + penpos1(3/2thick, 75); + penpos2(5/4thick, 0); + penpos3(5/4thick, 0); + + fill stroke z0.e -- z1.e; + fill stroke z2.e -- z3.e; + + penlabels(0,1,2,3); +endchar; + +begingroup; +save slant; +save currenttransform; +slant := 0.212557; +transform currenttransform; +currenttransform := identity slanted slant yscaled aspect_ratio scaled granularity shifted (-u,0); + +beginsymbol(11u#, x_height#, desc_depth#); "Weierstrass p"; + numeric theta; + theta = 90 - angle(8u,h); + slope := -h/8u; % angle at middle + superness := 1/sqrt 2; + superpull := 1/6; + + penpos2(line_thickness, -60); + penpos1(4/3line_thickness, theta); + penpos7(line_thickness, -90); + + x2 + 1/2u = x1 = x7 - 1/2u = 3u; + y2l = h; + y7r = -d; + y1 = 2/5[-d, h]; + x3l = .5u; + x6r = max(rt x7 + .5, .5w - .25u); + x3r - x3l = x6r - x6l = 5/4line_thickness; + + ellipse_set(2l,3l,4l,1l); + ellipse_set(2r,3r,4r,1r); + ellipse_set(7l,6l,5l,1l); + ellipse_set(7r,6r,5r,1r); + + y3 = y3r; + y6 = y6r; + + fill stroke super_arc.e(2,3) & z3e{down} .. z4e --- z5e .. z6e{down} & super_arc.e(6,7); % flourish + + penpos8(line_thickness, 180); + penpos9(line_thickness, 90); + penpos10(3/2line_thickness, 0); + penpos11(line_thickness, -90); + penpos12(line_thickness, -100); + + x10r = w - 1.5u + 1/2line_thickness; + x8l = 2.25u; + x9 = x11 = .5w + 1.5u; + x12l = max(x6r, .5w + .5u); + y8 = y11r = 0; + top y9r = .95h; + y10 = .5[y9,y11]; + y12r = 1/4[y11r,y1l]; + + fill stroke z7e{left} ... z8e{up} ... pulled_arc.e(9,10) & pulled_arc.e(10,11) .. z12.e; % stem and bowl + + penlabels(1,2,3,4,5,6,7,8,9,10,11,12); +endchar; +endgroup; |