%***************************************************************************** % 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;