.cmchar "The gothic point";
.beginchar(".",5u#,1.431x_height#,0);
.adjust_fit(0,0);
z1=(0.5w,-apex_o+0.707stem);
ygoth_dot(1);
.endchar;

.cmchar "The gothic colon";
.beginchar(":",5u#,1.431x_height#,0);
.adjust_fit(0,0);
z1=(0.5w,-apex_o+0.707stem);
ygoth_dot(1);
z2=(0.5w,x_height+apex_o-0.707stem);
ygoth_dot(2)
.endchar;

.cmchar "The gothic semicolon";
.beginchar(";",5u#,1.431x_height#,0);
.adjust_fit(0,0);
z1=(0.5w,-apex_o+0.707stem);
ygoth_dot(1);
z2=(0.5w,x_height+apex_o-0.707stem);
ygoth_dot(2)
penpos3(hair,-90); penpos4(stem,45);
z3l=(0.5w-0.707stem,-stem);
z4l=(0.5w,-apex_o);
penstroke z3e..z4e{up};
.endchar;

.cmchar "The gothic comma";
.beginchar(",",5u#,1.431x_height#,0);
.adjust_fit(0,0);
z2=(0.5w,-apex_o+0.707stem);
ygoth_dot(2)
penpos3(hair,-90); penpos4(stem,45);
z3l=(0.5w-0.707stem,-stem);
z4l=(0.5w,-apex_o);
penstroke z3e..z4e{up};
.endchar;

.cmchar "The gothic exclamation point";
.beginchar("!",5u#,1.431x_height#,0);
.adjust_fit(0,0);
z1=(0.5w,-apex_o+0.707stem);
ygoth_dot(1);
z2=(0.5w,cap_height+apex_o-0.707stem);
ygoth_dot(2);
penpos3(1.414stem,0); penpos4(hair,0);
x3=x4=0.5w; y3=y2; y4=y1+1.414stem;
penstroke z4e--z3e;
.endchar;

.cmchar "The gothic question mark";
.beginchar("?",7.591u#,1.431x_height#,0);
.adjust_fit(cap_serif_fit#,cap_serif_fit#);
penpos1(hair,25); z1=(0.171w,0.514h);
z1'=(0.293w,0.88h); z2=(0.5w,cap_height+apex_o);
penpos4(cap_stem,0); 
z4l=(0.673w,0.676h);%x_height);
penpos5(hair,0); penpos6(hair,-15);
z7=(0.38w,0.077h); z3=(x2,0.82h);
z8=(0.624w,0.225h); z6=(0,0);
z5=(0.5w,-apex_o+2.121stem);
penpos9(1.15cap_stem,-128);
x9l=w; y9r=-apex_o;
z10=(0.5w,-apex_o+0.707stem);
ygoth_dot(10);
penpos50(0.5cap_stem,-45); penpos51(cap_stem,45);
z50l=z2; z51r=z2;
penstroke z1e{dir115}...z50e{dir45};
penstroke z5e{up}..z4e{up}..z51e{dir135};
.endchar;

.cmchar "Left parenthesis";
.beginchar("(",7u#,body_height#,paren_depth#);
italcorr body_height#*slant-.5u#;
.adjust_fit(0,0); pickup fine.nib;
pos1(vair,0); pos2(.75[hair,stem],0); pos3(vair,0);
rt x1r=rt x3r=hround(w-u); lft x2l=hround(x1-4u if monospace: +4/3u fi);
top y1=h; y2=.5[y1,y3]=math_axis;
filldraw stroke z1e{3(x2e-x1e),y2-y1}...z2e
 ...{3(x3e-x2e),y3-y2}z3e;  % arc
penlabels(1,2,3); .endchar;

.cmchar "Right parenthesis";
.beginchar(")",7u#,body_height#,paren_depth#);
italcorr math_axis#*slant-.5u#;
.adjust_fit(0,0); pickup fine.nib;
pos1(vair,0); pos2(.75[hair,stem],0); pos3(vair,0);
lft x1l=lft x3l=hround u; rt x2r=hround(x1+4u if monospace: -4/3u fi);
top y1=h; y2=.5[y1,y3]=math_axis;
filldraw stroke z1e{3(x2e-x1e),y2-y1}...z2e
 ...{3(x3e-x2e),y3-y2}z3e;  % arc
penlabels(1,2,3); .endchar;

.cmchar "Opening Gaensefuesschen";
.beginchar(oct"137",7u#+max(2u#,dot_size#),asc_height#,0);
italcorr asc_height#*slant+dot_size#-4.1u#;
.adjust_fit(0,0);
x2+.5dot_size=hround(w-.6u); y2-.5dot_size=0;
x2-x1=hround(1.5u+max(2u,dot_size)); 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;


.cmchar "Closing Gaensefuesschen";
.beginchar(oct"042",7u#+max(2u#,dot_size#),asc_height#,0);
italcorr asc_height#*slant-.1u#;
.adjust_fit(0,0);
x1-.5dot_size=hround .6u;
 y1+.5dot_size=h-comma_depth;
x2-x1=hround(1.5u+max(2u,dot_size)); 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;

.cmchar "The gothic apostrophe";
.beginchar("'",2hair#+stem#,1.431x_height#,0);
.adjust_fit(0,0);
penpos1(0.5stem,0);
penpos2(stem,0); 
z1l=(hair,h-foot-0.707stem); z2l=(x1l,h);
penstroke z1e--z2e;
.endchar;

.cmchar "The gothic hyphen";
.beginchar("-",2u#,1.431x_height#,0);
.adjust_fit(cap_serif_fit#+0.3u#,cap_serif_fit#);
penpos1(stem,-90); penpos2(stem,-90);
penpos3(stem,-90); penpos4(stem,-90);
x1=x2=0; x3=x4=w; z3-z1=whatever*dir40;
z4-z2=whatever*dir40;
0.5[y2,y3]=.5x_height; y1-y2=2.5stem;
penstroke z1e--z3e; penstroke z2e--z4e;
.endchar;


.cmchar "Closing quotes";
.beginchar(oct"042",7u#+max(2u#,dot_size#),asc_height#,0);
italcorr asc_height#*slant+dot_size#-4.1u#;
.adjust_fit(0,0);
x1-.5dot_size=hround .6u; y2+.5dot_size=h;
x2-x1=hround(1.5u+max(2u,dot_size)); 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;

.cmchar "Opening quotes";
.beginchar(oct"137",7u#+max(2u#,dot_size#),asc_height#,0);
italcorr asc_height#*slant-.1u#;
.adjust_fit(0,0);
x2+.5dot_size=hround(w-.6u); y1+.5dot_size=h-comma_depth;
x2-x1=hround(1.5u+max(2u,dot_size)); 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;

.cmchar "En dash";
.beginchar(oct"173",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;

.cmchar "Em dash";
.beginchar(oct"174",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;

