% dbpunct.mf [1995/10/10 v0.998f WaS] % (c) Copyright 1995 Walter Schmidt % (c) Copyright 1995 J"org Knappen % (c) Copyright 1990, 1992 Norbert Schwarz % See the file `copyrite.txt' from the DC fonts package!!! % This file was taken from the DC fonts v 1.2 and adapted to the % CM Bright family of fonts. Changes are marked by `(CMBR)'. % % Content: % % punctuation %%% italcorr corrital dcchar "Single left guillemot"; % jk beginchar(oct"016",7u#,2bar_height#,0); italcorr h#*slant-u#; adjust_fit(0,0); pickup fine.nib; pos1(qvair,0); pos2(if monospace: qvair else: stem fi,0); pos3(qvair,0); rt x1r=rt x3r=hround(5u)-eps; lft x2l=hround(if not monospace: 2 fi\\ u)-eps; % bot y3=0; y2=good.y(h/2); top y1=2y2; bot y3=vair; y2=.5[y1,y3]=bar_height; % (CMBR) if not serifs or monospace: filldraw stroke z1e--z2e--z3e; else: filldraw stroke z1e{(x2e-x1e),1.8(y2e-y1e)}..{curl1}z2e{curl1}.. {(x3e-x2e),1.8(y3e-y2e)}z3e; fi penlabels(1,2,3); endchar; dcchar "Single right guillemot"; % jk beginchar(oct"017",7u#,2bar_height#,0); italcorr h#*slant-u#; adjust_fit(0,0); pickup fine.nib; pos1(qvair,0); pos2(if monospace: qvair else: stem fi,0); pos3(qvair,0); lft x1l=lft x3l=w-hround(5u)+eps; rt x2r=w-hround(if not monospace: 2 fi\\ u)+eps; % bot y3=0; y2=good.y(h/2); top y1=2y2; bot y3=vair; y2=.5[y1,y3]=bar_height; % (CMBR) if not serifs or monospace: filldraw stroke z1e--z2e--z3e; else: filldraw stroke z1e{(x2e-x1e),1.8(y2e-y1e)}..{curl1}z2e{curl1}.. {(x3e-x2e),1.8(y3e-y2e)}z3e; fi penlabels(1,2,3); endchar; dcchar "French opening quotes"; % from pl_cud (plfonts) if not serifs or monospace: beginchar(oct"023",9u#,2bar_height#,0); adjust_fit(0,0); else: beginchar(oct"023",10u#,2bar_height#,0); adjust_fit(0,0); fi pickup fine.nib; numeric the_shift,shift_corr; the_shift=hround(max(3u,1.7stem)); shift_corr=the_shift-3u; pos1(qvair,0); pos2(if monospace: qvair else: stem fi,0); pos3(qvair,0); rt x1r=rt x3r=hround(5u-shift_corr)-eps; lft x2l=hround(if not monospace: 2 fi\\ u-shift_corr)-eps; % bot y3=0; y2=good.y(h/2); top y1=2y2; bot y3=vair; y2=.5[y1,y3]=bar_height; % (CMBR) for i:=1,2,3: forsuffixes $:=r, ,l: z[i]'$=z[i]$ + the_shift*right; endfor endfor if not serifs or monospace: filldraw stroke z1e--z2e--z3e; filldraw stroke z1'e--z2'e--z3'e; else: filldraw stroke z1e{(x2e-x1e),1.8(y2e-y1e)}..{curl1}z2e{curl1}.. {(x3e-x2e),1.8(y3e-y2e)}z3e; filldraw stroke z1'e{(x2'e-x1'e),1.8(y2'e-y1'e)}..{curl1}z2'e{curl1}.. {(x3'e-x2'e),1.8(y3'e-y2'e)}z3'e; fi; % italic correction is set to |0| in |beginchar|, so let's correct it corrital z1'r; penlabels(1,2,3,1',2',3'); endchar; dcchar "French closing quotes"; % from pl_cud (plfonts) if not serifs or monospace: beginchar(oct"024",9u#,2bar_height#,0); adjust_fit(0,0); else: beginchar(oct"024",10u#,2bar_height#,0); adjust_fit(0,0); fi pickup fine.nib; numeric the_shift,shift_corr; the_shift=hround(max(3u,1.7stem)); shift_corr=the_shift-3u; pos1(qvair,0); pos2(if monospace: qvair else: stem fi,0); pos3(qvair,0); lft x1l=lft x3l=w-hround(5u-shift_corr)+eps; rt x2r=w-hround(if not monospace: 2 fi\\ u-shift_corr)+eps; % bot y3=0; y2=good.y(h/2); top y1=2y2; bot y3=vair; y2=.5[y1,y3]=bar_height; % (CMBR) for i:=1,2,3: forsuffixes $:=r, ,l: z[i]'$=z[i]$ + the_shift*left; endfor endfor if not serifs or monospace: filldraw stroke z1e--z2e--z3e; filldraw stroke z1'e--z2'e--z3'e; else: filldraw stroke z1e{(x2e-x1e),1.8(y2e-y1e)}..{curl1}z2e{curl1}.. {(x3e-x2e),1.8(y3e-y2e)}z3e; filldraw stroke z1'e{(x2'e-x1'e),1.8(y2'e-y1'e)}..{curl1}z2'e{curl1}.. {(x3'e-x2'e),1.8(y3'e-y2'e)}z3'e; fi; % italic correction is set to |0| in |beginchar|, so let's correct it corrital z2r; penlabels(1,2,3,1',2',3'); endchar; dcchar "German opening comma"; beginchar(oct"015",5u#,pdot_diam#,comma_depth#); adjust_fit(0,0); x1+.5pdot_diam=hround(w-.5pdot_diam); y1-.5pdot_diam=0; comma(1,a,pdot_diam,.2u,comma_depth); % dot and tail penlabels(1); endchar; dcchar "German Opening quotes"; % beginchar(oct"022",3u#+max(2u#,dot_size#),pdot_diam#,comma_depth#); beginchar(oct"022",3u#+dot_size#,pdot_diam#,comma_depth#); % (CMBR) italcorr asc_height#*slant+dot_size#-4.1u#; adjust_fit(.5u#,.5u#); x2+.5dot_size=hround(w-.6u+.5dot_size); y2-.5dot_size=0; x1=w-x2; y2=y1; comma(1,a,dot_size,.25u,comma_depth); % left dot and tail comma(2,b,dot_size,.25u,comma_depth); % right dot and tail penlabels(1,2); endchar; dcchar "Exclamation point"; beginchar("!",5u#+width_adj#,asc_height#,0); italcorr asc_height#*slant-2u#-.5width_adj#+.5dot_size#; adjust_fit(0,0); pickup tiny.nib; pos3(dot_size,0); pos4(dot_size,90); lft x3l=hround(.5w-.5dot_size); bot y4l=0; z3=z4; dot(3,4); % dot numeric bot_width; bot_width=if hefty:max(hround .8dot_size,fine.breadth) else: hair fi; pickup fine.nib; pos1(dot_size,0); pos2(bot_width,0); x1=x2=x3; bot y2=.25[top y4r,x_height]+1; if square_dots: top y1=h; filldraw stroke z1e--z2e; % stem else: top z0=(x1,h+o); y1+.5dot_size=h+o; filldraw z1r...z0...z1l---z2l--z2r---cycle; fi % stem and bulb penlabels(0,1,2,3,4); endchar; dcchar "Apostrophe"; beginchar("'",5u#,asc_height#,0); italcorr asc_height#*slant+.5dot_size#-2u#; adjust_fit(0,0); x1-.5dot_size=hround(.5w-.5dot_size); y1+.5dot_size=h; if monospace: comma(1,a,dot_size,.28u,vround 1.5comma_depth); % large comma else: comma(1,a,dot_size,.25u,comma_depth); fi % comma with increased jut penlabels(1); endchar; dcchar "Asterisk"; beginchar("*",9u#, if low_asterisk:math_axis#+.5x_height# else: body_height# fi,0); italcorr h#*slant-.75u#; adjust_fit(0,0); numeric ast_flare; ast_flare=hround .7[thin_join,stem]; x0=.5w; y0=h-.5x_height; for d=-150 step 60 until 150: z[d]=z0+.5dir d xscaled 7.5u yscaled x_height; numeric theta; theta=angle(z[d]-z0); fill z0+.5(0,-thin_join)rotated theta ---z[d]+.5(-ast_flare,-ast_flare)rotated theta ..z[d]..z[d]+.5(-ast_flare,ast_flare)rotated theta ---z0+.5(0,thin_join)rotated theta--cycle; endfor % diagonal at angle |d| labels(0,[-150],[-90],[-30],30,90,150); endchar; dcchar "Plus sign"; % (CMBR) % beginarithchar("+"); pickup extra_rule.nib; beginarithchar("+"); pickup rule.nib; x1=x2=good.x .5w; top y1=h+eps; .5[y1,y2]=math_axis; lft x3=hround sym_u-eps; x4=w-x3; y3=y4=math_axis; draw z1--z2; % stem draw z3--z4; % crossbar labels(1,2,3,4); endchar; dcchar "Comma"; beginchar(",",5u#,pdot_diam#,comma_depth#); adjust_fit(0,0); x1-.5pdot_diam=hround(.5w-.5pdot_diam); y1-.5pdot_diam=0; comma(1,a,pdot_diam,.2u,comma_depth); % dot and tail penlabels(1); endchar; dcchar "Period"; beginchar(".",5u#,pdot_diam#,0); adjust_fit(0,0); pickup fine.nib; pos1(pdot_diam,0); pos2(pdot_diam,90); lft x1l=hround(.5w-.5pdot_diam); bot y2l=0; z1=z2; dot(1,2); % dot penlabels(1,2); endchar; dcchar "Virgule (slash)"; beginchar("/",9u#,body_height#,paren_depth#); italcorr body_height#*slant-.5u#; % adjust_fit(0,0); pickup extra_rule.nib; adjust_fit(0,0); pickup rule.nib; % (CMBR) rt x1=hround(w-u)+eps; top y1=h+eps; lft x2=hround u-eps; bot y2=-d-eps; draw z1--z2; % diagonal penlabels(1,2); endchar; dcchar "Colon"; beginchar(":",5u#,x_height#,0); italcorr x_height#*slant+.5pdot_diam#-2u#; adjust_fit(0,0); pickup fine.nib; pos1(pdot_diam,0); pos2(pdot_diam,90); lft x1l=hround(.5w-.5pdot_diam); top y2r=h; z1=z2; dot(1,2); % upper dot pos3(pdot_diam,0); pos4(pdot_diam,90); x3=x1; bot y4l=0; z3=z4; dot(3,4); % lower dot penlabels(1,2,3,4); endchar; dcchar "Semicolon"; beginchar(";",5u#,x_height#,comma_depth#); italcorr x_height#*slant+.5pdot_diam#-2u#; adjust_fit(0,0); pickup fine.nib; pos1(pdot_diam,0); pos2(pdot_diam,90); lft x1l=hround(.5w-.5pdot_diam); top y2r=h; z1=z2; dot(1,2); % upper dot x3-.5pdot_diam=hround(.5w-.5pdot_diam); y3-.5pdot_diam=0; comma(3,a,pdot_diam,.2u,comma_depth); % lower dot and tail penlabels(1,2,3); endchar; dcchar "Equals sign"; % (CMBR) compute_spread(.45sym_height#,.55sym_height#); beginchar("=",14sym_u#,v_center(spread#+rule_thickness#)); italcorr h#*slant-.5sym_u#; % adjust_fit(0,0); pickup extra_rule.nib; adjust_fit(0,0); pickup rule.nib; lft x1=hround sym_u-eps; x3=x1; x2=x4=w-x1; y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis; draw z1--z2; % upper bar draw z3--z4; % lower bar labels(1,2,3,4); endchar; dcchar "Reverse apostrophe"; beginchar("`",5u#,asc_height#,0); italcorr asc_height#*slant+.5dot_size#-2u#; adjust_fit(0,0); x1-.5dot_size=hround(.5w-.5dot_size); y1+.5dot_size=h-comma_depth; if monospace: ammoc(1,a,dot_size,.28u,vround 1.5comma_depth); % large ammoc else: ammoc(1,a,dot_size,.25u,comma_depth); fi % normal ammoc penlabels(1); endchar; dcchar "Spanish open exclamation point"; beginchar(oct"275",5u#+width_adj#,asc_height#-desc_depth#,desc_depth#); italcorr h#*slant-2u#-.5width_adj#+.5dot_size#; adjust_fit(0,0); pickup tiny.nib; pos3(dot_size,0); pos4(dot_size,90); lft x3l=hround(.5w-.5dot_size); top y4r=h; z3=z4; dot(3,4); % dot numeric top_width; top_width=if hefty:max(hround .8dot_size,fine.breadth) else: hair fi; pickup fine.nib; pos1(dot_size,0); pos2(top_width,0); x1=x2=x3; top y2=.25[bot y4l,h-x_height]-1; if square_dots: bot y1=-d; filldraw stroke z1e--z2e; % stem else: bot z0=(x1,-d-o); y1-.5dot_size=-d-o; filldraw z1l...z0...z1r---z2r--z2l---cycle; fi % stem and bulb penlabels(0,1,2,3,4); endchar; dcchar "Closing quotes"; % beginchar(oct"021",3u#+max(2u#,dot_size#),asc_height#,0); beginchar(oct"021",3u#+dot_size#,asc_height#,0); % (CMBR) italcorr asc_height#*slant+dot_size#-4.1u#; adjust_fit(.5u#,.5u#); x1+.5dot_size=hround(.6u+.5dot_size); y2+.5dot_size=h; x2=w-x1; y2=y1; comma(1,a,dot_size,.25u,comma_depth); % left dot and tail comma(2,b,dot_size,.25u,comma_depth); % right dot and tail penlabels(1,2); endchar; dcchar "Hyphen"; beginchar("-",6u#,x_height#,0); italcorr .5x_height#*slant-.5u#; adjust_fit(0,0); numeric thickness; thickness=if hefty:bar else:.75[hair,stem] fi; pickup crisp.nib; pos1(thickness,90); pos2(thickness,90); top y1r=top y2r=vround(.5h+.5thickness); rt x2=hround(w-u)+eps; if monospace: x2=w-x1 else: lft x1=hround .2u-eps fi; filldraw stroke z1e--z2e; % bar penlabels(1,2); endchar; dcchar "Opening quotes"; % beginchar(oct"20",3u#+max(2u#,dot_size#),asc_height#,0); beginchar(oct"20",3u#+dot_size#,asc_height#,0); % (CMBR) italcorr asc_height#*slant-.1u#; adjust_fit(.5u#,.5u#); x2+.5dot_size=hround(w-.6u+.5dot_size); y1+.5dot_size=h-comma_depth; x1=w-x2; y2=y1; ammoc(1,a,dot_size,.25u,comma_depth); % left dot and tail ammoc(2,b,dot_size,.25u,comma_depth); % right dot and tail penlabels(1,2); endchar; dcchar "En dash"; beginchar(oct"025",9u#,x_height#,0); italcorr .61803x_height#*slant+.5u#; adjust_fit(0,0); pickup crisp.nib; pos1(vair,90); pos2(vair,90); top y1r=top y2r=vround(.61803h+.5vair); lft x1=-eps; rt x2=w+eps; filldraw stroke z1e--z2e; % bar penlabels(1,2); endchar; dcchar "Em dash"; beginchar(oct"026",18u#,x_height#,0); italcorr .61803x_height#*slant+.5u#; adjust_fit(letter_fit#,letter_fit#); pickup crisp.nib; pos1(vair,90); pos2(vair,90); top y1r=top y2r=vround(.61803h+.5vair); lft x1=-eps; rt x2=w+eps; filldraw stroke z1e--z2e; % bar penlabels(1,2); endchar; endinput;