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