%***************************************************************************** % Copyright (c) 1989 by N. N. Billawala %***************************************************************************** % number.mf numerals % 10 characters iff OK "0": "The number 0"; beginchar("0",num_width_c#+c_mono#,cap#,0); if mono<>0:save circ; circ1=circ2=circ3=1.05; fi top z1=(h_stress*w,h+ov_t.uc)//; lft z2=(0,(1-v_stress)*h)//; bot z3=((1-h_stress)*w,-ov_b.uc)//; rt z4=(w,v_stress*h)//; circular_shape(y1,y3,x2,x4,minor_curve.uc,bowlstem.uc); showpoints(1,2,3,4); adjust(.5num_fit_c#+m_a*c_mfit#,.5num_fit_c#+m_a*c_mfit#); show_character; endchar; iff OK "1": "The number 1"; beginchar("1",num_width_a#+b_mono#,cap#,0); save_num(terminal_thickness)=max(.75thin_stem.uc,.3stem.uc); bot z40=(.5w,0); multpos(1,4,40)(stem.uc,0); lft x4l=round x40l; bot y4=0; top z1=(x4,h)//; onaline(1l,4l)(2l,3l); y3l=y3r=cap_bracket_h; onaline(1r,4r)(2r,3r); y2r=y2l=max(h-cap_bracket_h,y3l); y2l:=min(y2l,h-terminal_thickness-(stem.uc*sind max(25-.5oblique,0))); p1=fullserif(z4,z1,z3l,z3r,1.25hs,1.25hs)-- terminalserif.l(z1,z4,z2l,z2r,1.5pt,max(25-.5oblique,0))--cycle; showpoints(1,2,3,4); adjust(.5num_fit_a#+m_a*b_mfit#,.5num_fit_a#+m_a*b_mfit#); show_character; endchar; def character_points= iff OK "2": "The number 2"; beginchar(50+alt8,num_width_b#+b_mono#,cap#,0); twotension:=10; z1=(.05w,.9h)//; rt z3r=(w,if inflection_two:.75h else:.7h fi)//;lft z3l=(z3r-(bowlstem.uc,0)); top y2r=bot y2l+max(1,major_curve.uc)=h+ov_t.uc; good_x_for(2r)(z1,z3r,.5)a; good_x_for(2l)(z1+(bulb_thickness,0),z3l,.5)b; top lft z5l=(0,max(1,.9stem.uc))//; z4l=.5[z5l,z3l]; bot lft z6l=(0,0); z6r=z6l+(0,apex.uc)//; bot rt z8=(.95w,0); bot y7l=top y7r-max(1,.9stem.uc)=0; good_x_for(7l)(z6l,z8,.5)c; good_x_for(7r)(z5r,z8-(tip_thickness,0),.5)d; ref1=(z6r-(0,max(1,.8thin_stem.uc))) ..tension atleast twotension and 1..z3r{upward}; ref2=z3l{downward}..tension atleast 1 and twotension..z6r; ref3=(-1,y7r)--(w,y7r); ref4=z3l{downward}...z4l...z6r{downward}...z6l; if inflection_two: rt z5r=ref4 intersectionpoint ref3+(1.3thin_stem.uc,0); z4r=.5[z5r,z3r]; p1=(bulb.tl(z1,z2l,z2r,cs,bulb_thickness,90)soft i_t ref4 if softpath:)softjoin(z6l fi --arm.br(z8,z7r,z7l,.5as,.75tip_thickness,90-arm_angle+.5oblique)soft-- z5r if softpath:)softjoin(z5r fi {upward}..z4r...z3r{upward} o_t z2r{left})--cycle; else: rt z5r=ref1 intersectionpoint ref3; (t1,t2)=ref1 intersectiontimes ref3; p1=(bulb.tl(z1,z2l,z2r,cs,bulb_thickness,90)soft i_t ref2 soften(z6r,z6l) arm.br(z8,z7r,z7l,.5as,.75tip_thickness,90-arm_angle+.5oblique)soft--z5r if softpath:)softjoin(z5r fi --subpath(t1,infinity)of ref1 o_t z2r{left})--cycle; fi showpoints(1,2,3,4,5,6,7,8); adjust(.5num_fit_b#+m_a*b_mfit#,.5num_fit_b#+m_a*b_mfit#); show_character; endchar; enddef; def number_two=save a,b; vardef a=condition(inflection_two)t; testing_codes; character_points; enddef; vardef b=condition(inflection_two)f; testing_codes; character_points; enddef; if test_all_characters:a;b;else:if inflection_two:a;else:b;fi fi enddef; number_two; save number_two; def three_diagonal_top(expr addtocode)= iff OK "3": "The number 3"; beginchar(51+alt6+addtocode,num_width_b#+b_mono#,cap#,0); top z1=(0w,h)//; lft z9=(0,.05h)//; bot lft z10r=(.05w,-ov_b.uc)//; pos10(minor_curve.uc,-90-oblique); z5=if open_tail:(.2w,.57h)//;else:(.3w,.55h)//; fi z3r=(round(.97w),h-apex.uc)//; z40=(.97w,h)//; x5r=x5+.45thin_stem.uc*(cosd (90-oblique)); x5l=x5r-.9thin_stem.uc*(cosd (90-oblique)); top y2r=bot y2l+max(1,.9stem.uc)=h; top y6r=top y5r=round(y5+.45thin_stem.uc); bot y6l=bot y5l=y5r-max(1,.9thin_stem.uc); bot y8r=top y8l-minor_curve.uc=-ov_b.uc; z4l=z5r; if open_tail:rt z7r=(w,.65[y8r,y6r])//; lft z7l=(x7r-stem.uc,.65[y8l,y6l]); else:rt z7r=(w,v_stress[y8r,y6r])//; lft z7l=(x7r-stem.uc,v_stress[y8l,y6l]); fi numeric theta[],phi[],d[]; d1=thin_stem.uc; theta1=angle(length(z3r-z5r) +-+ d1,d1); phi1=angle(z3r-z5r)-theta1; multpos(3,4)(thin_stem.uc,phi1-90); onaline(3l,4l)(41); y41=y2l; onaline(3r,4r)(42); y42=y5r; good_x_for(2r)(z1,z40,.4)a; good_x_for(2l)(z1+(bulb_thickness,0),z41,.4)b; good_x_for(6r)(z42,z7r,.2)c; good_x_for(6l)(z5l,z7l,.3)d; good_x_for(8r)(z9,z7r,.4)e; good_x_for(8l)(z9+(bulb_thickness,0),z7l,.4)f; p1=(arm.tl(z1,z2l,z2r,.5as,.5tip_thickness,90)soft soften(z41,z5r,z5l) z6l{right} i_t z7l{downward} i_t if open_tail:{-(dir (7*h/w))}z10l--z10r{dir(7*h/w)} else:bulb.bl(z9,z8l,z8r,.75cs,.75bulb_thickness,90) fi o_t z7r{upward} o_t z6r{left} soften(z42,z3r,z40) z2r)--cycle; showpoints(1,2,3,4,5,6,7,8,9,10,40,41,42); adjust(.5num_fit_b#+m_a*b_mfit#,.5num_fit_b#+m_a*b_mfit#); show_character; endchar; enddef; def three_round_top(expr addtocode)= iff OK "3": "The number 3"; beginchar(51+alt6+addtocode,num_width_b#+b_mono#,cap#,0); z1=(.05w,.95h)//; lft z9=(0,.05h)//; bot lft z10r=(.05w,-ov_b.uc)//; pos10(minor_curve.uc,-90-oblique); z5=(.3w,.55h)//; x5r=x5+.45thin_stem.uc*(cosd (90-oblique)); x5l=x5r-.9thin_stem.uc*(cosd (90-oblique)); top y2r=bot y2l+minor_curve.uc=h+ov_t.uc; top y4r=top y5r=round(y5+.45thin_stem.uc); bot y4l=bot y5l=y5r-max(1,.9thin_stem.uc); y6=.75[y5l,y5r]; bot y8r=top y8l-major_curve.uc=-ov_b.uc; rt z3r=(round(.97w),v_stress[y6,y2r])//; lft z3l=(x3r-stem.uc,v_stress[y5r,y2l]); if open_tail:rt z7r=(w,.65[y8r,y6])//; lft z7l=(x7r-stem.uc,.65[y8l,y4l]); else:rt z7r=(w,v_stress[y8r,y6])//; lft z7l=(x7r-stem.uc,v_stress[y8l,y4l]); fi z3=.5[z3l,z3r]; good_x_for(2r)(z1,z3r,.5)a; good_x_for(2l)(z1+(bulb_thickness,0),z3l,.5)b; good_x_for(4r)(z5r,z3l,.4)c; good_x_for(4l)(z5l,z7l,.4)d; good_x_for(6)(z5,z3,.6)e; good_x_for(8r)(z9,z7r,.4)g; good_x_for(8l)(z9+(bulb_thickness,0),z7l,.4)f; p1=(bulb.tl(z1,z2l,z2r,1.2cs,.75bulb_thickness,90)soft i_t z3l{downward} i_t z4r{left} soften(z5r,z5l) z4l{right} i_t z7l{downward} i_t if open_tail:{-(dir (7*h/w))}z10l--z10r{dir(7*h/w)} else:bulb.bl(z9,z8l,z8r,.75cs,.75bulb_thickness,90) fi o_t z7r{upward} o_t z6{left}--(z6+(0,epsilon){right} o_t z3r{upward} o_t z2r{left}))--cycle; showpoints(1,2,3,4,5,6,7,8,9); adjust(.5num_fit_b#+m_a*b_mfit#,.5num_fit_b#+m_a*b_mfit#); show_character; endchar; enddef; vardef number_three=save first,second,third,fourth,addtocode; addtocode:=-1; vardef first=condition(diagonal_three)t; condition(open_tail)t; testing_codes; three_diagonal_top(0); enddef; vardef second=condition(diagonal_three)t; condition(open_tail)f; testing_codes; three_diagonal_top(incr addtocode); enddef; vardef third=condition(diagonal_three)f; condition(open_tail)t; testing_codes; three_round_top(incr addtocode+alt7); enddef; vardef fourth=condition(diagonal_three)f; condition(open_tail)f; testing_codes; three_round_top(incr addtocode); enddef; if test_all_characters:first;second;third;fourth; elseif diagonal_three and open_tail:first; elseif diagonal_three and (not open_tail):second; elseif (not diagonal_three) and open_tail:third; elseif (not diagonal_three) and (not open_tail):fourth; fi enddef; number_three; save number_three,three_diagonal_top,three_round_top; iff OK "4": "The number 4"; beginchar(52+alt10,num_width_e#+.5*(d_mono#+e_mono#),cap#,0); min_limit(join_radius)(.5minor_curve.uc); top rt z11r=(round(.82w),h)//; multpos(11,13)(max(1,stem.uc),0); rt z13r=(round(.82w),0); bot lft z4l=(0,round(.2h))//; pos4(apex.uc,90-apex_angle); onaline(11r,13r)(10r,12r,23,25); onaline(11l,13l)(12l,20,22,24,26,27); y12l=y12r=min(cap_bracket_h,y4l); y20=y11r-max(thin_stem.uc,.3stem.uc,1); y10=if open_four:.75h else:h fi; y27=y10+thin_stem.uc-stem.uc; y24=y25=y4l; top y23=bot y24+max(1,.9thin_stem.uc); pos10(apex.uc,0-oblique); z3l=z4r; z1r=if open_four:(x13l,h-.5thin_stem.uc)// else:z20 fi; %z1r controls top of 4 multpos(1,2,3)(thin_stem.uc,constant_angle(z1r,z3l,thin_stem.uc)); onaline(1r,3r)(2r,21); y21=y22=y23; y2r=notch_pos[y20,y21]; onaline(2l,3l)(28); y28=y11r; y26=.8[y22,y20]; rt z5=(w,y4l)//; ref1=z26--z20--z2r; if open_four: p1=(z27--fullserif(z13,z11,z12l,z12r,.75hs,.75hs) soften (z10r,z10) z27)--cycle; p2=(arm.br(z5,z23,z25,.15as,.25tip_thickness,90-arm_angle+.5oblique) soften(z21,z1r,z1l,z4r,z4l) z25)--cycle; else: p1=(z2l soften(z4r,z4l,z24) fullserif(z13,z11,z12l,z12r,.75hs,.75hs)--z25 if softpath:)softjoin(z25 fi --arm.br(z5,z23,z25,.15as,.25tip_thickness,90-arm_angle+.5oblique) soften(z23,z11r,z28) z2l)--cycle; p1'=(upnotch(ref1,angle(z20-z22),notch_length.uc) soften(z21,z22) z26) --cycle; fi showpoints(1,2,3,4,5,10,11,12,13,20,21,22,23,24,25,26,27,28); adjust(.5num_fit_e#+m_f*.5(d_mfit#+e_mfit#), .5num_fit_e#+m_ff*.5(d_mfit#+e_mfit#)); show_character; endchar; def character_points= iff OK "5": "The number 5"; beginchar(53+alt6,num_width_b#+b_mono#,cap#,0); top z1=(.9w,h)//; top z3l=(round .05w,h)//; multpos(3,5)(thin_stem.uc,0-oblique); z5l=(round .05w,if open_tail:.6h else:.55h fi)//; lft z9=(0,.05h)//; bot lft z10r=(.05w,-ov_b.uc)//; pos10(minor_curve.uc,-90-oblique); top y2r=bot y2l+max(1,.9stem.uc)=h; bot y4l=top y4r-max(1,.9thin_stem.uc)=bot y5l; bot y8r=top y8l-minor_curve.uc=-ov_b.uc; if open_tail:rt z7r=(w,.65[y8r,y4r])//;lft z7l=(x7r-stem.uc,.65[y8l,y4l]); else:rt z7r=(w,v_stress[y8r,y4r])//; lft z7l=(x7r-stem.uc,v_stress[y8l,y4l]); fi onaline(3r,5r)(40,41); y40=y2l; y41=y4r; good_x_for(2r)(z3l,z1,.5)a; good_x_for(2l)(z40,z1-(tip_thickness,0),.5)b; good_x_for(4r)(z41,z7r,.4)c; good_x_for(4l)(z5l,z7l,.55)d; good_x_for(8r)(z9,z7r,.4)e; good_x_for(8l)(z9+(bulb_thickness,0),z7l,.4)f; if open_tail: p1=(arm.tr(z1,z2l,z2r,.5as,.5tip_thickness,90)soft soften(z3l,z5l) z4l{right} i_t z7l{downward} i_t {-(dir (7*h/w))}z10l--z10r{dir(7*h/w)} o_t z7r{upward} o_t z4r{left} soften(z41,z40) z2l)--cycle; else: p1=(arm.tr(z1,z2l,z2r,.5as,.5tip_thickness,90)soft soften(z3l,z5l) z4l{right} i_t z7l{downward} i_t z8l{left} i_t bulb.bl(z9,z8l,z8r,.75cs,.75bulb_thickness,90) o_t z7r{upward} o_t z4r{left} soften(z41,z40) z2l)--cycle; fi showpoints(1,2,3,4,5,7,8,9,10,40,41); adjust(.5num_fit_b#+m_a*b_mfit#,.5num_fit_b#+m_a*b_mfit#); show_character; endchar; enddef; vardef number_five= save a,b; vardef a=condition(open_tail)t; testing_codes; character_points; enddef; vardef b=condition(open_tail)f; testing_codes; character_points; enddef; if test_all_characters:a;b; else:if open_tail:a; else:b; fi fi enddef; number_five; save number_five; def character_points= iff OK "6": "The number 6"; beginchar(54+alt6,num_width_c#+c_mono#,cap#,0); save_pairs(good_dir); top z0r=(.9w,h+ov_t.uc)//; pos0(max(1,.9minor_curve.uc),90+taper_angle); z1=(.85w,.98h)//; lft z3r=(0,(1-v_stress)*h)//; rt z3l=z3r+(stem.uc,0); top y2r=bot y2l+minor_curve.uc=h+ov_t.uc; good_x_for(2l)(z3l,z1-(bulb_thickness,0),.7)a; good_x_for(2r)(z3r,z1,.7)b; bot y4r=top y4l-minor_curve.uc=-ov_b.uc; y6r=y6l+max(1,round(.9minor_curve.uc))=.7h; rt z5r=(w,v_stress[y4r,y6r])//; lft z5l=(x5r-stem.uc,v_stress[y4r,y6r]); good_x_for(4l)(z3l,z5l,.5)c; good_x_for(4r)(z3r,z5r,.5)d; y100=(.5ductal)[y6l,y3l]; ref1=z4l{left} i_t z3l{upward} i_t if open_tail:z0l else: z2l{right} fi; z7l=ref1 intersectionpoint ((0,y5r)..(w,y5r)//); z7r=ref1 intersectionpoint ((0,y100)..(w,y100)//); (t1,t2)=ref1 intersectiontimes ((0,y100)..(w,y100)//); good_x_for(6l)(z7l,z5l,.52)e; good_x_for(6r)(z7r,z5r,.5)f; ref2=z6r{left}...z7r; if (angle(direction 1 of ref2)<=-90-oblique)and (angle(direction 1 of ref2)>=-180-oblique):good_dir7=(0,0); else: good_dir7=dir(-90-oblique);fi p1'=z6l{left} i_t z7l{downward} i_t z4l{right} i_t z5l{upward} i_t cycle; p1=if open_tail:(z7r+(0,eps){upward} i_t z0l--z0r else:(subpath(t1,infinity) of ref1-- bulb.tr(z1,z2l,z2r,.75cs,.75bulb_thickness,90)soft fi o_t z3r{downward} o_t z4r{right} o_t z5r{upward} o_t z6r{left}...z7r{good_dir7})--cycle; showpoints(0,1,2,3,4,5,6,7); adjust(.5num_fit_c#+m_a*c_mfit#,.5num_fit_c#+m_a*c_mfit#); show_character; endchar; enddef; def number_six=save a,b; vardef a=condition(open_tail)t; testing_codes; character_points; enddef; vardef b=condition(open_tail)f; testing_codes; character_points; enddef; if test_all_characters:a;b;else:if open_tail:a;else:b;fi fi enddef; number_six; save number_six; iff OK "7": "The number 7"; beginchar("7",num_width_b#+b_mono#,cap#,0); top z1=(0,h)//; z3r=(w,h-apex.uc)//; z40=(w,h)//; z5l=(.05w,0); z6=(x5l+bowlstem.uc,0); top y2r=bot y2l+max(1,.9stem.uc)=h; numeric theta[],phi[],d[]; d1=thin_stem.uc; theta1=angle(length(z3r-z5l) +-+ d1,d1); phi1=angle(z3r-z5l)-theta1; multpos(3,5)(thin_stem.uc,phi1-90); onaline(3l,5l)(4l,41); y41=y2l; y4l=.5[y5l,y41]; z4r=.5[z3r,z5r]; good_x_for(2r)(z1,z40,.5)a; good_x_for(2l)(z1+(tip_thickness,0),z41,.5)b; p1=(arm.tl(z1,z2l,z2r,.5as,.75tip_thickness,90-arm_angle+oblique)soft--z41 if softpath:)softjoin( else:--fi flex(z41,(z4l-(.05w,0)),z5l))softjoin(z5l--z6)softjoin (flex(z6,(z4r-(.05w,0)),z3r)) if softpath:softjoin(z3r--z40)softjoin else:--fi (z40--z2r)--cycle; showpoints(1,2,3,4,5,6,40,41); adjust(.7num_fit_b#+m_e*b_mfit#,.3num_fit_b#+m_ee*b_mfit#); show_character; endchar; iff OK "8": "The number 8"; beginchar("8",num_width_c#+d_mono#,cap#,0); bot z6r=(.5w,-ov_b.uc); top y6l=bot y6r+thin_stem.lc; top z2l=(x6r,h+ov_t.uc)//; bot y2r=top y2l-thin_stem.lc; z4=z8=.55[z6r,z2l]; rt z1l=(round(.95w),.5[y4,y2l])//; lft z1r=rt z1l-(thin_stem.lc,0); lft z3l=(round(.05w),.5[y4,y2l])//; rt z3r=lft z3l+(stem.lc,0); z1=.5[z1l,z1r]; z3=.5[z3l,z3r]; rt z5r=(w,.5[y6r,y4])//; lft z5l=rt z5r-(stem.lc,0); z5=.5[z5l,z5r]; lft z7r=(0,.5[y6r,y4])//; rt z7l=lft z7r+(thin_stem.lc,0); z7=.5[z7l,z7r]; good_x_for(2r)(z3r,z1r,.5)a; good_x_for(6l)(z7l,z5l,.5)b; ref5=z3..z4..z5; ref6=z1..z8..z7; pos4(max(1,.95stem.lc), (angle(postcontrol 1 of ref5-precontrol 1 of ref5))+90); pos8(max(1,thin_stem.lc), (angle(postcontrol 1 of ref6-precontrol 1 of ref6))+90); ref1=z2r{left} i_t z3r{downward} i_t z4r o_t z5r{downward} o_t z6r{left}; ref2=z6r{left} o_t z7r{upward} o_t z8l i_t z1r{upward} i_t z2r{left}; ref3=z2l{right} o_t z1l{downward} o_t z8r i_t z7l{downward} i_t z6l{right}; ref4=z6l{right} i_t z5l{upward} i_t z4l o_t z3l{upward} o_t z2l{right}; (t1,t2)=ref1 intersectiontimes ref2; (t3,t4)=ref1 intersectiontimes ref3; (t5,t6)=ref3 intersectiontimes ref4; (t7,t8)=ref2 intersectiontimes ref4; p1 =(subpath(0,t4-eps)of ref3)--(subpath(t3+eps,infinity)of ref1)-- (subpath(0,t7-eps)of ref2)--(subpath(t8+eps,infinity)of ref4)--cycle; p1'=(subpath(0,t1-eps)of ref1)--(subpath(t2+eps,infinity)of ref2)--cycle; p2'=(subpath(0,t6-eps)of ref4)--(subpath(t5+eps,infinity)of ref3)--cycle; showpoints(1,2,3,5,6,7,41,42,43,44); adjust(.5num_fit_c#+m_a*d_mfit#,.5num_fit_c#+m_a*d_mfit#); show_character; endchar; def character_points=. iff OK "9": "The number 9"; beginchar(57+alt6,num_width_c#+c_mono#,cap#,0); save_pairs(good_dir); bot z0r=(.1w,-ov_b.uc)//; pos0(max(1,.9minor_curve.uc),-90+taper_angle); z1=(.15w,.02h)//; rt z3r=(w,v_stress*h)//; lft z3l=z3r-(stem.uc,0); bot y2r=top y2l-minor_curve.uc=-ov_b.uc; good_x_for(2l)(z3l,z1+(bulb_thickness,0),.7)a; good_x_for(2r)(z3r,z1,.7)b; top y4r=bot y4l+minor_curve.uc=h+ov_t.uc; y6r=y6l-max(1,round(.9minor_curve.uc))=.3h; lft z5r=(0,(1-v_stress)[y4r,y6r])//; rt z5l=(x5r+stem.uc,(1-v_stress)[y4r,y6r]); good_x_for(4l)(z3l,z5l,.5)c; good_x_for(4r)(z3r,z5r,.5)d; y100=(.5ductal)[y6l,y3l]; ref1=z4l{right} i_t z3l{downward} i_t if open_tail:z0l else:z2l{left} fi; z7l=ref1 intersectionpoint ((0,y5r)..(w,y5r)//); z7r=ref1 intersectionpoint ((0,y100)..(w,y100)//); (t1,t2)=ref1 intersectiontimes ((0,y100)..(w,y100)//); good_x_for(6l)(z7l,z5l,.52)e; good_x_for(6r)(z7r,z5r,.5)f; ref2=z6r{right}...z7r; if (angle(direction 1 of ref2)<=90-oblique)and (angle(direction 1 of ref2)>=-oblique):good_dir7=(0,0); else: good_dir7=dir(90-oblique);fi p1'=z6l{right} i_t z7l{upward} i_t z4l{left} i_t z5l{downward} i_t cycle; p1 =if open_tail:(z7r-(0,eps){downward} i_t z0l--z0r else:(subpath(t1,infinity) of ref1-- bulb.bl(z1,z2l,z2r,.75cs,.75bulb_thickness,90)soft fi o_t z3r{upward} o_t z4r{left} o_t z5r{downward} o_t z6r{right}...z7r{good_dir7})--cycle; showpoints(0,1,2,3,4,5,6,7); adjust(.5num_fit_c#+m_a*c_mfit#,.5num_fit_c#+m_a*c_mfit#); show_character; endchar; enddef; def number_nine=save a,b; vardef a=condition(open_tail)t; testing_codes; character_points; enddef; vardef b=condition(open_tail)f; testing_codes; character_points; enddef; if test_all_characters:a;b;else:if open_tail:a;else:b;fi fi enddef; number_nine; save number_nine;