% Lowercase letters for Gladiator % Author: Bert Bos % Date: 22 Oct 1990 def letter_a = % % 2 % ##### % 1 ## ## 3 % 7 ## % ## ## % 8 ## ## 4,4' % ## ### % ### ## % 9 5 % save p; path p; pickup lcpen; lft z1=(u+0.02width-ba,0.8xheight); % Top left top rt z3'=(w-u,0.75xheight); % Top right top z2=(w/2,xheight+vo); % Top of upper curve draw z1{up}..z2{right}..z3'{down}; % Top % bot rt z4'=z4r=(w-u,bowljoin); % End of bowl & stem starts to curve z4r=(w-u,bowljoin); % End of bowl & stem starts to curve % penpos3(lc_thick,0); z3l=z3'+penoffset down of currentpen; z3r=z3'+penoffset up of currentpen; penpos4(lc_thick,0); penstroke z3e..z4e; % Right side tail 4; pickup lccurvepen; top rt z7=(x3l-gap,0.57xheight); % Upper join of bowl lft z8=(u-ba-ho,0.25xheight); % Left tip of bowl bot z9=(0.40[x8,x4],-vo); % Bottom of bowl % draw z7{z8-z7}..z8{down}..z9{right}..tension tens..z4'; draw z7{z8-z7}..z8{down}..{right}z9; % pickup lcthinpen; bot lft z4'=(x4l,bowljoin); draw z9{right}...{up}z4'; enddef; defchar("a", a_width#, xheight#, 0, lcpen, 0); letter_a; endchar; defchar(hex"E1", a_width#, xheight#+2lc_thick#+uc_thick#, 0, lcpen, 0); letter_a; acute(w/2,xheight); endchar; defchar(hex"E0", a_width#, xheight#+2lc_thick#+uc_thick#, 0, lcpen, 0); letter_a; grave(w/2,xheight); endchar; defchar(hex"E5", a_width#, xheight#+2lc_thick#+uc_thick#, 0, lcpen, 0); letter_a; ring(w/2,xheight); endchar; defchar(hex"E2", a_width#, ascender#, 0, lcpen, 0); letter_a; circumflex(w/2,xheight); endchar; defchar(hex"E3", a_width#, xheight#+lc_thick#+2lc_thin#, 0, lcpen, 0); letter_a; tilde(w/2,xheight); endchar; defchar(hex"E4", a_width#, xheight#+2uc_thick#, 0, lcpen, 0); letter_a; umlaut(w/2,xheight); endchar; defchar(hex"A0", a_width#, ascender#, 0, lcpen, 0); letter_a; breve(w/2,xheight); endchar; defchar(hex"A1", a_width#, xheight#, 2lc_thick#, lcpen, 0); letter_a; ogonek(w/2,0); endchar; defchar("b", b_width#, ascender#, 0, lcpen, -b_width#/2); % % # % 1 ### % ## 4 % ## #### % 3 ### ## % ## ## % ## ## 5 % ## 2' ## % 2 ### ## % # #### % 7 6 % path p; numeric s,t; triangle1(lc_thick,u,h+vo); % Draw triangle, define z1, l and r penpos2(lc_thick,0); z2l=(u,1/2bowljoin); % Lower end of stem is above baseline z7l=(x1l,-vo); penpos7(fine,0); fill z1r--z1l--z7l--z7r--z2r--cycle; % Stem and triangle serif pickup lccurvepen; rt z5=(w-u+ba+ho,xheight/2); % Right tip of bowl top z4=(1/2[x5,x2],xheight+vo); % Top of bowl bot z6=(x4,-vo); % Bottom of bowl % draw z4{right}..z5{down}..{left}z6; pickup lcthinpen; bot rt z2'=z2r; top rt z3=(x2r,xheight-bowljoin); % Join of stem and bowl % draw z3{up}..tension tens..{right}z4; % draw z6{left}..tension tens..{up}z2'; p=z3{up}..tension tens..z4{right}..z5{down}..{left}z6..tension tens..{up}z2'; s=directiontime (dirpentilt) of (subpath (0,1) of p); t=directiontime (-dirpentilt) of (subpath (2,3) of p); pickup lccurvepen; cutdraw subpath (0+s,2+t) of p; pickup lcthinpen; cutdraw subpath (0,s) of p; cutdraw subpath (2+t,4) of p; endchar; def letter_c = % % 2 % ##### % ## ## 1 % ## % 3 ## % ## % ## # 5 % ##### % 4 % path p; numeric s, t; pickup lccurvepen; top rt z1=(w-u+ba-0.02width+ho,h-bowljoin/2); top z2=(w/2,xheight+vo); lft z3=(u-ba-ho,xheight/2); bot z4=(x2,-vo); rt z5=(w-u+ba+ho,0.25xheight); p=z1..{left}z2..{down}z3..{right}z4..z5; s=directiontime dirpentilt of (subpath (3,4) of p); cutdraw subpath (0,3+s) of p; drawdot z1; pickup lcthinpen; draw subpath (3+s,infinity) of p; enddef; defchar("c", c_width#, xheight#, 0, lccurvepen, 0); letter_c; endchar; defchar(hex"E7", c_width#, xheight#, 2lc_thick#, lccurvepen, 0); letter_c; cedilla(w/2,0); endchar; defchar(hex"A2", c_width#, xheight#+2lc_thick#+uc_thick#, 0, lccurvepen, 0); letter_c; acute(w/2,xheight); endchar; defchar(hex"A3", c_width#, ascender#, 0, lccurvepen, 0); letter_c; caron(w/2,xheight); endchar; def letter_d = % % % % # 1 % ### % ## % ####### % ## 7 ### 2 % ## ## % 6 ## ## % ## 3'##3 % ## #### % #### # % 5 % path p; numeric s,t; triangle1(lc_thick,w-u-lc_thick,ascender); z3r=(x1r,bowljoin); penpos3(lc_thick,0); tail 3; penstroke z1e..z3e; pickup lccurvepen; lft z6=(u-ba-ho,xheight/2); top z7=(1/2[x6,x3],xheight+vo); bot z5=(x7,-vo); pickup lcthinpen; bot rt z2=(x3l-gap,xheight-1/2bowljoin); bot lft z3'=z3l; p=z2..tension tens..z7{left}..z6{down}..{right}z5..{up}z3'; s=directiontime (-dirpentilt) of (subpath (1,2) of p); t=directiontime (dirpentilt) of (subpath (3,4) of p); pickup lccurvepen; cutdraw subpath (1+s,3+t) of p; pickup lcthinpen; cutdraw subpath (0,1+s) of p; cutdraw subpath (3+t,4) of p; enddef; defchar("d", d_width#, ascender#, 0, lcpen, 0); letter_d; endchar; defchar(hex"A4", d_width#, ascender#, 0, lcpen, 0); letter_d; caron(w/2,ascender); endchar; def letter_e = % % 2 % ##### % ## ## % ## ## 1 % 3 ## ###### % ## % 6 ## # 5 % ##### % 4 % path p; numeric s; pickup lcpen; rt z1=(w-u+ba+ho,0.6xheight); top z2=(w/2,xheight+vo); lft z3=(u-ba-ho,xheight/2); bot z4=(w/2,-vo); z4l=z4+penoffset left of currentpen; z4r=z4+penoffset right of currentpen; z5=(w-u+ba+ho,0.25xheight); p=z1..{left}z2..{down}z3..{right}z4..z5; s=directiontime dirpentilt of (subpath (3,4) of p); cutdraw subpath (0,3+s) of p; % fill unitsquare xscaled lc_thick yscaled lc_thin shifted bot lft z1; pickup lcthinpen; draw subpath (3+s,infinity) of p; z6'=(z1..z1+2w*dir(270-inclination)) intersectionpoint (subpath (1,3) of p); pickup lccurvepen; lft z6=rt z6'+gap*dir(90-inclination); pickup lcthinpen; draw z6..z1; enddef; defchar("e", e_width#, xheight#, 0, lccurvepen, 0); letter_e; endchar; defchar(hex"E9", e_width#, xheight#+2lc_thick#+uc_thick#, 0, lccurvepen, 0); letter_e; acute(w/2,xheight); endchar; defchar(hex"E8", e_width#, xheight#+2lc_thick#+uc_thick#, 0, lccurvepen, 0); letter_e; grave(w/2,xheight); endchar; defchar(hex"EA", e_width#, ascender#, 0, lccurvepen, 0); letter_e; circumflex(w/2,xheight); endchar; defchar(hex"EB", e_width#, xheight#+2uc_thick#, 0, lccurvepen, 0); letter_e; umlaut(w/2,xheight); endchar; defchar(hex"A6", e_width#, xheight#, 2lc_thick#, lccurvepen, 0); letter_e; ogonek(w/2,0); endchar; defchar(hex"A5", e_width#, ascender#, 2lc_thick#, lccurvepen, 0); letter_e; caron(w/2,xheight); endchar; defchar("f", f_width#, ascender#, 0, lcpen, 0.1width#); % % % #### 4' % # ## 4 % 2,2' ## % ## % 6 #### 5 % ## % ## % ## % ## % ## % 1 #### % diag_bl 1(u,0,lc_thick,-90); % z2l=(u,1/4[xheight,h]); penpos2(lc_thick,0); lft z2'=(u,1/4[xheight,h]); z2r=z2'+penoffset up of currentpen; z2l=z2'+penoffset down of currentpen; penstroke z1e..z2e; % lft z2'=z2l; % top rt z4=(2u+lc_thick+ho,h-bowljoin/8); z4=(x2r+7/4u+ho,h-bowljoin/10); top z3=(0.6[x2',x4],h+vo); % draw z2'{up}..z3{right}..{dir(-inclination)}z4; draw z2'{up}..{right}z3..bot z4; z4'=bot z4+penoffset up of currentpen; pickup ucthickpen; drawdot bot z4; fill rt bot z4--z4'--z4--bot z4--cycle; z6l=(x1l-serifwd,y5l); penpos6(lc_thin/sind inclination,inclination); z5r=(x1r+lc_thick,xheight); penpos5(lc_thin/sind inclination,inclination); penstroke z6e..z5e; endchar; defchar(oct"013", 4u#+2lc_thick#, ascender#, 0, lcpen, 0.1width#); % % 3 6 % ### ### % ## ## ## ## % 2 ## 4 ## 9 10 % ## ## % 7 ########## 8 % ## ## % ## ## % ## ## % ## ## % #### #### % 1 5 % diag_bl 1(u,0,lc_thick,-90); % Bottom of left stem z2l=(u,1/4[xheight,h]); penpos2(lc_thick,0); penstroke z1e..z2e; % Left stem diag_br5(w-u,0,lc_thick,-90); % Bottom of right stem z9r=(w-u,y2); penpos9(lc_thick,0); penstroke z5e..z9e; % Right stem lft z2'=z2l; % top rt z4=(2u+lc_thick+ho,h-bowljoin/8); z4=(x2r+7/4u+ho,top y3-bowljoin/10); top z3=(0.6[x2,x4],0.96h+vo); % draw z2{up}..z3{right}..{dir(-inclination)}z4; draw z2'{up}..{right}z3..bot z4; fill top rt z2'--z2r--z2--cycle; % Fill gap left by skewed pen pickup ucthickpen; drawdot bot z4; pickup lcpen; lft z9'=z9l; z10=(x9r+7/4u+ho,h-bowljoin/10); top z6=(0.6[x9,x10],h+vo); draw z9'{up}..{right}z6..bot z10; fill top rt z9'--z9r--z9--cycle; % Fill gap left by skewed pen pickup ucthickpen; drawdot bot z10; y7r=xheight; x7l=u-serifwd; penpos7(lc_thin/sind inclination,inclination); z8r=(x5r+lc_thick,xheight); penpos8(lc_thin/sind inclination,inclination); penstroke z7e..z8e; endchar; defchar(oct"014", 4u#+2lc_thick#, ascender#, 0, lcpen, 0); % % 3 % #### % ## ## % 2 ## 4 ## % ## % 7 ######### 8 % ## ## % ## ## % ## ## % ## ## % #### #### % 1 5 % diag_bl 1(u,0,lc_thick,-90); % Bottom of left stem z2l=(u,1/4[xheight,h]); penpos2(lc_thick,0); penstroke z1e..z2e; % Stem of f diag_br 5(w-u,0,lc_thick,-90); % Bottom of right stem z6r=(w-u,xheight); penpos6(lc_thick,0); penstroke z5e..z6e; % Stem of l rt z4=(x5r,h-bowljoin/10); top z3=(0.6[x2,x4],h+vo); lft z2'=z2l; draw z2'{up}..z3{right}..bot z4; fill top rt z2'--z2r--z2--cycle; % Fill gap left by skewed pen pickup ucthickpen; drawdot bot z4; y7r=xheight; x7l=u-serifwd; penpos7(lc_thin/sind inclination,inclination); z8r=(x5r,xheight); penpos8(lc_thin/sind inclination,inclination); penstroke z7e..z8e; endchar; defchar(oct"036", 4u#+2lc_thick#, ascender#, descender#, lcpen, 0); % % 3 % #### % ## ## % 2 ## 4 ## % ## % 7 ######### 6,8 % ## ## % ## ## % ## ## % ## ## % #### ## 5 % 1 ## % ## % ## % # 9 % % diag_bl 1(u,0,lc_thick,-90); % Bottom of left stem z2l=(u,1/4[xheight,h]); penpos2(lc_thick,0); penstroke z1e..z2e; % Stem of f z5r=(w-u,0); penpos5(lc_thick,0); % Bottom of right stem z6r=(w-u,xheight); penpos6(lc_thick,0); x9l=w-u-2lc_thick; y9r=-d; penpos9(fine,-45); % Tip of j penstroke z6e---z5e..{down+left}z9e; % The j rt z4=(x5r,h-bowljoin/10); top z3=(0.6[x2,x4],h+vo); lft z2'=z2l; draw z2'{up}..z3{right}..bot z4; fill top rt z2'--z2r--z2--cycle; % Fill gap left by skewed pen pickup ucthickpen; drawdot bot z4; y7r=xheight; x7l=u-serifwd; penpos7(lc_thin/sind inclination,inclination); z8r=z6r; penpos8(lc_thin/sind inclination,inclination); penstroke z7e..z8e; endchar; defchar(oct"015", 4u#+2lc_thick#, ascender#, 0, lcpen, 0); % % 3 6 % ###### % ## ## % 2 ## 4 ## % ## ## % 7 ######### 8 % ## ## % ## ## % ## ## % ## ## % #### #### % 1 5 % diag_bl 1(u,0,lc_thick,-90); % Bottom of left stem z2l=(u,1/4[xheight,h]); penpos2(lc_thick,0); penstroke z1e..z2e; % Stem of f diag_br 5(w-u,0,lc_thick,-90); % Bottom of right stem triangle6(lc_thick,w-u-lc_thick,h+vo); penstroke z5e..z6e; % Stem of l top rt z4=(x5l,top y3); top z3=(0.6[x2,x4],0.96h+vo); lft z2'=z2l; draw z2'{up}..z3{right}..z4; fill top rt z2'--z2r--z2--cycle; % Fill gap left by skewed pen y7r=xheight; x7l=u-serifwd; penpos7(lc_thin/sind inclination,inclination); z8r=(x5r,xheight); penpos8(lc_thin/sind inclination,inclination); penstroke z7e..z8e; endchar; defchar(oct"016", 6u#+3lc_thick#, ascender#, 0, lcpen, 0); % % 3 11 % ### ##### % ## ## ## ## % 2 ## 4 ##10 12 % ## ## % 7 ############### 6,8 % ## ## ## % ## ## ## % ## ## ## % ## ## ## % #### #### #### % 1 9 5 % diag_bl 1(u,0,lc_thick,-90); % Bottom of left stem z2l=(u,1/4[xheight,h]); penpos2(lc_thick,0); penstroke z1e..z2e; % Stem of left f diag_bl 9((w-lc_thick)/2,0,lc_thick,-90); % Bottom of middle stem z10=(w/2,y2); penpos10(lc_thick,0); penstroke z9e..z10e; % Stem of middle f diag_br 5(w-u,0,lc_thick,-90); % Bottom of right stem z6r=(w-u,xheight); penpos6(lc_thick,0); penstroke z5e..z6e; % Stem of i lft z2'=z2l; % top rt z4=(2u+lc_thick+ho,h-bowljoin/8); z4=(x2r+7/4u+ho,top y3-bowljoin/10); top z3=(0.6[x2,x4],0.96h+vo); % draw z2{up}..z3{right}..{dir(-inclination)}z4; draw z2'{up}..{right}z3..bot z4; fill top rt z2'--z2r--z2--cycle; % Fill gap left by skewed pen pickup ucthickpen; drawdot bot z4; pickup lcpen; rt z12=(x5r,h-bowljoin/10); top z11=(0.6[x10,x12],h+vo); draw z10{up}..z11{right}..bot z12; fill top rt z10--z10r--z10--cycle; % Fill gap left by skewed pen pickup ucthickpen; drawdot bot z12; y7r=xheight; x7l=u-serifwd; penpos7(lc_thin/sind inclination,inclination); z8r=(x5r,xheight); penpos8(lc_thin/sind inclination,inclination); penstroke z7e..z8e; endchar; defchar(oct"017", 6u#+3lc_thick#, ascender#, 0, lcpen, 0); % % 3 11 6 % ### ### # % ## ## ## #### % 2 ## 4 ##1012## % ## ## ## % 7 ############### 8 % ## ## ## % ## ## ## % ## ## ## % ## ## ## % #### #### #### % 1 9 5 % diag_bl 1(u,0,lc_thick,-90); % Bottom of left stem z2l=(u,1/4[xheight,h]); penpos2(lc_thick,0); penstroke z1e..z2e; % Stem of left f diag_bl 9((w-lc_thick)/2,0,lc_thick,-90); % Bottom of middle stem z10=(w/2,y2); penpos10(lc_thick,0); penstroke z9e..z10e; % Stem of middle f diag_br 5(w-u,0,lc_thick,-90); % Bottom of right stem triangle6(lc_thick,w-u-lc_thick,h+vo); penstroke z5e..z6e; % Stem of l lft z2'=z2l; z4=(x2r+7/4u+ho,top y3-bowljoin/10); top z3=(0.6[x2,x4],0.96h+vo); draw z2'{up}..{right}z3..bot z4; fill top rt z2'--z2r--z2--cycle; % Fill gap left by skewed pen pickup ucthickpen; drawdot bot z4; pickup lcpen; top rt z12=(x5l,top y11); top z11=(0.6[x10,x12],0.98h); draw z10{up}..z11{right}..z12; fill top rt z10--z10r--z10--cycle; % Fill gap left by skewed pen y7r=xheight; x7l=u-serifwd; penpos7(lc_thin/sind inclination,inclination); z8r=(x5r,xheight); penpos8(lc_thin/sind inclination,inclination); penstroke z7e..z8e; endchar; def letter_g = % % 6 1 % ### # % ## ### % ## ## 7 % 5 ## ## % ## ## 3 % ## ### % ### ## % 4 ## % 9 ## # % ##### 2 % 8 % path p; numeric s,t; z1r=(w-u,xheight+vo); penpos1(fine,0); % Top of stem z7r=(w-u,xheight-1/2bowljoin); penpos7(lc_thick,0); penstroke z1e--z7e; lft z5=(u-ba-ho,xheight/2); % Left tip of bowl top z6=(1/2[x5,x7],xheight+vo); % Top of bowl bot z4=(x6,-vo); % Bottom of bowl % draw z6{left}..{down}z5..{right}z4; pickup lcpen; bot rt z2=(w-u,-d+bowljoin); top lft z9=(u+0.02width-ba-ho,-d+bowljoin/2); bot z8=(x6,-d-vo); draw z7---z2..z8{left}..z9; % Descender drawdot z9; pickup lcthinpen; top rt z3=(x7l-gap,1/2bowljoin); % Lower join of stem and bowl % draw z4{right}..{up}z3; top lft z7'=z7l; % Upper join of stem and bowl % draw z7'{up}..tension tens..{left}z6; p=z7'{up}..tension tens..{left}z6..{down}z5..{right}z4..tension tens..{up}z3; s=directiontime (-dirpentilt) of (subpath (1,2) of p); t=directiontime (dirpentilt) of (subpath (3,4) of p); pickup lccurvepen; cutdraw subpath (1+s,3+t) of p; pickup lcthinpen; cutdraw subpath (0,1+s) of p; cutdraw subpath (3+t,4) of p; enddef; defchar("g", g_width#, xheight#, descender#, lccurvepen, 0); letter_g; endchar; defchar(hex"A7", g_width#, ascender#, descender#, lccurvepen, 0); letter_g; breve(w/2,xheight); endchar; defchar("h", h_width#, ascender#, 0, lcpen, -h_width#/2); % % # % 1 ### % ## 4 % ## #### % 3 ### ## % ## ## 5 % ## ## % ## ## % ## ## 6 % 2 #### #### 7 % path p; numeric s; triangle1(lc_thick,u,h+vo); % Defines z1l, z1r and z1t diag_bl 2(u,0,lc_thick,-90); % Lower end of stem fill z1r--z1l--z2l--z2r--cycle; % Stem top rt z5=(w-u,0.75xheight); top z4=(0.40[x5,x2],xheight+vo); bot rt z6=(w-u,0); diag_br 7(rt x6,0,pen_rt-pen_lft,-90); % draw z4{right}..z5---z6; pickup lcthinpen; top rt z3=(x2r,xheight-bowljoin); % Join of stem and bowl % draw z3...{right}z4; p=z3..tension tens..z4{right}..z5---z6; s=directiontime dirpentilt of p; pickup lcpen; cutdraw subpath (s,infinity) of p; pickup lcthinpen; cutdraw subpath (0,s) of p; endchar; defchar("i", i_width#, ascender#, 0, lcpen, 0); % % 1 ## % ## % % # % 2 ### % ## % ## % ## % ## % 3 #### % triangle2(lc_thick,u,xheight+vo); diag_bl 3(u,0,lc_thick,-90); fill z2r--z2l--z3l--z3r--cycle; pickup pencircle scaled lc_thick; pickup lcthickpen; bot z1=(x3,xheight+1/10height); drawdot z1; endchar; def dotless_i = % % # -- Dotless i % 2 ### % ## % ## % ## % ## % 3 #### % pickup lcpen; triangle2(lc_thick,u,xheight+vo); diag_bl 3(u,0,lc_thick,-90); fill z2r--z2l--z3l--z3r--cycle; enddef; defchar(oct"020", i_width#, xheight#, 0, lcpen, 0); dotless_i; endchar; defchar(hex"ED", i_width#, xheight#+2lc_thick#+uc_thick#, 0, lcpen, 0); % % ### % ### % % # % ### % ## % ## % ## % ## % #### % dotless_i; acute(w/2,xheight); endchar; defchar(hex"EC", i_width#, xheight#+2lc_thick#+uc_thick#, 0, lcpen, 0); % % ### % ### % % # % ### % ## % ## % ## % ## % #### % dotless_i; grave(w/2,xheight); endchar; defchar(hex"EE", i_width#, ascender#, 0, lcpen, 0); % % ### % ## ## % % # % ### % ## % ## % ## % ## % #### % dotless_i; circumflex(w/2,xheight); endchar; defchar(hex"EF", i_width#, xheight#+2uc_thick#, 0, lcpen, 0); % % ## ## % ## ## % % # % ### % ## % ## % ## % ## % #### % dotless_i; umlaut(w/2,xheight); endchar; defchar("j", j_width#, ascender#, descender#, lcthickpen, 0); % % 1 ## % ## % % # % 2 ### % ## % ## % ## % ## % ## % 3 ## % ## % ## % # 4 % triangle2(lc_thick,w-u-lc_thick,xheight+vo); % Triangular serif z3r=(w-u,0); penpos3(lc_thick,0); z4r=(u-0.35xheight,-d-vo); penpos4(fine,-90); % Tip penstroke z2e---z3e..{dir(-170)}z4e; pickup lcthickpen; bot rt z1=(w-u,xheight+1/10height); drawdot z1; % Dot endchar; defchar(oct"021", j_width#, xheight#, descender#, lcthickpen, 0); % % # -- dotless j % 2 ### % ## % ## % ## % ## % ## % 3 ## % ## % ## % # 4 % triangle2(lc_thick,w-u-lc_thick,xheight+vo); % Triangular serif z3r=(w-u,0); penpos3(lc_thick,0); z4r=(u-0.35xheight,-d-vo); penpos4(fine,-90); % Tip penstroke z2e---z3e..{dir(-170)}z4e; endchar; defchar("k", k_width#, ascender#, 0, lcpen, -k_width#/2); % % # % 1 ### % ## % ## 4 % ## ### % ## ## % ## ## % #### 3 % ## ### % ## ### % 2 #### #### 5 % save alpha,beta; triangle1(lc_thick,u,h+vo); diag_bl 2(u,0,lc_thick,-90); penstroke z1e..z2e; z3l=(x1r,0.55xheight); alpha=solve_angle(lc_thin,w-u+ba-0.05width-x3l,xheight-y3l); diag_tr4(w-u+ba-0.05width,xheight,lc_thin,alpha); beta=-solve_angle(lc_med,w-u+ba-x3l,y3l); diag_br 5(w-u+ba,0,lc_med,beta); % z5r=(w-u,0); penpos5(lc_thick/abs(sind beta), 0); z3r=z4r+whatever*(z4l-z3l); z3r=z5r+whatever*(z5l-z3l); penstroke z4e--z3e--z5e; endchar; def letter_l = % % # % 1 ### % ## % ## % ## % ## % ## % ## % ## % 2 #### % triangle1(lc_thick,u,ascender+vo); diag_bl 2(u,0,lc_thick,-90); fill z1r--z1l--z2l--z2r--cycle; enddef; defchar("l", l_width#, ascender#, 0, lcpen, 0); letter_l; endchar; defchar(hex"A8", l_width#, ascender#+2lc_thick#+uc_thick#, 0, lcpen, 0); letter_l; acute(w/2,ascender); endchar; defchar(hex"A9", l_width#, 2ascender#-xheight#, 0, lcpen, 0); letter_l; caron(w/2,ascender); endchar; defchar(hex"AA", l_width#, ascender#, 0, lcpen, 0); letter_l; shortslash(w/2,xheight/2); endchar; defchar("m", m_width#, xheight#, 0, lcpen, 0); % % 4 7 % # #### #### % 1 #### #### ## % ## 3 ## 5 ## 8 % ## ## ## % ## ## ## % ## ##6 ##9 % 2 #### #### #### 11 % 10 % path p,q; numeric s,t; triangle1(lc_thick,u,h+vo); % Defines z1l, z1r and z1t diag_bl 2(u,0,lc_thick,-90); % Lower end of stem fill z1r--z1l--z2l--z2r--cycle; % Stem and triangle serif top z5=(w/2,0.75h); top rt z8=(w-u,0.75h); top z4=(0.40[x5,x2],h+vo); top z7=(0.40[x8,x5],h+vo); bot z6=(w/2,0); bot rt z9=(w-u,0); diag_bl 10(lft x6,0,pen_rt-pen_lft,-90); diag_br 11(rt x9,0,pen_rt-pen_lft,-90); % draw z4{right}..z5---z6; % draw z7{right}..z8---z9; pickup lcthinpen; top rt z3=(x2r,h-bowljoin); % Join of stem and bowl % draw z3{up}..tension tens..{right}z4; top rt z5'=(x10r,h-bowljoin); % draw z5'{up}..tension tens..{right}z7; p=z3{up}..tension tens..{right}z4..z5--z6; q=z5'{up}..tension tens..{right}z7..z8--z9; s=directiontime dirpentilt of p; t=directiontime dirpentilt of q; pickup lcpen; cutdraw subpath (s,3) of p; cutdraw subpath (t,3) of q; pickup lcthinpen; cutdraw subpath (0,s) of p; cutdraw subpath (0,t) of q; endchar; def letter_n = % % 4 % # #### % 1 #### ## % ## 3 ## 5 % ## ## % ## ## % ## ##6 % 2 #### #### 7 % path p; numeric s; triangle1(lc_thick,u,xheight+vo); % Defines z1l, z1r and z1t diag_bl 2(u,0,lc_thick,-90); % Lower end of stem fill z1r--z1l--z2l--z2r--cycle; % Stem and triangle serif top rt z5=(w-u,0.75xheight); top z4=(0.40[x5,x2],xheight+vo); bot rt z6=(w-u,0); diag_br 7(rt x6,0,pen_rt-pen_lft,-90); % draw z4{right}..z5---z6; pickup lcthinpen; top rt z3=(x2r,xheight-bowljoin); % Join of stem and bowl % draw z3{up}..tension tens..{right}z4; p=z3{up}..tension tens..{right}z4..z5--z6; s=directiontime dirpentilt of p; pickup lcpen; cutdraw subpath (s,3) of p; pickup lcthinpen; cutdraw subpath (0,s) of p; enddef; defchar("n", n_width#, xheight#, 0, lcpen, 0); letter_n; endchar; defchar(hex"AB", n_width#, ascender#, 0, lcpen, 0); letter_n; acute(w/2,xheight); endchar; defchar(hex"BE", n_width#, ascender#, 0, lcpen, 0); letter_n; caron(w/2,xheight); endchar; defchar(hex"F1", n_width#, xheight#+lc_thick#+2lc_thin#, 0, lcpen, 0); % % ### # % # ### % % # #### % #### ## % ## ## % ## ## % ## ## % ## ## % #### #### % letter_n; tilde(w/2,xheight); endchar; def letter_o = % % 2 % ##### % ## ## % ## ## % 3 ## ## 1 % ## ## % ## ## % ##### % 4 % rt z1=(w-u+ba+ho,xheight/2); top z2=(w/2,xheight+vo); lft z3=(u-ba-ho,xheight/2); bot z4=(w/2,-vo); draw z1{up}..z2{left}..z3{down}..z4{right}..cycle; enddef; defchar("o", o_width#, xheight#, 0, lc_o_pen, 0); letter_o; endchar; defchar(hex"F3", o_width#, xheight#+2lc_thick#+uc_thick#, 0, lc_o_pen, 0); letter_o; acute(w/2,xheight); endchar; defchar(hex"F2", o_width#, xheight#+2lc_thick#+uc_thick#, 0, lc_o_pen, 0); letter_o; grave(w/2,xheight); endchar; defchar(hex"F4", o_width#, ascender#, 0, lc_o_pen, 0); letter_o; circumflex(w/2,xheight); endchar; defchar(hex"F5", o_width#, xheight#+lc_thick#+2lc_thin#, 0, lc_o_pen, 0); letter_o; tilde(w/2,xheight); endchar; defchar(hex"F6", o_width#, xheight#+2uc_thick#, 0, lc_o_pen, 0); letter_o; umlaut(w/2,xheight); endchar; defchar(hex"AE", o_width#, ascender#, 0, lc_o_pen, 0); letter_o; hungarumlaut(w/2,xheight); endchar; defchar("p", p_width#, xheight#, descender#, lccurvepen, 0); % % 4 % 1 # #### % #### ## % ##3 ## % ## ## 5 % ##7 ## % ### ## % ## ### % ## 6 % ## % #### % 2 path p; numeric s, t; triangle1(lc_thick,u,h+vo); diag_bl 2(u,-d,lc_thick,-90); penstroke z1e..z2e; % Stem rt z5=(w-u+ba+ho,xheight/2); % Right tip of bowl top z4=(1/2[x5,x2],h+vo); % Top of bowl bot z6=(x4,-vo); % Bottom of bowl % draw z4{right}..{down}z5..{left}z6; pickup lcthinpen; top lft z7=(x2r+gap,1/2bowljoin); % Lower join of stem and bowl % draw z6{left}..tension tens..z7; top rt z3=(x2r,h-bowljoin); % Upper join of stem and bowl % draw z3{up}..tension tens..{right}z4; p=z3{up}..tension tens..{right}z4..{down}z5..{left}z6..tension tens..z7; s=directiontime dirpentilt of (subpath (0,1) of p); t=directiontime (-dirpentilt) of (subpath (2,3) of p); pickup lccurvepen; cutdraw subpath (s,2+t) of p; pickup lcthinpen; cutdraw subpath (0,s) of p; cutdraw subpath (2+t,4) of p; endchar; defchar("q", q_width#, xheight#, descender#, lccurvepen, 0); % % 6 1 % ### # % ## ### % ## 7'## 7 % 5 ## ## % ## 3## % ## ### % ### ## % 4 ## % ## % #### 2 % path p; numeric s, t; z1r=(w-u,h+vo); penpos1(fine,0); % Top right of stem z7r=(w-u,h-1/2bowljoin); penpos7(lc_thick,0); diag_br 2(w-u,-d,lc_thick,-90); penstroke z1e--z7e--z2e; lft z5=(u-ba-ho,xheight/2); % Left tip of bowl top z6=(1/2[x5,x7],h+vo); % Top of bowl bot z4=(x6,-vo); % Bottom of bowl % draw z6{left}..{down}z5..{right}z4; pickup lcthinpen; top rt z3=(x7l-gap,1/2bowljoin); % Lower join of stem and bowl % draw z4{right}..tension tens..z3; top lft z7'=z7l; % Upper join of stem and bowl % draw z7'{up}..tension tens..{left}z6; p=z7'{up}..tension tens..{left}z6..{down}z5..{right}z4..tension tens..z3; s=directiontime (-dirpentilt) of (subpath (1,2) of p); t=directiontime (dirpentilt) of (subpath (3,4) of p); pickup lccurvepen; cutdraw subpath (1+s,3+t) of p; pickup lcthinpen; cutdraw subpath (0,1+s) of p; cutdraw subpath (3+t,4) of p; endchar; defchar("r", r_width#, xheight#, 0, lcpen, 0); % % 4 % # #### % 1 #### ## % ## 3 ## 5 % ## % ## % ## % 2 #### % path p; numeric s; triangle1(lc_thick,u,h+vo); % Defines z1l, z1r and z1t diag_bl 2(u,0,lc_thick,-90); % Lower end of stem fill z1r--z1l--z2l--z2r--cycle; % Stem and triangle serif % top rt z4=z4'; z4'=(w-u+ba+ho,h+vo); % pickup dotpen; drawdot bot lft z4'; pickup lcthinpen; top rt z3=(x2r,h-bowljoin); % Join of stem and bowl % draw z3{up}..tension tens..{right}z4; top z4=(7/12[x3,x5],h+vo); top rt z5=(w-u+ba+ho,h-bowljoin/3); p=z3{up}..tension tens..{right}z4..z5; s=directiontime dirpentilt of p; draw subpath (0,s) of p; pickup lcpen; draw subpath (s,2) of p; drawdot z5; endchar; defchar("s", s_width#, xheight#, 0, lccurvepen, 0); % % 3 % ##### # 10 % 4 ### ## 2 % ### # 1 % #### % 5#### % 9 # ### % 8 ## ### 6 % # #### % 11 7 % path p, q; numeric s, t; z5=(w/2,0.55h); lft z4=(u-ba-ho+0.02width,0.52[y5,y3]); rt z6=(w-u+ba+ho,0.52[y5,y7]); pickup lcthinpen; top z3=(w/2,h+vo); bot z7=(w/2,-vo); pickup lcthickpen; draw z4{down}..z5..{down}z6; if known sans: z2r=(w-u+ba-0.027h+ho,h-0.12h); penpos2(lc_thin,90-inclination); else: x1r=w-u+ba-0.027h+ho; penpos1(fine,90-inclination); y2r=h-0.12h; penpos2(serifht,90-inclination); y10r=h; penpos10(fine,90-inclination); z2r+(lc_thin+serifwd)*dir(-inclination)=z1r; z10r=whatever[z1r,z2r]; penstroke z10e..tension tens..z2e; penstroke z2e..tension tens..z1e; fi if known sans: z8l=(u-ba-ho,0.12h); penpos8(lc_thin,90-inclination); else: x9l=u-ba-ho; penpos9(fine,90-inclination); y8l=0.12h; penpos8(serifht,90-inclination); y11l=0; penpos11(fine,90-inclination); z9l+(lc_thin+serifwd)*dir(-inclination)=z8l; z11l=whatever[z9l,z8l]; penstroke z9e..tension tens..z8e; penstroke z8e..tension tens..z11e; fi p=z2l+(uc_thin/2,0)..tension tens..{left}z3..{down}z4; q=z8r-(uc_thin/2,0)..tension tens..{right}z7..{up}z6; s=directiontime (-dirpentilt) of p; t=directiontime (dirpentilt) of q; pickup lcthinpen; cutdraw subpath (0,s) of p; cutdraw subpath (0,t) of q; pickup lcpen; cutdraw subpath (s,infinity) of p; cutdraw subpath (t,infinity) of q; endchar; defchar("t", t_width#, ascender#, 0, lcpen, 0); % % 1 % # % ##4 5 % 2 ######## % 3## 6 % ## % ## % 7 ## # 9 % ### % 8 % path p; numeric s; z5=(w-u+ho,xheight); z6=(x5,y5-lc_thin); bot lft z3=(u,y6); z2=(u-serifwd,y6); z2'=z2+fine*up; z1=(rt x3,xheight+lc_thick+serifwd); z1'=z1+fine*left; z4=(rt x3,y5); fill z1--z1'{down}..tension tens..{left}z2'--z2--z6--z5--z4--cycle; bot lft z7=(u,bowljoin); bot z8=(0.5[x7,x9],-vo); pickup lcthinpen; rt z9=(w-u+ba+ho,0.3xheight); p=z3---z7..z8{right}..{up}z9; s=directiontime dirpentilt of p; pickup lcpen; cutdraw subpath (0,s) of p; pickup lcthinpen; cutdraw subpath (s,infinity) of p; endchar; def letter_u = % % 0 ### ### 2 % 1 ## ## % ## ## % ## ## % 3 ## ## 5,5' % 3' ## #### % ### # % 4 path p; numeric s; triangle1(lc_thick,u,xheight+vo); triangle2(lc_thick,w-u-lc_thick,xheight+vo); z5r=(w-u,bowljoin); penpos5(lc_thick,0); tail 5; penstroke z2e..z5e; bot lft z3'=(u,0.25xheight); penpos3(lc_thick, 0); z3l=z3'+penoffset down of currentpen; bot z4=(0.40[x3',x5],-vo); penstroke z1e..z3e; pickup lcthinpen; bot lft z5'=z5l; p=z3'{down}..z4{right}..tension tens..{up}z5'; s=directiontime dirpentilt of p; pickup lcpen; cutdraw subpath (0,s) of p; pickup lcthinpen; cutdraw subpath (s,infinity) of p; enddef; defchar("u", u_width#, xheight#, 0, lcpen, 0); letter_u; endchar; defchar(hex"FA", u_width#, xheight#+2lc_thick#+uc_thick#, 0, lcpen, 0); % % ### % ### % % 0 ### ### 2 % 1 ## ## % ## ## % ## ## % 3 ## ## 5,5' % 3' ## #### % ### # % 4 letter_u; acute(w/2,xheight); endchar; defchar(hex"F9", u_width#, xheight#+2lc_thick#+uc_thick#, 0, lcpen, 0); % % ### % ### % % 0 ### ### 2 % 1 ## ## % ## ## % ## ## % 3 ## ## 5,5' % 3' ## #### % ### # % 4 letter_u; grave(w/2,xheight); endchar; defchar(hex"FB", u_width#, ascender#, 0, lcpen, 0); % % ### % ## ## % % 0 ### ### 2 % 1 ## ## % ## ## % ## ## % 3 ## ## 5,5' % 3' ## #### % ### # % 4 letter_u; circumflex(w/2,xheight); endchar; defchar(hex"FC", u_width#, xheight#+2uc_thick#, 0, lcpen, 0); % % ## ## % ## ## % % 0 ### ### 2 % 1 ## ## % ## ## % ## ## % 3 ## ## 5,5' % 3' ## #### % ### # % 4 letter_u; umlaut(w/2,xheight); endchar; defchar("v", v_width#, xheight#, 0, lcpen, 0); % % 1 #### ### 2 % ## # % ## # % ## # % ## # % ##4# % ### % # 3 % diag_tl 1(u-ba-ho,h,lc_thick,180-v_angle); diag_tr 2(w-u+ba+ho,h,lc_thin,v_angle); z3=(w/2,-vo); penpos3(fine,0); z4=z1r+whatever*(z1l-z3l); z4=z2l+whatever*(z2r-z3r); fill z1l--z3l--z3r--z2r--z2l--z4--z1r--cycle; endchar; defchar("w", w_width#, xheight#, 0, lcpen, 0); % % 1 2,4 5 % #### #### ### % ## ## # % ## ## # % ## ### # % ## # ## # % ## # ## # % ### ### % # # % 3 6 diag_tl 1(u-ba-ho,h,lc_thick,180-v_angle); diag_tr 5(w-u+ba+ho,h,lc_thin,v_angle); z2r-z2l=z5r-z5l; z5l-z4r=z2l-z1r; % Puts middle serifs in middle diag_tr 4(x2r,h,lc_thick,180-v_angle); % Draw middle serifs z3=(0.5[x1l,x2r],-vo); penpos3(fine,0); z6=(0.5[x4l,x5r],-vo); penpos6(fine,0); z3'=z1r+whatever*(z1l-z3l); z3'=z2l+whatever*(z2r-z3r); % fill z1l--z3l--z3r--z2r--z2l--z3'--z1r--cycle; z6'=z4r+whatever*(z4l-z6l); z6'=z5l+whatever*(z5r-z6r); fill z4l--z6l--z6r--z5r--z5l--z6'--z4r--cycle; endchar; defchar("x", x_width#, xheight#, 0, lcpen, 0); % % 1 2 % #### ### % ## # % ## # % ## % ### % # ## % # ## % ### #### % 3 4 % save alpha,beta; alpha=-solve_angle(lc_med,w-2u+2ba+2ho,h); beta=solve_angle(lc_thin,w-2u+2ba+2ho,h); diag_br 4(w-u+ba+ho,0,lc_med,alpha); diag_tl 1(u-ba-ho,h,lc_med,180+alpha); % z2r=(w-u,h); penpos2(lc_thin/abs(sind beta),0); % z3l=(u,0); penpos3(lc_thin/abs(sind beta),0); diag_tr 2(w-u+ba+ho,h,lc_thin,beta); diag_bl 3(u-ba-ho,0,lc_thin,beta+180); penstroke z1e..z4e; penstroke z2e..z3e; endchar; defchar(oct "037", u_width#, ascender#, descender#, lcthickpen, 0); % % 10 ## ## 11 % ## ## % % # 1 # 2 % ### ### % ## ## % ## ## % 3 ## ## 5 % 3' ## ### % ### ## % 4 ## % 9 ## # % ##### 7 % 8 % path p; numeric s; triangle1(lc_thick,u,xheight+vo); triangle2(lc_thick,w-u-lc_thick,xheight+vo); z5=(x2,bowljoin); penpos5(lc_thick,0); bot lft z3'=(u,0.25xheight); penpos3(lc_thick, 0); z3l=z3'+penoffset down of currentpen; bot z4=(0.40[x3',x5],-vo); penstroke z1e..z3e; pickup lcthinpen; bot lft z5'=z5l; p=z3'{down}..z4{right}..tension tens..{up}z5'; s=directiontime dirpentilt of p; pickup lcpen; cutdraw subpath (0,s) of p; pickup lcthinpen; cutdraw subpath (s,infinity) of p; pickup lcpen; bot rt z7=(w-u,-d+bowljoin); top z9=(x3,-d+bowljoin/2); bot z8=(x4,-d-vo); draw top z2---z7..z8{left}..z9; % Descender pickup lcthickpen; bot z10=(x1,xheight+1/10height); drawdot z10; % Left dot bot z11=(x2,xheight+1/10height); drawdot z11; % Right dot endchar; def letter_y = % % 1 #### ### 2 % ## # % ## # % ## # % ## # % ##4# % ### % # 3 % # % 7 ## # 5 % ## % 6 % z3=(w/2,-vo); diag_tl 1(u-ba-ho,xheight,lc_thick,angle(u-ba-ho-x3,xheight-serifht)); diag_tr 2(w-u+ba+ho,xheight,lc_thin,angle(w-u+ba+ho-x3,xheight-serifht)); z4=z1r+whatever*(z1l-z3); z4=z2l+whatever*(z2r-z3); fill z1l--z3--z2r--z2l--z4--z1r--cycle; top lft z7=(u-ba-ho,-1/2d); drawdot z7; z7l=lft z7; pickup lcthinpen; y5=y7; z7'=rt z7l; z4'=rt z4; rt z5=whatever[z2r,z3]; bot z6=(0.40[x7l,rt x5],-d); draw z4'---z5...{left}z6..{up}z7'; enddef; defchar("y", y_width#, xheight#, descender#, lcthickpen, 0); letter_y; endchar; defchar(hex"FD", y_width#, xheight#+2lc_thick#+uc_thick#, descender#, lcthickpen, 0); % % ### % ### % % #### ### % ## # % ## # % ## # % ## # % ##4# % ### % # % # % ## # % ## % letter_y; acute(w/2,xheight); endchar; defchar(hex"FF", y_width#, xheight#+2uc_thick#, descender#, lcthickpen, 0); % % ## ## % ## ## % % #### ### % ## # % ## # % ## # % ## # % ##4# % ### % # % # % ## # % ## % letter_y; umlaut(w/2,xheight); endchar; defchar("z", z_width#, xheight#, 0, lcthinpen, 0); % % 2 ######## 3 % 1 # 0 ## % ## % ## % ## % ## % ## 7 # 6 % 4 ######### 5 % save alpha; penpos1(fine,inclination-90); % Top left serif x1l=u-ba-ho; y2=h; y1l=y2-lc_thin-serifwd; z2=z1l+whatever*dir inclination; top z0=z2+(lc_thick/2,0); if known sans: fill top rt z0--top rt z0--bot rt z0--bot z0--cycle else: fill top rt z0--z2--z1l--z1r{z2-z1l}..tension tens..{right}bot z0--cycle fi; penpos6(fine,inclination-90); % Bot right serif x6r=w-u+ba+ho; y5=0; y6r=y5+lc_thin+serifwd; z6r=z5+whatever*dir inclination; bot z7=z5-(lc_thick/2,0); if known sans: fill bot lft z7--bot rt z7--top rt z7--top z7--cycle else: fill bot lft z7--z5--z6r--z6l{z5-z6r}..tension tens..{left}top z7--cycle fi; z3r=(w-u+ba+ho,h); z4l=(u-ba-ho,0); alpha=solve_angle(lc_thick,x3r-x4l,h); penpos3(lc_thick/sind alpha,0); penpos4(lc_thick/sind alpha,0); penstroke z3e..z4e; draw z0..bot z3l; draw top z4r..z7; endchar;