% Feta (not the Font-En-Tja) music font -- ancient rests % This file is part of LilyPond, the GNU music typesetter. % % Copyright (C) 2001--2015 Juergen Reuter % % Neo-mensural rests originally by % Christian Mondrup and Mats Bengtsson. % % % 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 . 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", "M3neomensural"); 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", "M2neomensural"); 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", "M1neomensural"); 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", "0neomensural"); 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", "1neomensural"); 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", "2neomensural"); set_char_box (0, neomensrestsize#, 0, neomensrestsize#); pickup pencircle scaled 2 stafflinethickness; lft x1 = 0; bot y1 = 0; lft x2 = lft x3 = 0; top y2 = top y3 = h; rt x4 = w; bot y4 = h / 2; z11 = z1 - stafflinethickness * unitvector (z2 - z1); z14 = z4 + stafflinethickness * unitvector (z4 - z3); penpos1 (2 stafflinethickness, 0); penpos2 (2 stafflinethickness, 0); penpos3 (2 stafflinethickness, angle (z4 - z3) - 90); penpos4 (2 stafflinethickness, angle (z4 - z3) - 90); fill z1l -- z2l -- z2r -- z1r .. z11 .. z1l .. cycle; fill z3l -- z4l .. z14 .. z4r -- z3r .. z2l{up} .. z3l .. cycle; penlabels (1, 2, 3, 4); labels (11, 14); fet_endchar; fet_beginchar ("Neo-mensural 8th rest", "3neomensural"); set_char_box (0, neomensrestsize#, 0, neomensrestsize#); pickup pencircle scaled 2 stafflinethickness; rt x1 = w; bot y1 = 0; rt x2 = rt x3 = w; top y2 = top y3 = h; lft x4 = 0; bot y4 = h / 2; z11 = z1 - stafflinethickness * unitvector (z2 - z1); z14 = z4 + stafflinethickness * unitvector (z4 - z3); penpos1 (2 stafflinethickness, 0); penpos2 (2 stafflinethickness, 0); penpos3 (2 stafflinethickness, angle (z4 - z3) - 90); penpos4 (2 stafflinethickness, angle (z4 - z3) - 90); fill z1l -- z2l -- z2r -- z1r .. z11 .. z1l .. cycle; fill z3l -- z4l .. z14 .. z4r -- z3r .. z2r{down} .. z3l .. cycle; penlabels (1, 2, 3, 4); labels (11, 14); fet_endchar; fet_beginchar ("Neo-mensural 16th rest", "4neomensural"); 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; rt x3 = w; top y3 = h; lft x4 = 0; bot y4 = h / 2; rt x5 = w; top y5 = 5/8 h; lft x6 = 0; bot y6 = h / 8; z11 = z1 - stafflinethickness * unitvector (z2 - z1); z14 = z4 + stafflinethickness * unitvector (z4 - z3); z16 = z6 + stafflinethickness * unitvector (z6 - z5); penpos1 (2 stafflinethickness, 0); penpos2 (2 stafflinethickness, 0); penpos3 (2 stafflinethickness, angle (z4 - z3) - 90); penpos4 (2 stafflinethickness, angle (z4 - z3) - 90); penpos5 (2 stafflinethickness, angle (z6 - z5) - 90); penpos6 (2 stafflinethickness, angle (z6 - z5) - 90); fill z1l -- z2l -- z2r -- z1r .. z11 .. z1l .. cycle; fill z3l -- z4l .. z14 .. z4r -- z3r .. z2r{down} .. z3l .. cycle; fill z5l -- z6l .. z16 .. z6r -- z5r -- z5l -- cycle; penlabels (1, 2, 3, 4, 5, 6); labels (11, 14, 16); 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", "M3mensural"); set_char_box (0, pen_width#, mens_block_rest_y#, 2 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, 2 mens_block_rest_y); fet_endchar; fet_beginchar ("Mensural longa rest", "M2mensural"); 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", "M1mensural"); 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"); 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"); 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# = .8 staff_space#; fet_beginchar ("Mensural 4th rest", "2mensural"); 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; labels (1, 2, 3, 4); fet_endchar; % % FIXME: The left sharp corner produces ugly results at lower resolutions. % fet_beginchar ("Mensural 8th rest", "3mensural"); 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; labels (1, 2, 3, 4); 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 % % % FIXME: The left sharp corner produces ugly results at lower resolutions. % fet_beginchar ("Mensural 16th rest", "4mensural"); 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; labels (1, 2, 3, 4, 5, 6, 7); fet_endchar; fet_endgroup ("rests")