% VCDEFS - definitions & macros for vicentino fonts % w. kraml, 1991 % some metrics ah# + dh# = size#; % = height of ascenders + depth of descenders xh#= 7/16 size#; % x-height ah#= xh# + 5/16 size#; % ascender height ch#= xh# + 4/16 size#; % caps height th# = 1/8 xh#; % terminal height digh# = xh#; % lower case digits height diga# = xh# + 3/16 size#; % small digits ascenders digd# = 3/16 size#; % small digits descenders % (almost all the time) horizontal: s# := 1/20 size#; % (orig. sidebar, now ) a small distance % normal! tw# := 2/20 size#; % terminal width sw# := 4/18 size#; % stem to stem width halfser#:=.6tw#; % width of 'half' serif if bold: s#:= 1.08s# ; tw#:=1.08tw#; sw#:=1.09sw#; halfser#:=1.10halfser#; fi % pixels: define_pixels(size,ah,xh,ch,digh,diga,digd,dh,th,s,tw,sw,halfser); % pen(s): xfactor := if bold: 1.37 else: 1 fi; yfactor := if bold: 1.30 else: 1 fi; pen myoddpen; capsule_def(myoddpen) makepen((-40,15)-- (-35.5,0)-- (-30,-15)-- (-20,-16.5)-- (-10,-17)-- (10,-17)-- (20, -16.5)-- (35,-15)-- (38,0)-- (40,15)-- (34, 16.5)-- (25,17.5)-- (17.5,18)-- (5,18.5)-- (-5,18.5)-- (-17.5,18)-- (-25,17.5)-- (-34,16.5)-- cycle); if modern: pickup pencircle xscaled (.0645 size*xfactor) yscaled (.046 size*yfactor) rotated 15; else: pickup myoddpen xscaled (.00095 size*xfactor) yscaled (.00054 size*yfactor) rotated 35; % normal! fi lower_pen := savepen; pickup myoddpen xscaled (.0009size*xfactor) yscaled (.00055size*yfactor) rotated 6; %! cap_serif_pen := savepen; if twisted: pickup pencircle xscaled (.074 size*xfactor) yscaled (.02625 size*yfactor) rotated 130; lower_pen := savepen; fi % font slants: upperslant := if modern: 1/6 else: 11/60 fi; % 1/5 lowerslant := if modern: 1/6 else: 7/30 fi; % 1/4 if twisted: upperslant := lowerslant := -2/60; fi % TFMs: font_size size#; font_quad 10/15 size#; font_normal_space := 2tw#+.6s#; font_normal_stretch := 3/50 size#; font_normal_shrink := 2/50 size#; font_x_height := xh#; % macros: def ltopserif(expr startpoint,endpoint,stempoint) = draw startpoint--endpoint; draw startpoint{endpoint-startpoint}..tension2.. {stempoint-endpoint}stempoint enddef; def cap_top_serif(expr startx, rwidth) = pair outer_left_z_, left_zz_, z_, right_z_; outer_left_z_ = (startx-1.43tw, h-.7th); left_zz_ - outer_left_z_ =whatever*dir29; left_zz_= (whatever, h-.15s); top.z_ = (startx, h); top.right_z_ = (startx+rwidth, h); draw outer_left_z_{dir42} ... left_zz_..tension1.25..z_ ..tension1.25..{dir35}right_z_ ; enddef; def cap_bot_serif(expr startx) = pair left_z_, z_, right_z_; pickup cap_serif_pen; bot.left_z_ = (startx-.8tw,0); bot.z_ = (startx, 0); bot.right_z_ = (startx+.9tw, 0); draw left_z_ ... z_{right} ... {dir70}right_z_ enddef; def horintersection expr height = intersectionpoint ((-w,height)--(2w,height)) enddef; def end_char = italcorr (charht*slant - .25tw#); labels(range 1 thru 15); endchar enddef; def dot expr z = pair upper_z_; upper_z_ := z + (0,1.1s); draw upper_z_{right}..tension4..{left}z enddef; def comma expr z = pair upper_z_, lower_z_; upper_z_ := z + (-1/32size,1s); lower_z_ := z - (1/12size, 2s); draw upper_z_{right}..tension4..z..tension2..lower_z_ enddef; def revcomma expr z = pair upper_z_, lower_z_; upper_z_ := z + (1/12size, 2s); lower_z_ := z - (-1/32size,1s); draw lower_z_{left}..tension4..z..tension2..upper_z_ enddef;