]> git.donarmstrong.com Git - lilypond.git/blob - mf/feta-autometric.mf
release: 1.1.0
[lilypond.git] / mf / feta-autometric.mf
1
2 % autometric.mf -- administrative MF routines
3
4 % source file of the Feta (Font-En-Tja) pretty-but-neat music font
5
6 % (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
7 %          Jan Nieuwenhuizen <janneke@gnu.org>
8
9 % these macros help create ascii logging output
10 % to automate generation of lily tables and tex backend
11 % The output should be parsed by the mf-to-table script
12
13 % font or database?
14 def fet_beginfont(expr name,size) =
15         font_identifier:=name&decimal size;
16         font_size size;
17         message "@{font@:"&name&"@:"&decimal size&"@}";
18         message "";
19         enddef;
20
21 def fet_endfont(expr name) =
22         message "@{tnof@:"&name&"@}";
23         message "";
24         enddef;
25
26 % group or table?
27 def fet_begingroup(expr name) =
28         message "@{group@:"&name&"@}";
29         message "";
30         begingroup
31 enddef;
32
33 def fet_endgroup(expr name) =
34         endgroup;
35         message "@{puorg@:"&name&"@}";
36         message "";
37 enddef;
38
39 def autometric_output_char=
40         message "@{char@:"&charnamestr&"@:"&decimal charcode&"@:"&decimal charbp&"@:"&decimal charwd&"@:"&decimal chardp&"@:"&decimal charht&"@:"&idstr&"@:"&texstr&"@}";
41 enddef;
42
43 def hround_pixels(expr sharped) = hround(sharped * hppp) enddef;
44 def vround_pixels(expr sharped) = vround(sharped * vppp) enddef;
45
46 def tand(expr alpha) = 
47         (sind alpha/cosd alpha)
48         enddef;
49
50 %breapth, width, depth, height
51 %     breapth   x-depth
52 def set_char_box(expr b_sharp, w_sharp, d_sharp,h_sharp) = 
53         save scharbp, scharht, scharwd, schardp;
54
55         % some paranoia if someone calls set_char_box(charwd, charbp, .. )
56         scharbp := b_sharp;
57         scharht := h_sharp;
58         schardp := d_sharp;
59         scharwd := w_sharp;
60
61         charbp := scharbp;
62         charht := scharht;
63         chardp := schardp;
64         charwd := scharwd;
65
66         w := hround(w_sharp *hppp);
67         b := hround(b_sharp *hppp);
68         h := hround(h_sharp *vppp);
69         d := hround(d_sharp *vppp);
70 enddef;
71
72 def no_dimen_beginchar(expr c) =
73         begingroup
74         charcode := if known c: byte c else: 0; fi;
75         charic := 0;
76         clearxy;
77         clearit;
78         clearpen;
79         scantokens extra_beginchar;
80 enddef;
81
82 code:=-1;
83
84 % starts just as plain mf's beginchar:
85 %     charcode, 
86 % and then adds:
87 %     charname  see below
88 %     id        index in lily's table
89 %     texstr    name of tex macro in lily's table and tex backend
90
91 % the dims are uninitialised; you should use set_char_box manually.
92 def fet_beginchar(expr name, id_lit, texstr_lit) =
93         save texstr, idstr, charnamestr;
94         save charbp;
95         save w,b,h,d;
96         string texstr, idstr, charnamestr;
97         texstr := texstr_lit;
98         charnamestr := name;
99         idstr := id_lit;
100
101         no_dimen_beginchar(incr code) name;
102         enddef;
103
104
105 def makebox_with_breapth(text r) = 
106         for y = -d, 0, h: r((-b, y),(w,y)); endfor
107         for x = -b, 0, w: r((x, -d),(x, h)); endfor
108 enddef;
109
110 %
111 % override plain endchar.  We want a different box. 
112 %
113 def breapth_endchar =
114         scantokens extra_endchar;
115         if proofing > 0: makebox_with_breapth(proofrule); fi
116         chardx := 10*(w + b);
117         shipit;
118         endgroup
119 enddef;
120
121 def fet_endchar=
122         autometric_output_char;
123         breapth_endchar;
124         enddef;