summaryrefslogtreecommitdiff
path: root/macros/lamstex/mf/lams3.mf
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/lamstex/mf/lams3.mf
Initial commit
Diffstat (limited to 'macros/lamstex/mf/lams3.mf')
-rw-r--r--macros/lamstex/mf/lams3.mf902
1 files changed, 902 insertions, 0 deletions
diff --git a/macros/lamstex/mf/lams3.mf b/macros/lamstex/mf/lams3.mf
new file mode 100644
index 0000000000..1a0bb214e6
--- /dev/null
+++ b/macros/lamstex/mf/lams3.mf
@@ -0,0 +1,902 @@
+% 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
+