% Feta (not the Font-En-Tja) music font --  bracket tips -*-Fundamental-*-
% This file is part of LilyPond, the GNU music typesetter.
%
% Copyright (C) 2005--2022 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
% The LilyPond font is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.

fet_begingroup ("brackettips");

def draw_bracket (expr thick_sharp, width_sharp, updown) =
  begingroup;
    save p, thin, thick, flattening, width, hair, flare;
    path p;
    pair tipdir;

    flattening = 0.72;
    thick# = thick_sharp;
    flare# = flattening * width#;
    width# = width_sharp;

    define_pixels (thick, width, flare);
    if updown = 1:
      set_char_box (0, width#, .5 thick#, flare#);
    else:
      set_char_box (0, width#, flare#, .5 thick#);
    fi;

    thin = 2 linethickness;
    hair = 1.25 linethickness;

    pickup pencircle scaled thin;
    y7 = y1;
    x7 = x2;
    z2 = z4r + (thin, 0);

    penpos3 (thin, 0);
    penpos4 (thin, 90);

    z3 = z4;

    top y3 = 0.5 thick;
    lft x3 = 0.0;
    x1 = x3l;
    y1 = -0.5 thick;

    z8 = .5 [z2, z7];
    top y5 = flare;
    rt x5 = width;

    p := z8{right}
         ..tension 1.2.. z5{curl 0};
    tipdir := direction 1 of p;

    penpos5 (hair, angle tipdir);
    penpos6 (hair, 90 + angle tipdir);

    z5 = z6;

    pickup pencircle scaled 1;

    fill (z1
          -- z3l{up}
          .. z4r{right}
          -- z2{right}
          .. z6r{tipdir}
          .. z5r
          .. z6l{-tipdir}
          ..tension 1.1.. z7{left}
          & z7
          -- z1
          & cycle) yscaled updown;

    if updown = 1:
      penlabels (1, 2, 3, 4, 5, 6, 7, 8);
    fi;
  endgroup;
enddef;


fet_beginchar ("bracket tip up", "up");
  draw_bracket (0.45 staff_space#, 1.9 staff_space#, 1);
fet_endchar;


fet_beginchar ("bracket tip down", "down");
  draw_bracket (0.45 staff_space#, 1.9 staff_space#, -1);
fet_endchar;

fet_endgroup ("brackettips");
