%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                             %
%       NOTENKOEPFE UND FAEHNCHEN                             %
%                                                             %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%
%
%%%%%%%%%%%%%%%
%%notenkoepfe %
%%%%%%%%%%%%%%%
%
%
%
%
def drawnoteb(expr noteheadwidth, theta_a, theta_b, theta_c,
width_a, width_b)  =
                                           %         .l
           penpos1(width_a, theta_a);      %         .2
                                           %         .r
           penpos3(width_a, 180+theta_a);  %.l.1.r            .r.3.l
                                           %         .r
           penpos2(width_b, 180+theta_b);  %         .4
                                           %         .l
           penpos4(width_b,   theta_b);    %
           y1 = y3 = 0;
           x2 = x4 = 1/2noteheadwidth;
           x1l= 0; x3l = w; y2l = h; y4l = -h;
           penstroke (z1e{up}..z2e{right}..z3e{down}..z4e{left}..cycle)
           rotatedaround((origin +1/2w*right),theta_c);
           enddef;
%
%
%%%%%%%%%%%%%%%
%%    flags   %
%%%%%%%%%%%%%%%
%
%
%
pickup pencircle scaled (0.1pt);
def penstrike text t =
forsuffixes e = l,r: path_.e:=t; endfor
if cycle path_.l: cyclestroke_
else: filldraw path_.l -- reverse path_.r -- cycle fi enddef;
def flagshape (suffix i) (expr width, height, thicka, thin, shift) =
          pair intersectionp;                             %
          thick := 1/3 height;
          sh[-3] = origin;
          sh[i] = shift;                                  %  .1
          penpos[i](thick,90);                            %
          penpos[i+1](  3thin ,90);                       %       .2
          penpos[i+2](thin,0);                            %
          penpos[i+3](thin,0);                            %           .3
          x[i] =  -1/16mm;                                %
          y[i]r =  height;                                %        .4
          x[i+1] = 3/8width;                              %
          y[i+1] = height - thick;                        %
          y[i+3] = 0;
          x[i+2]r  = x[i+3]+2s= width;
          y[i+2]r = height - 2thick;
          if i>1: intersectionp  = z[i-2];
          else   : intersectionp = z[i+3];
          fi;
          penstrike (z[i]e{dir(angle(z[i+1]e-z[i]e)-15)}
          ..z[i+1]e{z[i+1]e-z[i]e}
          ..z[i+2]e{down}..intersectionp shifted (sh[i-4]-sh[i]))
          shifted sh[i];
          for n=0 upto 3:
          k:=i+n;
          penlabels(k);endfor;
          enddef;

%def flagshaper (suffix i) (expr width, height, thicka, thin, shift) =
%           pair intersectionp;                             %
%           thick := 1/3 height;
%           sh[-3] := origin+shift;
%           sh[i] = shift;                                  %  .1
%           penpos[i](thick,90);                            %
%           penpos[i+1](  3thin ,90);                       %       .2
%           penpos[i+2](thin,0);                            %
%           penpos[i+3](thin,0);                            %           .3
%           x[i] =  0;                                      %
%           y[i]r =  height;                                %        .4
%           x[i+1] = 3/8width;                              %
%           y[i+1] = height - thick;                        %
%           y[i+3] = 0;
%           x[i+2]r  = x[i+3]+2s= width;
%           y[i+2]r = height - 2thick;
%           if i>1: intersectionp  = z[i-2];
%           else   : intersectionp = z[i+3];
%           fi;
%           penstroke (counterclockwise
%           (z[i]e{dir(angle(z[i+1]e-z[i]e)-15)}
%           ..z[i+1]e{z[i+1]e-z[i]e}
%           ..z[i+2]e{down}..intersectionp shifted (-sh[i-4]+sh[i]))
%           reflectedabout (z1r scaled 0.5,
%             z1r scaled 0.5+right) )
%           shifted sh[i];
%           for n=0 upto 3:
%           k:=i+n;
%           penlabels(k);endfor;
%           enddef;

