]> git.donarmstrong.com Git - lilypond.git/blob - tex/lily-ps-defs.tex
release: 1.0.1
[lilypond.git] / tex / lily-ps-defs.tex
1 %
2 % WARNING: don't leave blank lines in the PS-code; they are
3 % transformed into \par 
4 %
5
6 %
7 % Should put in a lily-ps.ps header?
8 %
9 %
10
11 %
12 % header info (macros/defs, etc) should go into a \special{! ... }, 
13 % note the ! sign.  See dvips.info for details.
14 %
15
16 % Use of 
17 % /foo { operatorname } bind def
18 %
19 % ``compiles'' operatorname binding in the body of foo, making
20 % the code faster, and more reliable (less flexible)
21
22
23 % transplant a TeX dimension into the PS output.
24 \def\PSsetTeXdimen#1{\expandafter\special{! /#1 (\the\csname #1\endcsname) deftexdimen}}
25
26 \def\turnOnPostScript{%
27 \def\embeddedps##1{%
28         % This sets CTM so that you get to the currentpoint
29         % by executing a 0 0 moveto
30         \special{ps: @beginspecial @setspecial ##1 @endspecial}       
31 }
32 %
33 % width, slope, height 
34 %
35 \special{! % round cappings
36 1 setlinecap
37 /draw_beam
38 {
39         2 div /beam_thick exch def
40         /beam_slope exch def
41         /beam_wd exch def
42         beam_slope beam_wd mul /beam_ht exch def
43         0 beam_thick neg moveto 
44         beam_wd beam_ht rlineto 
45         0 beam_thick 2 mul rlineto
46         0 beam_thick lineto
47         closepath fill
48 } bind def
49 % PS helper: convert (0.2pt) to the token 0.2
50 /settexdimen {  /thestring exch def
51         thestring 0 thestring length 2 sub
52         getinterval
53         token
54         pop exch pop } 
55 def
56 %
57 /deftexdimen {
58         settexdimen
59         def     
60 } def
61 }
62 %
63 \PSsetTeXdimen{staffrulethickness}
64 \PSsetTeXdimen{staffheight}
65 \special{! %
66 /draw_decresc
67         {
68                 staffrulethickness setlinewidth
69                 /cresc_cont exch def
70                 /cresc_ht exch def
71                 /cresc_wd exch def
72 %
73                 cresc_wd cresc_cont moveto
74                 0 cresc_ht lineto
75                 stroke
76                 cresc_wd cresc_cont neg moveto
77                 0 cresc_ht neg lineto
78                 stroke
79         }
80         bind def
81         /draw_cresc
82         {
83                 staffrulethickness setlinewidth
84                 /cresc_cont exch def
85                 /cresc_ht exch def
86                 /cresc_wd exch def
87 %
88                 0 cresc_cont moveto
89                 cresc_wd cresc_ht lineto
90                 stroke
91                 0 cresc_cont neg moveto
92                 cresc_wd cresc_ht neg lineto
93                 stroke
94         }
95         bind def
96  /lily_distance {
97         1 copy mul exch 1 copy mul add sqrt
98  } bind def
99 staffrulethickness 1.2 mul /plet_t exch def
100 /draw_plet
101 {
102         plet_t setlinewidth
103         true setstrokeadjust
104         1 setlinecap
105         1 setlinejoin
106         /dir exch def
107         /plet_dy exch def
108         /plet_dx exch def
109         staffheight 2 div /plet_gapx exch def
110         plet_dy plet_dx div plet_gapx mul /plet_gapy exch def
111         staffheight 4 div dir mul /plet_h exch def
112 %
113         0 0 moveto
114         0 plet_h lineto 
115         plet_dx plet_gapx sub 2 div 
116                 plet_dy plet_gapy sub 2 div plet_h add lineto
117         plet_dx plet_gapx add 2 div 
118                 plet_dy plet_gapy add 2 div plet_h add moveto
119         plet_dx plet_dy plet_h add lineto
120         plet_dx plet_dy lineto
121         stroke
122 } bind def
123 %
124 /draw_slur
125 {
126         staffrulethickness setlinewidth
127         moveto
128         curveto
129         lineto
130         curveto
131         gsave
132         fill
133         grestore
134         stroke
135 } bind def
136 %
137 /draw_dashed_slur
138 {
139         1 setlinecap
140         1 setlinejoin
141         setdash
142         setlinewidth
143         moveto
144         curveto
145         stroke
146 } bind def
147 %
148 staffheight 4 div /interline exch def
149 %
150 /bracket_traject
151 {
152   /traject_ds exch def
153   /traject_alpha exch def
154   traject_ds traject_alpha sin mul add
155   exch
156   traject_ds traject_alpha cos mul add
157   exch
158 } bind def
159 %
160 % too fat for 20pt
161 % interline 2 div /bracket_b exch def
162 interline 3 div /bracket_b exch def
163 interline 2 mul /bracket_w exch def
164 staffrulethickness /stafflinethickness exch def
165 stafflinethickness 2 mul /bracket_t exch def
166 interline 1.5 mul /bracket_v exch def
167 bracket_v /bracket_u exch def
168 50 /bracket_alpha exch def
169 %
170 /half_bracket
171 {
172 %6
173         0 0
174 %5a
175         bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
176         bracket_alpha bracket_v -0.15 mul bracket_traject
177 %5b
178         1 bracket_h
179         0 bracket_v 0.5 mul bracket_traject
180 %5c
181         0 bracket_h
182 %4a
183         bracket_b bracket_h bracket_t sub
184         0 bracket_v 0.4 mul bracket_traject
185 %4b
186         bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
187         bracket_alpha bracket_v -0.25 mul bracket_traject
188 %4c
189         bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
190 %3
191         bracket_b bracket_h bracket_t sub
192 %2
193         bracket_b 0
194 %1
195         0 0
196 } bind def
197 %
198 /draw_half_bracket {
199         moveto
200         lineto
201         lineto
202         curveto
203         curveto
204         lineto
205         gsave
206         fill
207         grestore
208 } bind def
209 %
210 /draw_bracket
211 {
212         2 div bracket_b add /bracket_h exch def
213         bracket_t setlinewidth
214         true setstrokeadjust
215         1 setlinecap
216         1 setlinejoin
217         half_bracket
218         20 copy
219         1 -1 scale
220         draw_half_bracket
221         stroke
222         1 -1 scale
223 % ugh, ugh:
224         0.05 0 translate
225         draw_half_bracket
226         stroke
227 } bind def
228 }}
229
230 \def\turnOnExperimentalFeatures{%
231 % draw a slur in embedded postscript
232 \special{ps:
233 }}
234