cmchar "Tao"; beginchar(oct"177",18u#,cap_height#,18u#-cap_height#); adjust_fit(0,0); pickup fine.nib; bot y1=cap_height; y2=-d; y3=.5[y1,y2]; y6=.666[y2,y3]; y7=.333[y2,y3]; top y5=.333[y3,y1]; bot y4=.666[y3,y1]; y11=.25[y2,y1]; y10=.75[y2,y1]; y13=y3;x13=w; x1=x2=x3=x4=x5=x6=x7=.5w; penpos2(hair,90); lft x10=.25w; lft x11=.75w; draw z1..z2..cycle; fill z6..z7..cycle; fill z2r{right}..z11{up}..z3{left}..z10{up}..z1{right}.. z13{down}..z2l{left}--z2r..cycle; unfill z4..z5..cycle; penlabels(1,2,3,4,5,6,7,10,11,13); endchar; picture savedpicture; cmchar "Diaeresis"; beginchar(oct"042",9u#,circ_ht#,0); adjust_fit(0,0);diaeresis(.5w); endchar; picture savedpicture; cmchar "Iota subscript"; beginchar("|",9u#,0,.6desc_depth#); adjust_fit(0,0);iota_sub(.5w); endchar; picture savedpicture; def width = 5u enddef; def dims = width#,x_height#,0 enddef; def ital = 0 enddef; def fit_params = if monospace: u#,u# else:0,2curve#-3u# fi enddef; def gen_letter= pickup fine.nib; pos1(flare,180); lft x1r=hround u; top y1=x_height+oo; % top numeric neck; neck=.2[hair,stem]; pos2(neck,180); .2[lft x2r,rt x2l]=.2[lft x1r,rt x1l]; % neck pos3(curve,-90); bot y3r=-oo; % bottom y2r=if monowidth: 2 else: 1.5 fi[bot y3r,top y3l]; z3r-z2r=whatever*(1,-1.25); if monowidth: y4r+.5neck=vround y2r; x3=.5[x2,x4]; pos4(neck,0); % tip of hook filldraw stroke z4e...z3e...z2e---z1e; else: z4l=z4r; top y4r=y2r; z4l-z3l=whatever*(1,1); 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 x2.5l:= rt xpart directionpoint down 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 traba(.5u); numeric x_baryctr; x_baryctr=x1; enddef; cmchar "Inverse lowercase iota with circumflex"; beginchar(oct"126",width#,circ_ht#,0); this_letter; circumflex(x_baryctr); transform anokato; anokato:= identity rotatedaround ((.5w,.5[y3r,y1]),180); currentpicture:= currentpicture transformed anokato; endchar; picture savedpicture; def width = 8.5u enddef; def height = x_height enddef; def depth = desc_depth enddef; def dims = width#,height#,depth# enddef; def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_letter_rho = adjust_fit(0,0); pickup fine.nib; lft x4r=hround .75u; x8r=w-x4r; y4r=y8r=.5x_height; % left and right top y2r=x_height+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=-d-oo; x9=lft x4r+.5stem; % end of handle pos9(stem,angle((z9-z4)xscaled3)-120); 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); fi numeric x_baryctr; x_baryctr=x2; % breathing placement enddef; cmchar "Lowercase rho with rough breathing"; beginchar(oct"010",width#,acc_ht#,depth#); gen_letter_rho; spirit(x_baryctr)<; endchar; cmchar "Lowercase rho with smooth breathing"; beginchar(oct"011",width#,acc_ht#,depth#); gen_letter_rho; spirit(x_baryctr)>; endchar; picture savedpicture; cmchar "Uppercase Qappa"; beginchar(oct"103",12u#,cap_height#,0); italcorr .75cap_height#*slant-.5u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; penpos1(cap_stem'-tiny,0); penpos2(cap_stem-tiny,0); pos0(cap_stem',0); pos0'(cap_stem,0); lft x1l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0; x1l=x2l=x0l=x0'l; y0=y0'=y7; penpos3(cap_band,90); penpos4(cap_band,90); penpos5(cap_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); x4l:=x6l:=x4-.25cap_curve; 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,cap_jut,b,1/3,.5cap_jut); % upper serif dish_serif(2,0',c,1/3,cap_jut,d,1/3,cap_jut); fi % lower serif math_fit(0,ic#-2.5u#); transform antistrofh; antistrofh=identity reflectedabout ((w/2,0),(w/2,1)); picture krufo; krufo=currentpicture transformed antistrofh; picture currentpicture; currentpicture=krufo; penlabels(0,1,2,3,4,5,6,7); endchar; picture savedpicture; def ital = 0 enddef; def fit_params = -.25,0 enddef; cmchar "lowercase sanpi"; beginchar(oct"136",13u#,.9body_height#,0); adjust_fit(0,0); penpos1(vstem,135); penpos2(1.2cap_stem,0); x2r=hround(w-.75u); y2=0; top y1=hround(h-u); lft x1r=0; fill z2l{-4/5,1}..z1l--z1r..{3/5,-1}z2r--z2l--cycle; penpos3(cap_stem,45); penpos4(hair,0); penpos8(hair,-45); penpos5(cap_stem,45); penpos6(hair,0); penpos7(hair,-45); x3=x8=.33x2l; x5=x7=2x3; x4r=x3-vstem; x6r=x5-.8vstem; y4=.5y8; y6=.5y7; y3=y5=0; y8=.66h; y7=.45h; filldraw circ_stroke z3e...z4e...z8e; filldraw circ_stroke z5e...z6e...z7e; penlabels(1,2,3,4,5,6,7,8); endchar; picture savedpicture; cmchar "lowercase qoppa"; beginchar(oct"133",9u#,.5(body_height#+x_height#),0); adjust_fit(0,0); pickup pencircle xscaled vstem rotated 25; y1=y2=x_height; x1=1.5u; x2=7.5u; draw z1..z2..cycle; penpos3(hair,0); penpos4(1.7stem,45); y3=x_height-3u; x3=x4=4.5u; y4=0; filldraw circ_stroke z4e---z3e; penlabels(1,2,3,4); endchar; picture savedpicture; def gen_qoppa = pickup pencircle xscaled 1.11stem rotated 25; y1=0.5x_height; y2-y1=0.125d; y3=-d; y4-y1=y2-y3; x1=0; rt x2=w; x2-x3=.25w; x4-x1=.25w; draw z1--z2; draw z3--z2; draw z1--z4; enddef; cmchar "variation of lowercase qoppa"; beginchar(oct"134",8u#,1.125desc_depth#,desc_depth#); adjust_fit(0,0); gen_qoppa; endchar; picture savedpicture; cmchar "Uppercase Sanpi"; beginchar(oct"137",15u#,cap_height#,0); adjust_fit(cap_serif_fit#,cap_serif_fit#); numeric left_stem,right_stem,outer_jut,alpha; right_stem=cap_stem-stem_corr; left_stem=min(cap_hair if hefty: -3stem_corr fi,right_stem); outer_jut=.8cap_jut; 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; endchar; cmchar "Diaeresis with grave"; beginchar(oct"004",9u#,acc_ht#,0); adjust_fit(0,0);diaeresis_grave(.5w); endchar; cmchar "Diaeresis with circumflex"; beginchar(oct"005",9u#,Circ_ht#,0); adjust_fit(0,0);diaeresis_circumflex(.5w); endchar; cmchar "Breve accent"; beginchar(oct"006",9u#,min(asc_height#,2x_height#),0); italcorr h#*slant+1.0vair#-1.5u#; adjust_fit(0,0); pickup crisp.nib; pos1(1.5vair,-180); pos3(1.5vair,0); top y1=top y3=h; lft x1r=w-rt x3r=hround(2u-.5vair); numeric mid_thickness; mid_thickness=vround 1/3[vair,stem]; pos2(mid_thickness,-90); x2=.5w; bot y2r=vround max(x_height+o+tiny,1/3[x_height,h]+o-.5mid_thickness); filldraw stroke z1e{down}...z2e{right}...{up}z3e; % stroke endchar; cmchar "Macron (bar) accent"; numeric macron_breadth#; macron_breadth#=.2[vair#,stem#]; beginchar(oct"007",9u#,.4[x_height#,asc_height#]+macron_breadth#,0); italcorr h#*slant-.75u#; adjust_fit(0,0); numeric macron_breadth; macron_breadth:=Vround .2[vair,stem]; pickup if serifs: crisp.nib else: fine.nib fi; pos1(macron_breadth,90); pos2(macron_breadth,90); top y1r=top y2r=h+o; lft x1=w-rt x2=hround 1.25u; filldraw stroke z1e--z2e; % bar endchar; old_u#:=u#; % unit width old_width_adj#:=width_adj#; % width adjustment for certain characters old_cap_serif_fit#:=cap_serif_fit#; old_cap_height#:=cap_height#; % height of caps old_desc_depth#:=desc_depth#; old_beak#:=beak#; old_tiny#:=tiny#; % diameter of rounded corners old_fine#:=fine#; % diameter of sharply rounded corners old_hair#:=hair#; % lowercase hairline breadth old_stem#:=stem#; % lowercase stem breadth old_curve#:=curve#; % lowercase curve breadth old_cap_stem#:=cap_stem#; % uppercase stem breadth old_o#:=o#; old_cap_jut#:=cap_jut#; % protrusion of uppercase serifs old_beak_jut#:=beak_jut#; % horizontal protrusion of beak serifs old_vair#:=vair#; % vertical diameter of hairlines old_slab#:=slab#; % serif and arm thickness old_cap_bar#:=cap_bar#; % uppercase bar thickness old_stem_corr#:=stem_corr#; % for small refinements of stem breadth old_otilt:=otilt; old_beak_darkness:=beak_darkness; % fraction of triangle inside beak serifs % parameters for the four slanted characters slant:=ysl_slant; font_setup; cmchar "Slanted Lowercase rho with rough breathing"; beginchar(oct"012",width#,acc_ht#,depth#); gen_letter_rho; spirit(x_baryctr)<; endchar; cmchar "Slanted Lowercase rho with smooth breathing"; beginchar(oct"013",width#,acc_ht#,depth#); gen_letter_rho; spirit(x_baryctr)>; endchar; cmchar "Slanted Uppercase digamma (in our days known as F)"; beginchar(oct"023",11.5u#-width_adj#,cap_height#,0); italcorr cap_height#*slant-beak_jut#-.25u#; adjust_fit(cap_serif_fit#,0); h:=vround(h-stem_corr); gen_Digamma; penlabels(0,1,2,3,4,5,6,7,8,9); endchar; cmchar "slanted variation of lowercase digamma"; beginchar(oct"022",8u#,x_height#,desc_depth#); adjust_fit(0,0); gen_digamma; endchar; picture savedpicture; % parameters for the four italic characters u#:=yit_u#; % unit width hair#:=yit_hair#; % lowercase hairline breadth curve#:=yit_curve#; % lowercase curve breadth cap_stem#:=yit_cap_stem#; % uppercase stem breadth cap_jut#:=yit_cap_jut#; % protrusion of uppercase serifs beak_jut#:=yit_beak_jut#; % horizontal protrusion of beak serifs slant:=yit_slant; % tilt ratio $(\Delta x/\Delta y)$ font_setup; def width = 8.25u enddef; def height = x_height enddef; def depth = desc_depth enddef; def dims = width#,height#,depth# enddef; def ital = 0 enddef; def fit_params = 0,0 enddef; def gen_it_rho = adjust_fit(0,0); pickup fine.nib; pos2(stem,180); pos3(vair,90); pos4(curve,0); pos5(vair,-90); pos6(stem,-180); lft x2r=hround(1.5u-.5stem); x2=x6; x3=x5=.5[x2,x4]; rt x4r=hround(w-1.5u+.5curve); y2=y4=y6=.5[y3,y5]; top y3r=x_height+oo; bot y5r=-oo; filldraw circ_stroke pulled_arc.e(2,3) & pulled_arc.e(3,4) & pulled_arc.e(4,5) & pulled_arc.e(5,6); % bowl pos2'(hair,-180); z2'r=z2r; pos1(vstem,-90); pos1'(vstem,90); z1'=z1; pos0(hair,0); rt x0r=hround(w-u); bot y0=-d; bot y1r=vround-.9d; x1=x5; interim superness:=sqrt superness; filldraw stroke pulled_arc.e(0,1'); filldraw stroke pulled_arc.e(1,2'); % tail math_fit(desc_depth#*slant+.5stem#-u#,ic#); numeric x_baryctr; x_baryctr=x3; % breathing placement enddef; cmchar "Italic Lowercase rho with rough breathing"; beginchar(oct"014",width#,acc_ht#,depth#); gen_it_rho; spirit(x_baryctr)<; endchar; cmchar "Italic Lowercase rho with smooth breathing"; beginchar(oct"015",width#,acc_ht#,depth#); gen_it_rho; spirit(x_baryctr)>; endchar; cmchar "Italic Uppercase digamma (in our days known as F)"; beginchar(oct"025",11.5u#-width_adj#,cap_height#,0); italcorr cap_height#*slant-beak_jut#-.25u#; adjust_fit(cap_serif_fit#,0); h:=vround(h-stem_corr); gen_Digamma; penlabels(0,1,2,3,4,5,6,7,8,9); endchar; cmchar "Italic variation of lowercase digamma"; beginchar(oct"024",8u#,x_height#,desc_depth#); adjust_fit(0,0); gen_digamma; endchar; % parameters for the four boldface characters u#:=ybf_u#; % unit width width_adj#:=ybf_width_adj#; % width adjustment for certain characters cap_serif_fit#:=ybf_cap_serif_fit#; cap_height#:=ybf_cap_height#; % height of caps x_height#:=ybf_x_height#; % height of lowercase without ascenders tiny#:=ybf_tiny#; % diameter of rounded corners fine#:=ybf_fine#; % diameter of sharply rounded corners hair#:=ybf_hair#; % lowercase hairline breadth stem#:=ybf_stem#; % lowercase stem breadth curve#:=ybf_curve#; % lowercase curve breadth cap_stem#:=ybf_cap_stem#; % uppercase stem breadth o#:=ybf_o#; cap_jut#:=ybf_cap_jut#; % protrusion of uppercase serifs beak_jut#:=ybf_beak_jut#; % horizontal protrusion of beak serifs vair#:=ybf_vair#; % vertical diameter of hairlines slab#:=ybf_slab#; % serif and arm thickness cap_bar#:=ybf_cap_bar#; % uppercase bar thickness stem_corr#:=ybf_stem_corr#; % for small refinements of stem breadth slant:=ybf_slant; % tilt ratio $(\Delta x/\Delta y)$ beak_darkness:=ybf_beak_darkness; % fraction of triangle inside beak serifs font_setup; cmchar "Boldface Lowercase rho with rough breathing"; beginchar(oct"016",width#,acc_ht#,depth#); gen_letter_rho; spirit(x_baryctr)<; endchar; cmchar "Boldface Lowercase rho with smooth breathing"; beginchar(oct"017",width#,acc_ht#,depth#); gen_letter_rho; spirit(x_baryctr)>; endchar; cmchar "Boldface Uppercase digamma (in our days known as F)"; beginchar(oct"027",11.5u#-width_adj#,cap_height#,0); italcorr cap_height#*slant-beak_jut#-.25u#; adjust_fit(cap_serif_fit#,0); h:=vround(h-stem_corr); gen_Digamma; penlabels(0,1,2,3,4,5,6,7,8,9); endchar; cmchar "Boldface variation of lowercase digamma"; beginchar(oct"026",8u#,x_height#,desc_depth#); adjust_fit(0,0); gen_digamma; endchar; u#:=old_u#; % unit width width_adj#:=old_width_adj#; % width adjustment for certain characters cap_serif_fit#:=old_cap_serif_fit#; cap_height#:=old_cap_height#; % height of caps desc_depth#:=old_desc_depth#; beak#:=old_beak#; tiny#:=old_tiny#; % diameter of rounded corners fine#:=old_fine#; % diameter of sharply rounded corners hair#:=old_hair#; % lowercase hairline breadth stem#:=old_stem#; % lowercase stem breadth curve#:=old_curve#; % lowercase curve breadth cap_stem#:=old_cap_stem#; % uppercase stem breadth o#:=old_o#; cap_jut#:=old_cap_jut#; % protrusion of uppercase serifs beak_jut#:=old_beak_jut#; % horizontal protrusion of beak serifs vair#:=old_vair#; % vertical diameter of hairlines slab#:=old_slab#; % serif and arm thickness cap_bar#:=old_cap_bar#; % uppercase bar thickness stem_corr#:=old_stem_corr#; % for small refinements of stem breadth otilt:=old_otilt; beak_darkness:=old_beak_darkness; % fraction of triangle inside beak serifs font_setup; old_ht#:=ht#; % height of characters old_xgap#:=xgap#; % horizontal adjustment old_u#:=u#; % unit width old_s#:=s#; % extra space at the left and the right old_o#:=o#; % overshoot old_px#:=px#; % horizontal thickness of pen ht#:=logo_ht#; % height of characters xgap#:=logo_xgap#; % horizontal adjustment u#:=logo_u#; % unit width s#:=logo_s#; % extra space at the left and the right o#:=logo_o#; % overshoot px#:=logo_px#; % horizontal thickness of pen ygap#:=(ht#/13.5u#)*xgap#; % vertical adjustment ho#:=o#; % horizontal overshoot leftstemloc#:=2.5u#+s#; % position of left stem barheight#:=.45ht#; % height of bar lines py#:=.9px#; % vertical pen thickness define_pixels(s,u); define_whole_pixels(xgap); define_whole_vertical_pixels(ygap); define_blacker_pixels(px,py); pickup pencircle xscaled px yscaled py; logo_pen:=savepen; define_good_x_pixels(leftstemloc); define_good_y_pixels(barheight); define_corrected_pixels(o); define_horizontal_corrected_pixels(ho); def beginlogochar(expr code, unit_width) = beginchar(code,unit_width*u#+2s#,ht#,0); pickup logo_pen enddef; def super_half(suffix i,j,k) = draw z.i{0,y.j-y.i} ... (.8[x.j,x.i],.8[y.i,y.j]){z.j-z.i} ... z.j{x.k-x.i,0} ... (.8[x.j,x.k],.8[y.k,y.j]){z.k-z.j} ... z.k{0,y.k-y.j} enddef; beginlogochar(oct"030",18); adjust_fit(0,0); x1=x2=leftstemloc; x4=x5=w-x1; x3=w-x3; y1=y5; y2=y4; bot y1=-o; top y2=h+o; y3=y1+ygap; draw z1--z2--z3--z4--z5; labels(1,2,3,4,5); endchar; beginlogochar(oct"031",14); adjust_fit(0,0); x1=x2=x3=leftstemloc; x4=x6=w-x1+ho; x5=x4-xgap; y1=y6; y2=y5; y3=y4; bot y1=0; top y3=h; y2=barheight; draw z6--z1--z3--z4; draw z2--z5; labels(1,2,3,4,5,6); endchar; beginlogochar(oct"032",13); adjust_fit(0,0); italcorr ht#*slant + .5u#; if .5w<>good.x .5w: change_width; fi lft x1=-eps; x2=w-x1; x3=x4=.5w; y1=y2=y3; top y1=h; bot y4=-o; draw z1--z2; draw z3--z4; labels(1,2,3,4); endchar; beginlogochar(oct"033",15); adjust_fit(0,0); x1=.5w; x2=x4=leftstemloc; x3=x5=w-x2; top y1=h+o; y2=y3=barheight; bot y4=bot y5=-o; draw z4--z2--z3--z5; super_half(2,1,3); labels(1,2,3,4,5); endchar; beginlogochar(oct"034",15); adjust_fit(0,0); x1=x4=x5=x6=.5w; top y5=h+o; bot y6=-o; draw z5--z6; top y1=h-py; bot y4=py; x2=w-x3=good.x(1.5u+s); y2=y3=barheight; super_half(2,1,3); super_half(2,4,3); labels(1,2,3,4); endchar; beginlogochar(oct"040",14); adjust_fit(0,0); x1=x2=x3=leftstemloc; x4=w-x1+ho; x5=x4-xgap; y2=y5; y3=y4; bot y1=-o; top y3=h; y2=barheight; draw z1--z3--z4; draw z2--z5; labels(1,2,3,4,5); endchar; beginlogochar(oct"036",15); adjust_fit(0,0); x1=x4=.5w; top y1=h+o; bot y4=-o; x2=w-x3=good.x(1.5u+s); y2=y3=barheight; super_half(2,1,3); super_half(2,4,3); labels(1,2,3,4); endchar; beginlogochar(oct"037",15); adjust_fit(0,0); x1=x2=leftstemloc; x3=x4=x5=w-x1; bot y1=bot y4=-o; top y2=top y5=h+o; y3=y4+ygap; draw z1--z2--z3; draw z4--z5; labels(1,2,3,4,5); endchar; ht#:=old_ht#; % height of characters xgap#:=old_xgap#; % horizontal adjustment u#:=old_u#; % unit width s#:=old_s#; % extra space at the left and the right o#:=old_o#; % overshoot px#:=old_px#; % horizontal thickness of pen