% -%-Fundamental-%- -*-Metafont-*-
% parmesan-rests.mf -- implement ancient rests
% 
% source file of LilyPond's pretty-but-neat music font
% 
% (c) 2001--2004 Juergen Reuter <reuter@ipd.uka.de>
% 
% Neo-mensural rests originally by
% Christian Mondrup and Mats Bengtsson
% 

fet_begingroup("rests")


%%%%%%%%
%
%
%
% NEO-MENSURAL NOTATION
%
%
%

% Neo-mensural longa and breve are identical with default longa and breve.

neomens_block_rest_x# = 2/5 staff_space#;
neomens_block_rest_y# = 1/1 staff_space#;
neomens_half_block_rest_y# = 5/8 staff_space#;

define_pixels(neomens_block_rest_x,
	      neomens_block_rest_y, neomens_half_block_rest_y);

def neomens_half_block_rest =
	draw_block ((0,0), (neomens_block_rest_x, neomens_half_block_rest_y));
	enddef;

fet_beginchar("Neo-mensural maxima rest", "-3neo_mensural", "neomensmaximarest");
	set_char_box(0, 3 neomens_block_rest_x#,
		     neomens_block_rest_y#, neomens_block_rest_y#);
	draw_block ((0,-neomens_block_rest_y),
		     (neomens_block_rest_x, neomens_block_rest_y));
	addto currentpicture also currentpicture shifted (2 neomens_block_rest_x, 0);
fet_endchar;

fet_beginchar("Neo-mensural longa rest", "-2neo_mensural", "neomenslongarest");
	set_char_box(0, neomens_block_rest_x#,
		     neomens_block_rest_y#, neomens_block_rest_y#);
	draw_block ((0,-neomens_block_rest_y),
		    (neomens_block_rest_x, neomens_block_rest_y));
fet_endchar;

fet_beginchar("Neo-mensural breve rest", "-1neo_mensural", "neomensbreverest");
	set_char_box(0, neomens_block_rest_x#,
		     0, neomens_block_rest_y#);
	draw_block ((0,0), (neomens_block_rest_x, neomens_block_rest_y));
fet_endchar;

fet_beginchar("Neo-mensural whole rest", "0neo_mensural", "neomenssemibrevisrest");
	set_char_box(0, neomens_block_rest_x#,
		     neomens_half_block_rest_y#,  0);
	neomens_half_block_rest;
	currentpicture :=
		currentpicture shifted (0,- neomens_half_block_rest_y);
fet_endchar;

fet_beginchar("Neo-mensural half rest", "1neo_mensural", "neomensminimahalfrest");
	set_char_box(0, neomens_block_rest_x#,
		     0, neomens_half_block_rest_y#);
	neomens_half_block_rest;
fet_endchar;

neomensrestsize# = 0.8 staff_space#;

fet_beginchar("Neo-mensural 4th rest","2neo_mensural","neomenssemiminimarest")
	set_char_box(0,neomensrestsize#,0,neomensrestsize#);
        pickup pencircle scaled 2 stafflinethickness;
	lft x1 = 0;
	bot y1 = 0;
	lft x2 = 0;
	top y2 = h;
	rt x3 = w;
	bot y3 = h/2;
	draw z1 .. z2;
	draw z2 .. z3;
fet_endchar

fet_beginchar("Neo-mensural 8th rest","3neo_mensural","neomensfusarest")
	set_char_box(0,neomensrestsize#,0,neomensrestsize#);
        pickup pencircle scaled 2 stafflinethickness;
	rt x1 = w;
	bot y1 = 0;
	rt x2 = w;
	top y2 = h;
	lft x3 = 0;
	bot y3 = h/2;
	draw z1 .. z2;
	draw z2 .. z3;
fet_endchar

fet_beginchar("Neo-mensural 16th rest","4neo_mensural","neomenssemifusarest")
	set_char_box(0,neomensrestsize#,0,staff_space#);
        pickup pencircle scaled 2 stafflinethickness;
	rt x1 = w;
	bot y1 = 0;
	rt x2 = w;
	top y2 = h;

	draw z1 .. z2;

        pickup pencircle scaled 2 stafflinethickness;
	rt x3 = w;
	top y3 = h;
	lft x4 = 0;
	bot y4 = h/2;
	rt x5 = w;
	top y5 = 5/8h;
	lft x6 = 0;
	bot y6 = h/8;

	draw z3 .. z4;
	draw z5 .. z6;
fet_endchar


%%%%%%%%
%
%
%
% MENSURAL NOTATION
%
%
%

pen_width# = 0.3 staff_space#;
pen_height# = 0;
pen_rotation = 30;
slight_pen_rotation = 15;

mens_block_rest_y# = 1/1 staff_space#;
mens_half_block_rest_y# = 5/8 staff_space#;

define_pixels(mens_block_rest_y, mens_half_block_rest_y,
	      pen_width, pen_height);

fet_beginchar("Mensural maxima rest", "-3mensural", "mensmaximarest");
	set_char_box(0, pen_width#,
		     mens_block_rest_y#, 2mens_block_rest_y#);
	pickup pencircle
		xscaled pen_width
		yscaled pen_height
		rotated slight_pen_rotation;
	draw (w/2, -mens_block_rest_y) -- (w/2, 2 mens_block_rest_y);
fet_endchar;

fet_beginchar("Mensural longa rest", "-2mensural", "menslongarest");
	set_char_box(0, pen_width#,
		     mens_block_rest_y#, mens_block_rest_y#);
	pickup pencircle
		xscaled pen_width
		yscaled pen_height
		rotated slight_pen_rotation;
	draw (w/2, -mens_block_rest_y) -- (w/2, mens_block_rest_y);
fet_endchar;

fet_beginchar("Mensural breve rest", "-1mensural", "mensbreverest");
	set_char_box(0, pen_width#,
		     0, mens_block_rest_y#);
	pickup pencircle
		xscaled pen_width
		yscaled pen_height
		rotated slight_pen_rotation;
	draw (w/2, 0) -- (w/2, mens_block_rest_y);
fet_endchar;

fet_beginchar("Mensural whole rest", "0mensural", "menssemibrevisrest");
	set_char_box(0, pen_width#,
		     mens_half_block_rest_y#, 0);
	pickup pencircle
		xscaled pen_width
		yscaled pen_height
		rotated slight_pen_rotation;
	draw (w/2, 0) -- (w/2, -mens_half_block_rest_y);
fet_endchar;

fet_beginchar("Mensural half rest", "1mensural", "mensminimahalfrest");
	set_char_box(0, pen_width#,
		     0, mens_half_block_rest_y#);
	pickup pencircle
		xscaled pen_width
		yscaled pen_height
		rotated slight_pen_rotation;
	draw (w/2, 0) -- (w/2, mens_half_block_rest_y);
fet_endchar;

mensrestsize# = .8staff_space#;

fet_beginchar("Mensural 4th rest","2mensural","menssemiminimarest")
	set_char_box(0,mensrestsize#,0,mensrestsize#);
	pickup pencircle
		xscaled pen_width
		yscaled pen_height
		rotated pen_rotation;
	lft x1 =      0;     y1 = 0;
	lft x2 =      0; top y2 = 5/8 h;
	rt  x3 =  1/5 w; bot y3 = 6/8 h;
	rt  x4 =      w; bot y4 = 4/8 h;
	draw z1 -- z2 -- z3 -- z4;
fet_endchar

fet_beginchar("Mensural 8th rest","3mensural","mensfusarest")
	set_char_box(0,mensrestsize#,0,mensrestsize#);
	pickup pencircle
		xscaled pen_width
		yscaled pen_height
		rotated pen_rotation;
	rt  x1 =      w;     y1 = 0;
	rt  x2 =      w; top y2 = 5/8 h;
	lft x3 =  1/5 w; bot y3 = 6/8 h;
	lft x4 =      0; bot y4 = 4/8 h;
	draw z1 -- z2 -- z3 -- z4;
fet_endchar

%
% FIXME: So far, I have never seen a semifusa rest printed.  Hence,
% the shape of this font character is currently pure invention.  --jr
%
fet_beginchar("Mensural 16th rest","4mensural","menssemifusarest")
	set_char_box(0,mensrestsize#,0,staff_space#);
	pickup pencircle
		xscaled pen_width
		yscaled pen_height
		rotated pen_rotation;

	rt  x1 =      w;     y1 = 0;
	rt  x2 =      w; top y2 = 5.5/8 h;
	lft x3 =  1/5 w; bot y3 = 6.5/8 h;
	lft x4 =      0; bot y4 = 4.5/8 h;
	rt  x5 =      w; top y5 = 2.5/8 h;
	lft x6 =  1/5 w; bot y6 = 3.5/8 h;
	lft x7 =      0; bot y7 = 1.5/8 h;
	draw z1 -- z2 -- z3 -- z4;
	draw z5 -- z6 -- z7;
fet_endchar

fet_endgroup ("rests")
