%*****************************************************************************
% Copyright (c) 1989 by N. N. Billawala
%*****************************************************************************
% punctr.mf punctuation: for roman text set
% 8 characters
iff OK "x": "Cross for Polish l and L"; %******* 1 ACCENT WIDTH x 20 degrees
beginchar(oct"040",accent_w*width#+b_mono#,ascender#,0);
save_num(theta)=max(0,20-.5oblique); % angle of the bar
save_num(thickness)=.5[accent_thin_end,accent_thick_end]*1/cosd theta;
min_limit(join_radius)(.5thickness);
bot lft z1l=(0,.4h)//; multpos(1,2)(thickness,90+ if bold:theta else:0 fi);
rt x2l=lft x1l+w; z2l=z1l+(whatever,0) rotated theta;
z0=.5[z1l,z2l];
p1=(z0 soften(z2l,z2r,z1r,z1l) z0)--cycle;
showpoints(0,1,2);
draw (0,xheight)--(w,xheight);
adjust(0+m_a*b_mfit#,0+m_a*b_mfit#);
show_character; endchar;
% Theta here is the angle of the bar
iff OK "'": "Right quotes or closing quotes";
beginchar(oct"042",accent_w*width#+b_mono#,cap#,0);
save_num(head)=accent_dot_diameter;
top z1=(.5head,.75[xheight,cap]-.5head)//;
top z2=(w-.5head,y1)//;
ref1=comma(z1,head,min(.6xheight,1.5pt),accent_thin_end,0);
ref2=comma(z2,head,min(.6xheight,1.5pt),accent_thin_end,0);
p1=ref1 rotatedaround (z1,if prime:prime_angle fi -oblique);
p2=ref2 rotatedaround (z2,if prime:prime_angle fi -oblique);
showpoints(1,2);
adjust(v_a*fitbasis.lc#+m_a*b_mfit#,v_a*fitbasis.lc#+m_a*b_mfit#);
show_character; endchar;
iff OK "-": "Hyphen";
beginchar(oct"055",.33width#+b_mono#,cap#,0);
pickup mathpen;
lft z1=(0,math_axis)//;
rt z2=lft z1+(w,0);
draw z1--z2;
adjust(v_f*fitbasis.uc#+m_a*b_mfit#,v_f*fitbasis.uc#+m_a*b_mfit#);
show_character; endchar;
% use different mathpen for softness
% character position, but not shape slants with obliqueness
% must make sure that the plus/minus have the same widths
% rotation and slant of position with obliqueness
iff OK "`": "Left quotes or open quotes";
beginchar(oct"134",accent_w*width#+b_mono#,cap#,0);
save_num(head)=accent_dot_diameter;
top z1=(.5head,.75[xheight,cap]-.5head-min(.6xheight,2pt))//;
top z2=(w-.5head,y1)//;
ref1=comma(z1,head,min(.6xheight,1.5pt),accent_thin_end,0);
ref2=comma(z2,head,min(.6xheight,1.5pt),accent_thin_end,0);
p1=ref1 rotatedaround (z1,180 if prime:prime_angle fi -oblique);
p2=ref2 rotatedaround (z2,180 if prime:prime_angle fi -oblique);
showpoints(1,2);
adjust(v_a*fitbasis.lc#+m_a*b_mfit#,v_a*fitbasis.lc#+m_a*b_mfit#);
show_character; endchar;
% rotation and slant of position with obliqueness
iff OK "x": "Dot accent";
beginchar(oct"137",accent_w*width#+b_mono#,
accent_height#+xheight#+2/3accent_depth#,0);
bot z1=(.5w,h-accent_dot_diameter)//;
p1=dot.b(z1,accent_dot_diameter);
showpoints(1);
draw (0,xheight)--(w,xheight);
adjust(0+m_a*b_mfit#,0+m_a*b_mfit#);
show_character; endchar;
% no slant of shape with obliqueness
iff OK "-": "En-Dash";
beginchar(oct"173",.5width#+.5mono#,cap#,0);
pickup dashpen;
lft z1=(0,math_axis)//;
rt z2=lft z1+(w,0);
draw z1--z2;
adjust(.25mono#,.25mono#);
show_character; endchar;
% use different dashpen for softness
% character position, but not shape slants with obliqueness
% must make sure that the plus/minus have the same widths
iff OK "-": "Em-Dash";
beginchar(oct"174",width#+mono#,cap#,0);
pickup dashpen;
lft z1=(0,math_axis)//;
rt z2=lft z1+(w,0);
draw z1--z2;
adjust(0,0);
show_character; endchar;
% use different dashpen for softness
% character position, but not shape slants with obliqueness
% must make sure that the plus/minus have the same widths
iff OK "x": "Long Hungarian umlaut accent";
beginchar(oct"175",.8accent_w*width#+b_mono#,
accent_height#+xheight#+accent_depth#,0);
top rt z1=(round(.45w),h)//;
bot lft z2=(0,h-max(1,accent_depth))//;
top rt z3=(w,h)//;
bot lft z4=(round(.55w),h-max(1,accent_depth))//;
p1=prime_accent(z1,z2,accent_thick_end,accent_thin_end);
p2=prime_accent(z3,z4,accent_thick_end,accent_thin_end);
showpoints(1,2,3,4);
draw (0,xheight)--(w,xheight);
adjust(0+m_a*b_mfit#,0+m_a*b_mfit#);
show_character; endchar;
|