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