]> git.donarmstrong.com Git - lilypond.git/blobdiff - mf/parmesan-custodes.mf
* scm/music-functions.scm (make-ottava-set):
[lilypond.git] / mf / parmesan-custodes.mf
index f61f2449f6c5cc83daf047d5f9d2025fcda2a916..b4a0be94a056d2e4592a4c23e5a4621c8ad6fbc5 100644 (file)
 % -*-Fundamental-*-
-% feta-custodes.mf --  implement custos symbols
+% parmesan-custodes.mf -- implement ancient custodes
 % 
 % source file of LilyPond's pretty-but-neat music font
 % 
-% (C) 2000, 2002 Juergen Reuter <reuter@ipd.uka.de>
+% (c)  2000--2003 Juergen Reuter <reuter@ipd.uka.de>
 % 
 
 save black_notehead_width;
 numeric black_notehead_width;
 
-fet_begingroup("custodes");
+fet_begingroup ("custodes")
 
 noteheight#:=staff_space#+ (1 + overdone_heads) *stafflinethickness#;
 define_pixels(noteheight);
 
+save between_staff_lines, on_staff_line, anywhere;
+between_staff_lines = 0;
+on_staff_line = 1;
+anywhere = 2;
+
+save dir_up, dir_down;
+dir_up = 1;
+dir_down = -1;
+
 
 %%%%%%%%
 %
+%
 % Hufnagel style
 %
+%
 
