%-------------------------------------------------------------
% This is ETH_PUNC.MF   as of Dec, 1995 by Jochen Metzinger
% originally distributed by Abass B. Alamnehe [February, 1993]
%-------------------------------------------------------------

iff known exclamation_mark:
cmchar "Exclamation mark";
beginchar(exclamation_mark,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;


iff known spanish_shriek: 
cmchar "Spanish open exclamation point";
beginchar(spanish_shriek,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;


iff known question_mark:
cmchar "Question mark";
beginchar(question_mark,8.5u#,asc_height#,0);
italcorr .8asc_height#*slant;
adjust_fit(0,0);
pickup tiny.nib; pos7(dot_size,0); pos8(dot_size,90);
lft x7l=hround(.5w-.25u-.5dot_size); bot y8l=0; z7=z8; dot(7,8);  % dot
numeric bot_width;
bot_width=if hefty:max(hround .8dot_size,fine.breadth) else: hair fi;
pickup fine.nib; pos2(vair,90); pos3(curve,0);
pos4(vair,-90); pos5(bot_width,0); pos6(bot_width,0);
x2=x4=x5=x6=x7; rt x3r=hround(w-u); bot y6=1+.25[top y8r,x_height];
top y2r=h+oo; y3=.75[y6,y2]; y4=.5[y6,y2]; y5=.1[y6,y2];
{{interim superness:=more_super;
filldraw stroke pulled_super_arc.e(2,3)(superpull)
 & subpath (0,1) of super_arc.e(3,4) .. z5e---z6e\\}};  % arc and stem
if serifs: pos1(hair,180); pos0(flare,180);
 lft x1r=hround u; y1=y3; bulb(2,1,0);  % bulb
else: pos1(Vround 5/7[vair,flare],110);
 lft x1r=hround u; top y1r=vround .9[y6,top y2r];
 filldraw stroke term.e(2,1,left,1,4); fi  % terminal
penlabels(0,1,2,3,4,5,6,7,8); endchar;


iff known spanish_query:
cmchar "Spanish open question mark";
beginchar(spanish_query,8.5u#,asc_height#-desc_depth#,desc_depth#);
adjust_fit(0,0);
pickup tiny.nib; pos7(dot_size,0); pos8(dot_size,90);
lft x7l=hround(.5w-.25u-.5dot_size); top y8r=h; z7=z8; dot(7,8);  % dot
numeric top_width;
top_width=if hefty:max(hround .8dot_size,fine.breadth) else: hair fi;
pickup fine.nib; pos2(vair,270); pos3(curve,180);
pos4(vair,90); pos5(top_width,180); pos6(top_width,180);
x2=x4=x5=x6=x7; lft x3r=hround u; top y6=.25[bot y8l,h-x_height]-1;
bot y2r=-d-oo; y3=.75[y6,y2]; y4=.5[y6,y2]; y5=.1[y6,y2];
{{interim superness:=more_super;
filldraw stroke pulled_super_arc.e(2,3)(superpull)
 & subpath (0,1) of super_arc.e(3,4) .. z5e---z6e\\}};  % arc and stem
if serifs: pos1(hair,0); pos0(flare,0);
 rt x1r=hround(w-u); y1=y3; bulb(2,1,0);  % bulb
else: pos1(Vround 5/7[vair,flare],-70);
 rt x1r=hround(w-u); bot y1r=vround .9[y6,bot y2r];
 filldraw stroke term.e(2,1,right,1,4); fi  % terminal
penlabels(0,1,2,3,4,5,6,7,8); endchar;


iff known dollar:
cmchar "Dollar sign";
beginchar(dollar,9u#,body_height#,body_height#-asc_height#);
italcorr fig_height#*slant-.5u#; % same as for digits
adjust_fit(0,0);
numeric theta; theta=90-angle(50u,asc_height); slope:=-asc_height/50u;
pickup fine.nib; pos2(slab,-90);
pos0(cap_stem,theta); pos7(slab,-90);
x2=x0=x7=.5w; top y2l=asc_height+oo; bot y7r=-oo;
y0=.52asc_height; lft x3l=hround u; rt x6r=hround(w-u);
x3r-x3l=x6r-x6l=hround .35[slab,cap_stem]-fine;
ellipse_set(2l,3l,4l,0l); ellipse_set(2r,3r,4r,0r); y3=y3r;
ellipse_set(7l,6l,5l,0l); ellipse_set(7r,6r,5r,0r); y6=y6r;
filldraw stroke super_arc.e(2,3) & z3e{down}
 ..z4e---z5e..z6e{down} & super_arc.e(6,7);  % main stroke
if serifs: pos1(hair,0); pos8(hair,180);
 pos10(flare,0); pos9(flare,180);
 rt x1r=hround(w-u); lft x8r=hround u; y1=.5[y0,y2]; y8=.5[y0,y7];
 {{less_tense; pos2'(slab,90); z2'=z2; bulb(2',1,10);  % upper arc and bulb
 bulb(7,8,9)}};  % lower arc and bulb
else: pos1(.6[slab,flare],-100); pos8(flare,-100);
 rt x1l=hround(w-1.3u); lft x8r=hround .8u;
 top y1l=vround .92asc_height+oo; bot y8r=vround .1asc_height-oo;
 filldraw stroke term.e(2,1,right,.9,4);  % upper arc and terminal
 filldraw stroke term.e(7,8,left,1,4); fi  % lower arc and terminal
pickup crisp.nib; pos12(bar,0); pos11(bar,0);
lft x12l=lft x11l=hround(.5w-.5bar); top y12=h; bot y11=-d;
filldraw stroke z12e--z11e;  % vertical crossbar
penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12); endchar;


iff known slash:
cmchar "Slash";
beginchar(slash,9u#,body_height#,paren_depth#);
italcorr body_height#*slant-.5u#;
adjust_fit(0,0); pickup rule.nib;
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;


iff known period:
cmchar "Period";
beginchar(period,5u#,dot_size#,0);
adjust_fit(0,0); pickup fine.nib;
pos1(dot_size,0); pos2(dot_size,90);
lft x1l=hround(.5w-.5dot_size); bot y2l=0; z1=z2; dot(1,2);  % dot
penlabels(1,2); endchar;


iff known zero_hyph:
cmchar "Invisible hyphen";
beginchar(zero_hyph,0,0,0);
endchar;


iff known eth_white_space:
cmchar "Ethiopic white space";
beginchar(eth_white_space,4u#,0,0);
endchar;


iff known lt_parenthesis:
cmchar "Left parenthesis";
beginchar(lt_parenthesis,7u# if monospace: -u# fi,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;


iff known rt_parenthesis:
cmchar "Right parenthesis";
beginchar(rt_parenthesis, 7u# if monospace: -u# fi,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;


iff known lt_bracket:
cmchar "Left bracket";
numeric wd#; wd#=max(5u#,4.5u#+.5if hefty:stem# else:rule_thickness# fi);
beginchar(lt_bracket,wd#,body_height#,paren_depth#);
italcorr body_height#*slant;
adjust_fit(0,0);
numeric top_thickness,side_thickness;
if hefty: top_thickness=vair;
 side_thickness=max(crisp.breadth,stem-2stem_corr);
else: top_thickness=side_thickness=rule_thickness; fi;
pickup crisp.nib; pos1(side_thickness,0); pos2(side_thickness,0);
top y1=h; bot y2=-d; lft x1l=lft x2l=hround(2.5u-.5side_thickness)-1-eps;
filldraw stroke z1e--z2e;  % stem
pos3(top_thickness,90); pos4(top_thickness,90);
pos5(top_thickness,90); pos6(top_thickness,90);
x3=x5=x1l; rt x4=rt x6=ceiling(w-.4u)+eps; y3r=y4r=y1; y5l=y6l=y2;
filldraw stroke z3e--z4e;  % upper bar
filldraw stroke z5e--z6e;  % lower bar
penlabels(1,2,3,4,5,6); endchar;


iff known rt_bracket:
cmchar "Right bracket";
numeric wd#; wd#=max(5u#,4.5u#+.5if hefty:stem# else:rule_thickness# fi);
beginchar(rt_bracket,wd#,body_height#,paren_depth#);
italcorr body_height#*slant-2u#+.5if hefty:stem# else:rule_thickness# fi;
adjust_fit(0,0);
numeric top_thickness,side_thickness;
if hefty: top_thickness=vair;
 side_thickness=max(crisp.breadth,stem-2stem_corr);
else: top_thickness=side_thickness=rule_thickness; fi;
pickup crisp.nib; pos1(side_thickness,0); pos2(side_thickness,0);
top y1=h; bot y2=-d; rt x1r=rt x2r=hround(w-2.5u+.5side_thickness)+1+eps;
filldraw stroke z1e--z2e;  % stem
pos3(top_thickness,90); pos4(top_thickness,90);
pos5(top_thickness,90); pos6(top_thickness,90);
x3=x5=x1r; lft x4=lft x6=floor .4u-eps; y3r=y4r=y1; y5l=y6l=y2;
filldraw stroke z3e--z4e;  % upper bar
filldraw stroke z5e--z6e;  % lower bar
penlabels(1,2,3,4,5,6); endchar;


iff known lt_quote:
cmchar "Opening quote";
beginchar(lt_quote,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;


iff known rt_quote:
cmchar "Closing quote";
beginchar(rt_quote,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;


iff known lt_quotes:
cmchar "Opening quotes";
beginchar(lt_quotes,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;


iff known rt_quotes:
cmchar "Closing quotes";
beginchar(rt_quotes,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;


iff known less:
cmchar "French quotation left";
beginchar(less,7u#,x_height#,0);
adjust_fit(0,0);
pickup fine.nib;
penpos1(stem,10); penpos2(stem,0); penpos3(stem,-10); penpos4(stem,0);
lft x2=hround(1u)-eps; x1=x3=w-x2; x4=x2+1u;
bot y1=0; top y3=h; y2=.5[y1,y3]; y4=y2;
filldraw stroke z1e..controls z4e..z2e..controls z4e..z3e;  % diagonals
labels(1,2,3); endchar;


iff known greater:
cmchar "French quotation right";
beginchar(greater,7u#,x_height#,0);
adjust_fit(0,0);
pickup fine.nib;
penpos1(stem,-10); penpos2(stem,0); penpos3(stem,10); penpos4(stem,0);
rt x2=hround(w-1u)+eps; x1=x3=w-x2; x4=x2-1u;
bot y1=0; top y3=h; y2=.5[y1,y3]; y4=y2;
filldraw stroke z1e..controls z4e..z2e..controls z4e..z3e;  % diagonals
labels(1,2,3); endchar;


iff known eth_full_stop:
cmchar "Full stop";
beginchar(eth_full_stop,8u#,fig_height#,0);
adjust_fit(2u#,0);
pickup fine.nib;
x0=x1=w-1u;  x2=x3=w-3u; y0=.275h; y3=.25h; y1=.425h; y2=.4h;
filldraw z0--z1--z2--z3--cycle;
x4=x5=w-1u;  x6=x7=w-3u; y4=.625h; y7=.6h; y5=.775h; y6=.75h;
filldraw z4--z5--z6--z7--cycle;
penlabels(0,1,2,3,4,5,6,7);
x0'=x1'=3u;  x2'=x3'=1u; y0'=.275h; y3'=.25h; y1'=.425h; y2'=.4h;
filldraw z0'--z1'--z2'--z3'--cycle;
x4'=x5'=3u;  x6'=x7'=1u; y4'=.625h; y7'=.6h; y5'=.775h; y6'=.75h;
filldraw z4'--z5'--z6'--z7'--cycle;
penlabels(0',1',2',3',4',5',6',7'); endchar;


iff known eth_semicolon:
cmchar"Semicolon (der-ebe-serez)";
beginchar(eth_semicolon,5u#,fig_height#,0);
adjust_fit(1u#,1u#);
pickup fine.nib;
x0=x1=w-1.5u;  x2=x3=w-3.5u; y0=.325h; y3=.3h; y1=.475h; y2=.45h;
filldraw z0--z1--z2--z3--cycle;
x4=x5=w-1.5u;  x6=x7=w-3.5u; y4=.625h; y7=.6h; y5=.775h; y6=.75h;
filldraw z4--z5--z6--z7--cycle;
pickup rule.nib;
top lft z8=(0,.95h); top rt z9=(w,h); draw z8--z9;
bot lft z8'=(0,.075h); bot rt z9'=(w,.125h); draw z8'--z9';
penlabels(0,1,2,3,4,5,6,7); endchar;


iff known eth_minus:
cmchar"Bar";
beginchar(eth_minus,5u#,fig_height#,0);
adjust_fit(1u#,1u#);
pickup rule.nib;
lft z1=(0,.5h); rt z2=(w,.55h); draw z1--z2;
penlabels(0,1,2,3,4,5,6,7); endchar;


iff known eth_space:
cmchar "Old style space (nettib)";
beginchar(eth_space,4u#,fig_height#,0);
adjust_fit(0,0);
pickup fine.nib;
x0=x1=w-1u;  x2=x3=w-3u; y0=.275h; y3=.25h; y1=.425h; y2=.4h;
filldraw z0--z1--z2--z3--cycle;
x4=x5=w-1u;  x6=x7=w-3u; y4=.625h; y7=.6h; y5=.775h; y6=.75h;
filldraw z4--z5--z6--z7--cycle;
penlabels(0,1,2,3,4,5,6,7); endchar;


iff known eth_preface_colon:
cmchar "Preface Colon";
beginchar(eth_preface_colon,9u#,fig_height#,0);
adjust_fit(0,0);
pickup fine.nib;
x0=x1=3u;  x2=x3=1u; y0=.275h; y3=.25h; y1=.425h; y2=.4h;
filldraw z0--z1--z2--z3--cycle;
x4=x5=3u;  x6=x7=1u; y4=.625h; y7=.6h; y5=.775h; y6=.75h;
filldraw z4--z5--z6--z7--cycle;
pickup rule.nib;
lft z11=(w-6u,.5h); rt z12=(w-1u,.55h); draw z11--z12;
penlabels(0,1,2,3,4,5,6,7,11,12); endchar;


iff known eth_three_dot:
cmchar "Three dot question mark";
beginchar(eth_three_dot,4u#,fig_height#,0);
adjust_fit(0,0);
pickup fine.nib;
x0=x1=w-1u;  x2=x3=w-3u; y0=.1h; y3=.075h; y1=.25h; y2=.225h;
filldraw z0--z1--z2--z3--cycle;
x4=x5=w-1u;  x6=x7=w-3u; y4=.45h; y7=.425h; y5=.6h; y6=.575h;
filldraw z4--z5--z6--z7--cycle;
x8=x9=w-1u;  x10=x11=w-3u; y8=.8h; y11=.775h; y9=.95h; y10=.925h;
filldraw z8--z9--z10--z11--cycle;
penlabels(0,1,2,3,4,5,6,7,8,9,10,11); endchar;


iff known eth_seven_dot:
cmchar "Seven dot paragraph terminator";
beginchar(eth_seven_dot,12u#,fig_height#,0);
adjust_fit(0,0);
pickup fine.nib;
x20=x21=3u;  x22=x23=1u; y20=.275h; y23=.25h; y21=.425h; y22=.4h;
filldraw z20--z21--z22--z23--cycle;
x24=x25=3u;  x26=x27=1u; y24=.625h; y27=.6h; y25=.775h; y26=.75h;
filldraw z24--z25--z26--z27--cycle;

x0=x1=7u;  x2=x3=5u; y0=.1h; y3=.075h; y1=.25h; y2=.225h;
filldraw z0--z1--z2--z3--cycle;
x4=x5=7u;  x6=x7=5u; y4=.45h; y7=.425h; y5=.6h; y6=.575h;
filldraw z4--z5--z6--z7--cycle;
x8=x9=7u;  x10=x11=5u; y8=.8h; y11=.775h; y9=.95h; y10=.925h;
filldraw z8--z9--z10--z11--cycle;

x30=x31=11u;  x32=x33=9u; y30=.275h; y33=.25h; y31=.425h; y32=.4h;
filldraw z30--z31--z32--z33--cycle;
x34=x35=11u;  x36=x37=9u; y34=.625h; y37=.6h; y35=.775h; y36=.75h;
filldraw z34--z35--z36--z37--cycle;
penlabels(0,1,2,3,4,5,6,7,8,9,10,11,20,21,22,23,24,25,26,27,
  30,31,32,33,34,35,36,37); 
endchar;


iff known eth_colon:
cmchar "Colon (ie-kete-lale)";
beginchar(eth_colon,7u#,fig_height#,0);
adjust_fit(1u#,1u#);
pickup fine.nib;
x0=x1=w-2.5u;  x2=x3=w-4.5u; y0=.2h; y3=.175h; y1=.35h; y2=.325h;
filldraw z0--z1--z2--z3--cycle;
x4=x5=w-2.5u;  x6=x7=w-4.5u; y4=.7h; y7=.675h; y5=.85h; y6=.825h;
filldraw z4--z5--z6--z7--cycle;
pickup rule.nib;
lft z8=(0,.48h); rt z9=(w,.54h); draw z8--z9;
penlabels(0,1,2,3,4,5,6,7); endchar;


iff known eth_comma:
cmchar"Comma (netela-serez)";
beginchar(eth_comma,5u#,fig_height#,0);
adjust_fit(1u#,1u#);
pickup fine.nib;
x0=x1=w-1.5u;  x2=x3=w-3.5u; y0=.175h; y3=.15h; y1=.325h; y2=.3h;
filldraw z0--z1--z2--z3--cycle;
x4=x5=w-1.5u;  x6=x7=w-3.5u; y4=.525h; y7=.5h; y5=.675h; y6=.65h;
filldraw z4--z5--z6--z7--cycle;
pickup rule.nib;
top lft z8=(0,.85h); top rt z9=(w,.9h); draw z8--z9;
penlabels(0,1,2,3,4,5,6,7); endchar;