def flagshaper (suffix i) (expr width, height, thicka, thin, shift) =
          pair intersectionp;                             %
          thick := 1/3 height;
          sh[-3] := origin+shift;
          sh[i] = shift;                                  %  .1
          penpos[i](thick,90);                            %
          penpos[i+1](  3thin ,90);                       %       .2
          penpos[i+2](thin,0);                            %
          penpos[i+3](thin,0);                            %           .3
          x[i] =  0;                                      %
          y[i]r =  height;                                %        .4
          x[i+1] = 3/8width;                              %
          y[i+1] = height - thick;                        %
          y[i+3] = 0;
          x[i+2]r  = x[i+3]+2s= width;
          y[i+2]r = height - 2thick;
          if i>1: intersectionp  = z[i-2];
          else   : intersectionp = z[i+3];
          fi;
          penstrike (counterclockwise
          (z[i]e{dir(angle(z[i+1]e-z[i]e)-15)}
          ..z[i+1]e{z[i+1]e-z[i]e}
          ..z[i+2]e{down}..intersectionp shifted (-sh[i-4]+sh[i]))
          reflectedabout (z1r scaled 0.5,
            z1r scaled 0.5+right) )
          shifted sh[i];
          enddef;


%%%%%%%%%%%%%%%
%% volle Note %
%%%%%%%%%%%%%%%

