% This is UPPERO.MF % Version 1.0b % Date 17-MAR-1992 % % (c) 1991, 1992 by J"org Knappen. See fc.rme for copying conditions % This file is part of the fc-package % See fc.rme for more information % % J"org Knappen % Institut f"ur Kernphysik % Postfach 39 80 % D-W 6500 Mainz % knappen@vkpmzd.kph.uni-mainz.de % Contents: % % The following characters are generated without condition: % % O % % And the following on demand, i. e. if their code is known: % % O_grave, O_acute, O_hat, O_hachek, O_bar, O_uline, O_dot, O_dotu % O_umlaut, O_tilde, open_O, open_O_tilde, OE_lig (\OE), crossed_O (\O) % % Higher versions of this file might include more characters. cmchar "The letter O"; beginchar("O",14u#-width_adj#,cap_height#,0); italcorr .7cap_height#*slant-.5u#; adjust_fit(0,0); penpos1(vair',90); penpos3(vround(vair+1.5vair_corr),-90); penpos2(cap_curve,180); penpos4(cap_curve,0); if monospace: x2r=hround 1.5u; interim superness:=sqrt superness; % make |"O"|, not |"0"| else: x2r=hround u; fi x4r=w-x2r; x1=x3=.5w; y1r=h+o; y3r=-o; y2=y4=.5h-vair_corr; y2l:=y4l:=.52h; penstroke pulled_super_arc.e(1,2)(.5superpull) & pulled_super_arc.e(2,3)(.5superpull) & pulled_super_arc.e(3,4)(.5superpull) & pulled_super_arc.e(4,1)(.5superpull) & cycle; % bowl picture savedpicture; savedpicture:=currentpicture; math_fit(-.3cap_height#*slant-.5u#,ic#-.5u#); penlabels(1,2,3,4); endchar; iff known O_umlaut: cmchar "Capital letter O with trema"; beginchar(O_umlaut,14u#-width_adj#,cap_height#+comma_depth#,0); italcorr .7cap_height#*slant-.5u#; adjust_fit(0,0); numeric dot_diam; dot_diam=max(tiny.breadth,hround(max(dot_size,cap_curve)-2stem_corr)); currentpicture:=savedpicture; pickup tiny.nib; pos1(dot_diam,0); pos2(dot_diam,90); x1=x2=good.x(.5w-1.75u); top y2r=h+1; if bot y2l-slab: y99r:=max(y99l+eps,-oo-tiny-slab); fi y88=.5[y99r,y99l]; dot(88,99); penlabels(88,99); endchar; iff known O_uline: cmchar "Capital letter O with bar below"; beginchar(O_uline,14u#-width_adj#,cap_height#,0.875desc_depth#); italcorr .7cap_height#*slant-.5u#; adjust_fit(0,0); currentpicture:=savedpicture; numeric macron_breadth; macron_breadth:=Vround .2[vair,stem]; pickup if serifs: crisp.nib else: fine.nib fi; pos91(macron_breadth,90); pos92(macron_breadth,90); bot y91l=bot y92l=-d-o; lft x91=w-rt x92=hround 3u; filldraw stroke z91e--z92e; % bar penlabels(91,92); endchar; savedpicture:=nullpicture; iff known OE_lig: cmchar "The ligature OE"; beginchar(OE_lig,18u#,cap_height#,0); italcorr cap_height#*slant-beak_jut#-.5u#; adjust_fit(cap_serif_fit#,0); numeric light_stem; light_stem=max(tiny.breadth,hround .8[mfudged.hair,mfudged.cap_stem]); pickup tiny.nib; pos1(light_stem,0); pos2(light_stem,0); lft x1l=lft x2l=hround .5w; top y1=h; bot y2=0; filldraw stroke z1e--z2e; % stem pickup crisp.nib; pos3(slab,90); pos4(mfudged.hair,0); top y3r=h; x3=x1; rt x4r=hround(w-u); y4=good.y(y3l-beak)-eps; arm(3,4,e,beak_darkness,beak_jut); % upper arm and beak pos5(cap_bar,-90); pos6(mfudged.hair,0); top y5l=vround(.52[y2,y1]+.5cap_bar); x5=x1; pos0(cap_bar,90); pos7(mfudged.hair,0); z0=z5; x6=x7; y6-y5l=y0l-y7; if serifs and not(monospace and hefty): rt x6r=hround(w-3.4u+.5mfudged.hair); y6=good.y(y5l+.6beak)+eps; rt x9r=hround(w-.5u); else: rt x6r=hround(w-1.5u); y6=y5l+eps; rt x9r=hround(w-.75u); fi arm(5,6,f,beak_darkness,0); arm(0,7,g,beak_darkness,0); % middle arm and serif pos8(slab if not serifs:+2stem_corr fi,-90); pos9(mfudged.hair,0); bot y8r=0; x8=x2; y9=good.y(y8l+7/6beak)+eps; arm(8,9,h,beak_darkness,1.5beak_jut); % lower arm and beak penpos11(vair,90); penpos13(vair,-90); if monospace: penpos12(fudged.cap_stem,180); interim superness:=sqrt superness; % make |"O"|, not |"0"| else: penpos12(hround(cap_curve-stem_corr),180); fi x11=x13=.5w-2u; y11r=h+o; y13r=-o; y12=.5h-vair_corr; x12r=hround u; x14=x15=.5w; y14=2/3h; y15=1/3h; y12l:=.52h; penstroke super_arc.e(11,12) & super_arc.e(12,13); % left half of bowl fill z13r{right}..{right}(x2,0)--(x1,h){left}..{left}z11r --z11l{right}...{z14-z11l}(.82[x11l,x14],.82[y14,y11l]) ...z14---z15...{z13l-z15}(.82[x13l,x15],.82[y15,y13l]) ...{left}z13l--cycle; % right half of bowl if serifs: serif(1,2,a,1/3,.5cap_jut); % upper serif serif(2,1,b,1/3,.5cap_jut); fi % lower serif penlabels(0,1,2,3,4,5,6,7,8,9,11,12,13,14,15); endchar; iff known crossed_O: cmchar "Scandinavian letter O/slash"; beginchar(crossed_O,14u#,cap_height#+.25desc_depth#,.25desc_depth#); italcorr .7cap_height#*slant-.5u#; adjust_fit(0,0); penpos1(vair,90); penpos3(vair,-90); penpos2(fudged.cap_stem,180); penpos4(fudged.cap_stem,0); if monospace: x2r=hround 1.5u; interim superness:=sqrt superness; % make |"O"| not |"0"| else: x2r=hround u; fi x4r=w-x2r; x1=x3=.5w; y1r=cap_height+o; y2=y4=.5cap_height-vair_corr; y3r=-o; penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3) & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % bowl x5=x4-vair; x6=x2+vair; y5=h; y6=-d; numeric theta; theta=angle(z5-z6)-90; pickup crisp.nib; pos5(vair',theta); pos6(vair',theta); filldraw stroke z5e--z6e; % diagonal penlabels(1,2,3,4,5,6); endchar; iff known open_O: cmchar "Capital letter OPEN O"; % from cm if serifs: beginchar(open_O,13u#,cap_height#,0); italcorr cap_height#*slant-.5u#; adjust_fit(0,0); slantswitch; % mirror will reswitch the slant pickup fine.nib; pos1(cap_hair,0); pos2(cap_band,90); pos3(cap_curve,180); pos4(cap_band,270); pos5(hair,360); rt x1r=rt x5r=hround(w-u); lft x3r=hround u; x2=x4=.55[x3,x1]; top y2r=h+o; bot y4r=-o; y3=.5[y2,y4]; bot y1=min(vround max(.6h,x_height-.5vair),bot y2l-eps); y5=max(good.y .95(h-y1),y4l+eps); (x2l',y2l)=whatever[z2r,z1l]; x2l:=min(x2l',x2l+.5u); (x4l',y4l)=whatever[z4r,z5l]; x4l:=min(x4l',x4l+.5u); filldraw stroke z1e{x2-x1,10(y2-y1)} ...pulled_arc.e(2,3) & pulled_arc.e(3,4)...{up}z5e; % arc pos6(.3[fine.breadth,cap_hair],0); x6r=x1r; top y6=h+o; x1r-x1'=2cap_curve-fine; y1'=y1; path upper_arc; upper_arc=z1{x2-x1,10(y2-y1)}..z2{left}; numeric t; t=xpart(upper_arc intersectiontimes (z6l--z1')); filldraw z1r--z6r--z6l--subpath(t,0) of upper_arc--cycle; % barb else: beginchar(open_O,11.5u#,cap_height#,0); italcorr cap_height#*slant-.5u#; adjust_fit(0,0); slantswitch; % mirror will reswitch the slant pickup fine.nib; pos1(1.2flare,80); pos2(slab,90); pos3(cap_curve,180); pos4(slab,270); pos5(flare,275); rt x1r=hround(w-1.1u); x2=x4=.5w+1.25u; lft x3r=hround max(u,2u-.5cap_curve); rt x5r=hround(w-.9u); top y1r=vround .95h+o; top y2r=h+o; y3=.5h; bot y4r=-o; bot y5r=vround .08h-o; y5l:=good.y y5l; x5l:=good.x x5l; filldraw stroke rterm.e(2,1,right,.9,4) & super_arc.e(2,3) & super_arc.e(3,4) & term.e(4,5,right,.8,4); fi % arc and terminals mirror(.5w); % reverse it picture savedpicture; savedpicture:=currentpicture; math_fit(-.3cap_height#*slant-.5u#,.5ic#); penlabels(1,1',2,3,4,5,6); endchar; iff known open_O_tilde: cmchar "Capital letter OPEN O with tilde"; % from cm if serifs: beginchar(open_O_tilde,13u#,cap_height#+comma_depth#,0); italcorr cap_height#*slant-.5u#; adjust_fit(0,0); else: beginchar(open_O_tilde,11.5u#,cap_height#+comma_depth#,0); italcorr cap_height#*slant-.5u#; adjust_fit(0,0); fi currentpicture:=savedpicture; if serifs: numeric theta; theta=angle(1/6(6u-vair),1/4(h-cap_height)); pickup crisp.nib; numeric mid_width; mid_width=.4[vair,stem]; pos1(vair,theta+90); pos2(vair,theta+90); pos3(vair,theta+90); pos4(vair,theta+90); z2-z1=z4-z3=(mid_width-crisp)*dir theta; lft x1r=hround(1/6w);rt x4l=hround(5/6w); top y4r=h; bot y1l=vround(bot y1l+min(2/3[cap_height,h],y3l-.25vair)-top y1r); pair delta; ypart delta=3(y3l-y1l); delta=whatever*dir theta; filldraw z1l..controls(z1l+delta)and(z3l-delta)..z3l..z4l --z4r..controls(z4r-delta)and(z2r+delta)..z2r..z1r--cycle; % stroke else: pickup fine.nib; pos1(vair,180); pos2(vair,90); pos3(.5[vair,slab],90); pos4(vair,90); pos5(vair,180); lft x1r=hround(1/6w);rt x5l=hround(5/6w); x2-x1=x3-x2=x4-x3=x5-x4; bot y1=bot y4l=vround(.75[cap_height,h]-vair); top y2r=top y5=h; y3=.5[y2,y4]; filldraw stroke z1e{up}...z2e{right}..z3e..{right}z4e...{up}z5e; fi % stroke penlabels(1,2,3,4,5); endchar; savedpicture:=nullpicture; endinput;