home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / text / pastex-1.3-7of9.lha / PasTeX / MF / inputs / dc / dxbase.mf < prev    next >
Text File  |  1994-04-12  |  58KB  |  1,488 lines

  1. % This is DXBASE.MF in text format, as of March 24, 1992
  2. %
  3. % DC fonts Version 1.1 (prerelease of EC fonts)
  4. %
  5. %          [ heavily borrowed from the Computer Modern Roman family of
  6. %            fonts by D. E. Knuth ]
  7. %
  8. % Content:
  9. %
  10. %   The base file needed for generation of the DC fonts
  11. %
  12. %
  13. % This is DXBASE.MF in text format, as of May 5, 1986.
  14. % The base file for Computer Modern (a supplement to {\tt plain.mf})
  15.  
  16. dxbase:=1; % when |dcbase| or |dxbase| is known, this file has been input
  17. dcbase:=1;
  18.  
  19. boolean classic_serif;  classic_serif := false;
  20. boolean suppress_i_dot; suppress_i_dot :=false;
  21.  
  22. let dcchar=\; % `|dcchar|' should precede each character
  23. let generate=input; % `|generate|' should follow the parameters
  24.  
  25. autorounding:=0; smoothing:=0; % we do our own rounding
  26. def autorounded = interim autorounding:=2 enddef;
  27.  
  28. newinternal slant,fudge,math_spread,superness,superpull,beak_darkness,ligs;
  29. boolean square_dots,hefty,serifs,
  30.  monospace,variant_g,low_asterisk,math_fitting;
  31.  
  32. boolean dark,dark.dark,skewed,skewed.skewed; % for fast option testing
  33. dark=skewed=false; dark.dark=skewed.skewed=true;
  34.  
  35. vardef Vround primary y = y_:=vround y;
  36.  if y_<min_Vround: min_Vround else: y_ fi enddef;
  37. newinternal y_,min_Vround;
  38.  
  39. vardef serif(suffix $,$$,@)  % serif at |z$| for stroke from |z$$|
  40.   (expr darkness,jut) suffix modifier =
  41.  pickup crisp.nib; numeric bracket_height; pair downward;
  42.  bracket_height=if dark.modifier: 1.5 fi\\ bracket;
  43.  if y$<y$$: y@2=min(y$+bracket_height,y$$);
  44.   top y@1-slab=bot y@0+eps=tiny.bot y$; downward=z$-z$$;
  45.   if y@1>y@2: y@2:=y@1; fi
  46.  else: y@2=max(y$-bracket_height,y$$);
  47.   bot y@1+slab=top y@0-eps=tiny.top y$; downward=z$$-z$;
  48.   if y@1<y@2: y@2:=y@1; fi fi
  49.  y@3=y@2; z@3=whatever[z$,z$$];
  50.  if jut<0: z@2+penoffset downward of currentpen =
  51.    z$l+penoffset downward of pen_[tiny.nib]+whatever*downward;
  52.   lft x@0=lft x@1=tiny.lft x$l+jut;
  53.   if x@3<x@2+eps: x@3:=x@2+eps; fi
  54.  else: z@2-penoffset downward of currentpen =
  55.    z$r-penoffset downward of pen_[tiny.nib]+whatever*downward;
  56.    rt x@0=rt x@1=tiny.rt x$r+jut;
  57.    if x@3>x@2-eps: x@3:=x@2-eps; fi fi
  58.  pair corner; ypart corner=y@1; corner=z@2+whatever*downward;
  59.  filldraw z@2{z$-z$$}
  60.   ...darkness[corner,.5[z@1,z@2] ]{z@1-z@2}
  61.   ...{jut,0}z@1--z@0--(x$,y@0)--z@3--cycle; % the serif
  62.  labels (@1,@2); enddef;
  63.  
  64. def dish_serif(suffix $,$$,@)(expr left_darkness,left_jut)
  65.   (suffix @@)(expr right_darkness,right_jut) suffix modifier =
  66.  serif($,$$,@,left_darkness,-left_jut) modifier;
  67.  serif($,$$,@@,right_darkness,right_jut) modifier;
  68.  if dish>0: pickup tiny.nib; numeric dish_out,dish_in;
  69.   if y$<y$$: dish_out=bot y$; dish_in=dish_out+dish; let rev_=reverse;
  70.   else: dish_out=top y$; dish_in=dish_out-dish; let rev_=relax; fi
  71.   erase fill rev_
  72.    ((x@1,dish_out)..(x$,dish_in){right}..(x@@1,dish_out)--cycle);
  73.  fi enddef;
  74.  
  75. def nodish_serif(suffix $,$$,@)(expr left_darkness,left_jut)
  76.   (suffix @@)(expr right_darkness,right_jut) suffix modifier =
  77.  serif($,$$,@,left_darkness,-left_jut) modifier;
  78.  serif($,$$,@@,right_darkness,right_jut) modifier; enddef;
  79.  
  80. vardef sloped_serif.l(suffix $,$$,@)(expr darkness,jut,drop) =
  81.  pickup crisp.nib; pos@2(slab,90);
  82.  lft x@0=tiny.lft x$l; rt x@1=tiny.rt x$r; top y@1=tiny.top y$r;
  83.  lft x@2=lft x@0-jut; y@2r=y@1-drop;
  84.  y@0=max(y@2l-bracket,y$$)-eps;
  85.  if drop>0: erase fill z@1--top z@1
  86.    --(x@2r,top y@1)--z@2r--cycle; fi % erase excess at top
  87.  filldraw z@1--z@2r--z@2l{right}
  88.   ...darkness[(x@0,y@2l),.5[z@2l,z@0] ]{z@0-z@2l}
  89.   ...{down}z@0--(x@1,y@0)--cycle;  % sloped serif
  90.  labels(@0,@1,@2); enddef;
  91.  
  92. vardef sloped_serif.r(suffix $,$$,@)(expr darkness,jut,drop) =
  93.  pickup crisp.nib; pos@2(slab,-90);
  94.  rt x@0=tiny.rt x$r; lft x@1=tiny.lft x$l; bot y@1=tiny.bot y$l;
  95.  rt x@2=rt x@0+jut; y@2r=y@1+drop;
  96.  y@0=min(y@2l+bracket,y$$)+eps;
  97. if drop>0: erase fill z@1--bot z@1
  98.   --(x@2r,bot y@1)--z@2r--cycle; fi % erase excess at bottom
  99.  filldraw z@1--z@2r--z@2l{left}
  100.   ...darkness[(x@0,y@2l),.5[z@2l,z@0] ]{z@0-z@2l}
  101.   ...{up}z@0--(x@1,y@0)--cycle;  % sloped serif
  102.  labels(@0,@1,@2); enddef;
  103.  
  104. vardef term.l(suffix $,$$)(expr d,t,s)= % ``robust'' sans-serif terminal
  105.  path p_; p_=z$l{d}..tension t..z$$l;
  106.  pair d_; d_=(x$$l-x$l,s*(y$$l-y$l));
  107.  if (abs angle direction 1 of p_ < abs angle d_)<>(x$l<x$$l):
  108.   p_:=z$l{d}..tension atleast t..{d_}z$$l; fi
  109.  p_ enddef;
  110. vardef term.r(suffix $,$$)(expr d,t,s)=
  111.  path p_; p_=z$r{d}..tension t..z$$r;
  112.  pair d_; d_=(x$$r-x$r,s*(y$$r-y$r));
  113.  if (abs angle direction 1 of p_ < abs angle d_)<>(x$r<x$$r):
  114.   p_:=z$r{d}..tension atleast t..{d_}z$$r; fi
  115.  p_ enddef;
  116. def rterm=reverse term enddef;
  117.  
  118. vardef arm(suffix $,$$,@)(expr darkness,jut) =  % arm from |z$| to |z$$|
  119.  x@0=good.x(x$$r-jut); y@0=y$r;
  120.  if serifs: y@1=y$l; z@1=z$$l+whatever*(z$$r-z@0);
  121.   z@2=.5[z$l,z@1];
  122.   filldraw z$$l{z@1-z$$l}...darkness[z@1,.5[z@2,z$$l] ]...z@2
  123.    ---z$l--z$r--z@0--z$$r--cycle; % arm and beak
  124.  else: filldraw z$l--z$r--z@0--z$$r--cycle; fi  % sans-serif arm
  125.  penlabels(@0,@1,@2); enddef;
  126.  
  127. def pi_stroke = pickup fine.nib;
  128.  pos1(hair,0); pos2(vstem,-90); pos3(vstem,-90);
  129.  x1-.5hair=hround -.5hair; x2=2u; x3=w-1.5u;
  130.  y1=x_height-x_height/3.141592653589793; y2=y3; top y3l=x_height;
  131.  filldraw circ_stroke z3e---z2e...{x1-x2,3.14159(y1-y2)}z1e enddef;
  132.  
  133. def eng_stroke(suffix $,@,@@,$$)(expr raise) =
  134.  penpos$$(x@@r-x@@l,0); x$$=x@@; bot y$$=.21h;
  135.  y@@=1/4[bar_height,x_height]+raise; % 1/3
  136.  penpos$''(x$r-x$l,0); x$''=x$;
  137.  y$''=1/8[bar_height,x_height]+raise;
  138.  filldraw stroke z$''e--z$e;  % thicken the lower left stem
  139.  penpos@0(min(rt x$r-lft x$l,thin_join)-fine,180); pickup fine.nib;
  140.  rt x@0l=tiny.rt x$r; y@0=y$'';
  141.  pos@1(vair,90); pos@@'(x@@r-x@@l+tiny,0); z@@'=z@@;
  142.  x@1=.5[rt x@0l,rt x@@'r];
  143.  top y@1r=x_height+oo+raise;
  144.  (x@,y@1l)=whatever[z@1r,z@0l]; x@1l:=x@;
  145.  filldraw stroke z@0e{up}...{right}z@1e
  146.   &{{interim superness:=hein_super; super_arc.e(@1,@@')}};  % arch
  147.  pickup tiny.nib; filldraw stroke z@@e--z$$e;  % right stem
  148.  labels(@0); penlabels(@1); enddef;
  149.  
  150.  
  151. def bulb(suffix $,$$,$$$) =
  152.  z$$$r=z$$r;
  153.  path_.l:=z$l{x$$r-x$r,0}...{0,y$$r-y$r}z$$l;
  154.  filldraw path_.l--z$$r{0,y$r-y$$r}...{x$r-x$$r,0}z$r--cycle; % link
  155.  path_.r:=z$$$l{0,y$r-y$$r}..z$$$r{0,y$$r-y$r}; % near-circle
  156.  filldraw subpath(0,xpart(path_.r intersectiontimes path_.l)) of path_.r
  157.   --z$$r{0,y$$r-y$r}..cycle; % bulb
  158.  enddef;
  159.  
  160. def v_bulb(suffix $,$$)= % |pos$| is known
  161.  y$$+.5curve=x_height+oo; x$$+.5curve=w-u;
  162.  numeric theta; theta=angle(4(x$-x$$),y$-y$$); pos$$(curve,theta+90);
  163.  filldraw z$$l{dir theta}..tension atleast 1 and 1..{down}z$l
  164.   --z$r{up}...{-dir theta}z$$r..cycle;  % bulb
  165.  enddef;
  166.  
  167. def dot(suffix $,$$) =
  168.  filldraw if square_dots: (x$l,y$$l)--(x$r,y$$l)
  169.    --(x$r,y$$r)--(x$l,y$$r)--cycle  % squarish dot
  170.   else: z$l...z$$l...z$r...z$$r...cycle  fi % roundish dot
  171.  enddef;
  172.  
  173. def comma(suffix $,@)(expr dot_size,jut,depth) =
  174.  pickup fine.nib; pos$(dot_size,90);
  175.  if square_dots: pos$'(dot_size,0); z$'=z$; dot($',$);  % squarish dot
  176.   comma_join_:=max(fine.breadth,floor .7dot_size);
  177.   comma_bot_:=max(fine.breadth,floor .5dot_size);
  178.   pos@0(comma_join_,0); pos@1(comma_join_,0);
  179.   pos@2(comma_bot_,0); y@0=y$; y@1=y$l; y@2=y@1-depth;
  180.   x@0r=x@1r=x$'r; rt x@2r=good.x(x$-eps);
  181.   filldraw stroke z@0e--z@1e..z@2e;  % tail
  182.  else: pos@1(vair,90); pos@2(vair,0); pos@3(vair,-45);
  183.   z@1r=z$r; rt x@2r=hround(x$+.5dot_size+jut)+2eps; x@3=x$-.5u;
  184.   y@2=1/3[y@1,y@3]; bot y@3r=vround(y$-.5dot_size-depth);
  185.   y_:=ypart((z@1{right}...z@2{down}...z@3)
  186.    intersectiontimes (z$l{right}..{left}z$r)); if y_<0: y_:=1; fi
  187.   filldraw z$r{left}..subpath (0,y_) of (z$l{right}..{left}z$r)--cycle; % dot
  188.   filldraw stroke z@1e{right}...z@2e{down}...z@3e; fi  % tail
  189.  penlabels(@1,@2,@3); enddef;
  190.  
  191. def ammoc(suffix $,@)(expr dot_size,jut,depth) = % reversed comma
  192.  pickup fine.nib; pos$(dot_size,90);
  193.  if square_dots: pos$'(dot_size,0); z$'=z$; dot($',$);  % squarish dot
  194.   comma_join_:=max(fine.breadth,floor .7dot_size);
  195.   comma_top_:=max(fine.breadth,floor .5dot_size);
  196.   pos@0(comma_join_,0); pos@1(comma_join_,0);
  197.   pos@2(comma_top_,0); y@0=y$; y@1=y$r; y@2=y@1+depth;
  198.   x@0l=x@1l=x$'l; lft x@2l=good.x(x$+eps);
  199.   filldraw stroke z@0e--z@1e..z@2e;  % tail
  200.  else: pos@1(vair,90); pos@2(vair,0); pos@3(vair,-45);
  201.   z@1l=z$l; lft x@2l=hround(x$-.5dot_size