]> git.donarmstrong.com Git - lilypond.git/blobdiff - mf/parmesan-scripts.mf
Add '-dcrop' option to ps and svg backends
[lilypond.git] / mf / parmesan-scripts.mf
index 8bc65723d9eead514b9c5984d3226402d88cbb6d..ee2b56b715c34f4eb5c96dd8db00ab5399eebe21 100644 (file)
-% -*-Fundamental-*-
-% parmesan-scripts.mf -- implement ancient script symbols
-% 
-% source file of LilyPond's pretty-but-neat music font
-% 
-% (c) 2002--2004 Juergen Reuter <reuter@ipd.uka.de>
+% Feta (not the Font-En-Tja) music font --  ancient script symbols
+% This file is part of LilyPond, the GNU music typesetter.
+%
+% Copyright (C) 2002--2015 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_begingroup ("scripts");
 
-fet_beginchar("ictus", "ictus", "ictus")
+fet_beginchar ("ictus", "ictus");
        save ht, wd;
        ht# = .35 staff_space#;
        wd# = linethickness#;
-       define_pixels(wd, ht);
-       pickup pencircle
-               xscaled wd
-               yscaled blot_diameter;
-       set_char_box(wd#/2, wd#/2, ht#/2, ht#/2);
-       x1 = 0; top y1 = ht/2;
-       x2 = 0; bot y2 = -ht/2;
-       draw z1 -- z2;
+
+       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);
+
+       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", "uaccentus")
+
+fet_beginchar ("accentus up", "uaccentus");
        draw_accentus;
+       penlabels (1, 2, 3, 4);
 fet_endchar;
 
-fet_beginchar("accentus down", "daccentus", "daccentus")
+
+fet_beginchar ("accentus down", "daccentus");
        draw_accentus;
        y_mirror_char;
 fet_endchar;
 
 
-def draw_half_ellipse(expr ellips_width, ellips_height) =
-       save width, height, thin, thick;
-       width# = ellips_width;
-       height# = ellips_height;
-       define_pixels(width, height);
-
-       thin = thick = 0.6 linethickness;
-       penpos1(thick, 0);
-       penpos2(thin, -90);
-       z1r = (width/2, 0);
-       z2r = (0, -height/2);
-       penlabels(1,2);
-       penstroke z1e{down} .. {left}z2e;
-       addto currentpicture also currentpicture xscaled -1;
+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", "usemicirculus")
-       draw_half_ellipse(5/16 staff_space#, 5/16 staff_space#);
+
+fet_beginchar ("half circle", "usemicirculus");
+       draw_half_circle (5/16 staff_space#);
+
        currentpicture := currentpicture yscaled -1;
-       set_char_box(width#/2, width#/2, 0, height#/2);
+
+       set_char_box (diameter# / 2, diameter# / 2,
+                     0, diameter# / 2);
 fet_endchar;
 
 
-fet_beginchar("half circle", "dsemicirculus", "dsemicirculus")
-       draw_half_ellipse(5/16 staff_space#, 5/16 staff_space#);
-       set_char_box(width#/2, width#/2, height#/2, 0);
+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", "circulus")
-       draw_half_ellipse(5/16 staff_space#, 5/16 staff_space#);
-       set_char_box(width#/2, width#/2, height#/2, height#/2);
-       addto currentpicture also currentpicture yscaled -1;
+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", "augmentum")
+fet_beginchar ("augmentum", "augmentum");
        save diameter;
+
        diameter# = 0.25 staff_space#;
-       define_pixels(diameter);
+
+       define_pixels (diameter);
+
        pickup pencircle scaled diameter;
-       draw (0,0);
-       set_char_box(diameter#/2, diameter#/2, diameter#/2, diameter#/2);
+
+       drawdot (0, 0);
+
+       set_char_box (diameter# / 2, diameter# / 2,
+                     diameter# / 2, diameter# / 2);
 fet_endchar;
 
 
 def draw_signum_congruentiae =
-       save za, zb, zc, zd, ze, zf, zg, zh;
-       pair za, zb, zc, zd, ze, zf, zg, zh;
-
-       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#);
-
-       pickup pencircle
-               xscaled 1.0 linethickness
-               yscaled 5.0 linethickness
-               rotated -35;
-       za = (+0.50staff_space, +2.00staff_space);
-       zb = (+0.00staff_space, +2.00staff_space);
-       zc = (-0.50staff_space, +1.50staff_space);
-       zd = (-0.25staff_space, +1.00staff_space);
-       ze = (+0.10staff_space, +0.80staff_space);
-       zf = (+0.00staff_space, +0.00staff_space);
-       draw za{-1,+1} .. zb .. zc .. zd .. ze .. zf;
+       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;
-       zg = (-0.5staff_space, +0.0staff_space);
-       zh = (+0.5staff_space, +0.0staff_space);
-       drawdot zg;
-       drawdot zh;
+
+       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", "usignumcongruentiae")
+
+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", "dsignumcongruentiae")
+
+fet_beginchar ("signum congruentiae down", "dsignumcongruentiae");
        draw_signum_congruentiae;
        xy_mirror_char;
 fet_endchar;
 
-fet_endgroup ("scripts")
+
+%%%%%%%%%%%%%
+%%%%
+%%%% 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");