%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                             %
%       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;
