diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/lamstex/mf |
Initial commit
Diffstat (limited to 'macros/lamstex/mf')
-rw-r--r-- | macros/lamstex/mf/lams1.mf | 675 | ||||
-rw-r--r-- | macros/lamstex/mf/lams2.mf | 623 | ||||
-rw-r--r-- | macros/lamstex/mf/lams3.mf | 902 | ||||
-rw-r--r-- | macros/lamstex/mf/lams4.mf | 614 | ||||
-rw-r--r-- | macros/lamstex/mf/lams5.mf | 533 |
5 files changed, 3347 insertions, 0 deletions
diff --git a/macros/lamstex/mf/lams1.mf b/macros/lamstex/mf/lams1.mf new file mode 100644 index 0000000000..8dd700d5e4 --- /dev/null +++ b/macros/lamstex/mf/lams1.mf @@ -0,0 +1,675 @@ +% LAMS1.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#; %x_height#; +font_quad 18u# if not monospace:+4letter_fit# fi; + +% ********************************************** +% Macros and character definitions. +% ********************************************** + +def Shaft (expr ChCode, ChHeightFrac)= + +beginchar(ChCode,18u#,ChHeightFrac*18u#,0#); +adjust_fit(0,0); pickup crisp.nib; +x1=hround 0; x0=hround 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); +pickup pencircle scaled rule_thickness; +draw z1--z0; +endchar; +enddef; + +Shaft(0,1/6); +Shaft(13,1/5); +Shaft(26,1/4); +Shaft(39,1/3); +Shaft(52,2/5); +Shaft(65,1/2); +Shaft(78,3/5); +Shaft(91,2/3); +Shaft(104,3/4); + +def DashedShaft (expr ChCode, ChHeightFrac)= + +beginchar(ChCode,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=hround w; +y2=h; +%filldraw z2l---z1l{z1-z2}..{z2-z1}z1r---z2r{z2-z1}..{z1-z2}cycle; +pickup pencircle scaled rule_thickness; +draw z1--1/6z2; +draw 2/6z2--4/6z2; +draw 5/6z2--z2; +endchar; +enddef; + +DashedShaft(1,1/6); +DashedShaft(14,1/5); +DashedShaft(27,1/4); +DashedShaft(40,1/3); +DashedShaft(53,2/5); +DashedShaft(66,1/2); +DashedShaft(79,3/5); +DashedShaft(92,2/3); +DashedShaft(105,3/4); + + +def UpperHead (expr ChCode, ChHeightFrac)= + +beginchar(ChCode,18u#,ChHeightFrac*18u#,0#); +adjust_fit(0,0); pickup rule.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,1/6); +UpperHead(15,1/5); +UpperHead(28,1/4); +UpperHead(41,1/3); +UpperHead(54,2/5); +UpperHead(67,1/2); +UpperHead(80,3/5); +UpperHead(93,2/3); +UpperHead(106,3/4); + +def LowerHead (expr ChCode, ChHeightFrac)= + +beginchar(ChCode,18u#,ChHeightFrac*18u#,0#); +adjust_fit(0,0); pickup rule.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 z2l..{z4-z9}z4l---{z9-z4}z4r..z2r--cycle; + +endchar; +enddef; + +LowerHead(3,1/6); +LowerHead(16,1/5); +LowerHead(29,1/4); +LowerHead(42,1/3); +LowerHead(55,2/5); +LowerHead(68,1/2); +LowerHead(81,3/5); +LowerHead(94,2/3); +LowerHead(107,3/4); + + + +def UpperTopBarb (expr ChCode, ChHeightFrac)= +beginchar(ChCode,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,1/6); +UpperTopBarb(17,1/5); +UpperTopBarb(30,1/4); +UpperTopBarb(43,1/3); +UpperTopBarb(56,2/5); +UpperTopBarb(69,1/2); +UpperTopBarb(82,3/5); +UpperTopBarb(95,2/3); +UpperTopBarb(108,3/4); + +def UpperBotBarb (expr ChCode, ChHeightFrac)= + +beginchar(ChCode,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,1/6); +UpperBotBarb(18,1/5); +UpperBotBarb(31,1/4); +UpperBotBarb(44,1/3); +UpperBotBarb(57,2/5); +UpperBotBarb(70,1/2); +UpperBotBarb(83,3/5); +UpperBotBarb(96,2/3); +UpperBotBarb(109,3/4); + + +def LowerTopBarb (expr ChCode, ChHeightFrac)= + +beginchar(ChCode,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,1/6); +LowerTopBarb(19,1/5); +LowerTopBarb(32,1/4); +LowerTopBarb(45,1/3); +LowerTopBarb(58,2/5); +LowerTopBarb(71,1/2); +LowerTopBarb(84,3/5); +LowerTopBarb(97,2/3); +LowerTopBarb(110,3/4); + +def LowerBotBarb (expr ChCode, ChHeightFrac)= + +beginchar(ChCode,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,1/6); +LowerBotBarb(20,1/5); +LowerBotBarb(33,1/4); +LowerBotBarb(46,1/3); +LowerBotBarb(59,2/5); +LowerBotBarb(72,1/2); +LowerBotBarb(85,3/5); +LowerBotBarb(98,2/3); +LowerBotBarb(111,3/4); + +def LowerTopHook (expr ChCode, ChHeightFrac)= +compute_spread(.45x_height#,.55x_height); +beginchar(ChCode,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); 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]; +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; +%penstroke z2e..{z4-z9}z4e; +endchar; +enddef; + +LowerTopHook(8,1/6); +LowerTopHook(21,1/5); +LowerTopHook(34,1/4); +LowerTopHook(47,1/3); +LowerTopHook(60,2/5); +LowerTopHook(73,1/2); +LowerTopHook(86,3/5); +LowerTopHook(99,2/3); +LowerTopHook(112,3/4); + +def LowerBotHook (expr ChCode, ChHeightFrac)= +compute_spread(.45x_height#,.55x_height); +beginchar(ChCode,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); 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; + +endchar; +enddef; + +LowerBotHook(9,1/6); +LowerBotHook(22,1/5); +LowerBotHook(35,1/4); +LowerBotHook(48,1/3); +LowerBotHook(61,2/5); +LowerBotHook(74,1/2); +LowerBotHook(87,3/5); +LowerBotHook(100,2/3); +LowerBotHook(113,3/4); + + + +def UpperTopHook (expr ChCode, ChHeightFrac)= + +beginchar(ChCode,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; +endchar; +enddef; + +UpperTopHook(10,1/6); +UpperTopHook(23,1/5); +UpperTopHook(36,1/4); +UpperTopHook(49,1/3); +UpperTopHook(62,2/5); +UpperTopHook(75,1/2); +UpperTopHook(88,3/5); +UpperTopHook(101,2/3); +UpperTopHook(114,3/4); + + +def UpperBotHook (expr ChCode, ChHeightFrac)= + +beginchar(ChCode,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; +endchar; +enddef; +UpperBotHook(11,1/6); +UpperBotHook(24,1/5); +UpperBotHook(37,1/4); +UpperBotHook(50,1/3); +UpperBotHook(63,2/5); +UpperBotHook(76,1/2); +UpperBotHook(89,3/5); +UpperBotHook(102,2/3); +UpperBotHook(115,3/4); + + + +def Squiggle (expr ChCode, ChHeightFrac)= + +beginchar(ChCode,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; +endchar; +enddef; + +Squiggle(12,1/6); +Squiggle(25,1/5); +Squiggle(38,1/4); +Squiggle(51,1/3); +Squiggle(64,2/5); +Squiggle(77,1/2); +Squiggle(90,3/5); +Squiggle(103,2/3); +Squiggle(116,3/4); + +def RevShaft (expr ChCode,ChWidthFrac,ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0,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; +endchar; +enddef; + +RevShaft(117,1/6,1); + +def RevDashedShaft (expr ChCode, ChWidthFrac, ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0,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; + +%filldraw z2l---z1l{z1-z2}..{z2-z1}z1r---z2r{z2-z1}..{z1-z2}cycle; +pickup pencircle scaled rule_thickness; +draw z1--1/6[z1,z2]; +draw 2/6[z1,z2]--4/6[z1,z2]; +draw 5/6[z1,z2]--z2; +endchar; +enddef; + + +RevDashedShaft(118,1/6,1); + +beginchar(119,0,math_axis#,0); +adjust_fit(0,0); pickup rule.nib; +x0=0; +y0=y2=math_axis; +x2r=0; % was z2l +pos2(1.5rule_thickness,180); +pos3(bar,180); pos4(bar,180); +z4=z0+ dir (180-45) xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z3=z0+ dir (180+45) xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z9=.381966[.5[z3,z4],z2]; +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(120,0,math_axis#,0); +adjust_fit(0,0); pickup rule.nib; +x0=0; +y0=math_axis; +pos2(1.5rule_thickness,0); +pos3(bar,0); pos4(bar,0); +z4=z0+ dir -45 xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z3=z0+ dir 45 xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z2r=z0; %was z2l +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(121,0,math_axis#,0); +adjust_fit(0,0); pickup rule.nib; +x0=0; +y0=math_axis; +pos1(rule_thickness,90); +pos2(1.5rule_thickness,180); +pos0(rule_thickness,90); +pos3(bar,180); pos4(bar,180); +z4=z0+ dir (180-45) xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z3=z0+ dir (180+45) xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z2r=z0; %was z2l +z9=.381966[.5[z3,z4],z0]; +pickup crisp.nib; +filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; +filldraw z2l{down}..{left}z0l--z2r--cycle; +endchar; + + +beginchar(122,0,math_axis#,0); +adjust_fit(0,0); pickup rule.nib; +x0=0; +y0=math_axis; +pos2(1.5rule_thickness,180); +pos0(rule_thickness,90); +pos3(bar,180); pos4(bar,180); +z4=z0+ dir (180-45) xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z3=z0+ dir (180+45) xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z2r=z0; % was z2l +z9=.381966[.5[z3,z4],z0]; +pickup crisp.nib; +filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; +filldraw z2l{up}..{left}z0r--z2r--cycle; +endchar; + +compute_spread(.45x_height#,.55x_height); +beginchar(123,spread#,math_axis#,0#); +adjust_fit(0,0); pickup rule.nib; +x0=0; +y0=math_axis; +numeric delta; delta=3u++.24asc_height; +z4=z0+ dir (90) xscaled spread yscaled spread; +pickup rule.nib; +rt x40=hround(w); +y40=good.y 1/2[y0,y4]; +draw z0{right}..z40..{left}z4; +endchar; + +beginchar(124,spread#,math_axis#,0#); +adjust_fit(0,0); pickup rule.nib; +x0=0; +y0=math_axis; +z4=z0+ dir (-90) xscaled spread yscaled spread; +pickup rule.nib; +rt x40=hround(w); +y40=good.y 1/2[y0,y4]; +%draw z0..{z4-z0}z40..z4; +draw z0{right}..z40..{left}z4; +endchar; + + +beginchar(125,18u#,math_axis#,0#); +adjust_fit(0,0); +x0=hround 0; x1=hround(w); +y0=math_axis; y1=math_axis; +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; +endchar; + +bye. + diff --git a/macros/lamstex/mf/lams2.mf b/macros/lamstex/mf/lams2.mf new file mode 100644 index 0000000000..49c18c18ef --- /dev/null +++ b/macros/lamstex/mf/lams2.mf @@ -0,0 +1,623 @@ +% LAMS2.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; + +% ********************************************** +% Macros and character definitions. +% ********************************************** + +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; +%filldraw z2l---z1l{z1-z2}..{z2-z1}z1r---z2r{z2-z1}..{z1-z2}cycle; +pickup pencircle scaled rule_thickness; +draw z1--z0; +penlabels(1,2); endchar; +enddef; + +Shaft(0,1,4/5); +Shaft(13,1,5/6); +Shaft(26,1,1); +Shaft(39,5/6,1); +Shaft(52,4/5,1); +Shaft(65,3/4,1); +Shaft(78,2/3,1); +Shaft(91,3/5,1); +Shaft(104,1/2,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; +%filldraw z2l---z1l{z1-z2}..{z2-z1}z1r---z2r{z2-z1}..{z1-z2}cycle; +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,1,4/5); +DashedShaft(14,1,5/6); +DashedShaft(27,1,1); +DashedShaft(40,5/6,1); +DashedShaft(53,4/5,1); +DashedShaft(66,3/4,1); +DashedShaft(79,2/3,1); +DashedShaft(92,3/5,1); +DashedShaft(105,1/2,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,1,4/5); +UpperHead(15,1,5/6); +UpperHead(28,1,1); +UpperHead(41,5/6,1); +UpperHead(54,4/5,1); +UpperHead(67,3/4,1); +UpperHead(80,2/3,1); +UpperHead(93,3/5,1); +UpperHead(106,1/2,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,1,4/5); +LowerHead(16,1,5/6); +LowerHead(29,1,1); +LowerHead(42,5/6,1); +LowerHead(55,4/5,1); +LowerHead(68,3/4,1); +LowerHead(81,2/3,1); +LowerHead(94,3/5,1); +LowerHead(107,1/2,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,1,4/5); +UpperTopBarb(17,1,5/6); +UpperTopBarb(30,1,1); +UpperTopBarb(43,5/6,1); +UpperTopBarb(56,4/5,1); +UpperTopBarb(69,3/4,1); +UpperTopBarb(82,2/3,1); +UpperTopBarb(95,3/5,1); +UpperTopBarb(108,1/2,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,1,4/5); +UpperBotBarb(18,1,5/6); +UpperBotBarb(31,1,1); +UpperBotBarb(44,5/6,1); +UpperBotBarb(57,4/5,1); +UpperBotBarb(70,3/4,1); +UpperBotBarb(83,2/3,1); +UpperBotBarb(96,3/5,1); +UpperBotBarb(109,1/2,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,1,4/5); +LowerTopBarb(19,1,5/6); +LowerTopBarb(32,1,1); +LowerTopBarb(45,5/6,1); +LowerTopBarb(58,4/5,1); +LowerTopBarb(71,3/4,1); +LowerTopBarb(84,2/3,1); +LowerTopBarb(97,3/5,1); +LowerTopBarb(110,1/2,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,1,4/5); +LowerBotBarb(20,1,5/6); +LowerBotBarb(33,1,1); +LowerBotBarb(46,5/6,1); +LowerBotBarb(59,4/5,1); +LowerBotBarb(72,3/4,1); +LowerBotBarb(85,2/3,1); +LowerBotBarb(98,3/5,1); +LowerBotBarb(111,1/2,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,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]; +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; +%penstroke z2e..{z4-z9}z4e; + +penlabels(0,1,2,3,4,5,6,9); endchar; +enddef; + +LowerTopHook(8,1,4/5); +LowerTopHook(21,1,5/6); +LowerTopHook(34,1,1); +LowerTopHook(47,5/6,1); +LowerTopHook(60,4/5,1); +LowerTopHook(73,3/4,1); +LowerTopHook(86,2/3,1); +LowerTopHook(99,3/5,1); +LowerTopHook(112,1/2,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,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; + +LowerBotHook(9,1,4/5); +LowerBotHook(22,1,5/6); +LowerBotHook(35,1,1); +LowerBotHook(48,5/6,1); +LowerBotHook(61,4/5,1); +LowerBotHook(74,3/4,1); +LowerBotHook(87,2/3,1); +LowerBotHook(100,3/5,1); +LowerBotHook(113,1/2,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,1,4/5); +UpperTopHook(23,1,5/6); +UpperTopHook(36,1,1); +UpperTopHook(49,5/6,1); +UpperTopHook(62,4/5,1); +UpperTopHook(75,3/4,1); +UpperTopHook(88,2/3,1); +UpperTopHook(101,3/5,1); +UpperTopHook(114,1/2,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,1,4/5); +UpperBotHook(24,1,5/6); +UpperBotHook(37,1,1); +UpperBotHook(50,5/6,1); +UpperBotHook(63,4/5,1); +UpperBotHook(76,3/4,1); +UpperBotHook(89,2/3,1); +UpperBotHook(102,3/5,1); +UpperBotHook(115,1/2,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,1,4/5); +Squiggle(25,1,5/6); +Squiggle(38,1,1); +Squiggle(51,5/6,1); +Squiggle(64,4/5,1); +Squiggle(77,3/4,1); +Squiggle(90,2/3,1); +Squiggle(103,3/5,1); +Squiggle(116,1/2,1); + +beginchar(117,0,math_axis#,0); +adjust_fit(0,0); pickup crisp.nib; +x0=0; +y0=math_axis; +pos2(1.5rule_thickness,0); +pos3(bar,0); pos4(bar,0); +z4=z0+ dir -45 xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z3=z0+ dir 45 xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z2r=z0; %was z2l +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,math_axis#,0); +adjust_fit(0,0); pickup crisp.nib; +x0=0; +y0=math_axis; +pos2(1.5rule_thickness,180); +pos3(bar,180); pos4(bar,180); +z4=z0+ dir (180-45) xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z3=z0+ dir (180+45) xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +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; + +beginchar(119,0,math_axis#,0); +adjust_fit(0,0); pickup crisp.nib; +x0=0; +y0=math_axis; +pos2(1.5rule_thickness,0); +pos3(bar,0); pos4(bar,0); +pos0(rule_thickness,90); +z4=z0+ dir -45 xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z3=z0+ dir 45 xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z2r=z0; +z9=.381966[.5[z3,z4],z0]; +pickup crisp.nib; +filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; +filldraw z2l{down}..{right}z0l--z2r--cycle; +endchar; + +beginchar(120,0,math_axis#,0); +adjust_fit(0,0); pickup crisp.nib; +x0=0; +y0=math_axis; +pos0(rule_thickness,90); +pos2(1.5rule_thickness,0); +pos3(bar,0); pos4(bar,0); +z4=z0+ dir -45 scaled ((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); +z3=z0+ dir 45 xscaled ((3u++.24asc_height)+eps-rule_thickness) yscaled ((3u++.24asc_height)+eps-rule_thickness); +z2r=z0; +z9=.381966[.5[z3,z4],z0]; +pickup crisp.nib; +filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; +filldraw z2l{up}..{right}z0r--z2r--cycle; +endchar; + +compute_spread(.45x_height#,.55x_height); +beginchar(121,spread#,math_axis#,0#); +adjust_fit(0,0); pickup crisp.nib; +x0=w; +y0=math_axis; +z4=z0+ dir (90) xscaled spread yscaled spread; +pickup rule.nib; +lft x40=0; +y40=good.y 1/2[y0,y4]; +draw z0{left}..z40..{right}z4; +endchar; + +beginchar(122,spread#,math_axis#,0#); +adjust_fit(0,0); pickup crisp.nib; +x0=w; +y0=math_axis; +z4=z0+ dir (-90) xscaled spread yscaled spread; +pickup rule.nib; +lft x40=0; +y40=good.y 1/2[y0,y4]; +draw z0{left}..z40..{right}z4; +endchar; + +bye. + 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 + diff --git a/macros/lamstex/mf/lams4.mf b/macros/lamstex/mf/lams4.mf new file mode 100644 index 0000000000..f86836c8bb --- /dev/null +++ b/macros/lamstex/mf/lams4.mf @@ -0,0 +1,614 @@ +% LAMS4.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 RevShaft (expr ChCode,ChWidthFrac,ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +def RevDashedShaft (expr ChCode, ChWidthFrac, ChDepthFrac)= +beginchar(ChCode,ChWidthFrac*18u#,0,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/6[z1,z2]; +draw 2/6[z1,z2]--4/6[z1,z2]; +draw 5/6[z1,z2]--z2; +penlabels(1,2); endchar; +enddef; + + +def RevUpperHead (expr ChCode, ChWidthFrac, ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0, ChDepthFrac*18u#); +adjust_fit(0,0); pickup crisp.nib; +x1=0; x0=w; +y1=h; y0=-d; +numeric theta; theta=angle(z0-z1); +numeric delta; delta=((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); +pos1(rule_thickness,90+theta); +pos2(1.5rule_thickness,theta); +pos3(bar,theta); pos4(bar,theta); +z4=z0+ dir -(90+(45-theta)) scaled delta; +z3=z0+ dir -(180+(45-theta)) scaled delta; +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; + + +def RevLowerHead (expr ChCode, ChWidthFrac, ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0,ChDepthFrac*18u#); +adjust_fit(0,0); pickup crisp.nib; +x1=w ; x0= 0; +y1=-d; y0=h; +numeric theta; theta=angle(z1-z0); +numeric delta; delta=((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); +pos1(rule_thickness,-90+theta); +pos2(1.5rule_thickness,theta); +pos3(bar,theta); pos4(bar,theta); +z4=z0+ dir (90-(45-theta)) scaled delta; +z3=z0+ dir -(45-theta) scaled delta; +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; + +def RevUpperTopBarb (expr ChCode, ChWidthFrac, ChDepthFrac)= +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +def RevUpperBotBarb (expr ChCode,ChWidthFrac,ChDepthFrac)= +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +def RevLowerTopBarb (expr ChCode, ChWidthFrac, ChDepthFrac)= +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +def RevLowerBotBarb (expr ChCode, ChWidthFrac,ChDepthFrac)= +beginchar(ChCode,ChWidthFrac*18u#,0,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; + +def RevLowerTopHook (expr ChCode, ChWidthFrac, ChDepthFrac)= +compute_spread(.45x_height#,.55x_height); +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +def RevLowerBotHook (expr ChCode, ChWidthFrac, ChDepthFrac)= +compute_spread(.45x_height#,.55x_height); +beginchar(ChCode,ChWidthFrac*18u#,0,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; + +def RevUpperTopHook (expr ChCode, ChWidthFrac, ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0,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; + +def RevUpperBotHook (expr ChCode, ChWidthFrac, ChDepthFrac)= +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +def RevSquiggle (expr ChCode, ChWidthFrac,ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +RevShaft(0,1,2/5); +RevShaft(13,1,1/2); +RevShaft(26,1,3/5); +RevShaft(39,1,2/3); +RevShaft(52,1,3/4); +RevShaft(65,1,4/5); +RevShaft(78,1,5/6); +RevShaft(91,1,1); +RevShaft(104,5/6,1); + +RevDashedShaft(1,1,2/5); +RevDashedShaft(14,1,1/2); +RevDashedShaft(27,1,3/5); +RevDashedShaft(40,1,2/3); +RevDashedShaft(53,1,3/4); +RevDashedShaft(66,1,4/5); +RevDashedShaft(79,1,5/6); +RevDashedShaft(92,1,1); +RevDashedShaft(105,5/6,1); + +RevUpperHead(2,1,2/5); +RevUpperHead(15,1,1/2); +RevUpperHead(28,1,3/5); +RevUpperHead(41,1,2/3); +RevUpperHead(54,1,3/4); +RevUpperHead(67,1,4/5); +RevUpperHead(80,1,5/6); +RevUpperHead(93,1,1); +RevUpperHead(106,5/6,1); + +RevLowerHead(3,1,2/5); +RevLowerHead(16,1,1/2); +RevLowerHead(29,1,3/5); +RevLowerHead(42,1,2/3); +RevLowerHead(55,1,3/4); +RevLowerHead(68,1,4/5); +RevLowerHead(81,1,5/6); +RevLowerHead(94,1,1); +RevLowerHead(107,5/6,1); + + +RevUpperTopBarb(4,1,2/5); +RevUpperTopBarb(17,1,1/2); +RevUpperTopBarb(30,1,3/5); +RevUpperTopBarb(43,1,2/3); +RevUpperTopBarb(56,1,3/4); +RevUpperTopBarb(69,1,4/5); +RevUpperTopBarb(82,1,5/6); +RevUpperTopBarb(95,1,1); +RevUpperTopBarb(108,5/6,1); + + +RevUpperBotBarb(5,1,2/5); +RevUpperBotBarb(18,1,1/2); +RevUpperBotBarb(31,1,3/5); +RevUpperBotBarb(44,1,2/3); +RevUpperBotBarb(57,1,3/4); +RevUpperBotBarb(70,1,4/5); +RevUpperBotBarb(83,1,5/6); +RevUpperBotBarb(96,1,1); +RevUpperBotBarb(109,5/6,1); + + +RevLowerTopBarb(6,1,2/5); +RevLowerTopBarb(19,1,1/2); +RevLowerTopBarb(32,1,3/5); +RevLowerTopBarb(45,1,2/3); +RevLowerTopBarb(58,1,3/4); +RevLowerTopBarb(71,1,4/5); +RevLowerTopBarb(84,1,5/6); +RevLowerTopBarb(97,1,1); +RevLowerTopBarb(110,5/6,1); + + + +RevLowerBotBarb(7,1,2/5); +RevLowerBotBarb(20,1,1/2); +RevLowerBotBarb(33,1,3/5); +RevLowerBotBarb(46,1,2/3); +RevLowerBotBarb(59,1,3/4); +RevLowerBotBarb(72,1,4/5); +RevLowerBotBarb(85,1,5/6); +RevLowerBotBarb(98,1,1); +RevLowerBotBarb(111,5/6,1); + + +RevLowerTopHook(8,1,2/5); +RevLowerTopHook(21,1,1/2); +RevLowerTopHook(34,1,3/5); +RevLowerTopHook(47,1,2/3); +RevLowerTopHook(60,1,3/4); +RevLowerTopHook(73,1,4/5); +RevLowerTopHook(86,1,5/6); +RevLowerTopHook(99,1,1); +RevLowerTopHook(112,5/6,1); + +RevLowerBotHook(9,1,2/5); +RevLowerBotHook(22,1,1/2); +RevLowerBotHook(35,1,3/5); +RevLowerBotHook(48,1,2/3); +RevLowerBotHook(61,1,3/4); +RevLowerBotHook(74,1,4/5); +RevLowerBotHook(87,1,5/6); +RevLowerBotHook(100,1,1); +RevLowerBotHook(113,5/6,1); + + +RevUpperTopHook(10,1,2/5); +RevUpperTopHook(23,1,1/2); +RevUpperTopHook(36,1,3/5); +RevUpperTopHook(49,1,2/3); +RevUpperTopHook(62,1,3/4); +RevUpperTopHook(75,1,4/5); +RevUpperTopHook(88,1,5/6); +RevUpperTopHook(101,1,1); +RevUpperTopHook(114,5/6,1); + + +RevUpperBotHook(11,1,2/5); +RevUpperBotHook(24,1,1/2); +RevUpperBotHook(37,1,3/5); +RevUpperBotHook(50,1,2/3); +RevUpperBotHook(63,1,3/4); +RevUpperBotHook(76,1,4/5); +RevUpperBotHook(89,1,5/6); +RevUpperBotHook(102,1,1); +RevUpperBotHook(115,5/6,1); + +RevSquiggle(12,1,2/5); +RevSquiggle(25,1,1/2); +RevSquiggle(38,1,3/5); +RevSquiggle(51,1,2/3); +RevSquiggle(64,1,3/4); +RevSquiggle(77,1,4/5); +RevSquiggle(90,1,5/6); +RevSquiggle(103,1,1); +RevSquiggle(116,5/6,1); + +beginchar(117,0,0,0); +adjust_fit(0,0); pickup crisp.nib; +numeric delta; delta=3u++.24asc_height; +pickup rule.nib; +lft x0=0; +y0=0; +lft x2=0; +y2=y0; %top +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(118,0,0,10/3pt#); +adjust_fit(0,0); pickup rule.nib; +numeric delta; delta=((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); +lft x0=0; +y0=0; +lft x2=0; +y2=y0; %top +pos2(1.5rule_thickness,90); +pos3(bar,90); pos4(bar,90); +z4=z0+ dir (270-45) xscaled (delta+eps) yscaled (delta+eps); +z3=z0+ dir (270+45) xscaled (delta+eps) yscaled (delta+eps); +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; +numeric delta; delta=((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); +lft x0=0; +y0=0; +lft x2=0; +y2=y0; +pos0(rule_thickness,0); +pos2(1.5rule_thickness,270); +pos3(bar,270); pos4(bar,270); +z4=z0+ dir (90-45) xscaled (delta+eps) yscaled (delta+eps); +z3=z0+ dir (90+45) xscaled (delta+eps) yscaled (delta+eps); +z9=.381966[.5[z3,z4],z0]; + +pickup crisp.nib; +filldraw z2r..{z3-z9}z3r---{z9-z3}z3l..z2l--cycle; +filldraw z2r{right}..{up}z0r--z2l--cycle; +penlabels(0,1,2,3,4,5,6,9); endchar; + +beginchar(120,0,0,0); +adjust_fit(0,0); pickup rule.nib; +numeric delta; delta=((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); +lft x0=0; +y0=0; +lft x2=y0; y2=0; +pos0(rule_thickness,0); +pos2(1.5rule_thickness,270); +pos3(bar,270); pos4(bar,270); +z4=z0+ dir (90-45) xscaled (delta+eps) yscaled (delta+eps); +z3=z0+ dir (90+45) xscaled (delta+eps) yscaled (delta+eps); +z9=.381966[.5[z3,z4],z0]; +pickup crisp.nib; +filldraw z2r..{z4-z9}z4r---{z9-z4}z4l..z2l--cycle; +filldraw z2r{left}..{up}z0l--z2l--cycle; +penlabels(0,1,2,3,4,5,6,9); endchar; + +compute_spread(.45x_height#,.55x_height); +beginchar(121,0,0,10/3pt#); +adjust_fit(0,0); pickup rule.nib; +lft x0=0; +y0=0; +z4=z0+ dir 180 xscaled spread yscaled spread; +bot z40= 1/2[z0,z4] + dir 270 xscaled 2.5u yscaled 2.5u; +draw z0{down}..{z4-z0}z40..{up}z4; +penlabels(0,1,2,3,4,5,6,9); endchar; + +compute_spread(.45x_height#,.55x_height); +beginchar(122,0,0,10/3pt#); +adjust_fit(0,0); pickup rule.nib; +lft x0=0; +y0=0; +z4=z0 - dir 180 xscaled spread yscaled spread; +bot z40= 1/2[z0,z4] + dir 270 xscaled 2.5u yscaled 2.5u; +%draw z0{down}..{z4-z0}z40..{up}z4; +draw z0{down}..{z4-z0}z40..{up}z4; +penlabels(0,1,2,3,4,5,6,9); endchar; +bye. + + diff --git a/macros/lamstex/mf/lams5.mf b/macros/lamstex/mf/lams5.mf new file mode 100644 index 0000000000..02f3eec76b --- /dev/null +++ b/macros/lamstex/mf/lams5.mf @@ -0,0 +1,533 @@ +% LAMS5.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 RevShaft (expr ChCode,ChWidthFrac,ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +def RevDashedShaft (expr ChCode, ChWidthFrac, ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0,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/6[z1,z2]; +draw 2/6[z1,z2]--4/6[z1,z2]; +draw 5/6[z1,z2]--z2; +penlabels(1,2); endchar; +enddef; + + +def RevUpperHead (expr ChCode, ChWidthFrac, ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0,ChDepthFrac*18u#); +adjust_fit(0,0); pickup crisp.nib; +x1=0; x0=w; +y1=h; y0=-d; +numeric theta; theta=angle(z0-z1); +numeric delta; delta=((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); +pos1(rule_thickness,90+theta); +pos2(1.5rule_thickness,theta); +pos3(bar,theta); pos4(bar,theta); +z4=z0+ dir -(90+(45-theta)) scaled delta; +z3=z0+ dir -(180+(45-theta)) scaled delta; +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; + + +def RevLowerHead (expr ChCode, ChWidthFrac, ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0,ChDepthFrac*18u#); +adjust_fit(0,0); pickup crisp.nib; +x1=w ; x0= 0; +y1=-d; y0=h; +numeric theta; theta=angle(z1-z0); +numeric delta; delta=((3u++.24asc_height)+eps-rule_thickness-.5crisp.breadth); +pos1(rule_thickness,-90+theta); +pos2(1.5rule_thickness,theta); +pos3(bar,theta); pos4(bar,theta); +z4=z0+ dir (90-(45-theta)) scaled delta; +z3=z0+ dir -(45-theta) scaled delta; +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; +def RevUpperTopBarb (expr ChCode, ChWidthFrac, ChDepthFrac)= +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +def RevUpperBotBarb (expr ChCode,ChWidthFrac,ChDepthFrac)= +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +def RevLowerTopBarb (expr ChCode, ChWidthFrac, ChDepthFrac)= +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +def RevLowerBotBarb (expr ChCode, ChWidthFrac,ChDepthFrac)= +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + + +def RevLowerTopHook (expr ChCode, ChWidthFrac, ChDepthFrac)= +compute_spread(.45x_height#,.55x_height); +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +def RevLowerBotHook (expr ChCode, ChWidthFrac, ChDepthFrac)= +compute_spread(.45x_height#,.55x_height); +beginchar(ChCode,ChWidthFrac*18u#,0,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; + +def RevUpperTopHook (expr ChCode, ChWidthFrac, ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0,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; + +def RevUpperBotHook (expr ChCode, ChWidthFrac, ChDepthFrac)= +beginchar(ChCode,ChWidthFrac*18u#,0,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; + + +def RevSquiggle (expr ChCode, ChWidthFrac,ChDepthFrac)= + +beginchar(ChCode,ChWidthFrac*18u#,0,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; + +RevShaft(0,4/5,1); +RevShaft(13,3/4,1); +RevShaft(26,2/3,1); +RevShaft(39,3/5,1); +RevShaft(52,1/2,1); +RevShaft(65,2/5,1); +RevShaft(78,1/3,1); +RevShaft(91,1/4,1); +RevShaft(104,1/5,1); + + +RevDashedShaft(1,4/5,1); +RevDashedShaft(14,3/4,1); +RevDashedShaft(27,2/3,1); +RevDashedShaft(40,3/5,1); +RevDashedShaft(53,1/2,1); +RevDashedShaft(66,2/5,1); +RevDashedShaft(79,1/3,1); +RevDashedShaft(92,1/4,1); +RevDashedShaft(105,1/5,1); + + +RevUpperHead(2,4/5,1); +RevUpperHead(15,3/4,1); +RevUpperHead(28,2/3,1); +RevUpperHead(41,3/5,1); +RevUpperHead(54,1/2,1); +RevUpperHead(67,2/5,1); +RevUpperHead(80,1/3,1); +RevUpperHead(93,1/4,1); +RevUpperHead(106,1/5,1); + +RevLowerHead(3,4/5,1); +RevLowerHead(16,3/4,1); +RevLowerHead(29,2/3,1); +RevLowerHead(42,3/5,1); +RevLowerHead(55,1/2,1); +RevLowerHead(68,2/5,1); +RevLowerHead(81,1/3,1); +RevLowerHead(94,1/4,1); +RevLowerHead(107,1/5,1); + +RevUpperTopBarb(4,4/5,1); +RevUpperTopBarb(17,3/4,1); +RevUpperTopBarb(30,2/3,1); +RevUpperTopBarb(43,3/5,1); +RevUpperTopBarb(56,1/2,1); +RevUpperTopBarb(69,2/5,1); +RevUpperTopBarb(82,1/3,1); +RevUpperTopBarb(95,1/4,1); +RevUpperTopBarb(108,1/5,1); + +RevUpperBotBarb(5,4/5,1); +RevUpperBotBarb(18,3/4,1); +RevUpperBotBarb(31,2/3,1); +RevUpperBotBarb(44,3/5,1); +RevUpperBotBarb(57,1/2,1); +RevUpperBotBarb(70,2/5,1); +RevUpperBotBarb(83,1/3,1); +RevUpperBotBarb(96,1/4,1); +RevUpperBotBarb(109,1/5,1); + +RevLowerTopBarb(6,4/5,1); +RevLowerTopBarb(19,3/4,1); +RevLowerTopBarb(32,2/3,1); +RevLowerTopBarb(45,3/5,1); +RevLowerTopBarb(58,1/2,1); +RevLowerTopBarb(71,2/5,1); +RevLowerTopBarb(84,1/3,1); +RevLowerTopBarb(97,1/4,1); +RevLowerTopBarb(110,1/5,1); + + +RevLowerBotBarb(7,4/5,1); +RevLowerBotBarb(20,3/4,1); +RevLowerBotBarb(33,2/3,1); +RevLowerBotBarb(46,3/5,1); +RevLowerBotBarb(59,1/2,1); +RevLowerBotBarb(72,2/5,1); +RevLowerBotBarb(85,1/3,1); +RevLowerBotBarb(98,1/4,1); +RevLowerBotBarb(111,1/5,1); + +RevLowerTopHook(8,4/5,1); +RevLowerTopHook(21,3/4,1); +RevLowerTopHook(34,2/3,1); +RevLowerTopHook(47,3/5,1); +RevLowerTopHook(60,1/2,1); +RevLowerTopHook(73,2/5,1); +RevLowerTopHook(86,1/3,1); +RevLowerTopHook(99,1/4,1); +RevLowerTopHook(112,1/5,1); + + +RevLowerBotHook(9,4/5,1); +RevLowerBotHook(22,3/4,1); +RevLowerBotHook(35,2/3,1); +RevLowerBotHook(48,3/5,1); +RevLowerBotHook(61,1/2,1); +RevLowerBotHook(74,2/5,1); +RevLowerBotHook(87,1/3,1); +RevLowerBotHook(100,1/4,1); +RevLowerBotHook(113,1/5,1); + + +RevUpperTopHook(10,4/5,1); +RevUpperTopHook(23,3/4,1); +RevUpperTopHook(36,2/3,1); +RevUpperTopHook(49,3/5,1); +RevUpperTopHook(62,1/2,1); +RevUpperTopHook(75,2/5,1); +RevUpperTopHook(88,1/3,1); +RevUpperTopHook(101,1/4,1); +RevUpperTopHook(114,1/5,1); + +RevUpperBotHook(11,4/5,1); +RevUpperBotHook(24,3/4,1); +RevUpperBotHook(37,2/3,1); +RevUpperBotHook(50,3/5,1); +RevUpperBotHook(63,1/2,1); +RevUpperBotHook(76,2/5,1); +RevUpperBotHook(89,1/3,1); +RevUpperBotHook(102,1/4,1); +RevUpperBotHook(115,1/5,1); + + +RevSquiggle(12,4/5,1); +RevSquiggle(25,3/4,1); +RevSquiggle(38,2/3,1); +RevSquiggle(51,3/5,1); +RevSquiggle(64,1/2,1); +RevSquiggle(77,2/5,1); +RevSquiggle(90,1/3,1); +RevSquiggle(103,1/4,1); +RevSquiggle(116,1/5,1); + + +RevUpperHead(117,1/6,1); +RevLowerHead(118,1/6,1); +RevUpperTopBarb(119,1/6,1); +RevUpperBotBarb(120,1/6,1); +RevLowerTopBarb(121,1/6,1); +RevLowerBotBarb(122,1/6,1); +RevLowerTopHook(123,1/6,1); +RevLowerBotHook(124,1/6,1); +RevUpperTopHook(125,1/6,1); +RevUpperBotHook(126,1/6,1); +RevSquiggle(127,1/6,1); +bye. + + |