% Feta (not the Font-En-Tja) music font --  ancient script symbols
% This file is part of LilyPond, the GNU music typesetter.
%
% Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
% 
%
% 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 ("scripts");

fet_beginchar ("ictus", "ictus");
	save ht, wd;
	ht# = .35 staff_space#;
	wd# = linethickness#;

	define_pixels (wd, ht);

	save ellipse, T;
	path ellipse;
	transform T;

	T := identity xscaled wd
		      yscaled blot_diameter;
	pickup pencircle transformed T;
	ellipse := fullcircle transformed T;

	set_char_box (wd# / 2, wd# / 2, ht# / 2, ht# / 2);

	x1 = 0;
	top y1 = ht / 2;
	x2 = 0;
	bot y2 = -ht / 2;

	fill get_subpath (ellipse, up, down, z1)
	     -- get_subpath (ellipse, down, up, z2)
	     -- cycle;

	labels (1, 2);
fet_endchar;


def draw_accentus =
	save thick, thin, ht, wd;

	thin# = 1 linethickness#;
	thick# = 1.2 linethickness#;
	ht# = .35 staff_space#;
	wd# = .25 staff_space#;

	define_pixels (wd, ht, thin, thick);

	z1 = z2 = (-wd / 2 + thin / 2, -ht / 2 + thin / 2);
	z3 = z4 = (wd / 2 - thick / 2, ht / 2 - thick / 2);

	penpos1 (thin, angle (z1 - z3));
	penpos2 (thin, angle (z1 - z3) + 90);
	penpos3 (thick, angle (z3 - z1) + 90);
	penpos4 (thick, angle (z3 - z1));

	fill z1r
	     .. z2r
	     -- z3l
	     .. z4r
	     .. z3r
	     -- z2l
	     .. cycle;

	set_char_box (wd#/2, wd#/2, ht#/2, ht#/2);
enddef;


fet_beginchar ("accentus up", "uaccentus");
	draw_accentus;
	penlabels (1, 2, 3, 4);
fet_endchar;


fet_beginchar ("accentus down", "daccentus");
	draw_accentus;
	y_mirror_char;
fet_endchar;


def draw_half_circle (expr diam) =
	save diameter, thick;

	diameter# = diam;

	define_pixels (diameter);

	thick = 0.6 linethickness;

	penpos1 (thick, 0);
	penpos2 (thick, -90);
	penpos3 (thick, -180);

	z1r = (diameter / 2, 0);
	z2r = (0, -diameter / 2);
	z3r = (-diameter / 2, 0);
	
	penstroke z1e{down}
		  .. z2e{left}
		  .. z3e{up};
enddef;


fet_beginchar ("half circle", "usemicirculus");
	draw_half_circle (5/16 staff_space#);

	currentpicture := currentpicture yscaled -1;

	set_char_box (diameter# / 2, diameter# / 2,
		      0, diameter# / 2);
fet_endchar;


fet_beginchar ("half circle", "dsemicirculus");
	draw_half_circle (5/16 staff_space#);

	set_char_box (diameter# / 2, diameter# / 2,
		      diameter# / 2, 0);

	penlabels (1, 2, 3);
fet_endchar;


fet_beginchar ("circle", "circulus");
	save diameter, thick;

	diameter# = 5/16 staff_space#;

	define_pixels (diameter);

	thick = 0.6 linethickness;

	fill fullcircle scaled diameter;
	unfill fullcircle scaled (diameter - 2 thick);

	set_char_box (diameter# / 2, diameter# / 2,
		      diameter# / 2, diameter# / 2);
fet_endchar;


fet_beginchar ("augmentum", "augmentum");
	save diameter;

	diameter# = 0.25 staff_space#;

	define_pixels (diameter);

	pickup pencircle scaled diameter;

	drawdot (0, 0);

	set_char_box (diameter# / 2, diameter# / 2,
		      diameter# / 2, diameter# / 2);
fet_endchar;


def draw_signum_congruentiae =
	set_char_box (0.50 staff_space# + 1.5 linethickness#,
		      0.50 staff_space# + 1.5 linethickness#,
		      2.5 linethickness#,
		      2.00 staff_space# + 3.5 linethickness#);

	save ellipse, pat;
	path ellipse, pat;

	ellipse := fullcircle xscaled 1.0 linethickness
			      yscaled 5.0 linethickness
			      rotated -35;

	z1 = (+0.50 staff_space, +2.00 staff_space);
	z2 = (+0.00 staff_space, +2.00 staff_space);
	z3 = (-0.50 staff_space, +1.50 staff_space);
	z4 = (-0.25 staff_space, +1.00 staff_space);
	z5 = (+0.10 staff_space, +0.80 staff_space);
	z6 = (+0.00 staff_space, +0.00 staff_space);

	pat := z1{-1, +1}
	       .. z2
	       .. z3
	       .. z4
	       .. z5
	       .. z6;

	% we avoid cusps originally present in `draw pat'
	fill get_subpath (ellipse,
			  -direction 0 of pat, direction 0 of pat, z1)
	     .. get_subpoint (ellipse, direction 1 of pat, z2)
		  {direction 1 of pat}
	     .. get_subpoint (ellipse, direction 2 of pat, z3)
		  {direction 2 of pat}
	     .. get_subpoint (ellipse, direction 3 of pat, z4)
		  {direction 3 of pat}
	     .. get_subpoint (ellipse, direction 4 of pat, z5)
		  {direction 4 of pat}
	     .. get_subpath (ellipse,
			     direction 4.8 of pat, -direction 5 of pat, z6)
	     .. get_subpoint (ellipse, -direction 4 of pat, z5)
		  {-direction 4 of pat}
	     .. get_subpoint (ellipse, -direction 3 of pat, z4)
		  {-direction 3 of pat}
	     .. get_subpoint (ellipse, -direction 2.5 of pat, point 2.5 of pat)
	     .. get_subpoint (ellipse, -direction 1 of pat, z2)
		  {-direction 1 of pat}
	     .. cycle;

	pickup pencircle scaled 3.0 linethickness;

	z7 = (-0.5 staff_space, +0.0 staff_space);
	z8 = (+0.5 staff_space, +0.0 staff_space);

	drawdot z7;
	drawdot z8;
enddef;


fet_beginchar ("signum congruentiae up", "usignumcongruentiae");
	draw_signum_congruentiae;
	labels (1, 2, 3, 4, 5, 6, 7, 8);
fet_endchar;


fet_beginchar ("signum congruentiae down", "dsignumcongruentiae");
	draw_signum_congruentiae;
	xy_mirror_char;
fet_endchar;


%%%%%%%%%%%%%
%%%%
%%%% Code for Kievan Notation
%%%%
%%%%%%%%%%%%%


fet_beginchar ("Kievan end of piece (slash)", "barline.kievan");
	% This draws the end of piece figure.
	% This figure is placed at the end of the musical piece,
	% after the staff.

	save hair_thickness, thick_thickness, width, depth, height, padding;
	hair# = 1.9 linethickness#;
	thick# = 6.0 linethickness#;
	width# = 1.0 staff_space#;
	height# + depth# = 4 staff_space#;
	depth# = height# + hair#;
	padding# = .2 staff_space#;

	set_char_box (0, width# + 3 padding#, depth#, height# + staff_space#);
	define_pixels (hair, thick, width, padding, depth, height);

	x7r - x2l = width;
	y1 - y3r = depth + height + linethickness / 2;
	z3 = z2;
	z4 = .5 [z1, z2]
	   = (width / 2 + padding, hair / 8);
	z5 = (x2 - .17 staff_space, 9/10 [y2, y1]);
	z7 - z6 = (.5 staff_space, -.2 staff_space);
	.4 [z6, z7] = 7/6 [z2, z1];

	penpos1 (hair, 0);
	penpos2 (hair, 0);
	penpos3 (hair, -90);
	penpos4 (thick, 10);
	penpos5 (thick, 35);
	penpos6 (hair, -90);
	penpos7 (.5 thick, -120);

	penlabels (1, 2, 3, 4, 5, 6, 7);

	penstroke z1e
		  -- z2e;

	fill z3l
	     -- z2l{z2 - z1}
	     .. z3r{right}
	     .. z4r
	     .. z5r
	     .. z6r
	     .. simple_serif (z7r, z7l, 80)
	     .. {left}z6l
	     .. z5l
	     .. z4l
	     .. {left}cycle;
fet_endchar;

fet_endgroup ("scripts");
