% LAMS3.MF VERSION 1.0 % COPYRIGHT (C) 1989 BY THE TEXPLORATORS CORPORATION % ALL RIGHTS RESERVED if unknown cmbase: input cmbase fi % replace the macro adjust_fit by version used in earlier cmbase files to % avoid division by zero error caused by newer versions of cmbase % Patch by Ingo Hadan (Jan 97) def normal_adjust_fit(expr left_adjustment,right_adjustment) = l:=-hround(left_adjustment*hppp)-letter_fit; interim xoffset:=-l; charwd:=charwd+2letter_fit#+left_adjustment+right_adjustment; r:=l+hround(charwd*hppp)-shrink_fit; w:=r-hround(right_adjustment*hppp)-letter_fit; enddef; def mono_adjust_fit(expr left_adjustment,right_adjustment) = numeric expansion_factor; mono_charwd#=2letter_fit# +expansion_factor*(charwd+left_adjustment+right_adjustment); forsuffixes $=u,jut,cap_jut,beak_jut,apex_corr: $:=$.#*expansion_factor*hppp; endfor l:=-hround(left_adjustment*expansion_factor*hppp)-letter_fit; interim xoffset:=-l; r:=l+mono_charwd-shrink_fit; w:=r-hround(right_adjustment*expansion_factor*hppp)-letter_fit; charwd:=mono_charwd#; charic:=mono_charic#; enddef; font_identifier:="LAMS"; font_size 10pt#; u#:=20/36pt#; % unit width width_adj#:=0pt#; % width adjustment for certain characters serif_fit#:=0pt#; % extra sidebar near lowercase serifs cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs letter_fit#:=0pt#; % extra space added to all sidebars body_height#:=270/36pt#; % height of tallest characters asc_height#:=360/36pt#; % height of lowercase ascenders cap_height#:=246/36pt#; % height of caps fig_height#:=232/36pt#; % height of numerals x_height#:=155/36pt#; % height of lowercase without ascenders math_axis#:=90/36pt#; % axis of symmetry for math symbols bar_height#:=87/36pt#; % height of crossbar in lowercase e comma_depth#:=70/36pt#; % depth of comma below baseline desc_depth#:=0/36pt#; % depth of lowercase descenders crisp#:=8/36pt#; % diameter of serif corners tiny#:=8/36pt#; % diameter of rounded corners fine#:=7/36pt#; % diameter of sharply rounded corners thin_join#:=7/36pt#; % width of extrafine details hair#:=9/36pt#; % lowercase hairline breadth stem#:=24/36pt#; % lowercase stem breadth curve#:=29/36pt#; % lowercase curve breadth ess#:=27/36pt#; % breadth in middle of lowercase s flare#:=32/36pt#; % diameter of bulbs or breadth of terminals dot_size#:=38/36pt#; % diameter of dots cap_hair#:=11/36pt#; % uppercase hairline breadth cap_stem#:=30/36pt#; % uppercase stem breadth cap_curve#:=35/36pt#; % uppercase curve breadth cap_ess#:=33/36pt#; % breadth in middle of uppercase s rule_thickness#:=.4pt#; % thickness of lines in math symbols dish#:=1/36pt#; % amount erased at top or bottom of serifs bracket#:=20/36pt#; % vertical distance from serif base to tangent jut#:=30/36pt#; % protrusion of lowercase serifs cap_jut#:=37/36pt#; % protrusion of uppercase serifs beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs beak#:=70/36pt#; % vertical protrusion of beak serifs vair#:=8/36pt#; % vertical diameter of hairlines notch_cut#:=10pt#; % maximum breadth above or below notches bar#:=11/36pt#; % lowercase bar thickness slab#:=11/36pt#; % serif and arm thickness cap_bar#:=11/36pt#; % uppercase bar thickness cap_band#:=11/36pt#; % uppercase thickness above/below lobes cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches serif_drop#:=4/36pt#; % vertical drop of sloped serifs stem_corr#:=1/36pt#; % for small refinements of stem breadth vair_corr#:=1/36pt#; % for small refinements of hairline height apex_corr#:=0pt#; % extra width at diagonal junctions o#:=8/36pt#; % amount of overshoot for curves apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions slant:=0; % tilt ratio $(\Delta x/\Delta y)$ fudge:=1; % factor applied to weights of heavy characters math_spread:=0; % extra openness of math symbols superness:=1/sqrt2; % parameter for superellipses superpull:=1/6; % extra openness inside bowls beak_darkness:=11/30; % fraction of triangle inside beak serifs ligs:=2; % level of ligatures to be included square_dots:=false; % should dots be square? hefty:=false; % should we try hard not to be overweight? serifs:=true; % should serifs and bulbs be attached? monospace:=false; % should all characters have the same width? variant_g:=true; % should an italic-style g be used? low_asterisk:=false; % should the asterisk be centered at the axis? math_fitting:=true; % should math-mode spacing be used? mode_setup; font_setup; autorounding:=0; font_slant slant; font_x_height 0; font_quad 18u# if not monospace:+4letter_fit# fi; slant:=mono_charic#:=0; % the remaining characters will not be slanted currenttransform:=identity yscaled aspect_ratio scaled granularity; def Shaft (expr ChCode, ChWidthFrac,ChHeightFrac)= beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); pickup crisp.nib; x1= 0; x0=(w); y1=-d; y0=h; numeric theta,delta; theta=angle(z0-z1); delta=3u++.24asc_height; if abs(theta-45)<2.5: theta:=45; y1:=y0+x1-x0; fi % near-45$^\circ$ angle pos1(rule_thickness,90+theta); pos2(1.5rule_thickness,90+theta); x2= w; y2=h; pickup pencircle scaled rule_thickness; draw z1--z0; penlabels(1,2); endchar; enddef; Shaft(0,2/5,1); Shaft(13,1/3,1); Shaft(26,1/4,1); Shaft(39,1/5,1); Shaft(52,1/6,1); def DashedShaft (expr ChCode, ChWidthFrac, ChHeightFrac)= beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); pickup crisp.nib; x1= 0; x0=(w); y1=-d; y0=h; numeric theta,delta; theta=angle(z0-z1); delta=3u++.24asc_height; if abs(theta-45)<2.5: theta:=45; y1:=y0+x1-x0; fi % near-45$^\circ$ angle pos1(rule_thickness,90+theta); pos2(1.5rule_thickness,90+theta); x2= w; y2=h; pickup pencircle scaled rule_thickness; draw z1--1/6z2; draw 2/6z2--4/6z2; draw 5/6z2--z2; penlabels(1,2); endchar; enddef; DashedShaft(1,2/5,1); DashedShaft(14,1/3,1); DashedShaft(27,1/4,1); DashedShaft(40,1/5,1); DashedShaft(53,1/6,1); def UpperHead (expr ChCode, ChWidthFrac, ChHeightFrac)= beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); pickup crisp.nib; x1=0; x0=w; y1=-d; y0=h; numeric theta; theta=angle(z0-z1); pos1(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir -(90+(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir -(180+(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z2l=z0; z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; endchar; enddef; UpperHead(2,2/5,1); UpperHead(15,1/3,1); UpperHead(28,1/4,1); UpperHead(41,1/5,1); UpperHead(54,1/6,1); def LowerHead (expr ChCode, ChWidthFrac, ChHeightFrac)= beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); pickup crisp.nib; x1=w ; x0= 0; y1=h; y0=-d; numeric theta; theta=angle(z1-z0); pos1(rule_thickness,-90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir (90-(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir -(45-theta) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); pos5(bar,90-(45-theta)); z5l=z0; pos6(bar,-(45-theta)); z6l=z0; z2r=z0; z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; endchar; enddef; LowerHead(3,2/5,1); LowerHead(16,1/3,1); LowerHead(29,1/4,1); LowerHead(42,1/5,1); LowerHead(55,1/6,1); def UpperTopBarb (expr ChCode, ChWidthFrac,ChHeightFrac)= beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); pickup crisp.nib; x1=0; x0=w; y1=-d; y0=h; numeric theta; theta=angle(z0-z1); pos1(rule_thickness,90+theta); pos0(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir -(90+(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir -(180+(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z2l=z0; z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; filldraw z2r{dir -(90-theta)}..{z1-z0}z0l--z2l--cycle; endchar; enddef; UpperTopBarb(4,2/5,1); UpperTopBarb(17,1/3,1); UpperTopBarb(30,1/4,1); UpperTopBarb(43,1/5,1); UpperTopBarb(56,1/6,1); def UpperBotBarb (expr ChCode, ChWidthFrac,ChHeightFrac)= beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); pickup crisp.nib; x1=0; x0=w; y1=-d; y0=h; numeric theta; theta=angle(z0-z1); pos1(rule_thickness,90+theta); pos0(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir -(90+(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir -(180+(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z2l=z0; z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; filldraw z2r{dir (90+theta)}..{z1-z0}z0r--z2l--cycle; endchar; enddef; UpperBotBarb(5,2/5,1); UpperBotBarb(18,1/3,1); UpperBotBarb(31,1/4,1); UpperBotBarb(44,1/5,1); UpperBotBarb(57,1/6,1); def LowerTopBarb (expr ChCode, ChWidthFrac,ChHeightFrac)= beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); pickup crisp.nib; x1=w ; x0=0; y1=h; y0=-d; numeric theta; theta=angle(z1-z0); pos1(rule_thickness,90+theta); pos0(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir (90-(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir -(45-theta) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); pos5(bar,90-(45-theta)); z5l=z0; pos6(bar,-(45-theta)); z6l=z0; z2r=z0; z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; filldraw z2l{dir -(90-theta)}..{z1-z0}z0l--z2r--cycle; endchar; enddef; LowerTopBarb(6,2/5,1); LowerTopBarb(19,1/3,1); LowerTopBarb(32,1/4,1); LowerTopBarb(45,1/5,1); LowerTopBarb(58,1/6,1); def LowerBotBarb (expr ChCode, ChWidthFrac,ChHeightFrac)= beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); pickup crisp.nib; x1=w ; x0=0; y1=h; y0=-d; numeric theta,delta;theta=angle(z1-z0); pos1(rule_thickness,90+theta); pos0(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir (90-(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir -(45-theta) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); pos5(bar,90-(45-theta)); z5l=z0; pos6(bar,-(45-theta)); z6l=z0; z2r=z0; z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; filldraw z2l{dir (90+theta)}..{z1-z0}z0r--z2r--cycle; endchar; enddef; LowerBotBarb(7,2/5,1); LowerBotBarb(20,1/3,1); LowerBotBarb(33,1/4,1); LowerBotBarb(46,1/5,1); LowerBotBarb(59,1/6,1); def LowerTopHook (expr ChCode, ChWidthFrac,ChHeightFrac)= compute_spread(.45x_height#,.55x_height); beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); pickup crisp.nib; x1=(w) ; x0= 0; y1=h; y0=-d; numeric theta; theta=angle(z1-z0); pos1(rule_thickness,-90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir (90+theta) xscaled spread yscaled spread; pos5(bar,90-(45-theta)); z5l=z0; pos6(bar,-(45-theta)); z6l=z0; z2l=z0; z9=.381966[.5[z3,z4],z0]; pickup rule.nib; z40= 1/2[z0,z4] + dir (180+theta) xscaled 2.5u yscaled 2.5u; draw z0{z0-z1}..{z4-z0}z40..{z1-z0}z4; penlabels(0,1,2,3,4,5,6,9); endchar; enddef; LowerTopHook(8,2/5,1); LowerTopHook(21,1/3,1); LowerTopHook(34,1/4,1); LowerTopHook(47,1/5,1); LowerTopHook(60,1/6,1); def LowerBotHook (expr ChCode, ChWidthFrac, ChHeightFrac)= compute_spread(.45x_height#,.55x_height); beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); pickup crisp.nib; x1=(w) ; x0= 0; y1=h; y0=-d; numeric theta; theta=angle(z1-z0); pos1(rule_thickness,-90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir -(90-theta) xscaled spread yscaled spread; pos5(bar,90-(45-theta)); z5l=z0; pos6(bar,-(45-theta)); z6l=z0; z2l=z0; z9=.381966[.5[z3,z4],z0]; z40= 1/2[z0,z4] + dir (180+theta) xscaled 2.5u yscaled 2.5u; pickup rule.nib; draw z0{z0-z1}..{z4-z0}z40..{z1-z0}z4; penlabels(0,1,2,3,4,5,6,9); endchar; enddef; LowerBotHook(9,2/5,1); LowerBotHook(22,1/3,1); LowerBotHook(35,1/4,1); LowerBotHook(48,1/5,1); LowerBotHook(61,1/6,1); def UpperTopHook (expr ChCode, ChWidthFrac, ChHeightFrac)= beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); pickup crisp.nib; x1= 0; x0=(w); y1=-d; y0=h; numeric theta,delta; theta=angle(z0-z1); delta=3u++.24asc_height; if abs(theta-45)<2.5: theta:=45; y1:=y0+x1-x0; fi % near-45$^\circ$ angle pos1(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir (90+theta) xscaled (spread) yscaled (spread); %z3=z0+ dir -(180+(45-theta)) xscaled (delta+eps) yscaled (delta+eps); z2r=z0; z9=.381966[.5[z3,z4],z0]; %penstroke z2e..{z3-z9}z3e; z40= 1/2[z0,z4] + dir theta xscaled 2.5u yscaled 2.5u; pickup rule.nib; draw z0{z0-z1}..{z4-z0}z40..{z1-z0}z4; penlabels(0,1,2,3,4,5,6,9); endchar; enddef; UpperTopHook(10,2/5,1); UpperTopHook(23,1/3,1); UpperTopHook(36,1/4,1); UpperTopHook(49,1/5,1); UpperTopHook(62,1/6,1); def UpperBotHook (expr ChCode, ChWidthFrac, ChHeightFrac)= beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); pickup crisp.nib; x1= 0; x0=(w); y1=-d; y0=h; numeric theta,delta; theta=angle(z0-z1); delta=3u++.24asc_height; if abs(theta-45)<2.5: theta:=45; y1:=y0+x1-x0; fi % near-45$^\circ$ angle pos1(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir -(90-theta) xscaled (spread) yscaled (spread); %z3=z0+ dir -(180+(45-theta)) xscaled (delta+eps) yscaled (delta+eps); z2r=z0; z9=.381966[.5[z3,z4],z0]; z40= 1/2[z0,z4] + dir theta xscaled 2.5u yscaled 2.5u; %penstroke z2e..{z3-z9}z3e; pickup rule.nib; draw z0{z0-z1}..{z4-z0}z40..{z1-z0}z4; penlabels(0,1,2,3,4,5,6,9); endchar; enddef; UpperBotHook(11,2/5,1); UpperBotHook(24,1/3,1); UpperBotHook(37,1/4,1); UpperBotHook(50,1/5,1); UpperBotHook(63,1/6,1); def Squiggle (expr ChCode, ChWidthFrac, ChHeightFrac)= beginchar(ChCode,ChWidthFrac*18u#,ChHeightFrac*18u#,0#); adjust_fit(0,0); x0= 0; x1=(w); y0=-d; y1=h; numeric theta,delta; theta=angle(z1-z0); delta=3u; z2=.5/6[z0,z1]; z8=5.5/6[z0,z1]; z3=1/6[z0,z1] + dir (90+theta) xscaled (delta+eps) yscaled (delta+eps); z5=3/6[z0,z1] + dir (90+theta) xscaled (delta+eps) yscaled (delta+eps); z7=5/6[z0,z1] + dir (90+theta) xscaled (delta+eps) yscaled (delta+eps); z4=2/6[z0,z1] + dir -(90-theta) xscaled (delta+eps) yscaled (delta+eps); z6=4/6[z0,z1] + dir -(90-theta) xscaled (delta+eps) yscaled (delta+eps); pickup pencircle scaled rule_thickness; draw z0--z2--z3--z4--z5--z6--z7--z8--z1; penlabels(1,2); endchar; enddef; Squiggle(12,2/5,1); Squiggle(25,1/3,1); Squiggle(38,1/4,1); Squiggle(51,1/5,1); Squiggle(64,1/6,1); def RevShaft (expr ChCode,ChHeightFrac,ChDepthFrac)= beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); pickup crisp.nib; x1= 0; x0=(w); y1=h; y0=-d; pickup pencircle scaled rule_thickness; draw z1--z0; penlabels(1,2); endchar; enddef; RevShaft(65,0,1/6); RevShaft(78,0,1/5); RevShaft(91,0,1/4); RevShaft(104,0,1/3); def RevDashedShaft (expr ChCode, ChHeightFrac, ChDepthFrac)= beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); pickup crisp.nib; x1= 0; x0=(w); y1=h; y0=-d; numeric theta,delta; theta=angle(z0-z1); delta=3u++.24asc_height; if abs(theta-45)<2.5: theta:=45; y1:=y0+x1-x0; fi % near-45$^\circ$ angle pos1(rule_thickness,90+theta); pos2(1.5rule_thickness,90+theta); x2= w; y2=-d; pickup pencircle scaled rule_thickness; draw z1--1/6z2; draw 2/6z2--4/6z2; draw 5/6z2--z2; penlabels(1,2); endchar; enddef; RevDashedShaft(66,0,1/6); RevDashedShaft(79,0,1/5); RevDashedShaft(92,0,1/4); RevDashedShaft(105,0,1/3); def RevUpperHead (expr ChCode, ChHeightFrac, ChDepthFrac)= beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); pickup crisp.nib; x1=0; x0=w; y1=h; y0=-d; numeric theta; theta=angle(z0-z1); pos1(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir -(90+(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir -(180+(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z2l=z0; z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; endchar; enddef; RevUpperHead(67,0,1/6); RevUpperHead(80,0,1/5); RevUpperHead(93,0,1/4); RevUpperHead(106,0,1/3); def RevLowerHead (expr ChCode, ChHeightFrac, ChDepthFrac)= beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); pickup crisp.nib; x1=w ; x0= 0; y1=-d; y0=h; numeric theta; theta=angle(z1-z0); pos1(rule_thickness,-90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir (90-(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir -(45-theta) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); pos5(bar,90-(45-theta)); z5l=z0; pos6(bar,-(45-theta)); z6l=z0; z2r=z0; z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; penlabels(0,1,2,3,4,5,6,9); endchar; enddef; RevLowerHead(68,0,1/6); RevLowerHead(81,0,1/5); RevLowerHead(94,0,1/4); RevLowerHead(107,0,1/3); def RevUpperTopBarb (expr ChCode, ChHeightFrac, ChDepthFrac)= beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); pickup crisp.nib; x1=0; x0=w; y1=h; y0=-d; numeric theta; theta=angle(z0-z1); pos1(rule_thickness,90+theta); pos0(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir -(90+(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir -(180+(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z2l=z0; z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; filldraw z2r{dir (270+theta)}..{z1-z0}z0l--z2l--cycle; endchar; enddef; RevUpperTopBarb(69,0,1/6); RevUpperTopBarb(82,0,1/5); RevUpperTopBarb(95,0,1/4); RevUpperTopBarb(108,0,1/3); def RevUpperBotBarb (expr ChCode,ChHeightFrac,ChDepthFrac)= beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); pickup crisp.nib; x1=0; x0=w; y1=h; y0=-d; numeric theta; theta=angle(z0-z1); pos1(rule_thickness,90+theta); pos0(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir -(90+(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir -(180+(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z2l=z0; z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; filldraw z2r{dir (90+theta)}..{z1-z0}z0r--z2l--cycle; endchar; enddef; RevUpperBotBarb(70,0,1/6); RevUpperBotBarb(83,0,1/5); RevUpperBotBarb(96,0,1/4); RevUpperBotBarb(109,0,1/3); def RevLowerTopBarb (expr ChCode, ChHeightFrac, ChDepthFrac)= beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); pickup crisp.nib; x1=w ; x0=0; y1=-d; y0=h; numeric theta; theta=angle(z1-z0); pos1(rule_thickness,90+theta); pos0(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir (90-(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir -(45-theta) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); pos5(bar,90-(45-theta)); z5l=z0; pos6(bar,-(45-theta)); z6l=z0; z2r=z0; z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; filldraw z2l{dir (180+90+theta)}..{z1-z0}z0l--z2r--cycle; endchar; enddef; RevLowerTopBarb(71,0,1/6); RevLowerTopBarb(84,0,1/5); RevLowerTopBarb(97,0,1/4); RevLowerTopBarb(110,0,1/3); def RevLowerBotBarb (expr ChCode, ChHeightFrac,ChDepthFrac)= beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); pickup crisp.nib; x1=w ; x0=0; y1=-d; y0=h; numeric theta,delta;theta=angle(z1-z0); pos1(rule_thickness,90+theta); pos0(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir (90-(45-theta)) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir -(45-theta) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); pos5(bar,90-(45-theta)); z5l=z0; pos6(bar,-(45-theta)); z6l=z0; z2r=z0; z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; filldraw z2l{dir (90+theta)}..{z1-z0}z0r--z2r--cycle; endchar; enddef; RevLowerBotBarb(72,0,1/6); RevLowerBotBarb(85,0,1/5); RevLowerBotBarb(98,0,1/4); RevLowerBotBarb(111,0,1/3); def RevLowerTopHook (expr ChCode, ChHeightFrac, ChDepthFrac)= compute_spread(.45x_height#,.55x_height); beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); pickup crisp.nib; x1=(w) ; x0= 0; y1=-d; y0=h; numeric theta; theta=angle(z1-z0); pos1(rule_thickness,-90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir (90+theta) xscaled spread yscaled spread; pos5(bar,90-(45-theta)); z5l=z0; pos6(bar,-(45-theta)); z6l=z0; z2l=z0; z9=.381966[.5[z3,z4],z0]; pickup rule.nib; z40= 1/2[z0,z4] + dir (180+theta) xscaled 2.5u yscaled 2.5u; draw z0{z0-z1}..{z4-z0}z40..{z1-z0}z4; endchar; enddef; RevLowerTopHook(73,0,1/6); RevLowerTopHook(86,0,1/5); RevLowerTopHook(99,0,1/4); RevLowerTopHook(112,0,1/3); def RevLowerBotHook (expr ChCode, ChHeightFrac, ChDepthFrac)= compute_spread(.45x_height#,.55x_height); beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); pickup crisp.nib; x1=(w) ; x0= 0; y1=-d; y0=h; numeric theta,delta; theta=angle(z1-z0); delta=3u++.24asc_height; if abs(theta-45)<2.5: theta:=45; y1:=y0+x1-x0; fi % near-45$^\circ$ angle pos1(rule_thickness,-90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir -(90-theta) xscaled spread yscaled spread; %dir (90-theta) xscaled (delta+eps) yscaled (delta+eps); %z3=z0+ dir -(45-theta) xscaled (delta+eps) yscaled (delta+eps); pos5(bar,90-(45-theta)); z5l=z0; pos6(bar,-(45-theta)); z6l=z0; z2l=z0; z9=.381966[.5[z3,z4],z0]; z40= 1/2[z0,z4] + dir (180+theta) xscaled 2.5u yscaled 2.5u; pickup rule.nib; draw z0{z0-z1}..{z4-z0}z40..{z1-z0}z4; %penstroke z2e..{z4-z9}z4e; penlabels(0,1,2,3,4,5,6,9); endchar; enddef; RevLowerBotHook(74,0,1/6); RevLowerBotHook(87,0,1/5); RevLowerBotHook(100,0,1/4); RevLowerBotHook(113,0,1/3); def RevUpperTopHook (expr ChCode, ChHeightFrac, ChDepthFrac)= beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); pickup crisp.nib; x1= 0; x0=(w); y1=h; y0=-d; numeric theta; theta=angle(z0-z1); pos1(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir (90+theta) xscaled (spread) yscaled (spread); z2r=z0; z9=.381966[.5[z3,z4],z0]; z40= 1/2[z0,z4] + dir theta xscaled 2.5u yscaled 2.5u; pickup rule.nib; draw z0{z0-z1}..{z4-z0}z40..{z1-z0}z4; endchar; enddef; RevUpperTopHook(75,0,1/6); RevUpperTopHook(88,0,1/5); RevUpperTopHook(101,0,1/4); RevUpperTopHook(114,0,1/3); def RevUpperBotHook (expr ChCode, ChHeightFrac, ChDepthFrac)= beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); pickup crisp.nib; x1= 0; x0=(w); y1=h; y0=-d; numeric theta; theta=angle(z0-z1); pos1(rule_thickness,90+theta); pos2(1.5rule_thickness,theta); pos3(bar,theta); pos4(bar,theta); z4=z0+ dir -(90-theta) xscaled (spread) yscaled (spread); z2r=z0; z9=.381966[.5[z3,z4],z0]; z40= 1/2[z0,z4] + dir theta xscaled 2.5u yscaled 2.5u; pickup rule.nib; draw z0{z0-z1}..{z4-z0}z40..{z1-z0}z4; penlabels(0,1,2,3,4,5,6,9); endchar; enddef; RevUpperBotHook(76,0,1/6); RevUpperBotHook(89,0,1/5); RevUpperBotHook(102,0,1/4); RevUpperBotHook(115,0,1/3); def RevSquiggle (expr ChCode, ChHeightFrac,ChDepthFrac)= beginchar(ChCode,18u#,ChHeightFrac*18u#,ChDepthFrac*18u#); adjust_fit(0,0); x0= 0; x1=(w); y0=h; y1=-d; numeric theta,delta; theta=angle(z1-z0); delta=3u; z2=.5/6[z0,z1]; z8=5.5/6[z0,z1]; z3=1/6[z0,z1] + dir (90+theta) xscaled (delta+eps) yscaled (delta+eps); z5=3/6[z0,z1] + dir (90+theta) xscaled (delta+eps) yscaled (delta+eps); z7=5/6[z0,z1] + dir (90+theta) xscaled (delta+eps) yscaled (delta+eps); z4=2/6[z0,z1] + dir -(90-theta) xscaled (delta+eps) yscaled (delta+eps); z6=4/6[z0,z1] + dir -(90-theta) xscaled (delta+eps) yscaled (delta+eps); pickup pencircle scaled rule_thickness; draw z0--z2--z3--z4--z5--z6--z7--z8--z1; penlabels(1,2); endchar; enddef; RevSquiggle(77,0,1/6); RevSquiggle(90,0,1/5); RevSquiggle(103,0,1/4); RevSquiggle(116,0,1/3); beginchar(117,0,0,0); adjust_fit(0,0); pickup rule.nib; lft x0 =0; y0=0; lft x2=0; y2=y0; pos2(1.5rule_thickness,90); pos3(bar,90); pos4(bar,90); z4=z0+ dir (270-45) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir (270+45) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; endchar; beginchar(118,0,10/3pt#,0); adjust_fit(0,0); pickup rule.nib; lft x0 =0; y0=0; lft x2=0; y2=y0; pos2(1.5rule_thickness,270); pos3(bar,270); pos4(bar,270); z4=z0+ dir (90-45) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir (90+45) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; endchar; beginchar(119,0,0,0); adjust_fit(0,0); pickup rule.nib; lft x0 =0; y0=0; lft x2=0; y2=y0; pos0(rule_thickness,0); pos2(1.5rule_thickness,90); pos3(bar,90); pos4(bar,80); z4=z0+ dir (270-45) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir (270+45) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; filldraw z2r{right}..{down}z0r--z2l--cycle; endchar; beginchar(120,0,0,0); adjust_fit(0,0); pickup rule.nib; lft x0 =0; y0=0; lft x2=0; y2=0; pos0(rule_thickness,0); pos2(1.5rule_thickness,90); pos3(bar,90); pos4(bar,80); z4=z0+ dir (270-45) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z3=z0+ dir (270+45) scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); z9=.381966[.5[z3,z4],z0]; pickup crisp.nib; filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; filldraw z2r{left}..{down}z0l--z2l--cycle; endchar; compute_spread(.45x_height#,.55x_height); beginchar(121,0,10/3pt#,0#); adjust_fit(0,0); pickup rule.nib; lft x0=0; y0=0; z4=z0+ dir 180 xscaled spread yscaled spread; pickup rule.nib; top z40= 1/2[z0,z4] + dir 90 xscaled 2.5u yscaled 2.5u; draw z0{up}..{z4-z0}z40..{down}z4; penlabels(0,1,2,3,4,5,6,9); endchar; compute_spread(.45x_height#,.55x_height); beginchar(122,0,10/3pt#,0#); adjust_fit(0,0); pickup rule.nib; lft x0=0; y0=0; z4=z0- dir 180 xscaled spread yscaled spread; pickup rule.nib; top z40= 1/2[z0,z4] + dir 90 xscaled 2.5u yscaled 2.5u; draw z0{up}..{z4-z0}z40..{down}z4; penlabels(0,1,2,3,4,5,6,9); endchar; beginchar(123,0,18u#,0#); adjust_fit(0,0); pickup rule.nib; lft x0=lft x1=0; y0=-d; y1=h; numeric theta,delta; theta=angle(z1-z0); delta=3u; z2=.5/6[z0,z1]; z8=5.5/6[z0,z1]; z3=1/6[z0,z1] + dir (90+theta) xscaled (delta+eps) yscaled (delta+eps); z5=3/6[z0,z1] + dir (90+theta) xscaled (delta+eps) yscaled (delta+eps); z7=5/6[z0,z1] + dir (90+theta) xscaled (delta+eps) yscaled (delta+eps); z4=2/6[z0,z1] + dir -(90-theta) xscaled (delta+eps) yscaled (delta+eps); z6=4/6[z0,z1] + dir -(90-theta) xscaled (delta+eps) yscaled (delta+eps); pickup pencircle scaled rule_thickness; draw z0--z2--z3--z4--z5--z6--z7--z8--z1; penlabels(1,2); endchar; bye. (3u++.24asc_height)+eps-rule_thickness