83 lines
2.8 KiB
Plaintext
83 lines
2.8 KiB
Plaintext
% More-or-less general gray font generator
|
|
% See Appendix H of The METAFONTbook for how to use it
|
|
|
|
forsuffixes m = mag,rep:
|
|
if unknown m: m := 1;
|
|
elseif (m<1) or (m<>floor m):
|
|
errmessage "Sorry, " & str m & " must be a positive integer";
|
|
m := 1; fi endfor
|
|
|
|
mg := mag; mag := 1; mode_setup;
|
|
if mg>1: hppp := hppp*mg; vppp := vppp*mg;
|
|
extra_endchar:=
|
|
"if charcode>0:currentpicture:=currentpicture scaled mg;fi"
|
|
& extra_endchar; fi;
|
|
|
|
if picture pix_picture: rep := 1;
|
|
cull pix_picture keeping (1,infinity);
|
|
else: for z=(0,2),(1,0),(2,3),(3,1):
|
|
fill unitsquare shifted z; endfor
|
|
if not boolean lightweight: addto currentpicture also
|
|
currentpicture rotated 90 xscaled -1; fi
|
|
if unknown scale: scale := max(1,round(pixels_per_inch/300)); fi
|
|
pix_wd := pix_ht := 4scale;
|
|
if rep>1: picture pix;
|
|
currentpicture := currentpicture shifted-(1,1); pix := currentpicture;
|
|
for r=1 upto rep-1: addto currentpicture also pix shifted(4r,0); endfor
|
|
cullit; pix := currentpicture;
|
|
for r=1 upto rep-1: addto currentpicture also pix shifted(0,4r); endfor
|
|
unfill unitsquare xscaled 4rep yscaled 2 shifted-(1,1);
|
|
unfill unitsquare yscaled 4rep xscaled 2 shifted-(1,1); cullit; fi
|
|
picture pix_picture; pix_picture := currentpicture scaled scale;
|
|
pix_wd := pix_ht := 4scale*rep; fi
|
|
|
|
def # = *72.27/pixels_per_inch enddef;
|
|
if unknown dotsize: dotsize := 2.5pix_wd/rep; fi
|
|
|
|
beginchar(0,1.2dotsize#,1.2dotsize#,0);
|
|
fill fullcircle scaled dotsize scaled mg; endchar;
|
|
|
|
numeric a[]; newinternal b,k;
|
|
def next_binary =
|
|
k := 0; forever: if k>b: a[incr b] := 0; fi
|
|
exitif a[k]=0; a[k] := 0; k := k+1; endfor
|
|
a[k] := 1 enddef;
|
|
def next_special_binary =
|
|
if a[0]=1: for k=0 upto b: a[k] := 0; endfor a[incr b]
|
|
else: k := 0; forever: exitif a[incr k]=1; endfor
|
|
a[k-1] fi := 1 enddef;
|
|
|
|
def make_char =
|
|
clearit; next_binary;
|
|
for k=0 upto b: if a[k]=1:
|
|
addto currentpicture also pix_picture shifted(0,-k*pix_ht); fi endfor
|
|
charcode := charcode+1; chardp := b*charht;
|
|
scantokens extra_endchar; shipout currentpicture enddef;
|
|
|
|
charwd := pix_wd#; charht := pix_ht#; chardx := pix_wd*mg;
|
|
b := -1;
|
|
|
|
if boolean large_pixels:
|
|
for k=1 upto 7: make_char; charlist k:k+120; endfor
|
|
charcode := 120; b := -1;
|
|
addto pix_picture also pix_picture shifted (chardx,0);
|
|
charwd := 2charwd; chardx := 2chardx;
|
|
for k=1 upto 7: make_char; endfor
|
|
else: for k=1 upto 63: make_char; endfor
|
|
let next_binary = next_special_binary;
|
|
for k=64 upto 120: make_char; endfor
|
|
for k=121,122: charcode := k;
|
|
addto currentpicture also currentpicture shifted (chardx,0);
|
|
charwd := 2charwd; chardx := 2chardx;
|
|
scantokens extra_endchar; shipout currentpicture; endfor
|
|
charlist 120:121:122; fi
|
|
|
|
font_coding_scheme "GFGRAY";
|
|
font_size 8(pix_wd#);
|
|
font_normal_space pix_wd#;
|
|
font_x_height pix_ht#;
|
|
font_quad pix_wd#;
|
|
fontdimen 8: if known rulethickness: rulethickness
|
|
else: pix_wd#/(2rep) fi;
|
|
bye.
|