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