9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblett%%% ====================================================================
8267b99c0d7a187abe6f87ad50530dc08f5d1cdcAndy Gimblett%%% @METAFONT-file{
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblett%%% author-1 = "Jeremy Gibbons",
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu Prodescu%%% author-2 = "Alan Jeffrey",
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblett%%% version = "1.1",
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblett%%% date = "02 June 1992",
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblett%%% time = "15:06:36 BST",
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblett%%% filename = "stmaryaj.mf",
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblett%%% address-1 = "Department of Computer Science
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblett%%% University of Aukland
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblett%%% Private Bag
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblett%%% New Zealand",
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblett%%% address-2 = "School of Cognitive and Computing Sciences
2cf5a456da8bb3a2bbb695414d8304426e3bd277Andy Gimblett%%% University of Sussex
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% Brighton BN1 9QH
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% telephone-1 = "+64 9 373 7599 x 5120",
2cf5a456da8bb3a2bbb695414d8304426e3bd277Andy Gimblett%%% telephone-2 = "+44 273 606755 x 3238",
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% FAX-1 = "+64 9 373 7453",
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% FAX-2 = "+44 273 678188",
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% checksum = "16420 1066 3686 40419",
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% email-1 = "jeremy@cs.aukuni.ac.nz",
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% email-2 = "alanje@cogs.sussex.ac.uk",
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% codetable = "ISO/ASCII",
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% keywords = "metafont symbols math fonts",
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% supported = "yes",
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% abstract = "This is part of the metafont program for
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% the St Mary's Road symbol font.",
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% docstring = "This is part of the metafont program for
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett%%% the St Mary's Road symbol font. The font
2cf5a456da8bb3a2bbb695414d8304426e3bd277Andy Gimblett%%% contains a number of mathematical
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% characters which are not present in the
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% standard TeX and AMS symbol fonts.
2cf5a456da8bb3a2bbb695414d8304426e3bd277Andy Gimblett%%% It is described in stmaryrd.tex.
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% Copyright 1992 Jeremy Gibbons and Alan Jeffrey.
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% The checksum field above contains a CRC-16
2cf5a456da8bb3a2bbb695414d8304426e3bd277Andy Gimblett%%% checksum as the first value, followed by the
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% equivalent of the standard UNIX wc (word
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% count) utility output of lines, words, and
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% characters. This is produced by Robert
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% Solovay's checksum utility.",
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% package = "St Mary's Road",
fe9b4842ac7b63bc2a5042ae829759e2874acd05Andy Gimblett%%% dependencies = "none",
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% ====================================================================
8e97dcf353ac3afc326ecfd167abd47897215436Andy Gimblett%%% 20 May 1991, v1.0: Created the font out of alans.mf and galileo.mf.
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% 24 May 1991, v1.01: Finished the first version.
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% 25 Jun 1991, v1.02: Corrected bugs with arrow_not and Arrow_not.
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett%%% 2 Jun 1992, v1.1: added the headers.
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettiff known left_right_arrow_eq:
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettcmchar "Left and right arrow equality";
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettcompute_spread(.45x_height#,.55x_height#);
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettbeginchar(left_right_arrow_eq,14u#,v_center(spread#+.96asc_height#));
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettadjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,90);
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettpos2(rule_thickness,90); pos3(bar,0); pos4(bar,0);
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimbletty0=y1=y2=math_axis; x1=.5w; rt
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettx0=hround(w-.75u); y3-y0=y0-y4=.24asc_height+eps;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettx3=x4=x0-3u-eps; pos5(bar,angle(z4-z0)); z5l=z0;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettpos6(bar,angle(z3-z0)); z6l=z0; z9=.381966[.5[z3,z4],z0];
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettnumeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettintersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettpath p; p=z0..{z4-z9}z4r--subpath (0,t)
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettof\\(z4l{z9-z4}..z6r)
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettp:=p shifted (0,.5spread); filldraw p; % top
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettaddto currentpicture also currentpicture xscaled -1 shifted (w,0);
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettlft x10=hround u; x11=w-x10; y10=y11=math_axis-.5spread;
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettdraw z10--z11; % bottom
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettpenlabels(0,1,2,3,4,5,6,9,10,11); endchar;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettiff known curly_vee_down_arrow:
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettcmchar "Upside-down upwards accumulate symbol";
2cf5a456da8bb3a2bbb695414d8304426e3bd277Andy Gimblettbeginchar(curly_vee_down_arrow,12u#,asc_height#,asc_depth#);
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblettadjust_fit(0,0); pickup rule.nib;
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblettx2=good.x .5w; w:=r:=2x2;
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblettlft x1=0; x3=w-x1;
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblettbot y1=-d; top y2=h+o; y3=y1;
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettx4=x2; y4=h-(x_height+d);
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettpos11(rule_thickness,0); pos12(rule_thickness,0); % arrow head nicked from
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettpos13(bar,90); pos14(bar,90); % up_arrow
bf7d1ec09971b005fff4133bb8b6964ab7d264e7Andy Gimblettlft x11l=hround(.5w-.5rule_thickness); y11-.5rule_thickness=-d;
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblettx10=x11=x12; top y10=top y2; x10-x13=x14-x10=3u+eps;
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimbletty13=y14=y10-.24asc_height-eps;
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblettpos15(bar,angle(z14-z10)); z15l=z10;
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblettpos16(bar,angle(z13-z10)); z16l=z10;
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblettz19=.381966[.5[z13,z14],z10];
9ebbce450fb242e1a346f9f89367d8c46fcb2ec8Andy Gimblettnumeric t; path p; p=z14l{z19-z14}..z16r;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedert=xpart(p intersectiontimes((x12r,-d)--(x12r,h))); y12=ypart point t of p;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederfilldraw z10..{z14-z19}z14r--subpath (0,t) of\\(z14l{z19-z14}..z16r)
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblett z12l--subpath (t,0) of\\(z13l{z19-z13}..z15r)
fe9b4842ac7b63bc2a5042ae829759e2874acd05Andy Gimblett --z13r{z19-z13}..z10 & cycle; % arrowhead
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedernumeric t; path p; p=z1{z4-z1}..{up}z2;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettt=xpart(p intersectiontimes((0,y12)--(w,y12)));
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettdraw subpath (0,t) of\\(z1{z4-z1}..{up}z2); % left arm
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettdraw subpath (0,t) of\\(z3{z4-z3}..{up}z2); % right arm
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettcurrentpicture:= currentpicture yscaled -1 shifted (0,h-d);
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettiff known curly_vee_up_arrow:
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedercmchar "Upside-down downwards accumulate symbol";
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederbeginchar(curly_vee_up_arrow,12u#,asc_height#,asc_depth#);
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettadjust_fit(0,0); pickup rule.nib;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederx2=good.x .5w; w:=r:=2x2;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederlft x1=0; x3=w-x1;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederbot y1=-d; top y2=h+o; y3=y1;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederx4=x2; y4=h-(x_height+d);
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettnumeric theta,delta; theta=angle(z4-z1); delta=3u++.24asc_height;
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettpos11(rule_thickness,-90+theta); pos12(rule_thickness,-90+theta);
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettpos13(bar,-180+theta); pos14(bar,-180+theta);
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettlft x10=0; bot y10=-d;
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettx11=w; z11=z10+whatever*(dir theta); % where the arrow stem would go
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedery13a=y10; x14a=x10; x13a-x10=y14a-y10=delta+eps;
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettz13=z13a rotatedaround(z10,theta-45);
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettz14=z14a rotatedaround(z10,theta-45);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederpos15(bar,theta+45); z15l=z10; pos16(bar,theta-45); z16l=z10;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederz19=.381966[.5[z13,z14],z10];
34a4c8c6f861104cdc198282f30fae36cf3858adAndy Gimblettnumeric t; path p; p=z14l{z19-z14}..z16r;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedert=xpart(p intersectiontimes (z11l--(z11l+2(z10-z11)))); z12l=point t of p;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederfilldraw z10..{z14-z19}z14r
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett --subpath (0,t) of\\(z14l{z19-z14}..z16r)
ae6d8241c2ce8132a6e22d9f854edb612c2f637dAndy Gimblett --subpath (t,0) of\\(z13l{z19-z13}..z15r)
ae6d8241c2ce8132a6e22d9f854edb612c2f637dAndy Gimblett --z13r{z19-z13}..z10 & cycle; % left arrowhead
ae6d8241c2ce8132a6e22d9f854edb612c2f637dAndy Gimblettnumeric theta,delta; theta=angle(z3-z4); delta=3u++.24asc_height;
b5301fa0ef9e88a488e5cfe8c395a05c2f6884d3Andy Gimblettpos21(rule_thickness,90+theta); pos22(rule_thickness,90+theta);
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettpos23(bar,theta); pos24(bar,theta);
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettrt x20=w; bot y20=-d;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettx21=0; z21=z20+whatever*-(dir theta); % where the arrow stem would go
b5301fa0ef9e88a488e5cfe8c395a05c2f6884d3Andy Gimblettx23a=x20; y24a=y20; y23a-y20=x20-x24a=delta+eps;
b5301fa0ef9e88a488e5cfe8c395a05c2f6884d3Andy Gimblettz23=z23a rotatedaround(z20,theta+45);
b5301fa0ef9e88a488e5cfe8c395a05c2f6884d3Andy Gimblettz24=z24a rotatedaround(z20,theta+45);
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettpos25(bar,theta+225); z25l=z20; pos26(bar,theta+135); z26l=z20;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettz29=.381966[.5[z23,z24],z20];
b5301fa0ef9e88a488e5cfe8c395a05c2f6884d3Andy Gimblettnumeric t; path p; p=z24l{z29-z24}..z26r;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettt=xpart(p intersectiontimes (z21l--(z21l+2(z20-z21)))); z22l=point t of p;
d40dd10adffcf341489a1310092fcc99de75f225Andy Gimblettfilldraw z20..{z24-z29}z24r
b5301fa0ef9e88a488e5cfe8c395a05c2f6884d3Andy Gimblett --subpath (0,t) of\\(z24l{z29-z24}..z26r)
fe9b4842ac7b63bc2a5042ae829759e2874acd05Andy Gimblett --subpath (t,0) of\\(z23l{z29-z23}..z25r)
fe9b4842ac7b63bc2a5042ae829759e2874acd05Andy Gimblett --z23r{z29-z23}..z20 & cycle; % right arrowhead
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettnumeric t; path p; p=z2{down}..{z1-z4}z1;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettt=xpart(p intersectiontimes(z12l--z12r));
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettdraw subpath (0,t) of\\(z2{down}..{z1-z4}z1); % left arm
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettdraw subpath (0,t) of\\(z2{down}..{z3-z4}z3); % right arm
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettcurrentpicture:= currentpicture yscaled -1 shifted (0,h-d);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederiff known nnw_arrow: cmchar "Northnorthwest arrow";
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettbeginchar(nnw_arrow,11u#,asc_height#,asc_depth#);
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettadjust_fit(0,0); pickup crisp.nib;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettx1+.5rule_thickness=hround(w-u); lft x0=hround 3u; % This 3u used to be a u in
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimbletty1+.5rule_thickness=h; bot y0=-d; % the program for swarrow.
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett % 3u (with width 11u) gives
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett % arrow parallel to langle.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedernumeric theta,delta; theta=angle(z1-z0); delta=3u++.24asc_height;
bf7d1ec09971b005fff4133bb8b6964ab7d264e7Andy Gimblettif abs(theta-45)<2.5: theta:=45; y1:=y0+x1-x0; fi % near-45$^\circ$ angle
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettpos1(rule_thickness,-90+theta); pos2(rule_thickness,-90+theta);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederpos3(bar,-180+theta); pos4(bar,-180+theta);
fe9b4842ac7b63bc2a5042ae829759e2874acd05Andy Gimblett %y3=y0; x4=x0; x3-x0=y4-y0=delta+eps;
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimbletty10=y0; x11=x0; x10-x0=y11-y0=delta+eps; % Can now do arrows of any angle
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettz3=z10 rotatedaround(z0,theta-45);
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettz4=z11 rotatedaround(z0,theta-45);
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettpos5(bar,theta+45); z5l=z0; pos6(bar,theta-45); z6l=z0;
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettz9=.381966[.5[z3,z4],z0];
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedernumeric t; path p; p=z4l{z9-z4}..z6r;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettt=xpart(p intersectiontimes (z1l--(z1l+2(z0-z1)))); z2l=point t of p;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettfilldraw z0..{z4-z9}z4r
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblett --subpath (0,t) of\\(z4l{z9-z4}..z6r)
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblett --subpath (t,0) of\\(z3l{z9-z3}..z5r)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedercurrentpicture:= currentpicture yscaled -1 shifted (0,h-d);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederiff known nne_arrow: cmchar "Northnortheast arrow";
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettbeginchar(nne_arrow,11u#,asc_height#,asc_depth#);
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettadjust_fit(0,0); pickup crisp.nib;
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettx1-.5rule_thickness=hround u; rt x0=hround(w-3u);
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimbletty1+.5rule_thickness=h; bot y0=-d;
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettnumeric theta,delta; theta=angle(z0-z1); delta=3u++.24asc_height;
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettif abs(theta+45)<2.5: theta:=-45; y1:=y0+x0-x1; fi % near-45$^\circ$ angle
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettpos1(rule_thickness,90+theta); pos2(rule_thickness,90+theta);
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettpos3(bar,theta); pos4(bar,theta);
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblett %x3=x0; y4=y0; y3-y0=x0-x4=delta+eps;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettx10=x0; y11=y0; y10-y0=x0-x11=delta+eps;
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettz3=z10 rotatedaround(z0,theta+45);
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettz4=z11 rotatedaround(z0,theta+45);
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettpos5(bar,theta+225); z5l=z0; pos6(bar,theta+135); z6l=z0;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederz9=.381966[.5[z3,z4],z0];
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettnumeric t; path p; p=z4l{z9-z4}..z6r;
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettt=xpart(p intersectiontimes (z1l--(z1l+2(z0-z1)))); z2l=point t of p;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettfilldraw z0..{z4-z9}z4r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder --subpath (0,t) of\\(z4l{z9-z4}..z6r)
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblett --subpath (t,0) of\\(z3l{z9-z3}..z5r)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedercurrentpicture:= currentpicture yscaled -1 shifted (0,h-d);
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettiff known left_slice: cmchar "Left slice";
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettbeginarithchar(left_slice); pickup rule.nib; autorounded;
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettlft x6=hround u; x2=w-x6; y2=math_axis; y8-y2 = .5(x2-x6);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedercircle_points; % circle
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederdraw z1--z6--z3; % lessthan
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederlabels(1,2,3,4,5,6,7,8); endchar;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederiff known right_slice: cmchar "Right slice";
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblettbeginarithchar(right_slice); pickup rule.nib; autorounded;
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettlft x6=hround u; x2=w-x6; y2=math_axis; y8-y2 = .5(x2-x6);
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettcircle_points; % circle
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblettdraw z5--z2--z7; % greaterthan
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettlabels(1,2,3,4,5,6,7,8); endchar;
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblettiff known var_o_less_than: cmchar "Circular circle-lessthan operator";
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettbegincircle(var_o_less_than);
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblettdraw z1--z6--z3; % lessthan
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblettlabels(1,2,3,4,5,6,7,8); endchar;
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettiff known var_o_greater_than: cmchar "Circular circle-greaterthan operator";
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederbegincircle(var_o_greater_than);
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettdraw z5--z2--z7; % greaterthan
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettlabels(1,2,3,4,5,6,7,8); endchar;
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettiff known var_o_vee: cmchar "Circular circle-vee operator";
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettbegincircle(var_o_vee);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederdraw z1--z4--z7; % vee
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettlabels(1,2,3,4,5,6,7,8); endchar;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederiff known var_o_wedge: cmchar "Circular circle-wedge operator";
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettbegincircle(var_o_wedge);
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettdraw z3--z8--z5; % wedge
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettlabels(1,2,3,4,5,6,7,8); endchar;
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettiff known tall_oblong: cmchar "Tall oblong (Dijkstra choice symbol)";
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettbeginchar(tall_oblong,9u#,body_height#,paren_depth#);
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettadjust_fit(0,0); pickup rule.nib;
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettx1=x2; top y1=h; .5[y1,y2]=math_axis;
29ac9ecacf0983a565b89f133ff2bdf2ac02b0c4Andy Gimblettx3=x4=w-x1; y3=y1; y4=y2;
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettcompute_spread(.45x_height#,.55x_height#); x3-x1=spread;
afc52bfaabee38c4d55cee9f35b1a0028ba3854aAndy Gimblettdraw z1--z2--z4--z3--cycle; % stems
b5301fa0ef9e88a488e5cfe8c395a05c2f6884d3Andy Gimblettlabels(1,2,3,4); endchar;
45ec7dde04370e30e219a8ba6f4ce71d4bba3f2bChristian Maederiff known interleave:
ae6d8241c2ce8132a6e22d9f854edb612c2f637dAndy Gimblettcmchar "Triple vertical line (interleaving)";
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederbeginchar(interleave,12.5u#,body_height#,paren_depth#);
45ec7dde04370e30e219a8ba6f4ce71d4bba3f2bChristian Maederadjust_fit(0,0); pickup rule.nib;
ae6d8241c2ce8132a6e22d9f854edb612c2f637dAndy Gimblettcompute_spread(.45x_height#,.55x_height#);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederx1=x2; top y1=h; .5[y1,y2]=math_axis;
ae6d8241c2ce8132a6e22d9f854edb612c2f637dAndy Gimblettx4=x3; x5=x6=w-x1; y5=y3=y1; y6=y4=y2;
567db7182e691cce5816365d8c912d09ffe92f86Andy Gimblettx3-x1=x5-x3=hround spread;
567db7182e691cce5816365d8c912d09ffe92f86Andy Gimblettdraw z1--z2; draw z3--z4; draw z5--z6; % stems
567db7182e691cce5816365d8c912d09ffe92f86Andy Gimblettlabels(1,2,3,4,5,6); endchar;
567db7182e691cce5816365d8c912d09ffe92f86Andy Gimblettiff known o_bar: cmchar "Circle-bar operator";
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederbeginarithchar(o_bar); pickup light_rule.nib; autorounded;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederlft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedercircle_points; draw_circle; % circle
ae6d8241c2ce8132a6e22d9f854edb612c2f637dAndy Gimblettdraw z4--z8; % bar
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettlabels(1,2,3,4,5,6,7,8); endchar;
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettiff known o_bslash: cmchar "Circle-backslash operator";
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettbeginarithchar(o_bslash); pickup light_rule.nib; autorounded;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettlft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettcircle_points; draw_circle; % circle
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederdraw z3--z7; % diagonal
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederlabels(1,2,3,4,5,6,7,8); endchar;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettiff known o_less_than: cmchar "Circle-lessthan operator";
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettbeginarithchar(o_less_than); pickup light_rule.nib; autorounded;
bf7d1ec09971b005fff4133bb8b6964ab7d264e7Andy Gimblettlft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettcircle_points; draw_circle; % circle
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederdraw z1--z6--z3; % lessthan
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettlabels(1,2,3,4,5,6,7,8); endchar;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettiff known o_greater_than: cmchar "Circle-greaterthan operator";
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettbeginarithchar(o_greater_than); pickup light_rule.nib; autorounded;
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettlft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroedercircle_points; draw_circle; % circle
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederdraw z5--z2--z7; % greaterthan
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettlabels(1,2,3,4,5,6,7,8); endchar;
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettiff known o_vee: cmchar "Circle-vee operator";
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederbeginarithchar(o_vee); pickup light_rule.nib; autorounded;
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettlft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettcircle_points; draw_circle; % circle
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettdraw z1--z4--z7; % vee
b6499fa6826cfdc288dc841be705aab6e4cc6c95Andy Gimblettlabels(1,2,3,4,5,6,7,8); endchar;
9890f5274aa35d7b8c073cd5bbc3c4028b18dc7dAndy Gimblettiff known o_wedge: cmchar "Circle-wedge operator";
4690e532c5ebfbf9d71880a5c912ce09ab1fa2feAndy Gimblettbeginarithchar(o_wedge); pickup light_rule.nib; autorounded;
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederlft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
adjust_fit(0,0); pickup rule.nib;
y1=good.y h+o; bot y2=0; y4=y2; y5=y1;
adjust_fit(0,0); pickup rule.nib; autorounded;
adjust_fit(0,0); pickup rule.nib; autorounded;
adjust_fit(0,0); pickup rule.nib; autorounded;
y3=good.y h+o; bot y1=-o; y2=y4=2/3[y1,y3]; y5=y1;
draw z1---z2...z3...z4---z5; % stems and cap
adjust_fit(0,0); pickup rule.nib; autorounded;
adjust_fit(0,0); pickup rule.nib; autorounded;
adjust_fit(0,0); pickup rule.nib; autorounded;
adjust_fit(0,0); pickup rule.nib; autorounded;
adjust_fit(0,0); pickup fine.nib;
adjust_fit(0,0); pickup fine.nib;
pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0);
pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0);
adjust_fit(0,0); pickup fine.nib;
filldraw stroke z1e{3(x2e-x1e),y2-y1}...z2e
adjust_fit(0,0); pickup fine.nib;
filldraw stroke z1e{3(x2e-x1e),y2-y1}...z2e
beginarithchar(bin_ampersand); pickup rule.nib; autorounded;
beginarithchar(bin_dnasrepma); pickup rule.nib; autorounded;
italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;
italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;
italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;
italcorr h#*slant-u#; adjust_fit(0,0); pickup rule.nib;
adjust_fit(0,0); pickup rule.nib;
adjust_fit(0,0); pickup rule.nib;
adjust_fit(0,0); pickup rule.nib;
adjust_fit(0,0); pickup rule.nib;
adjust_fit(0,0); pickup crisp.nib;
adjust_fit(0,0); pickup rule.nib;
adjust_fit(0,0); pickup rule.nib;
adjust_fit(0,0); pickup rule.nib;
adjust_fit(0,0); pickup rule.nib;
adjust_fit(0,0); pickup rule.nib;
adjust_fit(0,0); pickup rule.nib;
adjust_fit(0,0); pickup rule.nib;
draw z1---z2...z3...z4---z5; % stems and cap
adjust_fit(4u#,0); pickup crisp.nib;
adjust_fit(4u#,0); pickup crisp.nib;
adjust_fit(4u#,0); pickup crisp.nib;
draw z1---z2...z3...z4---z5; % stems and cap
adjust_fit(0,4u#); pickup crisp.nib;
adjust_fit(0,4u#); pickup crisp.nib;
adjust_fit(0,4u#); pickup crisp.nib;