]> git.donarmstrong.com Git - lilypond.git/blob - mf/parmesan-timesig.mf
* mf/feta-params.mf (stafflines): introduce linethickness as
[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--2003 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 linethickness#;
19 Chairpin# := 0.5 linethickness#;
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, ly_name,
60                         full_circle, reverse_circle, slashed, dotted) =
61
62         fet_beginchar(verbose_name, internal_name, ly_name)
63                 if slashed:
64                         set_char_box(0,
65                                      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(0,
75                                      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 linethickness;
89                         draw (0,0);
90                 fi;
91                 currentpicture := currentpicture shifted 0.5(Cdiameter + Cthickness, 0);
92         fet_endchar;
93 enddef;
94
95 %% tempus imperfectum cum prolatione imperfecta
96 mens_timesig ("Mensural 4/4 meter", "mensural4/4", "mensuralfourfourmeter",
97                 false, false, false, false);
98
99 %% tempus imperfectum cum prolatione imperfecta proportio dupla
100 mens_timesig ("Mensural 2/2 meter", "mensural2/2", "mensuralallabreve",
101                 false, false, true, false);
102
103 %% tempus perfectum cum prolatione imperfecta
104 mens_timesig ("Mensural 3/2 meter", "mensural3/2", "mensuralthreetwometer",
105                 true, false, false, false);
106
107 %% tempus imperfectum cum prolatione perfecta
108 mens_timesig ("Mensural 6/4 meter", "mensural6/4", "mensuralsixfourmeter",
109                 false, false, false, true);
110
111 %% tempus perfectum cum prolatione perfecta
112 mens_timesig ("Mensural 9/4 meter", "mensural9/4", "mensuralninefourmeter",
113                 true, false, false, true);
114
115 %% tempus perfectum cum prolatione imperfecta proportio dupla
116 mens_timesig ("Mensural 3/4 meter", "mensural3/4", "mensuralthreefourmeter",
117                 true, false, true, false);
118
119 %% tempus imperfectum cum prolatione perfecta proportio dupla
120 mens_timesig ("Mensural 6/8 meter", "mensural6/8", "mensuralsixeightmeter",
121                 false, false, true, true);
122
123 %% tempus perfectum cum prolatione perfecta proportio dupla
124 mens_timesig ("Mensural 9/8 meter", "mensural9/8", "mensuralnineeight",
125                 true, false, true, true);
126         
127 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
128 mens_timesig ("Mensural 4/8 meter", "mensural4/8", "mensuralfoureightmeter",
129                 false, true, false, false);
130
131 %% tempus imperfectum cum prolatione perfecta diminutio simplex
132 mens_timesig ("Mensural 6/8 meter", "mensural6/8alt", "mensuralsixeightmeteralt",
133                 false, true, false, true);
134
135 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
136 mens_timesig ("Mensural 2/4 meter", "mensural2/4", "mensuraltwofourmeter",
137                 false, true, true, false);
138
139 %%%%%%%%
140 %
141 %
142 %
143 % NEO-MENSURAL NOTATION
144 %
145 %
146 %
147
148 save neo_Cdiameter, neo_Cthickness;
149 neo_Cdiameter# := 3/2 staff_space#;
150 neo_Cthickness# := 2 linethickness#;
151 define_pixels(neo_Cdiameter, neo_Cthickness);
152
153 def neo_mens_timesig (expr verbose_name, internal_name, ly_name,
154                         full_circle, reverse_circle, slashed, dotted) =
155
156         fet_beginchar(verbose_name, internal_name, ly_name)
157                 if slashed:
158                         set_char_box(0,
159                                      neo_Cdiameter# + neo_Cthickness#,
160                                      .5 (neo_Cdiameter# + neo_Cthickness#),
161                                      .5 (neo_Cdiameter# + neo_Cthickness#));
162                         if (full_circle or dotted):
163                                 draw_block((-neo_Cthickness/2, -d), (neo_Cthickness/2, h));
164                         else:
165                                 draw_block((-neo_Cthickness, -d), (0, h));
166                         fi;
167                 else:
168                         set_char_box(0,
169                                      neo_Cdiameter# + neo_Cthickness#,
170                                      .5 (neo_Cdiameter# + neo_Cthickness#),
171                                      .5 (neo_Cdiameter# + neo_Cthickness#));
172                 fi;
173                 pickup pencircle scaled neo_Cthickness;
174                 if full_circle:
175                         draw fullcircle scaled neo_Cdiameter;
176                 elseif reverse_circle:
177                         draw threequartercircle rotated 225 scaled neo_Cdiameter;
178                 else:
179                         draw threequartercircle rotated 45 scaled neo_Cdiameter;
180                 fi;
181                 if dotted:
182                         pickup pencircle scaled 4 linethickness;
183                         draw (0,0);
184                 fi;
185                 currentpicture := currentpicture shifted 0.5(neo_Cdiameter + neo_Cthickness, 0);
186         fet_endchar;
187 enddef;
188
189 %% tempus imperfectum cum prolatione imperfecta
190 neo_mens_timesig ("Mensural 4/4 meter", "neo_mensural4/4", "neomensuralfourfourmeter",
191                         false, false, false, false);
192
193 %% tempus imperfectum cum prolatione imperfecta proportio dupla
194 neo_mens_timesig ("Mensural 2/2 meter", "neo_mensural2/2", "neomensuralallabreve",
195                         false, false, true, false);
196
197 %% tempus perfectum cum prolatione imperfecta
198 neo_mens_timesig ("Mensural 3/2 meter", "neo_mensural3/2", "neomensuralthreetwometer",
199                         true, false, false, false);
200
201 %% tempus imperfectum cum prolatione perfecta
202 neo_mens_timesig ("Mensural 6/4 meter", "neo_mensural6/4", "neomensuralsixfourmeter",
203                         false, false, false, true);
204
205 %% tempus perfectum cum prolatione perfecta
206 neo_mens_timesig ("Mensural 9/4 meter", "neo_mensural9/4", "neomensuralninefourmeter",
207                         true, false, false, true);
208
209 %% tempus perfectum cum prolatione imperfecta proportio dupla
210 neo_mens_timesig ("Mensural 3/4 meter", "neo_mensural3/4", "neomensuralthreefourmeter",
211                         true, false, true, false);
212
213 %% tempus imperfectum cum prolatione perfecta proportio dupla
214 neo_mens_timesig ("Mensural 6/8 meter", "neo_mensural6/8", "neomensuralsixeightmeter",
215                         false, false, true, true);
216
217 %% tempus perfectum cum prolatione perfecta proportio dupla
218 neo_mens_timesig ("Mensural 9/8 meter", "neo_mensural9/8", "neomensuralnineeight",
219                         true, false, true, true);
220         
221 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
222 neo_mens_timesig ("Mensural 4/8 meter", "neo_mensural4/8", "neomensuralfoureightmeter",
223                         false, true, false, false);
224
225 %% tempus imperfectum cum prolatione perfecta diminutio simplex
226 neo_mens_timesig ("Mensural 6/8 meter", "neo_mensural6/8alt", "neomensuralsixeightmeteralt",
227                         false, true, false, true);
228
229 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
230 neo_mens_timesig ("Mensural 2/4 meter", "neo_mensural2/4", "neomensuraltwofourmeter",
231                         false, true, true, false);
232
233 fet_endgroup ("timesig")