% There are some additional order glyphs in Sym-Geometric. Keep them consistent! vardef ifneg(text values) = select(negated)(values) enddef; % equal signs if negated < 2: beginorder(1, order_width# + rule_thickness#, ifneg(1,3) * equal_spread# + rule_thickness#); "equal"; pickup rule_pen; z1 - z0 = equal_spread * dir 90; z3 - z2 = equal_spread * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; draw z0 -- z2; draw z1 -- z3; if negated = 1: stroke_through(centre, 3equal_spread); fi; endchar; fi; if negated < 2: beginorder(1, order_width# + rule_thickness#, ifneg(2,4) * equal_spread# + rule_thickness#); "equiv"; pickup rule_pen; z2 - z1 = z1 - z0 = equal_spread * dir 90; z5 - z4 = z4 - z3 = equal_spread * dir 90; 1/2[z0, z2] = left_point; 1/2[z3, z5] = right_point; draw z0 -- z3; draw z1 -- z4; draw z2 -- z5; if negated = 1: stroke_through(centre, 4equal_spread); fi; endchar; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(2/3, 8/3)*equal_spread# + rule_thickness#); "sim"; pickup rule_pen; draw sim(left_point, right_point); if negated = 1: stroke_through(centre, 8/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(5/3, 11/3) * equal_spread# + rule_thickness#); "approx"; pickup rule_pen; draw sim(left_point + 1/2equal_spread * dir 90, right_point + 1/2equal_spread * dir 90); draw sim(left_point - 1/2equal_spread * dir 90, right_point - 1/2equal_spread * dir 90); if negated = 1: stroke_through(centre, 11/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(8/3, 14/3) * equal_spread# + rule_thickness#); "triple sim"; pickup rule_pen; draw sim(left_point + equal_spread * dir 90, right_point + equal_spread * dir 90); draw sim(left_point, right_point); draw sim(left_point - equal_spread * dir 90, right_point - equal_spread * dir 90); if negated = 1: stroke_through(centre, 14/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(5/3, 11/3) * equal_spread# + rule_thickness#); "sim equal"; pickup rule_pen; draw sim(left_point + 1/2equal_spread * dir 90, right_point + 1/2equal_spread * dir 90); draw (left_point - 5/6equal_spread * dir 90) -- (right_point - 5/6equal_spread * dir 90); if negated = 1: stroke_through(centre, 11/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(5/3, 11/3) * equal_spread# + rule_thickness#); "equal sim"; pickup rule_pen; draw (left_point + 5/6equal_spread * dir 90) -- (right_point + 5/6equal_spread * dir 90); draw sim(left_point - 1/2equal_spread * dir 90, right_point - 1/2equal_spread * dir 90); if negated = 1: stroke_through(centre, 11/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(8/3, 14/3) * equal_spread# + rule_thickness#); "cong"; pickup rule_pen; draw sim(left_point + equal_spread * dir 90, right_point + equal_spread * dir 90); draw (left_point - 1/3equal_spread * dir 90) -- (right_point - 1/3equal_spread * dir 90); draw (left_point - 4/3equal_spread * dir 90) -- (right_point - 4/3equal_spread * dir 90); if negated = 1: stroke_through(centre, 14/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(8/3, 14/3) * equal_spread# + rule_thickness#); "approx equal"; pickup rule_pen; draw sim(left_point + equal_spread * dir 90, right_point + equal_spread * dir 90); draw sim(left_point, right_point); draw (left_point - 4/3equal_spread * dir 90) -- (right_point - 4/3equal_spread * dir 90); if negated = 1: stroke_through(centre, 14/3equal_spread); fi; endchar; endfor; fi; if negated < 2: beginorder(1, order_width# + rule_thickness#, ifneg(1,3) * equal_spread# + 2/5order_width# + rule_thickness#); "bump equal"; pickup rule_pen; z1 - z0 = equal_spread * dir 90; z3 - z2 = equal_spread * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; draw z0 -- z2; draw z3 -- half_circle(1/2[z1,z3], order_width/5, 0) -- z1; if negated = 1: stroke_through(centre, 3equal_spread + 2/5order_width); fi; endchar; fi; if negated < 2: beginorder(1, order_width# + rule_thickness#, ifneg(1,3) * equal_spread# + 2/5order_width# + rule_thickness#); "equal bump"; pickup rule_pen; z0 - z1 = equal_spread * dir 90; z2 - z3 = equal_spread * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; draw z0 -- z2; draw z1 -- half_circle(1/2[z1,z3], order_width/5, 180) -- z3; if negated = 1: stroke_through(centre, 3equal_spread + 2/5order_width); fi; endchar; fi; if negated < 2: beginorder(1, order_width# + rule_thickness#, ifneg(1,3) * equal_spread# + 2/5order_width# + rule_thickness#); "double bump equal"; pickup rule_pen; z1 - z0 = equal_spread * dir 90; z3 - z2 = equal_spread * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; draw z0 -- half_circle(1/2[z0,z2], order_width/5, 180) -- z2; draw z3 -- half_circle(1/2[z1,z3], order_width/5, 0) -- z1; if negated = 1: stroke_through(centre, 3equal_spread + 2/5order_width); fi; endchar; fi; if negated < 2: beginorder(1, order_width# + rule_thickness#, 3equal_spread# + ifneg(2dot_size#, equal_spread# + rule_thickness#)); "dot equal"; pickup rule_pen; z1 - z0 = equal_spread * dir 90; z3 - z2 = equal_spread * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; draw z0 -- z2; draw z1 -- z3; fill circle(centre + 3/2equal_spread * dir 90, dot_size); if negated = 1: stroke_through(centre, 4equal_spread); fi; endchar; fi; if negated < 2: beginorder(1, order_width# + rule_thickness#, 3equal_spread# + ifneg(2dot_size#, equal_spread# + rule_thickness#)); "equal dot"; pickup rule_pen; z1 - z0 = equal_spread * dir 90; z3 - z2 = equal_spread * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; draw z0 -- z2; draw z1 -- z3; fill circle(centre - 3/2equal_spread * dir 90, dot_size); if negated = 1: stroke_through(centre, 4equal_spread); fi; endchar; fi; if negated < 2: beginorder(1, order_width# + rule_thickness#, 3equal_spread# + ifneg(2dot_size#, equal_spread# + rule_thickness#)); "dot equal dot"; pickup rule_pen; z1 - z0 = equal_spread * dir 90; z3 - z2 = equal_spread * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; draw z0 -- z2; draw z1 -- z3; fill circle(centre + 3/2equal_spread * dir 90, dot_size); fill circle(centre - 3/2equal_spread * dir 90, dot_size); if negated = 1: stroke_through(centre, 4equal_spread); fi; endchar; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, 3equal_spread# + ifneg(2dot_size#, equal_spread# + rule_thickness#)); "falling dot equal"; pickup rule_pen; z1 - z0 = equal_spread * dir 90; z3 - z2 = equal_spread * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; draw z0 -- z2; draw z1 -- z3; fill circle(left_point + 3/2equal_spread * dir 90, dot_size); fill circle(right_point - 3/2equal_spread * dir 90, dot_size); if negated = 1: stroke_through(centre, 4equal_spread); fi; endchar; endfor; fi; for round_smile = true, false: if negated < 2: for sign = 1, -1: beginorder(1, order_width# + rule_thickness#, ifneg(2/3, 8/3) * equal_spread# + rule_thickness#); "smile"; pickup rule_pen; draw smile(sign, left_point, right_point, 2/3equal_spread, round_smile); if negated = 1: stroke_through(centre, 8/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(1, order_width# + rule_thickness#, ifneg(5/3, 11/3) * equal_spread# + rule_thickness#); "double smile"; pickup rule_pen; s := 1/2equal_spread; draw smile(sign, left_point + s * dir 90, right_point + s * dir 90, 2/3equal_spread, round_smile); draw smile(sign, left_point - s * dir 90, right_point - s * dir 90, 2/3equal_spread, round_smile); if negated = 1: stroke_through(centre, 11/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(1, order_width# + rule_thickness#, ifneg(8/3, 14/3) * equal_spread# + rule_thickness#); "triple smile"; pickup rule_pen; s := equal_spread; draw smile(sign, left_point + s * dir 90, right_point + s * dir 90, 2/3equal_spread, round_smile); draw smile(sign, left_point, right_point, 2/3equal_spread, round_smile); draw smile(sign, left_point - s * dir 90, right_point - s * dir 90, 2/3equal_spread, round_smile); if negated = 1: stroke_through(centre, 14/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(1, order_width# + rule_thickness#, ifneg(7/3, 13/3) * equal_spread# + rule_thickness#); "smile frown"; pickup rule_pen; s := 5/6equal_spread; draw smile(sign, left_point + s * dir 90, right_point + s * dir 90, 2/3equal_spread, round_smile); draw smile(-sign, left_point - s * dir 90, right_point - s * dir 90, 2/3equal_spread, round_smile); if negated = 1: stroke_through(centre, 13/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(1, order_width# + rule_thickness#, ifneg(5/3, 11/3) * equal_spread# + rule_thickness#); "smile equal"; pickup rule_pen; s := 1/6equal_spread; draw smile(sign, left_point + 3s * dir 90, right_point + 3s * dir 90, 2/3equal_spread, round_smile); draw (left_point - 5s * dir 90) -- (right_point - 5s * dir 90); if negated = 1: stroke_through(centre, 11/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(1, order_width# + rule_thickness#, ifneg(5/3, 11/3) * equal_spread# + rule_thickness#); "equal smile"; pickup rule_pen; s := 1/6equal_spread; draw (left_point + 5s * dir 90) -- (right_point + 5s * dir 90); draw smile(sign, left_point - 3s * dir 90, right_point - 3s * dir 90, 2/3equal_spread, round_smile); if negated = 1: stroke_through(centre, 11/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(1, order_width# + rule_thickness#, ifneg(8/3, 14/3) * equal_spread# + rule_thickness#); "double smile equal"; pickup rule_pen; s := 1/6equal_spread; draw smile(sign, left_point + 6s * dir 90, right_point + 6s * dir 90, 2/3equal_spread, round_smile); draw smile(sign, left_point, right_point, 2/3equal_spread, round_smile); draw (left_point - 8s * dir 90) -- (right_point - 8s * dir 90); if negated = 1: stroke_through(centre, 14/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(1, order_width# + rule_thickness#, ifneg(10/3, 16/3) * equal_spread# + rule_thickness#); "smile equal frown"; pickup rule_pen; s := 4/3equal_spread; draw smile(sign, left_point + s * dir 90, right_point + s * dir 90, 2/3equal_spread, round_smile); draw left_point -- right_point; draw smile(-sign, left_point - s * dir 90, right_point - s * dir 90, 2/3equal_spread, round_smile); if negated = 1: stroke_through(centre, 16/3equal_spread); fi; endchar; endfor; fi; % Only the round version since we have no free glyphs left. if round_smile and (negated < 2): for sign = 1, -1: beginorder(1, order_width# + rule_thickness#, ifneg(10/3, 16/3) * equal_spread# + rule_thickness#); "smile frown equal"; pickup rule_pen; s := 1/6equal_spread; draw smile(sign, left_point + 8s * dir 90, right_point + 8s * dir 90, 2/3equal_spread, round_smile); draw smile(-sign, left_point - 1s * dir 90, right_point - 1s * dir 90, 2/3equal_spread, round_smile); draw (left_point - 10s * dir 90) -- (right_point - 10s * dir 90); if negated = 1: stroke_through(centre, 16/3equal_spread); fi; endchar; endfor; fi; endfor; if negated < 2: beginorder(1, order_width# + rule_thickness#, ifneg(1,3) * equal_spread# + rule_thickness#); "equal circled"; pickup rule_pen; z1 - z0 = equal_spread * dir 90; z3 - z2 = equal_spread * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; draw z0 -- z2; draw z1 -- z3; pickup pencircle scaled 3/4rule_thickness; draw circle(centre, 1/2equal_spread); if negated = 1: stroke_through(centre, 3equal_spread); fi; endchar; fi; if negated < 2: beginorder(1, order_width# + rule_thickness#, 3equal_spread# + 7/2dot_size# + rule_thickness#); "circ equal"; pickup rule_pen; z1 - z0 = equal_spread * dir 90; z3 - z2 = equal_spread * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; draw z0 -- z2; draw z1 -- z3; pickup pencircle scaled 3/4rule_thickness; draw circle(centre + 3/2equal_spread * dir 90, min (7/4dot_size, equal_spread - 3/4rule_thickness)); if negated = 1: stroke_through(centre, 3equal_spread + 7/2dot_size); fi; endchar; fi; if negated < 2: beginorder(1, order_width# + rule_thickness#, 3equal_spread# + 7/2dot_size# + rule_thickness#); "triangle equal"; pickup rule_pen; z1 - z0 = equal_spread * dir 90; z3 - z2 = equal_spread * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; x4 = xpart centre; y4 = y5 + sind 60 * (x6 - x5) = h - 1/2rule_thickness; y5 = y6; 1/2[x5, x6] = xpart centre; y5 - y1 = 2/3equal_spread; draw z0 -- z2; draw z1 -- z3; pickup pencircle scaled 3/4rule_thickness; draw z4 -- z5 -- z6 -- cycle; if negated = 1: stroke_through(centre, 3equal_spread + 7/2dot_size); fi; endchar; fi; if negated < 2: beginorder(1, order_width# + rule_thickness#, 5/2equal_spread# + 7/2dot_size# + rule_thickness#); "hat equal"; pickup rule_pen; z1 - z0 = equal_spread * dir 90; z3 - z2 = equal_spread * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; x4 = xpart centre; y4 = y5 + sind 30 * (x6 - x5) = h - 1/2rule_thickness; y5 = y6; 1/2[x5, x6] = xpart centre; y5 - y1 = 2/3equal_spread; draw z0 -- z2; draw z1 -- z3; draw z6 -- z4 -- z5; if negated = 1: stroke_through(centre, 3equal_spread + 7/2dot_size); fi; endchar; fi; % element signs if negated < 2: for sign = 1, -1: beginorder(sign, 17/24order_width# + rule_thickness#, ifneg(0,2) * equal_spread# + 8/9[equal_spread#, greater_spread#] + rule_thickness#); "element"; pickup rule_pen; s := 8/9[equal_spread, greater_spread]; z1 - z0 = s * dir 90; 1/2[z0, z1] = right_point; z3 - z2 = s * dir 90; 1/2[z2, z3] = 7/10[left_point,right_point]; draw z0 -- z2{left_point - right_point} .. left_point .. {right_point - left_point}z3 -- z1; draw left_point -- right_point; if negated = 1: stroke_through(centre, 2equal_spread + 8/9[equal_spread, greater_spread]); fi; endchar; endfor; fi; % orderings if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(0,2) * equal_spread# + greater_spread# + rule_thickness#); "less than"; pickup rule_pen; z1 - z0 = greater_spread * dir 90; 1/2[z0, z1] = right_point; draw z0 -- left_point -- z1; if negated = 1: stroke_through(centre, 2equal_spread + greater_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, greater_spread# + ifneg(2/3, 8/3) * equal_spread# + rule_thickness#); "less than or equal"; pickup rule_pen; z1 - z0 = greater_spread * dir 90; y2 = 1/2[y0, y1]; x2 = x3 = xpart left_point; y3 = y4; z0 - z4 = 2/3equal_spread * dir 90; 1/2[z1, z4] = right_point; draw z0 -- z2 -- z1; draw z3 -- z4; if negated = 1: stroke_through(centre, 8/3equal_spread + greater_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, greater_spread# + ifneg(1,3) * equal_spread# + rule_thickness#); "less than or slanted equal"; pickup rule_pen; z1 - z0 = greater_spread * dir 90; z2 - z3 = equal_spread * dir 90; z0 - z4 = equal_spread * dir 90; 1/2[z2, z3] = left_point; 1/2[z1, z4] = right_point; draw z0 -- z2 -- z1; draw z3 -- z4; if negated = 1: stroke_through(centre, 3equal_spread + greater_spread); fi; endchar; endfor; fi; if negated < 3: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, greater_spread# + ifneg(5/3, 11/3, 11/3) * equal_spread# + rule_thickness#); "less than or double equal"; pickup rule_pen; z1 - z0 = greater_spread * dir 90; y2 = 1/2[y0, y1]; x2 = x3 = x5 = xpart left_point; y3 = y4; z0 - z4 = 2/3equal_spread * dir 90; y5 = y6; z4 - z6 = equal_spread * dir 90; 1/2[z1, z6] = right_point; draw z0 -- z2 -- z1; draw z3 -- z4; draw z5 -- z6; if negated = 1: stroke_through(centre, 11/3equal_spread + greater_spread); elseif negated = 2: stroke_through(1/2[1/2[z3,z4], 1/2[z5,z6]], 3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, 3/2greater_spread# + ifneg(1,3) * equal_spread# + rule_thickness#); "less greater"; pickup rule_pen; y1 - y0 = greater_spread; y2 - y3 = equal_spread; y0 - y4 = equal_spread; y3 - y5 = greater_spread; x2 = x3 = x5 = xpart left_point; x0 = x1 = x4 = xpart right_point; y2 = 1/2[y0, y1]; 1/2[y1, y5] = ypart centre; draw z0 -- z2 -- z1; draw z3 -- z4 -- z5; if negated = 1: stroke_through(centre, 3equal_spread + 3/2greater_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, 2greater_spread# + ifneg(4/3, 10/3) * equal_spread# + rule_thickness#); "less equal greater"; pickup rule_pen; y2 - y0 = greater_spread; x0 = x2 = xpart right_point; y1 = 1/2[y0, y2]; x1 = xpart left_point; y5 - y3 = greater_spread; x3 = x5 = xpart left_point; y4 = 1/2[y3, y5]; x4 = xpart right_point; y0 - y5 = 4/3equal_spread; 1/2[y0, y5] = ypart centre; draw z0 -- z1 -- z2; draw z3 -- z4 -- z5; draw left_point -- right_point; if negated = 1: stroke_through(centre, 10/3equal_spread + 2greater_spread); fi; endchar; endfor; fi; if negated < 3: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, 2greater_spread# + ifneg(7/3, 13/3, 13/3) * equal_spread# + rule_thickness#); "less double equal greater"; pickup rule_pen; y2 - y0 = greater_spread; x0 = x2 = xpart right_point; y1 = 1/2[y0, y2]; x1 = xpart left_point; y5 - y3 = greater_spread; x3 = x5 = xpart left_point; y4 = 1/2[y3, y5]; x4 = xpart right_point; y0 - y5 = 7/3equal_spread; 1/2[y0, y5] = ypart centre; 1/2[z6, z7] = left_point; 1/2[z8, z9] = right_point; z7 - z6 = equal_spread * dir 90; z9 - z8 = equal_spread * dir 90; draw z0 -- z1 -- z2; draw z3 -- z4 -- z5; draw z6 -- z8; draw z7 -- z9; if negated = 1: stroke_through(centre, 13/3equal_spread + 2greater_spread); elseif negated = 2: stroke_through(centre, 3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, 3/2greater_spread# + ifneg(2,4) * equal_spread# + rule_thickness#); "less slanted equal greater"; pickup rule_pen; y2 - y0 = greater_spread; x0 = x2 = xpart right_point; y1 = 1/2[y0, y2]; x1 = xpart left_point; y5 - y3 = greater_spread; x3 = x5 = xpart left_point; y4 = 1/2[y3, y5]; x4 = xpart right_point; z6 = 1/2[z1, z5]; z7 = 1/2[z0, z4]; y1 - y6 = equal_spread; 1/2[y6, y7] = ypart centre; draw z0 -- z1 -- z2; draw z3 -- z4 -- z5; draw z6 -- z7; if negated = 1: stroke_through(centre, 4equal_spread + 3/2greater_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + 2equal_spread# + rule_thickness#, ifneg(0,2) * equal_spread# + greater_spread# + rule_thickness#); "less less"; pickup rule_pen; z1 - z0 = greater_spread * dir 90; z3 - z5 = greater_spread * dir 90; z2 = left_point; z4 - z2 = sign * 2equal_spread * dir 0; z3 - z1 = sign * 2equal_spread * dir 0; 1/2[z3, z5] = right_point; draw z0 -- z2 -- z1; draw z3 -- z4 -- z5; if negated = 1: stroke_through(centre, 2equal_spread + greater_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + 4equal_spread# + rule_thickness#, ifneg(0,2) * equal_spread# + greater_spread# + rule_thickness#); "less less less"; pickup rule_pen; z1 - z0 = greater_spread * dir 90; z3 - z5 = greater_spread * dir 90; z6 - z8 = greater_spread * dir 90; z2 = left_point; z4 - z2 = sign * 2equal_spread * dir 0; z3 - z1 = sign * 2equal_spread * dir 0; z7 - z4 = sign * 2equal_spread * dir 0; z6 - z3 = sign * 2equal_spread * dir 0; 1/2[z6, z8] = right_point; draw z0 -- z2 -- z1; draw z3 -- z4 -- z5; draw z6 -- z7 -- z8; if negated = 1: stroke_through(centre, 2equal_spread + greater_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(0,2) * equal_spread# + greater_spread# + rule_thickness#); "closed less than"; pickup rule_pen; z1 - z0 = greater_spread * dir 90; 1/2[z0, z1] = right_point; draw z0 -- left_point -- z1 -- cycle; if negated = 1: stroke_through(centre, 2equal_spread + greater_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, greater_spread# + ifneg(2/3, 8/3) * equal_spread# + rule_thickness#); "closed less than or equal"; pickup rule_pen; z1 - z0 = greater_spread * dir 90; y2 = 1/2[y0, y1]; x2 = x3 = xpart left_point; y3 = y4; z0 - z4 = 2/3equal_spread * dir 90; 1/2[z1, z4] = right_point; draw z0 -- z2 -- z1 -- cycle; draw z3 -- z4; if negated = 1: stroke_through(centre, 8/3equal_spread + greater_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, 1/2[equal_spread#, greater_spread#] + ifneg(0,2) * equal_spread# + rule_thickness#); "square subset"; pickup rule_pen; z1 - z0 = 1/2[equal_spread, greater_spread] * dir 90; z3 - z2 = 1/2[equal_spread, greater_spread] * dir 90; 1/2[z0, z1] = left_point; 1/2[z2, z3] = right_point; draw z3 -- z1 -- z0 -- z2; if negated = 1: stroke_through(centre, 2equal_spread + 1/2[equal_spread, greater_spread]); fi; endchar; endfor; fi; if negated < 3: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(1,3,3) * equal_spread# + 1/2[equal_spread#, greater_spread#] + rule_thickness#); "square subset equal"; pickup rule_pen; z1 - z0 = 1/2[equal_spread, greater_spread] * dir 90; z3 - z2 = 1/2[equal_spread, greater_spread] * dir 90; 1/2[z1, z4] = left_point; 1/2[z3, z5] = right_point; y4 = y5 = y0 - equal_spread; x4 = x0; x5 = x2; draw z3 -- z1 -- z0 -- z2; draw z4 -- z5; if negated = 1: stroke_through(centre, 3equal_spread + 1/2[equal_spread, greater_spread]); elseif negated = 2: stroke_through(1/2[1/2[z0,z2], 1/2[z4,z5]], 3equal_spread); fi; endchar; endfor; fi; if negated < 3: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(2,4,4) * equal_spread# + 1/2[equal_spread#, greater_spread#] + rule_thickness#); "square subset double equal"; pickup rule_pen; z1 - z0 = 1/2[equal_spread, greater_spread] * dir 90; z3 - z2 = 1/2[equal_spread, greater_spread] * dir 90; 1/2[z1, z6] = left_point; 1/2[z3, z7] = right_point; y4 = y5 = y0 - equal_spread; y6 = y7 = y4 - equal_spread; x4 = x6 = x0; x5 = x7 = x2; draw z3 -- z1 -- z0 -- z2; draw z4 -- z5; draw z6 -- z7; if negated = 1: stroke_through(centre, 4equal_spread + 1/2[equal_spread, greater_spread]); elseif negated = 2: stroke_through(1/2[1/2[z4,z5], 1/2[z6,z7]], 3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(8/3, 14/3) * equal_spread# + rule_thickness#); "double square subset"; pickup rule_pen; z1 - z0 = equal_spread * dir 90; z3 - z2 = equal_spread * dir 90; 1/2[z1, z0] = left_point + 3/4equal_spread * dir (90 - sign * 90); 1/2[z3, z2] = right_point; z5 - z4 = 8/3equal_spread * dir 90; z7 - z6 = 8/3equal_spread * dir 90; 1/2[z5, z4] = left_point; 1/2[z7, z6] = right_point; draw z3 -- z1 -- z0 -- z2; draw z7 -- z5 -- z4 -- z6; if negated = 1: stroke_through(centre, 14/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(0,2) * equal_spread# + 2/3[equal_spread#, greater_spread#] + rule_thickness#); "subset"; pickup rule_pen; draw subset(left_point, right_point, 2/3[equal_spread, greater_spread]); if negated = 1: stroke_through(centre, 2equal_spread + 2/3[equal_spread, greater_spread]); fi; endchar; endfor; fi; if negated < 3: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(1,3,3) * equal_spread# + 2/3[equal_spread#, greater_spread#] + rule_thickness#); "subset or equal"; pickup rule_pen; t := 2/3[equal_spread, greater_spread]; s := 1/2equal_spread + 1/2t; z1 - z0 = z3 - z2 = (t/2 + equal_spread) * dir 90; y0 = y2 = ypart centre - s; x0 = xpart left_point; x2 = xpart right_point; draw subset(z1, z3, t); draw z0 -- z2; if negated = 1: stroke_through(centre, 3equal_spread + 2/3[equal_spread, greater_spread]); elseif negated = 2: stroke_through(1/2[z0,z2] + 1/2equal_spread * dir 90, 3equal_spread); fi; endchar; endfor; fi; if negated < 3: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(2,4,4) * equal_spread# + 2/3[equal_spread#, greater_spread#] + rule_thickness#); "subset or double equal"; pickup rule_pen; t := 2/3[equal_spread, greater_spread]; s := 1/2t; z1 - z0 = z3 - z2 = (t/2 + equal_spread) * dir 90; y0 = y2 = ypart centre - s; x0 = xpart left_point; x2 = xpart right_point; z0 - z4 = z2 - z5 = equal_spread * dir 90; draw subset(z1, z3, t); draw z0 -- z2; draw z4 -- z5; if negated = 1: stroke_through(centre, 4equal_spread + 2/3[equal_spread, greater_spread]); elseif negated = 2: stroke_through(1/2[1/2[z0,z2], 1/2[z4,z5]], 3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(8/3, 14/3) * equal_spread# + rule_thickness#); "double subset"; pickup rule_pen; draw subset(left_point + 3/4equal_spread * dir (90 - sign * 90), right_point, equal_spread); draw subset(left_point, right_point, 8/3equal_spread); if negated = 1: stroke_through(centre, 14/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(0,2) * equal_spread# + 2/3[equal_spread#, greater_spread#] + rule_thickness#); "curly less than"; pickup rule_pen; draw prec(left_point, right_point, 2/3[equal_spread, greater_spread]); if negated = 1: stroke_through(centre, 2equal_spread + 2/3[equal_spread, greater_spread]); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(2/3, 8/3) * equal_spread# + 2/3[equal_spread#, greater_spread#] + rule_thickness#); "curly less than or equal"; pickup rule_pen; t := 2/3[equal_spread, greater_spread]; s := 1/3equal_spread + 1/2t; z1 - z0 = z3 - z2 = (t/2 + 2/3equal_spread) * dir 90; y0 = y2 = ypart centre - s; x0 = xpart left_point; x2 = xpart right_point; draw prec(z1, z3, t); draw z0 -- z2; if negated = 1: stroke_through(centre, 8/3equal_spread + 2/3[equal_spread, greater_spread]); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(1,3) * equal_spread# + 2/3[equal_spread#, greater_spread#] + rule_thickness#); "curly less than or curly equal"; pickup rule_pen; t := 2/3[equal_spread, greater_spread]; z1 - z0 = equal_spread * dir 90; z4 - z2 = 7/5equal_spread * dir 90; z3 - z4 = t/2 * dir 90; y1 = y3; y4 = ypart centre - 1/2(t - equal_spread); x0 = xpart left_point; x2 = xpart right_point; path p; p = z0{z3 - z1} .. z2; v := xpart (p intersectiontimes (z4 -- (z4 + h * dir (270 - sign * 20)))); draw prec(z1, z3, t); draw subpath (0,v) of p; if negated = 1: stroke_through(centre, 3equal_spread + 2/3[equal_spread, greater_spread]); fi; endchar; endfor; fi; if negated < 3: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(4/3, 10/3) * equal_spread# + 2/3[equal_spread#, greater_spread#] + rule_thickness#); "curly less sim"; pickup rule_pen; t := 2/3[equal_spread, greater_spread]; s := 1/3equal_spread + t/2; z1 - z0 = z3 - z2 = (t/2 + equal_spread) * dir 90; y0 = y2 = ypart centre - s; x0 = xpart left_point; x2 = xpart right_point; draw prec(z1, z3, t); if sign > 0: draw sim(z0, z2); else: draw sim(z2, z0); fi if negated = 1: stroke_through(centre, 10/3equal_spread + 2/3[equal_spread, greater_spread]); elseif negated = 2: stroke_through(1/2[z0,z2], 8/3equal_spread); fi; endchar; endfor; fi; if negated < 3: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(7/3, 13/3, 13/3) * equal_spread# + 2/3[equal_spread#, greater_spread#] + rule_thickness#); "curly less approx"; pickup rule_pen; t := 2/3[equal_spread, greater_spread]; s := -1/6equal_spread + t/2; z1 - z0 = z3 - z2 = (t/2 + equal_spread) * dir 90; y0 = y2 = ypart centre - s; x0 = xpart left_point; x2 = xpart right_point; z0 - z4 = z2 - z5 = equal_spread * dir 90; draw prec(z1, z3, t); if sign > 0: draw sim(z0, z2); draw sim(z4, z5); else: draw sim(z2, z0); draw sim(z5, z4); fi if negated = 1: stroke_through(centre, 13/3equal_spread + 2/3[equal_spread, greater_spread]); elseif negated = 2: stroke_through(1/2[1/2[z0,z2], 1/2[z4,z5]], 11/3equal_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, ifneg(0,2) * equal_spread# + greater_spread# + rule_thickness#); "less than dot"; pickup rule_pen; z1 - z0 = greater_spread * dir 90; 1/2[z0, z1] = right_point; draw z0 -- left_point -- z1; fill circle(right_point - sign * dot_size * dir 0, dot_size); if negated = 1: stroke_through(centre, 2equal_spread + greater_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, greater_spread# + ifneg(2/3, 10/3) * equal_spread# + rule_thickness#); "less than or equal dot"; pickup rule_pen; z1 - z0 = greater_spread * dir 90; y2 = 1/2[y0, y1]; x2 = x3 = xpart left_point; y3 = y4; z0 - z4 = 2/3equal_spread * dir 90; 1/2[z1, z4] = right_point; draw z0 -- z2 -- z1; draw z3 -- z4; fill circle(1/2[z0,z1] - sign * dot_size * dir 0, dot_size); if negated = 1: stroke_through(centre, 10/3equal_spread + greater_spread); fi; endchar; endfor; fi; if negated < 2: for sign = 1, -1: beginorder(sign, order_width# + rule_thickness#, greater_spread# + ifneg(1,3) * equal_spread# + rule_thickness#); "less than or slanted equal dot"; pickup rule_pen; z1 - z0 = greater_spread * dir 90; z2 - z3 = equal_spread * dir 90; z0 - z4 = equal_spread * dir 90; 1/2[z2, z3] = left_point; 1/2[z1, z4] = right_point; draw z0 -- z2 -- z1; draw z3 -- z4; fill circle(1/2[z0,z1] - sign * dot_size * dir 0, dot_size); if negated = 1: stroke_through(centre, 3equal_spread + greater_spread); fi; endchar; endfor; fi;