input font1base proofing:=0; % :=1 for pts/labels, :=.5 for smoke proofs, :=0 for fontmaking! fontmaking:=1; hppp:=722.909/72.27; vppp:=hppp; designsize:=29; if known Xerox_world: font_family "CLASS"; coding_scheme "ASCII LETTERS ONLY"; fi % A by Ann Lasko-Harvill vardef char.A= setwidth .6em; pos1(1.3 thickwidth,45); pos2(1.5 thickwidth,0); x1=.3em; y1=capheight; x2l=.5em; y2=0; pos3(1.3thinwidth,75); pos4(thinwidth,65); x3=.1em; y3=.55xheight; x4=.4em; y4=y3; pos5(thinwidth,0); pos6(thinwidth,-50); x5=.1em; y5=0; x6=x1; y6l=y1l; stroke(1,2,.75,.3,.1); stroke(3,4,.5,.23,.1); stroke(5,6,.2,.2,.1); labelpos(1,2,3,4,5,6); enddef; % B by William Burley vardef char.B = setwidth .57em; pos1(thinwidth,90); pos2(thinwidth,90); pos3(.75[thinwidth,thickwidth],0); pos4(thinwidth,-90); pos5(thinwidth,270); pos6(.75[thinwidth,thickwidth],180); pos7(thinwidth,90); pos8(thinwidth,90); pos9(thickwidth,0); pos10(thickwidth,0); pos11(thinwidth,-90); x1=x10l=x9l=x8=.17w; x2=x4=.48w; x5=x7=.52w; x11=x9r; x3=x4+.45(y2-y4); x6=x7+.45(y5-y7); y8l=y7l=0; y1r=y2r=capheight; y9=y8r; y10=y1l; y11=y4=y5=.52capheight; y3=.5[y4,y2]; y6=.5[y7,y5]; dz2=(1,0); dz4=(-1,0); dz5=(-1,0); dz7=(1,0); stroke(1,2,0,0,0); stroke(9,10,0,0,0); stroke(8,7,0,0,0); stroke(5,11,0,0,0); curve(2,3,4); curve(7,6,5); labelpos(1,2,3,4,5,6,7,8,9,10,11); enddef; % C by Arthur Samuel vardef char.C = setwidth .7em; % do this first; it sets the character width pos1(thickwidth,180); pos2(thickwidth,145); pos3(thinwidth,90); pos4(thinwidth,45); pos5(.7thickwidth,0); pos6(thickwidth,0); pos7(thickwidth,45); pos8(thinwidth,90); pos9(thinwidth,135); pos10(.7thickwidth,180); z1=(.15w+.5thickwidth,.5capheight); dz1=(0,1); % z2=(.22w+.5thickwidth,.83capheight); x2=.72[x3,x1]; y2=.72[y1,y3]; z3=(.56w,capheight); dz3=(1,0); z4=(.650[x3,x5],.300[y3,y5]); z5=(.83w,.8capheight); dz5=(1,-2); z6=(.15w+.5thickwidth,.5capheight); dz6=(0,-1); % z7=(.22w+.5thickwidth,.17capheight); x7=.72[x8,x1]; y7=.72[y1,y8]; z8=(.56w,0); dz8=(1,0); z9=(.650[x8,x10],.300[y8,y10]); z10=(.83w,.2capheight); curve(1,2,3); curve(3,4,5); curve(6,7,8); curve(8,9,10); labelpos(1,2,3,4,5,6,7,8,9,10); enddef; % D by Dan Mills vardef char.D = begingroup % charcd := 'D; save glyphwidth,lsb,rsb,cuthru,baseline; numeric glyphwidth,lsb,rsb,cuthrubaseline; baseline=0; glyphwidth = .5em; lsb = .2glyphwidth; rsb = .1glyphwidth; cuthru = .02xheight; setwidth( lsb+glyphwidth+rsb ); % positions: % 1 is special pos2(.55[thinwidth,thickwidth],45); pos3(thickwidth,0); pos4(.5[thinwidth,thickwidth],-45); % 5 is special % coordinates: % 1 is special x2 = lsb + .7glyphwidth; y2 = .92capheight; x3r = lsb + glyphwidth; y3 = .55capheight; x4 = lsb + .7glyphwidth; y4 = .15capheight; % 5 is special % specials: x1r = lsb; y1r = capheight; x1l = x1r + .85thickwidth; y1l = y1r - thinwidth; z1 = .5[z1l,z1r]; x5r = lsb; y5r = baseline; x5l = x1r + .85thickwidth; y5l = y5r + thinwidth; z5 = .5[z5l,z5r]; % draw straights: stroke(1,5,.45,.2,.2); % add slopes for curves: dz1 = (1,0); dz3 = (0,-1); dz5 = (-1,0); % draw curves: curve(1,2,3); curve(3,4,5); labelpos(1,2,3,4,5); endgroup; enddef; % E by Joey Tuttle vardef char.E = setwidth .63em; pos1(1.5thinwidth,45); pos2(1.25thinwidth,135); pos3(1.4thinwidth,90); pos4(.9thinwidth,90); pos5(1.5thinwidth,-45); pos6(1.25thinwidth,-135); pos7(thickwidth,0); pos8(thickwidth,0); x1=w-.1em; y1r=capheight; x2=.1em; % fixed points y2r=y1r; x3=.95[x7,x1l]; y3=.55[y6,y2]; x4=x7; y4=y3; x5=x1; x6=x2; y5r=0; y6r=y5r; z7l=z6; z8l=z2; stroke(1,2,.1,.2,0); stroke(3,4,.1,.2,.2); stroke(5,6,.1,.2,0); stroke(7,8,.5,.15,.05); labelpos(1,2,3,4,5,6,7,8); enddef; % F by Pavel Curtis vardef char.F = setwidth .6em; numeric len; % clear this value for redefinition pos0(thickwidth, 0); pos1(1.1thickwidth, 0); pos2(len, 10); % Length will be set below pos3(thinwidth, 90); pos4(1.5thinwidth, 120); pos5(thinwidth, 90); pos6(1.5thinwidth, 90); x1.l = 0.1em; % Leave 0.1em sidebars x4.r = w - 0.1em; z0.r = (x1.r,xheight); y1 = capheight; x2.l = x1.l; x2.r = x1.r; % This determines len, above y2 = 0; z3.r = (x1,capheight); y4.r = capheight; z5 = (x1,y6); z6.r = (.9[x1.r, x4.r], xheight); % Vertical stroke dz0 = (0,1); stroke(0, 1, .8, .15, 0); stroke(2, 0, .2, .15, 0); % Top stroke stroke(3, 4, .8, .38, 0); % Middle stroke stroke(5, 6, .8, .25, .25); labelpos(0, 1, 2, 3, 4, 5, 6); enddef; % G by Jean-Luc Bonnetain vardef char.G = setwidth .75em; pos1(.5[thinwidth,thickwidth],10); % upper righmost pt of curve pos2(.95[thinwidth,thickwidth],45); % intermediary pt for curve pos3(1.3[thinwidth,thickwidth],90); % uppermost pt pos4(1.3[thinwidth,thickwidth],135); % intermediary pt for curve pos5(1.7[thinwidth,thickwidth],180); % lefmost pt pos6(1.3[thinwidth,thickwidth],225); % intermediary pt for curve pos7(1.3[thinwidth,thickwidth],270); % lowest pt pos8(1.1[thinwidth,thickwidth],270); % intermediary pt for curve pos9(.6thinwidth/(thickwidth-thinwidth)[thinwidth,thickwidth],270); % lower righmost pt of curve pos10(.5[thinwidth,thickwidth],10);% junction pt for 2 strokes pos11(.5[thinwidth,thickwidth],0); % lowest pt vertical stroke pos12(.5[thinwidth,thickwidth],90); pos13(.5[thinwidth,thickwidth],80); x1r = x10r = x12 = w - .1em ; y1 = 8/15[y3,y5]; x2 = .707[x3,x1]; y2 = .707[y1,y3]; x3 = x7; y3r = 1.05capheight; x4 = x6; y4 = .707[y5,y3]; x5r = .1em ; y5 = 1/2capheight; x6 = .707[x7,x5] ; y6 = .707[y5,y7]; x7 = 1/2[x5,x1]; y7r = -.05capheight; x8 = .53[x7,x1]; y8 = .85[y91,y7]; % .707 --> .5 y91 = 3/5[y7,y5]; x9 = x1l + .02w; y9 = 11/16y91; y10 = y7r; x11 = x10 ; y11 = y12 = y13 = 7/8y5; x13 = x12 -.25w; dz1 = (0,1); dz3 = (-1,0); dz5 = (0,-1); dz7 = (1,0); curve(1,2,3); curve(3,4,5); curve(5,6,7); curve(7,8,9); stroke(10,11,0,0,0); stroke(12,13,0,0,0); labelpos(1,2,3,4,5,6,7,8,9,10,11,12,13); enddef; % H by John Hershberger vardef char.H = % The capital H is just not as nice as the small j. It is not very interesting % to the eye, and is in fact rather blocky and ugly in some of its % incarnations. Sigh. lwidth := thickwidth; % Left and right verticals are different rwidth := .5[thinwidth,thickwidth]; % ...widths barheight := .8[ xheight, .5capheight]; % Bar is a bit above center setwidth .68em; % % Left vertical stroke pos1( 1.1lwidth, 10 ); % To match top of U pos2( lwidth, 10 ); % and bottom, sort of x1l = .1em; y1=capheight; x2=x1; y2=0; % Right vertical stroke pos3( 1.1rwidth, 10 ); % Different width than lvertical pos4( rwidth, 10 ); x3r = w-.1em; y3=capheight; x4=x3; y4=0; % Horizontal stroke x5=x1; y5=barheight; x6=x3; y6= .2[barheight, xheight]; % Gets steeper for bx. May not be right. pos5(1.25thinwidth, 70 ); % Thicker thin stroke! pos6(1.25thinwidth, 80 ); % getting no wider % Now draw it stroke( 1, 2, .2, .05, .05 ); % Slight taper below the tops of both verticals stroke( 3, 4, .2, .05, .05 ); stroke( 5, 6, .5, .4, .4 ); % Noticeable taper in the horizontal labelpos(1,2,3,4,5,6); enddef; % I by Nori Tokusue vardef char.I = setwidth .5em; % temporary value pos1(1.4thickwidth,5); pos2(thickwidth,0); pos3(1.4thickwidth,2.5); % temporary value x1=x2=x3; % straight I z3=(.5w,0); % the botom of 'I' is at the base line % midway between left and right ends. y1=capheight; y2=.5capheight; % OK now draw 'I' stroke(1,2,.1,.24,.24); % temporary value. stroke(2,3,.9,.24,.24); % temporary value (bottom half) labelpos(1,2,3); enddef; % J by Lynn Ruggles vardef char.J = % character 'J' setwidth .5em; % width is 1/2 em pos1(thickwidth,0); z1=(.2w,1/4capheight); dz1=(0,-1); pos2(.7thickwidth,90); z2=(.5[x1,x3],.01capheight); dz2=(1,0); pos3(thickwidth,175); z3=(.75w,y1); dz3=(0,1); pos4(thickwidth,180); z4=(x3,capheight); curve (1,2,3); stroke (3,4,.5,.01,.01); labelpos(1,2,3,4,5); enddef; % K by Dikran Karagueuzian vardef char.K = setwidth .65em; pos1(1.1thickwidth,0); % the pen starts out slightly thick pos2(1.1thickwidth,0); % the pen finishes with start thickness pos3(0.8thinwidth,-75); pos4(1.4thinwidth,0); pos5(1.2thickwidth,0); x1l=x2l=.1em; x3r=x1r-.1thickwidth; %l edge of K x4r=x5r=w-.1em; %r edges of K y1=y4=capheight; %1 and 4 fully defined y2=y5=0; y3r=.5[y2,y1]; z7=.33[z3,z4]; pos7(0.9thickwidth,angle(z4-z3)); stroke(1,2,.4,.175,.085); stroke(4,3,.3,.175,.085); stroke(5,7,.3,.175,.085); labelpos(1,2,3,4,5,7); % all positions should be listed enddef; % alternate K by Jim Bratnober vardef char.?= setwidth .8em; pos1(1.1thickwidth,10); pos2(thickwidth,10); pos3(1.4thickwidth,90); pos4(1.6thickwidth,190); pos5(1.1thickwidth,45); pos6(1.3thickwidth,10); z1=(.125w+.56thickwidth,capheight); z2=(x1-.06thickwidth,0); z3=.3[z2,z1]; z4=(x6-.7thickwidth,capheight); z5=.5[z3,z4]; z6=(.875w-.7thickwidth,0); stroke(1,2,.2,.05,.05); stroke(4,3,.1,.1,.2); stroke(6,5,.1,.1,.1); labelpos(1,2,3,4,5,6); enddef; % L by Bruce Leban vardef char.L = setwidth 0.6em; bottomslant := 5; % how much slant at bottom of vertical stroke x1l = 0.1em; % left margin y1 = capheight; pos1 (1.15thickwidth, 10); % semi-serif at top x2 = x1; % more or less straight down y2 = 0; pos2 (1.05thickwidth, bottomslant); dz3 = (cosd bottomslant, sind bottomslant); z3l = 0.5[z2,z2r]; % bottom of strokes align pos3 (thinwidth,90); x4 = w-0.06em; % right margin y4l = 0; % bottom of stroke is at baseline pos4 (thickwidth, 85); % grows to thickwidth stroke (1,2,.2,.15,.05); % slight taper on vertical stroke stroke (3,4,.8,0,1-thinwidth/thickwidth); % extreme taper on horizontal % should change to compute based on thick-thin?? labelpos (1,2,3,4); enddef; % M by Kwang-Chun Park vardef char.M = %draw letter "M" setwidth 0.7em; pos1(thinwidth,0); pos2(thinwidth,10); pos3(1.1thickwidth,0); pos4(1.1thickwidth,0); pos5(thinwidth,0); pos6(thinwidth,0); pos7(1.1thickwidth,0); pos8(1.1thickwidth,10); y1=capheight; x1=x2; z2l=(0.1em,0); y3=capheight; z4=(0.5w,0); x3l=x1; y6=capheight; x5l=x4; y5=0; x6r=x7; x7r=w - 0.1em; y7=capheight; y8=0; x8=x7; stroke(1,2,0.3,0,0.1); stroke(3,4,0.8,0,0.1); stroke(5,6,0.2,0.1,0); stroke(7,8,0.3,0.1,0); labelpos(1,2,3,4,5,6,7,8); % end of the fourth brush enddef; % N by Dave Siegel vardef char.N = begingroup save side_right, side_left, charwidth, slidex; side_right = .07em; %left sidebearing. side_left = .1em; %right sidebearing. charwidth = .5em; %width of character. slidex = .6thinwidth; setwidth side_left + charwidth + side_right; %DRAW THE LEFT VERTICAL STEM pos1(1.05thickwidth,10); pos2(1.15thickwidth,10); x1l = side_left; y1 = capheight; x2r = x1r; y2 = 0; stroke(1,2,0.7,0.1,0.1); %DRAW THE DIAGONAL STROKE pos3(1.05thickwidth,20); x3r = side_left + charwidth; y3 = y2; stroke(1,3,.5,0.1,0.1); %DRAW THE RIGHT VERTICAL STEM pos4(1.2thickwidth,20); x4l = x3l; y4 = y1; stroke(4,3,.5,0.1,0.1); %MARK LABELS labelpos(1,2,3,4); endgroup enddef; % O by Bruce Fleischer vardef char.O = % the O is defined by four points, at roughly the top, bottom, left and right. %The positions of the thick and thin points are controlled by the pen widths at %these points, and by the angles. The simplest case has the pens pointing %vertically at the top and bot, and horizontally at the sides. To slant the %counter to the left a little, we tilt the top and bottom pens clockwise, and %the side pens ccw. This will also tend to tilt the outside shape of the 'O' to %right. To make it look more upright, we slide the top point a bit to the left, %and the bottom point a bit to the right. setwidth .8em; %fairly wide - make it nice and round ang:=80; topwidth := thinwidth; sidewidth := thickwidth; topedge := .03 capheight; sidebar := .07em; % go clockwise -- r=outside, l=inside % z1=top,z2=r,z3=b,z4=l pos1(topwidth,ang); pos2(sidewidth,90-ang); pos3(topwidth,ang-180); pos4(sidewidth,-90-ang); y1r = capheight + topedge; y3r = -topedge; x2r = w - sidebar; x4r = sidebar; x1 = .48w; x3 = w-x1; y2 = .5 capheight; y4 = capheight-y2; dz1=-dz3=z2-z4; curve(1,2,3); curve(3,4,1); labelpos(1,2,3,4); enddef; % P by Ed Williams vardef char.P = setwidth .65em; pos1(thickwidth,0); pos2(1.05thickwidth,10); pos3(thinwidth,-90); pos4(.3[thinwidth,thickwidth],-105); pos5(.8[thinwidth, thickwidth],-140); pos6(thickwidth,180); pos7(.5[thickwidth,thinwidth],150); pos8(.2[thinwidth,thickwidth],115); pos9(thinwidth,90); z1l=(.1w,capheight); y3l=capheight; x3=x2r=x1r;y2=0;dz3=(1,.-.05); z9=(x3+.01em,.55xheight);dz9=(-1,-0.05); x6l=w-.15em; y6=.95xheight;dz6=(0,-1); x4=.5[x3,x6];y4l=.99capheight; x8=.5[x6,x9];y8=.05[y9,y6]; x5=.7[x4,x6]; y5=.3[y4,y6]; x7=.7[x8,x6]; y7=.3[y8,y6]; stroke(1,2,.1,.1,0); stroke(3,4,.8,0,.1); curve(4,5,6); curve(6,7,8); stroke(8,9,.2,0,.05); labelpos(1,2,3,4,5,6,7,8,9); enddef; % Q by Neenie Billawala vardef char.Q= setwidth.8em; %numeric a; %numeric b; pos1(.85thinwidth,90-10 ); dz1=(-1,0); pos2(.5[thinwidth,thickwidth],135+10 ); pos3(1.13thickwidth,180+10 ); dz3=(0,-1); pos4(.5[thickwidth,thinwidth],225-10 ); pos5(.85thinwidth,270-10 ); dz5=(1,0); pos6(.5[thinwidth,thickwidth],315+10 ); pos7(1.13thickwidth,0+10 ); dz7=(0,1); pos8(.5[thickwidth,thinwidth],45-10 ); x1=.5w; y1=capheight; x2=.71[x1,x3]; y2=.71[y3,y1]; x3r=.08w; y3=.49capheight; x4=.71[x3,x5]; y4=.71[y5,y3]; x5=w-x1; y5=0; x6=.71[x5,x7]; y6=.71[y7,y5]; x7=w-x3; y7=capheight-y3; x8=.71[x7,x1]; y8=.71[y1,y7]; curve(1,3,5); curve(5,7,1); %curve(1,2,3); %curve(3,4,5); %curve(5,6,7); %curve(7,8,1); labelpos(1,2,3,4,5,6,7,8); pos9(.7thickwidth,60); pos10(.85thinwidth,90); %dz10=(z12-z9); pos11(.8[thinwidth,thickwidth],60); pos12(1.05thickwidth,60); pos13(thickwidth,60); x9l=x3l; y9r=y5r; z10=(x5-.05w,y5); x11r=.5[x12,x10]; y11l=.5[y12l,y10l]; x12r=.97w; y12r=y10l; z12=z13r; %curve(9,10,11); %stroke(10,13,.9,.1,0); dz9=(1,.4); %dz10=(1,0); dz12=(1,.7); curve(9,10,12); labelpos(9,10,11,12,13); enddef; % R by Renata Byl vardef char.R = setwidth .75em; pos1(1.1thickwidth,10); pos2(1.05thickwidth,10); x1=.15em; y1=capheight; x2=.15em; y2=0; pos3(thickwidth,90); pos4(thickwidth,75); pos5(.5[thickwidth,thinwidth],40); pos6(.5[thickwidth,thinwidth],0); pos7(.5[thickwidth,thinwidth],320); pos8(thinwidth,285); pos9(thinwidth,270); x3r=x9=x1; y3r=capheight; x4r=x8r=.3em; y4=.95capheight; dz4=(1,0); x5=.71[x4,x6]; y5=.71[y6,y4]; dz5=(1,-1); x6r=.45em; y6=.80capheight; dz6=(0,-1); x7=.71[x8,x6]; y7=.71[y6,y8]; dz7=(-1,-1); y8=.60capheight; dz8=(-1,0); y9=.58capheight; pos10(1.05thinwidth,45); pos11(1.2thickwidth,10); x10=.2em; y10=.59capheight; x11=.47em; y11=.02capheight; stroke(1,2,.1,.2,0); stroke(3,4,0,0,0); curve(4,5,6); curve(6,7,8); stroke(8,9,0,0,0); stroke(10,11,.9,0,.2); labelpos(1,2,3,4,5,6,7,8,9,10,11); enddef; % S by pinch-hitter Joey Tuttle % % % Don, % If you look at this, please don't pay too much attention to it... % As it turns out, after dredging up a copy of font1base, the version % Metafont available (-87) doesn't execute test. functions -- so I have % been totally unable to look at the S and I've no idea whether my % "tricks" will make anything other than a big mess!! % % I'll try to get back in tomorrow to see if someone has fixed things up. % % Joey %1984-5-26 21:50:00 % %1984-5-27 20:30:00 -- Situation unchanged. We'll keep trying.... %1984-5-29 00:20:00 -- Finally - as I expected, it was a mess... However, % I'll at least get something that I'm not too ashamed of. % %1984-5-29 01:05:00 -- OK, it's not perfect (especially the bold) but % I'm happy. (and It's too late) % vardef char.S = setwidth .56em; x2=.5[x4r,x5r]; y1=.54[0,capheight]; % the center of S x3=x1=w/2; % top and bottom also at center y3r=1.05capheight; y2l=-.05capheight; % centers slightly extended x4l=.1w; y4=.6[y1,0]; % lower left x5r=.9w; y5=.6[y1,capheight]; % upper right x6l=x5r; y6=y4; % center of lower curve x7r=x4; y7=y5; % center of top curve % This character goes 5..3..7..1..6..2..4 (top to bottom) pos5(1.3thinwidth,45); pos3(.7thinwidth,90); pos7(1.2thinwidth,180); pos1(1.1thickwidth,270); pos6(1.2thinwidth,180); pos2(.7thinwidth,90); pos4(1.3thinwidth,45); dz3=(-1,0);dz7=(0,-1); dz1=(3,-2); % this one is important! dz6=(0,-1);dz2=(-1,0); curve(5,3,7); curve(7,1,6); curve(6,2,4); labelpos(1,2,3,4,5,6,7); enddef; % T by Tuan Pham vardef char.T= setwidth .75em; pos1(1.5thickwidth,45); pos2(1.2thickwidth,60); pos3(1.2thickwidth,0); pos4(1.1thickwidth,10); x1=0.125em; x2=w-0.125em; y1=y2=capheight-0.5thickwidth; x3=x4=0.5w; y3=capheight-0.5thickwidth; y4=0; stroke (1,2,.2,.3,.2); stroke (3,4,.6,.3,.2); labelpos(1,2,3,4); enddef; % alternate T by Theresa-Marie Rhyne vardef char.exclamation= charcode:=ASCII"!"; setwidth .75em; pos1(1.5thickwidth,10); pos2(1.1thickwidth,45); pos3(1.1thickwidth,45); pos4(1.1thickwidth,45); z1=(.5w,0);%y1=0; y2r=capheight; x1r=x2r; y3r=y4r=capheight; x3r=w-x4r=.1em; stroke(1,2,.2,.05,.05); stroke(3,4,.2,.05,.05); labelpos(1,2,3,4); enddef; % U by Don Knuth vardef char.U = setwidth .75em; pos1(1.1thickwidth,10); pos2(thickwidth,10); pos3(thickwidth,40); pos4(.5[thickwidth,thinwidth],75); pos5(.9[thickwidth,thinwidth],130); pos6(thinwidth,180); pos7(1.1thinwidth,190); x1l=.1em; x7l=w-.1em; y1=y7=capheight; x2=x1; y2=.3capheight; dz2=(0,-1); x3=.75[x4,x2]; y3=.75[y2,y4]; x4r=.5[x2r,x6r]; y4l=-.05capheight; dz4=(1,0); x5=.71[x4,x6]; y5=.71[y6,y4]; x6=x7; y6=1/3capheight; dz6=(0,1); stroke(1,2,.2,.05,.05); curve(2,3,4); curve(4,5,6); stroke(6,7,.8,.05,.05); labelpos(1,2,3,4,5,6,7); enddef; % V by Kanchi Gopinath vardef char.V= setwidth .75em; pos1(1.6thickwidth,10); pos2(1.5thickwidth,65); pos3(thinwidth,0); pos4(1.1thinwidth,10); x1l=.1em; x4l=w-.1em; y1=y4=capheight; y2l=0; x2l=w/2; x3l=x2l; y3l=y2l; stroke(1,2,.1,.4,.1); stroke(4,3,.1,.4,.1); stroke(2,3,0,0,0); labelpos(1,2,3,4); enddef; % W by Stan Osborne vardef char.W = setwidth .9em; % set up our char width and variables pos1(2thickwidth,-30); % position upper left vector vec(1) y1 = capheight; % don't set height as tall as an "h" x1l = .02w; % all the way to the left pos2(1.0thickwidth,-4); % position lower left vector vec(2) z2 = (0.325w,0); % at baseline, center is at .3w stroke(1,2,.3,.2,.1); % left most stroke pos3(.5[2thickwidth,2thinwidth],-88);% position middle vector vec(3) z3l = (0.51w,1.07xheight); % in the middle, top as high as "x" stroke(2,3,.4,.2,0); % center left stroke pos4(.5[2thickwidth,2thinwidth],92);% position other middle vector vec(4) z4r = z3l; % vec(4) is a 180 of vec(3) z4l = z3r; % pos5(1.0thickwidth,0); % position lower left vector vec(5) z5 = (0.70w,0); % at baseline, ceter is at .7w stroke(4,5,.6,0,.1); % center right stroke pos6(1.5thickwidth,30); % position upper right vector vec(6) y6 = capheight; % don't set height as tall as an "h" x6r = 1.0w; % all the way to the right stroke(5,6,.7,.1,.2); % right most stroke labelpos(1,2,3,4,5,6); % label the vectors (1,2,3,4,5, and 6) enddef; % X by Alan Spragens vardef char.X = setwidth .8em; pos1(1.5 thickwidth,10); pos2(1.8 thickwidth,10); pos3(1.5 thinwidth,10); pos4(1.8 thinwidth,10); y1=capheight; x1l=.1em; x4r=w-.1em; y4=capheight; y3=0; y2=0; x3=x1; x2=x4; stroke(1,2,.1,.1,.3); stroke(3,4,.9,.2,0); labelpos(1,2,3,4); enddef; % Y by Arnie Olds vardef char.Y = setwidth .75em; pos1(1.2thickwidth,10); pos2(1.1thickwidth,10); pos3(2thinwidth,10); pos4(thinwidth,-5); pos5(1.5thickwidth,10); x2=.5w; x1r=x2r; z4r=z2r; x3r=w-.05em; x5l=.03em; y1=0; y2r=.75xheight; y3=y5=capheight; stroke(1,2,.3,.1,0); stroke(3,4,.1,.1,0); stroke(5,2,.1,.1,0); labelpos(1,2,3,4,5); enddef; % Z by Malcolm Brown % This `Z' uses the Helvetica Z as its basis. % It also departs from the Helvetica design in the % hopes of creating a more interesting letter. % vardef char.Z = setwidth .8em; % same proportion as in Helvetica pos1(1.5thickwidth,75); % stroke 1 goes from 1 to 2 pos2(.6thickwidth,90); % (top horizontal stroke) % pos3(1.5thickwidth,-10); % stroke 2 goes from 3 to 4 pos4(1.5thickwidth,-10); % (diagonal stroke) % pos5(.65thickwidth,90); % stroke 3 goes from 5 to 6 pos6(1.5thickwidth,75); % (bottom horizontal) % x1=.125w; % determing position 1 y1r = capheight; % x2=w - x1; % determines position 2 y2r = capheight; % x3r=x2l; % positions 2 and 3 share a point y3r=y2l; % x4l=x5r; % positions 4 and 5 share a point y4l=y5r; % x5=.5x1; % determines 5 y5l=0; % x6=w-x5; % determines 6 y6l=0; % % stroke(1,2,.3,.6,0); % top horizontal stroke stroke(5,6,.7,0,.6); % bottom horizontal stroke stroke(3,4,0,0,0); % diagonal stroke % labelpos(1,2,3,4,5,6); enddef; % a by Ann Lasko-Harvill vardef char.a=setwidth .5em;% NOTE TO GRADER: THIS ISN'T AS pos1(1.1thickwidth,10);% FINISHED AS I WOULD LIKE IT. x1l=.12em; y1l=.75xheight; dz1=(0.2,1); pos2(.5[1.1thickwidth,.75thinwidth],-30); x2=.24[x1,x3]; y2=.76[y1,y3]; % dz2=(1,1); pos3(.75thinwidth,-90); x3=.27em; y3=xheight; dz3=(1,0); pos4(.25[thickwidth,.75thinwidth],-155); x4l=.75[x3l,x5l]; y4l=.75[y5l,y3l]; dz4=(1,-1); pos5(thickwidth,-180); x5=.42em; y5=y1; dz5=(0,-1); pos6(thickwidth,-180); x6=x5; y6=y7l; dz6=(0,-1); pos7(1.2thickwidth,-135); x7l=x6l; y7r=0; dz7=(1,-1); pos8(1.5thickwidth,-135); x8r=x6l; y8l=y6; dz8=(1,0); pos9(thinwidth,-90); x9=x5r+1; y9=.65xheight; dz9=(-1,-.05); pos10(.5[thickwidth,thinwidth],-45); x10=.2[x11,x9]; y10=.2[y9,y11]; dz10=(-1,-1); pos11(thickwidth,0); x11=.5[x1l,x1]; y11=.45[y10,y12]; dz11=(0,-1); pos12(.35[thickwidth, thinwidth],55); x12=.4[x11,x13]; y12l=-.01; dz12=(1,0); pos13(thinwidth,90); x13=x6r+1; y13=y6; dz13=(1,1); curve(1,2,3);curve(3,4,5); stroke(5,6,.5,0,.05);curve(6,7,8); curve(9,10,11);curve(11,12,13); labelpos(1,2,3,4,5,13,6,7,8,9,10,11,12); enddef; % b by Dave Siegel vardef char.b = begingroup save side_right, side_left, charwidth, slidex; save zero_width, thinner_width, half_width, corner_width; side_right = .07em; %left sidebearing. side_left = .1em; %right sidebearing. charwidth = .4em; %width of character. zero_width = .01thinwidth; thinner_width = .6thinwidth; half_width = .9thinwidth; corner_width = .6[thinwidth,thickwidth]; slidex = .6thinwidth; setwidth side_left + charwidth + side_right; %DEFINE HEADINGS AT ALL POINTS ON CURVES dz3 = (0,-1); dz4 = (1,-1); dz5 = (1,0); dz6 = (1,1); dz7 = (0,1); dz8 = (-1,1); dz9 = (-1,0); dz10 = (-1,-1); dz11 = (0,-1); %DEFINE PEN RELATIONSHIPS FOR BOTH STROKES pos1(1.5thickwidth,45); pos2(1.05thickwidth,10); pos3(zero_width,0); pos4(thinner_width,45); pos5(.9half_width,90); pos6(corner_width,150); pos7(thickwidth,180); pos8(.9corner_width,225); pos9(half_width,270); pos10(thinner_width,315); pos11(zero_width,0); %DEFINE COORDINATES x1r = x2r; y1 = hheight; x2l = side_left; y2 = 0; x3 = x2 + slidex + .2slidex;y3 = .32xheight; x4 = .22[x3,x5]; y4 = .28[y5,y3]; x5l = .4[x3,x7]; y5 = y2r; x6 = .65[x5,x7]; y6 = .18[y5,y7]; x7r = charwidth + slidex; y7 = .5[y5,y9]; x8 = .65[x9,x7]; y8 = .18[y9,y7]; x9 = .45[x3,x7]; y9 = .98[0,xheight]; x10 = .3[x11,x9]; y10 = .2[y9,y11]; x11 = x3; y11 = .5xheight; %DRAW STEM stroke(1,2,0.1,0.2,0); %DRAW BOWL curve(3,4,5); curve(5,6,7); curve(7,8,9); curve(9,10,11); curve(11,3,3); %MARK LABELS labelpos(1,2,3,4,5,6,7,8,9,10,11); endgroup enddef; % c by Alan Spragens vardef char.c = setwidth .5em; pos1(thickwidth,90); pos2(.8[thickwidth,thinwidth],90); pos3(1.1 thickwidth,180); pos4(.2[thickwidth,thinwidth],220); pos5(1.1thickwidth,260); z1=(w-.075em,.85 xheight); z2=(.5w,xheight); y3=.5 xheight; x3l=.1em; x4=.5w; y4=0; x5=w-.05em; y5=.2xheight; dz2=(-1,0);dz3=(0,-1);dz4=(1,0); curve(1,2,3);curve(3,4,5); labelpos(1,2,3,4,5); enddef; % d by Jean-Luc Bonnetain vardef char.d = setwidth .6em; pos1(1.5[thinwidth,thickwidth],45); % top of stem pos2(.7[thinwidth,thickwidth],10); % bottom of stem pos3(.9(thinwidth/(thickwidth - thinwidth))[thinwidth,thickwidth],90); % junction upper part of bowl / stem % this is a trick here, to make sure that the junction does not % become too black with bold versions. % but actually the formula gives 1.9thinwidth in all cases! % in the normal version, thindwidth/(thickwidth-thinwidth) = 11/4 % while in the bolder version the value is 14/10 < 11/4 % this way the width of the curve when it joins the stem will % be relatively smaller in bold version (less far of the way from % thinwidth and thickwidth). % there is a small problem due to the digitization process here: % in the small size / 3 together test, the bold extended version % has its stem widened just after the upper junction of the bowl % and the stem, which creates an ugly white recess (this does not % appear in the large size tests). Since this depends on the size % on the letter and on the digitizing algorithm, a solution for % one size will look terrible at another one, so i haven't tried % to fix that problem (i don't know what will happen in the actual % size that will be used for typesetting text with font1(version % -1000) ). pos4(.8[thinwidth,thickwidth],90); % uppermost pt upper part bowl pos5(thickwidth,180); % leftmost pt of bowl pos6(.8[thinwidth,thickwidth],270); % lowermost pt bottom part bowl pos7(.4(thinwidth/(thickwidth - thinwidth))[thinwidth,thickwidth],270); % junction lower part of bowl / stem x1r = x2r ; y1 = hheight; z2r = (w - .1em , 0); x3 = x2l + .05w; y3 = 7.55/10y4 ; x4 = x6 = 1/2[x2,x5] ; y4 = xheight; x5r = .1em; y5 = 1/2y4; y6r = -.02capheight; x7 = x2l + .02w; y7 = 3/10y4; dz3 = (-1,50); % avoids possible loop at z3l dz4 = (-1,0); dz5 = (0,-1); dz6 = (1,0); stroke(1,2,.1,.2,0); curve(3,4,5); curve(5,6,7); labelpos(1,2,3,4,5,6,7); enddef; % e by Dan Mills vardef char.e = begingroup % charcd := 'e; save glyphwidth,lsb,rsb,cuthru; numeric glyphwidth,lsb,rsb,cuthru; glyphwidth = .45em; lsb = rsb = .2glyphwidth; cuthru = .02xheight; setwidth( lsb+glyphwidth+rsb ); % positions: pos1(thinwidth,-90); pos2(.1[thinwidth,thickwidth],-100); pos3(thickwidth,-180); pos4(thinwidth,-270); % 5 is special pos6(thinwidth,-90); % coordinates: x1 = lsb + .97glyphwidth; y1 = .2xheight; x2 = lsb + .55glyphwidth; y2r = -cuthru; x3r = lsb; y3 = y6; x4 = lsb + .5glyphwidth; y4r = xheight + cuthru; % 5 is special x6 = x3; y6 = .52 xheight; % specials: x5r = lsb + glyphwidth; y5r = y6r; x5l = x5r - thickwidth; y5l = y6l; x5 = .5[x5l,x5r]; y5 = .5[y5l,y5r]; dz1 = z2 - z1 + (0,1.5(y2-y1)); dz2 = (-1,0); dz3 = (0,1); dz4 = (1,0); % draw straights: stroke(5,6,0,0,0); % add a slope for the curves: dz5 = .999[(z5-z4),(0,-1)]; % draw curves: curve(1,2,3); curve(3,4,5); labelpos(1,2,3,4,5,6); endgroup; enddef; % f by Malcolm Brown vardef char.f = setwidth .35em; % roughly the same as Helvetica f pos1(1.05thickwidth,190); % R's start on the left! pos2(.15[thickwidth,thinwidth],180); % pos5(.80[thickwidth,thinwidth],95); pos7(.75[thickwidth,thinwidth],45); % pos8(1.1thinwidth,80); % stroke 8 to 9 is the crossbar pos9(thinwidth,80); % y1=0; % determines 1 x1=.35w; % x2=x1; % determines 2 y2=xheight; dz2=(0,1); % heading north % y5=.33[hheight,capheight]; x5=.2[x2,x7]; % y7=.125[capheight,xheight]; x7=.82w; % % Crossbar % y8r=xheight; % determines 8 x8=.33[0,x2r]; % y9r=xheight; % determines 9 x9=w-1.67x8; % stroke(1,2,0,0,0); curve(2,5,7); stroke(8,9,0,0,0); % labelpos(1,2,5,7,8,9); enddef; % g by Bruce Leban def down = (0,-1) enddef; def up = (0,1) enddef; def right = (1,0) enddef; def left = (-1,0) enddef; vardef circle@# (expr xc,yc,xrad,yrad,adjustpen,tilt,pentilt) = z[@#] = (xc,yc); z[@#+1] = (xc+xrad*cosd (180-tilt), yc+yrad*sind (180-tilt)); z[@#+2] = (xc+xrad*cosd (90-tilt), yc+yrad*sind (90-tilt)); z[@#+3] = (xc+xrad*cosd (0-tilt), yc+yrad*sind (0-tilt)); z[@#+4] = (xc+xrad*cosd (-90-tilt), yc+yrad*sind (-90-tilt)); dz[@#+1] = z[@#+2] - z[@#+4]; dz[@#+3] = z[@#+4] - z[@#+2]; pos[@#+1] (adjustpen*thinwidth, 180-tilt+pentilt); pos[@#+2] (adjustpen*thickwidth, 90-tilt-pentilt); pos[@#+3] (adjustpen*thinwidth, 0-tilt+pentilt); pos[@#+4] (adjustpen*thickwidth,-90-tilt-pentilt); curve ([@#+1],[@#+2],[@#+3]); curve ([@#+3],[@#+4],[@#+1]); enddef; vardef char.g = setwidth 0.5em; pentilt := 20; % degree of "tilt" for pens circle10 ( .47w,.55xheight, % center of circle (w - 0.22em)/2, % "radius" in x direction .4xheight, % and y direction 1, % pen width multiplier 0, % don't rotate control points pentilt ); xadjust := 1/3thinwidth; % move the down stroke over xadjust % top of downstroke x2r = x13r + xadjust; y2 = xheight; pos2 (1.2thickwidth, 45); % bottom of down stroke and right side of descender x3r = x2r; % position below pen 2 y3 = .10xheight; % just above base line pos3 (.5[thinwidth,thickwidth],pentilt); dz3 = down; % going down at this point % bottom of descender x4 = .65[x5,x3]; % closer to right side of g y4r = -ydepth; % positioned at -ydepth pos4 (thinwidth,-90+pentilt); % left side of descender x5r = x11r; % x5r and x11r are really on left side y5 = .8[-ydepth,0]; % ends below base line pos5 (thickwidth,180+pentilt); stroke (2,3,0.5,0.5,0); curve (3,4,5); labelpos (2,3,4,5,10,11,12,13,14); enddef; % I had hoped to do a tradional style g, but I didn't have enough time. % % vardef char.var.g = etc % h by Arnie Olds vardef char.h = setwidth .6em; pos1(1.5thickwidth,45); pos2(1.05thickwidth,10); x2l=.1em; x8l=w-.1em; x1=x2; x3r=x2r; x7=x8; y1=hheight; y2=0; y8=0; y3=.55xheight; y7=.7xheight; pos3(.8thinwidth,-45); pos4(thinwidth,-55); pos5(.25[thickwidth,thinwidth],-110); pos6(thickwidth,-150); pos7(thickwidth,-170); pos8(1.05thickwidth,-170); x5=.75[x3,x7]; y5l=1.05xheight; x4=.5[x3,x5]; y4=.85[y3,y5]; x6=.75[x5,x7]; y6=.33[y5,y7]; stroke(1,2,.1,.2,0); curve(3,4,5); curve(5,6,7); dz3=(0,1); dz7=(0,-1); dz5=(1,0); stroke(7,8,.3,0,.1); labelpos(1,2,3,4,5,6,7,8); enddef; % i by Bruce Fleischer vardef char.i = setwidth 1/3em; %same width as 'l' botangle:=10; %same angle at bottom of stroke pos1(1.15thickwidth, botangle); %stroke of 'i' very much like 'l', pos2(1.05thickwidth, botangle); %only top has same angle as bottom z2=(.5w,0); y1=xheight; x1r=x2r; stroke(1, 2, .2, .2, 0); pos3(1.15thickwidth, botangle); %top and bottom of dot are parallel to pos4(1.15thickwidth, botangle); %and same length as top of stroke .4[x3r,x4r] = x2r; %keep dot from falling off to the left x3r=x4r-.07(hheight-xheight); %slant sides of dot y4=.25[xheight,hheight]; %space dot between xheight and hheight y3=.55[xheight,hheight]; stroke(3,4, 0, 0, 0); %make it a parallelogram labelpos(1,2,3,4); enddef; % j by John Hershberger vardef char.j = lspace := .08em; % How much space at left of j; adjust to look right jwidth := .34em + lspace; % Total width of character and whitespace lcurve := .71; % Fairly round curve at end of bottom loop rcurve := .73; % Squarish round curve at start of bottom loop % Dot parameters should be coordinated with 'i' dot. dotdy := .4*(hheight-xheight); % Height of dot dotwidth := 1.3thickwidth; % Width of dot lswell := -.1; % Reverse taper for left of dot rswell := -.05; % Reverse taper for right of dot eps := -.3rswell*thickwidth; % Amount to move dot left to make it look % more centered. Try to make right side of % j's vertical stroke ~ bisect dot's swell. % We're at the level of single pixels, so it's % hard to make it right. setwidth jwidth; pos1( 1.5thickwidth, 45 ); % As in 'l' pos2( thickwidth, 10 ); pos3( .7[thinwidth, thickwidth], -35 ); pos4( .3[thinwidth, thickwidth], -80 ); pos5( .15[thinwidth, thickwidth], -120 ); pos6( thinwidth, -135 ); % No slight flare at the end of j stroke % Slope matches top of j stroke--unimportant? y1=xheight; x1r = w-.1em; % Right side straight and .1 em in. % It would be tempting to put the top of the % stroke a little bit to the left so that the % "j" doesn't look like it's falling over % backward. (See next line.) fudge:= .005em; % This was originally used to move the bottom % of the stroke right to achieve an equivalent % effect. Setting fudge to .005em works fairly % nicely, except that the pixel-jagged right % edge of the % stroke is then a little disconcerting. x2r=x1r+fudge; y2r = .3[-ydepth,xheight]; % Top of curve dz2=(0,-1); % Heading down x3= rcurve[x4,x2]; y3 = rcurve[y2,y4]; % See below y4r=-ydepth -.05capheight; x4l= .5[x6l,x2l]; % Inside of curve is flat in center dz4=(-1,0); % Heading left x5 = lcurve[x4,x6]; y5 = lcurve[y6,y4]; x6r = lspace; y6l = .8[-ydepth, y2r]; % Pen is flipped, curve ends just % below where it starts on other side. % Dot definition x7r = x1r-eps; y7 = y1+ 1.7dotdy ; % Start 1.7dotdy above j-stroke x8r = x7r-eps; y8 = y7 - dotdy; % And come down dotdy. pos7( dotwidth, 45 ); % Same slope as top of stroke pos8( dotwidth, 45 ); % Same slope as top of stroke % Draw the thing stroke( 1, 2, .1, .2, 0 ); % To match top of 'l' curve(2,3,4); curve(4,5,6); stroke( 7, 8, .5, lswell, rswell); % Swell out a little on the dot labelpos( 1,2,3,4,5,6,7,8 ); enddef; % k by Renata Byl vardef char.k = setwidth .6em; pos1(1.5thickwidth,45); pos2(1.05thickwidth,10); z2=(.1667em,0); y1=hheight; x1r=x2r; pos3(1.5thickwidth,90); pos4(1.05thickwidth,90); y3=.5hheight; y4=.75hheight; z3=(x2r,y3); z4=(.45em,y4); pos5(1.00thickwidth,45); pos6(1.05thickwidth,10); y5=.5hheight; y6=.02capheight; z5=(.25em,y5); z6=(.45em,y6); stroke(1,2,.1,.2,0); stroke(3,4,.9,0,.2); stroke(5,6,.9,.2,0); labelpos(1,2,3,4,5,6); enddef; % l by Don Knuth vardef char.l = setwidth 1/3em; pos1(1.5thickwidth,45); pos2(1.05thickwidth,10); z2=(.5w,0); y1=hheight; x1r=x2r; stroke(1,2,.1,.2,0); labelpos(1,2); enddef; % m by Jim Bratnober vardef char.m = %offset:=(.3333em-thickwidth)/2; offset:=(.3em-thickwidth)/2; %setwidth 1em+2offset; setwidth .95em; chwid:=w-2offset; pos1(1.5thickwidth,45); % upper left nub pos2(.9thickwidth,10); % moving down the left vertical pos3(1.05thickwidth,10); % at the bottom pos4(.9[thickwidth,thinwidth],-50); % left hump pos5(.5[thickwidth,thinwidth],-105); pos6(thickwidth,-140); pos7(thickwidth,-170); % middle vertical, top pos8(thickwidth,10); % duplicate since directions of pen differ pos9(1.1thickwidth,-170); % bottom pos10(.9[thickwidth,thinwidth],-50); % right hump pos11(.5[thickwidth,thinwidth],-105); pos12(thickwidth,-140); pos13(thickwidth,-170); % top of right vertical pos14(1.05thickwidth,-170); % bottom numeric xxheight; y1=1.02xheight; x1r=x2r=x3r=offset+thickwidth; y2=.55xxheight; dz2=(0,1); y3=0; x4=x2+.054chwid; y4=.95xxheight; z5=(.287chwid+offset,1.05xxheight); dz5=(1,0); y5l=1.03xheight; z6=(.46chwid+offset,y4); humpwid:=(chwid-(x3r-x3l))/2; z7=(x9,y2+.1xxheight); dz7=(0,-1); x9l=x3r+humpwid; y9=0; z8=z7; dz8=(0,1); % Note: instead of humpwid, better to say `x9l-x3r=x14l-x9l; x14l-x3l=chwid'! z10=(x7+x4-x2,y4); z11=(x7+x5-x2,y5); dz11=(1,0); z12=(x7+x6-x2,y4); z13=(x14,y2+.1xxheight); dz13=(0,-1); x14l=x9l+humpwid; y14=0; stroke(1,3,.1,.3,0); curve(2,4,5); curve(5,6,7); stroke(7,9,0,0,0); curve(8,10,11); curve(11,12,13); stroke(13,14,0,0,0); labelpos(1,2,3,4,5,6,7,8,9,10,11,12,13,14); enddef; % n by Lynn Ruggles vardef char.n = % character 'n' setwidth .6em; % width is slightly larger than 1/2 em x1=.25w; y1=xheight; pos1(2thickwidth,0); % pen is thick and 0 degree angle x2=.3w; y2=y1; pos2(thickwidth,15); % pen is thick and 15 degree angle pos3(1.2thickwidth,0); % ditto x3=.3w; y3=0; x4=x3; y4=2/3xheight-thinwidth; pos4(thickwidth,75); dz4=(10,11); x5=.6w; y5=xheight-.5thinwidth; pos5(thickwidth,60); dz5=(1,0); x6=.8w; y6=y4; pos6(1.1thickwidth,30); dz6=(0,-1); pos7(1.5thickwidth,0); x7=.85w; y7=y3; % stroke (1,2,.2,0,.30; stroke (1,3,.2,.8,0); curve (4,5,6); stroke (6,7,.7,0,.5); labelpos(1,2,3,4,5,6,7); enddef; % o by Stan Osborne vardef char.o = setwidth .6em; % make the "o" 60% of an em numeric mythin,mymid[],mythick; mythin = thinwidth; mymid1 = .27[thinwidth,thickwidth]; mymid2 = .75[thinwidth,thickwidth]; mythick = thickwidth; pos1(mythin,-92); % vertical and thin for vec(1) z1l = (.5w,1.05xheight); % in the middle and top at xheight pos2(mymid1,-48); % getting flatter for vec(2) x2l = .27w; % moved over to the left y2l = .91y1l; % it is near xheight pos3(mythick,0); % flat and thicker for vec(3) z3 = (.22w,.65y1l); % moved to the left and down curve(1,2,3); % draw the upper left curve pos4(mythick,0); % same as vec(3) for vec(4) z4 = (x3,.35[y6l,y1l]); % symetrical with z3 y6l=-.05xheight; stroke(3,4,.5,-.1,.1); % left center stroke pos5(mymid1,45); % lifting up for vec(5) x5l = x2l; % moved over to the right y5l-y6l = y1l-y2l; % it is near the bottom pos6(mythin,88); % vertical and thin for vec(6) z6l = (.5w,-.05xheight); % in the middle and bottom at baseline dz6=(1,0); curve(4,5,6); % draw the lower left curve pos7(mythin,-92); % vec(7) is a 180 of vec(6) z7r = z6l; % must match with vec(6) pos8(mymid1,-50); % lifting up for veck(8) x8r = .97w-x5l; % mirror image of vec(5) y8r = y5l; % same height pos9(mymid2,0); % flat and thicker for vec(9) z9 = (.97w-x3,y4); % mirror of vec(4) dz7=(1,0); curve(7,8,9); % draw the lower right curve pos10(mymid2,0); % same as vec(9) z10 = (x9,y3); % mirror of vec(3) stroke(9,10,.5,.1,-.1); % right center stroke pos11(mymid1,48); % lifting up for vec(11) x11r = x8r; % same as vec(8) y11r = y2l; % same height as vec(2) pos12(mythin,88); % vertical and thicker for vec(12) x12r = x1l; % a 180 of vec(1) y12r = y1l; % same height as vec(1) curve(10,11,12); % draw the upper right curve labelpos(1,2,3,4,5,6,7,8,9,10,11,12); % label the vectors enddef; % p by Theresa-Marie Rhyne vardef char.p= setwidth .55em; pos1(1.5thickwidth,45); pos2(1.05thickwidth,10); pos3(.9thinwidth,80); pos4(thinwidth,80); pos5(thinwidth,135); pos6(thickwidth,180); pos7(thickwidth,215); pos8(thinwidth,250); pos9(.5thinwidth,270); z2=(.1em,xheight); y1=-ydepth; x1r=x2r; x3=x9r=.1em; y3=.1xheight; y9=.9xheight; y4=0; x4=x8=.4w; dz4=(1,0); y8=xheight; x6r=.7w; y6l=.5xheight; dz6=(0,1); x5r=.75[x4r,x6r]; y5r=.75[y6r,y4r]; x7=.75[x8,x6]; y7=.75[y6,y8]; dz8=(-1,0); stroke(1,2,.1,.2,0); stroke(3,4,.5,-.4,.2); curve(4,5,6); curve(6,7,8); stroke(8,9,.5,-.4,.2); labelpos(1,2,3,4,5,6,7,8,9); enddef; % q by Pavel Curtis vardef char.q = % setwidth .5em; setwidth .6em; cw := .75[thinwidth,thickwidth]; % Corner pen width cp := .72; % Corner positioning coeff. pos1(1.5thickwidth, 45); pos2(thickwidth, 0); pos3(cw, 45); pos4(thinwidth, 90); pos5(cw, 135); pos6(thickwidth, 180); pos7(cw, 225); pos8(thinwidth, 270); pos9(cw, 315); x6.r = 0.1em; % Again .1em sidebars x2.r = w - 0.1em; x1.l = x2.l; y1 = -ydepth; y2 = xheight/2; x4 = 1/2[x6, x2]; y4.r = 1.05xheight; y6 = y2; x8 = x4; y8.r = -.05xheight; x3 = x9 = cp[x4, x2]; x5 = x7 = cp[x4, x6]; y3 = y5 = cp[y2, y4]; y7 = y9 = cp[y2, y8]; dz2 = (0,1); dz4 = (-1,0); dz6 = (0,-1); dz8 = (1,0); % Stem stroke(1, 2, .1, 0, .2); % Bowl curve(2, 3, 4); curve(4, 5, 6); curve(6, 7, 8); curve(8, 9, 2); labelpos(1, 2, 3, 4, 5, 6, 7, 8, 9); enddef; % r by Arthur Samuel vardef char.r = setwidth .5em; % do this first; it sets the character width pos1(1.5thickwidth,45); % the pen is "thicker than thick" at the top pos2(1.05thickwidth,10); % and also slightly flared at the bottom pos3(.8thinwidth,90); % The starting place for the right branch pos4(.65[.8thinwidth,thickwidth],90); pos5(1.2thickwidth,90); % Joining point of two curves pos6(.85[thinwidth,thickwidth],45); % at point with slope for line 5,7 z2=(.2w+.5thickwidth,0); y1=xheight; x1r=x2r; % at the hheight, aligned at the right x3=x2+.5thickwidth; y3=.65xheight; dz3=(1,2); x4=.5[x3,x5]; y4=.83[y3,y5]; z5=(.8w,xheight-.3thickwidth); dz5=(1,0); stroke(1,2,.1,.2,0); % taper at the left but not the right curve(3,4,5); labelpos(1,2,3,4,5); enddef; % s by Kwang-Chun Park vardef char.s = setwidth 0.4em; pos1(thickwidth,-100); pos2(.5[thickwidth,thinwidth],-95); pos3(thinwidth,-90); pos4(.375[thinwidth,thickwidth],-40); pos5(.75[thinwidth,thickwidth],0); pos6(thickwidth,45); pos7(1.1thickwidth,75); pos8(thickwidth,45); pos9(.75[thinwidth,thickwidth],0); pos10(.375[thinwidth,thickwidth],-40); pos11(thinwidth,-90); pos12(.5[thinwidth,thickwidth],-95); pos13(thickwidth,-100); y3l=1.03xheight; y1=0.85xheight; y5=.75xheight; y7= 0.5xheight; y9= 0.25xheight; y11r= -0.03xheight; y13=y9; x3 = 0.5w; x1r=w-.05em; x5l=x3-0.5w; x7 = x3; x9r = w; x11 = x3; x13= x5l; x2l = 0.71[x3l,x1l]; y2l = 0.71[y1l,y3l]; dz3= (-1,0); x4l = 0.75[x3l,x5l]; y4l = 0.75[y5l,y3l]; dz5=(0,-1); x6 = 0.29[x5,x7]; y6 = 0.29[y7,y5]; dz7=(1,0); x8 = 0.29[x9,x7]; y8 = 0.71[y9,y7]; dz9=(0,-1); x10= 0.75[x11,x9]; y10= 0.25[y11,y9]; dz11=(-1,0); x12= 0.35[x13,x11]; y12= 0.29[y11,y13]; curve(1,2,3); curve(3,4,5); curve(5,6,7); curve(7,8,9); curve(9,10,11); curve(11,12,13); labelpos(1,2,3,4,5,6,7,8,9,10,11,12,13); enddef; % t by Tuan Pham vardef char.t= setwidth .6em; pos1(1.1thickwidth,45); pos2(thickwidth,10); pos3(thickwidth,40); pos4(.5[thickwidth,thinwidth],75); pos5(.9[thickwidth,thinwidth],130); pos6(thinwidth,200); pos7(1.2thinwidth,80); pos8(1.5thinwidth,45); x1l=0.15em;y1=.5[xheight,hheight]; x2=x1;y2=0.25xheight;dz2=(0,-1); x3=.71[x4,x2];y3=.71[y2,y4]; x4r=.5[x2r,x6r];y4l=-.05xheight;dz4=(1,0); x5=.7[x4,x6];y5=.7[y6,y4]; x6l=w-0.15em;y6=0.3xheight; x7=.1em;x8=w-.18em; y7r=y8r=xheight; stroke(1,2,.2,.05,.05); curve(2,3,4);curve(4,5,6); stroke(7,8,.8,0,.3); labelpos(1,2,3,4,5,6,7,8); enddef; % u by Nori Tokusue vardef char.u = setwidth .50em; %temp value pos1(1.05thickwidth,10); pos2(thickwidth,10); pos3(.65[thickwidth,thinwidth],40); pos4(.80[thickwidth,thinwidth],75); pos5(.95[thickwidth,thinwidth],130); pos6(thickwidth,180); pos7(thickwidth,190); pos8(1.1thickwidth,190); % coordinate information x1l=.075em; x7=w-x1l; y1=y7=xheight; x1=x2; x6=x7;x6r=x8r; % left curve y2=.30xheight; dz2=(0,-1); % going down at z2 x3=.75[x4,x2]; y3=.75[y2,y4]; x4r=.5[x2r,x6r]; y4l=-.05xheight; dz4=(1,0); % rightward % right curve x5=.70[x4,x6]; y5=.3[y4,y6]; y6=.33xheight; dz6=(0,1); % upward at z6 y8=0; % now draw the line stroke(1,2,.3,.05,0); % temp values. curve(2,3,4); curve(4,5,6); stroke(6,7,.7,0,.05); dy6:=-1; stroke(6,8,.5,.05,.05); labelpos(1,2,3,4,5,6,7,8); enddef; % v by Ed Williams vardef char.v = setwidth .55em; pos1(1.1thickwidth,05); z1=(.2w,xheight); pos5(1.3thinwidth, -170); z5=(.85w,xheight); pos3(1.8thickwidth,87); x3l=.5[x1,x5]; y3l=-.02w; pos2(.9thickwidth, 25);z2=.5[z1,z3]; pos4(1.1thinwidth,155); z4=.5[z5,z3]; stroke (1,2,.2,.05,.05); stroke(2,3,.8,0,0); stroke(5,4,.2,.05,.05); stroke(4,3,.8,.02,0); labelpos(1,2,3,4,5); enddef; % w by Joey Tuttle vardef char.w = setwidth .74em; % this from "average character width table" TSS pos1(1.5thickwidth,30); pos2(1.05thickwidth,10); pos21(thinwidth,10); pos3(thinwidth,30); pos31(thickwidth,30); pos4(1.05thickwidth,10); pos41(thinwidth,10); pos5(1.5thinwidth,30); y1=xheight; x1l=.1em; x5r=w-.1em; % some fixed points x2=.45[x1,x3]; x3=.5[x1,x5]; x4=.45[x3,x5]; % relating corners z21r=z2r; z31l=z3l; z41r=z4r; % tie corners of strokes y31r=y1; y5=y1; % the tops of the strokes y2=0; y4=y2; % the baseline stroke(1,2,.1,.2,0); stroke(21,3,.2,.0,.2); stroke(31,4,.1,.2,.2); stroke(41,5,.9,.2,0); labelpos(1,21,2,31,3,41,4,5); enddef; % x by William Burley vardef char.x = setwidth .45em; pos1(1.4thickwidth,0); pos2(.9thickwidth,45); pos3(1.4thickwidth,0); pos4(1.4thinwidth,0); pos5(.9thinwidth,-45); pos6(1.4thinwidth,0); x1l=x4l=.1w; x3r=x6r=.9w; y1=y6=xheight; y3=y4=0; x2=x5=.5w; y2=y5=.5xheight; stroke(1,2,.15,0,.25); stroke(2,3,.85,.25,0); stroke(4,5,.15,0,.25); stroke(5,6,.85,.25,0); labelpos(1,2,3,4,5,6); enddef; % y by Neenie Billawala vardef char.y= setwidth .57em; pos1(1.4thickwidth,15); dz2=z2r-z1r; pos2(1.25thickwidth,60); pos3(1.65thinwidth,15); pos4(.85thinwidth,-45); pos5(1.65thinwidth,10); pos6(1.23thickwidth,50); pos7(1.5thinwidth,15); pos8(1.4thinwidth,0); y1=y3=xheight; z2=z4; y4r=0; x4l=.5w; numeric a; y5=-ydepth; x1l=.07w; x3r=w-.09x1l-.02em; z5=a[z3,z4]; dz4=(z5-z3); z6r=.02[z1r,z2r]; dz6=z2l-z1l; curve(1,6,2); %z7r=.08[z3r,z4r]; %dz7=z4l-z3l; curve(3,7,4); %z8l=.92[z3l,z4l]; %dz8=z4r-z3r; %curve(4,8,5); stroke(3,4,.2,.4,0); stroke(4,5,.8,0,.4); labelpos(1,2,3,4,5,6,7,8); enddef; % z by Kanchi Gopinath vardef char.z= setwidth .43em; pos1(thickwidth,80); pos2(2thickwidth,30); pos3(2thickwidth,30); pos4(thickwidth,90); % 90 is changed to 110 in his other file... x1l=0; y1l=xheight-thickwidth; y2r=xheight; x2r=w; x3l=0; y3l=0; x4l=w; y4l=0; stroke(1,2,.4,.3,.2); stroke(2,3,.5,.5,.5); stroke(3,4,0.6,0.2,0.3); labelpos(1,2,3,4); enddef; % - by Dan Mills vardef char.hyphen = begingroup charcode:=ASCII"-"; % charcd := '-; save glyphwidth,lsb,rsb; numeric glyphwidth,lsb,rsb; glyphwidth = .25em; lsb = .1glyphwidth; rsb = .1glyphwidth; setwidth( lsb+glyphwidth+rsb ); % positions: pos1(thinwidth,90); pos2(thinwidth,90); % coordinates: x1 = lsb; y1 = .55xheight; x2 = lsb + glyphwidth; y2 = y1; % specials: % none % draw stroke: stroke(1,2,0,0,0); labelpos(1,2); endgroup; enddef; % char.hyphen % . by Dan Mills vardef char.period = begingroup charcode:=ASCII"."; % charcd := '.; save glyphwidth,lsb,rsb; numeric glyphwidth,lsb,rsb; glyphwidth = thickwidth; lsb = .6glyphwidth; rsb = .6glyphwidth; setwidth( lsb+glyphwidth+rsb ); % positions: pos1(thickwidth,90); pos2(thickwidth,90); % coordinates: x1 = lsb; y1l = 0; x2 = lsb + glyphwidth; y2l = y1l; % specials: % none % draw stroke: stroke(1,2,0,0,0); labelpos(1,2); endgroup; enddef; % char.period % , by Dan Mills vardef char.comma = begingroup charcode:=ASCII","; % charcd := ',; save glyphwidth,lsb,rsb; numeric glyphwidth,lsb,rsb; glyphwidth = thickwidth; lsb = .6glyphwidth; rsb = .6glyphwidth; setwidth( lsb+glyphwidth+rsb ); % positions: pos1(thickwidth,90); pos2(thickwidth,90); pos3(.7thickwidth,0); pos4(.3thickwidth,0); % coordinates: x1 = lsb; y1l = 0; x2 = lsb + glyphwidth; y2l = y1l; x3r = x2; y3 = y1l; x4l = x1; y4 = -1.5thickwidth; % specials: % none % draw stroke: stroke(1,2,0,0,0); stroke(3,4,0,0,0); labelpos(1,2,3,4); endgroup; enddef; % char.comma % now we generate the font % SELECT THE CORRECT init.... STATEMENT! openwindow 0 from (0,0) to (420,500) at (-40,310); window:=0; %init.normal(1.618033); %init.bold(1.618033); init.boldx(1.618033); vardef init.wierd(expr f) = begingroup numeric thinwidth,thickwidth,capheight,xheight,hheight,ydepth,em; thinwidth = 13f; thickwidth = 13f; em = 180f; capheight = 170f; xheight = 90f; hheight = 180f; ydepth = 60f; endgroup enddef; %init.wierd(sqrt2); vardef make@#(expr ls,rs)=begingroup clear; charcode:=ASCII str@#; "the character "&str @#; char@#; chardx:=w+ls+rs; charwd:=chardx/hppp; if proofing>.5: shipit; else: proofrule((0,hheight),(w+ls+rs,hheight)); proofrule((0,-ydepth),(w+ls+rs,-ydepth)); proofrule((0,-ydepth),(0,hheight)); proofrule((w+ls+rs,-ydepth),(w+ls+rs,hheight)); proofrule((0-10,0),(0+10,0)); proofrule((w+ls+rs-10,0),(w+ls+rs+10,0)); shipout (currentpicture shifted (ls,0)); fi endgroup enddef; tracingtitles:=1; make.A(-.025em,.05em); make.B(0,-.025em); make.C(-.02em,-.02em); make.D(-.02em,0); make.E(0,-.05em); make.F(0,-.05em); make.G(0,0); make.H(0,0); make.I(-.05em,-.05em); make.J(0,0); make.K(0,-.05em); make.?(0,0); make.L(0,-.02em); make.M(0,0); make.N(0,0); make.O(0,0); make.P(.05em,-.075em); make.Q(0,0); make.R(0,-.275em+thickwidth); make.S(0,0); make.T(-.05em,-.075em); make.exclamation(0,-.075em); make.U(0,0); make.V(-.075em,0); make.W(0,0); make.X(-.05em,0); make.Y(0,0); make.Z(0,0); make.a(-.05em,.5thickwidth); make.b(0,-.025em); make.c(.05em,0); make.d(-.025em,0); make.e(0,0); make.f(0,0); make.g(0,.01em); make.h(0,0); make.i(0,0); make.j(-.05em,0); make.k(-.02em,-.05em); make.l(0,0); make.m(0,0); make.n(-.05em,.01em); make.o(0,0); make.p(.05em,0); make.q(-.02em,0); make.r(0,-.07em); make.s(.05em,.05em); make.t(-.025em,-.1em); make.u(0,.04em); make.v(-.025em,-.025em); make.w(-.05em,-.05em); make.x(0,0); make.y(0,0); make.z(.05em,.05em); make.hyphen(0,0); make.period(0,0); make.comma(0,0); fontdimen 1: 0, 1/3em/hppp, 1/6em/hppp, 1/9em/hppp, xheight/vppp, em/hppp, 1/9em/hppp; end