1 % -*- Fundamental -*- (emacs-20 mf mode sucks)
2 % feta-slag.mf -- implement trill symbols
4 % source file of the Feta (definitely not an abbreviation for Font-En-Tja)
7 % (c) 1998--2004 Jan Nieuwenhuizen <janneke@gnu.org>
10 % this file is included by feta-scripts.mf
12 trill_thin# = 0.1 staff_space# + 0.6 stafflinethickness#;
13 trill_thick# = 1/2 staff_space#;
14 trill_width# = 5/12 staff_space#;
15 trill_height# = 1/2 staff_space#;
16 trill_overlap# = 1/6 staff_space#;
19 trill_ne := unitvector ((2, 3));
21 define_pixels (trill_thick, trill_thin,
22 trill_width, trill_overlap, trill_height);
26 % The trill element sticks out on both the left and right side
27 % of the normal bbox, so you can glue them together easily.
30 def draw_trillelement (expr offset) =
38 pickup pencircle scaled trill_thin;
42 z3 = whatever * trill_ne + z1;
43 top y3 = trill_height;
44 z2 = z3 - (trill_thick - trill_thin) * trill_ne;
46 z4 = z1 - trill_ne * trill_overlap;
53 nw := unitvector (z2 - z3');
57 --- (z4 - 0.5 trill_thin * nw)
60 .. (z4 + 0.5 trill_thin * nw)
61 --- (z3 + 0.5 trill_thin * nw)
63 .. (z3 + 0.5 trill_thin * trill_ne)
68 p := p shifted (offset, 0);
74 fet_beginchar ("trilelement", "trilelement")
75 set_char_box (trill_width#, trill_width#,
76 trill_height#, trill_height#);
78 draw_trillelement (0);
79 labels (1, 2, 3, 3', 4, 5, 5');
83 fet_beginchar ("prall", "prall")
84 set_char_box (2 trill_width#, 2 trill_width#,
85 trill_height#, trill_height#);
87 draw_trillelement (-trill_width);
88 draw_trillelement (trill_width);
92 fet_beginchar ("mordent", "mordent")
93 set_char_box (2 trill_width#, 2 trill_width#,
94 4/3 trill_height#, 4/3 trill_height#);
96 draw_trillelement (-trill_width);
97 draw_trillelement (trill_width);
100 pickup pencircle scaled trill_thin;
107 draw_gridline (z2, z1, trill_thin);
113 fet_beginchar ("prallprall", "prallprall")
114 set_char_box (3 trill_width#, 3 trill_width#,
115 trill_height#, trill_height#);
117 draw_trillelement (-2 trill_width);
118 draw_trillelement (0);
119 draw_trillelement (2 trill_width);
123 fet_beginchar ("prallmordent", "prallmordent")
124 set_char_box (3 trill_width#, 3 trill_width#,
125 4/3 trill_height#, 4/3 trill_height#);
126 draw_trillelement (-2 trill_width);
127 draw_trillelement (0);
128 draw_trillelement (2 trill_width);
131 pickup pencircle scaled trill_thin;
138 draw_gridline (z2, z1, trill_thin);
145 picture remember_pic;
148 fet_beginchar ("upprall", "upprall")
149 set_char_box (3 trill_width#, 3 trill_width#,
150 trill_height#, trill_height#);
151 draw_trillelement (-2 trill_width);
152 draw_trillelement (0);
153 draw_trillelement (2 trill_width);
157 z1 = (-b, 0) - trill_overlap * trill_ne;
158 z2 = z1 + (0, -2 trill_height);
160 penpos1 (trill_thin, angle (trill_ne) - 90);
161 penpos2 (trill_thin, angle (trill_ne yscaled -1) + 90);
164 pickup pencircle scaled trill_thin;
167 .. z2l{trill_ne yscaled -1}
170 .. z2r{-trill_ne yscaled -1}
174 remember_pic := currentpicture;
178 fet_beginchar ("upmordent", "upmordent")
179 set_char_box (3 trill_width#, 3 trill_width#,
180 4/3 trill_height#, 4/3 trill_height#);
182 currentpicture := remember_pic;
185 pickup pencircle scaled trill_thin;
192 draw_gridline (z2, z1, trill_thin);
198 fet_beginchar ("pralldown", "pralldown")
199 set_char_box (3 trill_width#, 3 trill_width#,
200 trill_height#, trill_height#);
202 currentpicture := remember_pic xscaled -1;
206 fet_beginchar ("downprall", "downprall")
207 set_char_box (3 trill_width#, 3 trill_width#,
208 trill_height#, trill_height#);
210 remember_pic := currentpicture;
212 draw_trillelement (-2 trill_width);
213 draw_trillelement (0);
214 draw_trillelement (2 trill_width);
217 z1 = (-b, 0) - trill_overlap * trill_ne;
218 z2 = z1 + (0, 2 trill_height);
220 penpos1 (trill_thin, angle (trill_ne xscaled -1) - 90);
221 penpos2 (trill_thin, angle (trill_ne) - 90);
224 pickup pencircle scaled trill_thin;
226 fill z1l{trill_ne xscaled -1}
231 .. z1r{-trill_ne xscaled -1}
234 remember_pic := currentpicture;
238 fet_beginchar ("downmordent", "downmordent")
239 set_char_box (3 trill_width#, 3 trill_width#,
240 4/3 trill_height#, 4/3 trill_height#);
242 currentpicture := remember_pic;
245 pickup pencircle scaled trill_thin;
252 draw_gridline (z2, z1, trill_thin);
258 fet_beginchar ("prallup", "prallup")
259 set_char_box (3 trill_width#, 3 trill_width#,
260 trill_height#, trill_height#);
262 currentpicture := remember_pic xscaled -1;
266 fet_beginchar ("lineprall", "lineprall")
267 set_char_box (3 trill_width#, 3 trill_width#,
268 trill_height#, 4 trill_height#);
270 remember_pic := currentpicture;
272 draw_trillelement (-2 trill_width);
273 draw_trillelement (0);
274 draw_trillelement (2 trill_width);
277 z1 = (-b, 0) - trill_overlap * trill_ne ;
282 draw_gridline (z1, z2, trill_thin);