]> git.donarmstrong.com Git - lilypond.git/blob - mf/parmesan-timesig.mf
Merge branch 'master' of git://git.sv.gnu.org/lilypond
[lilypond.git] / mf / parmesan-timesig.mf
1 % -%-Fundamental-%- -*-Metafont-*-
2 % parmesan-timesig.mf -- implement ancient time signatures
3
4 % source file of LilyPond's pretty-but-neat music font
5
6 % (c) 1998--2006 Mats Bengtsson <matsb@s3.kth.se>,
7 %                Christian Mondrup <scancm@biobase.dk>
8 % (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
9
10
11 fet_begingroup ("timesig")
12
13 path threequartercircle;
14 threequartercircle = halfcircle & quartercircle rotated 180;
15
16 save mensural_Cdiameter, mensural_Cthickness, mensural_Chairpin;
17 mensural_Cdiameter# := 3/2 staff_space#;
18 mensural_Cthickness# := 2 linethickness#;
19 mensural_Chairpin# := 0.5 linethickness#;
20 define_pixels(mensural_Cdiameter, mensural_Cthickness);
21 define_pixels(mensural_Chairpin);
22
23 %%%%%%%%
24 %
25 %
26 %
27 % MENSURAL NOTATION
28 %
29 %
30 %
31
32 def draw_nail (expr bottom_left, top_right) =
33         save round;
34         round = floor min(blot_diameter,
35                           xpart (top_right-bottom_left),
36                           ypart (top_right-bottom_left));
37
38         pickup pencircle scaled round;
39
40         begingroup;
41                 save x,y;
42                 z2+(round/2,round/2) = top_right + (mensural_Cthickness/2, 0);
43                 z4-(round/2,round/2) = bottom_left;
44                 y3 = y2;
45                 y4 = y1;
46                 x2 = x1 + mensural_Cthickness/2;
47                 x2 - x1 = x4 - x3;
48                 x5 = x1;
49                 x6 = x4;
50                 y5 = y6 = y2 - 2mensural_Cthickness;
51
52                 pickup pencircle scaled round;
53                 fill bot z1 .. rt z1 --- rt z5 .. rt z2 .. top z2 ---
54                      top z3 .. lft z3 .. lft z6 --- lft z4 .. bot z4 ---
55                      cycle;
56         endgroup;
57
58 enddef;
59
60 def mensural_timesig (expr verbose_name, internal_name,
61                       full_circle, reverse_circle, slashed, dotted) =
62
63         fet_beginchar(verbose_name, internal_name)
64                 if slashed:
65                         set_char_box(0,
66                                      mensural_Cdiameter# + mensural_Cthickness#,
67                                      .75 (mensural_Cdiameter# + mensural_Cthickness#),
68                                      .75 (mensural_Cdiameter# + mensural_Cthickness#));
69                         if (full_circle or dotted):
70                                 draw_nail((-mensural_Cthickness/2, -d), (mensural_Cthickness/2, h));
71                         else:
72                                 draw_nail((-mensural_Cthickness, -d), (0, h));
73                         fi;
74                 else:
75                         set_char_box(0,
76                                      mensural_Cdiameter# + mensural_Cthickness#,
77                                      .5 (mensural_Cdiameter# + mensural_Cthickness#),
78                                      .5 (mensural_Cdiameter# + mensural_Cthickness#));
79                 fi;
80                 pickup pencircle xscaled mensural_Cthickness yscaled mensural_Chairpin rotated 0;
81                 if full_circle:
82                         draw fullcircle scaled mensural_Cdiameter;
83                 elseif reverse_circle:
84                         draw threequartercircle rotated 225 scaled mensural_Cdiameter;
85                 else:
86                         draw threequartercircle rotated 45 scaled mensural_Cdiameter;
87                 fi;
88                 if dotted:
89                         pickup pencircle scaled 4 linethickness;
90                         draw (0,0);
91                 fi;
92                 currentpicture := currentpicture shifted 0.5(mensural_Cdiameter + mensural_Cthickness, 0);
93         fet_endchar;
94 enddef;
95
96 %% tempus imperfectum cum prolatione imperfecta
97 mensural_timesig ("Mensural 4/4 meter", "mensural44",
98                   false, false, false, false);
99
100 %% tempus imperfectum cum prolatione imperfecta proportio dupla
101 mensural_timesig ("Mensural 2/2 meter", "mensural22",
102                   false, false, true, false);
103
104 %% tempus perfectum cum prolatione imperfecta
105 mensural_timesig ("Mensural 3/2 meter", "mensural32",
106                   true, false, false, false);
107
108 %% tempus imperfectum cum prolatione perfecta
109 mensural_timesig ("Mensural 6/4 meter", "mensural64",
110                   false, false, false, true);
111
112 %% tempus perfectum cum prolatione perfecta
113 mensural_timesig ("Mensural 9/4 meter", "mensural94",
114                   true, false, false, true);
115
116 %% tempus perfectum cum prolatione imperfecta proportio dupla
117 mensural_timesig ("Mensural 3/4 meter", "mensural34",
118                   true, false, true, false);
119
120 %% tempus imperfectum cum prolatione perfecta proportio dupla
121 mensural_timesig ("Mensural 6/8 meter", "mensural68",
122                   false, false, true, true);
123
124 %% tempus perfectum cum prolatione perfecta proportio dupla
125 mensural_timesig ("Mensural 9/8 meter", "mensural98",
126                   true, false, true, true);
127         
128 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
129 mensural_timesig ("Mensural 4/8 meter", "mensural48",
130                   false, true, false, false);
131
132 %% tempus imperfectum cum prolatione perfecta diminutio simplex
133 mensural_timesig ("Mensural 6/8 meter", "mensural68alt",
134                   false, true, false, true);
135
136 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
137 mensural_timesig ("Mensural 2/4 meter", "mensural24",
138                   false, true, true, false);
139
140 %%%%%%%%
141 %
142 %
143 %
144 % NEO-MENSURAL NOTATION
145 %
146 %
147 %
148
149 save neomensural_Cdiameter, neomensural_Cthickness;
150 neomensural_Cdiameter# := 3/2 staff_space#;
151 neomensural_Cthickness# := 2 linethickness#;
152 define_pixels(neomensural_Cdiameter, neomensural_Cthickness);
153
154 def neomensural_timesig (expr verbose_name, internal_name,
155                          full_circle, reverse_circle, slashed, dotted) =
156
157         fet_beginchar(verbose_name, internal_name)
158                 if slashed:
159                         set_char_box(0,
160                                      neomensural_Cdiameter# + neomensural_Cthickness#,
161                                      .5 (neomensural_Cdiameter# + neomensural_Cthickness#),
162                                      .5 (neomensural_Cdiameter# + neomensural_Cthickness#));
163                         if (full_circle or dotted):
164                                 draw_block((-neomensural_Cthickness/2, -d), (neomensural_Cthickness/2, h));
165                         else:
166                                 draw_block((-neomensural_Cthickness, -d), (0, h));
167                         fi;
168                 else:
169                         set_char_box(0,
170                                      neomensural_Cdiameter# + neomensural_Cthickness#,
171                                      .5 (neomensural_Cdiameter# + neomensural_Cthickness#),
172                                      .5 (neomensural_Cdiameter# + neomensural_Cthickness#));
173                 fi;
174                 pickup pencircle scaled neomensural_Cthickness;
175                 if full_circle:
176                         draw fullcircle scaled neomensural_Cdiameter;
177                 elseif reverse_circle:
178                         draw threequartercircle rotated 225 scaled neomensural_Cdiameter;
179                 else:
180                         draw threequartercircle rotated 45 scaled neomensural_Cdiameter;
181                 fi;
182                 if dotted:
183                         pickup pencircle scaled 4 linethickness;
184                         draw (0,0);
185                 fi;
186                 currentpicture := currentpicture shifted 0.5(neomensural_Cdiameter + neomensural_Cthickness, 0);
187         fet_endchar;
188 enddef;
189
190 %% tempus imperfectum cum prolatione imperfecta
191 neomensural_timesig ("Mensural 4/4 meter", "neomensural44",
192                         false, false, false, false);
193
194 %% tempus imperfectum cum prolatione imperfecta proportio dupla
195 neomensural_timesig ("Mensural 2/2 meter", "neomensural22",
196                         false, false, true, false);
197
198 %% tempus perfectum cum prolatione imperfecta
199 neomensural_timesig ("Mensural 3/2 meter", "neomensural32",
200                         true, false, false, false);
201
202 %% tempus imperfectum cum prolatione perfecta
203 neomensural_timesig ("Mensural 6/4 meter", "neomensural64",
204                         false, false, false, true);
205
206 %% tempus perfectum cum prolatione perfecta
207 neomensural_timesig ("Mensural 9/4 meter", "neomensural94",
208                         true, false, false, true);
209
210 %% tempus perfectum cum prolatione imperfecta proportio dupla
211 neomensural_timesig ("Mensural 3/4 meter", "neomensural34",
212                         true, false, true, false);
213
214 %% tempus imperfectum cum prolatione perfecta proportio dupla
215 neomensural_timesig ("Mensural 6/8 meter", "neomensural68",
216                         false, false, true, true);
217
218 %% tempus perfectum cum prolatione perfecta proportio dupla
219 neomensural_timesig ("Mensural 9/8 meter", "neomensural98",
220                         true, false, true, true);
221         
222 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
223 neomensural_timesig ("Mensural 4/8 meter", "neomensural48",
224                         false, true, false, false);
225
226 %% tempus imperfectum cum prolatione perfecta diminutio simplex
227 neomensural_timesig ("Mensural 6/8 meter", "neomensural68alt",
228                         false, true, false, true);
229
230 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
231 neomensural_timesig ("Mensural 2/4 meter", "neomensural24",
232                         false, true, true, false);
233
234 fet_endgroup ("timesig")