% grlower.mf v.2.3o 2005/12/15 % Copyright (C) 1997 --- 2005 Claudio Beccari % Corrected many glyphs in view of better ligatures in AllCaps % and CapsAndSmallCaps 2000/01/19 % Added dummy glyphs for the ligatures A"U, A"u, a"u 2000/02/13 % Added Leipzig Greek 2000/06/21; corrected 2000/08/03; corrected 2000/11/23; corrected 2001/01/28 % Added CB roman 2000/07/20 % Modified Leipzig theta with the open shape 2001/03/25 % Added "roman" and cursive shwa 2001/07/29 % Introduced SansSerif boolean and modified the sans serif font 2001/08/01, 2002/04/14 % Corrected SS medial sigma that came out bad at small design sizes 2002/11/16 % Corrected the SansSerif cursive and the bold SansSerif epsilon 2004/07/30 % Added the sanserif variants with the epsilon resembling that of cursive 2004/08/01; pfb uploaded on CTAN % Corrected bold versions, in particular sansserif, slitex: beta, gamma, delta, epsilon 2005/12/15 % % Most of the following definitions come from Silvio Levy. % CB added the small caps variants and made some `corrections' in order to % work also with sans serif, bold, inclined, small caps,..., proportional % and monospaced, text and slides fonts. % % CB added also the cursive or italic variants; CB added also the "roman" variant, % a sort of greek script that strongly resembles roman latin characters with roman serifs % practically on every letter. % % Thanks to the sigma ligatures the layout of the accented letters are % different from Silvio's ones; the layout includes also the Greek numerals % (not included in this file; see cbdigits.mf) % lowercase and uppercase digamma, lower case iota and upsilon with diaeresis. % % The sigma ligatures are performed according to the new ligature commands % that were introduced in METAFONT (and in TeX) after 1988; they were not % available to Silvio; if they were, probably he'd had chosen the same % approach as I did. % % (1999/10/25) CB added the adscript iota for the small cap alpha, eta % and omega -- this was done on the explicit request of Apostolos Syropoulos % and his classicist friend Efthimios Maurogeorgiadis. % CB Leipzig Greek added on request and with great help of Dimitri Filippou; without % his constructive collaboration this font shape would have been very poor; thanks, % Dimitri, for the great help you gave me! % Dimitri, thanks also for the help you gave me for the deep revision of the SansSerif shapes! currentbreadth:=0; % alpha def width = if small_caps: 11 elseif cbleipzig: 10 else: 9 fi u enddef; def height = if small_caps: sclc* fi x_height enddef; def dims = width#,height#,0 enddef; def ital = 0 enddef; def fit_params = 0,if SansSerif:1.2u# else:0 fi enddef; def gen_letter = if small_caps: numeric left_stem,right_stem,outer_jut,alpha; right_stem=stem-stem_corr; left_stem=min(hair if hefty: -3stem_corr fi,right_stem); outer_jut=.8jut; x1l=w-x4r=l+letter_fit+outer_jut+.5u; y1=y4=0; x2-x1=x4-x3; x3r=x2r+apex_corr; y2=y3=h+apex_o+apex_oo; alpha=diag_ratio(2,left_stem,y2-y1,x4r-x1l-apex_corr); penpos1(alpha*left_stem,0); penpos2(alpha*left_stem,0); penpos3(alpha*right_stem,0); penpos4(alpha*right_stem,0); z0=whatever[z1r,z2r]=whatever[z3l,z4l]; if y0; fi endchar;% "Lowercase alpha with smooth breathing" iff(not barebones): cmchar "Lowercase alpha with grave and iota subscript"; beginchar(oct"204",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: adjust_fit(0,serif_fit#+.5[vair#,stem#]+ if serifs:.4jut#elseif not slitex: .5*(.5[vair#,stem#])fi +if monospace:1.8elseif slitex:1.5else:.5fi tiny#+1.3u#); gen_letter; else: adjust_fit(fit_params); this_letter; grave(x_baryctr); fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase alpha with rough breathing and iota subscript"; beginchar(oct"205",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: adjust_fit(0,serif_fit#+.5[vair#,stem#]+ if serifs:.4jut#elseif not slitex: .5*(.5[vair#,stem#])fi +if monospace:1.8elseif slitex:1.5else:.5fi tiny#+1.3u#); gen_letter; else: adjust_fit(fit_params); this_letter; spirit(x_baryctr)<; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase alpha with smooth breathing and iota subscript"; beginchar(oct"206",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: adjust_fit(0,serif_fit#+.5[vair#,stem#]+ if serifs:.4jut#elseif not slitex: .5*(.5[vair#,stem#])fi +if monospace:1.8elseif slitex:1.5else:.5fi tiny#+1.3u#); gen_letter; else: adjust_fit(fit_params); this_letter; spirit(x_baryctr)>; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase alpha with acute"; beginchar(oct"210",width#,acc_ht#,0); adjust_fit(fit_params); this_letter; if not small_caps: acute(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase alpha with rough breathing and acute"; beginchar(oct"211",width#,acc_ht#,0); adjust_fit(fit_params); this_letter; if not small_caps: spirit_acute(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase alpha with smooth breathing and acute"; beginchar(oct"212",width#,acc_ht#,0); adjust_fit(fit_params); this_letter; if not small_caps: spirit_acute(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase alpha with rough breathing and grave"; beginchar(oct"203",width#,acc_ht#,0); adjust_fit(fit_params); this_letter; if not small_caps: spirit_grave(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase alpha with smooth breathing and grave"; beginchar(oct"213",width#,acc_ht#,0); adjust_fit(fit_params); this_letter; if not small_caps: spirit_grave(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase alpha with rough breathing and grave and iota subscript"; beginchar(oct"207",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: adjust_fit(0,serif_fit#+.5[vair#,stem#]+ if serifs:.4jut#elseif not slitex: .5*(.5[vair#,stem#])fi +if monospace:1.8elseif slitex:1.5else:.5fi tiny#+1.3u#); gen_letter; else: adjust_fit(fit_params); this_letter; spirit_grave(x_baryctr)<; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase alpha with smooth breathing and grave and iota subscript"; beginchar(oct"217",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: adjust_fit(0,serif_fit#+.5[vair#,stem#]+ if serifs:.4jut#elseif not slitex: .5*(.5[vair#,stem#])fi +if monospace:1.8elseif slitex:1.5else:.5fi tiny#+1.3u#); gen_letter; else: adjust_fit(fit_params); this_letter; spirit_grave(x_baryctr)>; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase alpha with acute and iota subscript"; beginchar(oct"214",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: adjust_fit(0,serif_fit#+.5[vair#,stem#]+ if serifs:.4jut#elseif not slitex: .5*(.5[vair#,stem#])fi +if monospace:1.8elseif slitex:1.5else:.5fi tiny#+1.3u#); gen_letter; else: adjust_fit(fit_params); this_letter; acute(x_baryctr); fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase alpha with rough breathing, acute and iota subscript"; beginchar(oct"215",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: adjust_fit(0,serif_fit#+.5[vair#,stem#]+ if serifs:.4jut#elseif not slitex: .5*(.5[vair#,stem#])fi +if monospace:1.8elseif slitex:1.5else:.5fi tiny#+1.3u#); gen_letter; else: adjust_fit(fit_params); this_letter; spirit_acute(x_baryctr)<; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase alpha with smooth breathing and acute and iota subscript"; beginchar(oct"216",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: adjust_fit(0,serif_fit#+.5[vair#,stem#]+ if serifs:.4jut#elseif not slitex: .5*(.5[vair#,stem#])fi +if monospace:1.8elseif slitex:1.5else:.5fi tiny#+1.3u#); gen_letter; else: adjust_fit(fit_params); this_letter; spirit_acute(x_baryctr)>; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase alpha with circumflex"; beginchar(oct"220",width#,circ_ht#,0); adjust_fit(fit_params); this_letter; if not small_caps: squeeze:=false; circumflex(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase alpha with rough breathing and circumflex"; beginchar(oct"221",width#,Circ_ht#,0); adjust_fit(fit_params); this_letter; if not small_caps: squeeze:=true; spirit_circumflex(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase alpha with smooth breathing and circumflex"; beginchar(oct"222",width#,Circ_ht#,0); this_letter; if not small_caps: squeeze:=true; spirit_circumflex(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase alpha with circumflex and iota subscript"; beginchar(oct"224",width#,if small_caps:height#else:circ_ht#fi,iota_dp#); if small_caps: adjust_fit(0,serif_fit#+.5[vair#,stem#]+ if serifs:.4jut#elseif not slitex: .5*(.5[vair#,stem#])fi +if monospace:1.8elseif slitex:1.5else:.5fi tiny#+1.3u#); gen_letter; else: adjust_fit(fit_params); this_letter; squeeze:=false; circumflex(x_baryctr); fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase alpha with rough breathing, circumflex and iota subscript"; beginchar(oct"225",width#,if small_caps:height#else:Circ_ht#fi,iota_dp#); if small_caps: adjust_fit(0,serif_fit#+.5[vair#,stem#]+ if serifs:.4jut#elseif not slitex: .5*(.5[vair#,stem#])fi +if monospace:1.8elseif slitex:1.5else:.5fi tiny#+1.3u#); gen_letter; else: adjust_fit(fit_params); this_letter;squeeze:=true; spirit_circumflex(x_baryctr)<; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase alpha with smooth breathing, circumflex and iota subscript"; beginchar(oct"226",width#,if small_caps:height#else:Circ_ht#fi,iota_dp#); if small_caps: adjust_fit(0,serif_fit#+.5[vair#,stem#]+ if serifs:.4jut#elseif not slitex: .5*(.5[vair#,stem#])fi +if monospace:1.8elseif slitex:1.5else:.5fi tiny#+1.3u#); gen_letter; else: adjust_fit(fit_params); this_letter; squeeze:=true; spirit_circumflex(x_baryctr)>; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase alpha with iota subscript"; beginchar(oct"370",width#,height#,iota_dp#); if small_caps: adjust_fit(0,serif_fit#+.5[vair#,stem#]+ if serifs:.4jut#elseif not slitex: .5*(.5[vair#,stem#])fi +if monospace:1.8elseif slitex:1.5else:.5fi tiny#+1.3u#); gen_letter; else: adjust_fit(fit_params); this_letter; fi iota_sub(pos_stem); endchar; %picture pic.iota; picture savedpicture; currentbreadth:=0; def dims = if small_caps: 10u#, sclc*x_height#,0 % lowercase beta else: if cbleipzig: 8u#,asc_height#,desc_depth# elseif cbroman:8u#,asc_height#,0 else:9u#,asc_height#,desc_depth# fi fi enddef; def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter= if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(serif_fit#-.5u#,-.5u#); numeric left_stem,right_curve,middle_weight; left_stem=stem-hround 2stem_corr; middle_weight=.6vair+.5; pickup tiny.nib; pos1(left_stem,0); pos2(left_stem,0); lft x1l=lft x2l=hround max(2u,3u-.5left_stem); top y1=h; bot y2=0; filldraw stroke z1e--z2e; % stem penpos3(.7cap_band,90); penpos4(.7cap_band,90); penpos6(middle_weight,-90); penpos7(middle_weight,-90); penpos8(middle_weight,90); penpos9(middle_weight,90); penpos5(right_curve-stem_corr,0); penpos10(right_curve,0); penpos11(cap_band,-90); penpos12(cap_band,-90); z3r=top z1; y4=y3; y5=.5[y4,y6]; y6=y7; y7l-y8l=vair; z12r=bot z2; y11=y12; y10=.5[y11,y9]; y8=y9; .5[y7l,y8l]=.52h; x4=x6; x9=x11=x4+.5u; x7=x8=x1; x9l:=x4+.25u; x5r=hround(w-1.5u); x10r=hround(w-u); if serifs: right_curve=curve-stem_corr; x4=.5[x1,w-1.5u]; else: right_curve=curve-3stem_corr; x4=.5[x1,w-2.5u]; x4l:=x4l-.5u; x9l:=x9l-.5u; fi x6l:=x6l-.5u; x11l:=x11l-.5u; fill stroke z3e..super_arc.e(4,5) & super_arc.e(5,6)..z7e; % upper lobe fill stroke z8e..super_arc.e(9,10) & super_arc.e(10,11)..z12e; % lower lobe if serifs: if not monospace:dish_serif(1,2,a,1/3,jut,b,1/3,.5jut) % upper serif else: serif(1,2,a,1/3,-jut) fi; dish_serif(2,1,c,1/3,jut,d,1/3,.5jut); fi % lower serif math_fit(0,.5ic#); else: italcorr .8*asc_height#*slant-.5u#; if (cursive or cbleipzig) and not SansSerif: if monospace or slitex: pickup fine.nib; fi numeric bstem; bstem=.7[hair,stem]; pos1(bstem,0); lft x1l=3/4u; bot y1=-d if cbleipzig:+.5bstem fi; if cbleipzig: pos3(bstem,45); x3r=x1r; y3l=.55[bar_height,h]; pos2(bstem,30);z2r=.7[z1r,z3r]; else: pos2(bstem,0); x2r=x1r; y2=bar_height; pos3(bstem,-45); x3r=x1r; y3r=if serifs:if monospace:.3 else:.55fi else: if slitex:.4 else:.5fi fi[bar_height,h]; fi pos5(hair,-90); x5=w/2; top y5l=h+oo; pos7((2*(h-y9)/h)*stem,180); x7l=w-7/5x1l; if cbleipzig: y7=.5[y9,y5]; else: y7=3/4h; fi pos8(hair,90); x8=x5; y8=y9; pos9(max(hair,9/10bstem),90); x9-.5bstem=rt x1r+.15u; if cbleipzig: top y9r=x_height; else: y9=1/2h; fi if cbleipzig: filldraw circ_stroke z1e{up}..z2e..z3e..{right}z5e..{down}z7e..{left}z8e; else: filldraw stroke z1e{up}..z2e..z3e..{right}z5e..{down}z7e..{left}z8e; fi filldraw circ_stroke z9e..if not cbleipzig:{right}fi z8e; pos12(stem,0); x12r=w-x1l; if cbleipzig: y12=.5[y14,y9];else:y12=1/4h;fi pos14(fine+eps,-90); x14=x5; bot y14r=-oo; pos15(bstem,-135); x15l=x1r; if cbleipzig: y15= bstem;else:y15=x_height-y9;fi filldraw stroke z8e{right}..{down}z12e..{left}z14e..z15e; numeric bstem; elseif cbroman: numeric bstem,slope; bstem=.7[hair,stem]; pos1(bstem,180); z1=z2; pos2(bstem,0); lft x2l=3/4u; y2=.6[bar_height,x_height]; pos3(bstem,-30); x3r=x2r; y3r=.55[bar_height,h]; pos5(hair,-90); x5=.5[x3r,x7r]; top y5l=h+oo; pos7(bstem,180); z7-(w,0)=whatever*((w/2+u,h)-(w,0)); y7=.45[x_height,h]; pos9(hair,135); z9r=z2l; slope=angle((w,x_height)-z2); filldraw stroke z9e{dir(slope)}..z7e{up}...z5e{left}...z3e---{down}z2e; path cbp; cbp=z9{dir(slope)}..{up}z7; pair za,zb; za=point .5 of cbp; zb=direction .5 of cbp; pos8(hair,angle(zb)); z8=za; pos12(stem,0); x12r=w-x2l; y12=.5[y8l,y14r]; pos14(hair,-90); x14=.5[x1l,x12l]; bot y14r=-oo; filldraw stroke z1e{down}...{right}z14e...{up}z12e...{dir(180-slope)}z8e; numeric bstem,slope; pair za,zb; path cbp; elseif SansSerif or slitex: pickup fine.nib; numeric thin_stem,beta_hair; boolean boldss; boldss=if stem>1.5u: true else: false fi; beta_hair=.65hair; thin_stem=.3[beta_hair,stem]; %for upper bowl pos1(stem,180); bot y1=-d+o; %bottom left pos2(stem,180); y2=.9bar_height; %self-intersection (cf. z15) x1=x2; lft x1r=hround(.75u); %i.e., lft x2r = .75u pos3(stem,180); x3r=x2r; y3r=.3[y10,y5]=.9y7r; %beginning of curve x7r=x12r-.9u; pos7(stem,0); top y5r=h+oo; bot y14r=-oo; x5r=.5[x3r,x7r]; x14r=w/2; %top and bottom bulges pos5(.1 [beta_hair,hair],90); y10=y9=.56[y14,y5]; x9r=x10r; %top and bottom of cusp pos10(beta_hair,90); pos9(beta_hair,-90); rt x12r=hround(w-.75u); %lower right bulge y12r=y10/2; pos12(stem,0); lft x9r=hround(if boldss: .5[rt x3l,x5] else: x5r-.5u-.5thin_stem fi); pos14(thin_stem,-90); z15l=z2l; pos15(.5hair,180); filldraw stroke z1e--z2e--z3e{up}..tension(.8)..z5e{right}..tension(.8) ..z7e{down}...{left}z9e; filldraw stroke z10e{right}..tension(.8)..z12e{down}..{left}z14e..{up}z15e; else: pickup fine.nib; numeric thin_stem; thin_stem=.6[hair,stem]; %for upper bowl numeric tilt; tilt=min(2*otilt,.5); %for both bowls pos1(stem,180); y1-.5stem=-d-o; %bottom left pos2(hair,180); y2=.5bar_height; %self-intersection (cf. z15) x1=x2; lft x1r=hround(.75u+.5(hair-stem)); %i.e., lft x2r ~ .75u x3r=x2r; %beginning of curve top y5r=h+oo; bot y14r=-oo; x5r=x14r; %top and bottom bulges if monospace or slitex: top y10r=x_height; z9=z10; pos9(stem,-90); pos10(stem,90); else: top y10r=vstem+bot y9r=x_height; x9r=x10r; %top and bottom of cusp fi rt x12r=hround(w-.75u); %lower right bulge x5r=.5[lft x2r,rt x12r]; x9r-.5vstem=hround(x5r-.5u-.5vstem); % we want to simulate the following relations, to make slopes consistent % (where z7 is the upper right bulge): % z5r-z3r=whatever*(z9r-z7r)=whatever*(z14r-z12r); % z7r-z5r=whatever*(z12r-z10r)=whatever*(z5r-z3r) yscaled -1; numeric slope; slope=((y10r-y12r)+(y12r-y14r))/((x12r-x10r)+(x12r-x14r)); z7'r=z9r+whatever*(1,slope); z7'r=z5r+whatever*(1,-slope); y7r=y7'r; rt x7r=hround rt x7'r; z12r=z14r+whatever*(1,slope); z3r=z5r+whatever*(1,slope); if monospace or slitex: pos7(stem,0); pos5(stem,90); pos3(stem,180); %top and left filldraw circ_stroke z1e--z2e..z3e{up}..{right}z5e...{down}z7e; else: filldraw double_circ_stroke gr_arc.e(7,6,5)(hair,thin_stem,tilt).. gr_arc.e(5,4,3)(hair,thin_stem,tilt)..{down}z2e..z1e; fi z2=z15; pos15(hair,slope-90); %intersection pt numeric slope; slope=angle((z14r-z15)yscaled 2); filldraw stroke z15e{dir slope}...gr_arc.e(14,13,12)(hair,stem,tilt); %bottom if not (monospace or slitex): forsuffixes e=r,l: path curv[]e; numeric S[]e; curv1e=reverse gr_arc.e(9,8,7)(hair,thin_stem,tilt); %cusp bottom curv2e=gr_arc.e(12,11,10)(hair,stem,tilt); endfor %cusp top (S1r,S2r)=curv1r intersectiontimes curv2r; (whatever,S2l)=curv1r intersectiontimes curv2l; (S1l,whatever)=curv1l intersectiontimes curv2r; if S1l=-1 : S1l:=2; fi if S2l=-1 : S2l:=2; fi filldraw stroke subpath(0,S1e+eps) of curv1e; %fill in cusp filldraw stroke subpath(0,S2e+eps) of curv2e; filldraw subpath (S1r+eps,2) of curv1r...subpath(2,S2r+eps) of curv2r..cycle; else: if slitex: filldraw double_circ_stroke z12e{up}...{left}z10e; else: filldraw stroke z12e{up}...{left}z10e; fi filldraw stroke z9e{right}...{up}z7e; fi fi fi enddef; cmchar "Lowercase beta"; beginchar("b",dims); this_letter; penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;% "Lowercase beta" picture savedpicture; currentbreadth:=0; def dims = if small_caps: 8.5u#, sclc*x_height#,0 % gamma else: if cbleipzig:8.5% elseif cbroman:9% else:10% fi u#,x_height#,desc_depth# fi enddef; def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter= if small_caps: sc_beak_jut:=.7beak_jut; sc_beak:=.7beak; sc_jut:=.9jut; italcorr height#*slant-beak_jut#-.25u#; h:=vround(h-stem_corr); pickup tiny.nib; pos1(stem,0); pos2(stem,0); lft x1l=lft x2l=hround 1.5u+sc_beak_jut; top y1=h; bot y2=0; filldraw stroke z1e--z2e; % stem pickup crisp.nib; pos3(slab,90); pos4(hair,0); top y3r=h; x3=x1; rt x4r=hround(w-if serifs:.75fi u); y4=good.y(y3l-sc_beak)-eps; arm(3,4,e,beak_darkness,sc_beak_jut); % arm and beak if serifs: dish_serif(1,2,a,1/3,sc_jut,b,1/3,.5sc_jut); % upper serif dish_serif(2,1,c,1/3,sc_jut,d,1/3,1.25sc_jut); fi % lower serif math_fit(0,ic#-2.5u#); else: if cursive and serifs and not monospace: adjust_fit(.5stem#,0); pos1(hair,90); pos2(stem,45); lft x1r=0; top y1=bot y2l; top y2r= h+oo; x2l-x1r=5/4u; pos3(stem,0); x3l=x2r+2/3u; y3=3/4h; pos4(hair,0); y4=-o; x4=w/2; filldraw stroke z1e..z2e..z3e..{down}z4e; pos7(hair,-45); z7=z4; pos5(stem,0); bot y5-.5stem=-d-oo; z4-z5=whatever*dir(70); filldraw z4r{down}..z5r...z5l{up}...{dir(45)}z7l--cycle; numeric tilt; tilt=20; pos6(stem,30); top y6=h+oo-.5stem; rt x6r=w-3/4u; filldraw circ_stroke z6e{dir(tilt-90)}..{dir(225)}z7e; numeric tilt; elseif cbleipzig: adjust_fit(.5u#,0); pos1(fine,150); lft x1r=0; top y1=bot y2l-u; top y2r= h+oo=y2l+stem; x2l=.5[x1l,x3l];x2r=.5[x1r,x3r]; z2=.5[z2l,z2r]; pos3(.5[hair,stem],30); x3l=x1l+2.5u; y3=3/4h; pos4(.3[hair,stem],0); z4=(w,h)+whatever*(((w,h)-(0,-d))yscaled1.2); y4=o; filldraw circ_stroke z1e{up}...z2e{right}...z3e..{down}z4e; z5=z1 +whatever*(slant,-1); bot y5=-d; numeric slope,pend; slope= angle(z4-z5); pend=slope-90; pos5(.1[hair,stem],pend); pos9(stem,pend); z9-z5=whatever*(z4-z5);y9=y5+.34stem*sind(slope); pos7(.3[hair,stem],pend-30); z7=z4; filldraw z4r{down}..z9r..z5r..z5l..z9l..{dir(pend+60)}z7l--cycle; pos6(stem,0); top y6=h+oo-.5stem; rt x6r=w-3/4u; pos8(.4[hair,stem],-15); y8=.7[y4,y6]; x8r=x6r; filldraw circ_stroke z6e..z8e...{-dir(pend+60)}z7e; elseif SansSerif: pickup fine.nib; superness__:=superness; begingroup boolean boldss; boldss=if stem>1.5u: true else: false fi; save t; t:=superness__; superness:=.95t; pos2(curve,90); top y2r=h+oo; %top of left branch pos1(hair,180); bot y1=top y2r-4/3curve; %tip of hook lft x1r=hround .5u; x2-x1=y2-y1; %central arc is round pos5(curve,-270); top y5r=h+oo; x5=hround(w-.75u); %right branch pos5'(curve,0); z5'=z5; filldraw stroke z1e{up}...z2e{right}; x3-x4=abs(if boldss: .3stem else: if monospace: 0 else: 1.2stem-vair fi fi); pos3(hair,0); pos4(hair,-180); y4=y3; .5[x3,x4]=.5w; y3-.5stem=vround(-.8d); drawloop(2,3,4,5); %hook and cusp endgroup; superness:=superness__; elseif cbroman: pickup tiny.nib; pos1(stem,0);top y1=h; lft x1l=jut; pos2(stem,0);y2=0; x2=w/2; pos3(stem,0); bot y3=-d; x3=x2; pos4(hair,0);z4r=z2r; pos5(hair,0);y5=y1; rt x5r=w-jut; filldraw stroke z1e--z2e--z3e; filldraw stroke z4e--z5e; dish_serif(3,2,a,1/3,.8jut,b,1/3,.8jut); serif(1,2,c,1/3,-.8jut); dish_serif(5,4,f,1/4,.8jut,g,1/4,.8jut); else: pickup fine.nib; superness__:=superness; begingroup save t; t:=superness__; superness:=.95t; pos2(curve,90); top y2r=h+oo; %top of left branch pos1(hair,180); bot y1=top y2r-4/3curve; %tip of hook lft x1r=hround .5u; x2-x1=y2-y1; %central arc is round pos5(curve,-270); top y5r=h+oo; x5+.5curve=hround(w-.75u); %right branch pos5'(curve,0); z5'=z5; filldraw stroke z1e{up}...z2e{right}; if serifs and (not monospace): rt x3r-lft x4r= stem; %bottom of cusp else: x3-x4=abs(if monospace: 0 elseif slitex: .3stem else: 1.2stem-vair fi); fi pos3(hair,0); pos4(hair,-180); y4=y3; .5[x3,x4]=.5w; if monowidth: y3=0 else: y3-.5stem=vround(-.8d) fi; drawloop(2,3,4,5); %hook and cusp filldraw z5l{right}...z5'r{up}...z5r{left}--cycle; %right branch if monowidth: %complete stem x3'=x3r; x4'=x4r; y3'=y4'; y3'-.5stem=vround(-.8d); filldraw z3r--z3'{down}...{up}z4'--z4r--cycle; fi endgroup; superness:=superness__; fi fi enddef; cmchar "Lowercase gamma"; beginchar("g",dims); if small_caps: adjust_fit(.7serif_fit#,0) elseif cbroman: adjust_fit(serif_fit#,serif_fit#) else: adjust_fit(0,0)fi; this_letter; penlabels(1,2,3,3',4,4',5,6,7,8,9); endchar;% "Lowercase gamma" picture savedpicture; currentbreadth:=0; def dims = if small_caps: 11u#, sclc*x_height#,0 % delta elseif cbleipzig: 8.4 u#,asc_height#,0 else: 8.5u#,asc_height#,0 fi enddef; def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter = if small_caps: numeric left_stem,alpha; left_stem=hair if hefty: -3stem_corr fi; x1l=w-x4r=.75u; y1=y4=0; x2-x1=x4-x3; x3r=x2r+apex_corr; y2=y3=h+apex_o+apex_oo; alpha=diag_ratio(2,left_stem,y2-y1,x4r-x1l-apex_corr); penpos1(alpha*left_stem,0); penpos2(alpha*left_stem,0); penpos3(alpha*stem,0); penpos4(alpha*stem,0); fill diag_end(2l,1l,1,1,4r,3r)--diag_end(4r,3r,1,1,2l,1l)--cycle; % triangle z0=whatever[z1r,z2r]=whatever[z3l,z4l]; y5=y6=vstem; z5=whatever[z1r,z2r]; z6=whatever[z3l,z4l]; if y01.5u: true else: false fi; estem=if (gensize<6):.7 elseif boldss: .9 fi stem; evair=if (gensize<6): max(.7vair,crisp.breadth+eps) elseif boldss:.9estem else:vair fi; pos1(estem,if boldss:60else:45fi);x2=.5[x3r,x1r]; y1l=.5[y2l,y4l]; %upper tip pos2(estem,90); x2=.5w; top y2r=x_height+oo; %top point pos3(estem,170); lft x3r=hround u; y3l=.525[y4l,y2l]; %top left bulge pos4(evair,-90); y4=bar_height; x4=if boldss: .2else:.35fi[x2,x1]; pos5(evair,90);z5=z4; pos6(estem,-170); x6r=hround .75u; y6l=.5[y5l,y7l]; %bottom left bulge pos7(estem,-90); x2=x7; bot y7r=-oo; %bottom point pos8(estem,-45);x7r=.5[x6r,x8r];y8l=.5[y7l,y5l]; % bottom tip filldraw stroke z1e{dir if boldss:150else:135fi}..{left}z2e..{dir 260}z3e..{right}z4e; filldraw stroke z5e{left}..{dir 280}z6e..{right}z7e..{dir 45}z8e; numeric x_baryctr; x_baryctr=x2; %accent reference else: pickup fine.nib; pos2(vstem,90); x2=.5w; top y2r=x_height+o; %top point pos7(vstem,-90); x2=x7; bot y7r=-o; %bottom point rt x1r=hround(w-.75u); bot y1l=.3[bot y2l,bar_height]; %top end z1'=(x1r,y1l+.5(flare-currentbreadth)); %approximation to z1 numeric slope; slope=angle((z2-z1')yscaled 2); pos1(flare,slope-90); bar_height=.5[y1,y8]; x8=x1; pos8(flare,slope+90); %bottom end pos3(vstem,120); lft x3r=hround .75u; y3=.5[y4r,y2r]; %top left bulge pos6(vstem,-120); x6=x3; .5[y6,y3]=bar_height; %bottom left bulge y6:=y6r;y3:=y3r; %for the benefit of pulled_arc y5-y4=abs(curve-min(hair,vair)); y5+y4=2bar_height; x5=x4=x2; %loop pos4(vair,-90); pos5(vair,90); filldraw stroke z1e{dir slope}...pulled_arc.e(2,3); %top drawloop(3,4,5,6); %loop and bottom forsuffixes e=l,r: path foo.e; foo.e= z8e...pulled_arc.e(7,6); if angle(direction 0 of foo.e) > angle(z8r-z8l): foo.e:= z8e{z8r-z8l}...pulled_arc.e(7,6); fi endfor; filldraw stroke foo.e; numeric x_baryctr; x_baryctr=x2; %accent reference fi fi enddef; cmchar "Lowercase epsilon"; beginchar("e",dims); this_letter; penlabels(1,2,3,4,5,6,7,8,9); endchar;% "Lowercase epsilon" iff(not barebones): cmchar "Lowercase epsilon with grave"; beginchar(oct"340",width#,acc_ht#,0); this_letter; if not small_caps: grave(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase epsilon with rough breathing"; beginchar(oct"341",width#,acc_ht#,0); this_letter; if not small_caps: spirit(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase epsilon with smooth breathing"; beginchar(oct"342",width#,acc_ht#,0); this_letter; if not small_caps: if SansSerif: spirit(x_baryctr)>; else: spirit(x_baryctr-u)>; fi fi endchar; iff(not barebones): cmchar "Lowercase epsilon with acute"; beginchar(oct"350",width#,acc_ht#,0); this_letter; if not small_caps: acute(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase epsilon with rough breathing and acute"; beginchar(oct"351",width#,acc_ht#,0); this_letter; if not small_caps: spirit_acute(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase epsilon with smooth breathing and acute"; beginchar(oct"352",width#,acc_ht#,0); this_letter; if not small_caps: spirit_acute(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase epsilon with rough breathing and grave"; beginchar(oct"343",width#,acc_ht#,0); this_letter; if not small_caps: spirit_grave(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase epsilon with smooth breathing and grave"; beginchar(oct"353",width#,acc_ht#,0); this_letter; if not small_caps: spirit_grave(x_baryctr)>; fi endchar; picture savedpicture; currentbreadth:=0; def dims = if small_caps: % zeta 9u#,sclc*x_height#,0 else: if cbleipzig:7.5else: 8.5fi u#,asc_height#,desc_depth# fi enddef; def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter= if small_caps: italcorr height#*slant-.5u#; adjust_fit(0,0); numeric arm_thickness[],z_stem; if hefty: arm_thickness1=Vround(slab-vair_corr); arm_thickness2=slab; z_stem=.8[vair,stem]; else: arm_thickness1=slab; arm_thickness2=vround(slab+vair_corr); z_stem=.9[vair,stem]; fi pickup tiny.nib; x3l=x4l=w-x1r=w-x2r; lft x3l=hround u/2; top y1=h; y2=min(y1,h-2/3arm_thickness1); bot y4=0; y3=max(y4,2/3arm_thickness2); numeric alpha; alpha=diag_ratio(1,z_stem-tiny,y2-y3,x2r-x3l); penpos1(alpha*(z_stem-tiny),0); penpos2(alpha*(z_stem-tiny),0); penpos3(alpha*(z_stem-tiny),0); penpos4(alpha*(z_stem-tiny),0); pair delta; delta=penoffset z3-z2 of currentpen; fill top lft z1l--z2l+delta---z3l+delta..lft z3l---lft z4l..bot z4l ---bot rt z4r--z3r-delta---z2r-delta..rt z2r---rt z1r..top z1r ---cycle; % diagonal pickup crisp.nib; pos5(arm_thickness1,90); pos6(hair,180); top y5r=h; x5=x1; lft x6r=hround 1.25u; y6=good.y(y5l-beak)-eps; arm(5,6,a,beak_darkness**.8,-.4beak_jut); % upper arm and beak pos7(arm_thickness2,-90); pos8(hair,0); bot y7r=0; x7=x4; rt x8r=hround(w-.9u); y8=good.y(y7l+1.2beak)+eps; arm(7,8,b,beak_darkness**.9,.6beak_jut); % lower arm and beak math_fit(0,.5ic#); else: if cursive and serifs and not monospace: pos4(stem,-180); y4=.8bar_height; lft x4r=hround(.75u); %left bulge pos6(hair,-180); rt x6l=hround(w-.75u); y6=-.5stem; %bottom right y3+.5stem=h+o; x3+.5stem=hround(rt x6l-.25u); %top right numeric slope; slope=angle((z3-z4)xscaled 2); pos3(.5[hair,stem],slope+90); pos5(stem,-135); bot y5r=0; x5=.5w; %inflection pt pos7(vstem,-270); y6=.5[y7r,y5r]; x7-.5vstem=hround x5; filldraw double_circ_stroke %bowl and tail z7e{right}...z6e{up}...z5e{left}...z4e{up}...z3e{dir slope}; pos2(hair,slope+90); z2r=z3r; %where handle attaches pos0(hair,0); y0=h; x0=x1r; pos1(stem,0); lft x1l=hround(lft x4r+.25u); y1+.5stem=h; %end of handle filldraw stroke z0e..z1e{down}...z2e{dir slope}; elseif cbleipzig: numeric tilt; tilt=10; pos1(hair,90);y1r=h; x1l=.6[x2l,x3l]; y2r=.5[y3r,y1r];y2l=.5[y3l,y1l];x2r=.75[x3,x5r]=x2l-.5[hair,stem]; pos3(hair,-90-tilt);x3=w/2; y3l=.5[x_height,h]; pos4(hair,90+tilt); z3=z4; pos5(hair,180); x5r=hround(.5u); y5=bar_height; pos6(stem,-90); y6r=0;x6=2w/5; pos7(stem,90); y7=y3; x7=w-x5r-stem; z8=z7+(.5stem,0); pos9(stem,-90); y9=y6; x9=2w/3; x10l=w-x5r=x10r+.5[hair,stem]; y10l=.5[y9l,y11l];y10r=.5[y9r,y11r];z10=.5[z10r,z10l];y10=-.25desc_depth; pos11(hair,90);x11=x6; filldraw circ_stroke z1e{left}...z2e..{dir(-tilt)}z3e; % hook filldraw stroke z4e{dir(180+tilt)}...z5e{down}..{right}z6e; % left bulge filldraw z3r{dir(-tilt)}...z7l..z8..z7r...{dir(180+tilt)}z4r..cycle; % top right filldraw circ_stroke z11e{right}..z10e{up}..z9e{left}--z6e; % bottom elseif cbroman: pos10(hair,90);x10r=x2r; y10r=y11r=h; pos11(hair,90);x11=w-u/2; pos1(hair,angle(z11)-90); z1r=z11l; pos2(stem,0); x2l=u/2; y2=.7bar_height; pos3(stem,90); y3l=y4l=0; z3=z2+whatever*dir(-45); pos4(stem,90);x4=w-x3; pos5(.5[hair,stem],30); x5r=x11; y5l=.5[y4l,y6l]; pos6(hair,-90);x6=w/2; y6r=-(.5[y2r,d]); filldraw stroke z10e--z11e; filldraw circ_stroke z6e{(z5-z6)xscaled3}...z5e{up}...z4e---z3e{left}...% z2e{up}...{(z1-z2)xscaled1.5}z1e; else: pickup fine.nib; pos4(hair,-180); y4=bar_height; lft x4r=hround(.75u); %left bulge pos6(hair,-180); rt x6l=hround(w-.75u); y6=-.5stem; %bottom right y3+.5stem=h+o; if SansSerif: x3+.35stem=x6l; else: %top right x3+.5stem=hround(rt x6l-.25u); fi numeric slope; slope=angle((z3-z4)xscaled 2); pos3(stem,slope+90); pos5(stem,-90); bot y5r=0; x5=.5w; %inflection pt pos7(vstem,-270); y6=.5[y7r,y5r]; if SansSerif: %bowl and tail x7=hround x5; filldraw stroke z3e{dir(180+slope)}...z4e{down}...z5e{right}...z6e{down}...{left}z7e; % z7e{right}...z6e{up}...z5e{left}...z4e{up}...z3e{dir slope}; else: x7-.5vstem=hround x5; filldraw double_circ_stroke z7e{right}...z6e{up}...z5e{left}...z4e{up}...z3e{dir slope}; fi pos2(hair,slope+90); z2r=z3r; %where handle attaches pos1(curve,0); lft x1l=hround(lft x4r+.25u); %end of handle if SansSerif: y1=y3r; else: y1+.5curve=h+o; fi if SansSerif: filldraw stroke z1e{down}...z2e{dir slope}; else: filldraw circ_stroke z1e{down}...z2e{dir slope}; fi fi fi enddef; cmchar "Lowercase zeta"; beginchar("z",dims); this_letter; penlabels(0,1,2,3,4,5,6,7,8,9,10,11); endchar;% "Lowercase zeta" picture savedpicture; currentbreadth:=0; def width = if small_caps: if serifs: 11 else: 9 fi % eta elseif cursive and serifs and not monospace: 9.5 elseif cbleipzig: 8.8 else: 8.5 fi u enddef; def dims = width#,if small_caps:sclc* fi x_height#,% desc_depth# enddef; def ital = 0 enddef; def fit_params = if small_caps: 0 else: if straight or SansSerif: .75 else: .5 fi u# fi,0 enddef; def gen_letter = if small_caps: pickup tiny.nib; pos1(stem,0); pos2(stem,0); pos3(stem,0); pos4(stem,0); lft x1l=lft x2l=hround (.5u+jut); x3=x4=w-x1; top y1=top y3=h; bot y2=bot y4=0; filldraw stroke z1e--z2e; % left stem filldraw stroke z3e--z4e; % right stem penpos5(cap_bar,90); penpos6(cap_bar,90); x5=x1; x6=x3; y5=y6=.52h; fill stroke z5e--z6e; % bar if serifs: numeric inner_jut; if rt x1r+jut+.5u+1<=lft x3l-jut: inner_jut=jut; else: rt x1r+inner_jut+.5u+1=lft x3l-inner_jut; fi dish_serif(1,2,a,1/3,jut,b,1/3,inner_jut); % upper left serif dish_serif(2,1,c,1/3,jut,d,1/3,inner_jut); % lower left serif dish_serif(3,4,e,1/3,inner_jut,f,1/3,jut); % upper left serif dish_serif(4,3,g,1/3,inner_jut,h,1/3,jut); fi % lower left serif math_fit(0,.5ic#); numeric pos_stem; pos_stem=rt x4r if serifs or slitex:+jut+if slitex:.7else:.9fi u fi + if slitex:1.2*fi.5[vair,stem]+.1u; else: if cursive and serifs and not monospace: numeric cstem; cstem=stem; pos1(hair,90); pos2(cstem,45); pos3(cstem,0); x1=0; y1=y2l; y2r=x_height+oo; x2=.5[x1,x3]; y3=3/4y2r; x3l=x1+stem; pos4(stem,0); x4r=x3r; y4=0; filldraw stroke z1e..{right}z2e..{down}z3e..z4e; pos5(hair,135); z5l=z3r; pos6(stem,45); pos7(cstem,0); pos8(stem,0); x7r=x8r=w-u; y7=3/5y2r; y8=-d; x6l=.5[x5l,x7l]; y6r=y2r; filldraw stroke z5e..{right}z6e..{down}z7e..z8e; numeric x_baryctr; x_baryctr=.4[x3,x7]; %accent reference numeric pos_stem; pos_stem=x4; %iota reference elseif cbleipzig: numeric cstem; cstem=.6[hair,stem]; pos1(.2[hair,stem],160); x1r=0; y1=3/4y2r; top y2r=h+oo=top y2l+.2[hair,stem]; x2l=.5[x1l,x5l]; x2r=.5[x1r,x5r]; z2=.5[z2l,z2r]; pos5(stem,0); y5l=stem/2-oo/2; x5l=x1l+min(1.3stem,2u); pos4(stem,0);x4=x5;y4=.5[bar_height,y1l]; filldraw double_circ_stroke z1e{(z2-z1)yscaled4}...z2e...{down}z4e--z5e; pos3(hair,180); z3l=.2[z4r,z5r]; pos6(.1[hair,stem],90); pos7(cstem,0); pos8(stem,0); x7r=w-.75u; y7=.5y2r; x7l=x8l; y8=-d +stem/2; x6l=.77[x5l,x7l]; y6r=vround(h+oo); filldraw circ_stroke z8e..{up}z7e...{left}z6e..tension1.1..{down}z3e; numeric x_baryctr; x_baryctr=.5[x1,x7]; %accent reference numeric pos_stem; pos_stem=x5; %iota reference numeric cstem; elseif cbroman: pickup tiny.nib; pos1(stem,0);x1l=.9jut; bot y1=0; pos2(stem,0);x2l=x1l; top y2=h; pos3(hair,135);rt x3l=rt x1r; y3l=2h/3; pos4(.5[hair,stem],90); x4=.5[rt x3l,rt x5l]; top y4r=h+oo; pos5(stem,0); x5r=x6r; y5= bot y4l-(lft x5l-rt x3l)/2; pos6(stem,0); rt x6r=w-lft x1l;bot y6=-d; filldraw stroke z1e--z2e; filldraw stroke z3e{(z4-z3)yscaled 4}...{right}z4e...{down}z5e---z6e; serif(2,1,a,1/3,-.8jut); dish_serif(1,2,c,1/3,.8jut,d,1/3,.8jut); dish_serif(6,5,f,1/3,.8jut,g,1/3,.8jut); numeric x_baryctr; x_baryctr=x4; %accent reference numeric pos_stem; pos_stem=x1; %iota reference elseif SansSerif: pickup fine.nib; numeric hstem,hhair,hvstem; if gensize<6: hstem=.75stem;hhair=.75hair;hvstem=.75vstem; else: hstem=stem;hhair=hair;hvstem=vstem; fi y1r=-d; rt x1r= rt x2r; pos1(hstem,0); %bottom right rt x2r=hround(w-.75u); y2r=.6x_height; pos2(hhair,0); %right bulge y5=0; pos5(hstem,-180); %bottom left top y4r=x_height+o; x4r=.5[rt x2r,lft x3r]; %top of arch bot y4l=y4r-hstem; x4l=.5[lft x2l,rt x3l]; z4=.5[z4l,z4r]; pos6(hstem,180); y6=y2; x6=x5; x6r=x8r+.75u; %where handle attaches pos3(.5hstem,180); z3l=z6l; pos8(hvstem,0); lft x8l=-.25u; y8=y7r-.5hvstem; %end of handle pos7(hvstem,-90); top y7l=x_height+o; x7=.5[x8r,x6r]; %top of handle z2'l=z2'r=up; filldraw stroke z1e{up}--z2e{up}...z4e{left}...{down}z3e; %right leg filldraw stroke z8e{up}..z7e{right}...z6e{down}--z5e; %left leg with handle numeric x_baryctr; x_baryctr=.1[x4,x7]; %accent reference numeric pos_stem; pos_stem=x5; %iota reference else: pickup fine.nib; y1r-.5stem=-d-o; pos1(stem,0); %bottom right rt x2r=hround(w-.75u); y2r=.5x_height; pos2(hair,0); %right bulge lft x5r=hround(1.5u); y5-.5stem=-o; pos5(stem,-180); %bottom left top y4r=x_height+o; x4r=.5[lft x2l,rt x5l]; %top of arch pos6(hair,180); y6=y2; %where handle attaches if straight: x1=x2; x5=x6; pos4(stem,90); %yawn... filldraw double_circ_stroke z1e--pulled_arc.e(2,4)&pulled_arc.e(4,6)--z5e; else: if serifs: %%<< aggiunto questo if rt x1r=hround (rt x2r-.25); else: rt x1r= rt x2r-u; fi z2'l=z2'r=up; %%<< e mossa questa assegn. filldraw circ_stroke z1e{up}...gr_arc.e(2,3,4)(hair,stem,.8); %right leg filldraw circ_stroke z5e{(z4-z5) yscaled 3}...z4e{-z4'e}; %left leg z9=((0,y6)--(w,y6)) intersectionpoint (z5r{(z4-z5) yscaled 3}...z4r{-z4'r}); x6r=x9; fi pos8(vstem,0); rt x8r=hround(lft x6r-.75u); %end of handle pos7(vstem,-90); top y7l=x_height+o; z8r=z7r; %top of handle filldraw circ_stroke z8e{up}...z7e{right}...z6e{down}; numeric x_baryctr; x_baryctr=.1[x4,x7]; %accent reference numeric pos_stem; pos_stem=x5; %iota reference fi fi enddef; cmchar "Lowercase eta"; beginchar("h",dims); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if serifs: adjust_fit(.7serif_fit#,.7serif_fit#); fi fi this_letter; penlabels(1,2,3,4,5,6,7,8); endchar;% "Lowercase eta" iff(not barebones): cmchar "Lowercase eta with grave"; beginchar(oct"230",width#,acc_ht#,desc_depth#); this_letter; if not small_caps: grave(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase eta with rough breathing"; beginchar(oct"231",width#,acc_ht#,desc_depth#); this_letter; if not small_caps: spirit(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase eta with smooth breathing"; beginchar(oct"232",width#,acc_ht#,desc_depth#); this_letter; if not small_caps: spirit(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase eta with grave and iota subscript"; beginchar(oct"234",width#,if small_caps:height#else:acc_ht#fi,desc_depth#); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if slitex: adjust_fit(0,.5[vair#,stem#]+.7(.5[vair#,stem#])+.3tiny#+u#); elseif serifs: adjust_fit(.7serif_fit#,serif_fit#+.5[vair#,stem#]+.7(jut#+u#)if monospace:+tiny# fi+.5u#); else: adjust_fit(0,+.5[vair#,stem#]+.7u#); fi gen_letter; else: this_letter; grave(x_baryctr); fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase eta with rough breathing and iota subscript"; beginchar(oct"235",width#,if small_caps:height#else:acc_ht#fi,desc_depth#); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if slitex: adjust_fit(0,.5[vair#,stem#]+.7(.5[vair#,stem#])+.3tiny#+u#); elseif serifs: adjust_fit(.7serif_fit#,serif_fit#+.5[vair#,stem#]+.7(jut#+u#)if monospace:+tiny# fi+.5u#); else: adjust_fit(0,+.5[vair#,stem#]+.7u#); fi gen_letter; else: this_letter; spirit(x_baryctr)<; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase eta with smooth breathing and iota subscript"; beginchar(oct"236",width#,if small_caps:height#else:acc_ht#fi,desc_depth#); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if slitex: adjust_fit(0,.5[vair#,stem#]+.7(.5[vair#,stem#])+.3tiny#+u#); elseif serifs: adjust_fit(.7serif_fit#,serif_fit#+.5[vair#,stem#]+.7(jut#+u#)if monospace:+tiny# fi+.5u#); else: adjust_fit(0,+.5[vair#,stem#]+.7u#); fi gen_letter; else: this_letter; spirit(x_baryctr)>; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase eta with acute"; beginchar(oct"240",width#,acc_ht#,desc_depth#); this_letter; if not small_caps: acute(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase eta with rough breathing and acute"; beginchar(oct"241",width#,acc_ht#,desc_depth#); this_letter; if not small_caps: spirit_acute(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase eta with smooth breathing and acute"; beginchar(oct"242",width#,acc_ht#,desc_depth#); this_letter; if not small_caps: spirit_acute(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase eta with acute and iota subscript"; beginchar(oct"244",width#,if small_caps:height#else:acc_ht#fi,desc_depth#); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if slitex: adjust_fit(0,.5[vair#,stem#]+.7(.5[vair#,stem#])+.3tiny#+u#); elseif serifs: adjust_fit(.7serif_fit#,serif_fit#+.5[vair#,stem#]+.7(jut#+u#)if monospace:+tiny# fi+.5u#); else: adjust_fit(0,+.5[vair#,stem#]+.7u#); fi gen_letter; else: this_letter; acute(x_baryctr); fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase eta with rough breathing and grave"; beginchar(oct"243",width#,acc_ht#,desc_depth#); this_letter; if not small_caps: spirit_grave(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase eta with smooth breathing and grave"; beginchar(oct"253",width#,acc_ht#,desc_depth#); this_letter; if not small_caps: spirit_grave(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase eta with rough breathing and grave and iota subscript"; beginchar(oct"247",width#,if small_caps:height#else:acc_ht#fi,desc_depth#); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if slitex: adjust_fit(0,.5[vair#,stem#]+.7(.5[vair#,stem#])+.3tiny#);% +u# elseif serifs: adjust_fit(.7serif_fit#,serif_fit#+.5[vair#,stem#]+.7(jut#+u#)if monospace:+tiny# fi+.5u#); else: adjust_fit(0,+.5[vair#,stem#]+.7u#); fi gen_letter; else: this_letter; spirit_grave(x_baryctr)<; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase eta with smooth breathing and grave and iota subscript"; beginchar(oct"257",width#,if small_caps:height#else:acc_ht#fi,desc_depth#); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if slitex: adjust_fit(0,.5[vair#,stem#]+.7(.5[vair#,stem#])+.3tiny#+u#); elseif serifs: adjust_fit(.7serif_fit#,serif_fit#+.5[vair#,stem#]+.7(jut#+u#)if monospace:+tiny# fi+.5u#); else: adjust_fit(0,+.5[vair#,stem#]+.7u#); fi gen_letter; else: this_letter; spirit_grave(x_baryctr)>; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase eta with rough breathing, acute and iota subscript"; beginchar(oct"245",width#,if small_caps:height#else:acc_ht#fi,desc_depth#); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if slitex: adjust_fit(0,.5[vair#,stem#]+.7(.5[vair#,stem#])+.3tiny#+u#); elseif serifs: adjust_fit(.7serif_fit#,serif_fit#+.5[vair#,stem#]+.7(jut#+u#)if monospace:+tiny# fi+.5u#); else: adjust_fit(0,+.5[vair#,stem#]+.7u#); fi gen_letter; else: this_letter; spirit_acute(x_baryctr)<; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase eta with smooth breathing and acute and iota subscript"; beginchar(oct"246",width#,if small_caps:height#else:acc_ht#fi,desc_depth#); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if slitex: adjust_fit(0,.5[vair#,stem#]+.7(.5[vair#,stem#])+.3tiny#+u#); elseif serifs: adjust_fit(.7serif_fit#,serif_fit#+.5[vair#,stem#]+.7(jut#+u#)if monospace:+tiny# fi+.5u#); else: adjust_fit(0,+.5[vair#,stem#]+.7u#); fi gen_letter; else: this_letter; spirit_acute(x_baryctr)>; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase eta with circumflex"; beginchar(oct"250",width#,if small_caps:height#else:circ_ht#fi,desc_depth#); this_letter; if not small_caps: squeeze:=false; circumflex(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase eta with rough breathing and circumflex"; beginchar(oct"251",width#,Circ_ht#,desc_depth#); this_letter; if not small_caps: squeeze:=true; spirit_circumflex(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase eta with smooth breathing and circumflex"; beginchar(oct"252",width#,Circ_ht#,desc_depth#); this_letter; if not small_caps: squeeze:=true; spirit_circumflex(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase eta with circumflex and iota subscript"; beginchar(oct"254",width#,if small_caps:height#else:circ_ht#fi,desc_depth#); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if slitex: adjust_fit(0,.5[vair#,stem#]+.7(.5[vair#,stem#])+.3tiny#+u#); elseif serifs: adjust_fit(.7serif_fit#,serif_fit#+.5[vair#,stem#]+.7(jut#+u#)if monospace:+tiny# fi+.5u#); else: adjust_fit(0,+.5[vair#,stem#]+.7u#); fi gen_letter; else: this_letter; squeeze:=false; circumflex(x_baryctr); fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase eta with rough breathing, circumflex and iota subscript"; beginchar(oct"255",width#,if small_caps:height#else:Circ_ht#fi,desc_depth#); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if slitex: adjust_fit(0,.5[vair#,stem#]+.7(.5[vair#,stem#])+.3tiny#+u#); elseif serifs: adjust_fit(.7serif_fit#,serif_fit#+.5[vair#,stem#]+.7(jut#+u#)if monospace:+tiny# fi+.5u#); else: adjust_fit(0,+.5[vair#,stem#]+.7u#); fi gen_letter; else: this_letter; squeeze:=true; spirit_circumflex(x_baryctr)<; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase eta with smooth breathing, circumflex and iota subscript"; beginchar(oct"256",width#,if small_caps:height#else:Circ_ht#fi,desc_depth#); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if slitex: adjust_fit(0,.5[vair#,stem#]+.7(.5[vair#,stem#])+.3tiny#+u#); elseif serifs: adjust_fit(.7serif_fit#,serif_fit#+.5[vair#,stem#]+.7(jut#+u#)if monospace:+tiny# fi+.5u#); else: adjust_fit(0,+.5[vair#,stem#]+.7u#); fi gen_letter; else: this_letter; squeeze:=true; spirit_circumflex(x_baryctr)>; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase eta with iota subscript"; beginchar(oct"371",width#,height#,desc_depth#); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); if slitex: adjust_fit(0,.5[vair#,stem#]+.7(.5[vair#,stem#])+.3tiny#+u#); elseif serifs: adjust_fit(.7serif_fit#,serif_fit#+.5[vair#,stem#]+.7(jut#+u#)if monospace:+tiny# fi+.5u#); else: adjust_fit(0,+.5[vair#,stem#]+.7u#); fi gen_letter; else: this_letter; fi iota_sub(pos_stem); endchar; %picture pic.iota; picture savedpicture; currentbreadth:=0; if monospace: % theta def dims = 8.5u#,asc_height#,0 enddef; else: def dims = if cbroman:8 elseif cbleipzig:8 else:9 fi u#,if small_caps: sclc*x_height# else: asc_height# fi,0 enddef; fi def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter= if small_caps: italcorr .7*height#*slant-.5u#; adjust_fit(0,0); numeric light_curve; light_curve=hround(curve-2stem_corr); penpos1(vair,90); penpos3(vround(vair+.5vair_corr),-90); penpos2(light_curve,180); penpos4(light_curve,0); if monospace: x2r=hround 1.5u; interim superness:=sqrt superness; % make |"O"|, not |"0"| else: x2r=hround (u/2); fi x4r=w-x2r; x1=x3=.5w; y1r=h+o; y2=y4=.5h-vair_corr; y3r=-o; 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 pickup crisp.nib; pos5(vstem,90); pos6(vstem,90); lft x5=w-rt x6=hround(x2l+u)+1; y5=y6=.5[y1l,y3l]; filldraw stroke z5e--z6e; % bar if serifs: pos7(hair,0); pos8(hair,0); pos9(hair,0); pos10(hair,0); x7l=x8l=x5; x9r=x10r=x6; y7-y5r=y9-y6r=y5l-y8=y6l-y10=vround .05h; filldraw stroke z7e--z8e; % left serif filldraw stroke z9e--z10e; fi % right serif math_fit(-.3*height#*slant-.5u#,ic#-.5u#); else: if (monospace or monotoniko or SansSerif): pickup fine.nib; lft x4r=w-rt x8r=hround .75u; y4r=y8r=.5h; %left and right bulges x2r=x6r=.5w; top y2r=h+oo; bot y6r=-oo; %top and bottom pos4(stem,180); pos8(stem,0); pos2(stem,90); pos6(stem,-90); filldraw stroke z6e{right}...z8e{up}...z2e{left}...z4e{down}...{right}z6e; pos4`(bar,90); pos8`(bar,90); x4`=x4; x8`=x8; y4`=y8`=.05[y4,y2]; filldraw stroke z4`e--z8`e; %bar else: if cursive: if slitex: pickup fine.nib; fi pos0(hair,90); pos1(stem,45); pos2(stem,0); lft x0=0; y0=y1l; x2l=stem; y2l=3/4x_height; x1l=.5[x0,x2l];top y1r=x_height+oo; pos3(stem,0); pos4(hair,90); pos5(stem,180); x3=x2; y3=bar_height; x4=w/2=.5[x1l,x5l]; bot y4l=-oo; y5=y3; pos6(stem,180); pos7(if not serifs: .7 fi hair,270); pos8(stem,if (slitex or not serifs):-25 else:0 fi); pos9(hair,90); x6=x5; h-y6=y5; x7=x4; top y7l=h+oo; if slitex: x8l=x3r else: if serifs: x8=x3 else: x8=x3r fi fi; y8=.5[y7l,y1r]; rt x9=w; if (slitex or not serifs): y9r=y1l else: y9l=y1r fi; filldraw stroke z0e..{right}z1e..{down}z2e..{down}z3e ..{right}z4e..{up}z5e..{up}z6e..{left}z7e..{down}z8e..{right}z9e; elseif cbleipzig: adjust_fit(.5u#,.75u#); italcorr .9*height#*slant-.5u#; pos0(hair,160); pos2(stem,0); lft x0r=0; y0l=.7[y1l,y2l]; x2l=stem; y2l=3/4x_height; x1l=.5[x0l,x2l];x1r=.5[x0r,x2r]; top y1r=x_height=y1l+.5stem; z1=.5[z1l,z1r]; pos3(stem,0); x3=x2; y3=.8bar_height; pos6(stem,180);x6=x5;y6=y3; x4l=.5[x3l,x6l];bot y4l=-oo=y4r-hair;x4r=.5[x3r,x6r];z4=.5[z4r,z4l]; pos5(stem,180); w/2=.5[x1l,x5l]; y5=h/2; top y7l=h+oo=bot y7r+.7hair;x7l=.5[x8l,x5l];x7r=.5[x8r,x5r];z7=.5[z7r,z7l]; pos8(.6[stem,hair],0); pos9(hair,25); x8l=x1r; y8=.45[y7l,y1r]; rt x9r=w; y9r=.5[y11,y5]; pos11(hair,90); x11=.7[x1,x5];y11=x_height; pos10(.1[hair,stem],0); x10l=x9; y10=.9[y6,y5];%y9-.5stem; filldraw double_circ_stroke z0e{up}...z1e..{down}z2e..{down}z3e ..{right}z4e..{up}z6e--z5e{up}...{left}z7e..{down}z8e..z11e..z9e...{(slant,-1)}z10e; elseif cbroman: pos1(hair,90); x1=w/2; top y1r=h+oo; pos2(stem,180);x2r=u/2; y2=h/2; pos3(hair,-90);x3=x1; bot y3r=-oo; pos4(stem,0);x4r=w-x2r; y4=y2; z5r=z1r;z5l=z1l; filldraw stroke z1e{left}...z2e...z3e...z4e...{left}z5e; pos6(.3[hair,stem],90); z6=z2; pos7(.3[hair,stem],90); z7=z4; filldraw stroke z6e--z7e; else: adjust_fit(if SansSerif:1.3else:.5fi u#,.75u#); pickup fine.nib; numeric light_curve; light_curve=hround .5[stem,curve]; x0=0; x2-.5stem=hround(2.5u-.5stem); hook_in(0,1,2); % opening hook pos2'(stem,-180); z2'=z2; pos3(stem,-180); pos4(vair,-90); pos5(light_curve,0); pos6(vair,90); pos7(hair,180); pos8(vair,270); x3=x2; x4=x6=.5[x3,x5]; rt x5r=hround(w-1.5u+.5light_curve); lft x7r=hround(3.25u-.5hair); x8+.5vair=hround(w+.5vair-epsilon); y3=.4x_height; bot y4r=-oo; y5=.5[y4,y6]; top y6r=h+oo; y7=.5[x_height,h]; y8=.5[bar_height,x_height]; filldraw stroke z2'e..{{interim superness:=hein_super; super_arc.e(3,4)}} & pulled_arc.e(4,5) & pulled_arc.e(5,6) ...{down}z7e...{4(x8-x7),y8-y7}z8e; % bowl and loop math_fit(-2/3x_height#*slant+.5hair#+.5u#,ic#); fi fi fi enddef; cmchar "Lowercase theta"; beginchar("j",dims); this_letter; penlabels(0,a,1,2,3,4,4`,5,6,7,8,8`,9,10,11); endchar;% "Lowercase theta" picture savedpicture; currentbreadth:=0; % lowercase iota def width = if slitex and (not monospace): 6.3u else: 4.5u fi enddef; def dims = width#,if small_caps:sclc*fi x_height#,0 enddef; def ital = 0 enddef; def fit_params = if small_caps: serif_fit#,serif_fit# elseif SansSerif: 0,.25u# else: 0,0 fi enddef; % def gen_letter= italcorr height#*slant-.25u#; if small_caps: pickup tiny.nib; pos1(stem,0); pos2(stem,0); lft x1l=lft x2l=hround(.5w-.5stem); top y1=h; bot y2=0; filldraw stroke z1e--z2e; % stem if serifs: dish_serif(1,2,a,1/3,1.05jut,b,1/3,1.05jut); % upper serif dish_serif(2,1,c,1/3,1.05jut,d,1/3,1.05jut); % lower serif else: if slitex: dish_serif(1,2,a,1/3,.71u,b,1/3,.71u); % upper serif dish_serif(2,1,c,1/3,.71u,d,1/3,.71u); % lower serif fi fi math_fit(0,.5ic#); numeric x_baryctr; x_baryctr=x1; else: if cursive and serifs and not monospace: numeric angolo; angolo=angle((hair,stem)); pos1(hair,90); pos2(stem,angolo); pos3(stem,0); x1=0; x2=x3l; x3=w/2; y1=y2l; y2r=h+oo; y3=2/3h; pos4(stem,0); x4=x3; y4=y3/2; pos5(stem,angolo); x5=x4r; bot y5l=-oo; pos6(hair,90); x6l=w; y6=y5r; filldraw z1l...z2l..{down}z3l..{down}z4l..{right}z5l..z6l--%<> z6r...z5r..z4r{up}..{up}z3r..{left}z2r..z1r--cycle; numeric angolo; numeric x_baryctr; x_baryctr=x3; elseif cbleipzig: pos1(stem,0); x1l=hround .75u; y1=h; pos2(.3[stem,hair],0); x2l=x1l; y2=h/4; x3r=.5[x2r,x4r]; x3l=.5[x2l,x4l];bot y3l=-oo=y3r-.4[hair,stem];z3=.5[z3r,z3l]; pos4(hair,180); x4=w-x1l; y4r=min(2stem,bar_height/2); filldraw circ_stroke z4e{(z3-z4)yscaled3}..{left}z3e..z2e---z1e; numeric x_baryctr; x_baryctr=.1[x1,x3]; elseif cbroman: pickup tiny.nib; pos1(stem,0); x1=w/2; top y1=h; pos2(stem,0); x2=x1; bot y2=0; filldraw stroke z1e--z2e; dish_serif(2,1,c,1/3,.8jut,d,1/3,.8jut); serif(1,2,a,1/3,-.8jut); numeric x_baryctr; x_baryctr=x1; elseif SansSerif: pickup fine.nib; pos1(stem,0); x1l=hround .75u; y1=h; pos2(.3[stem,hair],0); x2l=x1l; y2=h/4; x3r=.5[x2r,x4r]; x3l=.5[x2l,x4l];bot y3l=-oo=y3r-.8(.4[hair,stem]);z3=.5[z3r,z3l]; pos4(.7hair,180); x4=w-x1l; y4r=min(2stem,bar_height/2); filldraw stroke z4e{down}..{left}z3e..z2e---z1e; numeric x_baryctr; x_baryctr=.1[x1,x3]; else: pickup fine.nib; pos1(flare,180); lft x1r=hround u; top y1=x_height+oo; %top numeric neck; neck=min(flare,.2[hair,stem]); pos2(neck,180); %neck .2[lft x2r,rt x2l]=.2[lft x1r,rt x1l]; if monowidth: pos3(curve,-90); bot y3r=-oo; %bottom y2r=2[bot y3r,top y3l]; lft x4l-rt x2l=u; y4r+.5neck=vround y2r; x3=.5[x2,x4]; pos4(neck,0); %tip of hook filldraw stroke z4e{down}...z3e...z2e---z1e; elseif slitex: pos3(curve,-90); bot y3r=-oo; %bottom y2r=2/3math_axis; x2+x4=w; y4r=vround y2r; x3=.5[x2,x4]; pos4(neck,0); %tip of hook filldraw stroke z4e{down}...z3e...z2e---z1e; else: bot y3r=-oo; top y3l=curve; %bottom x3r=.5[x2r,x4r]; z3=.5[z3r,z3l]; y2r=1.5[bot y3r,top y3l]; z4l=z4r=z4; top y4r=y2r; x4r=w-x2r; x3l=.5[x2l,x4l]; path p.r, p.l; forsuffixes e=r,l: p.e=z1e---z2e...z3e...z4e; endfor rt x3.5r=hround(rt xpart directionpoint up of p.r); z4'r=direction 3 of p.r; z3'r=direction 2 of p.r; forever: %avoid bad vertical tangent between 2l and 3l a_:=directiontime down of p.l; exitif a_<0; % exit if vert. tang. does not exist x2.5l:= rt xpart point a_ of p.l; exitif abs(hround(x2.5l)-x2.5l)<.05; x2l:=x2l+hround(x2.5l)-x2.5l; p.l:=(z1l---z2l...z3l...z4l); endfor p.r:=z1r---z2r...club.r(3,3.5,4); %avoid bad vertical tangent between 3r and 4r filldraw stroke p.e; fi if monospace: currentpicture:=currentpicture shifted (.5w-x3,0); fi numeric x_baryctr; x_baryctr=x1 if monospace:+.5w-x3 fi; fi fi enddef; cmchar "Lowercase iota"; beginchar("i",dims); adjust_fit(fit_params); this_letter; penlabels(1,2,3,4,5,6); endchar;% "Lowercase iota" iff(not barebones): cmchar "Lowercase iota with grave"; beginchar(oct"310",width#,acc_ht#,0); this_letter; if (not small_caps): grave(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase iota with rough breathing"; beginchar(oct"311",width#,acc_ht#,0); this_letter; if (not small_caps): spirit(x_baryctr if serifs: +.25u fi)<;fi endchar; iff(not barebones): cmchar "Lowercase iota with smooth breathing"; beginchar(oct"312",width#,acc_ht#,0); this_letter; if (not small_caps): spirit(x_baryctr if serifs: -.25u fi)>; fi endchar; iff(not barebones): cmchar "Lowercase iota with acute"; beginchar(oct"320",width#,acc_ht#,0); this_letter; if (not small_caps): acute(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase iota with rough breathing and acute"; beginchar(oct"321",width#,acc_ht#,0); this_letter; if (not small_caps): spirit_acute(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase iota with smooth breathing and acute"; beginchar(oct"322",width#,acc_ht#,0); this_letter; if (not small_caps): spirit_acute(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase iota with rough breathing and grave"; beginchar(oct"313",width#,acc_ht#,0); this_letter; if not small_caps: spirit_grave(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase iota with smooth breathing and grave"; beginchar(oct"323",width#,acc_ht#,0); this_letter; if not small_caps: spirit_grave(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase iota with circumflex"; beginchar(oct"330",width#,circ_ht#,0); this_letter; if (not small_caps): squeeze:=false; circumflex(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase iota with rough breathing and circumflex"; beginchar(oct"331",width#,Circ_ht#,0); this_letter; if (not small_caps): squeeze:=true; spirit_circumflex(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase iota with smooth breathing and circumflex"; beginchar(oct"332",width#,Circ_ht#,0); this_letter; if (not small_caps): squeeze:=true; spirit_circumflex(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase iota with diaeresis"; beginchar(oct"360",width#,circ_ht#,0); this_letter; diaeresis(x_baryctr); endchar; iff(not barebones): cmchar "Lowercase iota with diaeresis and grave"; beginchar(oct"361",width#,acc_ht#,0); this_letter; if (not small_caps): diaeresis_grave(x_baryctr); else: diaeresis(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase iota with diaeresis and acute"; beginchar(oct"362",width#,acc_ht#,0); this_letter; if (not small_caps): diaeresis_acute(x_baryctr); else: diaeresis(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase iota with diaeresis and circumflex"; beginchar(oct"363",width#,Circ_ht#,0); this_letter; if (not small_caps): squeeze:=true; diaeresis_circumflex(x_baryctr); else: diaeresis(x_baryctr); fi endchar; picture savedpicture; currentbreadth:=0; def dims = if small_caps: % kappa 11u#,sclc*x_height#,0 elseif monotoniko: 8.5u#,x_height#,0 %elseif cbleipzig: %8.3u#,x_height#,0 elseif cbroman: 8.7u#,x_height#,0 elseif SansSerif: 8.7u#,x_height#,0 else: 9.5u#,x_height#,0 fi enddef; def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter= if small_caps: % maiuscoletto italcorr height#*slant-.5u#; adjust_fit(.7serif_fit#,.7serif_fit#); numeric right_jut,stem[],alpha[]; if serifs: right_jut=.6jut; else: right_jut=.4tiny; fi pickup tiny.nib; pos1(fudged.stem,0); pos2(fudged.stem,0); % old: cap_stem lft x1l=lft x2l=hround (max(2u,3u-.5fudged.stem)-.5u); top y1=h; bot y2=0;% idem filldraw stroke z1e--z2e; % stem stem2=max(tiny.breadth,fudged.stem-3stem_corr);% idem stem1=max(tiny.breadth,fudged.hair if hefty:-3stem_corr fi); top y3=h; rt x3r=hround(r-letter_fit-u-right_jut); bot y6=0; rt x6r=hround(r-letter_fit-.75u-right_jut); x4=x1; y4=1/3h; alpha1=diag_ratio(1,.5(stem1-tiny),y3-y4,x3r-x4); penpos3(alpha1*(stem1-tiny),0); penpos4(whatever,-90); alpha2=diag_ratio(1,.5(stem2-tiny),y1-y6,x6r-x1); penpos6(alpha2*(stem2-tiny),0); forsuffixes $=l,r: y3'$=h; y6'$=0; z4$=z3'$+whatever*(z3-z4); z5$=z6'$+whatever*(z1-z6)=whatever[z3,z4]; endfor z5=.5[z5l,z5r]; z3'r=z3r+penoffset z3-z4 of currentpen+whatever*(z3-z4); % we have also |z3'l=z3l+penoffset z4-z3 of currentpen+whatever*(z3-z4)|;\] z6'r=z6r+penoffset z1-z6 of currentpen+whatever*(z1-z6); z6'l=z6l+penoffset z6-z1 of currentpen+whatever*(z1-z6); fill z4r--diag_end(4r,3'r,1,.5,3'l,4l)--z4l--cycle; % upper diagonal fill z5l--diag_end(5l,6'l,.5,1,6'r,5r)--z5r--cycle; % lower diagonal if serifs: numeric inner_jut; if rt x2r+jut+.5u+1<=lft x6l-jut: inner_jut=jut; else: rt x2r+jut+.5u+1=lft x6l-inner_jut; fi dish_serif(1,2,a,1/3,jut,b,1/3,jut); % upper stem serif dish_serif(2,1,c,1/3,jut,d,1/3,jut); % lower stem serif dish_serif(3,4,e,2/3,1.2jut,f,1/2,right_jut)(dark); % upper diagonal serif dish_serif(6,5,g,1/2,inner_jut,h,1/3,right_jut)(dark); % lower diagonal serif fi math_fit(0,.5ic#); else: % minuscolo adjust_fit(0,0); if cursive and not SansSerif: % corsivo minuscolo escluso sans if serifs and not monospace:% corsivo minuscolo normale pos0(hair,90); pos1(stem,45); pos2(stem,0); pos3(1.2stem,0); top y1r=h+oo; y3=0; y2l=5/6y1; x1=x2l; x2r=x3r; lft x0=.5u; y0=y1l; x3l=min(x0+.8stem,1.5u); filldraw stroke z0e{(z1r-z0l) yscaled 2}..{right}z1e..{z3-z2}z2e--z3e; % left bar s_a:=85; s_c:=12; pos4(vair,180); pos5(stem,90); pos8(hair,80); x4l=x3r; bot y4=y3; rt x8r=w-x0; x5=.2[x8l,x1r]; top y5r=h; top y8r=.8*(top y5r); filldraw stroke z8e...z5e{left}...{-dir s_a}z4e; % ascending stroke s_b:=60; path gamba; gamba=z4{dir s_a}...{right}z5; pos6(stem,s_b); pos7(.3stem,45); pos9(.5hair,70); z6=directionpoint (dir s_b) of gamba; path gamba; bot y7l=0; x7r=x9l-.3stem; rt x9r=w-x0; y9l=y7r; pos10(stem,-15); y10r=y9; x10r=x7r-.3stem; z11-z6=whatever*(z10l-z6); y11=0; z12=.5[z11,z7l]; z13=.5[z11,z10l]; filldraw z9r{(z7l-z9r) yscaled 2}..z7r{left}...z10r--z6r--z6l--z10l ..controls z13 and z12..z7l{right}..{z9r-z9l}z9l--cycle; % descending stroke else: % corsivo minuscolo monospace e slides if monospace or slitex: % corsivo minuscolo monospace e slides pickup fine.nib; else: % corsivo minuscolo sans; ramo morto pickup pencircle; fi pos1(1.2stem,180); pos2(stem,180); pos3(1.2stem,180); top y1 = h = 2y2; bot y3=0; lft x2r=u; x1l=x2l=x3l; filldraw stroke z1e..z2e..z3e; % left bar s_a:=90; s_c:=12; pos4(vair,180); pos5(stem,90-s_c); x4l=x3l; bot y4=bot y3; rt x5=w-x3r+o; top y5r=h; filldraw stroke z5e{dir(180-s_c)}...{-dir s_a}z4e; % ascending stroke s_b:=60; path gamba; gamba=z4{dir s_a}...{dir-s_c}z5; pos6(if not monospace: 0.7fi stem,s_b); pos7(.5[vair,stem],90); z6=directionpoint (dir s_b) of gamba; path gamba; bot y7l=0; rt x7=w-x3r; x10=.7[x4,x7l]; y10=0; filldraw stroke z7e{left}...{z6-z10}z6e; % descending stroke fi elseif cbleipzig: pickup fine.nib; numeric barangle; barangle=22; pos1(hair,135); lft x1r=u/2; top y1r+hair= bot y2l; pos2(stem,80); top y2r=h+oo; x2l=.22w=.5[x1l,x3l]; pos3(.4[hair,stem],0); y3=2h/3; pos4(stem,0);bot y4=-oo; z4l=z1l + whatever*(slant,-2); filldraw circ_stroke z1e{(z2l-z1l)yscaled 4}...z2e{right}...z3e{down}..z4e; z5r=z4l; z5l=z4r; pos6(.4[hair,stem],135); z6=(w/2,h/2)-whatever*dir(barangle); rt x6l= rt x3r; pos7(.4[hair,stem],135); (w/2,h/2)=.5[z6,z7]; filldraw stroke z5e{up}...z6e...z7e; pos8(stem,135); top y8r=h+oo; z8l=z12+whatever*(-slant,2); pos9(.4[hair,stem],180); z9r=z7r; pos10(.4[hair,stem],180); x10r=x9r; y10=h/3; bot y11r=-oo=top y11l-stem; x11l=.5[x10l,x12l]; x11r=.5[x10r,x12r]; pos12(stem/2,-60); x12r= w-lft x1r; y12l=y11l+stem; pair za; path cbp; cbp= z8r{(z9r-z8r)xscaled2}...z9r; za=direction 1 of cbp; filldraw z6l{dir(barangle)}..z8l{(z8l-z6l)yscaled3}...z8r{(z9r-z8r)xscaled2}...z9r--cycle; filldraw circ_stroke z12e{down}...z11e{left}...z10e...{-za}z9e; pair za; path cbp; elseif cbroman: pickup tiny.nib; pos1(stem,0); lft x1l=1.1jut; top y1=h; pos2(stem,0);x2l=x1l; bot y2=0; pos3(hair,0); rt x3r=rt x1r; y3=h/3; pos4(hair,0); rt x4r=w- lft x1l; top y4=top y1; pos5(stem,angle(z4-z3)); z5=.4[z3,z4]; pos6(stem,0); rt x6r=rt x4r; bot y6=0; filldraw stroke z1e--z2e; filldraw stroke z3e--z4e; filldraw stroke z6e--z5e; dish_serif(2,1,a,1/3,.8jut,b,1/3,.8jut); serif(1,2,c,1/3,-.8jut); dish_serif(4,3,f,1/3,.7jut,g,1/3,.7jut); dish_serif(6,5,i,1/3,.6jut,j,1/3,.8jut); elseif SansSerif: pickup fine.nib; pos1(1stem,180); pos2(stem,180); pos3(stem,180); y1=h;y2=.35h; y3=0; lft x2r=u; x1l=x2l=x3l; filldraw stroke z1e--z3e; % left bar s_a:=90; s_c=12; pos4(.9stem,135); pos5(1.414*.9*stem,180); z4l=z2l; top y5r=h; z5=z4+whatever*dir(45); pos8(.9stem,90);z5l=z8r; pos9(.9stem,135); z9=.75[z4,.25[z5,z5l]]; filldraw stroke z4e--z9e{z9-z4}..{right}z8e;% ascending stroke pos6(stem,45); pos7(1.414*stem,0); z6=.20[z4,z5]; y7=0; z7=z6+whatever*dir(-45); filldraw stroke z7e--z6e; % descending stroke elseif slitex or monospace: % minuscolo regolare slides e typewriter pos1(1.2stem,180); pos2(stem,180); pos3(1.2stem,180); y1+(1.2stem)/2=h+o=2y2; y3-(1.2stem)/2=-o; lft x2r=u; x1l=x2l=x3l; filldraw double_circ_stroke z1e..z2e..z3e; % left bar s_a:=90; s_c=12; pos4(vair,180); pos5(stem,90-s_c); x4l=x3l; bot y4=y3; x5+.5stem=w-x2r+o; top y5r=h; filldraw circ_stroke z5e{dir(180-s_c)}...{-dir s_a}z4e; % ascending stroke s_b:=70; path gamba; gamba=z4{dir s_a}...{dir-s_c}z5; pos6(.7stem,s_b); pos7(.5[vair,stem],90); z6=directionpoint (dir s_b) of gamba; path gamba; bot y7l=0; rt x7+.5*(.5[vair,stem])=w-x3r; filldraw circ_stroke z7e{left}..{dir(s_b+90)}z6e; % descending stroke else: % minuscolo regolare %% versione Didot pickup fine.nib; x1-.5stem=hround .75u; y1-.5stem=-o; %lower left z1+z3=(w,h); z2=.5[z1,z3]; %upper right and middle z1'=(z3-z1) if monowidth: xscaled 1/2 fi; %slope at 1 and 3 pos1(stem,angle z1'+90); pos2(.6[hair,stem],angle z1'+90); pos3(stem,angle z1'+90); filldraw double_circ_stroke z1e{z1'}..z2e..{z1'}z3e; %diagonal stroke z4=if monowidth: z1 else: 1/4[z1,z3] fi; z4+z7=z3+z1; %handle attachments z4'=if monowidth: z1' else: (z3-z1) xscaled .25 fi; %slope at 4 and 7 pos4(hair,angle z4'-90); pos7(hair,angle z4'+90); pos5(vstem,90); top y5r=h+o; pos6(vstem,180); z6l=z5l; lft x6r=hround(x1-.5stem-.25u); filldraw circ_stroke z6e{up}...z5e{right}...z4e{-z4'}; %left handle pos8(.5[vstem,stem],-90); bot y8r=-o; rt x9r=hround(x3+.5stem+.25u); pos9(.5[vstem,stem],0); z9l=z8l; filldraw circ_stroke z9e{down}...z8e{left}...z7e{z4'}; %right handle fi fi enddef; cmchar "Lowercase kappa"; beginchar("k",dims); this_letter; penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12); endchar;% "Lowercase kappa" picture savedpicture; currentbreadth:=0; def dims = if small_caps: % lambda 10u#,sclc*x_height#,0 elseif cbleipzig: 8.6u#,asc_height#,0 elseif cbroman: 8.5u#,asc_height#,0 else: 9.5u#,asc_height#,0 fi enddef; def ital = 0 enddef; def fit_params = if cbroman: 0,0 elseif small_caps: serif_fit#,serif_fit# else: -.25u#,-.25u# fi enddef; def krn = -.75u# enddef; def gen_letter= if small_caps: adjust_fit(fit_params); numeric left_stem,outer_jut,alpha; left_stem=hair if hefty: -3stem_corr fi; outer_jut=.7jut; x1l=w-x4r=l+letter_fit+outer_jut+.5u; y1=y4=0; x2-x1=x4-x3; x3r=x2r+apex_corr; y2=y3=h+apex_o+apex_oo; alpha=diag_ratio(2,left_stem,y2-y1,x4r-x1l-apex_corr); penpos1(alpha*left_stem,0); penpos2(alpha*left_stem,0); penpos3(alpha*stem,0); penpos4(alpha*stem,0); z0=whatever[z1r,z2r]=whatever[z3l,z4l]; if y0lower_notch: {left}(x4'-1,lower_notch){up}... fi {z5-z6}diag_in(6r,5r,1,5l)--cycle; % diagonal else: penpos5(whatever,0); penpos6(whatever,90); z5l=z1l; z6l=z4l; z7=z6l+(max(eps,stem-3stem_corr-tiny),0) rotated (angle(z5l-z6l)-90); z5r=z7+whatever*(z5l-z6l); z6r=z7+whatever*(z5l-z6l); filldraw stroke z5e..z6e; fi % diagonal if serifs: if hefty: serif(1,2,a,1/3,-jut); % upper left serif else: serif(5,6,a,1/3,-jut); fi % upper left serif dish_serif(2,1,b,1/2,jut,c,1/2,jut)(dark); % lower left serif dish_serif(3,4,e,1/2,jut,f,1/2,jut)(dark); fi % upper right serif math_fit(0,max(.5ic#-.5u#,0)); else: if cursive and serifs and not monospace: adjust_fit(.5stem#,0); pos1(hair,90); pos2(stem,45); pos3(stem,0); pos4(stem,45); lft x1l=0; x2l=5/4u; x2=x3l=x4l; y1= y2l; y2r=h; y3=3/4h; y4l=-o; filldraw stroke z1e..z2e..z3e--z4e; numeric nutop; nutop=if cbleipzig:.5else:1fi[hair,stem]; pos5(hair,135); pos6(nutop,180); z5l=z4r; x6l=w-if cbleipzig:3u/4 else:x2l fi; y6+.5nutop=h+.5o; filldraw circ_stroke z6e{down}..{dir(225)}z5e; elseif cbleipzig: adjust_fit(.5u#,0); numeric compl_slant_angle; compl_slant_angle=angle(u,slant*u); pos1(hair,180); pos3(stem*cosd45,0); pos4(stem,45); lft x1r=0; x2l=.4[x1l,x3l];x2r=.4[x1r,x3r]; y2r=h+oo=y2l+.5[hair,stem*cosd45];z2=.5[z2r,z2l]; x3l=x1l+if stem<1.5u:1.6fi u; z4l=z1l+whatever*dir(compl_slant_angle-90); y1l= y3l; y3=3/4h; y4l=-o; z4'=dir(225)yscaled if stem>1.5u:8else:4fi; filldraw circ_stroke z1e{(z2-z1)yscaled3}...z2e{right}..z3e...{z4'}z4e; numeric nutop; nutop=.9[hair,stem]; pos5(fine,135); pos6(nutop,180); pos7(.4[hair,stem],175); z5l=z4r; x6l=w-3u/4 ; y6+.5nutop=h+oo; y7=.6[y5,y6]; x7=x6; filldraw circ_stroke z6e{down}..z7e..{dir(225)}z5e; elseif cbroman: pickup tiny.nib; x0=w/2; bot y0=-oo; pos1(stem,0); lft x1l= jut; top y1= h; pos3(hair,0); rt x3r= w-jut; top y3=h; z4r=z2l=z0; z4l=z0+whatever*(z1l-z0)=z3l+whatever*(z3r-z0); z2r=z0+whatever*(z3r-z0)=z1r+whatever*(z1l-z0); z2 = .5[z2l,z2r]; z4=.5[z4l,z4r]; filldraw stroke z1e--z2e; filldraw stroke z3e--z4e; serif(1,2,a,1/3,-.8jut); dish_serif(3,4,c,1/3,.8jut,d,1/3,.8jut); elseif SansSerif: adjust_fit(fit_params); pickup fine.nib; pos0(hair,0); pos3(hair,0); top y0=h; bot y3=0; x0l=0; x3=.5w; z2=.8[z3,z0]+(.75u,0); z2'=(z0-z3) rotated-90; pos2(hair,angle(z2')); z1'=z0l-z2; pos1(hair/(cosd(angle(z0-z2)-90)),0);z1l=z0l; pos4(hair,10); pos5(hair,0); y5=y1; x5r+.25u=w-.5u=x4r; y4r=.8[y3,y5]; pos6(hair,angle((z4-z3)xscaled 1.25)-90); z6r=z3r; filldraw stroke z3e--z2e{z2-z3}...{z1'}z1e;% left stroke filldraw stroke z6e{(z4-z3)xscaled 1.25}..{up}z4e--z5e;% right stroke else: adjust_fit(fit_params); pickup fine.nib; rt x4r=hround(w-.75u); lft x4l-rt x4r=hround -.2[hair,stem]; %vert tangents x5=lft x4l; y5 +.5hair -oo =h; z5'l=z5'r=(u,-.2h); %right tip pos5(hair,angle z5'l+90); pos3(whatever,-90); bot y3r=-oo; x3=.5w; z3'l=z3'r=z5'l xscaled -2; %bottom z3l+whatever*z3'l=z3r+(stem-currentbreadth)*(dir(angle z3'l-90)); %width=stem filldraw circ_stroke club.e(5,4,3); y1+.5stem-oo=h; x1-.5stem=hround.75u; %left tip z1'=(9u,-h); pos1(stem/abs((sind(angle z1'-90))),180); z2r=z3r; z2l=z2r+(hair-currentbreadth)*(dir(angle z1'+90)); filldraw circ_stroke z1e{z1'}...{down}z2e; fi fi enddef; cmchar "Lowercase nu"; beginchar("n",dims); this_letter; penlabels(1,2,3,4,5,6,7,8); endchar;% "Lowercase nu" picture savedpicture; currentbreadth:=0; if small_caps: % xi def dims = 9.5u#,sclc*x_height#,desc_depth# enddef; else: def dims = if cbleipzig:7.5u#,asc_height#,desc_depth#else: 8.5u#,asc_height#,desc_depth# fi enddef; fi def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter= if small_caps: italcorr height#*slant-.35u#; adjust_fit(0,0); h:=vround(h-2stem_corr); numeric shaved_stem; shaved_stem=hround .9[vair,.85stem]; pickup crisp.nib; pos1(shaved_stem,90); pos2(hair,0); top y1r=h; x1=.5w; rt x2r=hround(w-.5u-.3beak_jut); y2=good.y(y1l-4/9beak)-eps; arm(1,2,a,.4beak_darkness,.3beak_jut); % upper right arm and beak pos3(hair,180); x3=w-x2; y3=y2; arm(1,3,b,.4beak_darkness,-.3beak_jut); % upper left arm and beak pos4(shaved_stem,-90); pos5(hair,0); bot y4r=0; x4=.5w; rt x5r=hround(w-.4u-.3beak_jut); y5=good.y(y4l+.5beak)+eps; arm(4,5,c,.4beak_darkness,.3beak_jut); % lower right arm and beak pos6(hair,180); x6=w-x5; y6=y5; arm(4,6,d,.4beak_darkness,-.3beak_jut); % lower left arm and beak pos7(shaved_stem,90); pos8(shaved_stem,90); lft x7=w-rt x8=hround if serifs: 2.5 else: 2 fi\\ u; top y7r=top y8r=vround(.52h+.5shaved_stem); filldraw stroke z7e--z8e; % middle bar if serifs: numeric xjut; if bot y2>top y7r+.75jut: xjut=.5jut; else: bot y2=top y7r+1.5xjut; fi pos11(hair,0); pos12(hair,0); y11=y12; pos13(hair,0); pos14(hair,0); y13=y14; lft x11l=lft x13l=w-rt x12r=w-rt x14r=hround 2.5u; top y11-bot y13=shaved_stem+2xjut; .5[y11,y13]=y7; filldraw stroke z11e--z13e; filldraw stroke z12e--z14e; % middle serifs fi math_fit(0,.5ic#); else: if cursive and serifs and not monospace: pos7(stem,180); lft x7r=hround(.75u); y7=1/3x_height; %big bulge pos8(stem,-135); bot y8r=0; x8=.5w; z8'r=z8'l=left; %inflection pt pos9(hair,-180); rt x9l=hround(w-.75u); %bottom right y6+.5hair=x_height+o; x6+.5hair=hround(rt x9l-.5u); %middle right numeric slope; slope=angle(5(x6-x7),y6-y8); pos6(hair,slope+90); z6'r=z6'l=dir slope; pos10(.5[hair,stem],90); y10l=-d+oo; y9=.5[y10r,y8r]; x10=hround x8r; filldraw double_circ_stroke %bowl and tail z10e{right}..z9e{up}..{left}z8e..{up}z7e..{dir(slope)}z6e; pos5(hair,1.5slope-90); z5=z6; %attachment z4=.5[z3,z5]+whatever*dir slope; %small bulge pos4(stem,-180); lft x4r=hround(lft x7r+.5u); pos3(hair,slope+90); top y3r=h-o; rt x3r=hround(rt x9l-.5u); %top rt filldraw double_circ_stroke z3e{-dir slope}..z4e{down}...z5e{dir 1.5slope}; pos2(hair,1.5slope+90); z2=z3; %where handle attaches pos1(stem,slope); lft x1l=hround(lft x7r+.5u); y1r+hair=h; %end of handle pos0(hair,0); x0=x1r; y0=h; filldraw circ_stroke z2e{-dir9/8slope}...z1e{up}...z0e; elseif cbleipzig: numeric tilt[]; pos1(hair,90);y1r=h; x1l=.6[x2l,x3l]; y2r=.5[y3r,y1r];y2l=.5[y3l,y1l];x2r=hround(.5u)=x2l-.5[hair,stem]; pos3(hair,-90);x3=2w/5; y3l=.5[x_height,h]; pos4(hair,90); z3=z4; pos5(hair,180); x5r=x16; y5=.5[y12,y7]; pos6(stem,-90); y6r=0;x6=2w/5; pos7(.2[stem,hair],90); y7=y3=y8; x8=x7+.5stem; z8=(w-u/2,-d/4)+whatever*dir(98); tilt1=angle((z7r-z4r) yscaled .7); pos9(stem,-90); y9=y6; x9=2w/3; x10l=w-x16r=x10r+.5[hair,stem]; y10l=.5[y9l,y11l];y10r=.5[y9r,y11r];z10=.5[z10r,z10l];y10=-.25desc_depth; pos11(hair,90);x11=x6; pos12(hair,-90); y14=y12; z12-.5[z6,z9]=whatever*(z3-.5[z6,z9]); pos13(hair,90); z13=z12; pos14(.2[stem,hair],90); y14=.55[y9l,y7l]; pos16(hair,180); x16r=hround(.5u); y16=.5[y14,y6]; z15=z14+(.5stem,0); z15=(w-u/2,-d/4)+whatever*dir(98); tilt2=angle((z14r-z13r) yscaled .7); filldraw circ_stroke z1e{left}...z2e...{dir(-tilt1)}z3e; % hook filldraw stroke z4e{dir(180+tilt1)}..z5e{down}..{dir(-tilt2)}z12e; % top bulge filldraw z3r{dir(-tilt1)}...z7l..z8..z7r...{dir(180+tilt1)}z4r..cycle; % top right filldraw z12r{dir(-tilt2)}...z14l..z15..z14r...{dir(180+tilt2)}z13r..cycle; % middle right filldraw stroke z13e{dir(180+tilt2)}..z16e{down}..{right}z6e; % bottom bulge filldraw circ_stroke z11e{right}..{up}z10e..{left}z9e--z6e; % bottom elseif cbroman: pos11(hair,90);x11=x7r; y11r=h; pos12(hair,90);x12=.7w; y12=y11; pos9(.5[hair,stem],180); x9r=x11; y9=.5[x_height,h]; pos8(hair,-90);x8=x12; y8l=x_height; pos7(.3[stem,hair],0); x7l=u/2; y7=bar_height; pos6(stem,90);y6l=0; x6=w/2; pos5(stem,90);y5l=y6l; x5=.5[x6,x4]; pos3(hair,-90); x3=w/2; y3=-(.5[.7bar_height,d]); y4l=.5[y3l,y5l]; x4r=x4l+.3[hair,stem]=w-u/2; y4r=.5[y3r,y5r];z4=.5[z4r,z4l]; filldraw double_circ_stroke z11e--z12e; filldraw circ_stroke z8e{left}...{up}z9e...{right}z12e; filldraw circ_stroke z3e{(z4-z3)xscaled 3}...{up}z4e...z5e---z6e..{up}z7e...{right}z8e; elseif SansSerif: pickup fine.nib; lft x7r=rt x7l- hair=hround(.75u); x7=.5[x7r,x7r]; %big bulge pos8(stem,-90); bot y8r=0; x8=.5w; z8'r=z8'l=left; %inflection pt pos9(hair,-180); rt x9l=hround(w-.75u); y9=-.5stem; %bottom right y6+.5stem=x_height+o; x6=hround(x9r); %middle right numeric slope; slope=angle(5(x6-x7),y6-y8); pos6(stem,90); z6'r=z6'l=right; pos10(vstem,-270); %y9=.5[y10r,y8r]; bot y10l=max(2y9-top y8l,-desc_depth-oo); x10-.5vstem=hround x8; filldraw stroke z10e{right}...z9e{up}...club.e(8,7,6); %bowl and tail pos5(hair,-90); z5r=z6l; %attachment z4l=.4[z3l,z5l]+whatever*dir slope; %small bulge pos4(vair,-180+slope); lft x4r=hround(lft x7r+1.5u); y3+.5stem=h+o; x3+.5stem=hround(rt x9l-.25u); pos3(stem,slope+90); %top rt filldraw stroke z3e{-dir slope}..z4e{down rotated slope}...z5e{right}; pos2(hair,slope+90); z2r=z3r; %where handle attaches pos1(curve,0); lft x1l=hround(lft x7r+.25u); y1r=y2r; %end of handle filldraw stroke z1e{down}...z2e{dir slope}; else: pickup fine.nib; lft x7r=rt x7l- hair=hround(.75u); x7=.5[x7r,x7r]; %big bulge pos8(stem,-90); bot y8r=0; x8=.5w; z8'r=z8'l=left; %inflection pt pos9(hair,-180); rt x9l=hround(w-.75u); y9=-.5stem; %bottom right y6+.5stem=x_height+o; x6+.5stem=hround(rt x9l-1.5u); %middle right numeric slope; slope=angle(5(x6-x7),y6-y8); pos6(stem,slope+90); z6'r=z6'l=dir slope; pos10(vstem,-270); y9=.5[y10r,y8r]; x10-.5vstem=hround x8; filldraw double_circ_stroke %bowl and tail z10e{right}...z9e{up}...club.e(8,7,6); pos5(hair,slope-90); z5l=z6r; %attachment z4=.5[z3,z5]+whatever*dir slope; %small bulge if serifs: pos4(vair,-180); else: pos4(.5vair,-180); fi lft x4r=hround(lft x7r+1.5u); y3+.5stem=h+o; x3+.5stem=hround(rt x9l-.25u); pos3(stem,slope+90); %top rt filldraw circ_stroke z3e{-dir slope}..z4e{down}...z5e{dir slope}; pos2(hair,slope+90); z2r=z3r; %where handle attaches pos1(curve,0); lft x1l=hround(lft x7r+.25u); y1+.5curve=h+o; %end of handle filldraw circ_stroke z1e{down}...z2e{dir slope}; fi fi enddef; cmchar "Lowercase xi"; beginchar("x",dims); this_letter; penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); endchar;% "Lowercase xi" picture savedpicture; currentbreadth:=0; if small_caps: % omicron def width = 10u enddef; def dims = width#,sclc*x_height#,0 enddef; else: def width = if cursive:8.5 elseif cbleipzig or cbroman:8.5 else:9.5 fi u enddef; def dims = width#,x_height#,0 enddef; fi def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter = if small_caps: italcorr .7*height#*slant-.5u#; adjust_fit(0,0); penpos1(vair',90); penpos3(vround(vair+1.5vair_corr),-90); penpos2(curve,180); penpos4(curve,0); if monospace: x2r=hround 1.5u; interim superness:=sqrt superness; % make |"O"|, not |"0"| else: x2r=.5hround 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 math_fit(-.3*height#*slant-.5u#,ic#-.5u#); else: if cursive or cbleipzig or cbroman or SansSerif: pos1(if cbleipzig:fine else:hair fi,90); pos2(stem,180); pos3(if cbleipzig:fine else:hair fi,270); pos4(stem,0); x1=x3=w/2; lft x2r=w- rt x4r=.75u; bot y3r = h-top y1r= -oo; y2=y4=h/2; filldraw stroke z1e{left}..z2e..z3e..z4e..{left}z1e; numeric x_baryctr; x_baryctr=x1; elseif monospace: spess:=max(hair,fine+eps); pos1(spess,90); pos2(spess,180); pos3(spess,270); pos4(spess,0); x1=x3=w/2; lft x2r=w- rt x4r=.75u; bot y3r = h-top y1r= -oo; y2=y4=h/2; filldraw stroke z1e{left}..z2e..z3e..z4e..{left}z1e; numeric x_baryctr; x_baryctr=x1; else: pickup fine.nib; lft x4r=hround .75u; x8r=w-x4r; y4r=y8r=.5x_height; %top and bottom top y2r=x_height+oo; bot y6r=-oo; x2r=x6r=.5w; %right and left filldraw stroke gr_arc.e(8,1,2)(vair,curve,otilt) & gr_arc.e(2,3,4)(vair,curve,otilt) & gr_arc.e(4,5,6)(vair,curve,otilt) & gr_arc.e(6,7,8)(vair,curve,otilt) ; numeric x_baryctr; x_baryctr=x2; %accent reference fi fi enddef; cmchar "Lowercase omicron"; beginchar("o",dims); this_letter; penlabels(1,2,3,4,5,6,7,8); endchar;% "Lowercase omicron" iff(not barebones): cmchar "Lowercase omicron with grave"; beginchar(oct"344",width#,acc_ht#,0); this_letter; if (not small_caps): grave(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase omicron with rough breathing"; beginchar(oct"345",width#,acc_ht#,0); this_letter; if (not small_caps): spirit(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase omicron with smooth breathing"; beginchar(oct"346",width#,acc_ht#,0); this_letter; if (not small_caps): spirit(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase omicron with acute"; beginchar(oct"354",width#,acc_ht#,0); this_letter; if (not small_caps): acute(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase omicron with rough breathing and acute"; beginchar(oct"355",width#,acc_ht#,0); this_letter; if (not small_caps): spirit_acute(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase omicron with smooth breathing and acute"; beginchar(oct"356",width#,acc_ht#,0); this_letter; if (not small_caps): spirit_acute(x_baryctr)>; fi endchar; iff(not barebones): iff(not barebones): cmchar "Lowercase omicron with rough breathing and grave"; beginchar(oct"347",width#,acc_ht#,0); this_letter; if not small_caps: spirit_grave(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase omicron with smooth breathing and grave"; beginchar(oct"357",width#,acc_ht#,0); this_letter; if not small_caps: spirit_grave(x_baryctr)>; fi endchar; picture savedpicture; currentbreadth:=0; def dims = if small_caps: % pi 10.5u#,sclc*x_height#,0 else: if cbroman: 9 elseif SansSerif: 10.5 elseif cbleipzig: 10.5 else: 9.5 fi u#,x_height#,0 fi enddef; def ital = 0 enddef; def fit_params = if cbroman or SansSerif:0else:-.25fi u#,0 enddef; def gen_letter = if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); adjust_fit(.7serif_fit#,.7serif_fit#); pickup tiny.nib; h:=vround(h-stem_corr); pos1(stem,0); pos2(stem,0); pos3(stem,0); pos4(stem,0); lft x1l=lft x2l=hround (max(2u,3u-.5stem)-u/2); x3=x4=w-x1; top y1=top y3=h; bot y2=bot y4=0; filldraw stroke z1e--z2e; % left stem filldraw stroke z3e--z4e; % right stem penpos5(cap_bar,90); penpos6(cap_bar,90); x5=x1; x6=x3; y5r=y6r=h; fill stroke z5e--z6e; % bar if serifs: numeric inner_jut; if rt x1r+jut+.5u+1<=lft x3l-jut: inner_jut=jut; else: rt x1r+inner_jut+.5u+1=lft x3l-inner_jut; fi dish_serif(1,2,a,1/3,jut,b,1/3,eps); % upper left serif dish_serif(2,1,c,1/3,jut,d,1/3,inner_jut); % lower left serif dish_serif(3,4,e,1/3,eps,f,1/3,jut); % upper right serif dish_serif(4,3,g,1/3,inner_jut,h,1/3,jut); fi % lower right serif math_fit(0,.5ic#); else: if cursive: adjust_fit(fit_params); if monospace or slitex: pickup fine.nib; fi pi_bar; %bar pos4(.5[stem,hair],0); pos7(hair,0); y4=y7=y2; %attachments lft x4l-(x1-.5hair)=lft x7l-rt x4r=rt x3-rt x7r; pos5(.5[stem,hair],0); pos8(hair,0); y5=y8=.5x_height; x5=x4; x8=x7; %midstems z6=whatever[z4,z5];bot y6=0; pos6(.5[stem,hair],0); filldraw stroke z6e...z5e---z4e; x9=x7+1.5u; bot y9l=-oo; pos9(.8[hair,stem],90); alpha_tail(9,10); %right stem filldraw stroke z10e...z9e{left}...z8e---z7e; elseif cbleipzig: cblpi_bar; %bar pos7(stem,0); z7r=z3; %right stem pos8(stem,0); pos10(.5[hair,stem],110); x8=x7-u/5; y8=2bar_height/3; x9r=.5[x8r,x10r]; x9l=.5[x8l,x10l]; bot y9l=-oo=top y9r-.5[hair,stem]; x10l=w-u/4; y10r=min(2stem,bar_height/2); filldraw circ_stroke z10e{(z9l-z10l) xscaled 0.2}...z9e{left}...z8e{up}...z7e; %right stem % pos4(.4[hair,stem],0); y4=y2; z4=z5+whatever*((z7-z8)yscaled3); %left stem pos5(.4[hair,stem],angle(z7-z8)-90); y5=2bar_height/3; x5l=x2+.1u; pos12(.5[hair,stem],-120); bot y6r=-oo=top y6l-.8[hair,stem];x6l=.5[x5l,x12l]; x6r=.5[x5r,x12r]; z12r-z1l=whatever*(-.5*slant,1); y12l=.5[y6l,y5]; filldraw circ_stroke z12e{(z6l-z12l)yscaled2}...{right}z6e...z5e{(z7-z8)}...z4e; elseif cbroman: pickup tiny.nib; pos1(stem,0);lft x1l=jut; top y1=h; pos2(stem,0); x2l=x1l; bot y2=0; pos3(stem,0); rt x3r=w-lft x1l; y3=y1; pos4(stem,0); x4r=x3r; y4=y2; pos5(hair,90);x5=x1; top y5r=top y1; pos6(hair,90);x6=x3; top y6r= top y1; filldraw stroke z5e--z6e; filldraw stroke z1e--z2e; filldraw stroke z3e--z4e; serif(1,2,a,1/3,-.8jut); serif(3,4,b,1/3,.8jut); dish_serif(2,1,c,1/3,.8jut,d,1/3,.8jut); dish_serif(4,3,e,1/3,.8jut,f,1/3,.8jut); elseif SansSerif: pickup fine.nib; pi_bar; %bar pos4(hair,0); pos7(hair,0); y4=y7=y2; %attachments x4l=x2;lft x7l-rt x4r=rt x3-rt x7r; pos5(hair,0); pos8(hair,0); y5=.5x_height; x5=x4; x8=x7;y8=1.6[y9l,y9r]; x6=x4; bot y6=0 if currentbreadth>0: -oo fi; %left stem numeric slope; slope=angle((z5-z6)xscaled2); pos6(stem,slope-90); filldraw stroke z6e--z4e; y9r=.8stem; bot y9l=-oo; x9l=.5[x8l,x10l]; z9=.5[z9l,z9r]; pos10(.7hair,180); x10l=w-x1; y10=y8; x9r=.5[x8r,x10r]; %right stem filldraw stroke z10e{down}..z9e{left}..{up}z8e--z7e; else: pickup fine.nib; pi_bar; %bar pos4(hair,0); pos7(hair,0); y4=y7=y2; %attachments lft x4l-(x1-.5hair)=lft x7l-rt x4r=rt x3-rt x7r; pos5(hair,0); pos8(hair,0); y5=y8=.5x_height; x5=x4; x8=x7; %midstems x6+.5stem=hround(rt x4r if not straight:-.25u fi); y6-.5stem=-oo; %left stem numeric slope; slope=angle((z5-z6)xscaled2); pos6(stem,slope-90); filldraw circ_stroke z6e...z5e---z4e; x9=x7+1.5u; bot y9l=-oo; pos9(stem,90); alpha_tail(9,10); %right stem filldraw stroke z10e...z9e{left}...z8e---z7e; fi fi enddef; cmchar "Lowercase pi"; beginchar("p",dims); this_letter; penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;% "Lowercase pi" picture savedpicture; currentbreadth:=0; if small_caps: % rho def width = 9u enddef; def height = sclc*x_height enddef; def depth = 0 enddef; def dims = width#,height#,depth# enddef; else: def width =8.5u enddef; def height = x_height enddef; def depth = desc_depth enddef; def dims = width#,height#,depth# enddef; fi def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter = if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(.7serif_fit#,0); pickup tiny.nib; penpos1(stem'-tiny,0); penpos2(stem-tiny,0); pos0(stem',0); pos0'(stem,0); lft x1l=hround (max(2u,3u-.5stem')-u/2); top y1=h; bot y2=0; x1l=x2l=x0l=x0'l; y0=y0'=y7; penpos3(cap_band,90); penpos4(cap_band,90); penpos5(curve if hefty:-3stem_corr fi,0); penpos6(.5[vair,cap_band],-90); penpos7(.5[vair,cap_band],-90); z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7; x7=x2; y7l=vround .5h; x4=x6=.5w+.75u; x5r=hround(w-u/2); x4l:=x6l:=x4-.25curve; filldraw stroke z1e--z0e--z0'e--z2e; % stem fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe if serifs: dish_serif(1,0,a,1/3,jut,b,1/3,.5jut); % upper serif dish_serif(2,0',c,1/3,jut,d,1/3,jut); fi % lower serif math_fit(0,ic#-2.5u#); else: if (cursive or monospace) and not SansSerif: if slitex or monospace: pickup fine.nib;spess:=max(hair,fine+eps);else: spess:=hair; fi pos0(stem,0); pos1(stem,0); pos2(spess,-90); pos3(stem,180); pos4(spess,90); pos5(spess,0); lft x0l= lft x1l = w - rt x3l= 3/4u; x2=x4=w/2; rt x5r = rt x1r; bot y0=-d; y1=y3=y5=bar_height; h-top y2l=bot y4l=-oo; filldraw stroke z1e{up}..{right}z2e..z3e{down}..z4e{left}..{up}z5e; filldraw z1l--z0l--z0r--z5--cycle; elseif cbleipzig: spess:=fine; pos1(stem,0); pos2(spess,-90); pos3(stem,180); pos4(spess,90); pos5(hair,0); lft x1l = w - rt x3l= 3/4u; x2=x4=w/2; lft x5l = lft x1l; y1=y3=y5=bar_height; h-top y2l=bot y4l=-oo; filldraw stroke z1e{up}..{right}z2e..z3e{down}..z4e{left}..{up}z1e; pos0(.9[hair,stem],90); if stem<1.5u:top y0r=-stem-hair else:bot y0l=-d+.7hair fi; x0=.5[x1,x3]; pos6(.9[hair,stem],90);y6=y0;x6=.5[x4,x3]; pos7(fine,45); bot y7l=-d; x7r=x3l; filldraw double_circ_stroke z5e{down}...z0e---z6e..z7e; elseif cbroman: pickup tiny.nib; pos1(stem,180); rt x1l=w-u/2; y1=h/2; pos2(hair,-90); x2=.5[x1,x3]; top y2l=h+oo; pos3(stem,0); lft x3l=u; y3=y1; pos0(hair,0); z3r=z0r; pos4(hair,90); x4=x2; bot y4l=-oo; pos5(stem,0); x5=x3; bot y5=-d; filldraw stroke z5e---z3e{up}...{right}z2e...{down}z1e...{left}z4e...{up}z0e; dish_serif(5,3,a,1/3,.8jut,b,1/3,.8jut); elseif SansSerif: pickup fine.nib; lft x4r=hround .75u; x8r=w-x4r; y4r=y8r=.5h; %left and right pos4(hair,180); pos8(hair,0); top y2r=h+oo; bot y6r=-oo; x2r=x6r=.5w; %top and bottom pos2(.8hair,90); pos6(.8hair,-90); pos9(hair,180); bot y9=-d; x9r=x4r; filldraw stroke z9e--z4e{up}...{right}z2e...{down}z8e...{left}z6e...{up}z4e; else: pickup fine.nib; lft x4r=hround .75u; x8r=w-x4r; y4r=y8r=.5h; %left and right top y2r=h+oo; bot y6r=-oo; x2r=x6r=.5w; %top and bottom filldraw stroke gr_arc.e(4,5,6)(curve,vair,-otilt) & gr_arc.e(6,7,8)(curve,vair,-otilt) & gr_arc.e(8,1,2)(curve,vair,-otilt) & gr_arc.e(2,3,4)(curve,vair,-otilt); if straight: y9-.5stem=-d-oo; x9=x4; pos9(stem,180); %end of handle filldraw circ_stroke z9e..z4e; else: y9-.5stem=-d-oo; x9=lft x4r+stem; %end of handle if serifs: pos9(stem,angle((z9-z4)xscaled3)-90); z9'r=z9'l=(z9-z4)xscaled3; rt x10l=lft x10r+vair; %vertical tangents of handle x10r=x4r-epsilon; assign_z4'r((-2eps,-1)); %so club.r won't get confused filldraw double_circ_stroke club.e(4,10,9); else: pos9(1.2vstem,angle((z9-z4)xscaled3)-90); z9'=(z9-z4)xscaled3; filldraw z4r{down}...{z9'}z9r...z9l{-z9'}...{up}z4l--cycle; fi fi fi numeric x_baryctr; x_baryctr=x2; %breathing placement fi enddef; cmchar "Lowercase rho"; beginchar("r",dims); adjust_fit(fit_params); this_letter; penlabels(0,1,2,3,4,5,6,7,8,9,10); endchar;% "Lowercase rho" iff(not barebones): cmchar "Lowercase rho with rough breathing"; beginchar(oct"373",width#,acc_ht#,depth#); this_letter; if (not small_caps): spirit(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase rho with smooth breathing"; beginchar(oct"374",width#,acc_ht#,depth#); this_letter; if (not small_caps): spirit(x_baryctr)>; fi endchar; picture savedpicture; currentbreadth:=0; def dims=if small_caps: 8.5u#,sclc*x_height#,0% % final sigma elseif cbleipzig: 7.5u#,x_height#,desc_depth# else: 8u#,x_height#,desc_depth#% fi enddef; def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter = if small_caps: sc_beak_jut#:=.7beak_jut#; sc_beak#:=.7beak#; define_pixels(sc_beak_jut,sc_beak); italcorr height#*slant-sc_beak_jut#-.5u#; numeric bot_arm_thickness; bot_arm_thickness=Vround .25[slab,vstem]; pickup tiny.nib; lft x1l=hround u/2; x1l=x2l=x4l; top y1=h; bot y2=h-slab; bot y4=0; x3l-x1l=4/11(w-u); y3=.5h; numeric alpha[]; alpha1=((x3l-x1l)++(y2-y3))/(y2-y3); penpos1(alpha1*(stem-tiny),0); penpos2(alpha1*(stem-tiny),0); penpos3(alpha1*(stem-tiny),0); alpha2=diag_ratio(1,hair-tiny,y3-y4,x3r-x4l); penpos4(alpha2*(hair-tiny),0); z0=whatever[z2l,z3l]=z4l+whatever*(z3r-z4r); filldraw z1l--z2l--z0--z4l--z4r--z3r--z2r--z1r--cycle; % diagonals pickup crisp.nib; pos5(slab,90); pos6(hair,0); top y5r=h; x5=x1; rt x6r=hround(w-x1l); y6=good.y(y5l-sc_beak)-eps; arm(5,6,a,beak_darkness,sc_beak_jut); % upper arm and beak pos7(bot_arm_thickness,-90); pos8(hair,0); bot y7r=0; z7l=whatever[z4,z3]; x7r:=x4; x8=x6; y8=good.y(y7l+sc_beak)+eps; arm(7,8,b,beak_darkness,sc_beak_jut); % lower arm and beak math_fit(0,.5ic#); else: if cursive and not SansSerif: if slitex or monospace: pickup fine.nib; fi pos1(stem,45); pos2(hair,90); pos3(stem,220); pos4(.8[hair,stem],220); pos6(min(hair,.5d),90); lft x3r=3/4u=w-rt x1r; x2=w/2; top y2r=h+oo; top y1r=h-if serifs:.7fi stem; y3=bar_height; if slitex:bot y4r else: y4 fi=0; rt x4l=rt x1l; bot y6l=-d; x6=3w/8; path gobba; gobba= z2l{left}..tension .75..{down}z3l; pair zA,zB; zB=point .5 of gobba; zA=direction .5 of gobba; pos0(hair,angle(zA)-if serifs:90else:60fi);z0l=zB; if monospace: path gobba; pair zA; gobba=z4r{down}..tension .8..{left}z6r; zA=direction .5 of gobba; pos5(hair,angle(zA)-90); z5r=point .5 of gobba; else: pos5(hair,180); y5=.5[y4r,y6]; rt x5l=rt x1r; fi path gobba; gobba=z1{dir110}...{left}z2..z0..z3..z4..{if monospace:zA else: down fi}z5; pair diag; diag=direction 3.5 of gobba; pos7(stem,angle(diag)-90); if monospace:z7l else: z7 fi=point 3.5 of gobba; path gobba; gobba=z5r{if monospace:zA else: down fi}..{left}z6r; pair zB; zB=direction .5 of gobba; pos8(min(hair,.5d),angle(zB)-90); z8r=point .5 of gobba; filldraw circ_stroke z1e{dir 110}...{left}z2e..z0e..z3e..z7e{diag}..z4e ..{if monospace:zA else:down fi}z5e..z8e{zB}..{left}z6e; path gobba; pair zA,zB,diag; elseif cbleipzig: pickup fine.nib; numeric slope; pos4(hair,-180); y4=.5h; lft x4r=hround .75u; %left bulge pos6(hair,-180); rt x6l=hround(w-.75u); %y6=-.5stem; %bottom right top z0r=(w/2,h+oo);pos0(.6[hair,stem],90); z3r=z0r+whatever*dir(-15);z9=z3r+.5stem*down; x3r+.5stem=rt x6l; pos3(stem,angle(z9-z0r)+90); %top right pos5(vstem,-90); bot y5r=0; x5=.5w; %inflection pt pos7(hair,90); y6=.5[y7r,y5r]; x7=hround x5; top y7r=-.5desc_depth; pair za; za=.5[z3,z5]; slope=angle((0,h)-za); z10=z4+whatever*right=z0+whatever*down; pos1(hair,slope); pos2(.4[hair,stem],360-slope); numeric tensione[]; tensione1=1;tensione2=.85; path cbp; cbp=z5{left}..tension tensione1..z4..tension tensione2..{right}z0; z1=point 1.5 of cbp; z2=point .5 of cbp; pos8(vstem,-90); y8=y5;x8=x5+u; filldraw double_circ_stroke %bowl and tail z7e{right}...z6e...z8e...z5e{left}..z2e..z4e..z1e...z0e{right}...z3e; path cbp; numeric tensione[]; elseif cbroman: pos1(hair,0); z1=(w/2,h/2)+whatever*dir(45); y1=.5[bar_height,h]; pos10(stem,0); z10r=z1r; pos11(stem,90); z10=z11; pos2(hair,90); x2=w/2;y2r=h+oo; pos3(hair,180);x3r=u/2; y3=.75bar_height; pos4(stem,-90); y4r=0; z4=z3+whatever*dir(-45); pos5(stem,-90);y5r=y4r; x5=.5[x6,x4]; pos7(hair,90); y7l=-(.5[.7bar_height,d]); x7=x2; x6l=x6r+.3[hair,stem]=w-u/2; y6r=.5[y5r,y7r]; y6l=.5[y5l,y7l]; z6=.5[z6r,z6l]; filldraw circ_stroke z7e{(z6-z7)xscaled 3}...z6e{up}...{left}z5e---z4e% ...{up}z3e...{right}z2e...{down}z1e; dot(10,11); elseif SansSerif: pickup fine.nib; pos4(hair,-180); y4=.5[y3,y5]; lft x4r=hround .75u; %left bulge pos6(hair,-180); rt x6l=hround(w-.75u); %bottom right top y3r=h; x3=rt x6l; pos3(stem,90); %top right pos5(vstem,-90); bot y5r=0; x5=.5w; %inflection pt pos7(vstem,-270); y6=.5[y7r,y5r]; x7=hround (x5+.5u); if y5r-u-vstem <-.5desc_depth: y7r=-u else:y7l=-.5desc_depth fi; filldraw stroke %bowl and tail z7e{right}...z6e...z5e{left}...z4e..tension.95..{right}z3e; else: pickup fine.nib; pos4(hair,-180); y4=.5h; lft x4r=hround .75u; %left bulge pos6(hair,-180); rt x6l=hround(w-.75u); %bottom right top y3r=h+oo; x3+.5stem=rt x6l; pos3(stem,90); %top right pos5(vstem,-90); bot y5r=0; x5=.5w; %inflection pt pos7(vstem,-270); y6=.5[y7r,y5r]; x7-.5vstem=hround x5; bot y7l=-if not slitex:.5fi desc_depth; filldraw double_circ_stroke %bowl and tail z7e{right}...z6e...z5e{left}...z4e...z3e{right}; fi fi enddef; cmchar "Final lowercase sigma"; beginchar("c",dims); adjust_fit(fit_params); this_letter; penlabels(0,1,2,3,4,5,6,7,8,9,10); endchar;% "Final lowercase sigma" iff small_caps: % For small caps the glyph of medial sigma is the same as the final one beginchar("s",dims); adjust_fit(fit_params); this_letter; penlabels(1,2,3,4,5,6,7,8); endchar; picture savedpicture; currentbreadth:=0; % Initial and medial "sigma" def dim_sigma = if cbroman:9.5else: %elseif cbleipzig:8.5else: 9.5fi u#,x_height#,0 enddef; def ital_sigma = 0 enddef; def fit_params_sigma = 0,if cbleipzig:-.5u# elseif cbroman:0 else:.75u# fi enddef; def gen_mid_sigma = numeric spess; if (cursive or monospace) and not SansSerif: if slitex or monospace: pickup fine.nib;spess:=max(hair,fine+eps);else: spess:=hair; fi pos1(stem,75); pos2(spess,90); pos3(stem,180); pos4(spess,270); pos5(stem,0); rt x1r+.3stem=w; top y1r=h+oo; x2=x4=.5[x3,x5]; bot y4r = h -top y2r = -oo; y3=y5=bar_height; lft x3r=3/4u; w-3/2u=rt x5r; filldraw circ_stroke z1e{dir 200}..z2e{left}..z3e..z4e..z5e..{left}z2e; elseif cbleipzig: spess:=.1[fine,stem]; pos0(hair,120); pos1(stem,150); pos2(.3[hair,stem],90); pos3(stem,180); pos4(spess,270); pos5(stem,0); top y0r=h+fine;.42[lft x3r,rt x0l]=x2; z1r=z2r+whatever*dir(-4); x1r=.3[x0r,x2r]; .5[x2,x4]=.5[x3,x5]=w/2-.5u; x4-x2=.6u; bot y4r = h -top y2r = -oo; y3=y5=bar_height; lft x3r=hround(3/4u); filldraw circ_stroke z0e...z1e..z2e{left}..z3e..z4e..z5e..{left}z2e; elseif cbroman: spess:=hair; pos1(stem,75); pos2(spess,90); pos3(stem,180); pos4(spess,270); pos5(stem,0); rt x1r+lft x3r=w; top y1r=h+oo; x2=x4=.5[x3,x5]=w/2-.5u; bot y4r = h -top y2r = -oo; y3=y5=bar_height; lft x3r=hround(3/4u); filldraw circ_stroke z1e{dir 200}..z2e{left}..z3e..z4e..z5e..{left}z2e; elseif SansSerif: pickup fine.nib; lft x4r=hround .75u; rt x8r=w-lft x4r; %left and right bulge pos4(hair,180); pos8(hair,0); top y2r=h; bot y6r=-oo; x2r=x6r; %top and bottom pos2(hair,90); pos6(hair,-90); 2y4r=y2r+y6r=2y8r; (x8r-x6r)/(y8r-y6r)=-(x4r-x6r)/(y4r-y6r); %determine x6r y1r=y2r;rt x1=hround(rt x8r+u); pos1(stem,90); %tip filldraw stroke z1e--z2e{left}...{down}z4e...{right}z6e...{up}z8e...{left}z2e; else: pickup fine.nib; lft x4r=hround .75u; rt x8r=w-lft x4r; %left and right bulge top y2r=h; bot y6r=-oo; x2r=x6r; %top and bottom numeric fake; fake=y2r-(vstem-currentbreadth); %approx height of z2l 2y4r=y2r+y6r; if serifs: 2y8r=fake+y6r else: y8r=y4r fi; (x8r-x6r)/(y8r-y6r)=-(x4r-x6r)/(y4r-y6r); %determine x6r y1r=y2r;rt x1=hround(rt x8r+u); pos1(stem,90); %tip filldraw stroke z1e..gr_arc.e(2,3,4)(vstem,vstem,otilt) & gr_arc.e(4,5,6)(vair,vstem,otilt) %top stroke and left bowl & gr_arc.e(6,7,8)(vair,vstem,otilt); %bottom part of right bowl z9l=z2l; pos9(vair,90); filldraw stroke z8e{z8'e}..{z2'l}z9e; %top part of right bowl fi enddef; iff (not small_caps): cmchar "Initial and medial lowercase sigma"; beginchar("s",dim_sigma); adjust_fit(fit_params_sigma); gen_mid_sigma; penlabels(0,1,2,3,4,5,6,7,8,9); endchar;% "Initial and medial lowercase sigma" picture savedpicture; currentbreadth:=0; if small_caps: % tau def dims = 9.5u#,sclc*x_height#,0 enddef; else: def dims = if cbroman:7.5 %elseif cbleipzig:8 else: 8.5fi u#,x_height#,0 enddef; fi def ital = 0 enddef; def fit_params = -.25u#,0 enddef; def gen_letter= if small_caps: italcorr height#*slant-beak_jut#-.25u#; adjust_fit(fit_params); h:=vround(h-2stem_corr); pickup tiny.nib; pos1(stem,0); pos2(stem,0); lft x1l=lft x2l=hround(.5w-.5stem); top y1=h; bot y2=0; filldraw stroke z1e--z2e; % stem pickup crisp.nib; pos3(slab,90); pos4(hair,0); top y3r=h; x3=x1; rt x4r=hround(w-.65u); y4=good.y(y3l-beak)-eps; arm(3,4,e,beak_darkness,.7beak_jut); % right arm and beak pos5(hair,180); x5=w-x4; y5=y4; arm(3,5,f,beak_darkness,-.7beak_jut); % left arm and beak if serifs: dish_serif(1,2,a,1/3,.5jut,b,1/3,.5jut); % upper bracketing dish_serif(2,1,c,1/3,1.414jut,d,1/3,1.414jut); % lower serif fi math_fit(-.75*height#*slant,ic#-2.5u#); else: if cursive and not SansSerif: if slitex or monospace: pickup fine.nib; fi pos1(hair,90); pos2(stem,90); pos3(stem,90); lft x1r= w- rt x3r=3/4u; lft x2=w/4; top y2r=top y3r=h; top y1r =bot y2l-.4(stem-hair); filldraw z1l{dir 75}..{right}z2l--z3l--z3r--z2r{left}..{down}z1r--cycle; pos4(if not monospace:.8fi stem,0); pos5(stem,0); pos6(.8[hair,stem],90); y4=y2; x4=x5+(fine+stem)/4=.5[rt x1r,rt x3r]; y5=h/3; x6=.5[rt x5r,rt x3-hair]; bot y6l=-oo; pos7(hair,180); top y7= y5; x7l=x3; filldraw stroke z4e..{down}z5e...{right}z6e...{up}z7e; elseif cbleipzig: pickup fine.nib; cbltau_bar; %bar pos4(stem,0); y4=y2; x4=.5[x2,x3]; %attachment pos5(stem,0); y5=.3x_height; x5=.4[x2,x3]; %midstems x6r=.5[x5r,x7r]; bot y6l=-oo; pos6(.5[hair,stem],60); pos7(hair,120); %stem y7r=min(2stem,bar_height/2); z7l=z11r+whatever*(z5-z4); filldraw circ_stroke z7e{(z5-z4)}...z6e{left}...z5e---z4e; elseif cbroman: pos1(stem,90); x1=u/2+stem/2; y1r=h; pos2(stem,90); x2=w-x1; y2r=y1r; pos3(stem,0); x3=.4[x1,x2]; y3=y1; pos4(stem,0); x4=x3; y4= (x6l-x4l)/2; x5r=.5[x4r,x6r]; x5l=.5[x4l,x6l]; y5l=-oo; y5r=y5l+.3[hair,stem]; z5=.5[z5r,z5l]; pos6(hair,180); x6=x2; y6=y4; filldraw double_circ_stroke z1e--z2e; filldraw circ_stroke z6e{down}...z5e{left}...{up}z4e---z3e; elseif SansSerif: pickup fine.nib; pi_bar; %bar pos4(hair,0); y4=y2; x4=.5[x1,x3]-.15hair; %attachment pos5(hair,0); y5=1.6[y6l,y6r]; x5=x4; %midstems x6r=x4r+.5hair; bot y6l=-oo; y6r=.8hair; x6l=.5[x5l,x7l]; z6=.5[z6l,z6r]; %stem pos7(.7hair,180); x6r=.5[x5r,x7r]; y7=y5; filldraw stroke z7e{down}..z6e{left}...z5e---z4e; else: pickup fine.nib; pi_bar; %bar pos4(hair,0); y4=y2; lft x4l-(x1-.5hair)=rt x3-rt x4r; %attachment pos5(hair,0); y5=.5x_height; x5=x4; %midstems x6=x4+1.5u; bot y6l=-oo; pos6(stem,90); alpha_tail(6,7); %stem filldraw stroke z7e...z6e{left}...z5e---z4e; fi fi enddef; cmchar "Lowercase tau"; beginchar("t",dims); this_letter; penlabels(1,2,3,4,5,6,7,8,11); endchar;% "Lowercase tau" picture savedpicture; currentbreadth:=0; if small_caps: % lowercase upsilon def width = 9u enddef; def dims = width#,sclc*x_height#,0 enddef; else: def width = %if cbleipzig:8else: 9%fi u enddef; def dims = width#,x_height#,0 enddef; fi def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter= if small_caps:% upsilon smal caps italcorr .8*height#*slant-.5u#; adjust_fit(0,0); pickup tiny.nib; pos1(stem,0); pos2(stem,0); lft x1l=lft x2l=hround(.5w-.5stem); y1=.5h; bot y2=0; filldraw stroke z1e--z2e; % stem penpos3(.6stem,0); penpos4(.75curve,90); penpos5(hair,180); z3l=lft z1l; x5r=.5hround u; y5=bot .8h; x4=.61803[x3l,x5l]; y4r=h+o; penpos5'(hair,180); x5'=x5; y5'=h; fill z3r{up}...z4r{left}...{down}diag_end(5'r,5r,1,1,5l,5'l){up} ...{right}z4l...{down}z3l--cycle; % left arc penpos6(.6stem,0); penpos7(.75curve,-90); penpos8(hair,-180); z6r=rt z1r; x8=w-x5; y8=y5; x7=w-x4; y7=y4; penpos8'(hair,-180); x8'=x8; y8'=h; fill z6r{up}...z7r{right}...{down}diag_end(8'r,8r,1,1,8l,8'l){up} ...{left}z7l...{down}z6l--cycle; % right arc if serifs: dish_serif(2,1,a,1/3,1.25jut,b,1/3,1.25jut); fi % serif math_fit(-.8*height#*slant-.5u#,ic#-2.5u#); numeric x_baryctr; x_baryctr=x1; else: if cursive and serifs and not monospace:% upsilon: oblique prportional adjust_fit(.5stem#,0);% upsilon italic pos1(hair,90); pos2(stem,45); pos3(stem,0); pos4(stem,10); pos5(.5[hair,stem],90); pos6(hair,180); numeric tip_slope; tip_slope=-70; pos7(stem,tip_slope-90); x1l=0; x2l=4/3u; x2=x3l=x4l; y1=y2l; y2r=h; y3=3/4h; y4l=max(1/3h,3/2stem); x6l=w-3/4u; x7l=x6r; y7+.5stem=h+o; y6=4/10h; y5l=-oo; x5=.5[x3l,x6l]; filldraw circ_stroke z7e{dir(tip_slope)}..{down}z6e..{left}z5e ..{up}z4e..z3e..z2e..z1e; numeric x_baryctr; x_baryctr=(w-u/3)/2; numeric tip_slope; elseif cbleipzig:% upsilon Leipzig adjust_fit(0,.3u#); pickup fine.nib; pos1(hair,180); pos3(stem,0); %left tip lft x1r=.5u; y1=y3; top y2r=h+oo=bot y2l+.5[hair,stem]; x2l=.5[x1l,x3l]; x2r=.5[x1r,x3r];z2=.5[z2r,z2l]; y3=2h/3;lft x3l=rt x1l+if stem<1.5u:2u else:.7stem fi ; pos4(stem,0); x4=x3;y4=h/3; bot y5l=-oo=top y5r-hair; x5r=.5[x4r,x6r];x5l=.5[x4l,x6l]; z5=.5[z5r,z5l]; pos6(.5[hair,stem],180); y6=h/2; rt x6l+lft x1r=w; pos7(.1[stem,hair],220); top y7l= h; x7=.4[x5,x6]; filldraw double_circ_stroke z1e{up}..{right}z2e..{down}z3e---z4e...% {right}z5e..{up}z6e...z7e; numeric x_baryctr; x_baryctr=.5[x2,x7]; elseif cbroman:% upsilon roman pickup tiny.nib; pos1(stem,0);lft x1l=jut; top y1=h; pos2(stem,0); x2=x1; y2=(rt x5l -lft x1l)/2; pos3(hair,90);x3=w/2;bot y3l=-oo; pos4(stem,180);x4=x5; y4=y2; pos6(stem,0); z6=z4; pos5(stem,180); x5=w-x1; y5=y1; pos7(stem,0); z7=z5; filldraw stroke z1e---z2e{down}...{right}z3e...{up}z4e---z5e; serif (1,2,a,1/3,-.8jut); dish_serif(7,6,b,1/3,.8jut,c,1/3,.8jut); numeric x_baryctr; x_baryctr=x3; elseif SansSerif:% upsilon SansSerif adjust_fit(0,0); pickup fine.nib; top y2r=x_height; x2r=hround.75u; % left tip lft x4r=hround(x2r+.20stem+.75u); y4r=.5x_height; %left middle pos4(hair,180);z4'r=z4'l=down; y8r=y4r; rt x8r=hround(w-.75u); %right bulge pos8(hair,0); z8'l=z8'r=up; x6r=.5[x4r,x8r]; bot y6r=-oo; %bottom pos6(hair,-90); path cbp; cbp=z2r...{z4'r}z4r; z.a=direction 0 of cbp; pos2(hair/(abs(cosd(angle(z.a)-90)))-currentbreadth,180); y9=y2; x9=x8-u; %right tip path cbp; cbp=z8{up}...z9; z.b=direction 1 of cbp; pos9(hair/(abs(cosd(angle(z.b)+90))),0); filldraw stroke z2e...{z4'e}z4e...{right}z6e...{z8'e}z8e...z9e; numeric x_baryctr; x_baryctr=.6[x2,x9]-.15stem; % accent reference else:% upsilon other shapes: didot and tt adjust_fit(0,0); pickup fine.nib; y2+.5stem=x_height+o; x2-.5stem=hround.75u; %%%left tip lft x4r=hround(x2-.5stem+.75u); y4r=.5x_height; %left middle y8r=y4r; rt x8r=hround(w-.75u); %right bulge x6r=.5[x4r,x8r]; bot y6r=-oo; %bottom numeric tilt; tilt:=min(2*otilt,.5); if monospace: pos4(stem,180); pos6(stem,-90); pos8(stem,0); filldraw stroke z4e{down}...{right}z6e...{up}z8e; else: filldraw stroke gr_arc.e(6,7,8)(vair,stem,tilt) ; filldraw stroke gr_arc.e(4,5,6)(vair,.4[vair,stem],tilt); fi y9+.5hair=x_height+o; x9=x8-u; pos9(hair,angle ((z8-z9) xscaled 2)+90); pos2(stem,angle((z4-z2) xscaled 2)-90); if monospace: filldraw circ_stroke z9e...{down}z8e; filldraw circ_stroke z2e...{down}z4e; else: filldraw circ_stroke z9e...{-z8'e}z8e; filldraw circ_stroke z2e...{z4'e}z4e; fi numeric x_baryctr; x_baryctr=.5[x2,x9]-.15stem; fi fi enddef; cmchar "Lowercase upsilon"; beginchar("u",dims); this_letter; penlabels(1,2,3,4,5,6,7,8,9); endchar;% "Lowercase upsilon" iff(not barebones): cmchar "Lowercase upsilon with grave"; beginchar(oct"314",width#,acc_ht#,0); this_letter; if (not small_caps): grave(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase upsilon with rough breathing"; beginchar(oct"315",width#,acc_ht#,0); this_letter; if (not small_caps): spirit(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase upsilon with smooth breathing"; beginchar(oct"316",width#,acc_ht#,0); this_letter; if (not small_caps): spirit(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase upsilon with acute"; beginchar(oct"324",width#,acc_ht#,0); this_letter; if (not small_caps): acute(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase upsilon with rough breathing and acute"; beginchar(oct"325",width#,acc_ht#,0); this_letter; if (not small_caps): spirit_acute(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase upsilon with smooth breathing and acute"; beginchar(oct"326",width#,acc_ht#,0); this_letter; if (not small_caps): spirit_acute(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase upsilon with rough breathing and grave"; beginchar(oct"317",width#,acc_ht#,0); this_letter; if not small_caps: spirit_grave(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase upsilon with smooth breathing and grave"; beginchar(oct"327",width#,acc_ht#,0); this_letter; if not small_caps: spirit_grave(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase upsilon with circumflex"; beginchar(oct"334",width#,circ_ht#,0); this_letter; if (not small_caps): squeeze:=false; circumflex(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase upsilon with rough breathing and circumflex"; beginchar(oct"335",width#,Circ_ht#,0); this_letter; if (not small_caps): squeeze:=true; spirit_circumflex(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase upsilon with smooth breathing and circumflex"; beginchar(oct"336",width#,Circ_ht#,0); this_letter; if (not small_caps): squeeze:=true; spirit_circumflex(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase upsilon with diaeresis"; beginchar(oct"364",width#,circ_ht#,0); this_letter; diaeresis(x_baryctr); picture savedUpicture; savedUpicture:=currentpicture; endchar; iff(not barebones): cmchar "shifted Lowercase upsilon with diaeresis"; % for kerning with A or a beginchar(oct"017",width#,circ_ht#,0); adjust_fit(0,-aukern#); currentpicture:=savedUpicture shifted(-aukern,0); endchar; picture savedUpicture; iff(not barebones): cmchar "Lowercase upsilon with diaeresis and grave"; beginchar(oct"365",width#,Circ_ht#,0); % Circ_ht is chosen on purpose this_letter; if (not small_caps): diaeresis_grave(x_baryctr); else: diaeresis(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase upsilon with diaeresis and acute"; beginchar(oct"366",width#,Circ_ht#,0); % Circ_ht is chosen on purpose this_letter; if (not small_caps): diaeresis_acute(x_baryctr); else: diaeresis(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase upsilon with diaeresis and circumflex"; beginchar(oct"367",width#,Circ_ht#,0); this_letter; if (not small_caps): squeeze:=true; diaeresis_circumflex(x_baryctr); else: diaeresis(x_baryctr); fi endchar; picture savedpicture; currentbreadth:=0; def dims = if small_caps: 9u#, sclc*x_height#,0 % phi else: if cbroman: 10 elseif cbleipzig:10.5else: 10.5fi u#,x_height#,desc_depth# fi enddef; def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter = if small_caps:% phi small caps italcorr .5*height#*slant-.5u#; adjust_fit(0,0); numeric shaved_stem,light_curve; shaved_stem=stem-hround 2stem_corr; light_curve=curve-hround stem_corr; pickup tiny.nib; pos1(shaved_stem,0); pos2(shaved_stem,0); lft x1l=lft x2l=hround(.5w-.5stem); top y1=h; bot y2=0; filldraw stroke z1e--z2e; % stem penpos3(vair,90); penpos5(vair,-90); penpos4(light_curve,180); penpos6(light_curve,0); x4r=.5hround u; x6r=w-x4r; x3=x5=.5w; y3r=vround(.85h if serifs:-slab fi); y4=y6=.5[y3,y5]; y5r=vround(.15h if serifs:+slab fi); penstroke pulled_arc.e(3,4) & pulled_arc.e(4,5) & pulled_arc.e(5,6) & pulled_arc.e(6,3) & cycle; % bowl if serifs: dish_serif(1,2,a,1/3,1.25jut,b,1/3,1.25jut); % upper serif dish_serif(2,1,c,1/3,1.25jut,d,1/3,1.25jut); fi % lower serif math_fit(-.5*height#*slant-.5u#,ic#); % phi Leipzig elseif cbleipzig: % Dimitri Filippou suggested to have the crossing at point 6 at lft x4r=w-rt x8r= hround .75u; ;y4r=y8r=bar_height; % right angles, but it does not x6=.47[x4l,x8l]; bot y6r=-oo;% look good! bot y10=-d+stem/2-oo; y11=y4r; x10=x11=x6; top y2r=h+oo=bot y2l+.3[hair,stem]; x2l=.47[x12l,x4l]; x2r=.47[x12,x4r];z2=.5[z2r,z2l]; pos12(.5[hair,stem],0); y12l=y7l; .5[x12l,x7l]=x6; pos4(stem,180); pos6(fine,-90); pos8(.2[hair,stem],0); x9r=.47[x7l,x8r]; x9l=.47[x7l,x8l]; top y9r=h+oo=bot y9l+.3[hair,stem]; z9=.5[z9r,z9l]; pos10(stem,180); pos11(stem,180); pos7(.6[hair,stem],135); x7l=x11l; y7=.7[h+oo,y11r]; pos13(.5[hair,stem],0); z13l=z11r; filldraw double_circ_stroke z13e{up}--z12e{up}...z2e{left}..z4e{down}..% z6e{right}..{up}z8e..{left}z9e...z7e{down}...z11e---z10e; elseif cbroman:% phi roman pickup tiny.nib; lft x4r=w-rt x8r= hround u/2; ;y4r=y8r=.5h; x6=.5[x4l,x8l]; bot y6r=-oo; bot y10=-d; y11=y4r; x10=x11=x6; top y2r=h+oo; .5[x2,x9]=x6; pos2(hair,60); pos12(stem,0); z12=z10; pos4(stem,180); pos6(hair,-90); pos8(stem,0); pos9(hair,120); pos10(stem,180); pos13(stem,0); z13=z11; pos11(stem,180); pos7(stem,135); x9r=.47[x10r,x8r]; top y9r=h+oo; x7l=x11l; y7=.5[y9r,y11r]; filldraw stroke z2e{left}..z4e{down}..% z6e{right}..{up}z8e..{left}z9e...z7e...{down}z11e---z10e; dish_serif(12,13,a,1/3,.8jut,b,1/3,.8jut); else:% phi other shapes if cursive and serifs and not monospace: % phi regular, outline and cursive lft x4r=w-rt x8r=hround .75u; y4r=y8r=.5h; x6=.5[x4r,x8r]; bot y6r=-oo; y10=-d; y11=y4r; x10=x11=x6; numeric raggio; raggio=x8r-x4r-stem; y2=h; .4[x2,x9]=x6; pos2(hair,180); pos4(stem,180); pos6(hair,-90); pos8(stem,0); pos9(hair,120); pos10(stem,180); pos11(stem,180); pos7(stem,135); x9r=.41[x10r,x8r]; top y9r=h+oo; x7l=x11l; y7=.5[y9r,y11r]; filldraw stroke z2e..z4e{down}..z6e{right}..{up}z8e..{left}z9e...z7e ..{down}z11e--z10e; elseif SansSerif:% phi SansSerif pickup fine.nib; lft x4r=w-rt x8r=hround .75u; y4r=y8r=.5h; pos4(.8hair,180); z4'r=z4'l=down; pos8(.8hair,0);z8'l=z8'r=up; x6r=.5[x4r,x8r]; bot y6r=-oo; pos6(.8hair,-90); numeric tilt; tilt:=min(2*otilt,.5); top y2r=h; x2r=hround(x4r+u); path cbp; cbp=z2r...{z4'r}z4r; z.a=direction 0 of cbp; pos2(stem/abs(cosd(angle(z.a)+90)),180); pos10(stem,180); pos11(hair,180); bot y10=-d; y11=.65h; x10=x11=x6; x9r=.5[x10r,x8r]; top y9r=h+oo; pos9(.8hair,90); z9'l=z9'r=left; filldraw stroke z2e...{z4'e}z4e...{right}z6e% ...{z8'e}z8e...{z9'e}z9e...{down}z11e--z10e; else: % typewriter, slides if monospace: if vair<=fine: pickup pencircle scaled 1.05fine; currentbreadth:=1.05fine; else: pickup fine.nib; fi else: pickup fine.nib; fi lft x4r=w-rt x8r=hround .75u; y4r=y8r=.5h; x6r=.5[x4r,x8r]; bot y6r=-oo; numeric tilt; tilt:=min(2*otilt,.5); if monospace: pos6(vair,-90); pos8(.4[vair,stem],0); pos4(vair,180); filldraw stroke z4e{down}..{right}z6e..{up}z8e;z8'l=(0,1); else: filldraw stroke gr_arc.e(6,7,8)(vair,stem,tilt) ; filldraw stroke gr_arc.e(4,5,6)(vair,.4[vair,stem],tilt) ; fi y2+.5stem=h+o; x2+.5stem=hround(x6-1.5u); pos2(stem,angle((z2-z4)xscaled 2)+90); filldraw circ_stroke z2e...if monospace:{down}else:{z4'e}fi z4e; pos10(stem,180); pos11(hair,180); y10-.5stem=-d-o; y11=.25h; x10=x11=x6; x9r=.5[x10r,x8r]; top y9r=h+o; filldraw stroke gr_arc.e(8,20,9)(vair,.4[vair,stem],.5tilt); filldraw circ_stroke z10e..z11e{up}..{-z9'e}z9e; fi fi enddef; cmchar "Lowercase phi"; beginchar("f",dims); this_letter; penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,20,21); endchar;% "Lowercase phi" picture savedpicture; currentbreadth:=0; def ital = 0 enddef; % chi def fit_params = 0,0 enddef; if small_caps: def dims = 10u#,sclc*x_height#,0 enddef; else: def dims = if cbroman:9 elseif cbleipzig:8.5 else: 10fi u#,x_height#,desc_depth# enddef; fi def gen_letter= if small_caps: italcorr height#*slant-.25u#; adjust_fit(serif_fit#,serif_fit#); numeric stem[],outer_jut,xjut,alpha[]; stem1=stem-2stem_corr; stem2=min(hair,stem1); outer_jut=.75jut; xjut= if serifs: (stem1-stem2)/4 else: 0 fi; x1l=l+letter_fit+.5u+outer_jut; x2r=r-letter_fit-u-outer_jut-xjut; x3l=l+letter_fit+.25u+outer_jut+xjut; x4r=r-letter_fit-.25u-outer_jut; y1=y2=h; y3=y4=0; alpha1=diag_ratio(1,stem1,h,x4r-x1l); alpha2=diag_ratio(1,stem2,h,x2r-x3l); penpos1(alpha1*stem1,0); penpos2(alpha2*stem2,0); penpos3(alpha2*stem2,0); penpos4(alpha1*stem1,0); if hefty: z0=whatever[z1,z4]=whatever[z2,z3]; x12=x34=x0; y13=y24=y0; z12=whatever[z2l,z3l]; z13=whatever[z2l,z3l]; z24=whatever[z2r,z3r]; z34=whatever[z2r,z3r]; forsuffixes $=13,24,34: z$'=.1[z$,z0]; endfor fill diag_end(12,1r,.5,1,1l,13')--z13'--diag_end(13',3l,1,.5,3r,34')--z34' --diag_end(34',4l,.5,1,4r,24')--z24' --diag_end(24',2r,1,.5,2l,12)--z12--cycle; % diagonals else: fill diag_end(4r,1r,.5,1,1l,4l) --diag_end(1l,4l,.5,1,4r,1r)--cycle; % left diagonal fill diag_end(2l,3l,.5,1,3r,2r) --diag_end(3r,2r,.5,1,2l,3l)--cycle; fi % right diagonal if serifs: numeric inner_jut[]; pickup tiny.nib; prime_points_inside(1,4); prime_points_inside(2,3); prime_points_inside(3,2); prime_points_inside(4,1); if rt x1'r+jut+.5u+1<=lft x2'l-jut-xjut: inner_jut1=jut; else: rt x1'r+inner_jut1+.5u+1=lft x2'l-inner_jut1-xjut; fi if rt x3'r+jut+.5u+1<=lft x4'l-jut-xjut: inner_jut2=jut; else: rt x3'r+inner_jut2+.5u+1=lft x4'l-inner_jut2-xjut; fi dish_serif(1',4,a,1/3,outer_jut,b,2/3,inner_jut1); % upper left serif dish_serif(4',1,c,2/3,inner_jut2,d,1/3,outer_jut); % lower right serif dish_serif(2',3,e,2/3,inner_jut1+xjut, f,1/2,outer_jut+xjut)(dark); % upper right serif dish_serif(3',2,g,1/2,outer_jut+xjut, h,2/3,inner_jut2+xjut)(dark); fi % lower left serif math_fit(0,.5ic#); else: if cursive and serifs and not monospace: adjust_fit(.5stem#,.5stem#); x0=w/2; y0=.5[-d,h]; numeric diagon; diagon=angle(w-2u,h+d); pos1(hair,90); pos2(stem,.5[90,diagon]); pos3(stem,diagon); pos0(stem,diagon); pos4(stem,diagon); pos5(stem,.5[90,diagon]); pos6(hair,90); z0=.5[z1,z6]=.5[z2,z5]=.5[z3,z4]; x1=0; x2l=u; x2r+.5 u=x3l; y1=y2l; y2r=h; y3=y2l; filldraw stroke z1e..z2e..z3e--z4e..z5e..z6e; pos7(.8stem,0); pos8(.5stem,-diagon); pos9(.8stem,0); z0=z8=.5[z7,z9]; x7l=0; y7=-d; filldraw stroke z7e{up}...{dir(diagon-10)}z8e...{up}z9e; elseif cbleipzig: x0=w/2; y0=.5[-d,h]; numeric diagon; diagon=angle(w-2u,h+d); pos1(hair,180); x1r=.2u; y1=h-min(2stem,bar_height/2); x2l=.5[x1l,x3l]; x2r=.5[x1r,x3r]; y2l+.5[hair,stem]=y2r=h+oo; z2=.5[z2r,z2l]; pos3(.5[hair,stem],0);x3l=x1l+if stem>1.5u:3stem/4 else:2u fi; y3l=y1l; pos4(.5[hair,stem],0); x5l=.5[x4l,x6l]; x5r=.5[x4r,x6r]; y5r-if stem>1.5u:.6else:1fi[hair,stem]=y5l=-d-oo; z5=.5[z5r,z5l]; pos6(hair,180); z0=.5[z1,z6]=.5[z3,z4]; filldraw double_circ_stroke z1e{up}..z2e{right}...z3e---z4e...z5e{right}..{up}z6e; pos7(stem,0); z0=.5[z7,z8]; x7l=u; y7=-d; x8:=x8-u/2;% Dimitri Filippou indicated that the straight stroke shouls be a liitle pos8(stem,0); % more vertical; shifting left the upper tip by u/2 looks OK filldraw stroke z7e---z8e; elseif cbroman: pickup tiny.nib; pos1(stem,0); lft x1l=jut; top y1=h; pos2(stem,0); x2=w-x1; bot y2= -d; filldraw stroke z1e---z2e; pos3(hair,0); rt x3r = w-lft x1l; y3=y1; pos4(hair,0); lft x4l=w- rt x2r; y4=y2; serif (1,2,a,1/3,-.8jut); dish_serif(2,1,b,1/3,.8jut,c,1/3,.8jut); filldraw stroke z3e---z4e; dish_serif(3,4,d,1/3,.8jut,e,1/3,.8jut); dish_serif(4,3,f,1/3,.8jut,g,1/3,.8jut); elseif SansSerif: pickup fine.nib; x1=hround .75u; y1+.5stem=h+oo; %top left z1'=(1,.2); pos1(stem,90); %direction at z1 x3+x1=w; y3-.5stem=-d-oo; pos3(stem,90); %bottom right z2=.5[z1,z3]; %attachment z2'=(z3-z1)yscaled 2; pos2(hair,angle z2'+90); %direction at z4 filldraw stroke z1e{z1'}... z2e{(z3-z1)yscaled 2}...{z1'}z3e; lft x7l=hround .75u; bot y7l=-d-oo; z2=.5[z7l,z8r]=.5[z7r,z8l]; numeric stem'; stem'=stem-currentbreadth; numeric theta; theta=angle(z8r-z7l)+angle((x8r-x7l)++(y8r-y7l)+-+stem',stem'); x7r=x7l+(stem'/sind theta); y7r=y7l; filldraw stroke z7e--z8e; else: pickup fine.nib; x1-.5stem=hround .75u; y1+.5stem=h+oo; %top left z1'=(1,.2); pos1(stem,angle z1'+90); %direction at z1 x3+x1=w; y3-.5stem=-d-oo; pos3(stem,angle z1'+90); %bottom right z2=.5[z1,z3]; %attachment z2'=(z3-z1)yscaled 2; pos2(hair,angle z2'+90); %direction at z4 filldraw double_circ_stroke z1e{z1'}... z2e{(z3-z1)yscaled 2}...{z1'}z3e; lft x7l=hround .75u; bot y7l=-d-oo; z2=.5[z7l,z8r]=.5[z7r,z8l]; numeric stem'; stem'=stem-currentbreadth; numeric theta; theta=angle(z8r-z7l)+angle((x8r-x7l)++(y8r-y7l)+-+stem',stem'); x7r=x7l+(stem'/sind theta); y7r=y7l; filldraw stroke z7e..z8e; fi fi enddef; cmchar "Lowercase chi"; beginchar("q",dims); this_letter; penlabels(0,1,2,3,4,5,6,7,8,9); endchar;% "Lowercase chi" picture savedpicture; currentbreadth:=0; if small_caps: % psi def dims = 10.5u#,sclc*x_height#,0 enddef; else: def dims = if cbleipzig:10 else: 10.5 fi u#,if cbleipzig or cbroman:x_height# else:asc_height# fi,desc_depth# enddef; fi def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter = adjust_fit(fit_params); if small_caps: italcorr .8*height#*slant-.5u#; numeric shaved_stem; shaved_stem=stem-hround 2stem_corr; pickup tiny.nib; pos1(shaved_stem,0); pos2(shaved_stem,0); lft x1l=lft x2l=hround(.5w-.5stem); top y1=h; bot y2=0; filldraw stroke z1e--z2e; % stem pos3(shaved_stem,-180); pos4(shaved_stem,-180); pos5(vair,-90); x5=x1; bot y5r=vround(.15h if serifs:+slab fi); pos6(shaved_stem,0); pos7(shaved_stem,0); lft x3r=.5hround u; x7=w-x3; lft x4=hround(w/2-3u); x6=w-x4; pos3'(vair,90); pos7'(vair,90); z3'r=z3r; z7'r=z7r; y3=y7; y4=y6=.6h; y3=good.y(y3+.84h if serifs:-slab fi-y3'); interim superness:=more_super; filldraw z3'l{right}...z4r{down} & super_arc.r(4,5) & super_arc.r(5,6) & z6r{up}...z7'l{right} --z7r---z7l...z6l{down} & super_arc.l(6,5) & super_arc.l(5,4) & z4l{up}...z3l---z3r--cycle; % stroke if serifs: dish_serif(1,2,a,1/3,1.25jut,b,1/3,1.25jut); % upper serif dish_serif(2,1,c,1/3,1.25jut,d,1/3,1.25jut); fi % lower serif math_fit(-.8*height#*slant-.5u#,.4*height#*slant-1.25u#); else: if cursive and serifs and not monospace: pos4(hair,270); pos6(stem,-20); pos5(stem,270); lft x2r=w-rt x6r=.75u; y2=y6=.5[h,-d]; %left and right bulges x4r=.5[x2r,x6r]; bot y4r=-oo; %bottom pos7(stem,45); top y7r=x_height+o; x7=x6-u; %right tip filldraw circ_stroke z7e{dir(-45)}..{down}z6e; pos10(stem,0); pos9(hair,0); pos8(stem,0); %vertical stroke y10=-d; y9=y2; y8=h; x10=x9=x8=x4; filldraw stroke z10e..z9e{up}..z8e; z5-z9=(x6-x9)*dir(-45); filldraw stroke z4e{right}..z5e..{up}z6e; pos1(stem,220);pos2(stem,200); pos3(stem,270); z3-z9=(x9-x2)*dir(225); filldraw stroke z2e{down}..z3e..{right}z4e; top y1l=x_height+o; %left tip z2-z1=whatever*down; pos0(hair,-90); y0=y1-.5hair; x0=0; path gancio; gancio= z0l..z1l..{down}z2l; pair za, zb; za= direction 0 of gancio; zb=direction 1 of gancio; filldraw z0r{za}..z1r{zb}..{down}z2r--z2l{-down}..z1l..z0l--cycle; pair za, zb; path gancio; elseif cbleipzig: pickup fine.nib;% Dimitri Filippou suggested to have the crossing at pont 4 at pos1(hair,180); %pos2(.5[hair,stem],60);% right angle, but it does not look good! pos3(.9[hair,stem],0); pos7(stem,0); top y2r=h+oo=bot y2l+.5[hair,stem]; x2l=.5[x1l,x3l]; x2r=.5[x1r,x3r]; x1r=u/2; x3l=x1l+1.5u; y7=.7bar_height; x7r=x3r; y1l=y3l=y2l-min(1.5stem,bar_height/3); pos4(hair,90); x4=.55w; bot y4l=-oo; pos5(.8[hair,stem],180); pos6(stem,225); pos11(stem,90); z11=z6; y5=bar_height; rt x5l=w-u/2; top y11r = top y2r; z6=z5+wherever*((.6w,asc_height)-z5); filldraw double_circ_stroke z1e{up}...{right}z2e...z3e..{down}z7e..{right}z4e..{up}z5e..z6e; pos10(stem,0); pos9(.3[hair,stem],0); pos8(hair,0); %vertical stroke bot y10-.5stem=-d-o; y9=.25x_height; top y8 + .35hair=h+oo; x10=x9=x8=x4; filldraw double_circ_stroke z10e...z9e...z8e; elseif cbroman: pickup tiny.nib; pos1(stem,0); lft x1l=jut; top y1=h; pos2(stem,0);x1=x2; y2=(rt x4l- lft x2l)/2; pos3(hair,90);x3=w/2; bot y3l=-oo; pos4(stem,180); .5[x4,x2]=x3; y4=y2;pos6(stem,0);z6=z4; pos5(stem,180); .5[x5,x1]=x3; y5=y1;pos7(stem,0);z7=z5; pos8(stem,0);x8=x3; y8=y1; pos9(stem,0);x9=x3; bot y9=-d; filldraw stroke z1e---z2e...{right}z3e...z4e---z5e; filldraw stroke z8e---z9e; serif(1,2,a,1/3,-.8jut); serif(7,6,b,1/3,.8jut); dish_serif(8,9,c,1/3,.8jut,d,1/3,.8jut); dish_serif(9,8,e,1/3,.8jut,f,1/3,.8jut); elseif SansSerif: pickup fine.nib; lft x2r=w-rt x6r=.75u; y2r=y6r=.6x_height; %left and right bulges x4r=.5[x2r,x6r]; bot y4r=-oo; %bottom numeric tilt; tilt:=min(2*otilt,.5); pos2(.8hair,180);pos6(.8hair,0);pos4(.8hair,-90); z6'r=z6'l=up; z2'l=z2'r=down; filldraw stroke z2e{z2'e}..{right}z4e..{z6'e}z6e; top y7=x_height; x4=.5[x1,x7]; %right tip pos7(hair,0); y1=y7; x1-.5stem=hround(lft x2r+.5u); %left tip pos1(stem,180); filldraw stroke z7e...{-z6'e}z6e; filldraw stroke z1e...{z2'e}z2e; pos10(.9stem,0); pos8(.9stem,0); %vertical stroke bot y10=-d; top y8=h; x10=x8=x4; filldraw stroke z10e--z8e; else: pickup fine.nib; lft x2r=w-rt x6r=.75u; y2r=y6r=.6x_height; %left and right bulges x4r=.5[x2r,x6r]; bot y4r=-oo; %bottom numeric tilt; tilt:=min(2*otilt,.5); if monospace: pos2(stem,180); pos4(stem,-90); pos6(stem,0); filldraw stroke z2e{down}..z4e{right}..{up}z6e; else: filldraw stroke gr_arc.e(4,5,6)(vair,stem,tilt) ; filldraw stroke gr_arc.e(2,3,4)(vair,.4[vair,stem],tilt) ; fi y7+.5hair=x_height+o; x7+.5hair=hround(rt x6r-.75u); %right tip pos7(hair,angle ((z6-z7) xscaled 2)+90); if monospace: filldraw circ_stroke z7e...{down}z6e; else: filldraw circ_stroke z7e...{-z6'e}z6e; fi y1+.5stem=x_height+o; x1-.5stem=hround(lft x2r+.5u); %left tip pos1(stem,angle((z2-z1) xscaled 2)-90); if monospace: filldraw circ_stroke z1e...{down}z2e; else: filldraw circ_stroke z1e...{z2'e}z2e; fi pos10(stem,0); pos9(hair,0); pos8(stem,0); %vertical stroke y10-.5stem=-d-o; y9=.25x_height; y8+.5stem=h+o; x10=x9=x8=x4; filldraw double_circ_stroke z10e..z9e{up}..z8e; fi fi enddef; cmchar "Lowercase psi"; beginchar("y",dims); this_letter; penlabels(0,1,2,3,4,5,6,7,8,9,10,11); endchar;% "Lowercase psi" picture savedpicture; currentbreadth:=0; if small_caps: % omega def width = 10u enddef; def height = sclc*x_height enddef; else: % OK for all lowercase shapes including cbleipzig and cbroman def width = 12u enddef; def height = x_height enddef; fi def dims = width#,height#,0 enddef; def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter = if small_caps: pickup tiny.nib; pos1(vair,90); pos2(curve,180); pos3(vair,180); pos4(curve,0); pos5(vair,0); x1=.5w; top y1r=h+o; lft x2r=hround u; y2=y4=2/3h; x4=w-x2; rt x3l=hround(1/3(w+.5u)+.5hair); bot y3=bot y5=0; x5=w-x3; filldraw stroke z3e{up}...{up}z2e & pulled_super_arc.e(2,1)(.5superpull) & pulled_super_arc.e(1,4)(.5superpull) & z4e{down}...{down}z5e; % bowl numeric arm_thickness; path p; p=z3{up}...{up}z2; arm_thickness=Vround(if hefty:slab+2stem_corr else:.75[slab,vstem] fi); pickup crisp.nib; pos6(arm_thickness,-90); pos7(fudged.hair,-180); bot y6r=0; x6=x3; lft x7r=hround .55u; y7=good.y(y6l+.5beak)+eps; (x,y)=p intersectionpoint((0,y6l)--(w,y6l)); x6l:=x; arm(6,7,a,.5beak_darkness,-1.2beak_jut); % left arm and beak pos8(arm_thickness,-90); pos9(fudged.hair,0); y8=y6; y9=y7; x8+x6=x9+x7=w; x8l:=w-x6l; arm(8,9,b,.5beak_darkness,1.2beak_jut); % right arm and beak math_fit(0,.5ic#); numeric pos_stem; % iota sub position pos_stem=rt x9r + if serifs:.5elseif slitex:.4else:.6fi(tiny+ .5[vair,stem])+u; else: if cursive and not SansSerif: if slitex or monospace: pickup fine.nib; fi pos2(stem,-180); pos8(stem,0); lft x2r=w-rt x8r=hround(u-o); y2=y8+.3slant*(x8-x2)=.9bar_height; %left and right bulges if serifs: pos4(hair,0); pos6(hair,180); %left and right of loop else: pos4(.7vair,0); pos6(.7vair,180); fi y4=y6=.2[bar_height,h]; .5[x4,x6]=.5w; x4r-x6r=stem; %.5[flare,vair]; bot y3r=bot y7r=-oo; x3=.5[x2,x4]; x7 =.5[x6,x8]; numeric ang; ang= if serifs:45 else:20 fi; numeric omegaloop; omegaloop=if not serifs: .7 fi stem; pos3(omegaloop,-90-ang); pos7(omegaloop,-90+ang); %left and right bottom top y1r=x_height=top y9r; %left tip x1=.6[x2,.5w]; pos1(hair,180); %left tip x9=.6[x8,.5w]; pos9(hair,0); %right tip filldraw stroke z1e{(z2-z1) xscaled 3}...z2e{down}...z3e{right}; filldraw stroke z7e{right}...{up}z8e...{(z9-z8) xscaled 3}z9e; drawloop(3,4,6,7); elseif cbleipzig: pos2(stem,-180); pos8(stem,0); lft x2r=w-rt x8r=hround(u-o); y2=.8bar_height; y8= .7bar_height; %left and right bulges pos4(hair,0); pos6(hair,180); %left and right of loop y4=y6=.8h-stem/2; x4+x6=w; x4r-x6r=.9[hair,stem]; bot y3r=bot y7r=-oo; x3=.5[x2,x4]; x7 =.5[x6,x8]; numeric ang; ang= 10; numeric omegaloop; omegaloop=.1[fine,stem]; pos3(omegaloop,-90-ang); pos7(omegaloop,-90+ang); %left and right bottom top y1r=h; %left tip top y9r=h-hair/2; x1=.5[x2,.5w]; pos1(.9[stem,hair],180); %lft tip x9=.5[x8,.5w]+hair/2; pos9(.9[stem,hair],if stem>1.5u:110else:120fi); %rt tip filldraw stroke z1e{(z2-z1) xscaled 5}...z2e{down}...z3e{right}; filldraw circ_stroke z9e{(z8-z9) xscaled 4}...z8e{down}...{left}z7e; drawloop(3,4,6,7); elseif cbroman: pos1(hair,90); x1=.5[x2l,x5]; y1r=h+oo; pos2(stem,180);x2r=u/2; y2=h/2; x3r=.5[x2r,x4r]; y3r=-oo=y3l-hair; x3l=.5[x2l,x4l]; z3=.5[z3r,z3l]; pos4(hair,0);x4r=x5; y4=.5[y5,y3]; pos5(stem,0); x5=w/2; y5=2h/3; pos6(hair,180); x7=w-x3; y7=y3; x7r=w-x3r; x7l=w-x3l; y7r=y3r; y7l=y3l; pos8(stem,0); x8=w-x2; y8=y2; pos9(hair,90);x9=w-x1; y9=y1; z10l=z4l;z10r=z6l; z10=z4r=z6r=.5[z10l,z10r]; filldraw circ_stroke z5e---z10e; filldraw circ_stroke z1e{left}...{down}z2e...{right}z3e...{up}z4e; filldraw circ_stroke z9e{right}...z8e{down}...{left}z7e...{up}z6e; elseif SansSerif: pickup fine.nib; pos2(stem,-180); pos8(stem,0); lft x2r=w-rt x8r=hround(u-o); y2=y8=.8bar_height; %left and right bulges pos4(.9stem,0); pos6(.9stem,180); y4=y6=.8bar_height; .5[x4,x6]=.5w; x4l=x6l-.9stem; bot y3r=bot y7r=-oo; x3=.5[x2,x4]; x7 =.5[x6,x8]; numeric omegaloop; omegaloop=.8stem; pos3(omegaloop,-90); pos7(omegaloop,-90); %left and right bottom top y1r=x_height=top y9r; %left tip x1=.5[x2,.5w]; pos1(1.2stem,180); %lft tip x9=.5[x8,.5w]; pos9(1.2stem,0); %rt tip filldraw stroke z1e{(z2-z1) xscaled 2}...z2e{down}...z3e{right}...{up}z4e; filldraw stroke z6e{down}...z7e{right}...{up}z8e...{(z9-z8) xscaled 2}z9e; x10l=x4l; x10r=x6l; y10l=y10r; bar_height=.5[y10l,y4l]; filldraw z4l--z6l--z10r--z10l--cycle; else: pickup fine.nib; pos2(stem,-180); pos8(stem,0); lft x2r=w-rt x8r=hround(u-o); y2=y8=.8bar_height; %left and right bulges if serifs: pos4(hair,0); pos6(hair,180); %left and right of loop else: pos4(.7vair,0); pos6(.7vair,180); fi y4=y6=bar_height; .5[x4,x6]=.5w; x4r-x6r=.5[flare,vair]; bot y3r=bot y7r=-oo; x3=.5[x2,x4]; x7 =.5[x6,x8]; numeric ang; ang= 60; numeric omegaloop; omegaloop=if not serifs: .7 fi stem; pos3(omegaloop,-90-ang); pos7(omegaloop,-90+ang); %left and right bottom top y1r=x_height+o=top y9r; %left tip x1=.5[x2,.5w]; pos1(.2[stem,hair],angle(-.5w,y2-x_height)-90); %lft tip x9=.5[x8,.5w]; pos9(.8[stem,hair],angle(-.5w,x_height-y2)-90); %rt tip filldraw stroke z1e{(z2-z1) xscaled 2}...z2e{down}...z3e{right}; filldraw stroke z7e{right}...{up}z8e...{(z9-z8) xscaled 2}z9e; drawloop(3,4,6,7); fi numeric x_baryctr; x_baryctr=.5[x4,x6]; numeric pos_stem; pos_stem=x_baryctr; % iota sub position fi enddef; cmchar "Lowercase omega"; beginchar("w",dims); this_letter; penlabels(0,1,2,3,4,5,6,7,8,9,10); endchar;% "Lowercase omega" iff(not barebones): cmchar "Lowercase omega with grave"; beginchar(oct"260",width#,acc_ht#,0); this_letter; if (not small_caps): grave(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase omega with rough breathing"; beginchar(oct"261",width#,acc_ht#,0); this_letter; if (not small_caps): spirit(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase omega with smooth breathing"; beginchar(oct"262",width#,acc_ht#,0); this_letter; if (not small_caps): spirit(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase omega with grave and iota subscript"; beginchar(oct"264",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(0,serif_fit#+.5[vair#,stem#]+tiny# if (slitex or (not serifs)):+.5*(.5[vair#,stem#]) else:+.7jut# fi+.7u#); gen_letter; else: this_letter; grave(x_baryctr);fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase omega with rough breathing and iota subscript"; beginchar(oct"265",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(0,serif_fit#+.5[vair#,stem#]+tiny# if (slitex or (not serifs)):+.5*(.5[vair#,stem#]) else:+.7jut# fi+.7u#); gen_letter; else: this_letter; spirit(x_baryctr)<; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase omega with smooth breathing and iota subscript"; beginchar(oct"266",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(0,serif_fit#+.5[vair#,stem#]+tiny# if (slitex or (not serifs)):+.5*(.5[vair#,stem#]) else:+.7jut# fi+.7u#); gen_letter; else: this_letter; spirit(x_baryctr)>; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase omega with acute"; beginchar(oct"270",width#,acc_ht#,0); this_letter; if (not small_caps): acute(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase omega with rough breathing and acute"; beginchar(oct"271",width#,acc_ht#,0); this_letter; if (not small_caps): spirit_acute(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase omega with smooth breathing and acute"; beginchar(oct"272",width#,acc_ht#,0); this_letter; if (not small_caps): spirit_acute(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase omega with rough breathing and grave"; beginchar(oct"263",width#,acc_ht#,0); this_letter; if not small_caps: spirit_grave(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase omega with smooth breathing and grave"; beginchar(oct"273",width#,acc_ht#,0); this_letter; if not small_caps: spirit_grave(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase omega with rough breathing and grave and iota subscript"; beginchar(oct"267",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(0,serif_fit#+.5[vair#,stem#]+tiny# if (slitex or (not serifs)):+.5*(.5[vair#,stem#]) else:+.7jut# fi+.7u#); gen_letter; else: this_letter; spirit_grave(x_baryctr)<; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase omega with smooth breathing and grave and iota subscript"; beginchar(oct"277",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(0,serif_fit#+.5[vair#,stem#]+tiny# if (slitex or (not serifs)):+.5*(.5[vair#,stem#]) else:+.7jut# fi+.7u#); gen_letter; else: this_letter; spirit_grave(x_baryctr)>; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase omega with acute and iota subscript"; beginchar(oct"274",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(0,serif_fit#+.5[vair#,stem#]+tiny# if (slitex or (not serifs)):+.5*(.5[vair#,stem#]) else:+.7jut# fi+.7u#); gen_letter; else: this_letter; acute(x_baryctr); fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase omega with rough breathing, acute and iota subscript"; beginchar(oct"275",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(0,serif_fit#+.5[vair#,stem#]+tiny# if (slitex or (not serifs)):+.5*(.5[vair#,stem#]) else:+.7jut# fi+.7u#); gen_letter; else: this_letter; spirit_acute(x_baryctr)<; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase omega with smooth breathing and acute and iota subscript"; beginchar(oct"276",width#,if small_caps:height#else:acc_ht#fi,iota_dp#); if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(0,serif_fit#+.5[vair#,stem#]+tiny# if (slitex or (not serifs)):+.5*(.5[vair#,stem#]) else:+.7jut# fi+.7u#); gen_letter; else: this_letter; spirit_acute(x_baryctr)>; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase omega with circumflex"; beginchar(oct"300",width#,circ_ht#,0); this_letter; if (not small_caps): squeeze:=false; circumflex(x_baryctr); fi endchar; iff(not barebones): cmchar "Lowercase omega with rough breathing and circumflex"; beginchar(oct"301",width#,Circ_ht#,0); this_letter; if (not small_caps): squeeze:=true; spirit_circumflex(x_baryctr)<; fi endchar; iff(not barebones): cmchar "Lowercase omega with smooth breathing and circumflex"; beginchar(oct"302",width#,Circ_ht#,0); this_letter; if (not small_caps): squeeze:=true; spirit_circumflex(x_baryctr)>; fi endchar; iff(not barebones): cmchar "Lowercase omega with circumflex and iota subscript"; beginchar(oct"304",width#,if small_caps:height#else:circ_ht#fi,iota_dp#); if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(0,serif_fit#+.5[vair#,stem#]+tiny# if (slitex or (not serifs)):+.5*(.5[vair#,stem#]) else:+.7jut# fi+.7u#); gen_letter; else: this_letter; squeeze:=false; circumflex(x_baryctr); fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase omega with rough breathing, circumflex and iota subscript"; beginchar(oct"305",width#,if small_caps:height#else:Circ_ht#fi,iota_dp#); if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(0,serif_fit#+.5[vair#,stem#]+tiny# if (slitex or (not serifs)):+.5*(.5[vair#,stem#]) else:+.7jut# fi+.7u#); gen_letter; else: this_letter; squeeze:=true; spirit_circumflex(x_baryctr)<; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase omega with smooth breathing, circumflex and iota subscript"; beginchar(oct"306",width#,if small_caps:height#else:Circ_ht#fi,iota_dp#); if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(0,serif_fit#+.5[vair#,stem#]+tiny# if (slitex or (not serifs)):+.5*(.5[vair#,stem#]) else:+.7jut# fi+.7u#); gen_letter; else: this_letter; squeeze:=true; spirit_circumflex(x_baryctr)>; fi iota_sub(pos_stem); endchar; iff(not barebones): cmchar "Lowercase omega with iota subscript"; beginchar(oct"372",width#,height#,iota_dp#); if small_caps: italcorr .75*height#*slant-.5u#; adjust_fit(0,serif_fit#+.5[vair#,stem#]+tiny# if (slitex or (not serifs)):+.5*(.5[vair#,stem#]) else:+.7jut# fi+.7u#); gen_letter; else: this_letter; fi iota_sub(pos_stem); endchar; %picture pic.iota; picture savedpicture; currentbreadth:=0; % digamma def dims = if small_caps: 10u#,sclc*x_height#,0 else: if cbroman:9.5 %elseif cbleipzig:7.5 else:9 fi u#,% if cbleipzig:asc_height# else:x_height# fi, if cbleipzig:0 else:desc_depth# fi fi enddef; def ital = 0 enddef; def fit_params = if small_caps: serif_fit#,0elseif cbroman: -.5u#,0 else:0,0 fi enddef; def gen_letter = adjust_fit(fit_params); if small_caps: italcorr height#*slant-serif_fit#+jut#-2.5u#+min(.5stem#,u#); h:=vround(h-stem_corr); pickup tiny.nib; pos1(stem,0); pos2(stem,0); lft x1l=lft x2l=hround max(2u,3u-.5stem); top y1=h; bot y2=0; filldraw stroke z1e--z2e; % stem pickup crisp.nib; pos3(slab,90); pos4(hair,0); top y3r=h; x3=x1; rt x4r=hround(w-.75u); y4=good.y(y3l-0.6beak)-eps; arm(3,4,e,beak_darkness,beak_jut); % upper arm and beak pos5(bar,-90); pos6(hair,0); top y5l=vround(.5[y2,y1]+.5bar); x5=x1; pos0(bar,90); pos7(hair,0); z0=z5; x6=x7; y6-y5l=y0l-y7; if serifs: rt x6r=hround(w-4u+.5hair); 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 if serifs: nodish_serif(1,2,a,1/3,jut,b,1/3,.5jut); % upper serif dish_serif(2,1,c,1/3,jut,d,1/3,1.25jut); % lower serif fi else: if cursive: if slitex or monospace: pickup fine.nib; fi pos1(stem,0); bot y1=-d; lft x1l=u; pos2(hair,-90); rt x2 + lft x1l=w; top y2l=h; pos3(hair,-90); x3=x1+stem; y3= y2; pos7(.3[hair,stem],0); rt x7r=rt x1r; z3-z7=whatever*(1,1); pos5(hair,90); x5=.5[x1,x7]; pos6(hair,90); y6=y5; top y6r=bar_height; z6-z1=whatever*(z2-z1); filldraw stroke z1e..z7e{up}..{right}z3e..z2e; filldraw stroke z6e..z5e; elseif cbleipzig: italcorr asc_height#*slant-.5u#; pos1(stem,-90); bot y1r=-d; lft x1l-.5stem=0; pos2(.7[hair,stem],-60); z2l=z1l+.3u*dir(10); pos3(hair,0); z3l=z1l+u*dir(45); pos4(hair,0);x3=x4; pos5(.7[hair,stem],-60); z5r=z6r-.3u*dir(10); pos6(stem,-90); z6r=z4r+u*dir(45); top y6l=h; pos7(stem,-90);y7=y6; rt x7l=w-.7u; pos8(.7[hair,stem],90); z8-(w/2,-d)=whatever*(z7-(w/2,-d)); y8=y6-(x_height-4/5bar_height); pos9(.7[hair,stem],90); y9=y8;x9=x3; filldraw circ_stroke z1e{right}...z2e...{up}z3e...{up}z4e...z5e...{right}z6e---z7e; filldraw circ_stroke z8e---z9e; %currentpicture:=currentpicture shifted (slant*d,d); elseif cbroman: h:=vround(h-stem_corr); pickup tiny.nib; pos1(stem,0); pos2(stem,0); lft x1l=lft x2l=hround max(2u,3u-.5stem); top y1=h; bot y2=-d; filldraw stroke z1e--z2e; % stem pickup crisp.nib; pos3(slab,90); pos4(hair,0); top y3r=h; x3=x1; rt x4r=hround(w-.75u); y4=good.y(y3l-0.6beak)-eps; arm(3,4,e,beak_darkness,.8beak_jut); % upper arm and beak pos5(bar,-90); pos6(hair,0); top y5l=vround(.5[y2,y1]+.5bar); x5=x1; pos0(bar,90); pos7(hair,0); z0=z5; x6=x7; y6-y5l=y0l-y7; z10=z2+whatever*(z4-z2); y10=.5[y6,y7];x6=x10; y6=good.y(y5l+.5beak)+eps; rt x9r=hround(w-.5u); arm(5,6,f,beak_darkness,0); arm(0,7,g,beak_darkness,0); % middle arm and serif serif(1,2,a,1/3,-.8jut); % upper serif dish_serif(2,1,c,1/3,.8jut,d,1/3,jut); % lower serif elseif SansSerif: pickup fine.nib; pos1(stem,0); bot y1=-d; lft x1l=u; pos2(.2[stem,hair],-90); x2+ lft x1l=w; top y2l=h; pos3(.2[hair,stem],-90); % x3=max(.5[x1,x2],x1+stem); x3=x1+stem; y3= y2; pos7(.2[hair,stem],0); rt x7r=rt x1r; z3-z7=whatever*(1,1); pos4(.2[hair,stem],0); pos5(hair,90); x5=x4; pos6(.2[stem,hair],90); rt x4r=rt x1r; y4=.5[bot y6l,y1]; y6=y5; top y6r=bar_height; z6-z1=whatever*(z2-z1); filldraw stroke z1e..z4e{up}..z7e{up}..{right}z3e..z2e; filldraw stroke z6e..{left}z5e; else: if serifs: pickup crisp.nib; else: pickup fine.nib; fi pos1(stem,0); bot y1-.5(stem-currentbreadth)=-d; lft x1l=u; pos2(.2[stem,hair],-90); x2+.5stem + lft x1l=w; top y2l=h; pos3(.2[hair,stem],-90); % x3=max(.5[x1,x2],x1+stem); x3=x1+stem; y3= y2; pos7(.2[hair,stem],0); rt x7r=rt x1r; z3-z7=whatever*(1,1); pos4(.2[hair,stem],0); pos5(hair,90); x5=x4; pos6(.2[stem,hair],90); rt x4r=rt x1r; y4=.5[bot y6l,y1]; y6=y5; top y6r=bar_height; z6-z1=whatever*(z2-z1); filldraw double_circ_stroke z1e..z4e{up}..z7e{up}..{right}z3e..z2e; filldraw circ_stroke z6e..{left}z5e; fi fi enddef; cmchar "Lowercase digamma"; beginchar(oct"223",dims); gen_letter; penlabels(0,1,2,3,4,5,6,7,8,9); endchar; currentbreadth:=0; cmchar "The letter sva"; % per la forma italica bisogna provvedere 19/07/01<<<<<<<<<<<<<< % "e" cloned from romanl.mf; added 180 deg. rotation about a suitably chosen z6 or z7 point % that takes care of non zero font slant -- strangely enough z6 is not in the center % of the original letter "e" if slant<>0 beginchar(oct"032",7.25u#+max(.75u#,.5curve#),x_height#,0); italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0); adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi); if cursive or cbleipzig: italcorr max(1/3x_height#*slant,x_height#*slant+.5(.2[hair#,stem#])-u#); adjust_fit(0,0); pickup fine.nib; numeric heavy_hair; heavy_hair=hround .2[hair,stem]; pos0(vair,-90); pos1(heavy_hair,0); pos2(vair,90); pos3(curve,180); pos4(vair,270); pos5(hair,320); x0=rt x3l; rt x1r=hround(w-1.5u+.5heavy_hair); x2=x4=.5(w+u); lft x3r=hround(1.5u-.5curve); x5r=good.x(w-eps); x6=x5; y0=y3=y6=bar_height; y1=.5[y0,y2]; top y2r=h+oo; bot y4r=-oo; top y5l=vround .5bar_height; path p; p=z4{right}..z5..z6; filldraw stroke z0e{right}...z1e{up}...pulled_arc.e(2,3) & pulled_arc.e(3,4)...{direction 1 of p}z5e; % arc z7=(.5[x3r,x5r]+slant[-u/4,3.5u],h/2); currentpicture:=currentpicture rotatedaround(z7,180); else: numeric left_curve,right_curve; left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi; if right_curve