summaryrefslogtreecommitdiff
path: root/fonts/jknappen/fc/src/fcmacros.mf
diff options
context:
space:
mode:
Diffstat (limited to 'fonts/jknappen/fc/src/fcmacros.mf')
-rw-r--r--fonts/jknappen/fc/src/fcmacros.mf133
1 files changed, 133 insertions, 0 deletions
diff --git a/fonts/jknappen/fc/src/fcmacros.mf b/fonts/jknappen/fc/src/fcmacros.mf
new file mode 100644
index 0000000000..be0ebb2bac
--- /dev/null
+++ b/fonts/jknappen/fc/src/fcmacros.mf
@@ -0,0 +1,133 @@
+% This is FCMACROS.MF
+% Version 1.2
+% Date 6-OCT-1996
+%
+% (c) 1991--1996 J"org Knappen
+% This file is part of the fc-package
+% See fc.rme for more information
+%
+% J"org Knappen
+% Unternehmensberatung
+% Barbarossaring 43
+% D-55118 Mainz
+% Allemagne
+
+% knappen@vkpmzd.kph.uni-mainz.de
+
+% The following macros are defined:
+%
+% slantswitch, mirror, flip, V_bulb, d_hook_out, v_hook_in, top_hook,
+% left_hook, separator, universal.
+%
+% Higher version of this file might contain more macros.
+%
+
+
+def slantswitch = % macro from wncyr
+slant:=-slant;
+currenttransform:=identity slanted slant yscaled aspect_ratio
+ scaled granularity;
+enddef; %reverse slant so that mirror() will work
+
+
+def mirror (expr axis) = % macro from wncyr
+%x._qa=x._qb=axis; y._qa=h; y._qb=0; picture V; transform MIRROR;
+x._qa=x._qb=axis; y._qa=h; y._qb=-d; picture V; transform MIRROR;
+MIRROR=identity reflectedabout(z._qa,z._qb);
+V=currentpicture transformed MIRROR; currentpicture:=V;
+slantswitch;
+enddef;
+
+% flip rotates 180 degrees about the centerpoint whose suffix is passed
+def flip (suffix $) = % macro from wncyr
+picture V; transform FLIP;
+y$:=y$*aspect_ratio;
+FLIP=identity rotatedaround(z$,180) shifted(2slant*y$,0);
+V=currentpicture transformed FLIP; currentpicture:=V;
+enddef;
+
+def V_bulb(suffix $,$$)= % |pos$| is known % macro adapted from cm
+ y$$+.5cap_curve=cap_height+o; x$$+.5cap_curve=w-u;
+ numeric theta; theta=angle(4(x$-x$$),y$-y$$); pos$$(cap_curve,theta+90);
+ filldraw z$$l{dir theta}..tension atleast 1 and 1..{down}z$l
+ --z$r{up}...{-dir theta}z$$r..cycle; % bulb
+ enddef;
+
+def d_hook_out(suffix $,$$,$$$)suffix modifier= % jk, modified from cmbase
+% |y$| |x$| and |x$$$| (only) are known
+ pos$(stem,0); pos$$(vair,90);
+ x$$$:=hround(x$$$+.5hair-eps)-.5hair; pos$$$(hair,180);
+ bot y$$l=-d-oo; y$$$=y$+1/12d;
+ if skewed.modifier: x$$=x$+1.25u;
+ filldraw stroke z$e{-u,-x_height}...z$$e{right}...{up}z$$$e; % hook
+ else: x$$=x$+1.5u;
+ filldraw stroke z$e{down}...z$$e{right}
+ ...{x$$$-(x$+2.5u),x_height}z$$$e; fi enddef; % hook
+
+def v_hook_in(suffix $,$$,$$$)=% jk, based on cmbase hook_in
+% z1 and z2 are used. |x$| and |x$$$| are known
+ x$:=hround(x$-.5hair)+.5hair; pos$(hair,180);
+ pos$$(vair,90); % pos$$$() should be done outside the macro
+ y$=2/3x_height; top y$$r=x_height+oo; y$$$=3/4x_height;
+ x$$=x$$$-1.5u;
+ filldraw stroke z$e{x$$$-2.5u-x$,x_height}
+ ...z$$e{right}...{z2-z1}z$$$e;
+enddef; % hook
+
+def top_hook(suffix @,$,$$,$$$,$$$$)=% jk
+% intended for use within italics
+% x@ and rt x$$$$ are known
+x@'=x@; pos@'(stem,180); y@'=1/4[x_height,h];
+pickup fine.nib;
+pos$(stem,180);
+pos$$(vair,90); pos$$$(hair,0); pos$$$$(flare,0);
+x$=x@; y$=.8[y@',y$$]; x$$=.6[x$$$$,x$]; top y$$r=h+oo;
+y$$$=.85h;
+bulb($$,$$$,$$$$); % bulb
+filldraw stroke z$$e{left}...z$e...{down}z@'e; % join
+enddef;
+
+def left_hook(suffix $,@$,$$,$$$,@,@@)= % only z$ is known %by jk
+pickup tiny.nib;
+if not monospace:
+ if serifs:
+ pos@$(cap_band,90); pos$$(cap_band,90); pos$$$(cap_hair,180);
+ pos@(cap_band,270); pos@@(flare+(cap_stem-stem),270);
+ x$$=x$-2.5u; lft x$$$r=lft x$-5u; y$$$=.5[y@$,y@@];
+ x@$=x$; top y$$r= top y@$r=top y$; %<-- ge"andert
+ z@r=z@@r; bot y@r=y$-.4h; x@=x$$-.5u;
+ filldraw stroke z@$e--z$$e&super_arc.e($$,$$$); % link part 1
+ path_.l:=z$$$l{down}...{right}z@l;
+ filldraw path_.l--z@r{left}...{up}z$$$r--cycle; % link part 2
+ path_.r:=z@@l{left}..z@@r{right}; % near-circle
+ filldraw subpath(0,ypart(path_.r intersectiontimes path_.l)) of path_.r
+ --z@r{right}..cycle; % bulb
+ else:
+ pos@$(cap_band,90);pos$$(cap_band,90); pos$$$(cap_hair,180);
+ pos@@(cap_band,260);
+ x@$=x$; top y$$r = top y@$r= top y$; lft x$$$=lft x$-5u; y$$$=y$-.2h;
+ x$$=x$-2.5u; rt x@@l=hround x$$; bot y@@r=vround y$-4u;
+ filldraw stroke z@$e--z$$e{left}...z$$$e...z@@e; % full hook
+ fi
+else:
+ pos@$(cap_band,90);pos$$(cap_band,90); pos$$$(cap_hair,180);
+ pos@@(cap_band,260);
+ x@$=lft x$; top y$$r= top y@$r= top y$; lft x$$$=lft x$-5u; y$$$=y$-.2h;
+ x$$=x@$-2.5u; rt x@@l=hround x$$; bot y@@r=vround y$-4u;
+ filldraw stroke z@$e--z$$e{left}..{down}z$$$e; % full hook
+fi
+enddef;
+
+% Macro for the universal accent, from Yannis Haralambous greek fonts
+% changed jk
+def separator=max(1,vround(1/12x_height)) enddef;
+vardef universal(suffix $)(expr center)=
+x$1=center+.15u; x$4=center-.15u;
+y$1=y$4=x_height+1.5separator;
+x$2=x$1+.3univ_acc_breadth*(body_height-x_height);
+x$3=x$1-.3univ_acc_breadth*(body_height-x_height);
+y$3=y$2=y$1+univ_acc_breadth*(body_height-x_height);
+fill z$1--z$2--z$3--z$4--cycle;
+enddef;
+
+endinput;