% Syriac Serto FONT `sertofont.mf'
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Designed and (c) by Johannes Heinecke
%                     <johannes(dot)heinecke(at)wanadoo(dot)fr>
% Please send any improvements, corrections, suggestions, enhancements etc.
% to the Author!
%
% Version 0.7 as of 29th September 2007
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%

input sertomacros;

%% Endarabeske f�r beth etc
%def arabesque (suffix $)(expr length) =
%  z$aa = (x$, y$-.5basestroke);
%  z$ac = (x$, y$+.5basestroke);
%  z$ab = (x$-length*hu, y$aa);
%  z$ad = (x$-(length-.2)*hu, y$ac);
%  z$ae = (x$ab-hu, y$ad+vu);
%  fill z$aa--z$ab{left}..{up}z$ae{dir -45}..{right}z$ad--z$ac--cycle;
%  labels($aa, $ab, $ac, $ad, $ae);
%enddef;
%
%% baseline, if needed
%def baseline (suffix $)(expr length) =
%  z$bz = z$;  % to allow several baselines from one point
%  z$ba = (x$, y$-.5basestroke);
%  z$bc = (x$, y$+.5basestroke);
%  z$bb = (x$-length*hu, y$ba);
%  z$bd = (x$-length*hu, y$bc);
%  fill z$ba--z$bb--z$bd--z$bc--cycle;
%  labels($ba, $bb, $bc, $bd);
%enddef;
%
%% dalath/resh dot
%def sertodot (suffix $) (expr size) =
%  z$ca = (x$-.3hu, y$+.4vu); penpos$ca(size*basestroke, 45);
%  z$cb = (x$+.3hu, y$-.4vu); penpos$cb(size*basestroke, 45);
%  penstroke z$ca.e..z$cb.e;
%  labels($ca, $cb)
%enddef;
%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Character Definitions: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Order: alphabetically, isolated-final-medial-initial

% olaf - isolated
sertochar "olaf - isolated '";
beginchar(65, 2hu#, 8vu#, 0);
   z1 = (.5hu, 0); penpos1(basestroke, 0);
   z2 = (.4hu, 2vu); penpos2(.9basestroke, 0);
   z3 = (hu, 5vu); penpos3(.5basestroke, 10);
   %z4 = (.4hu, 7.5vu); penpos4(basestroke, 45);
   z4 = (.4hu, 7.5vu); penpos4(1.2basestroke, 45);
   penstroke z1e..z2e..z3e..z4e;
   penlabels(range 1 thru 4);
endchar;

% olaf - final
sertochar "olaf - final '";
beginchar(66, 2hu#, 8vu#, 0);
   %z1 = (2hu, .5vu); penpos1(basestroke, 90);
   %z2 = (1.1hu, 1.1vu); penpos2(.9basestroke, 40);
   %z3 = (.5hu, 4vu); penpos3(.7basestroke, 0);
   %z4 = (.5hu, 8vu); penpos4(.7basestroke, 0);
   %z5r = z2l;
   %z5l = (0, y2l);
   %z6 = (-.3hu, -vu); penpos6(.4basestroke, -45);
   %penstroke z1e{left}..z2e..z3e..z4e;
   %penstroke z4e..z3e..z5e..z6e;

   z1 = (2hu, .5vu); penpos1(basestroke, 90);
   z2 = (x1-1.5hu, 2.5vu); penpos2(basestroke, 0);
   z3 = (x2, 4.5vu); penpos3(basestroke, 0);
   z4l = z3l + (0, 3.2vu);
   z4r = z3r + (0, 3.8vu);
   z14l = z13l + (0, 3.8vu);
   z14r = z13r + (0, 3.2vu);


   z6 = (-.8hu, -1.5vu); penpos6(.2basestroke, -45);

   penstroke z4e..z3e..z2e{down}..{right}z1e;
   penstroke z2e{down}..z6e;
   %penstroke z4e..z3e..z5e..z6e;
   penlabels(range 1 thru 6);
endchar;


def bethcommon =
   z1 = (6hu, .5vu); penpos1(basestroke, -90);
   %z2 = (x1+.5hu, 4vu/3); penpos2(basestroke, 30);
   z2 = (x1+.5basestroke, 4basestroke/3); penpos2(basestroke, 30);
   z4 = (3hu, 3.4vu); penpos4(basestroke, 90);
   z5 = (.7hu, 2.5vu); penpos5(.45basestroke, 135);
   penstroke z1e{right}..z2e..z4e..z5e;
   penlabels(range 1 thru 5);
enddef;

% beth - isolated
sertochar "beth - isolated b";
beginchar(67, 8hu#, 4vu#, 0);
   bethcommon;
   arabesque(1, 5);
endchar;

% beth - final
sertochar "beth - final b";
beginchar(68, 8hu#, 4vu#, 0);
   bethcommon;
   baseline(1, -2);
   arabesque(1, 5);
endchar;

% beth - medial
sertochar "beth - medial b";
beginchar(69, 8hu#, 4vu#, 0);
   bethcommon;
   z6 = z1;
   baseline(1, 6);
   baseline(6, -2);
   penlabels(6);
endchar;

% beth - initial
sertochar "beth - initial b";
beginchar(70, 8hu#, 4vu#, 0);
   bethcommon;
   baseline(1, 6);
endchar;



def gammalcommon =
   z1 = (2.5hu, 1.25vu); penpos1(basestroke, -135);
   z3 = (7.25hu, -2.25vu); penpos3(.6basestroke, -120);
   %z4r = z3r;
   z5r = z3r;
   %z4l = (x4r+1.5hu, y4r);
   z5l = (x5r, y5r-.7hu);
   z6 = (3.5hu, -1.45vu); penpos6(.8basestroke, 45);
   %z7 = (hu, .5vu);
   z7l = (hu, -.3hu);
   penpos7(.9basestroke, 50);

   penstroke z1e{dir -45}..z3e;
   penstroke z3e{dir -32}..z5e;
   penstroke z5e{left}..z6e..z7e;

   penlabels(range 1 thru 7);
enddef;

def gammalarabesque =
   z8 = (x7l, 2.5vu);
   fill z7l{z7l-z6l}..z8 & z8{dir -100}..{z6r-z7r}z7r--cycle;
   penlabels(8)
enddef;
%endinput;
% gamal - isolated
sertochar "gamal - isolated g";
beginchar(71, 7hu#, 1vu#, 3vu#);
   gammalcommon;
   gammalarabesque;
endchar;

% gamal - final
sertochar "gamal - final g";
beginchar(72, 7hu#, 1vu#, 3vu#);
   gammalcommon;
   gammalarabesque;

   z9 = (4hu, .5vu); penpos9(basestroke, -90);
   baseline(9, -3);
   penstroke z9e{left}..z1e;

   penlabels(9);
endchar;

% gamal - medial
sertochar "gamal - medial g";
beginchar(73, 7hu#, 1vu#, 3vu#);
   gammalcommon;
   z8 = (0, .5vu); penpos8(basestroke, 90);
   penstroke z7e{z7e-z6e}..{left}z8e;
   z9 = (4hu, .5vu); penpos9(basestroke, -90);
   baseline(9, -3);
   penstroke z9e{left}..z1e;

   penlabels(9);
   penlabels(8)
endchar;


% gamal - initial
sertochar "gamal - initial g";
beginchar(74, 7hu#, 1vu#, 3vu#);
   gammalcommon;
   z8 = (0, .5vu); penpos8(basestroke, 90);
   penstroke z7e{z7e-z6e}..{left}z8e;
   penlabels(8)
endchar;


def dr_isolated_common =
   %z1 = (.5hu, -1vu);
   z2 = (2.5hu, 2vu);
   z3 = (1hu, 4vu);
   z4 = (0, 2.5vu);
   z5 = (1hu, 1vu);
   z1 = (.6hu, -.7vu);
   %fill z4{down}..z5..{dir -135}z1
   % & z1{dir 45}..z2{up}..z3{left}..cycle;
   fill z4{down}..z5..{dir -115}z1{dir 45}..z2{up}..z3{left}..cycle;
   penlabels(range 1 thru 5);

enddef;

% dalath - isolated
sertochar "dalath - isolated d";
beginchar(75, 4hu#, 4vu#, 2vu#);
   dr_isolated_common;
   z6 = (1hu, y1-1.2vu);
   sertodot(6, 1);
   penlabels(6);
endchar;


def dr_final_common =
   z1 = (3.5hu, .5vu); penpos1(basestroke, 90);
   z2 = (hu, 1.5vu); penpos2(1.2basestroke, 45);
   penstroke z1e{left}..z2e;

   z3 = (x2r, -vu);
   %fill z2r{dir -80}..z3 & z3..{dir 130}z2l--cycle;
   fill z2r{dir -80}..{right}z1r & z1r--z1l
    & z1l{left}..z3 & z3..{dir 130}z2l--cycle;

   penlabels(range 1 thru 3);
enddef;

% dalath - final
sertochar "dalath - final d";
beginchar(76, 3.5hu#, 2vu#, 3vu#);
   dr_final_common;
   z4 = (x3, y3-1.2vu);
   sertodot(4, 1);
   penlabels(4);
endchar;





def heecommon =
   z1 = (5.5hu, 0); penpos1(.2basestroke, 0);
   z2 = (6hu, 2.8vu); penpos2(.6basestroke, 0);
   z3 = (5.5hu, 4.5vu); penpos3(basestroke, 90);
   z4 = (2.5hu, .5vu); penpos4(basestroke, 90);
   z5 = (.2hu, y2); penpos5(.5basestroke, 0);
   z6 = (x4, y3); penpos6(basestroke, -90);
   z7 = (5hu, 3vu); penpos7(.9basestroke, -135);
   penstroke z1e..z2e..z3e & z3e{dir -105}..z4e..z5e..z6e..z7e;
   penlabels(range 1 thru 7);
enddef;


% he isolated
sertochar "he - isolated h";
beginchar(77, 7hu#, 5vu#, 0);
   heecommon;
endchar;

% he final
sertochar "he - final h";
beginchar(78, 7.5hu#, 5vu#, 0);
   heecommon;
   z8 = (x1+.5hu, 2vu); penpos8(basestroke, 90);
   z9 = (x1+2hu, .5vu); penpos9(basestroke, 90);
   penstroke z8e..{right}z9e;
   penlabels(8, 9);
endchar;

def wawcommon (suffix $) =
   pickup serto_pen;
   bot z$a = (x$ + 2hu, y$);
   lft z$b = (x$, y$ + 2vu);
   top z$c = (x$a, y$ + 5vu);
   rt z$d = (x$ + 4hu, y$ + 2vu);
   draw z$a..z$b..z$c..z$d..cycle;

   penlabels($a, $b, $c, $d);
enddef;


% waw isolated
sertochar "waw - isolated w";
beginchar(79, 5hu#, 5vu#, 0);
   z1 = (0, 0);
   wawcommon(1);
endchar;

% waw final
sertochar "waw - final w";
beginchar(80, 5hu#, 5vu#, 0);
   z1 = (0, 0);
   wawcommon(1);
   z5 = (.6[x1a,x1d], vu); penpos5(basestroke, 50);
   z6 = (5hu, .5vu); penpos6(basestroke, 90);
   penstroke z6e{left}..z5e;
   penlabels(5, 6);
endchar;




% o-waw isolated
sertochar "waw - isolated o";
beginchar(159, 5hu#, 5vu#, 0);
   z1 = (0, 0);
   wawcommon(1);
   z7 = (x1c, 7hu);
   sertodot(7, 1);
endchar;

% o-waw final
sertochar "waw - final o";
beginchar(160, 5hu#, 5vu#, 0);
   z1 = (0, 0);
   wawcommon(1);
   z5 = (.6[x1a,x1d], vu); penpos5(basestroke, 50);
   z6 = (5hu, .5vu); penpos6(basestroke, 90);
   z7 = (x1c, 7hu);
   sertodot(7, 1);

   penstroke z6e{left}..z5e;
   penlabels(5, 6, 7);
endchar;



def zaincommon =
   z1 = (2hu, .5vu); penpos1(basestroke, 90);
   z2 = (1.1hu, 1.1vu); penpos2(.9basestroke, 40);
   z3 = (.5hu, 4vu); penpos3(.7basestroke, 0);
   z5r = z2l;
   z5l = (0, y2l);
   z6 = (-.3hu, -1.3vu); penpos6(.3basestroke, -45);

   penstroke z3e{down}..z5e..z6e;
   penlabels(range 1 thru 6);
enddef;

% zain - isolated
sertochar "zain - isolated z";
beginchar(81, 2hu#, 4vu#, 1.5vu#);
   zaincommon;
endchar;

% zain - final
sertochar "zain - final z";
beginchar(82, 2hu#, 4vu#, 1.5vu#);
   zaincommon;
   penstroke z1e..z2e..{up}z3e;
endchar;

def hhethcommon (expr xoffs, init) =
   if init = 1:
      z1 = (xoffs + 3.8hu, 2.4vu);
      z11 = (xoffs + 4.5hu, 2.2vu);
   else:
      z1 = (xoffs + 4.3hu, 2.6vu);
      z11 = (xoffs + 4.7hu, y1);
   fi;

   %z1 = (xoffs + 4.5hu, 2.6vu); penpos1(.2basestroke, 0);
   %z3 = (x1-3hu, y1); penpos3(.2basestroke, -180);
   %z2 = (.5[x3,x1], .5vu); penpos2(basestroke, -90);
   %z4 = (1.5[x1,x3], y2); penpos4(basestroke, -270);
   %penstroke z1e{down}..z2e..{up}z3e;
   %penstroke z3e{down}..{left}z4e;

   z2 = (xoffs + 3hu, (vu-basestroke)/2);
   z3 = (xoffs + 1.5hu, .5vu);
   z4 = (xoffs, y2);
   z5 = (x4, y2+basestroke);
   z6 = (x3-.2basestroke, 2.6vu);
   z7 = (x3+.2basestroke, y6);
   z8 = (x2, y5);
   if init = 0:
      z12 = (xoffs+6hu, y5);
      z13 = (x12, y2);
      z14 = (xoffs+4.5hu, y3);
      fill z11{down}..{right}z12--z13{left}..z14 &
           z14..z2{left}..z3 &
           z3..{left}z4--z5{right}..{up}z6--z7{down}..{right}z8..z1--cycle;
   else:
      fill z11..z2{left}..z3 &
           z3..{left}z4--z5{right}..{up}z6--z7{down}..{right}z8..z1--cycle;
   fi;

   penlabels(range 1 thru 14);
enddef;

% .heth isolated
sertochar ".heth - isolated .h";
beginchar(83, 6.8hu#, 3vu#, 0);
   hhethcommon(1.2hu, 1);
   z10 = (.5[z4,z5]);
   arabesque(10, .2);
endchar;

% .heth final
sertochar ".heth - final .h";
beginchar(84, 7.2hu#, 3vu#, 0);
   hhethcommon(1.2hu, 0);
   z10 = (.5[z4,z5]);
   arabesque(10, .2);
endchar;

% .heth medial
sertochar ".heth - medial .h";
beginchar(85, 6hu#, 3vu#, 0);
   hhethcommon(0hu, 0);
endchar;

% .heth initial
sertochar ".heth - initial .h";
beginchar(86, 5.5hu#, 3vu#, 0);
   hhethcommon(0hu, 1);
endchar;



def tethcommon (expr xoffs) =
   z1 = (xoffs+3.5hu, 8vu); penpos1(basestroke, 0);
   z2 = (x1-1.5hu, 1.5vu); penpos2(.5basestroke, 0);
%    z3 = (x1-3hu, -3vu); penpos3(basestroke, 0);
%    z4 = (x1-hu, -4.5vu); penpos4(.7basestroke, 90);
   z4 = (x1-hu, -3.5vu); penpos4(.7basestroke, 90);
   z3 = (x1-3hu, y4+1.5vu); penpos3(basestroke, 0);
   z5 = (x1+.5hu, 0); penpos5(basestroke, 225);
   z6 = (x2, .5vu); penpos6(basestroke, 270);
   z7 = (xoffs, .5vu); penpos7(basestroke, 270);
   penstroke z1e{down}..z2e..z3e..z4e..z5e..{left}z6e..z7e;

   penlabels(range 1 thru 7);
enddef;

% .teth isolated
sertochar ".teth - isolated .t";
beginchar(87, 6.2hu#, 8vu#, 4vu#);
   tethcommon(1.2hu);
   arabesque(7, .2);
endchar;

% .teth final
sertochar ".teth - final .t";
beginchar(88, 8.2hu#, 8vu#, 4vu#);
   tethcommon(1.2hu);
   arabesque(7, .2);
   z8 = (8.2hu, .5vu); penpos8(basestroke, 90);
   penstroke z8e{left}..{up}z1e;
endchar;

% .teth medial
sertochar ".teth - medial .t";
beginchar(89, 7hu#, 8vu#, 4vu#);
   tethcommon(0hu);
   z8 = (7hu, .5vu); penpos8(basestroke, 90);
   penstroke z8e{left}..{up}z1e;
endchar;

% .teth initial
sertochar ".teth - initial .t";
beginchar(90, 5hu#, 8vu#, 4vu#);
   tethcommon(0hu);
endchar;



def iodhcommon (expr xoffs) =
   z1 = (xoffs, .5(vu-basestroke));
   z2 = (x1, .5(vu+basestroke));
   z21 = (x1-1hu, y2);
   z3 = (x1+hu, 2.5basestroke);
   z4 = (x1+2hu, y2);
   z5 = (x1+2.2hu, .5vu);
   z6 = (x1+1.5hu, y1);

   fill z1--z21{right}..z3--z4{z4-z3} % ..z5{down}
          ..{left}z6--cycle;

   penlabels(range 1 thru 21);
enddef;

% iod isolated
sertochar "iod - isolated y";
beginchar(105, 6hu#, 2.5vu#, 0);
   iodhcommon(3hu);
   z7 = (.5[z1, z2]);
   %baseline(7, 1)
   arabesque(7, 2);
endchar;

% iod final
sertochar "iod - final y";
beginchar(106, 6hu#, 2.5vu#, 0);
   iodhcommon(3hu);
   z8 = (.5[z1, z2]);
   arabesque(8, 2);

   z7 = (x1 + 1.5hu, .5[y1, y2]);
   baseline(7, -1.5)
endchar;

% iod medial
sertochar "iod - medial y";
beginchar(107, 4hu#, 2.5vu#, 0);
   iodhcommon(1hu);
   z8 = (.5[z1, z2]);
   baseline(8, 1)
   z7 = (x1 + 1.5hu, .5[y1, y2]);
   baseline(7, -1.5)
endchar;

% iod initial
sertochar "iod - initial y";
beginchar(108, 4hu#, 2.5vu#, 0);
   iodhcommon(1hu);
   z7 = (.5[z1, z2]);
   baseline(7, 1)
endchar;



% kaf - isolated
sertochar "kaf - isolated k (needs improvement)";
beginchar(109, 6hu#, 2.5vu#, 3vu#);
   z1 = (3hu, (vu-basestroke)/2);
   z2 = (x1, .5vu+.5basestroke);
   z21 = (x1-hu, y2);
   z3 = (x1+hu, 2.5basestroke);
   z4 = (x1+2hu, y2);
   z5 = (x1+2.2hu, .5basestroke);
   z6 = (x1+1.5hu, y1);

   fill z1--z21{right}..z3--z4{z4-z3} % ..z5{down}
          ..{left}z6--cycle;
   z7 = (x1, .5vu);
   arabesque(7, 2);

   z8 = (3.5[z3, z2]);
   z9 = (x8+.2hu, y8-.2vu);
   fill z2--z8--z9--z4--cycle;
   penlabels(range 1 thru 9);
endchar;

% kaf - final
sertochar "kaf - final k (needs improvement)";
beginchar(110, 6hu#, 2.5vu#, 3vu#);
   z1 = (3hu, 0);
   z2 = (x1, .5vu+.5basestroke);
   z21 = (x1-hu, y2);
   z3 = (x1+hu, 2.5basestroke);
   z4 = (x1+2hu, y2);
   z5 = (x1+2.2hu, .5basestroke);
   z6 = (x1+1.5hu, 0);

   fill z1--z21{right}..z3--z4{z4-z3} % ..z5{down}
          ..{left}z6--cycle;

   z7 = (x1, .5vu);
   arabesque(7, 2);
   baseline(7, -3);

   z8 = (3.5[z3, z2]);
   z9 = (x8+.2hu, y8-.2vu);
   fill z2--z8--z9--z4--cycle;
   penlabels(range 1 thru 21);
endchar;


def kafcommon =
   z1 = (1.5hu, 2vu); penpos1(basestroke, 0);
   z3 = (5.5hu, y1+.5hu); penpos3(basestroke, -180);
   z2 = (.5[x1,x3], 4vu); penpos2(.4basestroke, -90);
   z4 = (x2+hu, .5vu); penpos4(basestroke, -270);
   penstroke z1e{up}..z2e..z3e..{left}z4e;
   penlabels(range 1 thru 5);
enddef;

% kaf - medial
sertochar "kaf - medial k";
beginchar(111, 7hu#, 4vu#, 0);
   kafcommon;
   z5 = (7hu, y4);
   baseline(5, 7)
endchar;

% kaf - initial
sertochar "kaf - initial k";
beginchar(112, 7hu#, 4vu#, 0);
   kafcommon;
   baseline(4, 4.5)
endchar;




def lamadfinalcommon =
   z1 = (.5hu, 7vu); penpos1(basestroke, 40);
   z2 = (6.5hu, 1vu); penpos2(basestroke, 40);
   z3 = (9hu, 1vu); penpos3(.2basestroke, 120);

   z4 = (x1+3hu, y1); penpos4(basestroke, 40);
   z5 = (x2+3hu, y2); penpos5(basestroke, 40);

   penstroke z1e--z2e{z2-z1}..z3e;
   penstroke z4e--z5e;

   penlabels(range 1 thru 5);
enddef;


sertochar "lamad - isolated";
beginchar(113, 11.5hu#, 7vu#, 0);
   lamadfinalcommon;
   z6 = (whatever[z4, z5]); penpos6(basestroke, 40);
   y6l = 0;
   penstroke z5e--z6e;
   penlabels(6);
endchar;

sertochar "lamad - final";
beginchar(114, 10.5hu#, 7vu#, 0);
   lamadfinalcommon;
   z6 = (x5+1hu, .5vu); penpos6(basestroke, 90);
   penstroke z5e{z5-z4}..z6e;
   penlabels(6);
endchar;


def lamadnonfinalcommon =
   z1 = (.5hu, 7vu); penpos1(basestroke, 40);
   z2 = (5hu, 1vu); penpos2(basestroke, 40);
   penstroke z1e--z2e;

   penlabels(range 1 thru 2);
enddef;

sertochar "lamad - medial";
beginchar(115, 6.5hu#, 7vu#, 0);
   lamadnonfinalcommon;
   z3 = (6.5hu, .5vu); penpos3(basestroke, 90);
   % penstroke z2e{z2-z1}..{right}z3e;
   % z1e--z2e is already drawn in Cainnonfinalcommon
   % we redraw it to avoit some white pixel on z2e.
   penstroke z1e--z2e..{right}z3e;

%    z4 = (whatever[z1l, z2l]); penpos4(basestroke, 90);
%    y4l = .5(vu-basestroke);
%    z5 = (0, .5vu); penpos5(basestroke, 90);
%    penstroke z4e--z5e;

   z10 = (x2-1.5hu, basestroke+.5vu);
   z4 = (whatever[z1, z2]); penpos4(basestroke, 40);
   z10 = (whatever[z4r, z4l]);
   z5 = (x10, .5vu); penpos5(basestroke, -90);
   z6 = (0, .5vu); penpos6(basestroke, -90);
   penstroke z4e..{left}z5e..z6e;

   penlabels(3, 4, 5, 6, 10);
endchar;

sertochar "lamad - initial";
beginchar(116, 7hu#, 7vu#, 0);
   lamadnonfinalcommon;
   z3 = (whatever[z1, z2]); penpos3(basestroke, 40);
   y3l = .5(vu-basestroke);
   penstroke z2e--z3e;

%    z4 = (whatever[z1l, z3l]); penpos4(basestroke, 90);
%    y4l = y3l;
%    z5 = (0, .5vu); penpos5(basestroke, 90);
%    penstroke z4e--z5e;

   z10 = (x2-1.5hu, basestroke+.5vu);
   z4 = (whatever[z1, z3]); penpos4(basestroke, 40);
   z10 = (whatever[z4r, z4l]);
   z5 = (x10, .5vu); penpos5(basestroke, -90);
   z6 = (0, .5vu); penpos6(basestroke, -90);
   penstroke z4e..{left}z5e..z6e;
   penlabels(3, 4, 5, 6, 10);
endchar;

def mimcommon (expr final, exOne) =
%    z1 = (.5hu, 4.5vu); penpos1(basestroke, 45);
%    z2 = (5hu, .5vu); penpos2(basestroke, 90);
%    z3 = (7hu, 2.25vu); penpos3(.5basestroke, 180);
%    z4 = (x2, 4vu); penpos4(basestroke, 270);
%    if final = 0:
%       z5 = (3hu, y3); penpos5(.5basestroke, 360);
%    else:
%       z5 = (2.5hu, 2vu); penpos5(basestroke, 315);
%    fi;
%    z7 = (3hu, 1.5vu); penpos7(basestroke, 45);
%
%    z6 = (1hu, -3vu); penpos6(.4basestroke, 315);

   z1 = (exOne, 4.5vu); penpos1(basestroke, 45);
   z2 = (x1+4.5hu, .5vu); penpos2(basestroke, 90);
   z3 = (x2+2hu, 2.25vu); penpos3(.5basestroke, 180);
   z4 = (x2, 4vu); penpos4(basestroke, 270);
   if final = 0:
      z5 = (x1+2.5hu, y3); penpos5(.5basestroke, 360);
   else:
      z5 = (x1+2hu, 2vu); penpos5(basestroke, 315);
   fi;
   z7 = (x1+2.5hu, 1.5vu); penpos7(basestroke, 45);

   z6 = (x1+.5hu, -3vu); penpos6(.4basestroke, 315);


   if final = 0:
      penstroke z1e--z7e{z7-z1}..z2e{right}..z3e{up}..z4e{left}..z5e..{right}z2e;
   else:
      penstroke z1e--z7e{z7-z1}..z2e{right}..z3e{up}..z4e{left}..{z6-z5}z5e;
   fi;
   penlabels(range 1 thru 7);
enddef;

sertochar "mim - isolated";
beginchar(117, 8hu#, 4.5vu#, 3vu#);
   mimcommon(1, 0.5hu);
   penstroke z5e--z6e;
endchar;

sertochar "mim - final";
beginchar(118, 8hu#, 4vu#, 1vu#);
   mimcommon(1, 0.5hu);
   penstroke z5e--z6e;
   baseline(2, -3);
endchar;

sertochar "mim - medial";
beginchar(119, 8hu#, 4vu#, 0);
   mimcommon(0, 0.5hu);
   z8 = (0, y2);
   baseline(8, -8);
endchar;

sertochar "mim - initial";
beginchar(120, 8.5hu#, 4vu#, 0);
   mimcommon(0, 1hu);
   baseline(2, 5.5);
endchar;



def nunnonfinalcommon =
   z1 = (1.25hu, 4vu); penpos1(1.1basestroke, 20);
   z2 = (1.5hu, 1.1vu); penpos2(basestroke, 0);
   z3 = (0.9hu, .5vu); penpos3(basestroke, -90);
   z4 = (0, .5vu); penpos4(basestroke, -90);

   penstroke z1e{down}..{down}z2e..{left}z3e--z4e;
   penlabels(range 1 thru 4);
enddef;

sertochar "nun - isolated";
beginchar(121, 3.5hu#, 1vu#, 4vu#);
   z1 = (.5hu, .5vu); penpos1(1.3basestroke, 42);
   z2 = (x1+1.5hu, -2vu); penpos2(basestroke, 45);
   z3 = (x1+5hu, -4.2vu); penpos3(.4basestroke, 80);
   penstroke z1e..z2e..z3e;
   penlabels(range 1 thru 3);
endchar;

sertochar "nun - final";
beginchar(122, 5hu#, 1vu#, 4vu#);
   z1 = (.5hu, 0vu); penpos1(basestroke, 0);
   z4 = (1.1hu, .5vu); penpos4(basestroke, -90);
   z2 = (1.5hu, -2vu); penpos2(basestroke, 45);
   z3 = (5hu, -4.2vu); penpos3(.25basestroke, 80);
   penstroke z1e..z2e..z3e;
   penstroke z4e{left}..z1e;
   baseline(4, -3.9);
   penlabels(range 1 thru 4);
endchar;

sertochar "nun - medial";
beginchar(129, 3hu#, 4vu#, 0);
   nunnonfinalcommon;
   baseline(4, -3);
endchar;

sertochar "nun - initial";
beginchar(130, 3hu#, 4vu#, 0);
   nunnonfinalcommon;
endchar;




%def qofsemkathcommon (expr xoffs) =
%    z1 = (xoffs+2hu, .5vu); penpos1(basestroke, -90);
%    z2 = (x1+1.25hu, 2vu); penpos2(.5basestroke, 0);
%    z3 = (x1, y1+3.5hu); penpos3(basestroke, 90);
%    z4 = (xoffs+.25hu, y2); penpos4(basestroke, -180);
%
%    penstroke z1e..z2e..z3e..z4e..{right}cycle;
%    penlabels(range 1 thru 4);
%enddef;

def penpoint (suffix $) (expr xval, yval, large, angle) =
     z$ = (xval, yval); penpos$(large, angle);
enddef;

def semkathcommon (expr xoffs) =
  penpoint(1, xoffs, .5vu, basestroke, -90);
  penpoint(11, xoffs+2hu, y1, basestroke, -90);
  penpoint(2, xoffs+3hu, 1.2vu, .4basestroke, -45);
  penpoint(3, xoffs+2.25hu, 4vu, basestroke, 90);
  penpoint(4, xoffs-.25hu, .4vu, .4basestroke, 135);

  penstroke z1e..z11e{right}...z2e..{left}z3e..{dir 245}z4e;

  penpoint(5, xoffs-hu, y3, basestroke, -90);
  penpoint(6, x5-1.4hu, 3vu, .4basestroke, -45);
  penpoint(7, xoffs-1.4hu, y1, basestroke, 90);
  penpoint(8, xoffs, y1, basestroke, 90);

  penstroke z4e{dir 65}..{left}z5e..z6e..{right}z7e...z8e;

  penlabels(range 1 thru 11);
enddef;

%def semkathcommon (expr xoffs) =
%    qofsemkathcommon(xoffs);
%    z5 = (x1+2.5hu, y1); penpos5(basestroke, -90);
%    z6 = (x5+1.5hu, y2); penpos6(basestroke, 0);
%    z7 = (x5, y3); penpos7(basestroke, 90);
%    z8 = (x2, y2+.5vu); penpos8(.5basestroke, 145);
%
%    penstroke z1e--z5e{right}..z6e..z7e..z8e;
%    penlabels(range 5 thru 8);
%enddef;

sertochar "semkath - isolated";
beginchar(131, 9hu#, 4.5vu#, 0);
   semkathcommon(4.5hu);
   arabesque(7, 2);
endchar;

sertochar "semkath - final";
beginchar(132, 9hu#, 4.5vu#, 0);
   semkathcommon(4.5hu);
   arabesque(7, 2);
   baseline(11, -2.5);
endchar;

sertochar "semkath - medial";
beginchar(133, 8.5hu#, 4.5vu#, 0);
   semkathcommon(4hu);
   baseline(11, -2.5);
   baseline(8, 4);
endchar;

sertochar "semkath - initial";
beginchar(134, 8.5hu#, 4.5vu#, 0);
   semkathcommon(4hu);
   baseline(8, 4);
endchar;


def Cainfinalcommon =
   z1 = (.5hu, 4vu); penpos1(basestroke, 40);
   z2 = (3hu, 1vu); penpos2(basestroke, 40);
   z3 = (6hu, 1vu); penpos3(.2basestroke, 120);

   z4 = (x1+2.5hu, y1); penpos4(basestroke, 40);
   z5 = (x2+2.5hu, y2); penpos5(basestroke, 40);

   penstroke z1e--z2e{z2-z1}..z3e;
   penstroke z4e--z5e;

   penlabels(range 1 thru 5);
enddef;


sertochar "`e - isolated";
beginchar(135, 7.5hu#, 4vu#, 0);
   Cainfinalcommon;
   z6 = (whatever[z4, z5]); penpos6(basestroke, 40);
   y6l = 0;
   penstroke z5e--z6e;
   penlabels(6);
endchar;

sertochar "`e - final";
beginchar(136, 6.5hu#, 4vu#, 0);
   Cainfinalcommon;
   z6 = (x5+1hu, .5vu); penpos6(basestroke, 90);
   penstroke z5e{z5-z4}..z6e;
   penlabels(6);
endchar;


def Cainnonfinalcommon =
   z1 = (.5hu, 4vu); penpos1(basestroke, 40);
   z2 = (3hu, 1vu); penpos2(basestroke, 40);
   penstroke z1e--z2e;

   penlabels(range 1 thru 2);
enddef;

sertochar "`e - medial";
beginchar(137, 4.5hu#, 4vu#, 0);
   Cainnonfinalcommon;

   z3 = (4.5hu, .5vu); penpos3(basestroke, 90);
   %penstroke z2e{z2-z1}..{right}z3e;
   % z1e--z2e is already drawn in Cainnonfinalcommon
   % we redraw it to avoit some white pixel on z2e.
   penstroke z1e--z2e..{right}z3e;

   %z4 = (whatever[z1l, z2l]); penpos4(basestroke, 90);
   %y4l = 0;
   %z5 = (0, .5vu); penpos5(basestroke, 90);
   %penstroke z4e--z5e;
   z10 = (x2-1.5hu, basestroke+.5vu);
   z4 = (whatever[z1, z2]); penpos4(basestroke, 40);
   z10 = (whatever[z4r, z4l]);
   z5 = (x10, .5vu); penpos5(basestroke, -90);
   z6 = (0, .5vu); penpos6(basestroke, -90);
   penstroke z4e..{left}z5e..z6e;

   penlabels(3, 4, 5, 6, 10);
endchar;

sertochar "`e - initial";
beginchar(138, 5hu#, 4vu#, 0);
   Cainnonfinalcommon;
   z3 = (whatever[z1, z2]); penpos3(basestroke, 40);
   y3l = 0;
   penstroke z2e--z3e;

%    z4 = (whatever[z1l, z3l]); penpos4(basestroke, 90);
%    y4l = 0;
%    z5 = (0, .5vu); penpos5(basestroke, 90);
%    penstroke z4e--z5e;

   z10 = (x2-1.5hu, basestroke+.5vu);
   z4 = (whatever[z1, z2]); penpos4(basestroke, 40);
   z10 = (whatever[z4r, z4l]);
   z5 = (x10, .5vu); penpos5(basestroke, -90);
   z6 = (0, .5vu); penpos6(basestroke, -90);
   penstroke z4e..{left}z5e..z6e;

   penlabels(3, 4, 5, 6, 10);
endchar;


%def pecommon (expr xoffs) =
%    %z1 = (xoffs, .5hu); penpos1(basestroke, -90);
%    z2 = (xoffs+2hu, .5hu); penpos2(basestroke, -90);
%    z3 = (x2+2hu, 3hu); penpos3(basestroke, 0);
%    z4 = (x2, 4.75hu); penpos4(.5basestroke, 90);
%    z5 = (xoffs+.5hu, 3.5hu); penpos5(basestroke, 180);
%    z6 = (x4, y3-.5hu);  penpos6(basestroke, 270);
%    z7r = z3; penpos7(.4basestroke, 315);
%
%    penstroke z2e{right}..{up}z3e..z4e..z5e..{right}z6e..z7e;
%    penlabels(range 2 thru 7);
%enddef;

def pecommon (expr xoffs) =
   pickup pe_pen;

   z1 = (xoffs, .5vu);
   z2 = z1 + (2hu, 0);
   z21 = z2 + (.5hu, 1.5vu);
   z3 = z1 + (0, 3.5hu);
   z4 = z1 + (-hu, 2.5vu);
   z5 = (x2-.4hu, 3.2hu);

   draw z1---z2..z21..z3..z4..tension 1.3..z5;

   penlabels(range 1 thru 12);
enddef;


sertochar "pe - isolated";
beginchar(139, 5.5hu#, 5hu#, 0);
   pecommon(2hu);
   arabesque(1, 1);
endchar;

sertochar "pe - final";
beginchar(140, 6hu#, 5hu#, 0);
   pecommon(2hu);
   arabesque(1, 1);
   baseline(2, -2);
endchar;

sertochar "pe - medial";
beginchar(141, 6hu#, 5hu#, 0);
   pecommon(2hu);
   baseline(1, 2);
   baseline(2, -2);
endchar;


sertochar "pe - initial";
beginchar(142, 6hu#, 5hu#, 0);
   pecommon(2hu);
   baseline(1, 2);
endchar;


def sadecommon (expr xoffs, iso) =
   z1 = (xoffs, -2vu); penpos1(1.4basestroke, -80);
   z2 = (x1+3hu, -3.5vu); penpos2(.8basestroke, -90);
   z3 = (x1+4.5hu, -2.25vu); penpos3(.5basestroke, -45);
   z4 = (x3-.25hu, -.75vu); penpos4(basestroke, 45);
   z5 = (x3-.5hu, .5vu); penpos5(.6basestroke, 0);

   if iso = 0: % isolated sade
     z6 = (x4, 1.5vu); penpos6(.8basestroke, 32);
     z7 = (x6-.5hu, y6+vu); penpos7(basestroke, 70);
     penstroke z1e..{right}z2e..z3e..z4e..z5e..z6e..z7e;
   else: % final sade
     z6 = (x4-.3hu, 1vu); penpos6(.8basestroke, 32);
     penstroke z1e..{right}z2e..z3e..z4e..z5e..{dir 122}z6e;
     z7 = (xoffs+5.5hu, .5vu); penpos7(basestroke, 90);
     penstroke z6e..{right}z7e;
   fi;

   penlabels(range 1 thru 7);
enddef;

sertochar ".sade - isolated";
beginchar(143, 5.5hu#, 2vu#, 4vu#);
   sadecommon(0, 0);
endchar;

sertochar ".sade - final";
beginchar(144, 5hu#, 2vu#, 4vu#);
   sadecommon(0, 1);
endchar;



%def qoffinalcommon (expr xoffs) =
%   qofsemkathcommon(xoffs);
%   z5 = (xoffs, .5vu); penpos5(basestroke, -90);
%   arabesque(5, .75);
%   z6 = (x4l, 1.5hu); penpos6(.4basestroke, -45);
%   penstroke z5e{right}..z6e;
%
%   penlabels(5, 6);
%enddef;

%def qofnonfinalcommon (expr xoffs) =
%   qofsemkathcommon(xoffs);
%   z5 = (xoffs, .5vu); penpos5(basestroke, -90);
%   baseline(5, 1.5);
%   z6 = (x4l, 1.5hu); penpos6(.4basestroke, -45);
%   penstroke z5e{right}..z6e;
%
%   penlabels(5, 6);
%enddef;

def qofright  =  % works only if called after wawcommon
  z7 = (.6[x1a,x1d], .8vu); penpos7(basestroke, 50);
  z6 = (x1a+3hu, .5vu); penpos6(basestroke, 90);
  penstroke z6e{left}..z7e;
  penlabels(6, 7);
enddef;

def qoffinalcommon (expr xoffs) =
  z1 = (xoffs+.25hu, 0);
  wawcommon(1);

  z5 = (xoffs, .5vu); penpos5(basestroke, -90);
  arabesque(5, .75);
  z4 = .5[z1a, z1b]; penpos4(.4basestroke, -45);
  penstroke z5e{right}..z4e;

  penlabels(1, 4, 5);
enddef;

def qofnonfinalcommon (expr xoffs) =
  z1 = (xoffs+.25hu, 0);
  wawcommon(1);

  z5 = (xoffs, .5vu); penpos5(basestroke, -90);
  baseline(5, .5);
  z4 = .5[z1a, z1b]; penpos4(.4basestroke, -45);
  %z6 = (x4l, 1.5hu); penpos6(.4basestroke, -45);
  penstroke z5e{right}..z4e;

  penlabels(5, 6);
enddef;

sertochar "qof - isolated";
beginchar(145, 7hu#, 5vu#, 0);
  qoffinalcommon(1.75hu);
endchar;


sertochar "qof - final";
beginchar(146, 7hu#, 5vu#, 0);
  qoffinalcommon(1.75hu);
  qofright;
%   z7 = (.6[x1a,x1d], .8vu); penpos7(basestroke, 50);
%   z6 = (x1a+3hu, .5vu); penpos6(basestroke, 90);
%   penstroke z6e{left}..z7e;
%
%   penlabels(6, 7);
endchar;

sertochar "qof - medial";
beginchar(147, 5.75hu#, 5vu#, 0);
  qofnonfinalcommon(.5hu);
  qofright;
endchar;

sertochar "qof - initial";
beginchar(148, 6hu#, 5vu#, 0);
  qofnonfinalcommon(.5hu);
endchar;


% resh - isolated
sertochar "resh - isolated";
beginchar(149, 4hu#, 6vu#, 0);
   dr_isolated_common;
   z6 = (1hu, y3+1.2vu);
   sertodot(6, 1);
   penlabels(6);
endchar;

% resh - final
sertochar "resh - final";
beginchar(150, 3hu#, 4vu#, 1vu#);
   dr_final_common;
   z4 = (x3, y2r+1.2vu);
   sertodot(4, 1);
   penlabels(4);
endchar;


def shincommon (expr xoffs) =
   z1 = (xoffs, .5vu);
   z2 = (x1+1.5hu, 2vu);
   z3 = (x1, 2vu+basestroke);
   z4 = (x1-1.5hu, y2);

   fill z1{dir 45}..{up}z2..z3..z4{down}..{dir 315}cycle;

   z5 = (x1-hu, y1); penpos5(basestroke, -90);
   z6r = z1 + (basestroke-hu, basestroke-hu); penpos6(hu, -45);
   penstroke z5e{right}..z6e;

   z7l = z1 + (-(basestroke-hu), basestroke-hu); penpos7(hu, 45);
   z8 = (x1+hu, y1); penpos8(basestroke, 90);
   penstroke z8e{left}..z7e;

   penlabels(range 1 thru 8);
enddef;


def shinfinal (expr xoffs) =
  shincommon(xoffs);
  arabesque(5, .75);
enddef;

def shinnonfinal (expr xoffs) =
  shincommon(xoffs);
  baseline(5, 1.5);
enddef;


def shininit (suffix $)(expr length) =
 z$aa = (x$, y$-.5basestroke);
 z$ac = (x$, y$+.5basestroke);
 z$ab = (x$+length*hu, y$aa);
 z$ad = (x$+(length-.2)*hu, y$ac);
 z$ae = (x$ab+hu, y$ad+.5vu);
 fill z$aa--z$ab{right}..{up}z$ae{dir 225}..{left}z$ad--z$ac--cycle;
 penlabels($aa, $ab, $ac, $ad, $ae);
enddef;

sertochar "shin - isolated";
beginchar(151, 5.75hu#, 3vu#, 0);
   shinfinal(2.75hu);
   shininit(8, .25);
endchar;

sertochar "shin - final";
beginchar(152, 4.75hu#, 3vu#, 0);
   shinfinal(2.75hu);
   baseline(8, -1);
endchar;

sertochar "shin - medial";
beginchar(153, 4.5hu#, 3vu#, 0);
   shinnonfinal(2.5hu);
   baseline(8, -1);
endchar;

sertochar "shin - initial";
beginchar(154, 5.5hu#, 3vu#, 0);
   shinnonfinal(2.5hu);
   shininit(8, .25);
endchar;


def taucommon =
  z1 = (0, 0);
  z2 = (4.5hu, .5vu); penpos2(basestroke, 67);
  z3 = (1hu, 1.1vu);
  %z4 = (1hu, 8vu); penpos4(basestroke, 20);
  z4 = (1hu, 8vu); penpos4(basestroke, 20);
  z5l = z1;
  z5r = z3;

  penstroke z4e{down}..z5e & z5e{dir 17}..z2e;

  penlabels(range 1 thru 5);
enddef;

sertochar "tau - isolated";
beginchar(155, 5.75hu#, 8vu#, 0);
   taucommon;
endchar;

sertochar "tau - final";
beginchar(156, 6.5hu#, 8vu#, 0);
   taucommon;
   z6 =  (x2+2hu, y2); penpos6(basestroke, 90);
   %z7 =  (x6+hu, y6); penpos7(basestroke, 90);
   penstroke z4e{dir -50}..tension 1.8 ..{right}z6e; %---z7e;
   penlabels(6, 7)

endchar;



% resh doubledotted - isolated
sertochar "resh doubledotted - isolated";
beginchar(157, 4hu#, 6vu#, 0);
   dr_isolated_common;
   z6 = (.6hu, y3+1.2vu);
   z7 = z6 + (1.5hu, 0);
   sertodot(6, 1);
   sertodot(7, 1);
   penlabels(6, 7);
endchar;

% resh doubledotted- final
sertochar "resh doubledotted - final";
beginchar(158, 3hu#, 4vu#, 1vu#);
   dr_final_common;
   z4 = (x3-.7hu, y2r+1.2vu);
   z5 = z4 + (1.5hu, 0);
   sertodot(4, 1);
   sertodot(5, 1);
   penlabels(4, 4);
endchar;



% ligatures
sertochar "olaf lamad - initial";
beginchar(171, 9.5hu#, 7vu#, 0);
   lamadnonfinalcommon;
   z3 = (whatever[z1, z2]); penpos3(basestroke, 40);
   y3l = 0;
   penstroke z2e--z3e;

   z11 = (x1+2.5hu, y1);  penpos11(basestroke, 40);
   z13 = (x3+2.5hu, y3); penpos13(basestroke, 40);
   penstroke z11e--z13e;

   z4 = (whatever[z1l, z3l]); penpos4(basestroke, 90);
   y4l = 0;
   z5 = (0, .5vu); penpos5(basestroke, 90);
   penstroke z4e--z5e;
   penlabels(3, 4, 5, 11, 13);
endchar;

def lamadolafcommon =
   z1 = (1.5hu, .5vu); penpos1(basestroke, 90);
   z2 = (x1-hu, 1.5vu); penpos2(basestroke, 0);
   z12 = (x1+hu, y2); penpos12(basestroke, 180);
   %z3 = (x2, 4.5vu); penpos3(.8basestroke, 0);
   %z13 = (x12, y3); penpos13(.8basestroke, 180);
   z3 = (x2, 4.5vu); penpos3(basestroke, 0);
   z13 = (x12, y3); penpos13(basestroke, 180);
   %z4 = (x2, 8vu); penpos4(basestroke, 20);
   %z14 = (x12, y4); penpos14(basestroke, 200);
   z4l = z3l + (0, 3.2vu);
   z4r = z3r + (0, 3.8vu);
   z14l = z13l + (0, 3.8vu);
   z14r = z13r + (0, 3.2vu);

   %z6 = (-.3hu, -vu); penpos6(.4basestroke, -45);
   z6 = (-.8hu, -1.5vu); penpos6(.2basestroke, -45);

   penstroke z4e..z3e..z2e{down}..z1e..{up}z12e..z13e..z14e;
   penstroke z2e{down}..z6e;

   penlabels(range 1 thru 14);
enddef;

sertochar "lamad olaf - isolated";
beginchar(172, 4hu#, 8vu#, 0);
   lamadolafcommon;
endchar;


sertochar "lamad olaf - final";
beginchar(173, 4hu#, 8vu#, 0);
   lamadolafcommon;
   z7 = z1 + (2.5hu, 0); penpos7(basestroke, 270);

   penstroke z12e{down}..{right}z7e;

   penlabels(7);
endchar;



% Plural Sign
sertochar "sey=ame";
beginchar(7, 3hu#, 6vu#, 0);
   z4 = (hu, 5.7vu);
   z5 = z4 + (1.5hu, 0);
   sertodot(4, 1);
   sertodot(5, 1);
   penlabels(4, 4);
endchar;




%% Vowels
input syriacvowels;


%sertochar "peto.ho a";
%beginchar(1, 3hu#, 5vu#, 0);
%    pickup vowel_pen;
%    z11 = (0, 3vu);
%    z12 = (x1+3hu, y1+3vu);
%    z1 = (.1[z11,z12]);
%    z2 = (.9[z11,z12]);
%    z3 = (.3[z11,z12]);
%    z4 = (.7[z11,z12]);
%    %z5 = (x1+.5hu, y2);
%    z16 = (.5[z11,z12]); % Hilfspunkt
%    z6 = z16 + 2hu*dir(angle(z2-z1)+90);
%    draw z1--z2;
%    draw z3--z6--z4;
%    penlabels(1,2,3,4,6)
%endchar;
%
%
%sertochar "revo.so e";
%beginchar(2, 3hu#, 6vu#, 0);
%   pickup vowel_pen;
%   z1 = (0, 4vu);
%   z2 = (x1+2.2hu, y1+vu);
%   z3 = (x1+3hu, y1-vu);
%   z4 = z2 + whatever*dir(-110);
%   z4 = whatever[z1,z3];
%
%   draw z1..z2..z3;
%   draw z2--z4;
%
%   penlabels(1,2,3,4);
%endchar;
%
%
%sertochar ".hevo.so i";
%beginchar(3, 3hu#, 6vu#, 0);
%   pickup vowel_pen;
%
%   z1 = (.8hu, 3vu);
%   z2 = z1 + (2.9hu, 1.5vu);
%   z3 = z1 + (-.8hu, 1vu);
%   z4 = z3 + (3hu, 1.5vu);
%   z5 = .4[z3, z4];
%   z6 = .5[z1, z2];
%
%   draw z1--z2;
%   draw z3--z4;
%   draw z5--z6;
%
%   penlabels(1,2,3,4,5,6);
%endchar;
%
%sertochar "zeqopo o";
%beginchar(4, 3hu#, 6vu#, 0);
%   pickup vowelII_pen;
%
%   z1 = (0, 3vu);
%   z2 = z1 + (2hu, 3vu);
%   z3 = z1 + (1.3hu, 1.5vu);
%
%   draw z1{dir 30}..{dir 135}z2..{right}z3;
%   penlabels(1,2,3);
%endchar;
%
%sertochar "`e.so.so u";
%beginchar(5, 3hu#, 8vu#, 0);
%   pickup vowel_pen;
%
%   z1 = (0, 5vu);
%   z2 = z1 + (3hu, 3vu);
%   z3 = .47[z1, z2];
%   z4 = z1 + (2.5hu, -.5vu);
%
%   draw z1--z2;
%   draw z3--z4;
%
%   pickup vowelIII_pen;
%   z5 = z1 + (1.4hu, 0);
%   z6 = z5 - (.5hu, .6vu);
%
%   draw z5..z6..cycle;
%
%   penlabels(range 1 thru 6)
%endchar;
%
%
%sertochar "qu^s^soyo (hard sign)";
%beginchar(6, 1hu#, 4vu#, 0);
%    z1 = (.5hu, 4vu);
%    sertodot(1, 1.2);
%endchar;
%
%
%sertochar "peto.ho a invers";
%beginchar(17, 3hu#, 5vu#, 0);
%    pickup vowel_pen;
%    z11 = (0, 1vu);
%    z12 = (x1+3hu, y1+3vu);
%    z1 = (.1[z11,z12]);
%    z2 = (.9[z11,z12]);
%    z3 = (.3[z11,z12]);
%    z4 = (.7[z11,z12]);
%    %z5 = (x1+.5hu, y2);
%    z16 = (.5[z11,z12]); % Hilfspunkt
%    z6 = z16 - 2hu*dir(angle(z2-z1)+90);
%    draw z1--z2;
%    draw z3--z6--z4;
%    penlabels(1,2,3,4,6)
%endchar;
%
%
%sertochar "revo.so e invers";
%beginchar(18, 3hu#, 6vu#, 0);
%   pickup vowel_pen;
%   z1 = (0, 4vu);
%   z2 = (x1+hu, y1-2.2vu);
%   z3 = (x1+3hu, y1-vu);
%   z4 = z2 + whatever*dir(-110);
%   z4 = whatever[z1,z3];
%
%   draw z1..z2..z3;
%   draw z2--z4;
%
%   penlabels(1,2,3,4);
%endchar;
%
%
%sertochar ".hevo.so i";
%beginchar(19, 3hu#, 4vu#, 0);
%   pickup vowel_pen;
%
%   z1 = (.8hu, 1vu);
%   z2 = z1 + (2.9hu, 1.5vu);
%   z3 = z1 + (-.8hu, 1vu);
%   z4 = z3 + (3hu, 1.5vu);
%   z5 = .4[z3, z4];
%   z6 = .5[z1, z2];
%
%   draw z1--z2;
%   draw z3--z4;
%   draw z5--z6;
%
%   penlabels(1,2,3,4,5,6);
%endchar;
%
%sertochar "zeqopo o invers";
%beginchar(20, 3hu#, 6vu#, 0);
%   pickup vowelII_pen;
%
%   z1 = (2.5hu, 5vu);
%   z2 = z1 - (2hu, 3vu);
%   z3 = z1 - (1.3hu, 1.5vu);
%
%   draw z1{dir -150}..{dir -45}z2..{left}z3;
%   penlabels(1,2,3);
%endchar;
%
%sertochar "`e.so.so u invers";
%beginchar(21, 3hu#, 8vu#, 0);
%   pickup vowel_pen;
%
%   z1 = (3hu, 5vu);
%   z2 = z1 - (3hu, 3vu);
%   z3 = .47[z1, z2];
%   z4 = z1 - (2.5hu, -.5vu);
%
%   draw z1--z2;
%   draw z3--z4;
%
%   pickup vowelIII_pen;
%   z5 = z1 - (1.4hu, 0);
%   z6 = z5 + (.5hu, .6vu);
%
%   draw z5..z6..cycle;
%
%   penlabels(range 1 thru 6)
%endchar;
%
%
%
%sertochar "rukko_ho (soft sign)";
%beginchar(22, 1hu#, 2vu#, 0);
%    z1 = (.5hu, 0vu);
%    sertodot(1, 1.2);
%endchar;



sertochar "mvatlono (silent bar below)";
beginchar(23, 4hu#, 2vu#, 0);
   penpoint(1, 0, .5vu, basestroke, 75);
   penpoint(2, 3hu, .5vu, basestroke, 75);
   penstroke z1e--z2e;
endchar;

sertochar "mvatlono (silent bar above)";
beginchar(8, 4hu#, 2vu#, 0);
   penpoint(1, 0, .5vu, basestroke, 75);
   penpoint(2, 3hu, .5vu, basestroke, 75);
   penstroke z1e--z2e;
endchar;



% interpunction
sertochar "full stop";
beginchar(46, 3hu#, 1vu#, 0);
   z1 = (1hu, 1vu);
   sertodot(1, 1);
endchar;

sertochar "colon";
beginchar(58, 3hu#, 4vu#, 0);
   z1 = (1hu, 1vu);
   z2 = (1hu, 4vu);
   sertodot(1, 1);
   sertodot(2, 1);
endchar;



sertochar "underscore";
beginchar(95, 5hu#, 4vu#, 0);
   pickup punct_pen;
   bot z1 = (0,0);
   bot z2 = (5hu,0);
   draw z1--z2;
%    penpoint(1, 0, .2hu, .4basestroke, 90);
%    penpoint(2, 5hu, .2hu, .4basestroke, 90);
%    penstroke z1e--z2e;
endchar;

sertochar "stretch";
beginchar(45, 3hu#, 1vu#, 0);
   penpoint(1, 0, .5vu, basestroke, 90);
   penpoint(2, 3hu, .5vu, basestroke, 90);
   penstroke z1e--z2e;
endchar;



def paraIplusII (suffix $)=
   pickup para_pen;
   z$a = z$ + (2hu, 0);
   z$b = z$ + (0, 2vu);
   z$c = z$a + (0, 4vu);
   z$d = z$b + (4hu, 0);
   %sertodot(8, 1);
   drawdot z$a;
   drawdot z$b;
   drawdot z$c;
   drawdot z$d;
   penlabels($a, $b, $c, $d);
enddef;

sertochar "end paragraph 1";
beginchar(33, 6hu#, 5vu#, 0);
   pickup punct_pen;
   z1 = (.5hu, .5vu);
   z2 = z1 + (4hu, 4vu);
   z3 = z1 + (0, 4vu);
   z4 = z1 + (4hu, 0);
   draw z1--z2;
   draw z3--z4;
   penlabels(1,2,3,4);
   paraIplusII(1);
endchar;

sertochar "end paragraph 2";
beginchar(34, 6hu#, 5vu#, 0);
   z1 = (.5hu, .5vu);
   penlabels(1);
   paraIplusII(1);
endchar;

sertochar "end paragraph 3";
beginchar(35, 6hu#, 5vu#, 0);
   pickup para_pen;
   z1 = (1hu, 1vu);
   z2 = z1 + (3hu, 3vu);
   z3 = z1 + (0, 3vu);
   z4 = z1 + (3hu, 0);
   drawdot z1;
   drawdot z2;
   drawdot z3;
   drawdot z4;
   penlabels(1,2,3,4);
endchar;

sertochar "end paragraph 4";
beginchar(36, 6hu#, 5vu#, 0);
   pickup para_pen;
   z1 = (2.5hu, 1vu);
   z2 = z1 + (0, 3vu);
   drawdot z1;
   drawdot z2;

   pickup punct_pen;
   z3 = (.5hu, 2.5vu);
   z4 = z3 + (4hu, 0);
   draw z3--z4;
   penlabels(1,2,3,4);
endchar;


sertochar "end paragraph 5";
beginchar(37, 8hu#, 3vu#, 0);
   pickup para_pen;
   z1 = (2hu, 1.5vu);
   z2 = z1 + (4hu, 1vu);
   drawdot z1;
   drawdot z2;

   pickup punct_pen;
   z3 = (0, 2vu);
   z4 = z3 + (2hu, 1vu);
   z5 = z3 + (4hu, 0);
   z6 = z3 + (6hu, -1vu);
   z7 = z3 + (8hu, 0);
   draw z3..z4..z5..z6..z7;
   penlabels(range 1 thru 7);
endchar;



sertochar "end paragraph 6";
beginchar(38, 3hu#, 6vu#, 1vu#);
   pickup para_pen;
   z1 = (1.5hu, .5vu);
   z2 = z1 + (-1hu, 4vu);
   drawdot z1;
   drawdot z2;

   pickup punct_pen;
   z3 = (0, -1vu);
   z4 = z3 + (1hu, 3.5vu);
   z5 = z4 + (1hu, 3.5vu);

   draw z3{up}..z4..{up}z5;
   penlabels(range 1 thru 5);
endchar;
endinput;