]> git.donarmstrong.com Git - lilypond.git/blob - ly/music-functions-init.ly
Nitpick run.
[lilypond.git] / ly / music-functions-init.ly
1 % -*-Scheme-*-
2
3 \version "2.6.0"
4
5 %% need SRFI-1 filter 
6
7 #(use-modules (srfi srfi-1))  
8
9 applymusic =
10 #(def-music-function (parser location func music) (procedure? ly:music?)
11                (func music))
12
13 oldaddlyrics =
14 #(def-music-function (parser location music lyrics) (ly:music? ly:music?)
15
16               (make-music 'OldLyricCombineMusic 
17                           'origin location
18                           'elements (list music lyrics)))
19
20 grace =
21 #(def-grace-function startGraceMusic stopGraceMusic)
22
23 acciaccatura =
24 #(def-grace-function startAcciaccaturaMusic stopAcciaccaturaMusic)
25 appoggiatura =
26 #(def-grace-function startAppoggiaturaMusic stopAppoggiaturaMusic)
27
28 partcombine =
29 #(def-music-function (parser location part1 part2) (ly:music? ly:music?)
30                 (make-part-combine-music (list part1 part2)))
31
32 autochange =
33 #(def-music-function (parser location music) (ly:music?)
34                (make-autochange-music music))
35
36 applycontext =
37 #(def-music-function (parser location proc) (procedure?)
38                  (make-music 'ApplyContext 
39                    'origin location
40                    'procedure proc))
41
42 musicMap =
43 #(def-music-function (parser location proc mus) (procedure? ly:music?)
44              (music-map proc mus))
45
46 displayMusic =
47 #(def-music-function (parser location music) (ly:music?)
48                  (display-scheme-music music)
49                  music)
50
51 %% FIXME: guile-1.7 required?
52 %% # (use-modules (scm display-lily))invalid module name for use-syntax ((srfi srfi-39))
53
54 %%#(use-modules (scm display-lily))
55 %%displayLilyMusic =
56 %%#(def-music-function (parser location music) (ly:music?)
57 %%   (display-lily-init parser)
58 %%   (display-lily-music music)
59 %%   music)
60
61 applyoutput =
62 #(def-music-function (parser location proc) (procedure?)
63                 (make-music 'ApplyOutputEvent 
64                   'origin location
65                   'procedure proc))
66
67 breathe =
68 #(def-music-function (parser location) ()
69             (make-music 'EventChord 
70               'origin location
71               'elements (list (make-music 'BreathingSignEvent))))
72
73
74 unfoldRepeats =
75 #(def-music-function (parser location music) (ly:music?)
76                   (unfold-repeats music))
77
78 compressMusic =
79 #(def-music-function
80                   (parser location fraction music) (number-pair? ly:music?)
81                   (ly:music-compress music (ly:make-moment (car fraction) (cdr fraction))))
82
83 makeClusters =
84 #(def-music-function
85                 (parser location arg) (ly:music?)
86                 (music-map note-to-cluster arg))
87
88
89 removeWithTag = 
90 #(def-music-function
91   (parser location tag music) (symbol? ly:music?)
92   (music-filter
93    (lambda (m)
94     (let* ((tags (ly:music-property m 'tags))
95            (res (memq tag tags)))
96      (not res)))
97  music))
98               
99 keepWithTag =
100 #(def-music-function
101   (parser location tag music) (symbol? ly:music?)
102   (music-filter
103    (lambda (m)
104     (let* ((tags (ly:music-property m 'tags))
105            (res (memq tag tags)))
106      (or
107       (eq? tags '())
108       res)))
109    music))
110
111
112 %% Todo:
113 %% doing
114 %% def-music-function in a .scm causes crash.
115
116 cueDuring = 
117 #(def-music-function
118   (parser location what dir main-music)
119   (string? ly:dir? ly:music?)
120   (make-music 'QuoteMusic
121               'element main-music 
122               'quoted-context-type 'Voice
123               'quoted-context-id "cue"
124               'quoted-music-name what
125               'quoted-voice-direction dir
126               'origin location))
127
128
129 quoteDuring = #
130 (def-music-function
131   (parser location what main-music)
132   (string? ly:music?)
133   (make-music 'QuoteMusic
134               'element main-music
135               'quoted-music-name what
136               'origin location))
137
138
139
140 pitchedTrill =
141 #(def-music-function
142    (parser location main-note secondary-note)
143    (ly:music? ly:music?)
144    (let*
145        ((get-notes (lambda (ev-chord)
146                      (filter
147                       (lambda (m) (eq? 'NoteEvent (ly:music-property m 'name)))
148                       (ly:music-property ev-chord 'elements))))
149         (sec-note-events (get-notes secondary-note))
150         (trill-events (filter (lambda (m) (memq 'trill-span-event (ly:music-property m 'types)))
151                               (ly:music-property main-note 'elements)))
152
153         (trill-pitch
154          (if (pair? sec-note-events)
155              (ly:music-property (car sec-note-events) 'pitch)
156              )))
157      
158      (if (ly:pitch? trill-pitch)
159          (for-each (lambda (m) (ly:music-set-property! m 'trill-pitch trill-pitch))
160                    trill-events)
161          (begin
162            (ly:warning (_ "Second argument of \\pitchedTrill should be single note: "))
163            (display sec-note-events)))
164
165      main-note))
166
167 killCues =
168 #(def-music-function
169    (parser location music)
170    (ly:music?)
171    (music-map
172     (lambda (mus)
173       (if (string? (ly:music-property mus 'quoted-music-name))
174           (ly:music-property mus 'element)
175           mus)) music))
176    
177
178 afterGraceFraction =
179 #(cons 6 8)
180
181 afterGrace =
182 #(def-music-function
183   (parser location main grace)
184   (ly:music? ly:music?)
185
186   (let*
187       ((main-length (ly:music-length main))
188        (fraction  (ly:parser-lookup parser 'afterGraceFraction)))
189     
190     (make-simultaneous-music
191      (list
192       main
193       (make-sequential-music
194        (list
195
196         (make-music 'SkipMusic
197                     'duration (ly:make-duration
198                                0 0
199                                (* (ly:moment-main-numerator main-length)
200                                   (car fraction))
201                                (* (ly:moment-main-denominator main-length)
202                                   (cdr fraction)) ))
203         (make-music 'GraceMusic
204                     'element grace)))))))
205
206
207 barNumberCheck =
208 #(def-music-function (parser location n) (integer?)
209    (make-music 'ApplyContext 
210                'origin location
211                'procedure 
212                (lambda (c)
213                  (let*
214                      ((cbn (ly:context-property c 'currentBarNumber)))
215                    (if (not (= cbn n))
216                        (ly:input-message location "Barcheck failed got ~a expect ~a"
217                                          cbn n))))))
218
219
220 %{
221
222 TODO:
223
224 remove these from the parser, and softcode here:
225
226  * \tag
227
228 with small syntax changes, we could also do
229
230  * \bar
231  *  ?
232
233 %}
234