]> git.donarmstrong.com Git - lilypond.git/blob - mf/parmesan-timesig.mf
* stepmake/stepmake/omf-targets.make (local-install): add
[lilypond.git] / mf / parmesan-timesig.mf
1 % -*-Fundamental-*-
2 % parmesan-timesig.mf -- implement ancient time signatures
3
4 % source file of LilyPond's pretty-but-neat music font
5
6 % (c) 1998--2002 Mats Bengtsson <matsb@s3.kth.se>,
7 %                Christian Mondrup <scancm@biobase.dk>
8
9 fet_begingroup ("timesig")
10
11 path threequartercircle;
12 threequartercircle = halfcircle & quartercircle rotated 180;
13
14 save Cdiameter, Cthickness, Chairpin;
15 Cdiameter# := 3/2 staff_space#;
16 Cthickness# := 2 stafflinethickness#;
17 Chairpin# := 0.5 stafflinethickness#;
18 define_pixels(Cdiameter, Cthickness, Chairpin);
19
20 %%%%%%%%
21 %
22 %
23 %
24 % MENSURAL NOTATION
25 %
26 %
27 %
28
29 def draw_nail (expr bottom_left, top_right) =
30         save round;
31         round = floor min(blot_diameter,
32                                 xpart (top_right-bottom_left),
33                                 ypart (top_right-bottom_left));
34
35         pickup pencircle scaled round;
36
37         begingroup;
38                 save x,y;
39                 z2+(round/2,round/2) = top_right + (Cthickness/2, 0);
40                 z4-(round/2,round/2) = bottom_left;
41                 y3 = y2;
42                 y4 = y1;
43                 x2 = x1 + Cthickness/2;
44                 x2 - x1 = x4 - x3;
45                 x5 = x1;
46                 x6 = x4;
47                 y5 = y6 = y2 - 2Cthickness;
48
49                 pickup pencircle scaled round;
50                 fill bot z1 .. rt z1 --- rt z5 .. rt z2 .. top z2 ---
51                         top z3 .. lft z3 .. lft z6 --- lft z4 .. bot z4 ---
52                         cycle;
53         endgroup;
54
55 enddef;
56
57 def mens_timesig (expr verbose_name, internal_name, mudela_name,
58                         full_circle, reverse_circle, slashed, dotted) =
59
60         fet_beginchar(verbose_name, internal_name, mudela_name)
61                 if slashed:
62                         set_char_box(.5 Cdiameter# + staff_space#,
63                                 .5 Cdiameter# + staff_space#, 
64                                 staff_space#,
65                                 staff_space#);
66                         if (full_circle or dotted):
67                                 draw_nail((-Cthickness/2, -1.5d), (Cthickness/2, 1.5h));
68                         else:
69                                 draw_nail((-Cthickness, -1.5d), (0, 1.5h));
70                         fi;
71                 else:
72                         set_char_box(.5 Cdiameter# + staff_space#,
73                                 .5 Cdiameter# + staff_space#, 
74                                 .5 Cdiameter#,
75                                 .5 Cdiameter#);
76                 fi;
77                 pickup pencircle xscaled Cthickness yscaled Chairpin rotated 0;
78                 if full_circle:
79                         draw fullcircle scaled Cdiameter;
80                 elseif reverse_circle:
81                         draw threequartercircle rotated 225 scaled Cdiameter;
82                 else:
83                         draw threequartercircle rotated 45 scaled Cdiameter;
84                 fi;
85                 if dotted:
86                         pickup pencircle scaled 4 stafflinethickness;
87                         draw (0,0);
88                 fi;
89         fet_endchar;
90 enddef;
91
92 %% tempus imperfectum cum prolatione imperfecta
93 mens_timesig ("Mensural 4/4 meter", "mensural4/4", "mensuralfourfourmeter",
94                 false, false, false, false);
95
96 %% tempus imperfectum cum prolatione imperfecta proportio dupla
97 mens_timesig ("Mensural 2/2 meter", "mensural2/2", "mensuralallabreve",
98                 false, false, true, false);
99
100 %% tempus perfectum cum prolatione imperfecta
101 mens_timesig ("Mensural 3/2 meter", "mensural3/2", "mensuralthreetwometer",
102                 true, false, false, false);
103
104 %% tempus imperfectum cum prolatione perfecta
105 mens_timesig ("Mensural 6/4 meter", "mensural6/4", "mensuralsixfourmeter",
106                 false, false, false, true);
107
108 %% tempus perfectum cum prolatione perfecta
109 mens_timesig ("Mensural 9/4 meter", "mensural9/4", "mensuralninefourmeter",
110                 true, false, false, true);
111
112 %% tempus perfectum cum prolatione imperfecta proportio dupla
113 mens_timesig ("Mensural 3/4 meter", "mensural3/4", "mensuralthreefourmeter",
114                 true, false, true, false);
115
116 %% tempus imperfectum cum prolatione perfecta proportio dupla
117 mens_timesig ("Mensural 6/8 meter", "mensural6/8", "mensuralsixeightmeter",
118                 false, false, true, true);
119
120 %% tempus perfectum cum prolatione perfecta proportio dupla
121 mens_timesig ("Mensural 9/8 meter", "mensural9/8", "mensuralnineeight",
122                 true, false, true, true);
123         
124 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
125 mens_timesig ("Mensural 4/8 meter", "mensural4/8", "mensuralfoureightmeter",
126                 false, true, false, false);
127
128 %% tempus imperfectum cum prolatione perfecta diminutio simplex
129 mens_timesig ("Mensural 6/8 meter", "mensural6/8alt", "mensuralsixeightmeteralt",
130                 false, true, false, true);
131
132 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
133 mens_timesig ("Mensural 2/4 meter", "mensural2/4", "mensuraltwofourmeter",
134                 false, true, true, false);
135
136 %%%%%%%%
137 %
138 %
139 %
140 % NEO-MENSURAL NOTATION
141 %
142 %
143 %
144
145 save neo_Cdiameter, neo_Cthickness;
146 neo_Cdiameter# := 3/2 staff_space#;
147 neo_Cthickness# := 2 stafflinethickness#;
148 define_pixels(neo_Cdiameter, neo_Cthickness);
149
150 def neo_mens_timesig (expr verbose_name, internal_name, mudela_name,
151                         full_circle, reverse_circle, slashed, dotted) =
152
153         fet_beginchar(verbose_name, internal_name, mudela_name)
154                 if slashed:
155                         set_char_box(.5 neo_Cdiameter# + staff_space#,
156                                 .5 neo_Cdiameter# + staff_space#, 
157                                 staff_space#,
158                                 staff_space#);
159                         if (full_circle or dotted):
160                                 draw_block((-neo_Cthickness/2, -d), (neo_Cthickness/2, h));
161                         else:
162                                 draw_block((-neo_Cthickness, -d), (0, h));
163                         fi;
164                 else:
165                         set_char_box(.5 neo_Cdiameter# + staff_space#,
166                                 .5 neo_Cdiameter# + staff_space#, 
167                                 .5 neo_Cdiameter#,
168                                 .5 neo_Cdiameter#);
169                 fi;
170                 pickup pencircle scaled neo_Cthickness;
171                 if full_circle:
172                         draw fullcircle scaled neo_Cdiameter;
173                 elseif reverse_circle:
174                         draw threequartercircle rotated 225 scaled neo_Cdiameter;
175                 else:
176                         draw threequartercircle rotated 45 scaled neo_Cdiameter;
177                 fi;
178                 if dotted:
179                         pickup pencircle scaled 4 stafflinethickness;
180                         draw (0,0);
181                 fi;
182         fet_endchar;
183 enddef;
184
185 %% tempus imperfectum cum prolatione imperfecta
186 neo_mens_timesig ("Mensural 4/4 meter", "neo_mensural4/4", "neomensuralfourfourmeter",
187                         false, false, false, false);
188
189 %% tempus imperfectum cum prolatione imperfecta proportio dupla
190 neo_mens_timesig ("Mensural 2/2 meter", "neo_mensural2/2", "neomensuralallabreve",
191                         false, false, true, false);
192
193 %% tempus perfectum cum prolatione imperfecta
194 neo_mens_timesig ("Mensural 3/2 meter", "neo_mensural3/2", "neomensuralthreetwometer",
195                         true, false, false, false);
196
197 %% tempus imperfectum cum prolatione perfecta
198 neo_mens_timesig ("Mensural 6/4 meter", "neo_mensural6/4", "neomensuralsixfourmeter",
199                         false, false, false, true);
200
201 %% tempus perfectum cum prolatione perfecta
202 neo_mens_timesig ("Mensural 9/4 meter", "neo_mensural9/4", "neomensuralninefourmeter",
203                         true, false, false, true);
204
205 %% tempus perfectum cum prolatione imperfecta proportio dupla
206 neo_mens_timesig ("Mensural 3/4 meter", "neo_mensural3/4", "neomensuralthreefourmeter",
207                         true, false, true, false);
208
209 %% tempus imperfectum cum prolatione perfecta proportio dupla
210 neo_mens_timesig ("Mensural 6/8 meter", "neo_mensural6/8", "neomensuralsixeightmeter",
211                         false, false, true, true);
212
213 %% tempus perfectum cum prolatione perfecta proportio dupla
214 neo_mens_timesig ("Mensural 9/8 meter", "neo_mensural9/8", "neomensuralnineeight",
215                         true, false, true, true);
216         
217 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
218 neo_mens_timesig ("Mensural 4/8 meter", "neo_mensural4/8", "neomensuralfoureightmeter",
219                         false, true, false, false);
220
221 %% tempus imperfectum cum prolatione perfecta diminutio simplex
222 neo_mens_timesig ("Mensural 6/8 meter", "neo_mensural6/8alt", "neomensuralsixeightmeteralt",
223                         false, true, false, true);
224
225 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
226 neo_mens_timesig ("Mensural 2/4 meter", "neo_mensural2/4", "neomensuraltwofourmeter",
227                         false, true, true, false);
228
229 fet_endgroup ("timesig")