beginchar(33, nhw#, .5nhh#, .5nhh#);
         w:=w+2thinwidth;
         drawnoteb(w, 0, 90, 20, w/2, nhh/2);
endchar;

%%%%%%%%%%%%%%%
%% halbe Note %
%%%%%%%%%%%%%%%

beginchar(34, nhw#, .5nhh#, .5nhh#);
         w:=w+2thinwidth;
         drawnoteb(w, 0, 90, 20, 3*thinwidth, nhh/4);
endchar;

%%%%%%%%%%%%%%%
%% ganze Note %
%%%%%%%%%%%%%%%

beginchar (35,1.5nhh#, .5nhh#, .5nhh#);
         drawnoteb(w, 0, 85, 0, nhh/3, 3*thinwidth);
endchar;

%%%%%%%%%%%%%%%%%%%%%%%
%% "8flag nach unten" %
%%%%%%%%%%%%%%%%%%%%%%%

beginchar(40, 0, 3nhh#, 0);
         clear;
         w:=nhw;
         flagshape (1,w, h, nhh,  5thinwidth, origin);
         w:=0;
endchar;

%%%%%%%%%%%%%%%%%%%%%%%%
%% "16flag nach unten" %
%%%%%%%%%%%%%%%%%%%%%%%%

beginchar(41, 0, 3.25nhh#, 0);
         clear;
         w:=nhw;
         flagshape (1, w, 2.5nhh, 2/3nhh, 5thinwidth, origin);
         flagshape (5,.95 w, 2.25 nhh, 2/3nhh, 5thinwidth, (0,nhh));
         w:=0;
endchar;

%%%%%%%%%%%%%%%%%%%%%%%%
%% "32flag nach unten" %
%%%%%%%%%%%%%%%%%%%%%%%%

beginchar(42, 0, 3.75  nhh#, 0);
         clear;
         w:=nhw;
         flagshape (1, w, 2.5nhh, 2/3nhh, 5thinwidth, origin);
         flagshape (5, .95w, 2.25 nhh, 2/3nhh, 5thinwidth, (0,nhh));
         flagshape (9, .9w, 2   nhh, 2/3nhh, 5thinwidth, (0,1.75nhh));
         w:=0;
endchar;

%%%%%%%%%%%%%%%%%%%%%%%%
%% "64flag nach unten" %
%%%%%%%%%%%%%%%%%%%%%%%%

beginchar(43, 0, 4.25nhh#, 0);
         clear;
         w:=nhw;
         flagshape (1, w, 2.5nhh, 2/3nhh, 5thinwidth, origin);
         flagshape (5,.95 w, 2.25 nhh, 2/3nhh, 5thinwidth, (0,nhh));
         flagshape (9,.9w, 2  nhh, 2/3nhh, 5thinwidth, (0,1.75nhh));
         flagshape(13,0.85w, 2nhh, 2/3nhh, 5thinwidth, (0,2.25nhh));
         w:=0;
endchar;

%%%%%%%%%%%%%%%%%%%%%%%%%
%% "128flag nach unten" %
%%%%%%%%%%%%%%%%%%%%%%%%%

beginchar(44, 0,   4.5nhh#, 0);
         clear;
         w:=nhw;
         flagshape (1, w, 2.5nhh, 2/3nhh, 5thinwidth, origin);
         flagshape (5, w, 2.25nhh, 2/3nhh, 5thinwidth, (0,nhh));
         flagshape (9, w, 2 nhh, 2/3nhh, 5thinwidth, (0,1.75nhh));
         flagshape(13,0.9 w, 2nhh, 2/3nhh, 5thinwidth, (0,2.25nhh));
         flagshape(17,0.9 w, 1.5nhh, 1/3nhh, 5thinwidth, (0,3nhh));
         w:=0;
endchar;

%%%%%%%%%%%%%%%%%%%%%%
%% "8flag nach oben" %
%%%%%%%%%%%%%%%%%%%%%%

beginchar(45, 0, 3nhh#, 0);
        clear;
        w:=nhw;
        flagshaper(1,w, h, nhh, 5thinwidth, origin);
        penlabels(1,2,3,4);
        w:=0;
endchar;

%%%%%%%%%%%%%%%%%%%%%%%
%% "16flag nach oben" %
%%%%%%%%%%%%%%%%%%%%%%%

beginchar(46, 0, 3.25nhh#, 0);
         clear;
        w:=nhw;
         flagshaper(1, w, 2.5nhh, 2/3nhh, 5thinwidth, (0,0.75nhh));
         flagshaper(5, w, 2.25 nhh, 2/3nhh, 5thinwidth,(0,-0.25nhh));
        penlabels(1,2,3,4,5,6,7,8);
         w:=0;
endchar;

%%%%%%%%%%%%%%%%%%%%%%%
%% "32flag nach oben" %
%%%%%%%%%%%%%%%%%%%%%%%

beginchar(47, 0, 3.75  nhh#, 0);
         clear;
        w:=nhw;
         flagshaper(1, w, 2.5nhh, 2/3nhh, 5thinwidth, (0,1.5nhh));
         flagshaper(5, w, 2.5nhh, 2/3nhh, 5thinwidth, (0,0.75nhh));
         flagshaper(9, .95w, 2.25 nhh, 2/3nhh, 5thinwidth, origin);
        penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
         w := 0;
endchar;

%%%%%%%%%%%%%%%%%%%%%%%
%% "64flag nach oben" %
%%%%%%%%%%%%%%%%%%%%%%%

beginchar(48, 0, 4.25nhh#, 0);
         clear;
        w:=nhw;
         flagshaper(1, w, 2.5nhh, 2/3nhh, 5thinwidth, (0,1.75nhh));
         flagshaper(5, w, 2.25 nhh, 2/3nhh, 5thinwidth, (0,1nhh));
         flagshaper(9,w, 2  nhh, 2/3nhh, 5thinwidth, (0,0.34nhh));
         flagshaper(13,0.9w, 2nhh, 2/3nhh, 5thinwidth, (0,-0.32nhh));
        penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
         w := 0;
endchar;

%%%%%%%%%%%%%%%%%%%%%%%%
%% "128flag nach oben" %
%%%%%%%%%%%%%%%%%%%%%%%%

beginchar(49, 0,   4.5nhh#, 0);
         clear;
        w:=nhw;
         flagshaper (1, w, 2.25nhh, 2/3nhh, 5thinwidth, (0,2.5nhh));
         flagshaper (5, w, 2.25nhh, 2/3nhh, 5thinwidth, (0,1.75nhh));
         flagshaper (9, w, 2 nhh, 2/3nhh, 5thinwidth, (0,1nhh));
         flagshaper(13,0.9 w, 2nhh, 2/3nhh, 5thinwidth, (0,0.5nhh));
         flagshaper(17,0.9 w, 2nhh, 1/3nhh, 5thinwidth, (0,0nhh));
         w := 0;
endchar;