% fgebase.mf : Supplemental defintions for fge % J.J. Green 2005-2006 % \$Id: fgebase.mf,v 1.7 2007/01/24 00:03:04 jjg Exp \$ fgebase := 1; % vertical versions of knuth's bulb, not sure why need quite % so many of these def vbulb(suffix \$,\$\$,\$\$\$) = z\$\$\$r = z\$\$r; path_.l := z\$l{0,y\$\$r-y\$r}...{x\$\$r-x\$r,0}z\$\$l; filldraw path_.l--z\$\$r{y\$r-y\$\$r,0}...{0,x\$r-x\$\$r}z\$r--cycle; % link path_.r := z\$\$\$l{x\$r-x\$\$r,0}..z\$\$\$r{x\$\$r-x\$r,0}; % near-circle filldraw path_.r--z\$\$l{x\$\$r-x\$r,0}..cycle; % bulb enddef; def dlbulb(suffix \$,\$\$,\$\$\$) = z\$\$\$r = z\$\$r; path_.l := z\$l{0,y\$\$r-y\$r}...{x\$\$r-x\$r,0}z\$\$l; filldraw path_.l--z\$\$r{y\$\$r-y\$r,0}...{0,x\$\$r-x\$r}z\$r--cycle; % link path_.r := z\$\$\$l{x\$\$r-x\$r,0}..z\$\$\$r{x\$r-x\$\$r,0}; % near-circle filldraw path_.r--z\$\$l{x\$r-x\$\$r,0}..cycle; % bulb enddef; def drbulb(suffix \$,\$\$,\$\$\$) = z\$\$\$r = z\$\$r; path_.l := z\$l{0,y\$\$r-y\$r}...{-x\$r+x\$\$r,0}z\$\$l; filldraw path_.l--z\$\$r{y\$r-y\$\$r,0}...{0,x\$r-x\$\$r}z\$r--cycle; % link path_.r := z\$\$\$l{x\$\$r-x\$r,0}..z\$\$\$r{x\$r-x\$\$r,0}; % near-circle filldraw path_.r--z\$\$l{x\$r-x\$\$r,0}..cycle; % bulb enddef; % vertical arm vardef varm(suffix \$,\$\$,@)(expr darkness,jut) = % arm from |z\$| to |z\$\$| y@0=good.y(y\$\$r-jut); x@0=x\$r; if serifs: x@1=x\$l; z@1=z\$\$l+whatever*(z\$\$r-z@0); z@2=.5[z\$l,z@1]; path p_; p_= z\$\$l{z@1-z\$\$l}...darkness[z@1,.5[z@2,z\$\$l] ]...z@2 ---z\$l--z\$r--z@0--z\$\$r--cycle; if (x\$\$>x\$) <> (xpart precontrol 1 of p_ > xpart postcontrol 1 of p_): p_:=z\$\$l{z@1-z\$\$l}...darkness[z@1,.5[z@2,z\$\$l] ] ---z\$l--z\$r--z@0--z\$\$r--cycle; fi filldraw p_; % arm and beak else: filldraw z\$l--z\$r--z@0--z\$\$r--cycle; fi % sans-serif arm penlabels(@0,@1,@2); enddef; % horizontal serifs for rotated characters: here interchange x & y, % so top is right, left is bot and so on vardef hserif(suffix \$,\$\$,@) % serif at |z\$| for stroke from |z\$\$| (expr darkness,jut) suffix modifier = pickup crisp.nib; numeric bracket_height; pair downward; bracket_height=if dark.modifier: 1.5 fi\\ bracket; if x\$x@2: x@2:=x@1; fi else: x@2 = max(x\$-bracket_height,x\$\$); lft x@1+slab = rt x@0-eps = tiny.rt x\$; downward = z\$\$-z\$; if x@1y@2-eps: y@3:=y@2-eps; fi fi pair corner; xpart corner=x@1; corner = z@2+whatever*downward; filldraw z@2{z\$-z\$\$}...darkness[corner,0.5[z@1,z@2]]{z@1-z@2} ...{0,jut}z@1--z@0--(x@0,y\$)--z@3--cycle; % the serif labels (@1,@2); enddef;