-% stem up
-fet_beginchar("Custos Hufnagel", "hufnagel", "hufnagel")
-       save b_h,a_w;
-       a_b:=1.54; % b_h*a_b/a_w = wd/ht
-       b_h:=0.85;
-       a_w:=1.09;
-
-       save a, beta, ht, wd;
-       ht# =noteheight#;
-       2beta#=ht#*b_h;
-       a# = beta#*a_b;
-       wd# = 2a# / a_w;
-       set_char_box(0, wd#, ht#/2, ht#/2);
-       black_notehead_width# := wd#;
-
-       save rh_width, rh_height, rh_edge; % rhombus dimensions
-       rh_width#=0.7ht#; % ht*tan(35)
-       rh_height#=1.0ht#;
-       rh_edge#=0.61ht#; % (ht/2)/cos(35)
-
-       define_pixels(rh_width, rh_height, rh_edge);
-       pickup pencircle
-         xscaled stafflinethickness
-         yscaled rh_edge rotated -35;
-       z1=(0.5rh_width,+0.25rh_height);
-       z2=(1.0rh_width,-0.25rh_height);
-       z3=(2.0rh_width,+0.50rh_height);
-       draw z1 -- z2 -- z3;
-fet_endchar;
-
-% stem down
-fet_beginchar("Reverse Custos Hufnagel", "rhufnagel", "rhufnagel")
-       save b_h,a_w;
-       a_b:=1.54; % b_h*a_b/a_w = wd/ht
-       b_h:=0.85;
-       a_w:=1.09;
-
-       save a, beta, ht, wd;
-       ht# =noteheight#;
-       2beta#=ht#*b_h;
-       a# = beta#*a_b;
-       wd# = 2a# / a_w;
-       set_char_box(0, wd#, ht#/2, ht#/2);
-       black_notehead_width# := wd#;
-
-       save rh_width, rh_height, rh_edge; % rhombus dimensions
-       rh_width#=0.7ht#; % ht*tan(35)
-       rh_height#=1.0ht#;
-       rh_edge#=0.61ht#; % (ht/2)/cos(35)
-
-       define_pixels(rh_width, rh_height, rh_edge);
-       pickup pencircle
-         xscaled stafflinethickness
-         yscaled rh_edge rotated +35;
-       z1=(0.5rh_width,-0.25rh_height);
-       z2=(1.0rh_width,+0.25rh_height);
-       z3=(2.0rh_width,-0.50rh_height);
-       draw z1 -- z2 -- z3;
-fet_endchar;
-
+% parameterized hufnagel custos
+def custos_hufnagel(expr verbose_name, internal_name, ly_name,
+                   direction, staffline_adjustment) =
+
+       fet_beginchar(verbose_name, internal_name, ly_name)
+
+               save b_h, a_w;
+               a_b := 1.54; % b_h * a_b / a_w = wd / ht
+               b_h := 0.85;
+               a_w := 1.09;
+
+               save a, beta, ht, wd;
+               ht# = noteheight#;
+               2beta# = ht# * b_h;
+               a# = beta# * a_b;
+               wd# = 2a# / a_w;
+               black_notehead_width# := wd#;
+
+               save rh_width, rh_height, rh_edge; % rhombus dimensions
+               rh_width# / ht# = tand(35);
+               rh_height# = 1.0ht#;
+               rh_edge# * cosd(35) = ht# / 2;
+
+               save stem_size;
+               if staffline_adjustment = between_staff_lines:
+                       stem_size = 0.25;
+               elseif staffline_adjustment = on_staff_line:
+                       stem_size = 0.75;
+               else: % staffline_adjustment = anywhere
+                       stem_size = 0.50;
+               fi;
+
+               define_pixels(rh_width, rh_height, rh_edge);
+               pickup pencircle
+                 xscaled stafflinethickness
+                 yscaled rh_edge
+                 rotated (-35*direction);
+               z1=(0.0rh_width,+0.25direction*rh_height);
+               z2=(0.5rh_width,-0.25direction*rh_height);
+               z3-z2=(stem_size*rh_width,+0.75*stem_size*direction*rh_height);
+               draw z1 -- z2 -- z3;
+
+               set_char_box(stafflinethickness#, wd# / 2,
+                            ht# / 2, ht# / 2);
+
+       fet_endchar;
+enddef;
+
+% custos hufnagel, stem up, between staff lines
+custos_hufnagel("Custos Hufnagel", "hufnagel-u0", "hufnagelu0",
+               dir_up, between_staff_lines);
+
+% custos hufnagel, stem up, on staff line
+custos_hufnagel("Custos Hufnagel", "hufnagel-u1", "hufnagelu1",
+               dir_up, on_staff_line);
+
+% custos hufnagel, stem up, anywhere
+custos_hufnagel("Custos Hufnagel", "hufnagel-u2", "hufnagelu2",
+               dir_up, anywhere);
+
+% custos hufnagel, stem down, between staff lines
+custos_hufnagel("Reverse Custos Hufnagel", "hufnagel-d0", "hufnageld0",
+               dir_down, between_staff_lines);
+
+% custos hufnagel, stem down, on staff line
+custos_hufnagel("Reverse Custos Hufnagel", "hufnagel-d1", "hufnageld1",
+               dir_down, on_staff_line);
+
+% custos hufnagel, stem down, anywhere
+custos_hufnagel("Reverse Custos Hufnagel", "hufnagel-d2", "hufnageld2",
+               dir_down, anywhere);
 
 %%%%%%%%
 %
+%
 % Medicaea style
 %
+%
+
+def custos_medicaea(expr verbose_name, internal_name, ly_name,
+                   direction, staffline_adjustment) =
+
+       fet_beginchar(verbose_name, internal_name, ly_name)
+
+               save b_h, a_w;
+               a_b := 1.54; % b_h * a_b / a_w = wd / ht
+               b_h := 0.85;
+               a_w := 1.09;
+
+               save a, beta, ht, wd;
+               ht# = noteheight#; %%  * mag;
+               2beta# = ht# * b_h;
+               a# = beta# * a_b;
+               wd# = 0.4a# / a_w;      % width intentionally too small
+               black_notehead_width# := wd#;
+
+               define_pixels(ht, wd);
+
+               save stem_size;
+               if staffline_adjustment = between_staff_lines:
+                       stem_size = 0.90;
+               elseif staffline_adjustment = on_staff_line:
+                       stem_size = 1.40;
+               else: % staffline_adjustment = anywhere
+                       stem_size = 1.15;
+               fi;
+
+               pickup pencircle xscaled blot_diameter yscaled 1.0ht;
+               z1 = (0.0wd, 0.0ht);
+               z2 = z1 + (1.0wd - blot_diameter/2, 0);
+               draw z1 .. z2;
+
+               pickup pencircle scaled stafflinethickness;
+               z3 = (1.0wd - stafflinethickness/2, 0.0ht);
+               z4 = z3 + (0, +direction*stem_size*ht);
+               draw z3 .. z4;
+
+               set_char_box(0, wd#, ht# / 2, ht# / 2);
+
+       fet_endchar;
+enddef;
+
+% custos medicaea, stem up, between staff lines
+custos_medicaea("Custos Med.", "medicaea-u0", "medicaea_u0",
+               dir_up, between_staff_lines);
+
+% custos medicaea, stem up, on staff line
+custos_medicaea("Custos Med.", "medicaea-u1", "medicaea_u1",
+               dir_up, on_staff_line);
+
+% custos medicaea, stem up, anywhere
+custos_medicaea("Custos Med.", "medicaea-u2", "medicaea_u2",
+               dir_up, anywhere);
 
-% stem up
-fet_beginchar("Custos Med.", "medicaea", "medicaea")
-       save b_h, a_w;
-       a_b := 1.54; % b_h*a_b/a_w = wd/ht
-       b_h := 0.85;
-       a_w := 1.09;
-
-       save a, beta, ht, wd;
-       ht# = noteheight# * mag;
-       2beta# = ht# * b_h;
-       a# = beta# * a_b;
-       wd# = 0.4a# / a_w;
-       set_char_box(0, wd#, ht#/2, ht#/2); % width intentionally too small
-       black_notehead_width# := wd#;
-
-       define_pixels(ht, wd);
-
-       % head
-       pickup pencircle xscaled blot_diameter yscaled 1.0ht;
-       z1 = (0.0wd, 0.0ht);
-       z2 = z1 + (1.0wd - blot_diameter/2, 0);
-       draw z1 .. z2;
-
-       % stem
-       pickup pencircle scaled stafflinethickness;
-       z3 = (1.0wd - stafflinethickness/2, 0.0ht);
-       z4 = z3 + (0, +1.0ht);
-       draw z3 .. z4;
-fet_endchar;
-
-
-% stem down
-fet_beginchar("Reverse Custos Med.", "rmedicaea", "rmedicaea")
-       save b_h, a_w;
-       a_b := 1.54; % b_h*a_b/a_w = wd/ht
-       b_h := 0.85;
-       a_w := 1.09;
-
-       save a, beta, ht, wd;
-       ht# = noteheight# * mag;
-       2beta# = ht# * b_h;
-       a# = beta# * a_b;
-       wd# = 0.4a# / a_w;
-       set_char_box(0, wd#, ht#/2, ht#/2); % width intentionally too small
-       black_notehead_width# := wd#;
-
-       define_pixels(ht, wd);
-
-       % head
-       pickup pencircle xscaled blot_diameter yscaled 1.0ht;
-       z1 = (0.0wd, 0.0ht);
-       z2 = z1 + (1.0wd - blot_diameter/2, 0);
-       draw z1 .. z2;
-
-       % stem
-       pickup pencircle scaled stafflinethickness;
-       z3 = (1.0wd - stafflinethickness/2, 0.0ht);
-       z4 = z3 + (0, -1.0ht);
-       draw z3 .. z4;
-fet_endchar;
+% custos medicaea, stem down, between staff lines
+custos_medicaea("Reverse Custos Med.", "medicaea-d0", "medicaead0",
+               dir_down, between_staff_lines);
 
+% custos medicaea, stem down, on staff line
+custos_medicaea("Reverse Custos Med.", "medicaea-d1", "medicaead1",
+               dir_down, on_staff_line);
+
+% custos medicaea, stem down, anywhere
+custos_medicaea("Reverse Custos Med.", "medicaea-d2", "medicaead2",
+               dir_down, anywhere);
 
 %%%%%%%%
 %
+%
 % Editio Vaticana style
 %
+%
+
+def custos_vaticana(expr verbose_name, internal_name, ly_name,
+                   direction, staffline_adjustment) =
+
+       fet_beginchar(verbose_name, internal_name, ly_name)
+
+               save b_h, a_w;
+               a_b := 1.54; % b_h * a_b / a_w = wd / ht
+               b_h := 0.85;
+               a_w := 1.09;
+
+               save a, beta, ht, wd;
+               ht# = noteheight# ; %%  * mag;
+               2beta# = ht# * b_h;
+               a# = beta# * a_b;
+               wd# = 0.4a# / a_w;
+               black_notehead_width# := wd#;
+
+               save stem_size;
+               if staffline_adjustment = between_staff_lines:
+                       stem_size = 0.60;
+               elseif staffline_adjustment = on_staff_line:
+                       stem_size = 1.10;
+               else: % staffline_adjustment = anywhere
+                       stem_size = 0.85;
+               fi;
+
+               define_pixels(ht, wd);
+               pickup pencircle scaled stafflinethickness;
+
+               z1 = (0.0wd, +direction*0.05ht);
+               z2 = (1.0wd + 0.5stafflinethickness, 0.0ht);
+               penpos1(0.5ht, 90);
+               penpos2(0.5ht, 90);
+               penstroke z1e{z2 - z1} .. {right}z2e;
 
-% stem up
-fet_beginchar("Custos Ed. Vat.", "vaticana", "vaticana")
-       save b_h, a_w;
-       a_b := 1.54; % b_h*a_b/a_w = wd/ht
-       b_h := 0.85;
-       a_w := 1.09;
-
-       save a, beta, ht, wd;
-       ht# = noteheight# * mag;
-       2beta# = ht# * b_h;
-       a# = beta# * a_b;
-       wd# = 0.4a# / a_w;
-       set_char_box(0, wd#, ht#/2, ht#/2);
-       black_notehead_width# := wd#;
-
-       define_pixels(ht, wd);
-       pickup pencircle scaled stafflinethickness;
-
-       z1 = (0.0wd, +0.05ht);
-       z2 = (1.0wd + 0.5stafflinethickness, 0.0ht);
-       penpos1(0.5ht, 90);
-       penpos2(0.5ht, 90);
-       penstroke z1e{z2 - z1} .. {right}z2e;
-
-       z3=(1.0wd, +0.0ht);
-       z4=(1.0wd, +1.0ht);
-       draw z3 -- z4;
-fet_endchar;
-
-
-% stem down
-fet_beginchar("Reverse Custos Ed. Vat.", "rvaticana", "rvaticana")
-       save b_h, a_w;
-       a_b := 1.54; % b_h*a_b/a_w = wd/ht
-       b_h := 0.85;
-       a_w := 1.09;
-
-       save a, beta, ht, wd;
-       ht# = noteheight# * mag;
-       2beta# = ht# * b_h;
-       a# = beta# * a_b;
-       wd# = 0.4a# / a_w;
-       set_char_box(0, wd#, ht#/2, ht#/2);
-       black_notehead_width# := wd#;
-
-       define_pixels(ht, wd);
-       pickup pencircle scaled stafflinethickness;
-
-       z1 = (0.0wd, -0.05ht);
-       z2 = (1.0wd + 0.5stafflinethickness, -0.0ht);
-       penpos1(0.5ht, 90);
-       penpos2(0.5ht, 90);
-       penstroke z1e{z2 - z1} .. {right}z2e;
-
-       z3=(1.0wd, -0.0ht);
-       z4=(1.0wd, -1.0ht);
-       draw z3 -- z4;
-fet_endchar;
+               z3=(1.0wd, +0.0ht);
+               z4=(1.0wd, +direction*stem_size*ht);
+               draw z3 -- z4;
 
+               set_char_box(0, wd#, 0.3 ht#, 0.3 ht#);
+
+       fet_endchar;
+enddef;
+
+% custos vaticana, stem up, between staff lines
+custos_vaticana("Custos Ed. Vat.", "vaticana-u0", "vaticana_u0",
+               dir_up, between_staff_lines);
+
+% custos vaticana, stem up, on staff line
+custos_vaticana("Custos Ed. Vat.", "vaticana-u1", "vaticana_u1",
+               dir_up, on_staff_line);
+
+% custos vaticana, stem up, anywhere
+custos_vaticana("Custos Ed. Vat.", "vaticana-u2", "vaticana_u2",
+               dir_up, anywhere);
+
+% custos vaticana, stem down, between staff lines
+custos_vaticana("Reverse Custos Ed. Vat.", "vaticana-d0", "vaticanad0",
+               dir_down, between_staff_lines);
+
+% custos vaticana, stem down, on_staff_line
+custos_vaticana("Reverse Custos Ed. Vat.", "vaticana-d1", "vaticanad1",
+               dir_down, on_staff_line);
+
+% custos vaticana, stem down, anywhere
+custos_vaticana("Reverse Custos Ed. Vat.", "vaticana-d2", "vaticanad2",
+               dir_down, anywhere);
 
 %%%%%%%%
 %
+%
 % Mensural style
 %
+%
 
-% stem up
-fet_beginchar("Custos Mensural", "mensural", "mensural")
-       save b_h,a_w;
-       a_b:=1.54; % b_h*a_b/a_w = wd/ht
-       b_h:=0.85;
-       a_w:=1.09;
-
-       save a, beta, ht, wd;
-       ht# =noteheight#;
-       2beta#=ht#*b_h;
-       a# = beta#*a_b;
-       wd# = 2a# / a_w;
-       set_char_box(0, wd#, ht#/2, ht#/2); % width intentionally too small
-       black_notehead_width# := wd#;
-
-       define_pixels(ht, wd);
-       pickup pencircle xscaled stafflinethickness yscaled 0.4ht rotated -35;
-       z1=(0.0wd,-0.2ht);
-       z2=(0.2wd,+0.2ht);
-       z3=(0.4wd,-0.2ht);
-       z4=(0.6wd,+0.2ht);
-       z5=(0.8wd,-0.2ht);
-       z6=(1.6wd,+1.4ht);
-       draw z1 -- z2 -- z3 -- z4 -- z5 -- z6;
-fet_endchar;
-
-% stem down
-fet_beginchar("Reverse Custos Mensural", "rmensural", "rmensural")
-       save b_h,a_w;
-       a_b:=1.54; % b_h*a_b/a_w = wd/ht
-       b_h:=0.85;
-       a_w:=1.09;
-
-       save a, beta, ht, wd;
-       ht# =noteheight#;
-       2beta#=ht#*b_h;
-       a# = beta#*a_b;
-       wd# = 2a# / a_w;
-       set_char_box(0, wd#, ht#/2, ht#/2); % width intentionally too small
-       black_notehead_width# := wd#;
-
-       define_pixels(ht, wd);
-       pickup pencircle xscaled stafflinethickness yscaled 0.4ht rotated +35;
-       z1=(0.0wd,+0.2ht);
-       z2=(0.2wd,-0.2ht);
-       z3=(0.4wd,+0.2ht);
-       z4=(0.6wd,-0.2ht);
-       z5=(0.8wd,+0.2ht);
-       z6=(1.6wd,-1.4ht);
-       draw z1 -- z2 -- z3 -- z4 -- z5 -- z6;
-fet_endchar;
-
-fet_endgroup("custodes");
-define_pixels(black_notehead_width);
-
+def custos_mensural(expr verbose_name, internal_name, ly_name,
+                   direction, staffline_adjustment) =
+
+       fet_beginchar(verbose_name, internal_name, ly_name)
+
+               save b_h,a_w;
+               a_b:=1.54; % b_h * a_b / a_w = wd / ht
+               b_h:=0.85;
+               a_w:=1.09;
+
+               save a, beta, ht, wd;
+               ht# = noteheight#;
+               2beta# = ht# * b_h;
+               a# = beta# * a_b;
+               wd# = 2a# / a_w;        % width intentionally too small
+               set_char_box(0, wd#, ht# / 2, ht# / 2);
+               black_notehead_width# := wd#;
+
+               save stem_size;
+               if staffline_adjustment = between_staff_lines:
+                       stem_size = 0.85;
+               elseif staffline_adjustment = on_staff_line:
+                       stem_size = 1.35;
+               else: % staffline_adjustment = anywhere
+                       stem_size = 1.10;
+               fi;
+
+               define_pixels(ht, wd);
+               pickup pencircle
+                 xscaled stafflinethickness
+                 yscaled 0.4ht
+                 rotated (-35*direction);
+               z1=(0.0wd,-direction*0.2ht);
+               z2=(0.2wd,+direction*0.2ht);
+               z3=(0.4wd,-direction*0.2ht);
+               z4=(0.6wd,+direction*0.2ht);
+               z5=(0.8wd,-direction*0.2ht);
+               z6-z5=(stem_size*0.5wd,+direction*stem_size*ht);
+               draw z1 -- z2 -- z3 -- z4 -- z5 -- z6;
+
+       fet_endchar;
+enddef;
+
+% custos mensural, stem up, between staff lines
+custos_mensural("Custos Mensural", "mensural-u0", "mensuralu0",
+               dir_up, between_staff_lines);
+
+% custos mensural, stem up, on staff line
+custos_mensural("Custos Mensural", "mensural-u1", "mensuralu1",
+               dir_up, on_staff_line);
+
+% custos mensural, stem up, anywhere
+custos_mensural("Custos Mensural", "mensural-u2", "mensuralu2",
+               dir_up, anywhere);
+
+% custos mensural, stem down, between staff lines
+custos_mensural("Reverse Custos Mensural", "mensural-d0", "mensurald0",
+               dir_down, between_staff_lines);
+
+% custos mensural, stem down, on staff line
+custos_mensural("Reverse Custos Mensural", "mensural-d1", "mensurald1",
+               dir_down, on_staff_line);
+
+% custos mensural, stem down, anywhere
+custos_mensural("Reverse Custos Mensural", "mensural-d2", "mensurald2",
+               dir_down, anywhere);
+
+fet_endgroup ("custodes")