"Lowercase Softened N ligature"; call charbegin('010,pvbli+.5pwi/pu+pvbls+phbls+.5pwii/pu+phbli,px,0,.33.px.slant); hpen; lft1x1=round(pvbli.u); x2=x1; x3=good1(x1+pvbls.u); x4=x3; top1y1=m; y1=y3; bot1y2=0; y2=y4; w1 draw 1..2; % left stem w1 draw 3..4; % right stem if lcs0: call `a serif(1,1,2,-lcs); call `b serif(1,1,2,lcs); % upper left serif call `c serif(2,1,1,-lcs); call `d serif(2,1,1,lcs); % lower left serif call `e serif(3,1,4,-lcs); call `f serif(3,1,4,lcs); call `g serif(4,1,3,-lcs); call `h serif(4,1,3,.5lcs); % lower right serif fi; x5=x1; x6=x3; y5=y6; y5=.52m; w0 draw 5..6; % bar x25=x3; x26=.5[x25,x27]; y25=y26=lb; x28=x26; bot0y28=0; rt2x27=round(r-phbli.u); y27=.5[y25,y4]; lft0x29=lft2x27; rt0x30=rt2x27; y29=y30=y27; call `f lune(26,28,29,30,.48.rdns,.48.rdns,.48.rdns,.48.rdns); % bowl w0 draw 25..26; % connections to stem w0 draw 4..28. "Lowercase Softened L ligature"; call charbegin('011,plli+.4pwiii/pu+llwidth+phbls+.5pwii/pu+phbli,px,0,.33px.slant); hpen; x1=good1((plli+llwidth).u+.4w3); x2=x1; bot0y1=0; top0y2=m; y3=y2; x4=x3; cpen; if ssflag=0: x6=(plli+1.5).u; x3=good0(x6+1.75u); y4=y3-s; new w99; w99=.8w3; lft99x8=lft0x7=round(plli.u); y8=y7=.12m; else: x7=plli.u; y7=y6; x7=x6-.75u; x3=good0(x6+.75u); y4=y3; fi; bot0y6=-oo; hpen; w1 draw 1..2; % vertical stroke w0 draw 2..3; % upper bar if lcs0: call `a serif(1,1,2,.5lcs); % all the serifs call `b serif(1,1,2,-lcs); call `c serif(2,1,1,lcs); call `d serif(2,1,1,-lcs); call `e dserif(3,0,4,lcs); call `f dserif(3,0,4,-lcs); fi; cpen; if ssflag=0: w0 draw 4{0,-1}..6{-1,0}..7{0,1}; w99 draw 8; % bulb else: w0 draw 4{0,-1}..6{-1,0}..7; fi; x25=x1; x26=.5[x25,x27]; y25=y26=lb; x28=x26; bot0y28=0; rt2x27=round(r-phbli.u); y27=.5[y25,y1]; lft0x29=lft2x27; rt0x30=rt2x27; y29=y30=y27; call `f lune(26,28,29,30,.48.rdns,.48.rdns,.48.rdns,.48.rdns); % bowl w0 draw 25..26; % connections to stem w0 draw 1..28. "Serbian dzh"; call charbegin('012,2.pvbli+pwi/pu+pvbls,px,.4pd,px.slant); hpen; lft1x1=round(pvbli.u); x2=x1; rt1x3=round(r-pvbli.u); x4=x3; top1y1=m; y1=y3; bot1y2=0; y2=y4; w1 draw 1..2; % left stem w1 draw 3..4; % right stem if lcs0: call `a serif(1,1,2,-lcs); call `b serif(1,1,2,lcs); % upper left serif call `c serif(2,1,1,-lcs); call `d serif(2,1,1,.5lcs); % lower left serif call `e serif(3,1,4,-lcs); call `f serif(3,1,4,lcs); % upper right serif call `g serif(4,1,3,-.5lcs); call `h serif(4,4,3,lcs); % lower right serif fi; w0 draw 2..4; % bar new w99; w99=.85w1; rt99x5=.5[x2,x4]=lft99x6; y5=0=y6; x7=.2[x5,x6]; x8=.8[x5,x6]; y7=-.4d=y8; ddraw 7..5,8..6. % middle spur "The letter i (for Ukrainian)"; call charbegin('014,2.pvbli+pw1/pu,ph,0,ph.slant); hpen; x1=x2=good1 .5r; top1y1=m+ssdoo; bot1y2=0; w1 draw 1..2; % stem cpen; top3y3=h-ssd; rt3x3=rt1x1; w3 draw 3; % dot if lcs0: call `a sserif(1,1,2,-lcs); % upper serif call `b serif(2,1,1,-lcs); call `c serif(2,1,1,lcs); % lower serif fi. "Ukrainian ebar"; call charbegin('015,poli+qza.(.5pwii/pu)+lepwidth+.5pw/pu+plzi,px,0,px.slant); cpen; rt0x901=round(r-plzi.u); if ssflag=0: y901=.12m; x1=.44[x901,x3]; else: y901=.15m; x1=.36[x901,x3]; fi; x1=x2; top0y1=m+oo; bot0y2=-oo; new w99; w99=qza.w2; lft99x3=round(poli.u); y3=.5[y1,y2]; lft0x13=lft99x3; rt0x23=rt99x3; y13=y23=y3; call lune(1,2,23,13,.42rdns,.42rdns,.42rdns,.42rdns); % bowl if ssflag=0: x903=x901+.3u; y903=y901+(1.5+qyg).w0; x101=good0(x901-.2u); y101=.9m; x103=x101+.1u; y103=y101-(1.5+qyg).w0; new tailex; tailex=1.2; new tailmid; tailmid=.6; call arcpoint(2,901,902,1,0,tailex,1,.5,.5); call arcpoint(2,903,904,1,0,tailmid,1,.55,.5); call arcpoint(1,101,102,1,0,tailex,-1,.5,.5); call arcpoint(1,103,104,1,0,tailmid,-1,.55,.5); w0 ddraw 2{1,0}..902{x901-x2,y901-y2}..901{tailex,1}, 2{1,0}..904{x903-x2,y903-y2}..903{tailmid,1}; w0 ddraw 1{1,0}..102{x101-x1,y101-y1}..101{tailex,-1}, 1{1,0}..104{x103-x1,y103-y1}..103{tailmid,-1}; else: new slp; slp=1.2; x101=x901; y101=.85m; call arcpoint(1,101,102,1,0,slp,-1,.5,.5); call arcpoint(2,901,902,1,0,slp,1,.5,.5); w0 draw 1{1,0}..102{x101-x1,y101-y1}..101{slp,-1}; draw 2{1,0}..902{x901-x2,y901-y2}..901{slp,1}; fi; cpen; if ssflag=0: y509=y510=y511=round .51m; x509=round(rt0x901-(1.2+qyh).u); x510=.5[x509,x511]; y515-y509=.1(m-e); y509-y516=.1(m-e); x515=.4[x509,x510]; x516=.6[x510,x511]; new hgt,bdth,theta,sintheta,costheta,acoef,bcoef,ccoef; hgt=w0; bdth=qzb.(1.75w0); theta=-30; sintheta=sind theta; costheta=cosd theta; x511-.5bdth.costheta=rt99x3+.25u; acoef=4.((costheta.costheta)/(bdth.bdth)+(sintheta.sintheta)/(hgt.hgt)); bcoef=8.sintheta.costheta(1/(bdth.bdth)-1/(hgt.hgt)); ccoef=4.((sintheta.sintheta)/(bdth.bdth)+(costheta.costheta)/(hgt.hgt)); spen(acoef,bcoef,ccoef,0,0,0,0); draw 509..515..510{-2,-1}..516..511; % center tilde else: x800=1[x3,x1]; y800=y3; w0 draw 800..3; fi. "Serbian dbar"; call charbegin('016,2.pvbli+pwi/pu+pvbls,ph,0,.5px.slant); hpen; lft1x1=round(pvbli.u); x2=x1; top1y1=h; bot1y2=0; w1 draw 1..2; %left vertical stem if lcs>0: call `a serif(2,1,1,-lcs); %bot lft. lft. serif call `b sserif(1,1,2,-lcs); %top lft. lft. serif call `c serif(2,1,1,.75lcs); %bot inside lft. serif fi; x4=.5[x2,x7]; y4=-d; rt0x5=rt1x1; y5=1/4[e,m]; %point near middle of left stem x6=.5[x2,x7]; top0y6=m+oo; %top of curve rt1x7=round(r-pvbli.u); y7=.5[y6,y4]; cpen; w0 draw 5{0,1}..6{1,0}; %shoulder call `e arc(6,7,w1); %right bowl call `f arc(4,7,w1); %right bowl cpen; lft0x8=lft1x1-lcs.u; rt0x9=x6; y8=y9=.5[m,h]; w0 draw 8..9. % top bar "Serbian cprime"; call charbegin('017,2.pvbli+pwi/pu+pvbls,ph,0,.9px.slant); hpen; lft1x1=round(pvbli.u); x2=x1; top1y1=h; bot1y2=0; w1 draw 1..2; %left vertical stem rt1x7=round(r-pvbli.u); y7=1/3[e,m]; x8=x7; bot1y8=0; rt0x3=rt1x2; y3=1/4[e,m]; x4=.5[x2,x7]; top3y4=m+oo; rt0x6=rt1x7; lft0x5=lft1x7; new stwo; stwo = sqrt 1.23114413sqrttwo; % the constant is $2^{3/10}$ x9=1/stwo[x4,x5]; x10=1/stwo[x4,x6]; y5=y6=y7; y9=y10=1/stwo[y7,y4]; w0 draw 3{0,1}..4{1,0}; % link ddraw 4{1,0}..10{x6-x4,y6-y4}..6{0,-1}, 4{1,0}..9{x5-x4,y5-y4}..5{0,-1}; % shoulder w1 draw 7..8; % stem if lcs>0: call `a serif(2,1,1,-lcs); %bot lft. lft. serif call `b sserif(1,1,2,-lcs); %top lft. lft. serif call `c serif(2,1,1,.75lcs); %bot inside lft. serif call `e serif(8,1,7,-.75lcs); %bot inside rt serif call `f serif(8,1,7,lcs); %bot rt rt serif fi; cpen; lft0x15=lft1x1-lcs.u; rt0x17=.6[x2,x8]; y15=y17=.5[m,h]; w0 draw 15..17. % top bar "The letter s"; call charbegin('036,7,px,0,px.slant-.5pu); hpen; top0y1=m+oo; bot0y5=-oo; x3=.5r; (y3-w6-.5w8)=(m-2w6-w8).(e/m); % white space ratio lft11x2=round u; if lcs=0: x1=x5=x3; lft0x6=round 2/3u; rt0x7=round(r-u); rt11x4=round(r-.75u); y6=1/3[top0 0,y3]; y7=1/4[bot0m,y3]; w0 draw 6{x5-x6,3(y5-y6)}..5{1,0}; % lower left stroke draw 7{x1-x7,2(y1-y7)}..1{-1,0}; % upper right stroke else: if w0=w1: x1=x5=x3; x6=x2; x7=x4; rt11x4=round(r-u); y6=1/3[top0 0,y3]; y7=1/4[bot0m,y3]; w0 draw 6{x5-x6,3(y5-y6)}..5{1,0}; % lower left stroke draw 7{x1-x7,2(y1-y7)}..1{-1,0}; % upper right stroke x8=x9=x6; y9=y6+.5lcs.aspect.u+eps; bot0y8=0; x10=x11=x7; y11=y7-.5lcs.aspect.u-eps; top0y10=m; w0 draw 8..9; % lower serif draw 10..11; % upper serif else: x1=x3-.5u; x5=x3+.5u; lft0x6=round u; rt0x7=round(r-u); rt11x4=round(r-.5u); y6=good6(5/7 y3)-1; y7=good6(2/7[y3,m+oo])+1; bot0y8=0; y9=y6; x8=x6; rt1x6=rt0x9; top0y10=m+oo; y11=y7; x10=x7; lft1x7=lft0x11; w0 ddraw 6..8, 9..8; % lower serif ddraw 7..10, 11..10; % upper serif rpen#; w1 draw 6{0,-1}..5{1,0}; % erase excess lpen#; w1 draw 7{0,1}..1{-1,0}; % ditto hpen; w0 draw 6{0,-1}..5{1,0}; % lower left stroke draw 7{0,1}..1{-1,0}; % upper right stroke fi; fi; new aa; if m+oo-e>e: aa=m+oo-e; else: aa=e; fi; call `a sdraw(1,2,3,4,5,w11,w8,-aa/(12u)); % middle stroke if ptsize>18: if mode=2: call snip(pa); fi; fi. "Cyrillic letter ja"; call charbegin('037,plki+.5pw/pu+ljawidth+.5pwi/pu+pvbli,px,0,px.slant); hpen; rt1x1=rt1x2=round(r-pvbli.u); top1y1=m; bot1y2=0; w1 draw 1..2; %stem if lcs>0: call `a serif(1,1,2,lcs); %upper serif call `b serif(2,1,1,lcs); call `c serif(2,1,1,-lcs); %lower serifs fi; x3=x1; y3=.5m; x25=good2(x1-(pvbls-.75).u); y25=.5[y1,y3]; rt0x26=rt2x25; lft0x27=lft2x25; y26=y27=1[y3,y25]; x29=.5[x1,x25]; top0y29=m; x28=.5[x3,x25]; y28=y3; call `e lune(29,28,26,27,.48rdns,.48rdns,.48rdns,.48rdns); % upper bowl cpen; w0 draw 29..1; % connections to stem draw 28..3; bot0y460=-oo; if ssflag=0: x450=lft1x3-0u; y450=y3; x460=(plki+1).u; x454=(.52+qya)[x450,x460]; y454=.5[y450,y460]; x455=.82[x450,x460]; y455=.8[y450,y460]; new dirml,dirmr; dirml=.45+qyb; dirmr=.3+qyc; call arcpoint(450,454,452,-1,0,dirml(x460-x450),y460-y450,.55,.3); call arcpoint(454,460,458,dirml(x460-x450),y460-y450,-1,0,.6,.5); call arcpoint(450,455,451,-1,0,dirmr(x460-x450),y460-y450,.5,.5); call arcpoint(455,460,459,dirmr(x460-x450),y460-y450,-1,0,.5,.4); call arcpoint(450,451,421,-1,0,x455-x450,y455-y450,.4,.6); call arcpoint(450,452,422,-1,0,x454-x450,y454-y450,.4,.5); call arcpoint(451,455,425,x455-x450,y455-y450,dirmr(x460-x450),y460-y450,.5,.5); call arcpoint(452,454,424,x454-x450,y454-y450,dirml(x460-x450),y460-y450,.6,.3); w0 ddraw 450{-1,0}..422{x452-x450,y452-y450}.. % leg 452{x454-x450,y454-y450}..424{x454-x452,y454-y452}.. 454{dirml(x460-x450),y460-y450}..458{x460-x454,y460-y454}.. 460{-1,0}, 450{-1,0}..421{x451-x450,y451-y450}.. 451{x455-x450,y455-y450}..425{x455-x451,y455-y451}.. 455{dirmr(x460-x450),y460-y450}..459{x460-x455,y460-y455}.. 460{-1,0}; w0 draw 3..450; lft0x469=round(plki.u); y469=.25y450; x465=.7[x460,x469]; y465=.3[y460,y469]; w0 draw 460{-1,0}..465..469{0,1}; % foot else: hpen; lft2x460=plki.u; w2 draw 28..460; fi. "Cyrillic letter ju"; call charbegin('030,pvbli+.5pwi/pu+(4+qyi)+(lowidth-.75)+.5pwii/pu+poli,px,0,.5.px.slant); hpen; lft1x1=round (pvbli.u); x2=x1; top1y1=m; bot1y2=0; w1 draw 1..2; %left stem if lcs>0: call `a serif(1,1,2,-lcs); call `b serif(1,1,2,lcs); %upper serifs call `c serif(2,1,1,-lcs); call `d serif (2,1,1,lcs); %lower serifs fi; x3=x1; y3=.5m; y4=y3; x4=good2(x1+(4+qyi).u); w0 draw 3..4; %horizontal bar rt2x6=round(r-poli.u); x5=.5(x4+x6)=x7; top0y5=m+o; bot0y7=-o; y6=y4; lft0x24=lft2x4; rt0x34=rt2x4; y24=y34=y4; lft0x26=lft2x6; rt0x36=rt2x6; y26=y36=y6; call lune(5,7,26,36,.42rdns,.42rdns,.42rdns,.42rdns); % bowl call lune(5,7,34,24,.42rdns,.42rdns,.42rdns,.42rdns). "Cyrillic letter zh"; call charbegin('031,2.plki+pw/pu+2.lkwidth,px,0,px.slant); hpen; x1=good1 .5r; x3=x2=x1; top1y1=m; bot1y2=0; w1 draw 1..2; % stem if lcs>0: call `a serif(1,1,2,-lcs); % serifs on stem call `b serif(1,1,2,lcs); call `c serif(2,1,1,-lcs); call `d serif(2,1,1,lcs); fi; cpen; new w99; w99=.8w3; y3=good6 .5m; rt99x118=round(r-(plki+.5).u); top99y118=m; y150=y3; if ssflag=0: x150=rt1x3; x160=x118-.25w99; top0y160=m+oo; else: x150=rt1x3+u; rt0x160=r-(plki+.5).u; top0y160=m+oo; fi; rt0x161=rt99x118; y161=y118; x154=.6[x150,x160]; y154=.55[y150,y160]; x155=.73[x150,x160]; y155=.75[y150,y160]; lft99x318=round((plki+.5).u); top99y318=m; y350=y3; if ssflag=0: x350=lft1x3; x360=x318+.25w99; top0y360=m+oo; else: x350=lft1x3-u; lft0x360=(plki+.5).u; top0y360=m+oo; fi; lft0x361=lft99x318; y361=y318; x354=.6[x350,x360]; y354=.55[y350,y360]; x355=.73[x350,x360]; y355=.75[y350,y360]; new dirml,dirmr; dirml=.5; dirmr=.25; call arcpoint(150,154,152,1,0,dirml(x160-x150),y160-y150,.6,.4); call arcpoint(154,160,158,dirml(x160-x150),y160-y150,1,0,.68,.5); call arcpoint(150,155,151,1,0,dirmr(x160-x150),y160-y150,.4,.6); call arcpoint(155,160,159,dirmr(x160-x150),y160-y150,1,0,.55,.5); call arcpoint(150,151,121,1,0,x155-x150,y155-y150,.78,.5); call arcpoint(151,155,125,x155-x150,y155-y150,dirmr(x160-x150),y160-y150,.5,.5); call arcpoint(150,152,122,1,0,x154-x150,y154-y150,.5,.5); call arcpoint(152,154,124,x154-x150,y154-y150,dirml(x160-x150),y160-y150,.5,.5); call arcpoint(350,354,352,-1,0,dirml(x360-x350),y360-y350,.6,.4); call arcpoint(354,360,358,dirml(x360-x350),y360-y350,-1,0,.68,.5); call arcpoint(350,355,351,-1,0,dirmr(x360-x350),y360-y350,.4,.6); call arcpoint(355,360,359,dirmr(x360-x350),y360-y350,-1,0,.55,.5); call arcpoint(350,351,321,-1,0,x355-x350,y355-y350,.78,.5); call arcpoint(351,355,325,x355-x350,y355-y350,dirmr(x360-x350),y360-y350,.5,.5); call arcpoint(350,352,322,-1,0,x354-x350,y354-y350,.5,.5); call arcpoint(352,354,324,x354-x350,y354-y350,dirml(x360-x350),y360-y350,.5,.5); if ssflag=0: w0 ddraw 150{1,0}..122{x152-x150,y152-y150}.. % upper right arm 152{x154-x150,y154-y150}..124{x154-x152,y154-y152}.. 154{dirml(x160-x150),y160-y150}..158{x160-x154,y160-y154}.. 160..161{0,-1}, 150{1,0}..121{x151-x150,y151-y150}.. 151{x155-x150,y155-y150}..125{x155-x151,y155-y151}.. 155{dirmr(x160-x150),y160-y150}..159{x160-x155,y160-y155}.. 160..161{0,-1}; w99 draw 118; % right bulb w0 ddraw 350{-1,0}..322{x352-x350,y352-y350}.. % upper left arm 352{x354-x350,y354-y350}..324{x354-x352,y354-y352}.. 354{dirml(x360-x350),y360-y350}..358{x360-x354,y360-y354}.. 360..361{0,-1}, 350{-1,0}..321{x351-x350,y351-y350}.. 351{x355-x350,y355-y350}..325{x355-x351,y355-y351}.. 355{dirmr(x360-x350),y360-y350}..359{x360-x355,y360-y355}.. 360..361{0,-1}; w99 draw 318; % left bulb else: x170=x160+.3u; y170=y160; w0 draw 150{1,0}..122{x152-x150,y152-y150}.. % upper right arm 152{x154-x150,y154-y150}..124{x154-x152,y154-y152}.. 154{dirml(x160-x150),y160-y150}..158{x160-x154,y160-y154}.. 160{1,0}..170; x370=x360-.3u; y370=y360; w0 draw 350{-1,0}..322{x352-x350,y352-y350}.. % upper left arm 352{x354-x350,y354-y350}..324{x354-x352,y354-y352}.. 354{dirml(x360-x350),y360-y350}..358{x360-x354,y360-y354}.. 360{-1,0}..370; fi; y250=y3; if ssflag=0: x250=rt1x3+.5u; x260=r-(plki+1.5).u; bot0y260=-oo; else: x250=rt1x3+1.5u; rt0x260=r-plki.u; bot0y260=-oo; fi; x254=(.55+qyd)[x250,x260]; y254=.5[y250,y260]; x255=.84[x250,x260]; y255=.8[y250,y260]; y450=y3; if ssflag=0: x450=lft1x3-.5u; x460=(plki+1.5).u; bot0y460=-oo; else: x450=lft1x3-1.5u; lft0x460=plki.u; bot0y460=-oo; fi; x454=(.55+qyd)[x450,x460]; y454=.5[y450,y460]; x455=.84[x450,x460]; y455=.8[y450,y460]; new dirml,dirmr; dirml=.37+qye; dirmr=.15+qyf; call arcpoint(250,254,252,1,0,dirml(x260-x250),y260-y250,.55,.3); call arcpoint(254,260,258,dirml(x260-x250),y260-y250,1,0,.6,.5); call arcpoint(250,255,251,1,0,dirmr(x260-x250),y260-y250,.5,.5); call arcpoint(255,260,259,dirmr(x260-x250),y260-y250,1,0,.5,.4); call arcpoint(250,251,221,1,0,x255-x250,y255-y250,.4,.6); call arcpoint(250,252,222,1,0,x254-x250,y254-y250,.4,.5); call arcpoint(251,255,225,x255-x250,y255-y250,dirmr(x260-x250),y260-y250,.5,.5); call arcpoint(252,254,224,x254-x250,y254-y250,dirml(x260-x250),y260-y250,.6,.3); call arcpoint(450,454,452,-1,0,dirml(x460-x450),y460-y450,.55,.3); call arcpoint(454,460,458,dirml(x460-x450),y460-y450,-1,0,.6,.5); call arcpoint(450,455,451,-1,0,dirmr(x460-x450),y460-y450,.5,.5); call arcpoint(455,460,459,dirmr(x460-x450),y460-y450,-1,0,.5,.4); call arcpoint(450,451,421,-1,0,x455-x450,y455-y450,.4,.6); call arcpoint(450,452,422,-1,0,x454-x450,y454-y450,.4,.5); call arcpoint(451,455,425,x455-x450,y455-y450,dirmr(x460-x450),y460-y450,.5,.5); call arcpoint(452,454,424,x454-x450,y454-y450,dirml(x460-x450),y460-y450,.6,.3); if ssflag=0: w0 ddraw 250{1,0}..222{x252-x250,y252-y250}.. % left leg 252{x254-x250,y254-y250}..224{x254-x252,y254-y252}.. 254{dirml(x260-x250),y260-y250}..258{x260-x254,y260-y254}.. 260{1,0}, 250{1,0}..221{x251-x250,y251-y250}.. 251{x255-x250,y255-y250}..225{x255-x251,y255-y251}.. 255{dirmr(x260-x250),y260-y250}..259{x260-x255,y260-y255}.. 260{1,0}; w0 ddraw 450{-1,0}..422{x452-x450,y452-y450}.. % left leg 452{x454-x450,y454-y450}..424{x454-x452,y454-y452}.. 454{dirml(x460-x450),y460-y450}..458{x460-x454,y460-y454}.. 460{-1,0}, 450{-1,0}..421{x451-x450,y451-y450}.. 451{x455-x450,y455-y450}..425{x455-x451,y455-y451}.. 455{dirmr(x460-x450),y460-y450}..459{x460-x455,y460-y455}.. 460{-1,0}; else: x270=x260; bot0y270=-oo; w0 draw 250{1,0}..222{x252-x250,y252-y250}.. % left leg 252{x254-x250,y254-y250}..224{x254-x252,y254-y252}.. 254{dirml(x260-x250),y260-y250}..258{x260-x254,y260-y254}.. 260..270{1,0}; x470=x460; bot0y470=-oo; w0 draw 450{-1,0}..422{x452-x450,y452-y450}.. % left leg 452{x454-x450,y454-y450}..424{x454-x452,y454-y452}.. 454{dirml(x460-x450),y460-y450}..458{x460-x454,y460-y454}.. 460..470{-1,0}; fi; cpen; w0 draw 3..250; % connections to stem draw 3..450; if ssflag=0: rt0x269=round(r-plki.u); y269=.25y250; x265=.7[x260,x269]; y265=.3[y260,y269]; w0 draw 260{1,0}..265..269{0,1}; % foot on right leg lft0x469=round(plki.u); y469=.25y450; x465=.7[x460,x469]; y465=.3[y460,y469]; w0 draw 460{-1,0}..465..469{0,1}; % foot on left leg fi. "Dotless letter i (for Ukrainian)"; call charbegin('075,2.pvbli+pw1/pu,px,0,px.slant); hpen; x1=x2=good1 .5r; top1y1=m+ssdoo; bot1y2=0; w1 draw 1..2; % stem if lcs0: call `a sserif(1,1,2,-lcs); % upper serif call `b serif(2,1,1,-lcs); call `c serif(2,1,1,lcs); % lower serif fi. "Lowercase Cyrillic soft sign"; call charbegin('176,pvbli+.5pwi/pu+phbls+.5pwii/pu+phbli,px,0,.33.px.slant); hpen; lft1x1=lft1x2=round(pvbli.u); top1y1=m; bot1y2=0; w1 draw 1..2; % stem if lcs  0: call `a serif(1,1,2, -lcs); % upper stem serif call `b serif(1,1,2, lcs); call `c serif(2,1,1, -lcs); % lower stem serif call `d serif(2,1,1,.25lcs); fi; x25=x1; x26=.5[x25,x27]; y25=y26=lb; x28=x26; bot0y28=0; rt2x27=round(r-phbli.u); y27=.5[y25,y2]; lft0x29=lft2x27; rt0x30=rt2x27; y29=y30=y27; call `f lune(26,28,29,30,.48.rdns,.48.rdns,.48.rdns,.48.rdns); % bowl w0 draw 25..26; % connections to stem w0 draw 2..28. "Lowercase Cyrillic hard sign"; call charbegin('177,plai+.5pw/pu+(plal-1)+phbls+.5pwii/pu+phbli,px,0,1/3px.slant); hpen; x1=good1((plai+plal-1).u+.5w0); x2=x1; top1y1 = m; bot1y2 = 0; w1 draw 1..2; % stem if lcs  0: call `a serif(1,1,2,-.5lcs); % upper stem serif call `b serif(1,1,2, lcs); call `c serif(2,1,1, -lcs); % lower stem serif call `d serif(2,1,1,.5lcs); fi; lft0x3=round(plai.u); y3=y1; % upper arm and serif x4= good0(x3-.5u); y4 = y3-sas; call `e arm(1,3,4,sas); x25= x1; x26=.4[x25,x27]; y25= y26=lb+oo; x28=x26; bot0y28=0; rt2x27=round(r-phbli.u); y27=.5[y25,y2]; lft0x29=lft2x27; rt0x30=rt2x27; y29=y30=y27; call `f lune(26,28,29,30,.48.rdns,.48.rdns,.48.rdns,.48.rdns); % bowl x44=x25; y44=.2[y25,y27]; w0 draw 44{0,1}..26{1,0}; % connections to stem w0 draw 2..28. "Cyrillic letter eprime"; call charbegin('013,plzi+.5pw/pu+lepwidth+qza.(.5pwii/pu)+poli,px,0,.5.px.slant); cpen; lft0x901=round(plzi.u); if ssflag=0: y901=.12m; x1=.44[x901,x3]; else: y901=.15m; x1=.36[x901,x3]; fi; x1=x2; top0y1=m+oo; bot0y2=-oo; new w99; w99=qza.w2; rt99x3=round(r-poli.u); y3=.5[y1,y2]; rt0x13=rt99x3; lft0x23=lft99x3; y13=y23=y3; call lune(1,2,23,13,.42rdns,.42rdns,.42rdns,.42rdns); % bowl if ssflag=0: x903=x901-.3u; y903=y901+(1.5+qyg).w0; lft0x101=round(lft0x901+.2u); y101=.9m; x103=x101-.1u; y103=y101-(1.5+qyg).w0; new tailex; tailex=-1.2; new tailmid; tailmid=-.6; call arcpoint(2,901,902,-1,0,tailex,1,.5,.5); call arcpoint(2,903,904,-1,0,tailmid,1,.55,.5); call arcpoint(1,101,102,-1,0,tailex,-1,.5,.5); call arcpoint(1,103,104,-1,0,tailmid,-1,.55,.5); w0 ddraw 2{-1,0}..902{x901-x2,y901-y2}..901{tailex,1}, 2{-1,0}..904{x903-x2,y903-y2}..903{tailmid,1}; w0 ddraw 1{-1,0}..102{x101-x1,y101-y1}..101{tailex,-1}, 1{-1,0}..104{x103-x1,y103-y1}..103{tailmid,-1}; else: new slp; slp=-1.2; x101=x901; y101=.85m; call arcpoint(1,101,102,-1,0,slp,-1,.5,.5); call arcpoint(2,901,902,-1,0,slp,1,.5,.5); w0 draw 1{-1,0}..102{x101-x1,y101-y1}..101{slp,-1}; draw 2{-1,0}..902{x901-x2,y901-y2}..901{slp,1}; fi; cpen; if ssflag=0: y509=y510=y511=round .51m; x509=round(lft0x901+(1.2+qyh).u); x510=.5[x509,x511]; y515-y509=.1(m-e); y509-y516=.1(m-e); x515=.4[x509,x510]; x516=.6[x510,x511]; new hgt,bdth,theta,sintheta,costheta,acoef,bcoef,ccoef; hgt=w0; bdth=qzb.(1.75w0); theta=30; sintheta=sind theta; costheta=cosd theta; x511+.5bdth.costheta=lft99x3-.25u; acoef=4.((costheta.costheta)/(bdth.bdth)+(sintheta.sintheta)/(hgt.hgt)); bcoef=8.sintheta.costheta(1/(bdth.bdth)-1/(hgt.hgt)); ccoef=4.((sintheta.sintheta)/(bdth.bdth)+(costheta.costheta)/(hgt.hgt)); spen(acoef,bcoef,ccoef,0,0,0,0); draw 509..515..510{2,-1}..516..511; % center tilde else: x800=1[x3,x1]; y800=y3; w0 draw 800..3; fi. "Cyrillic letter a"; call charbegin(`a,plcali+.5pwii/pu+lawidth+.5pwi/pu+plcari,px,0,1/3[pe,px].slant); cpen; lft3x1=round((plcali+.8).u); if top3(top3top6e+2)>.9[e,m]: top3y1=.9[e,m]; else: y1=top3top6e+2; fi; w3 draw 1; % bulb hpen; lft0x2=lft3x1; y2=y1; x3=4u; top0y3=m+oo; rt1x4=rt1x5=round(r-plcari.u); y4=1/3[e,m]; w0 draw 2{0,1}..3{1,0}; call `a arc(3,4,w1); % shoulder if lcs=0: bot1y5=0; w1 draw 4..5; % stem else: rt0x7=round(r-(plcari-1.5).u); y5=.2[top1 0,e]; w1 draw 4..5; % stem if rt1x5+.75ulft0x7: rt0x6=.5[rt1x5,rt0x7]; bot0y6=0; y7=.5e; draw |w1#|5{0,-1}.. |w0#|6{1,0}..7{0,1}; % hook else: rt1x6=round(r-.5u); bot1y6=0; w1 draw 5{0,-1}..6{1,0}; % foot fi; fi; x8=x9+1.5u; y8=e; x9=x4; y9=e; lft2x11=round(plcali.u); y11=.2[w6,y9]; x12=.23[x11,x8]; bot0y12=-oo; x13=.38[x11,x8]; y13=.015[y12,y9]; x10=x9; y10=.3[y12,y9]; call arc(9,11,w2); % upper part of bowl draw |w2#|11{0,-1}.. |.7[w0,w2]|12{1,0}..|w0#|13..10(..8). % lower part of bowl "Cyrillic letter b"; call charbegin(`b,2.poli+pwii/pu+lowidth-.25,ph,0,ph.slant-.25pu); hpen; x1=.5[x2,x3]; lft2x2=round(poli.u); rt2x3=round(r-poli.u); top0y1=m+oo; bot0y2=-oo; y3=y2; call `a darc(1,2,w2); call `b darc(1,3,w2); % bowl lft0x4=lft2x2; y4=.5[y1,y2]; x5=x2+2u; x6=x3-2u; y5=.6[m,h]; y6=2/3[m,h]; x7=x8=x5; x9=x10=x6; rt0x11=rt2x3; top0y11=h+oo; vpen; w7 draw 5..6; % bar top7y5=top6y7; top7y6=top6y9; bot7y5=bot6y8; bot7y6=bot6y10; hpen; w0 ddraw 4{0,1}..7{x6-x5,y6-y5}, 4{0,1}..8{x6-x5,y6-y5}; % link ddraw 9{x6-x5,y6-y5}..11{0,1}, 10{x6-x5,y6-y5}..11{0,1}. % hook "Cyrillic letter ts"; call charbegin(`c,pvbli+.5pwi/pu+pvbls+plstla+.5pw/pu+plali,px,psas,px.slant); hpen; lft1x1=round(pvbli.u); x2=x1; x3=good1(r-.5w0-(plali+plstla).u); x4=x3; x5=.5[x1,x3]; top0y1=m; bot0y2=0; y3=y1; y2=y5=y4=y6; rt0x6=round(r-plali.u); x7=good0(x6+.5u); y7=y6-sas; if lcs0:call `a serif(1,1,2,-lcs); call `b serif(1,1,2,lcs); call `c serif(2,1,1,-lcs); call `d serif(2,1,1,.5lcs); call `e serif(3,1,4,-lcs); call `f serif(3,1,4,lcs); call `g serif(4,1,3,-.5lcs); new tmp; tmp=crisp; new crisp; crisp=0; rt0x12=rt1x4; call `h serif(4,1,3,(x6-x12)/u); new crisp; crisp=tmp; fi; w1 draw 1..2; % left stem w1 draw 3..4; % right stem w0 draw 2..4; % bar call `i carm(5,6,7,sas). % lower arm "Cyrillic letter d"; call charbegin(`d,2.plali+pw/pu+ldwidth+plstla,px,psas,px.slant); hpen; lft0x9=lft0x8-.5u; lft0x8=round(plali.u); x5=.5[x1,x3]; rt0x6=round(r-plali.u); rt0x7=rt0x6+.5u; x1=good0(x8+2u); x2=x8+u; x3=good1(r-(plali+plstla).u-.5w0); x4=x3; top0y1=m; bot0y2=0; y3=y1; y8=y2=y5=y4=y6; y7=y9=y6-sas; y10=y1-s; y11=y2+s; x10=x1; (x11-x2)/(y11-y2)=(.3(x1+x3)-x2)/(.3(y1+y3)-y2); if lcs0: call `a dserif(1,0,10,-lcs); call `b dserif(1,0,10,lcs); % upper left serif call `c serif(3,1,4,-.5lcs); call `d serif(3,1,4,lcs); % upper right serif new tmp; tmp=crisp; new crisp; crisp=0; call `e serif(2,0,11,(x8-x2)/u);% lower left serif rt0x12=rt1x4; call `j serif(4,1,3,(x6-x12)/u);% lower right serif new crisp; crisp=tmp; call `f serif(2,0,11,lcs); % lower left serif call `i serif(4,1,3,-.5lcs); % lower right serif fi; w1 draw 3..4; % right stem w0 draw 10{0,-1}..11{x2-x11,y2-y11}; % diagonal draw 1..3; % upper bar call `g carm(5,8,9,sas); % left arm call `h carm(5,6,7,sas). % right arm "Cyrillic letter e"; call charbegin(`e,2.poli+pwii/pu+(lowidth-1.25),px,0,pe.slant); hpen; x3=.5r; top0y3=m+oo; y1=e; y2=.5[y5,y3]; lft2x2=round(fixwidth[poli.u,(poli+.25).u]); rt2x1=round(r-fixwidth[poli.u,(poli+.25).u]); fi; bot0y5=-oo; x5=x3+.5u; new save; save=sqrttwo; new sqrttwo; sqrttwo=sqrt 1.3save; call `a arc(3,1,w1); % bowl new sqrttwo; sqrttwo=save; call `b arc(3,2,w2); call `c arc(5,2,w2); % stroke new aa; y1=y4=aa[y2,y3]; x4-1=(sqrt(1-aa.aa))[x3,x2]; w0 draw 4..1; % bar if w0=w1: x6=x1; x7-x5=x1-x3; y7=y2; new aa; x6=aa[x5,x7]; y6=(sqrt(1-aa.aa))[y7,y5]; else: rt0x6=rt2x1; x7=x6; y6=.5e-1; y7=e; fi; w0 draw 5{1,0}..6(..7). % point "Cyrillic letter f"; call charbegin(`f,2.poli+pwi/pu+lfwidth,ph,pd,.6px.slant); hpen; x1=x2=good1 .5r; top1y1=h; bot1y2=-d; w1 draw 1..2; % stem if lcs0: call `a sserif(1,1,2,-lcs); % upper serif call `b serif(2,1,1,-lcs); call `c serif(2,1,1,lcs); % lower serif fi; lft1x7=round(poli.u); rt0x5=rt1x1; x3=.6[x5,x7]; x3+x4=x5+x6=x7+x8=r; y3=y4; y5=y6; y7=y8; % symmetry top0y3=m+oo; bot0y5=-oo; y5=y7; x10+x3=2x1; y9=y7; x9+x4=2x1; y10=y8; x11=x1; 2y11=y3+y10; call `d darc(4,8,w1); % right bowl call `e darc(3,7,w1); % left bowl call `f arc(4,11,w0); call `g arc(10,11,w0); % right innards call `h arc(3,11,w0); call `i arc(9,11,w0). % left innards "Cyrillic letter g"; call charbegin(`g,pvbli+.5pwi/pu+plal+.5pw/pu+plai,px,0,px.slant); hpen; lft1x1=round(pvbli.u); x2=x1; top1y1=m; bot1y2=0; w1 draw 1..2; % stem if lcs0: call `a serif(1,1,2,-lcs); call `b serif(1,1,2,.5lcs); % upper stem serif call `c serif(2,1,1,-lcs); call `d serif(2,1,1,lcs); % lower stem serif fi; rt0x3=round(r-plai.u); x4=good0(x3+.5u); y3=y1; y4=y3-sas; call `e arm(1,3,4,sas). % upper arm and serif "Cyrillic letter kh"; call charbegin(`h,2.pvbli+pwii/pu+lkhwidth,px,0,px.slant); hpen; lft2x1=round(pvbli.u); rt2x4=round(r-pvbli.u); x3=x1; x2=good0(x4-.25u); top2y1=m; bot2y4=0; y2=y1; y3=y4; w2 draw 1..4; % upper left to lower right diagonal w0 draw 3..2; % lower left to upper right diagonal if lcs0: call `a serif(1,2,4,-lcs); call `b serif(1,2,4,lcs); % upper left serif call `c serif(4,2,1,-lcs); call `d serif(4,2,1,lcs); % lower right serif new ss; ss=.5(w2-w0)/u; % correction to \\{lcs} makes $w0$ like $w2$ call `e dserif(2,0,3,-lcs-ss); call `f dserif(2,0,3,lcs+ss); % upper right serif call `g dserif(3,0,2,-lcs-ss); call `h dserif(3,0,2,lcs+ss); % lower left serif fi. "Cyrillic letter i"; call charbegin(`i,2.pvbli+pwi/pu+pvbls,px,0,px.slant); hpen; lft1x1=lft1x2=round(pvbli.u); rt1x3=rt1x4=round(r-pvbli.u); top1y1=m; y1=y3; bot1y2=0; y2=y4; w1 draw 1..2; % stems draw 3..4; if lcs  0: call `a serif(1,1,2,-lcs); % upper left serif call `b serif(1,1,2, lcs); call `c serif(2,1,1,-lcs); % lower left serif call `d serif(2,1,1, lcs); call `e serif(3,1,4,-lcs); % upper right serif call `f serif(3,1,4, lcs); call `g serif(4,1,3,-lcs); % lower right serif call `h serif(4,1,3, lcs); fi; new w99; w99=.8w0; w99 draw 3..2. % bar "The letter j"; call charbegin(`j,6,ph,pd,ph.slant+.5pwi-2pu); hpen; x1=x2=good1(r-2.5u); if fixwidth=0: rt3x4=round 1.25u; else: lft3x4=round u; fi; cpen; top3y3=h-ssd; rt3x3=rt1x1; w3 draw 3; % dot bot3y4=-.9d; w3 draw 4; % bulb hpen; top1y1=m+ssdoo; bot1y2=-1/3 d; bot0y5=-d-oo; y4=y6; lft0x6=lft3x4; x5=.5[x2,x6]; draw |w1|1..|w1#|2{0,-1}..|w0#|5{-1,0}..6{0,1}; % stem and tail if lcs0: call `a sserif(1,1,2,-lcs); % serif fi; if ptsize>14: if mode=2: call snip(pa); call snip(px+po); call snip(0); fi; fi. "Cyrillic letter k"; call charbegin(`k,pvbli+.5pwi/pu+lkwidth+.5pw/pu+plki,px,0,px.slant); hpen; lft1x1=round(pvbli.u); x3=x2=x1; top1y1=m; bot1y2=0; w1 draw 1..2; % stem if lcs>0: call `a serif(1,1,2,-lcs); % serifs on stem call `b serif(1,1,2,lcs); call `c serif(2,1,1,-lcs); call `d serif(2,1,1,lcs); fi; cpen; new w99; w99=.8w3; y3=good6 .5m; rt99x118=round(r-(plki+.5).u); top99y118=m; y150=y3; if ssflag=0: x150=rt1x3; x160=x118-.25w99; top0y160=m+oo; else: x150=rt1x3+u; rt0x160=r-(plki+.5).u; top0y160=m+oo; fi; rt0x161=rt99x118; y161=y118; x154=.6[x150,x160]; y154=.55[y150,y160]; x155=.73[x150,x160]; y155=.75[y150,y160]; new dirml,dirmr; dirml=.5; dirmr=.25; call arcpoint(150,154,152,1,0,dirml(x160-x150),y160-y150,.6,.4); call arcpoint(154,160,158,dirml(x160-x150),y160-y150,1,0,.68,.5); call arcpoint(150,155,151,1,0,dirmr(x160-x150),y160-y150,.4,.6); call arcpoint(155,160,159,dirmr(x160-x150),y160-y150,1,0,.55,.5); call arcpoint(150,151,121,1,0,x155-x150,y155-y150,.78,.5); call arcpoint(151,155,125,x155-x150,y155-y150,dirmr(x160-x150),y160-y150,.5,.5); call arcpoint(150,152,122,1,0,x154-x150,y154-y150,.5,.5); call arcpoint(152,154,124,x154-x150,y154-y150,dirml(x160-x150),y160-y150,.5,.5); if ssflag=0: w0 ddraw 150{1,0}..122{x152-x150,y152-y150}.. % upper arm 152{x154-x150,y154-y150}..124{x154-x152,y154-y152}.. 154{dirml(x160-x150),y160-y150}..158{x160-x154,y160-y154}.. 160..161{0,-1}, 150{1,0}..121{x151-x150,y151-y150}.. 151{x155-x150,y155-y150}..125{x155-x151,y155-y151}.. 155{dirmr(x160-x150),y160-y150}..159{x160-x155,y160-y155}.. 160..161{0,-1}; w99 draw 118; % bulb else: x170=x160+.3u; y170=y160; w0 draw 150{1,0}..122{x152-x150,y152-y150}.. % upper arm 152{x154-x150,y154-y150}..124{x154-x152,y154-y152}.. 154{dirml(x160-x150),y160-y150}..158{x160-x154,y160-y154}.. 160{1,0}..170{1,0}; fi; y250=y3; if ssflag=0: x250=rt1x3+.5u; x260=r-(plki+1.5).u; bot0y260=-oo; else: x250=rt1x3+1.5u; rt0x260=r-plki.u; bot0y260=-oo; fi; x254=(.55+qyd)[x250,x260]; y254=.5[y250,y260]; x255=.84[x250,x260]; y255=.8[y250,y260]; new dirml,dirmr; dirml=.37+qye; dirmr=.15+qyf; call arcpoint(250,254,252,1,0,dirml(x260-x250),y260-y250,.55,.3); call arcpoint(254,260,258,dirml(x260-x250),y260-y250,1,0,.6,.5); call arcpoint(250,255,251,1,0,dirmr(x260-x250),y260-y250,.5,.5); call arcpoint(255,260,259,dirmr(x260-x250),y260-y250,1,0,.5,.4); call arcpoint(250,251,221,1,0,x255-x250,y255-y250,.4,.6); call arcpoint(250,252,222,1,0,x254-x250,y254-y250,.4,.5); call arcpoint(251,255,225,x255-x250,y255-y250,dirmr(x260-x250),y260-y250,.5,.5); call arcpoint(252,254,224,x254-x250,y254-y250,dirml(x260-x250),y260-y250,.6,.3); if ssflag=0: w0 ddraw 250{1,0}..222{x252-x250,y252-y250}.. % leg 252{x254-x250,y254-y250}..224{x254-x252,y254-y252}.. 254{dirml(x260-x250),y260-y250}..258{x260-x254,y260-y254}.. 260{1,0}, 250{1,0}..221{x251-x250,y251-y250}.. 251{x255-x250,y255-y250}..225{x255-x251,y255-y251}.. 255{dirmr(x260-x250),y260-y250}..259{x260-x255,y260-y255}.. 260{1,0}; else: x270=x260; bot0y270=-oo; w0 draw 250{1,0}..222{x252-x250,y252-y250}.. % leg 252{x254-x250,y254-y250}..224{x254-x252,y254-y252}.. 254{dirml(x260-x250),y260-y250}..258{x260-x254,y260-y254}.. 260..270{1,0}; fi; cpen; w0 draw 3..250; % connection to stem if ssflag=0: rt0x269=round(r-plki.u); y269=.25y250; x265=.7[x260,x269]; y265=.3[y260,y269]; w0 draw 260{1,0}..265..269{0,1}; % foot on leg fi. "Cyrillic letter l"; call charbegin(`l,plli+.4pwiii/pu+llwidth+.5pwi/pu+pvbli,px,0,px.slant); hpen; rt1x1=round(r-pvbli.u); x2=x1; bot0y1=0; top0y2=m; y3=y2; x4=x3; cpen; if ssflag=0: x6=(plli+1.5).u; x3=good0(x6+1.75u); y4=y3-s; new w99; w99=.8w3; lft99x8=lft0x7=round(plli.u); y8=y7=.12m; else: x7=plli.u; y7=y6; x7=x6-.75u; x3=good0(x6+.75u); y4=y3; fi; bot0y6=-oo; hpen; w1 draw 1..2; % vertical stroke w0 draw 2..3; % upper bar if lcs0: call `a serif(1,1,2,lcs); % serifs call `b serif(1,1,2,-lcs); call `c serif(2,1,1,lcs); call `d serif(2,1,1,-lcs); call `e dserif(3,0,4,lcs); call `f dserif(3,0,4,-lcs); fi; cpen; if ssflag=0: w0 draw 4{0,-1}..6{-1,0}..7{0,1}; w99 draw 8; % bulb else: w0 draw 4{0,-1}..6{-1,0}..7; fi. "Cyrillic letter m"; call charbegin(`m,2.pvbli+.5(pw+pwi)/pu+lmwidth,px,0,px.slant); if fudge1: new w0,w1; % lines will be thinner in fudged styles w0=round(fudge.pixels.pw+blacker); w1=round(fudge.pixels.pwi+blacker); fi; hpen; lft0x1=round(pvbli.u); x1=x2; top0y1=m; bot0y2=0; new w99; w99=round .8[w0,w1]; rt99x3=round(r-pvbli.u); x3=x4; top99y3=m; bot99y4=0; lft99x5=lft0x1+del; lft0x6=lft99x3-del; y1=y5; y6=y3; x7-x5=x6-x8; lft99x7=lft0x8; bot4y7=0; y8=y7; w0 draw 5..1..1..2; % left stem w99 draw 5..7; % left diagonal rpen#; w1 draw 8..6; % erase excess at lower right hpen; w0 draw 8..6..6..3; % right diagonal w1 draw 3..4; % right stem if ucs0: call `a dserif(2,0,1,-lcs); call `b dserif(2,0,1,lcs); % lower left serif call `c serif(5,4,7,-lcs-del/u); % upper left serif call `d serif(3,99,4,lcs); % upper right serif call `e serif(4,99,3,-lcs); call `f serif(4,99,3,lcs); % lower right serif fi; if fudge1: new w0,w1; % restore normal sizes in fudged styles w0=round(pixels.pw+blacker); w1=round(pixels.pwi+blacker); fi. "Cyrillic letter n"; call charbegin(`n,2.pvbli+pwi/pu+pvbls,px,0,px.slant); hpen; lft1x1=round(pvbli.u); x2=x1; rt1x3=round(r-pvbli.u); x4=x3; top1y1=m; y1=y3; bot1y2=0; y2=y4; w1 draw 1..2; % left stem w1 draw 3..4; % right stem if lcs0: call `a serif(1,1,2,-lcs); call `b serif(1,1,2,lcs); % upper left serif call `c serif(2,1,1,-lcs); call `d serif(2,1,1,lcs); % lower left serif call `e serif(3,1,4,-lcs); call `f serif(3,1,4,lcs); % upper right serif call `g serif(4,1,3,-lcs); call `h serif(4,1,3,lcs); % lower right serif fi; x5=x1; x6=x3; y5=y6; y5=(px/phh).ub; w0 draw 5..6. % bar "Cyrillic letter o"; call charbegin(`o,2.poli+pwii/pu+lowidth,px,0,.5px.slant); hpen; if fixwidth0: new save; save=sqrttwo; new sqrttwo; sqrttwo=sqrt save; % super-superellipse lft2x2=round 1.5u; else: lft2x2=round(poli.u); fi; x1=r-x1; % axis of left-right symmetry top0y1=m+oo; bot0y2=-oo; y3=y2; x3=r-x2; %call `a darc(1,2,w5); % left part of bowl %call `b darc(1,3,w5); % right part of bowl lft0x112=lft2x2; good0 x112=x12; rt0x122=rt2x2; good0 x122=x22; y12=y22=.5[y1,y2]; lft0x113=lft2x3; good0 x113=x13; rt0x123=rt2x3; good0x123=x23; y13=y23=y12; x5=x1; bot0y5=-o; call lune(1,5,22,12,.42rdns,.42rdns,.42rdns,.42rdns); call lune(1,5,13,23,.42rdns,.42rdns,.42rdns,.42rdns); if fixwidth0: new sqrttwo; sqrttwo=save; fi. "Cyrillic letter p"; call charbegin(`p,2.pvbli+pwi/pu+pvbls,px,0,px.slant); hpen; lft1x1=round(pvbli.u); x2=x1; rt1x3=round(r-pvbli.u); x4=x3; top1y1=m; y1=y3; bot1y2=0; y2=y4; w1 draw 1..2; % left stem w1 draw 3..4; % right stem if lcs0: call `a serif(1,1,2,-lcs); call `b serif(1,1,2,.5lcs); % upper left serif call `c serif(2,1,1,-lcs); call `d serif(2,1,1,lcs); % lower left serif call `e serif(3,1,4,-.5lcs); call `f serif(3,1,4,lcs); % upper right serif call `g serif(4,1,3,-lcs); call `h serif(4,1,3,lcs); % lower right serif fi; w0 draw 1..3. % bar "Cyrillic letter ch"; call charbegin(`q,2.pvbli+pwi/pu+pvbls-.25,px,0,px.slant); hpen; rt1x1=round(r-pvbli.u); x2=x1; bot1y1=0; top1y2=m; y4=y2; lft1x4=round(pvbli.u); w1 draw 1..2; %right vertical stem x3=x4; lft0x6=lft1x1; x5=.5[x3,x6]; new vfr; vfr=.9px/phh; top1y2-bot1y5=vfr.(m+oo); top1y4-y3=vfr.(1/3[e,m]); top1y2-y6=vfr.(.25[e,m]); new stwo; stwo=1.37; x7=1/stwo[x5,x3]; y7=1/stwo[y3,y5]; rt0x31=rt1x3; lft0x32=lft1x3; y31=y32=y3; x71=1/stwo[x5,x31]; x72=1/stwo[x5,x32]; y71=1/stwo[y31,y5]; y72=1/stwo[y32,y5]; w1 draw 4..3; %left vertical w0 draw 5{1,0}..6{0,1}; %hump ddraw 31{0,-1}..71{x5-x31,y5-y31}..5{1,0}, 32{0,-1}..72{x5-x32,y5-y32}..5{1,0}; if lcs>0: call `a serif(2,4,1,lcs); %top rt. rt. serif call `b serif(1,4,2,lcs); %bot rt. rt. serif call `c serif(2,4,1,-.5lcs); %top inside rt. serif call `d serif(1,4,2,-lcs); %bot left serif call `e serif(4,4,3,.5lcs); %top inside lft serif call `f serif(4,4,3,-lcs); %top lft lft serif fi. "Cyrillic letter r"; call charbegin(`r,pvbli+.5pwi/pu+(lowidth-.75)+.5pwii/pu+poli,px,pd,.5px.slant); hpen; lft1x1=lft1x2=lft1x3=round(pvbli.u); x4=x5=.55[x1,x6]; rt2x6=round(r-poli.u); top1y1=m+ssdoo; bot1y2=-d; top0y4=m+oo; bot0y5=-oo; y3=.5[y4,y5]; y6=y5; w1 draw 1..2; % stem w0 draw 5{-1,0}..3{0,1}..4{1,0}; % left part of bowl call `a darc(4,6,w2); % right part of bowl if lcs0: call `b sserif(1,1,2,-lcs); % upper serif call `c serif(2,1,1,-lcs); call `d serif(2,1,1,lcs); % lower serif fi. "Cyrillic letter s"; call charbegin(`s,poli+.5pwii/pu+lswidth+.5pwiii/pu+plsi,px,0,px.slant-pu); cpen; rt3x1=round(r-plsi.u); if top3(top3top6e+2)>.9[e,m]: top3y1=.9[e,m]; else: y1=top3top6e+2; fi; if ssflag=0: w3 draw 1; fi; % bulb hpen; rt0x2=rt3x1; y2=y1; x3=x5=.6[x4,x1]; top0y3=m+oo; lft2x4=round(poli.u); y4=y5; bot0y5=-oo; call `a darc(3,4,w2); % stroke if w0=w1: x6=x2; x7-x5=x5-x4; y7=.5[y3,y5]; new aa; x6=aa[x5,x7]; y6=(sqrt(1-aa.aa))[y7,y5]; else: lft0x6=x2; y6=.45e; x7=x6; y7=e; fi; if ssflag=0: w0 draw 2{0,1}..3{-1,0}; % shoulder else: x12=x6; y3-y12=y6-y5; x8=x7; y12-y8=y7-y6; w0 draw 3{1,0}..12(..8); fi; w0 draw 5{1,0}..6(..7); % point if ptsize>18: if mode=2: call snip(pa); fi; fi. "Cyrillic letter t"; call charbegin(`t,2.plali+pw/pu+2.(plal-1),px,0,px.slant); hpen; x1=good1 .5r; x2=x1; top1y1=m; bot1y2=0; w1 draw 1..2; % stem if lcs0: call `a serif(1,1,2,-.5lcs); call `b serif(1,1,2,.5lcs); % upper bracketing call `c serif(2,1,1,-1.25lcs); call `d serif(2,1,1,1.25lcs); % lower serif fi; lft0x5=round(plai.u); x6=good0(x5-.5u); y3=y1; y4=y3-sas; x5+x3=x6+x4=x1+x1; y5=y1; y6=y4; % left-right symmetry call `e arm(1,3,4,sas); % upper right arm and serif call `f arm(1,5,6,sas). % upper left arm and serif "Cyrillic letter u"; call charbegin(`u,pllui+.5pwi/pu+luwidth+.5pw/pu+prlui,px,pd,px.slant); hpen; lft1x1=round(pllui.u); rt0x4=round(r-prlui.u); x2-x1=x4-x3; lft0x3=lft1x2+.5del; top1y1=m; y4=y1; bot1y2=-o;y3=y2; w1 draw 1..2; w0 draw 2..3; % left diagonal stroke rpen#; w1 draw 3..4; % erase excess at lower right if ssflag=0: cpen; lft3x8=lft0x7=round((pllui-1).u); bot3y8=-.9d; y7=y8; hpen; x6=x8+u; bot0y5=-.5d; else: x6=x5; x7=x6-u; hpen; bot0y7=bot0y6=bot0y5; fi; bot0y6=-d-oo; new aa; x5=aa[x3,x4]; y5=aa[y3,y4]; cpen; if ssflag=0: w0 draw 4..3{x3-x4,y3-y4}..6{-1,0}..7{0,1}; % right diagonal and tail w3 draw 8; % bulb else: w0 draw 4..3{x3-x4,y3-y4}..6{-1,0}..7; fi; if lcs0: call `a serif(1,1,2,-lcs); call `b serif(1,1,2,lcs); % left serif call `c dserif(4,0,3,-lcs); call `d dserif(4,0,3,lcs); % right serif fi. "Cyrillic letter v"; call charbegin(`v,pvbli+.5pwi/pu+phbls+.5pwii/pu+phbli,px,0,.75px.slant); hpen; lft1x1=lft1x2=round(pvbli.u); top1y1=m; bot1y2=0; w1 draw1..2; % stem if lcs0: call `a serif(1,1,2,-lcs); call `b serif(1,1,2,.5lcs); % upper serif call `c serif(2,1,1,-lcs); call `d serif(2,1,1,.5lcs); % lower serif fi; x3=x1; y3=.52m; rt1x25=round(r-(phbli+.5).u); y25=.5[y1,y3]; lft0x26=lft1x25; rt0x27=rt1x25; y26=y27=1[y3,y25]; x29=.5[x1,x25]; top0y29=m; x28=.5[x3,x25]; y28=y3; call `e lune(29,28,26,27,.48rdns,.48rdns,.48rdns,.48rdns); % upper bowl hpen; w0 draw 29..1; % connection to stem draw 28..3; rt2x41=round(r-phbli.u); y41=.55[y2,y3]; lft0x42=lft2x41; rt0x43=rt2x41; y42=y43=.55[y2,y3]; x45=.5[x2,x41]; bot0y45=0; call `f lune(28,45,42,43,.48rdns,.48rdns,.48rdns,.48rdns); % lower bowl hpen; w0 draw 45..2. % connection to stem "Cyrillic letter shch"; call charbegin(`w,pvbli+.5pwi/pu+2.pvblshs+plstla+.5pw/pu+plali,px,psas,px.slant); hpen; lft1x1=lft1x2=round(pvbli.u); x3=good1(x1+pvblshs.u)=x4; x5=x6=good1(r-.5w0-(plali+plstla).u);; top1y1=m; y1=y3=y5; bot1y2=0; y2=y4=y6=y7; rt0x7=round(r-plali.u); rt0x8=r; y8=y7-sas; w1 draw 1..2; % stems draw 3..4; draw 5..6; if lcs  0: if 4lcs.u+2w1>x5-x1-2u: new aa; 4aa.u+2w1=x5-x1-2u; else: new aa; aa=lcs; fi; call `a serif(1,1,2,- lcs); % upper left serif call `b serif(1,1,2, aa); call `c serif(2,1,1,- lcs); % lower left serif call `d serif(2,1,1, .5lcs); call `e serif(3,1,4,- aa); % upper middle serif call `f serif(3,1,4, aa); call `g serif(4,1,3,-.5lcs); % lower middle serif call `h serif(4,1,3, .5lcs); call `i serif(5,1,6,- aa); % upper right serif call `j serif(5,1,6, lcs); call `k serif(6,1,5,-.5lcs); % lower right serif new tmp; tmp=crisp; new crisp; crisp=0; rt0x12=rt1x6; call `l serif(6,1,5,(x7-x12)/u); new crisp; crisp=tmp; fi; w0 draw 2..6; % bottom bar call `m carm(4,7,8,sas). "Cyrillic letter sh"; call charbegin(`x,2.pvbli+pwi/pu+2.pvblshs,px,0,px.slant); hpen; lft1x1=lft1x2=round(pvbli.u); x3=good1 .5r; rt1x5=round(r-pvbli.u); x4=x3; x6=x5; top1y1=m; y1=y3=y5; bot1y2=0; y2=y4=y6; w1 draw 1..2; % stems draw 3..4; draw 5..6; if lcs  0: if 4lcs.u+2w1>x5-x1-2u: new aa; 4aa.u+2w1=x5-x1-2u; else: new aa; aa=lcs; fi; call `a serif(1,1,2,- lcs); % upper left serif call `b serif(1,1,2, aa); call `c serif(2,1,1,- lcs); % lower left serif call `d serif(2,1,1, .5lcs); call `e serif(3,1,4,- aa); % upper middle serif call `f serif(3,1,4, aa); call `g serif(4,1,3,-.5lcs); % lower middle serif call `h serif(4,1,3, .5lcs); call `i serif(5,1,6,- aa); % upper right serif call `j serif(5,1,6, lcs); call `k serif(6,1,5,-.5lcs); % lower right serif call `l serif(6,1,5, lcs); fi; w0 draw 2..6. % bottom bar "Cyrillic letter y"; call charbegin(`y,2.pvbli+pwi/pu+phbls+(3.5+qyi),px,0,px.slant); hpen; lft1x1=lft1x2=round(pvbli.u); rt1x3=rt1x4=round(r-pvbli.u); top1y1=top1y3=m; bot1y2=bot1y4=0; w1 draw 1..2; % stems draw 3..4; if lcs  0: call `a serif(1,1,2, -lcs); % upper left serif call `b serif(1,1,2, lcs); call `c serif(2,1,1, -lcs); % lower left serif call `d serif(2,1,1,.5lcs); call `e serif(3,1,4, -lcs); % upper right serif call `f serif(3,1,4, lcs); call `g serif(4,1,3, -lcs); % lower right serif call `h serif(4,1,3, lcs); fi; x25=x1; x26=.5[x25,x27]; y25=y26=lb; x28=x26; bot0y28=0; x27=good1(x1+phbls.u); y27=.5[y25,y2]; lft0x29=lft2x27; rt0x30=rt2x27; y29=y30=y27; call `f lune(26,28,29,30,.48.rdns,.48.rdns,.48.rdns,.48.rdns); % bowl w0 draw 25..26; % connections to stem w0 draw 2..28. "Cyrillic letter z"; call charbegin(`z,plzi+.5pw/pu+lzwidth+.5pwii/pu+phbli,px,0,px.slant); cpen; if ssflag=0: lft0x901=round(plzi.u); y901=.08m; x1=.45[x901,x7]; else: lft0x901=round(plzi.u); y901=.15m; x1=.4[x901,x7]; fi; top0y1=m+oo; y5=(px/phh).ub; x5=x1; bot0y9=-oo; x9=x1; rt1x3=round(r-(phbli+.5).u); y3=.5[y1,y5]; rt0x4=rt1x3; lft0x2=lft1x3; y2=y3=y4; rt2x7=round(r-phbli.u); y7=.5[y5,y9]; rt0x8=rt2x7; lft0x6=lft2x7; y6=y7=y8; call exlune(1,5,2,4,.45rdns,.45rdns,.45rdns,.45rdns,0,.3); % bowls call exlune(5,9,6,8,.45rdns,.47rdns,.45rdns,.45rdns,.25,0); if ssflag=0: x15=x5-1.15u; else: x15=x5; fi; y15=y5; w0 draw 5..15; % center line if ssflag=0: x903=x901-.1u; y903=y901+(1.5+qyg).w0; lft0x101=round((plzi+.2).u); y101=.92m; x103=x101-.1u; y103=y101-(1.5+qyg).w0; new tailex; tailex=-1.2; new tailmid; tailmid=-.6; call arcpoint(9,901,902,-1,0,tailex,1,.5,.5); call arcpoint(9,903,904,-1,0,tailmid,1,.55,.5); call arcpoint(1,101,102,-1,0,tailex,-1,.5,.5); call arcpoint(1,103,104,-1,0,tailmid,-1,.55,.5); w0 ddraw 1{-1,0}..102{x101-x1,y101-y1}..101{tailex,-1}, 1{-1,0}..104{x103-x1,y103-y1}..103{tailmid,-1}; w0 ddraw 9{-1,0}..902{x901-x9,y901-y9}..901{tailex,1}, 9{-1,0}..904{x903-x9,y903-y9}..903{tailmid,1}; else: lft0x101=round((plzi+.1).u); y101=.85m; new tail; tail=-1.2; call arcpoint(1,101,102,-1,0,tail,-1,.5,.5); call arcpoint(9,901,902,-1,0,tail,1,.5,.5); w0 draw 1{-1,0}..102{x101-x1,y101-y1}..101{tail,-1}; draw 9{-1,0}..902{x901-x9,y901-y9}..901{tail,1}; fi.