diff options
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/knitting/knit_symbols.mf')
-rw-r--r-- | Master/texmf-dist/fonts/source/public/knitting/knit_symbols.mf | 930 |
1 files changed, 930 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/knitting/knit_symbols.mf b/Master/texmf-dist/fonts/source/public/knitting/knit_symbols.mf new file mode 100644 index 00000000000..b69176268d2 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/knitting/knit_symbols.mf @@ -0,0 +1,930 @@ +if known ps_output: + font_coding_scheme := "T1-WGL4.enc"; +fi + +def purlfill = + if fonttype = purltype: + fill + ( -purlextend,-d-purlextend)-- + (w+purlextend,-d-purlextend)-- + (w+purlextend, h+purlextend)-- + ( -purlextend, h+purlextend)--cycle; + fi +enddef; + +purltype = 0; +gridtype = 1; +foretype = 2; +bothtype = 3; + +if gridfont: +def charbox = + if fonttype = purltype: + currentpicture := nullpicture; + else: + if fonttype = gridtype: currentpicture := nullpicture; fi + if (fonttype = gridtype) or (fonttype = bothtype): + pickup pencircle scaled gridwidth; + fill (-gridwidth/2,-d-gridwidth/2)--(w+gridwidth/2,-d-gridwidth/2)-- + (w+gridwidth/2,h+gridwidth/2)--(-gridwidth/2,h+gridwidth/2)--cycle; + unfill (gridwidth/2,-d+gridwidth/2)--(w-gridwidth/2,-d+gridwidth/2)-- + (w-gridwidth/2,h-gridwidth/2)--(gridwidth/2,h-gridwidth/2)--cycle; + %draw (0,-d)--(w,-d)--(w,h)--(0,h)--cycle; + fi + fi + enddef; +else: +def charbox = + if fonttype = purltype: + currentpicture := nullpicture; + fi + enddef; +fi + + +def purlbox = charbox; purlfill; enddef; + + picture symbolpic[]; + path symbolpath[]; + +def fliphoriz(text beginning, ending) = + ending := (beginning) reflectedabout ((.5w,0),(.5w,h)); + enddef; +def flipvert(text beginning, ending) = + ending := (beginning) reflectedabout ((0,(h-d)/2),(w,(h-d)/2)); + ending := (ending) shifted (0,bottomgap-topgap); + enddef; + +pair arrowpoint; + +def definearrow(text thepath, arrowlength, endpath) = + + arrowpoint := point infinity of thepath; + arrowdir := angle(direction infinity of thepath); + endpath := arrowpoint + ((1,0) rotated (arrowdir+150) scaled arrowlength) + --arrowpoint + ((1,0) rotated arrowdir scaled 0.5symbolwidth) + --arrowpoint + ((1,0) rotated (arrowdir-150) scaled arrowlength) + ; + enddef; + +beginchar("s",wd#,ht#,dp#); "Slip one left"; + pickup symbol_pen; + y1 = y2 = (h-d)/2-offset; + 0.5[x1,x2]=w/2; + rt x2 - lft x1 = ht+dp-2*smallgap; + symbolpath0 := z1--z2; + definearrow(symbolpath0)((x2-x1)/3)(symbolpath1); + draw symbolpath0; + draw symbolpath1; + symbolpic0 := currentpicture; + charbox; endchar; + +beginchar("S",wd#,ht#,dp#); "Slip one right"; + fliphoriz(symbolpic0)(currentpicture); + charbox; endchar; + +beginchar("[",wd#,ht#,dp#); "Slip one left knitwise"; + pickup symbol_pen; + pickup symbol_pen; + y1 = y2 = (h-d)/2-offset; + 0.5[x1,x2]=w/2; + rt x2 - lft x1 = ht+dp-2*0.3[smallgap,mingap]; + symbolpath0 := z1--z2; + definearrow(symbolpath0)((x2-x1)/3)(symbolpath1); + draw symbolpath0; + draw symbolpath1; + 0.5[y3,y4] = y1; + 0.5[x3,x4] = 0.5[lft x1, lft xpart point 0 of symbolpath1]; + z4 = z3+whatever*(1,2); + y4-y3 = 1.5 ypart (point 2 of symbolpath1 - point 0 of symbolpath1); + draw z3--z4; + labels(1,2,3,4); + symbolpic0 := currentpicture; + charbox; endchar; + +beginchar("]",wd#,ht#,dp#); "Slip one right knitwise"; + fliphoriz(symbolpic0)(currentpicture); + flipvert(currentpicture)(currentpicture); + charbox; endchar; + + +beginchar("h",wd#,ht#,dp#); "Drop stitch"; + pickup symbol_pen; + y1 = bot h-small_topgap; + y2 = top -d+small_bottomgap; + x1 = x2 =w/2; + symbolpath0 := z1--z2; + definearrow(symbolpath0)((y1-y2)/3)(symbolpath1); + draw symbolpath0; + draw symbolpath1; + symbolpic0 := currentpicture; + charbox; endchar; + +beginchar("H",wd#,ht#,dp#); "Up arrow"; + flipvert(symbolpic0)(currentpicture); + charbox; endchar; + +beginchar("O",wd#,ht#,dp#); "Yarn over"; + pickup symbol_pen; + top z1 = (0.5w, h-topgap+o); + bot z3 = (0.5w, bottomgap-d-o); + x2-x4 = y1-y3; 0.5[x2,x4]=0.5w; + y2 = y4 = 0.5[y1,y3]; + penpos1(symbolwidth,90); + penpos2(symbolwidth,0); + penpos3(symbolwidth,270); + penpos4(symbolwidth,180); + penstroke z1e..z2e..z3e..z4e..cycle; + charbox; endchar; + +beginchar("@",wd#,ht#,dp#); "Bead"; + pickup symbol_pen; + z1 = (0.5w, 0.667h); + z3 = (x1,-d+h-y1); + x2-x4 = y1-y3; 0.5[x2,x4]=0.5w; + y2 = y4 = 0.5[y1,y3]; + fill z1..z2..z3..z4..cycle; + unfill fullcircle scaled 0.3333(y1-y3) shifted 0.5[z1,z3]; + charbox; endchar; + +beginchar(ditto,wd#,ht#,dp#); "Wrap and turn"; + if fonttype <> purltype: + pickup symbol_pen; + z0 = 0.4[z1,z3] = 0.5[z2,z4]; + x3=x1=w/2; y2=y4; y3-y1=x4-x2; + + z5 = z3 + 1.5((x4-x2)/2,0); + z6 = z5 + ((x4-x2)/2,0) rotated 150; + z7 = z5 + ((x4-x2)/2,0) rotated -150; + + y6 = h-wrapturngap; + y1 = -d+wrapturngap; + + top (1-2spiralgap)[z0,z3]+(whatever,symbolwidth) = bot z7; + + symbolpath0 := + (1-2spiralgap)[z0,z2] + ..(1-2spiralgap)[z0,z3] + ..(1-spiralgap)[z0,z4] + ..z1 + ..z2 + ..z3{right}--z5; + definearrow(symbolpath0)((x4-x2)/2)(symbolpath1); + draw symbolpath0; + draw symbolpath1; + fi + symbolpic0 := currentpicture; +endchar; +beginchar(19,wd#,ht#,dp#); "Reverse wrap and turn"; + fliphoriz(symbolpic0)(currentpicture); + endchar; + +ligtable +ditto: + ditto =: 19; +ligtable +"-": +"=": + ditto |=: 19; + + +def drawM(expr topheight, bottomheight, mwidth, penwidth) = + pickup pensquare scaled penwidth; + rt x3 - lft x1 = 1.43 (y7-y1) = mwidth; + y1 = y2 = y3; + bot y7 = y8 = y9; + topheight - y7 = y1-bottomheight; + y4 = y10; y5 = y6; + y8 - y5 = 0.4(x2 - x1); + y8 - y4 = 1.6(y8 - y5); + x1 = x7; x5 = x2; x6 = x3; + x4 - x1 = x10 - x2 = 0.3penwidth; + x8 = 0.6[x1,x2]; x9 - x2 = x8 - x1; + x3 - x2 = x2 - x1; + x1 = w - x3; + penpos1 (penwidth, 0); + penpos7 (penwidth, 0); + penpos5 (penwidth, 0); + penpos6 (penwidth, 0); + penpos2 (penwidth, 0); + penpos3 (penwidth, 0); + penpos4 (penwidth-2(x4-x1), 180); + penpos10 (penwidth-2(x4-x1), 180); + penpos8 (penwidth, 90); + penpos9 (penwidth, 90); + %draw z4{up}..z8{right}..z5{down}; draw z10{up}..z9{right}..z6{down}; + penstroke z1e--z7e; + penstroke z4e{up}..z8e..z5e{down}--z2e; penstroke z10e{up}..z9e..z6e{down}--z3e; + labels(1,2,3,4,5,6,7,8,9,10,4l,4r); +enddef; + +def drawstar(expr topheight, bottomheight) = + top z1 = (w/2,topheight+o); + bot z2 = (w/2, bottomheight-o); + z3 - z4 = (z1-z2) rotated 60; + z5 - z6 = (z1-z2) rotated 120; + 0.5[z3,z4] = 0.5 [z5,z6] = 0.5[z1,z2]; + draw z1--z2; draw z3--z4; draw z5--z6; +enddef; + +beginchar("*",wd#,ht#,dp#); "Special instructions"; pickup symbol_pen; drawstar(h-topgap,-d+bottomgap); charbox; endchar; + +%beginchar("a",wd#,ht#,dp#); "Small bobble"; +% pickup symbol_pen; +% top z1 = (0.5w, h-small_topgap+o); +% bot z3 = (0.5w, small_bottomgap-d-o); +% x2-x4 = y1-y3; 0.5[x2,x4]=0.5w; +% y2 = y4 = 0.5[y1,y3]; +% pickup pensquare scaled symbolwidth rotated 45; +% draw z1--z2; draw z2--z3; draw z3--z4; draw z4--z1; +% drawdot 0.5[z1,z3]; +%charbox; endchar; +beginchar(0,wd#,ht#,dp#); "Large bobble"; + pickup symbol_pen; + top z0 = (w/2, h-min_topgap) if offset=0: + (0,o) fi; + bot z2 = (w/2, -d+min_bottomgap) if offset=0: - (0,o) fi; + 0.5[z1,z3] = 0.5[z0,z2]; + z1-z3 = (z2-z0) rotated 90; + draw z0..z1..z2..z3..cycle; +charbox; endchar; + + +def drawhat(expr linewd) = + pickup symbol_pen; + top z1 = (w/2, h-min_topgap+o); + x3-x1 = x1-x2; y3=y2; + x3-x2 = standardheight; + y1-y3 = (x1-x2); + z3l = z3 + ((linewd/2,0) rotated (angle (z1-z3)-90)); + z3m = z3 + ((linewd/2,0) rotated (angle (z3-z1))); + 0.5[z3l,z3r] = z3; + z2l = z2 + ((linewd/2,0) rotated (angle (z2-z1)-90)); + z2m = z2 + ((linewd/2,0) rotated (angle (z2-z1))); + 0.5[z2l,z2r] = z2; + z1r = z3r + whatever*(z1-z3); + z1r = z2r + whatever*(z2-z1); + z1l3-z1 = z3l-z3; + z1l2-z1 = z2l-z2; + fill z3l---z1l3..z1l2---z2l..z2m..z2r---z1r---z3r..z3m..cycle; +enddef; + + + +beginchar(1,wd#,ht#,dp#); "Make 1 from N"; + % Fontforge keeps mangling this symbol, so I'm doing it the slow, hard, but reliable way. + drawhat(symbolwidth); + symbolpic0 := currentpicture; + charbox; endchar; +beginchar(2,wd#,ht#,dp#); "Purl make 1 from N"; + drawhat(purl_symbolwidth); + symbolpic1 := currentpicture; + purlbox; endchar; +beginchar(3,wd#,ht#,dp#); "Make N from 1"; + flipvert(symbolpic0)(currentpicture); + charbox; endchar; +beginchar(4,wd#,ht#,dp#); "Purl make N from 1"; + flipvert(symbolpic1)(currentpicture); + purlbox; endchar; + +beginchar("U",wd#,ht#,dp#); "Cast on"; + if fonttype <> purltype: + pickup symbol_pen; + bot y1 = bot y3 = -d+bottomgap; + x1 = 0; x3 = w; x2 = w/2; top y2 = h-topgap; + draw z1{right}..z2{left}..z3{right}; + fi + endchar; +beginchar("f",wd#,ht#,dp#); "Bind off knitwise"; + if fonttype <> purltype: + pickup symbol_pen; + x1 = 0; x3 = w; x2 = w/2; + y1 = y3 = (h-d)/2; top y2 = h-topgap; + bot z4 = (w/2, -d+bottomgap); + draw z1..z2{right}..z3; + %draw z4--bot z1; + fi + endchar; +beginchar("F",wd#,ht#,dp#); "Bind off purlwise"; + if fonttype <> purltype: + pickup symbol_pen; + x1 = 0; x3 = w; x2 = w/2; + y1 = y3 = (h-d)/2; top y2 = h-topgap; + draw z1..z2{right}..z3; + fi + purlfill; endchar; +beginchar("Z",wd#,ht#,dp#); "Knit one doubly elongated"; + pickup symbol_pen; +% drawstar(h-topgap,-d+bottomgap); + 0.5[z1,z7] = top (w/2, -d+min_bottomgap); + y1 = y7; + x7 - x1 = 0.8(x8 - x0); + 0.5[x0,x8] = w/2; + y0 = y8 = 0.5[y1,y2]; + x8 - x0 = y2 - y1; + 0.5[z2,z6] = bot (w/2, h-min_topgap); + y2 = y6; + x6 - x2 = 0.7(x7-x1); + 0.5[x3,x5] = w/2; + y3 = y5 = 0.2[y1,y2]; + x5 - x3 = 0.5(x7-x1); + + x4 = w/2; y4 = y2; + + endangle := 110; + midtension := 2; + sidetension := 2; + + draw + z1{dir endangle} + ..z0{up} + ..z2{right} + ..tension sidetension + ..z3{left} + ..tension midtension + ..z4{right} + ..tension midtension + ..z5{left} + ..tension sidetension + ..z6{right} + ..z8{down} + ..z7{dir(-endangle)}; + + charbox; endchar; + +beginchar("z",wd#,ht#,dp#); "Knit one elongated"; + pickup symbol_pen; + 0.5[z1,z5] = top (w/2, -d+small_bottomgap); + y1 = y5; + x5 - x1 = 0.8(x6-x0); + 0.5[x0,x6] = w/2; + y0 = y6 = 0.5[y1,y2]; + x6 - x0 = y2 - y1; + 0.5[z2,z4] = bot (w/2, h-small_topgap); + y2 = y4; + x4 - x2 = 0.6(x5-x1); + x3 = w/2; y3 = 0.2[y1,y2]; + + endangle := 110; + midtension := 1.5; + + draw + z1{dir endangle}..z0{up}..z2{right}..tension midtension..z3{left} + ..tension midtension..z4{right}..z6{down}..z5{dir(-endangle)}; + + charbox; endchar; + +beginchar(25,wd#/2,ht#,dp#); "Left end of a wide increase"; + if fonttype <> purltype: + pickup pensquare xscaled wideinctip yscaled wideincline; + z1 = (w+cableextend,(h-topgap-d+bottomgap)/2); + x2 = w/3; top y2 = h-min_topgap+o; + fill bot lft z2{down}..bot z1{right}--top z1{left}..top rt z2{up}--top lft z2---cycle; + if gridfont: + if fonttype = gridtype: currentpicture := nullpicture; fi + if (fonttype = gridtype) or (fonttype = bothtype): + pickup pensquare scaled gridwidth; + draw lft (w,h)--(0,h); + draw (0,h)--(0,-d); + draw (0,-d)--lft (w,-d); + fi fi fi + symbolpic0 := currentpicture; + endchar; +beginchar(22,wd#/2,ht#,dp#); "Extender for a wide increase/decrease"; + if fonttype <> purltype: + z1 = (w+cableextend,(h-topgap-d+bottomgap)/2); + x2 = 0-cableextend; y2 = y1; + pickup pensquare scaled wideincline; + draw rt z2 -- lft z1; + if gridfont: + if fonttype = gridtype: currentpicture := nullpicture; fi + if (fonttype = gridtype) or (fonttype = bothtype): + pickup pensquare scaled gridwidth; + draw lft (w,h) -- rt (0,h); draw rt (0,-d) -- lft (w,-d); + fi fi fi + endchar; +beginchar(26,wd#/2,ht#,dp#); "Right end of a wide increase"; + fliphoriz(symbolpic0)(currentpicture); endchar; +beginchar(27,wd#/2,ht#,dp#); "Left end of a wide decrease"; + flipvert(symbolpic0)(currentpicture); endchar; +beginchar(28,wd#/2,ht#,dp#); "Right end of a wide decrease"; + fliphoriz(symbolpic0)(currentpicture); flipvert(currentpicture)(currentpicture);endchar; + +beginchar(29,wd#,ht#,dp#); "Middle of a wide increase"; + if fonttype <> purltype: + pickup pensquare xscaled wideinctip yscaled wideincline; + z1 = (-cableextend,(h-topgap-d+bottomgap)/2); + z3 = (w+cableextend,(h-topgap-d+bottomgap)/2); + x2 = w/2; bot y2 = -d+min_bottomgap-o; + %draw z1{right}..z2{down}; + fill bot lft z2{up}..bot z1{left}--top z1{right}..top rt z2---bot rt z2--cycle; + %draw z3{left}..z2{down}; + fill bot rt z2{up}..bot z3{right}--top z3{left}..top lft z2---bot lft z2--cycle; + if gridfont: + if fonttype = gridtype: currentpicture := nullpicture; fi + if (fonttype = gridtype) or (fonttype = bothtype): + pickup pensquare scaled gridwidth; + draw lft (w,h) -- rt (0,h); draw rt (0,-d) -- lft (w,-d); + fi fi fi + symbolpic0 := currentpicture; + endchar; +beginchar(30,wd#,ht#,dp#); "Middle of a wide decrease"; + flipvert(symbolpic0)(currentpicture); + endchar; + +if 5*wd# < symbolmaxwd#: + +beginchar(31,5wd#,ht#,dp#); "Make 1 from 5"; + pickup pensquare xscaled wideinctip yscaled wideincline; + top z1 = (w/2,h-min_topgap+o); + x2 = wd/3; bot y2 = bot y3 = -d+min_bottomgap-o; + x3 - x1 = x1 - x2; + z4 = 0.5[z1,z2]; z5 = 0.5[z1,z3]; + %draw z2{up}..z4{right}..z1{up}; + %draw z3{up}..z5{left}..z1{up}; + + fill bot lft z2---top lft z2..top z4{right}..top lft z1{up}--top rt z1---bot rt z1..bot z4{left }..bot rt z2{down}--cycle; + fill bot rt z3---top rt z3..top z5{left }..top rt z1{up}--top lft z1---bot lft z1..bot z5{right}..bot lft z3{down}--cycle; + + charbox; + endchar; +fi + +beginchar("~",wd#,ht#,dp#); "Empty box (spacer)"; endchar; +beginchar("`",0.5wd#,ht#,dp#); "Empty box (spacer)"; endchar; +beginchar("'",0.5wd#,ht#,dp#); "Empty box (spacer)"; + if fonttype = purltype: fill (0,-d)--(w,-d)--(w,h)--(0,h)--cycle; fi + endchar; + + +beginchar("m",wd#,ht#,dp#); "Make one"; + pickup symbol_pen; + drawM(h-topgap, -d+bottomgap, 0.5(h+d),symbolwidth); + charbox; endchar; +beginchar("M",wd#,ht#,dp#); "Make one purlwise"; + pickup purl_symbol_pen; + drawM(h-topgap, -d+bottomgap, 0.5(h+d),purl_symbolwidth); + purlbox; endchar; + +%def drawB(expr topgap, bottomgap, symbolwidth) = +% x1 = x2 = x3; x4 = x5 = x6; x7=x8 + 0.05(x7-x1); +% y1 = y4; y2 = y5; y3 = y6; y7 = 0.5[y1,y2]; y8 = 0.5[y2,y3]; +% top y3 = h-topgap; bot y1 = -d+bottomgap; +% y2 = 0.51[y1,y3]; +% x7-x1 = 1.3(y2-y1); +% x7-x6 = 0.7(x7-x1); +% 0.5[x7,x1]=w/2+ho; +% z9=z10=z5; z11=rt z2; +% +% penpos11(symbolwidth,-90); +% penpos5(symbolwidth,-90); +% penpos8(symbolwidth,0); +% penpos6(symbolwidth,90); +% penpos2(symbolwidth,180); +% penpos4(symbolwidth,-90); +% penpos7(symbolwidth,0); +% z10l=z5l; z9l=z5r; z10r = 0.4[z5,z5r]; +% z9r-z9l=z10l-z10r; +% y3r=y6r; y3l=y6l; x3r=x2r=x1r; x3l=x2l=x1l; +% y1r=y4r; y1l=y4l; +% penstroke z11e--z5e--z10e{right}..z8e..z6e---z3e--z2e--z1e---z4e..z7e..z9e{left}; +% +%enddef; +% +% +%beginchar("b",wd#,ht#,dp#); "Knit tbl"; +% pickup symbol_pen; +% drawB(topgap, bottomgap, symbolwidth); +% charbox; endchar; +%beginchar("B",wd#,ht#,dp#); "Purl tbl"; +% pickup purl_symbol_pen; +% drawB(topgap, bottomgap, purl_symbolwidth); +% purlbox; endchar; + +beginchar("|",overlinewd#,ht#,dp#); "Divider"; + if fonttype <> purltype: + fill(0,-d-gridwidth/2-purlextend)--(0,h+gridwidth/2+purlextend) + --(w,h+gridwidth/2+purlextend)--(w,-d-gridwidth/2-purlextend) + --cycle; + if gridfont: if fonttype = gridtype: currentpicture := nullpicture; fi fi + fi +endchar; + +%Twists + +path twistpath[]; + + pair time; + +beginchar("x",wd#,ht#,dp#); "Twist slanting right"; + pickup symbol_pen; + bot lft z0 = (0.5w-0.4 standardheight-ho,-d+small_bottomgap-o); + bot rt z4 = (0.5w+0.4 standardheight+ho,-d+small_bottomgap-o); + top z2 = (0.5w, h-topgap+o); + x3-x1 = 0.8(x0-x4); 0.5[x1,x3] = w/2; + y1 = y3 = 0.7[y0,y2]; + twistpath0:=z0{curl 0.1}..z1{up}..z2..z3{down}..z4{curl 0.1}; + + pathdir0 = angle (direction 0 of twistpath0); + pathdir4 = angle (direction 4 of twistpath0); + + penpos0(symbolwidth, (pathdir0 + 90)); + penpos1(symbolwidth, 180); + penpos2(symbolwidth, 270); + penpos3(symbolwidth, 360); + penpos4(symbolwidth, (pathdir4 + 90)); + + z5 = z0; z6 = z1; + penpos5(eraserwidth, (pathdir0 + 90)); + penpos6(eraserwidth, 180); + + time := (z5l{direction 0 of twistpath0}..z6l{up}) intersectiontimes + (z3l{down}..z4l{direction 4 of twistpath0}); + twistpath1 := subpath (ypart(time),1) of (z3l{down}..z4l{direction 4 of twistpath0}); + time := (z5l{direction 0 of twistpath0}..z6l{up}) intersectiontimes + (z3r{down}..z4r{direction 4 of twistpath0}); + twistpath2 := subpath (ypart(time),1) of (z3r{down}..z4r{direction 4 of twistpath0}); + fill twistpath1 & (point infinity of twistpath1--point infinity of twistpath2) + & reverse twistpath 2 & + (point 0 of twistpath2--point 0 of twistpath1) & cycle; + + time := (z5r{direction 0 of twistpath0}..z6r{up}) intersectiontimes + (z3l{down}..z4l{direction 4 of twistpath0}); + twistpath1 := subpath (0,ypart(time)) of (z3l{down}..z4l{direction 4 of twistpath0}); + time := (z5r{direction 0 of twistpath0}..z6r{up}) intersectiontimes + (z3r{down}..z4r{direction 4 of twistpath0}); + twistpath2:= subpath (0,ypart(time)) of (z3r{down}..z4r{direction 4 of twistpath0}); + fill twistpath1 & (point infinity of twistpath1--point infinity of twistpath2) + & reverse twistpath 2 & + (point 0 of twistpath2--point 0 of twistpath1) & cycle; + + penstroke z0e{direction 0 of twistpath0}.. + z1e{up}..z2e{left}..z3e{down} + ;%..z4e{direction 4 of twistpath0}; + + symbolpic0 := currentpicture; + labels(0,1,2,3,4,5); + charbox; endchar; + + numeric t[]; + +beginchar("t",wd#,ht#,dp#); "Twist slanting left"; + fliphoriz(symbolpic0)(currentpicture); + charbox; endchar; + +beginchar("X",wd#,ht#,dp#); "Purl right twist"; + currentpicture := symbolpic0; + purlbox; endchar; +beginchar("T",wd#,ht#,dp#); "Purl left twist"; + fliphoriz(symbolpic0)(currentpicture); + purlbox; endchar; + +beginchar("b",wd#,ht#,dp#); "Right upside-down twist"; + flipvert(symbolpic0)(currentpicture); + symbolpic0 := currentpicture; + charbox; endchar; +beginchar("q",wd#,ht#,dp#); "Left upside-down twist"; + fliphoriz(symbolpic0)(currentpicture); + symbolpic0 := currentpicture; + charbox; endchar; +beginchar("Q",wd#,ht#,dp#); "Purl right upside-down twist"; + currentpicture := symbolpic0; + purlbox; endchar; +beginchar("B",wd#,ht#,dp#); "Purl left upside-down twist"; + fliphoriz(symbolpic0)(currentpicture); + purlbox; endchar; + +%2/1 increases and decreases + +def drawSSK(expr topheight,bottom) = + bot rt z1 = (0.5w+0.5 (topheight-bottom)+ho,bottom-o); + top lft z2 = (0.5w-0.5 (topheight-bottom), topheight+o); + bot lft z3 = (0.5w-0.5 (topheight-bottom), bottom-o); + symbolpath0 := z1--z2--z3; + draw symbolpath0; +enddef; + +beginchar("<",decrwidth(2),ht#,dp#); "SSK or left-slant cable"; + pickup symbol_pen; + drawSSK(h-topgap,-d+bottomgap); + symbolpic0 := currentpicture; + charbox; endchar; +beginchar(">",decrwidth(2),ht#,dp#); "k2tog or right-slant cable"; + fliphoriz(symbolpic0)(currentpicture); + charbox; endchar; +beginchar(";",decrwidth(2),ht#,dp#); "P2tog"; + pickup purl_symbol_pen; + draw symbolpath0; + symbolpic0 := currentpicture; + purlbox; endchar; +beginchar(":",decrwidth(2),ht#,dp#); "SSP"; + fliphoriz(symbolpic0)(currentpicture); + purlbox; endchar; + +beginchar("j",incrwidth(1),ht#,dp#); "Lifted increase slanting left"; + pickup symbol_pen; + top lft z1 = (0.5w-0.5 standardheight-ho,h-topgap+o); + bot rt z2 = (0.5w+0.5 standardheight, -d+bottomgap-o); + symbolpath0 := z2--z1; + definearrow(symbolpath0)((y1-y2)/3)(symbolpath1); + draw symbolpath0; + draw symbolpath1; + symbolpic0 := currentpicture; + charbox; endchar; +beginchar("i",incrwidth(1),ht#,dp#); "Lifted increase slanting right"; + fliphoriz(symbolpic0)(currentpicture); + charbox; endchar; +beginchar("J",incrwidth(1),ht#,dp#); "Purl increase slanting right"; + pickup purl_symbol_pen; + draw symbolpath0; + draw symbolpath1; + symbolpic0 := currentpicture; + purlbox; endchar; +beginchar("I",incrwidth(1),ht#,dp#); "Purl increase slanting left"; + fliphoriz(symbolpic0)(currentpicture); + purlbox; endchar; + +beginchar("(",wd#,ht#,dp#); "Left-slanting line"; + pickup symbol_pen; + draw symbolpath0; + charbox; endchar; +beginchar(")",wd#,ht#,dp#); "Right-slanting line"; + pickup symbol_pen; + draw symbolpath0; + fliphoriz(currentpicture)(currentpicture); + charbox; endchar; + +beginchar("y",incrwidth(2),ht#,dp#); "Knit front and back"; + pickup symbol_pen; + bot lft z1 = (0.5w-0.495 Vwidth-ho,-d+bottomgap-o); + top rt z2 = (0.5w+0.495 Vwidth+ho,h-topgap+o); + bot rt z3 = (0.5w+0.495 Vwidth+ho,-d+bottomgap-o); + top lft z4 = (0.5w-0.495 Vwidth-ho,h-topgap+o); + % For some reason, mf2pt1 doesn't like it if I use 0.5 Vwidth + z5 = whatever[z1,z2] = whatever[z3,z4]; + draw z1--z2; + draw z4--z5; + symbolpic0 := currentpicture; + charbox; endchar; +beginchar("u",incrwidth(2),ht#,dp#); "Knit back and front"; + fliphoriz(symbolpic0)(currentpicture); + charbox; endchar; + +beginchar("4",incrwidth(2),ht#,dp#); "Alternative SSK"; + flipvert(symbolpic0)(currentpicture); + charbox; endchar; +beginchar("5",incrwidth(2),ht#,dp#); "Alternative K2tog"; + flipvert(symbolpic0)(currentpicture); + fliphoriz(currentpicture)(currentpicture); + charbox; endchar; + + +beginchar("v",incrwidth(2),ht#,dp#); "Generic make 2 from 1"; + pickup symbol_pen; + top rt z1 = (0.5w+0.5 Vwidth+ho,h-topgap+o); + bot y2 = -d+bottomgap-o; x2 = 0.5[x1,x3]; + top lft z3 = (0.5w-0.5 Vwidth-ho,h-topgap+o); + symbolpath0 := z1--z2--z3; + draw symbolpath0; + symbolpic0 := currentpicture; + charbox; endchar; +beginchar("V",incrwidth(2),ht#,dp#); "Purl make 2 from 1"; + pickup purl_symbol_pen; + draw symbolpath0; + symbolpic1 := currentpicture; + purlbox; endchar; + +beginchar("!",incrwidth(2),ht#,dp#); "Make 1 from 2"; + flipvert(symbolpic0)(currentpicture); + charbox; endchar; +beginchar("2",incrwidth(2),ht#,dp#); "Make 1 from 2 purlwise"; + flipvert(symbolpic1)(currentpicture); + purlbox; endchar; + +%Double decreases and increases + +beginchar("w",incrwidth(3),ht#,dp#); "make 3 from 1"; + pickup symbol_pen; + top lft z1 = (0.5w-0.5 Wwidth-ho,h-small_topgap+o); + bot z2 = (0.5w,-d+small_bottomgap-o); + top rt z3 = (0.5w+0.5 Wwidth+ho, h-small_topgap+o); + z4 = 0.5[z1,z3]; + symbolpath0 := z1--z2--z3; + draw symbolpath0; + symbolpath1 := z2--z4; + draw symbolpath1; + charbox; endchar; +beginchar("W",incrwidth(3),ht#,dp#); "Purl make 3 from 1"; + pickup purl_symbol_pen; + draw symbolpath0; draw symbolpath1; + symbolpic0 := currentpicture; + purlbox; endchar; +beginchar("Y",incrwidth(3),ht#,dp#); "Make 3 from 1 with YO center"; + pickup symbol_pen; + draw symbolpath0; + top z4 = (0.5w, h-small_topgap+o); + bot z5 = z4 - (0, 0.5Wwidth); %Better way? + z6-z7 = (z4-z5) rotated 90; 0.5[z6,z7]=0.5[z4,z5]; + draw z4..z6..z5..z7..cycle; + charbox; endchar; + +beginchar("E",incrwidth(3),ht#,dp#); "make 3 from 1 with purl center"; + pickup symbol_pen; + if fonttype <> purltype: + currentpicture := symbolpic0; + else: + z1 = point 0 of symbolpath0; + z2 = point 1 of symbolpath0; + z3 = point 2 of symbolpath0; + fill z1--z2--z3--cycle; + fi + endchar; + +beginchar("A",decrwidth(3),ht#,dp#); "Make 1 from 3"; + pickup symbol_pen; + bot lft z1 = (0.5w-0.5 biggerheight-ho,-d+small_bottomgap-o); + top z2 = (0.5w, h-small_topgap+o); + bot rt z3 = (0.5w+0.5 biggerheight, -d+small_bottomgap-o); + z4 = 0.5[z1,z3]; + symbolpath0 := z1--z2--z3; + symbolpath1 := z2--z4; + draw symbolpath0; + draw symbolpath1; + charbox; endchar; +beginchar("3",decrwidth(3),ht#,dp#); "Purl make 1 from 3"; + pickup purl_symbol_pen; + draw symbolpath0; + draw symbolpath1; + purlbox; endchar; + +beginchar("R",decrwidth(3),ht#,dp#); "k3tog"; + pickup symbol_pen; + bot lft z1 = (0.5w-0.5 biggerheight-ho,-d+small_bottomgap-o); + top rt z2 = (0.5w+0.5 biggerheight, h-small_topgap+o); + bot rt z3 = (0.5w+0.5 biggerheight, -d+small_bottomgap-o); + z4 = 0.5[z1,z3]; + draw z1--z2--z3; + draw z4--0.5[z4,z2]; + symbolpic0 := currentpicture; + charbox; endchar; +beginchar("L",decrwidth(3),ht#,dp#); "SSSK"; + fliphoriz(symbolpic0)(currentpicture); + charbox; endchar; + +beginchar("r",decrwidth(3),ht#,dp#); "LRC"; + pickup symbol_pen; + bot lft z1 = (0.5w-0.5 biggerheight-ho,-d+small_bottomgap-o); + top rt z2 = (0.5w+0.5 biggerheight+ho,h-small_topgap+o); + bot rt z3 = (0.5w+0.5 biggerheight+ho,-d+small_bottomgap-o); + top lft z4 = (0.5w-0.5 biggerheight-ho,h-small_topgap+o); + z5 = alpha[z1,z2]; z5 = beta[z3,z4]; + x6=x5; y6=y1; + draw z1--z2; + draw z3--z5; + draw z5--z6; + symbolpic0 := currentpicture; + charbox; endchar; +beginchar("l",decrwidth(3),ht#,dp#); "RLC"; + fliphoriz(symbolpic0)(currentpicture); + charbox; endchar; + +beginchar("a",decrwidth(3),ht#,dp#); "LRC"; + pickup symbol_pen; + bot lft z1 = (0.5w-0.5 biggerheight-ho,-d+small_bottomgap-o); + top rt z2 = (0.5w+0.5 biggerheight+ho,h-small_topgap+o); + bot rt z3 = (0.5w+0.5 biggerheight+ho,-d+small_bottomgap-o); + top lft z4 = (0.5w-0.5 biggerheight-ho,h-small_topgap+o); + x5 = 0.5w; y5 = 0.6[y1,y4]; + top z6 = (0.5w, h-small_topgap+o); + bot z7 = (0.5w, -d+small_bottomgap-o); + draw z1--z5; + draw z3--z5; + draw z6--z7; + charbox; endchar; + +beginchar("?",wd#,ht#,dp#); "Left end of wrapped stitches"; + pickup symbol_pen; + x0r = x1r = x2r = w; + y0r-y1r = y1r-y2r; + y0m=y0r; y1m=y1r; y2m=y2r; + y0l-y0r = y1l-y1r = y2l-y2r; + + if gridfont: + h-small_topgap+o = top y0l; + bot y2r = small_bottomgap-d; + y1l = 2/3[y1r,y0r]; + x2l+ho = h-y0l+o; + x0m = 0.4[x0l,x0r]; + x2m = 0.5[x2l,x2r]; + z0l = z2l + whatever*(1,3); + wraplines := 3; + else: + h-small_topgap-top y0r = bot y2r-small_bottomgap+d; + if (topgap>standardgap) or (bottomgap>standardgap): + wraplines := 2; else: wraplines:=3; fi + if wraplines = 2: + y0r - y2r = 1.5(h-small_topgap-top y0r); + lft x2l+ho = smallgap; + else: + y0r - y1r = 1.5(h-small_topgap-top y0r); + lft x2l+ho = mingap; + fi + x0m = 0.2[x0l,x0r]; + x2m = 0.3[x2l,x2r]; + y0l = 0.6[y0r,h-small_topgap+o]; + z0l = z2l + whatever*(1,4); + fi + + z1l=whatever[z0l,z2l]; + z1m=whatever[z0m,z2m]; + pickup pensquare scaled symbolwidth; + draw lft z0r--rt (0,y0r); + if wraplines=3: draw lft z1r--rt (0,y1r); fi + draw lft z2r--rt (0,y2r); + symbolpic1 := currentpicture; + currentpicture := nullpicture; + draw lft z0r---rt z0m; + if wraplines=3: draw lft z1r---rt z1m; fi + draw lft z2r---rt z2m; + pickup symbol_pen; + draw z0m{left}..z0l; + if wraplines=3: draw z1m{left}..z1l; fi + draw z2m{left}..z2l; + + if gridfont: else: + draw bot (w/2,h-small_topgap+o) -- top (w/2, -d+small_bottomgap-o); + fi + + symbolpic0 := currentpicture; + labels(0r,0m,0l,1r,1m,1l,2r,2m,2l); + charbox; endchar; + +beginchar(23,wd#,ht#,dp#); "Middle of wrapped stitches"; + pickup symbol_pen; + currentpicture := symbolpic1; + if gridfont: else: + draw bot (w/2,h-small_topgap+o) -- top (w/2, -d+small_bottomgap-o); + fi + charbox; endchar; +beginchar(24,wd#,ht#,dp#); "Right end of wrapped stitches"; + fliphoriz(symbolpic0)(currentpicture); + charbox; endchar; + +ligtable "?": + "?" |=: 24; +ligtable 24: + "?" |=: 24, + 24 =:| 23; + +beginchar("1",wd#,ht#,dp#); "Left end of single-wrapped stitches"; + pickup symbol_pen; + x1r=w; + y1m=y1r; + + if gridfont: + if wd>ht+dp: + y1l-y1r = (h+d)/3; + else: + y1l-y1r = (h+d)/4; + fi + else: + y1l-y1r = (h+d)/5; + fi + x1m = 0.1[x1r,x1l]; + h-topgap+o-y1l = 1/2(y1r+d-bottomgap); + rt x1l+ho = standardgap; + wraplines := 1; + if y1r<bottomgap-d: message("Your single-wrapped stitch symbol is too tall."); fi + + pickup pensquare scaled symbolwidth; + draw lft z1r--rt (0,y1r); + symbolpic1 := currentpicture; + currentpicture := nullpicture; + draw lft z1r---rt z1m; + pickup symbol_pen; + draw z1m{left}..z1l; + + if gridfont: else: + draw bot (w/2,h-topgap+o) -- top (w/2, -d+bottomgap-o); + fi + + symbolpic0 := currentpicture; + labels(1r,1m,1l); + charbox; endchar; + +beginchar(17,wd#,ht#,dp#); "Middle of wrapped stitches"; + pickup symbol_pen; + currentpicture := symbolpic1; + if gridfont: else: + draw bot (w/2,h-small_topgap+o) -- top (w/2, -d+small_bottomgap-o); + fi + charbox; endchar; +beginchar(18,wd#,ht#,dp#); "Right end of wrapped stitches"; + fliphoriz(symbolpic0)(currentpicture); + charbox; endchar; + +ligtable "1": + "1" |=: 18; +ligtable 18: + "1" |=: 18, + 18 =:| 17; + |