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