]> git.donarmstrong.com Git - lilypond.git/blob - tex/lily-ps-defs.tex
release: 0.1.62
[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 interline 2 div /bracket_b exch def
161 interline 2 mul /bracket_w exch def
162 staffrulethickness /stafflinethickness exch def
163 stafflinethickness 2 mul /bracket_t exch def
164 interline 1.5 mul /bracket_v exch def
165 bracket_v /bracket_u exch def
166 50 /bracket_alpha exch def
167 %
168 /half_bracket
169 {
170 %6
171         0 0
172 %5a
173         bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
174         bracket_alpha bracket_v -0.15 mul bracket_traject
175 %5b
176         1 bracket_h
177         0 bracket_v 0.5 mul bracket_traject
178 %5c
179         0 bracket_h
180 %4a
181         bracket_b bracket_h bracket_t sub
182         0 bracket_v 0.4 mul bracket_traject
183 %4b
184         bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
185         bracket_alpha bracket_v -0.25 mul bracket_traject
186 %4c
187         bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
188 %3
189         bracket_b bracket_h bracket_t sub
190 %2
191         bracket_b 0
192 %1
193         0 0
194 } bind def
195 %
196 /draw_half_bracket {
197         moveto
198         lineto
199         lineto
200         curveto
201         curveto
202         lineto
203         gsave
204         fill
205         grestore
206 } bind def
207 %
208 /draw_bracket
209 {
210         2 div bracket_b add /bracket_h exch def
211         bracket_t setlinewidth
212         true setstrokeadjust
213         1 setlinecap
214         1 setlinejoin
215         half_bracket
216         20 copy
217         1 -1 scale
218         draw_half_bracket
219         stroke
220         1 -1 scale
221 % ugh, ugh:
222         0.05 0 translate
223         draw_half_bracket
224         stroke
225 } bind def
226 }}
227
228 \def\turnOnExperimentalFeatures{%
229 % draw a slur in embedded postscript
230 \special{ps:
231 }}
232