]> git.donarmstrong.com Git - lilypond.git/blob - tex/lily-ps-defs.tex
release: 0.1.59
[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 staffheight 2 div /slurhtlimit exch def
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 staffheight 4 div /interline exch def
138 %
139 /bracket_traject
140 {
141   /traject_ds exch def
142   /traject_alpha exch def
143   traject_ds traject_alpha sin mul add
144   exch
145   traject_ds traject_alpha cos mul add
146   exch
147 } bind def
148 %
149 interline 2 div /bracket_b exch def
150 interline 2 mul /bracket_w exch def
151 staffrulethickness /stafflinethickness exch def
152 stafflinethickness 2 mul /bracket_t exch def
153 interline 1.5 mul /bracket_v exch def
154 bracket_v /bracket_u exch def
155 50 /bracket_alpha exch def
156 %
157 /half_bracket
158 {
159 %6
160         0 0
161 %5a
162         bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
163         bracket_alpha bracket_v -0.15 mul bracket_traject
164 %5b
165         1 bracket_h
166         0 bracket_v 0.5 mul bracket_traject
167 %5c
168         0 bracket_h
169 %4a
170         bracket_b bracket_h bracket_t sub
171         0 bracket_v 0.4 mul bracket_traject
172 %4b
173         bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
174         bracket_alpha bracket_v -0.25 mul bracket_traject
175 %4c
176         bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
177 %3
178         bracket_b bracket_h bracket_t sub
179 %2
180         bracket_b 0
181 %1
182         0 0
183 } bind def
184 %
185 /draw_half_bracket {
186         moveto
187         lineto
188         lineto
189         curveto
190         curveto
191         lineto
192         gsave
193         fill
194         grestore
195 } bind def
196 %
197 /draw_bracket
198 {
199         2 div bracket_b add /bracket_h exch def
200         bracket_t setlinewidth
201         true setstrokeadjust
202         1 setlinecap
203         1 setlinejoin
204         half_bracket
205         20 copy
206         1 -1 scale
207         draw_half_bracket
208         stroke
209         1 -1 scale
210 % ugh, ugh:
211         0.05 0 translate
212         draw_half_bracket
213         stroke
214 } bind def
215 }}
216
217 \def\turnOnExperimentalFeatures{%
218 % draw a slur in embedded postscript
219 \special{ps:
220 }}
221