]> git.donarmstrong.com Git - lilypond.git/blob - mf/feta-nummer.mf
99af95c96568920ca2e6fa5cff9a8a9c9f339f1a
[lilypond.git] / mf / feta-nummer.mf
1 % feta-nummer.mf
2 % part of LilyPond's pretty-but-neat music font
3
4 fet_begingroup("nummer")
5 code := 47;
6
7 define_pixels(height,thick,thick,thin,hair);
8 foot_top#:=thick#;
9 foot_width#:=9/4thick#/fatten;
10 define_pixels(foot_top,foot_width);
11 define_pixels(kuulleke);
12
13 def calc_kuulleke(expr w,alpha) = 
14         begingroup;
15         save beta; beta=(alpha-90)/2;
16         save gamma; gamma=(90+alpha)/2;
17
18         penpos1(w/cosd(alpha),alpha);
19         penpos2(hair,90+beta);
20         z2=z1l+(1/2hair/tand((alpha+90)/2))*dir(beta);
21
22         penpos3(hair,gamma-90);
23         z3=z1r-(1/2hair/tand((90-alpha)/2))*dir(gamma);
24         z4=z1+kuulleke*dir(alpha-90);
25         endgroup;
26         enddef;
27
28 % should make generic macro? 
29 %
30 def draw_foot(expr xpos) = 
31         begingroup;
32         clearxy;
33         penpos1(thick,0);
34         z1=(xpos,foot_top);
35         penpos2(foot_width,0);
36         z2=(x1,0);
37         penpos3(hair,-90);
38         z3r=z2r;
39         penpos4(hair,90);
40         z4l=z2l;
41         z5=(x1,kuulleke);
42         penlabels(1,2,3,4);
43         fill z1..{right}z1r{down}..{right}z3l..z3r{left}..z5
44                 ..{left}z4l..z4r{right}..{up}z1l{right}..z1..cycle;
45         endgroup;
46         enddef;
47
48 def draw_six =
49         set_char_box(0, 2/3height#*widen, 0, height#);
50         message "w:"&decimal w;
51         message "h:"&decimal h;
52
53         penpos1(thin,90);
54         z1=(thick,h/2+thin-hair/2);
55         penpos2(hair,90);
56         z2=(w/2,y1);
57         penpos3(7/8thick,0);
58         % yup, should use the path fract [] "everywhere"
59         z3r=(w,1/2[0,y1]);
60         penpos4(hair,-90);
61         z4r=(x2,0);
62         penpos5(7/8thick,180);
63         z5r=(0,y1);
64         penpos6(hair,90);
65         z6r=(w-9/8thick*flaren,h);
66         penpos7(7/8thick,180);
67         z7r=(0,h/2);
68         penpos10(7/8thick,180);
69         z10r=(0,y3);
70         penlabels(1,2,3,4,5,6,7,8,9,10,11);
71         save t; t=tense;
72         fill z5{right}..z2r{right}..tension t..z3r{down}
73                 ..tension t..z4r{left}
74                 ..tension t..z7r{up}..tension t..z6r{right}
75                 ..z6l{left}..tension t..z7l{down}..z10l{up}..cycle;
76         draw_flare(z6r,0,-90,hair,thick*flaren);
77         unfill z2l{right}..tension t..z3l{down}..tension t
78                 ..z4l{left}..tension t..z10l{up}..tension t..cycle;
79         enddef;
80
81 fet_beginchar("Numeral 0", "0", "zero")
82 %       set_char_box(0, 4/5height#*widen, 0, height#);
83         set_char_box(0, 11/15height#*widen, 0, height#);
84         message "w:"&decimal w;
85         message "h:"&decimal h;
86         penpos1(thin,90);
87         z1r=(w/2,h);
88         penpos2(thick,0);
89         z2r=(w,h/2);
90         penpos3(thin,-90);
91         z3r=(w/2,0);
92         penpos4(thick,180);
93         z4r=(0,h/2);
94         fill z1r..z2r..z3r..z4r..cycle;
95         save t; t=1/tense;
96         unfill z1l..tension t..z2l..tension t..z3l
97                 ..tension t..z4l..tension t..cycle;
98 fet_endchar;
99         
100 fet_beginchar("Numeral 1", "1", "one")
101 %       set_char_box(0, 19/30height#*widen, 0, height#);
102         set_char_box(0, 1/2foot_width#+3/2thick#+1/2hair#, 0, height#);
103         message "w:"&decimal w;
104         message "h:"&decimal h;
105
106         save alpha; alpha=0;
107         calc_kuulleke(thick,alpha);
108         z1=(3/2thick,height);
109
110         penpos5(thick,0);
111         z5=(x1,foot_top);
112         
113         z6=(0,h/2);
114         save beta; beta=angle(z1l-z6);
115         penpos7(thin,beta-90);
116         z7l=z6;
117         penpos8(thin/cosd(beta),-90);
118         z8l=z1l;
119         penpos9(thin,beta-90);
120         z9r=z8r+(thin/cosd(beta))*(0,-1);
121         penlabels(1,2,3,4,5,6,7,8,9);
122         save gamma; gamma=angle(length(z1r-z1),+2kuulleke);
123         fill z2r{dir(alpha-gamma)}..z4..{dir(alpha+gamma)}z3l..z3r{down}
124                 ..{down}z5r{left}..z5..{left}z5l{up}..{up}z2l..cycle;
125         fill z7l{dir(beta)}..{dir(beta)}z1l..z2r..z9r{up}
126                 ..z9l{dir(180+beta)}..{dir(180+beta)}z7r..cycle;
127         penlabels(7,8,9);
128
129         draw_foot(x1);
130 fet_endchar;
131
132 fet_beginchar("Numeral 2", "2", "two")
133         set_char_box(0, 11/15height#*widen, 0, height#);
134         message "w:"&decimal w;
135         message "h:"&decimal h;
136         clearxy;
137         save alpha; alpha=-45*widen;
138         save beta; beta=85;
139         save gamma; gamma=beta-10;
140         save theta; theta=20/widen;
141         penpos1(hair,90+beta);
142         z1=(0,0)+(1/2sqrt(2)*hair)*dir(45);
143         penpos3(hair,90+gamma);
144         z3=(w,thick)+(1/2sqrt(2)*hair)*dir(-135);
145         penpos2(thick/fatten,90+alpha);
146         x2-x1=x3-x2; y2=11/16thick/widen;
147         penlabels(1,2,3);
148         fill z1r{dir(beta)}..{dir(alpha)}z2r..{dir(gamma)}z3r
149                 ..z3l{dir(180+gamma)}..{dir(180+alpha)}z2l
150                 ..{dir(180+beta)}z1l..cycle;
151
152         penpos4(thin,90);
153         z4r=(thick,2/5h);
154         penpos5(thick,0);
155         z5r=(w-thin/2,.72h);
156         penpos6(thin,90);
157         z6r=(1/2hair+thick*flaren,h);
158         penlabels(4,5,6);
159         save t; t=tense;
160         fill z1l{dir(beta)}..z4l{dir(theta)}..z5r{up}
161                 ..tension t..z6r{left}..z6l{right}
162                 ..z5l{down}..z4r{dir(180+theta)}
163                 ..{dir(180+beta)}z1r..cycle;
164         draw_flare(z6r,180,90,thin,thick*flaren);
165 fet_endchar;
166
167 fet_beginchar("Numeral 3", "3", "three")
168         set_char_box(0, 2/3height#*widen, 0, height#);
169         message "w:"&decimal w;
170         message "h:"&decimal h;
171         penpos1(hair,-90);
172         z1l=(17/16thick,h);
173         penpos2(7/8thick,180);
174         z2l=(w-thick/8,3/4h+thick/16);
175         penpos3(hair,90);
176         z3=(w/2,h/2+1/8thick);
177         penpos4(hair,90);
178         z4=(5/8thick,y3);
179         penpos5(thick,0);
180         z5r=(w,1/4h+thick/16);
181         penpos6(hair,-90);
182         z6r=(9/8thick,0);
183         penpos7(thin+hair,90);
184 %       z7=(x2,y3);
185         z7=(x5,y3);
186         penlabels(1,2,3,4,5,6,7);
187         save alpha; alpha=25;
188         save t; t=tense;
189         fill z1l{right}..tension t..z2l{down}..z7r{dir(180+alpha)}
190                 ..z7l{dir(-alpha)}..z5r{down}..tension t..z6r{left}
191                 ..z6l{right}..tension t..z5l{up}
192                 ..tension t..z3l{left}..z4l{left}
193                 ..z4r{right}..z3r{right}..tension t..z2r{up}
194                 ..tension t..z1r{left}..cycle;
195         draw_flare(z1l,180,90,hair,thick*flaren);
196         draw_flare(z6r,180,-90,hair,9/8thick*flaren);
197 fet_endchar;
198
199 fet_beginchar("Numeral 4", "4", "four")
200         set_char_box(0, 4/5height#*widen, 0, height#);
201         message "w:"&decimal w;
202         message "h:"&decimal h;
203
204         save alpha; alpha=0;
205         calc_kuulleke(3/2thick,alpha);
206         z1r=(w-3/4thick,height);
207
208         z5=(thin,1/4height+thin);
209         save beta; beta=angle(z3r-z5);
210         penpos6(thin,-90);
211         z6l=z5;
212         penpos7(thin,-90);
213         y7=y6; x7=w-1/2thin;
214         penpos8(thin,-alpha);
215         z8r=z5;
216         penlabels(1,2,3,4,5,6,7);
217         save gamma; gamma=angle(length(z1r-z1),+2kuulleke);
218         fill z2r{dir(alpha-gamma)}..z4..{dir(alpha+gamma)}z3l
219                 ..z3r{dir(180+beta)}..{dir(180+beta)}z8r{right}
220                 ..{right}z7l..z7r{left}..{left}z6r..z8l{dir(beta)}
221                 ..{up}z2l..cycle;
222
223         clearxy;
224
225         save alpha; alpha=beta;
226         calc_kuulleke(thick,alpha);
227         z1r=(w-3/4thick,height-(thin+1/2hair)/cosd(alpha));
228
229         penpos5(thick,0);
230         z5=(x1,foot_top);
231         
232         save gamma; gamma=angle(length(z1r-z1),+2kuulleke);
233         fill z2r{dir(alpha-gamma)}..z4..{dir(alpha+gamma)}z3l
234                 ..z3r{down}..{down}z5r{left}..z5..{left}z5l{up}
235                 ..{up}z2l..cycle;
236         penlabels(1,2,3,4,5);
237
238         draw_foot(x5);
239 fet_endchar;
240
241 fet_beginchar("Numeral 5", "5", "five")
242         set_char_box(0, 7/10height#*widen, 0, height#);
243         message "w:"&decimal w;
244         message "h:"&decimal h;
245         calc_kuulleke(w-thin,0);
246         z1=(w/2+1/8thick,h);
247         save alpha; alpha=0;
248         penpos5(thin,0);
249         z5l=(x1l,h-15/16thick);
250         penpos6(hair,90-45);
251         z6=z5r+1/2hair*dir(-45);
252         penpos7(thin,0);
253         z7l=(x1l,h/2+thin-hair);
254         penlabels(1,2,3,4,5,6,7);
255         save gamma; gamma=angle(length(z1r-z1),+2kuulleke);
256         fill z2r{dir(alpha-gamma)}..z4..{dir(alpha+gamma)}z3l
257                 ..z3r{dir(-135)}..{left}z6r..z6l{down}..z7r{down}
258                 ..z7l{up}..{up}z2l..cycle;
259         penpos8(thin,90);
260         z8l=(x7r,y7r-1/16thick);
261         penpos9(thin,90);
262         z9=(x11+3/16thick,10/16[y5,y7]);
263         penpos10(thick,0);
264         z10r=(w,1/2[y9r,y11r]);
265         penpos11(hair,-90);
266         z11r=(9/8thick,0);
267         penlabels(8,9,10,11);
268         save beta; beta=45;
269         save t; t=tense;
270         fill z8r{dir(beta)}..z9r{right}..tension t..z10r{down}
271                 ..tension t..z11r{left}
272                 ..z11l{right}..tension t..z10l{up}..tension t
273                 ..z9l{left}..z8l{dir(180+beta+10)}..cycle;
274         draw_flare(z11r,180,-90,hair,9/8thick*flaren);
275 fet_endchar;
276
277 fet_beginchar("Numeral 6", "6", "six")
278         draw_six;
279 fet_endchar;
280
281 fet_beginchar("Numeral 7", "7", "seven")
282         set_char_box(0, 11/15height#*widen, 0, height#);
283         message "w:"&decimal w;
284         message "h:"&decimal h;
285
286         save alpha; alpha=-180;
287 if true:
288         penpos1(3/2thick,180+alpha);
289         penpos2(hair,180+alpha-45);
290         z2=z1l+(1/4sqrt(2)*hair)*dir(alpha-135);
291         penpos3(hair,180+alpha+45);
292         z3=z1r+(1/4sqrt(2)*hair)*dir(alpha-45);
293         z4=z1+kuulleke*dir(alpha-90);
294 else:
295         % shit, does not work
296         calc_kuulleke(3/2thick,-alpha);
297 fi
298         z1l=(thin,0);
299
300         save beta; beta=55;
301         penpos5(thin,90+beta);
302         z5=(w,h)+(1/2sqrt(2)*thin)*dir(-135);
303
304         save gamma; gamma=angle(length(z1r-z1),+2kuulleke);
305         save delta; delta=12;
306         pickup pencircle;
307         fill z3l{dir(alpha-gamma)}..z4..{dir(alpha+gamma)}z2r..
308                 z2l{dir(beta+delta)}..{dir(beta)}z5r
309                 ..z5l{dir(180+beta)}..{dir(delta-90)}z3r..cycle;
310         penlabels(1,2,3,4,5);
311
312         clearxy;
313         save alpha; alpha=-45*widen;
314         penpos1(1/2thick,90);
315         z1=(3/2thin,h-(thick+thin)/2);
316         penpos3(thin,90+beta);
317         z3=(w,h)+(1/2sqrt(2)*thin)*dir(-135);
318         penpos2(thick/fatten,90+alpha);
319         x2=1/2[x1,x3]-1/4thick; y2=h-15/16thick+thin*widen;
320
321         penpos4(thin,0);
322         z4l=(0,h-thin/2);
323         penpos5(thin,0);
324         z5l=(0,h/2+thin/2);
325
326         penpos6(9/8thick,90);
327         z6r=(thin,y1r+2/16thick);
328         
329         fill z1r{dir(beta)}..{dir(alpha)}z2r..{dir(beta)}z3r
330                 ..z3l{dir(180+beta)}..{dir(180+alpha)}z2l
331                 ..{dir(180+beta)}z1l..z6l{down}..{down}z5r
332                 ..z5l{up}..{up}z4l..z4r{down}..{down}z6r..{right}cycle;
333         penlabels(1,2,3,4,5,6);
334 fet_endchar;
335
336 fet_beginchar("Numeral 8", "8", "eight")
337         set_char_box(0, 11/15height#*widen, 0, height#);
338         message "w:"&decimal w;
339         message "h:"&decimal h;
340         save alpha; alpha=60;
341         save beta; beta=alpha-15;
342         z1=(w/2,h/2+thick/8);
343         penpos2(hair,90+180+beta);
344         z2=(w/3,h/2+thin);
345         penpos3(3/2thin,0);
346         z3l=(0,h/4+thin/2);
347         penpos4(hair,90);
348         z4l=(x1,0);
349         penpos5(thick,90+90+alpha);
350         z5=z1+w/4*dir(alpha-90);
351         penpos6(thick,90+90+alpha);
352         z6=z1+(w/4-thin/2)*dir(90+alpha);
353         penpos7(hair,90);
354         z7r=(x1,h);
355         penpos8(3/2thin,0);
356         z8r=(w-thin/2,3/4h+thin/2);
357         penpos9(hair,90+180+beta);
358         z9=(2/3w,h/2);
359         penlabels(1,2,3,4,5,6,7,8,9);
360 %       save t; t=0.85;
361         save t; t=tense;
362         fill z2r{dir(180+beta)}..z3r{down}..z4r{right}
363                 ..z5r{dir(90+alpha)}..z6r{dir(90+alpha)}
364                 ..tension t..z7r{right}..z8r{down}..z9r{dir(180+beta)}
365                 ..z9l{dir(beta)}..z8l{up}..z7l{left}..z6l{dir(alpha-90)}
366                 ..z5l{dir(alpha-90)}..tension t..z4l{left}..z3l{up}
367                 ..z2l{dir(beta)}..cycle;
368 fet_endchar;
369
370 fet_beginchar("Numeral 9", "9", "nine")
371         draw_six;
372 %       xy_mirror_char;
373         currentpicture := currentpicture scaled -1;
374         currentpicture := currentpicture shifted (w,h);
375 fet_endchar;
376
377 fet_endgroup("nummer")
378