% VCPUNCT - punctuation characters for vicentino fonts
% w. kraml, 1991

%% punctuation marks follow here:
slant:= upperslant;
currenttransform := identity slanted slant;

beginchar(char 0, 2sw#+s#, ch#, dh#); "the paragraph (or alinea) sign";
pickup lower_pen;
x2=x4=.66w; top.y2=h; y6=-dh+th;
bot.y4=-dh+2th; lft.x6=.25s;
path stem;
stem = z2{dir-30}..tension11..
      z4{dir255}..tension1.1..z6;
rt.x1=w-.33s; top.y1=h; lft.x3=.1s;
z5=stem horintersection 2th; y3=.5[y2,y5];
x7=x3+tw; y7=y3; z9=z5+(tw,0);
path p; p=z2{left}..{down}z3..{right}z5 & z5{dir170}..{up}z7..{dir10}z2..cycle;
draw  stem; filldraw p; draw z1--z2; draw z5--z9;
end_char;

beginchar(char 1, 2sw#-1.25s#, ch#, dh#); "the section sign";
pickup lower_pen;
x2=x7=w/2; x3=x8=w-x1=w-x6=tw; lft.x5=w-rt.x4=.4s;
top.y2=h; bot.y7=-dh; y5=y4=.5[y2,y7]; y1=y3=6/7[y7,y2];
y6=y8=1/7[y7,y2];
path tra, trb, upp, lop;
tra= z1{up}..{left}z2..{down}z3..{down}z4;
trb= z8{down}..{right}z7..{up}z6..{up}z5;
z5'=tra horintersection 5/7[y7,y2];
z4'=trb horintersection 2/7[y7,y2];
upp= z1{dir60}..{left}z2..z3..z5'..z4...z4';
lop= z8{dir240}..{right}z7..z6..z4'..z5...z5';
draw upp; draw lop;
end_char;

beginchar(".", 2tw#+s#, th#, 0); "dot";
pickup lower_pen;
bot.z1 = (w/2,0);
dot.z1;
end_char;

beginchar(",", 2tw#+1.5s#, th#, th#); "comma";
pickup lower_pen;
bot.z1 = (w/2+.5s,0);
comma z1;
end_char;

beginchar(":", 2tw#+s#, xh#, 0); "colon";
pickup lower_pen;
bot.z1 = (w/2,0); z2=(w/2, 3/4xh);
dot z1; dot z2;
end_char;

beginchar(";", 2tw#+1.5s#, xh#, 0); "semicolon";
pickup lower_pen;
bot.z1 = (w/2+.5s,0); z2=(w/2, 3/4xh);
comma z1; dot z2;
end_char;

beginchar(char 38, 2sw#+2tw#, ch#, 0); "the ampersand \&";
pickup lower_pen;
x1-.66s=x2+s=x3=x5=.42w; x4=w-2.9tw; rt.x6=w-.5s;
top.y1=h-.75s; y2=.6h; y4=.525h; y6=.7[y4,h]; bot.y3=0;
y4-y5+1.33th=y6-y4;
draw z1{dir130}..{right}z2 &
     z2{left}..{right}z3..tension1.25..{dir215}z4;
path tpart;
tpart=z5 if modern: else: {dir105} fi
      ..z4{dir32}..tension1.25.. if modern: {dir100} else: {dir145}fi z6;
draw if modern: subpath(.2,1.92) of fi tpart;
end_char;

beginchar("$", 2tw#+sw#, ch#, 0); "the  $ (dollar sign)";
pickup lower_pen;
x1=w-1.5s; x3=w-s; x2=tw; x4=.5s;
top.y1=h-th; bot.y4=s;
y2=2/3h; y3=1/3h;
y1'=y1-s; x1'=x1-.25s;
x1''=x4''=w/2; top.y1''=h; bot.y4''=0;
path sstem;
sstem=z1'{dir10}..{up}z1&z1..z1''{left}..z2..tension.8..z3..z4''{left}..z4;
x5=x6=w/2+.5s; bot.y5=h+s; top.y6=-s; draw z5{dir267}..z6;
draw if modern: subpath(.8,6) of fi sstem;
labels(1',1'',4'');
end_char;

beginchar("!", 2tw#+s#, ch#, 0); "exclamation !";
pickup lower_pen;
top.y1=top.y1'=top.y2=h; x1=x3=w/2; lft.x2=x1; y3=1/2xh; x1'=.5[x1,x2];
bot.z4=(w/2,0);
draw z1{dir268}..z3; draw z1---z1'{dir263}..z3;
dot z4;
end_char;

beginchar("?", 3tw#+s#, ch#, 0); "question mark?";
pickup lower_pen;
x1+tw=x2=x3=x4=1.5tw; bot.y4=0;
y3=1/2xh; y2=y3+2th; y1=h-th;
draw z1{dir40}..tension.84..{dir215}z2...z3;
dot z4;
end_char;

beginchar("(", 2tw#+s#, ah#, dh#); "opening parentheses (";
pickup lower_pen;
top.rt.z1=(w-.5s,h); bot.rt.z3=(w-.5s,-dh);
lft.z2=(s,.53[y1,y3]);
draw z1{curl6}..z2..{curl6}z3;
end_char;

beginchar(")", 2tw#+s#, ah#, dh#); "closing parentheses )";
pickup lower_pen;
top.lft.z1=(.5s,h); bot.lft.z3=(.5s,-dh);
rt.z2=(w-s,.53[y1,y3]);
draw z1{curl6}..z2..{curl6}z3;
end_char;

beginchar("[", 2tw#+s#, ah#, dh#); "opening bracket [";
pickup lower_pen;
top.rt.z1=(w-.5s,h); bot.rt.z3=(w-.5s,-dh);
top.lft.z1'=(s,h); bot.lft.z3'=(s,-dh);
draw z1---z1'{dir-80}..tension1.5..{dir-100}z3'---z3;
end_char;

beginchar("]", 2tw#+s#, ah#, dh#); "closing bracket ]";
pickup lower_pen;
top.lft.z1=(.5s,h); bot.lft.z3=(.5s,-dh);
top.rt.z1'=(w-s,h); bot.rt.z3'=(w-s,-dh);
draw z1---z1'{dir-100}..tension1.5..{dir-80}z3'---z3;
end_char;

beginchar("/", 2tw#, ah#, dh#); "the virgule (/)";
pickup lower_pen;
top.rt.z1=(w-.5s,h); bot.lft.z2=(.5s,-dh);
draw z1{dir-40}..tension8..{dir-40}z2;
end_char;

beginchar(char 35, 2sw#+.75s#, ch#, 0); "number sign";
pickup lower_pen;
top.lft.z1=(2tw,h);
bot.lft.z2=(.5tw,0);
top.rt.z3=(w-.5tw,h);
bot.rt.z4=(w-2tw,0);
draw z1--z2; draw z3--z4;
lft.x5=lft.x7=0; rt.x6=rt.x8=w;
y5=y6=.62h; y7=y8=.38h;
draw z5--z6; draw z7--z8;
end_char;

beginchar(char 37, 2sw#+.25s#, ch#, 0); "percent sign";
pickup lower_pen;
top.z1=(1.3tw,h-.7th); bot.z2=(1.3tw,h-4.6th);
draw z1{left}..z2{right}..cycle;
top.z3=(w-1.3tw,3.9th); bot.z4=(w-1.3tw,0);
draw z3{left}..z4{right}..cycle;
top.rt.z5=(w-.5s,h); bot.lft.z6=(.5s,-1.5th);
draw z2{right}..{z5-z6}z5 & z5--z6;
end_char;

beginchar("+", 1/3size#, xh#, 0); "plus";
pickup lower_pen;
numeric axis;
axis=.5[-dh,ah];
z1 = (s,axis); z2 = (w-s,axis);
draw z1--z2;
z3=(w/2,axis+(x2-x1)/2); z4=(w/2,axis-(x2-x1)/2);
draw z3--z4;
end_char;

beginchar(char 123, 1/3size#, xh#, 0); "minus";
pickup lower_pen;
numeric axis;
axis=.5[-dh,ah];
z1 = (s,axis); z2 = (w-s,axis);
draw z1..z2;
end_char;

beginchar(char 42, .4size#, xh#, 0); "asterisk";
pickup lower_pen;
%pickup cap_serif_pen; 
z0=(w/2,xh);
z1 = (s,xh); z2 = (w-s,xh);
draw z1..z2;
z3 = z1 rotatedaround (z0, 60);
z5 = z1 rotatedaround (z0, 120);
z4 = z2 rotatedaround (z0, 60);
z6 = z2 rotatedaround (z0, 120);
draw z3..z4; draw z5..z6;
end_char;

beginchar("-", 2tw#+s#, xh#, 0); "hyphen";
pickup lower_pen;
z1 = (.75s,.4h); z2 = (w-.75s,.6h);
draw z1{dir55}.. {dir-5}.5[z1,z2]{curl0}..z2{dir55};
end_char;

beginchar(char 124, 8/10size#, xh#, 0); "em rule";
pickup lower_pen;
numeric axis;
axis=.5[-dh,ah];
z1 = (2.75s,axis); z2 = (w-2.75s,axis);
z1'= (s,axis-s);  z2'= (w-s, axis+s);
draw z1'{dir35}..z1{right}..{right}z2..{dir35}z2';
end_char;


% quote characters and trema have lowercase slant
% some others as well
slant:=lowerslant;
currenttransform := identity slanted slant;


beginchar(char 39, 3.5tw#, ch#, 0); "punctuation ' ";
pickup lower_pen;
z1=(1.75tw,h);
comma z1;
end_char;

beginchar(char 34, 5tw#, ch#, 0); "punctuation '' ";
pickup lower_pen;
z1=(1.75tw,h); z2=(w-1.75tw,h);
comma z1; comma z2;
end_char;

beginchar(char96, 3.5tw#, ch#, 0); "punctuation ` ";
pickup lower_pen;
z1=(1.75tw,h-s);
revcomma z1;
end_char;

beginchar(char 92, 5tw#, ch#, 0); "punctuation `` ";
pickup lower_pen;
z1=(1.75tw,h-s); z2=(w-1.5tw,h-s);
revcomma z1; revcomma z2;
end_char;

beginchar(char 127, 5/18size#, 17/30 size#, 0); "trema (umlaut)";
pickup lower_pen;
top.lft.z1 = (s,h-s); top.rt.z2=(w,h-s); 
dot z1; dot z2;
end_char;

beginchar(char 95, 3/18size#, 17/30 size#, 0); "dot accent";
pickup lower_pen;
top.z1 = (w/2,h-.2s);
dot z1;
end_char;

beginchar(char 16, 2tw#+.5s#, xh#, 0); "dotless i";
pickup lower_pen;
x2=x3=w/2; lft.x1=.1s; rt.x4=w-.1s; y1=h-th; top.y2=h; bot y3=0; y4=th;
path stem;
stem = z1{dir40}..tension2..z2..tension5..z3..tension2..
      {dir40}z4;
draw if modern: subpath(0.8,2.2) of fi stem;
end_char;

beginchar(char 17, 2tw#+.5s#, xh#, dh#); "dotless j";
pickup lower_pen;
x2=w/2; lft x1=0; x4=w/2-.1s; y1=h-th; top.y2=h; bot.y6=-dh+.33th;
bot.y4=-dh+1.1th; x6=.1s;
path stem;
stem = z1{dir40}..tension2..z2..tension4.5..
      z4..tension.825..{dir133.5}z6;
draw if modern: subpath(0.8, 2.72) of fi stem;
end_char;

beginchar(char 64, 4tw#+sw#, ch#, 0); "the at-sign";
pickup lower_pen;
x1=x2=w-2tw; y1=y5=xh;
rt. x3=w-tw; y3=3th; bot.y6=bot.y2=2th;
lft x5=2.5tw; lft x6=2.25tw;
x7=x9=w/2; y7=xh+2.9th; y9=0; lft.x8=.33s; y8=h/2; rt.x10=w-.25s; y10=1.3th;
path rightstem; rightstem =  z1..tension6.7 ..z2..tension2..{dir35}z3
      ..{left}z7..{down}z8..{right}z9..{dir36}z10;
z4 = rightstem horintersection .7xh;
draw if modern: subpath(0,5.92) of fi rightstem;
draw z4..tension3..z5..tension2.5..z6{right}..tension1.75..{up}z4;
end_char;

beginchar(char 20, 6/18size#, 17/30size#, 0); "hatchek";
pickup lower_pen;
lft.z1=(.5s,h+1.25s); rt.z3=(w-.25s,h+1.25s); z2=(.55[x1,x3],h-.5s);
draw z1{right}..tension1.5..z2 & z2..tension1.5..{right}z3;
end_char;

beginchar(char 21, 6/18size#, 17/30size#, 0); "breve accent";
pickup lower_pen;
lft.z1=(.5s,h+1.25s); rt.z3=(w-.25s,h+1.25s); 
draw z1{down}..{up}z3;
end_char;

beginchar(char 22, 6/18size#, 17/30size#, 0); "macron";
pickup lower_pen;
lft.z1=(.5s,h); rt.z3=(w-.25s,h); 
draw z1--z3;
end_char;

beginchar(char 23, 1.5sw#, 17/30size#, 0); "circle accent";
pickup lower_pen;
rt.z1=(2.5s,h+s); lft.z3=(w-2.4s,h+s); 
draw z1{down}..{up}z3..cycle;
end_char;

beginchar(char 24, 5/18size#, 0, 2/3dh#); "cedilla";
pickup lower_pen;
z1=(w/2, 0); z2=(w/2, -1/4dh); z3=(w/3, -2/3dh);
draw z1---z2{right}..tension.8..{left}z3;
end_char;

beginchar("^", 6/18size#, 17/30size#, 0); "circumflex";
pickup lower_pen;
top.lft.z1=(.5s,h); top.rt.z3=(w-.25s,h); z2=(.55[x1,x3],h+1.35s);
draw z1{right}..tension1.5..z2 & z2..tension1.5..{right}z3;
end_char;

beginchar("~", 6/18size#, 17/30size#, 0); "tilde";
pickup lower_pen;
top.lft.z1=(.33s,h); top.rt.z4=(w,h+.85s); 
x2=1/3[x1,x4]; x3=2/3[x1,x4];
y2=y4; y1=y3;
draw z1{dir36}..z2..z3..{dir36}z4;
end_char;

