]> git.donarmstrong.com Git - lilypond.git/blob - scm/music-types.scm
* lily/parser.yy (Simple_music): \applycontext #FUNCTION allows
[lilypond.git] / scm / music-types.scm
1
2 (define-public music-descriptions
3   `(
4     (AbortEvent
5      . (
6    (description .  "End the currently running spanners.")
7         (internal-class-name . "Event")
8         (span-type . "abort")
9         (types . (general-music event abort-event))
10         ))
11     (AbsoluteDynamicEvent
12      . (
13    (description . "Creates a dynamic mark.  Syntax: @var{note}@code{\\x},
14 where x is one of \@\{\\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.\@\}")
15         (internal-class-name . "Event")
16         (types . (general-music event dynamic-event absolute-dynamic-event))
17         ))
18     (ApplyContext
19      . (
20         (description . "Call the argument with the current context during interpreting phase")
21         (internal-class-name . "Music")
22         (types . (general-music apply-context))
23         (iterator-ctor . ,Apply_context_iterator::constructor)
24         ))
25     (ArpeggioEvent 
26      . (
27         (description .  "Make an arpeggio on this note. Syntax:
28 @var{note}-@code{\\arpeggio}")
29         (internal-class-name .  "Event")
30         (types . (general-music arpeggio-event event))
31         ))
32
33     ;; todo: use articulation-event for slur as well.
34     ;; separate non articulation scripts  
35     (ArticulationEvent
36      . (
37    (description .  "Adds an articulation marking to a note.  Syntax:
38 @var{note}@code{X}@code{Y}, where X is a direction (up @code{^}, down
39 @code{_}, or Lilypond's choice (no direction specified)), and where Y
40 is an articulation (such as @code{-.}, @code{->}, @code{\\tenuto},
41 @code{\\downbow}).  See the user manual for details.")
42
43         (internal-class-name . "Event")
44         (types . (general-music event articulation-event script-event))
45         )) 
46     (AutoChangeMusic
47      . (
48         (description .  "")
49
50         (internal-class-name . "Music_wrapper")
51         (iterator-ctor . ,Auto_change_iterator::constructor)
52         (types . (general-music music-wrapper-music auto-change-instruction))
53         ))
54     (BarCheck
55      . (
56         (description .  "")
57         (internal-class-name . "Music")
58         (types . (general-music bar-check))
59         (iterator-ctor . ,Bar_check_iterator::constructor)
60         ))
61     (BassFigureEvent
62      . (
63         (description .  "")
64
65         (internal-class-name . "Event")
66         (types . (general-music event rhythmic-event bass-figure-event))
67         ))
68     (BeamEvent
69      . (
70    (description .  "Starts or stops a beam.  Syntax for manual control:
71 c8-[ c c-] c8")
72
73         (internal-class-name . "Event")
74         (types . (general-music event beam-event span-event))
75         ))
76     (NewBeamEvent
77      . (
78    (description .  "Starts or stops a beam.  Syntax for manual control:
79 c8-[ c c-] c8")
80         (internal-class-name . "Event")
81         (types . (general-music event new-beam-event span-event))
82         ))
83     (BreakEvent
84      . (
85    (description .  "Creates a line break.  Syntax: \\break.")
86
87         (internal-class-name . "Event")
88         (types . (general-music break-event event))
89         ))
90     (BreathingSignEvent
91      . (
92         (description .  "Creates a `breath mark' or `comma'.  Syntax:
93 @var{note}\\breathe.")
94
95         (internal-class-name . "Event")
96         (types . (general-music event breathing-event))
97         )) 
98     (BusyPlayingEvent
99      . (
100         (description .  "")
101
102         (internal-class-name . "Event")
103         (types . (general-music event busy-playing-event))
104         )) 
105     (ClusterEvent
106      . (
107         (description .  "Begins or ends a cluster.")
108
109         (internal-class-name . "Event")
110         (types . (general-music cluster-event event))
111         )) 
112     (ContextSpeccedMusic
113      . (
114         (description .  "")
115         (iterator-ctor . ,Context_specced_music_iterator::constructor)
116         (internal-class-name . "Music_wrapper")
117         (types . (context-specification general-music music-wrapper-music))
118         ))
119     (CrescendoEvent
120      . (
121    (description .  "Begins or ends a crescendo.  Syntax: @var{note}\\cr
122 ... @var{note}\\rc (you can also use \\<, \\!, \\cresc, and
123 \\endcresc.  See the user manual for details.).")
124
125         (internal-class-name . "Event")
126         (types . (general-music dynamic-event crescendo-event event))
127         )) 
128     (DecrescendoEvent
129      . (
130         (description .  "")
131
132         (internal-class-name . "Event")
133         (types . (general-music dynamic-event decrescendo-event event))
134         ))
135  
136     (ExtenderEvent
137      . (
138         (description .  "")
139
140         (internal-class-name . "Event")
141         (types . (general-music extender-event event))
142         ))
143     (FingerEvent
144      . (
145         (description . "")
146         (internal-class-name . "Event")
147         (types . (general-music fingering-event event))
148         ))
149     (GlissandoEvent
150      . (
151         (description .  "")
152
153         (internal-class-name . "Event")
154         (types . (general-music glissando-event event))
155         )) 
156     (GraceMusic
157      . (
158         (description .  "")
159
160         (internal-class-name . "Grace_music")
161         (iterator-ctor . ,Grace_iterator::constructor)
162         (types . (grace-music music-wrapper-music general-music))
163         ))
164     (NoteGroupingEvent
165      . (
166         (description . "Start or stop grouping brackets.")
167         (internal-class-name . "Event")
168         (types . (general-music event note-grouping-event))
169         ))
170     (HyphenEvent
171      . (
172         (description .  "")
173
174         (internal-class-name . "Event")
175         (types . (general-music hyphen-event event))
176         ))   
177     (KeyChangeEvent
178      . (
179         (description .  "")
180
181         (internal-class-name . "Key_change_req")
182         (types . (general-music key-change-event event))
183         )) 
184     (LigatureEvent
185      . (
186         (description .  "")
187
188         (internal-class-name . "Event")
189         (span-type . ligature)
190         (types . (general-music span-event ligature-event event))
191         ))
192     (LyricCombineMusic
193      . (
194         (description .  "")
195
196         (internal-class-name . "Lyric_combine_music")
197         (types . (general-music lyric-combine-music))
198         (iterator-ctor . ,Lyric_combine_music_iterator::constructor)
199         ))
200
201     (LyricEvent
202      . (
203         (description .  "A lyric syllable. Must be entered in lyrics mode, i.e.
204 @code{\\lyrics @{ twinkle4 twinkle4 @} } .")
205
206         (internal-class-name . "Event")
207         (types . (general-music rhythmic-event lyric-event event))
208         ))
209     (MarkEvent
210      . (
211         (description .  "")
212
213         (internal-class-name . "Event")
214         (types . (general-music mark-event event))
215         ))
216     (MelismaPlayingEvent
217      . (
218         (description .  "")
219         (internal-class-name . "Event")
220         (types . (general-music melisma-playing-event event))
221         ))
222     (MultiMeasureRestEvent
223      . (
224         (description . "Rests that may be compressed into Multi rests. Syntax
225 @code{R2.*4} for 4 measures in 3/4 time. Note the capital R.")
226         (internal-class-name . "Event")
227         (types . (general-music event multi-measure-rest-event))
228         ))
229     (Music
230      . (
231         (description .  "")
232
233         (internal-class-name . "Music")
234         (types . (general-music)) 
235         ))
236     (NoteEvent
237      . (
238         (description .  "")
239
240         (internal-class-name . "Event")
241         (types . (general-music event note-event rhythmic-event melodic-event))
242         ))
243     (OverrideProperty
244      . (
245         (description .  "")
246
247         (internal-class-name . "Music")
248         (types . (general-music layout-instruction))
249         (iterator-ctor . ,      Push_property_iterator::constructor)
250         ))
251
252     (PartCombineMusic
253      . (
254         (description .  "")
255
256         (internal-class-name . "Simultaneous_music")
257         (types . (general-music part-combine-music))
258         (iterator-ctor . ,Part_combine_music_iterator::constructor)
259         ))
260     (PhrasingSlurEvent
261      . (
262         (description . "Start or end phrasing slur. Syntax NOTE \\(  and \\) NOTE")
263         (internal-class-name . "Event")
264         (types . (general-music span-event phrasing-slur-event))
265         ))
266     (PropertySet
267      . (
268         (description .  "")
269         (internal-class-name . "Music")
270         (types . (layout-instruction general-music))
271         (iterator-ctor . ,Property_iterator::constructor)
272         )
273      )
274     (PropertyUnset
275      . (
276         (description .  "")
277
278         (internal-class-name . "Music")
279         (types . (layout-instruction general-music))
280         (iterator-ctor . ,Property_unset_iterator::constructor)
281         )
282      )
283     (PorrectusEvent
284      . (
285         (description .  "")
286
287         (internal-class-name . "Event")
288         (types . (general-music porrectus-event event))
289         ))
290     (RepeatedMusic
291      . (
292         (description .  "")
293
294         (type .  repeated-music)
295         (types . (general-music repeated-music))
296         ))
297     (Event
298      . (
299         (description .  "")
300
301         (internal-class-name . "Event")
302         (types . (general-music event))
303         )) 
304     (RestEvent
305      . (
306         (description .  "")
307
308         (internal-class-name . "Event")
309         (types . (general-music event rhythmic-event rest-event))
310         )) 
311     (SequentialMusic
312      . (
313         (description .  "Music expressions concatenated. Syntax \\sequential @{..@} or simply @{..@} .")
314
315         (internal-class-name . "Sequential_music")
316         (iterator-ctor . ,Sequential_music_iterator::constructor)
317         (types . (general-music sequential-music))
318         ))
319     (SimultaneousMusic
320      . (
321         (description .  "Music playing together. Syntax: \\simultaneous @{ .. @} or < .. >.")
322
323         (internal-class-name . "Simultaneous_music")
324         (iterator-ctor . ,Simultaneous_music_iterator::constructor)
325         
326         (types . (general-music simultaneous-music))
327         ))
328     (SlurEvent
329      . (
330         (description . "Start or end slur. Syntax NOTE(  and )NOTE")
331         (internal-class-name . "Event")
332         (types . (general-music span-event slur-event))
333         ))
334
335     (RevertProperty
336      . (
337         (description .  "")
338
339         (internal-class-name . "Music")
340         (types . (general-music layout-instruction))
341         (iterator-ctor . ,      Pop_property_iterator::constructor)
342         ))
343     
344     (OutputPropertySetMusic
345      . (
346         (description .  "")
347
348         (internal-class-name . "Music")
349         (iterator-ctor . ,Output_property_music_iterator::constructor)
350         (types . (general-music layout-instruction))
351         ))
352     
353     (TextSpanEvent
354      . (
355         (description . "Start a text spanner like 8va.....|")
356         (internal-class-name . "Event")
357         (types . (general-music span-event text-span-event))
358         ))
359     (TranslatorChange
360      . (
361         (description .  "")
362         (internal-class-name . "Music")
363         (iterator-ctor . , Change_iterator::constructor)
364         (types . (general-music translator-change-instruction))
365         ))
366     
367     (TimeScaledMusic
368      . (
369         (description .  "")
370         (internal-class-name . "Time_scaled_music")
371         (iterator-ctor . ,Time_scaled_music_iterator::constructor)
372         (types . (time-scaled-music music-wrapper-music general-music))
373         ))
374     
375     (TransposedMusic
376      . (
377         (description .  "")
378         (internal-class-name . "Transposed_music")
379         (types . (music-wrapper-music general-music transposed-music))
380         ))
381
382     (UntransposableMusic
383      . (
384         (description .  "")
385
386         (internal-class-name . "Untransposable_music")
387         (types . (music-wrapper-music general-music untransposable-music)) 
388         ))
389
390     (UnrelativableMusic
391      . (
392         (description .  "")
393         (internal-class-name . "Un_relativable_music")
394         (types . (music-wrapper-music general-music unrelativable-music))
395         ))
396
397     (RelativeOctaveMusic
398      . (
399         (description .  "")
400
401         (internal-class-name . "Relative_octave_music")
402         (types . (music-wrapper-music general-music relative-octave-music))
403         ))
404
405     
406     (EventChord
407      . (
408         (description .  "")
409
410         (internal-class-name . "Simultaneous_music")
411         (iterator-ctor . ,Event_chord_iterator::constructor)
412         (types . (general-music event-chord simultaneous-music))
413         )
414      )
415     
416     (ScriptEvent
417      . (
418         (description .  "")
419
420         (internal-class-name . "Event")
421         (types . (general-music event))
422         )) 
423     (SkipEvent
424      . (
425         (description .  "")
426
427         (internal-class-name . "Event")
428         (types . (general-music event rhythmic-event skip-event))
429         )) 
430     (SpanEvent
431      . (
432         (description .  "")
433
434         (internal-class-name . "Event")
435         (types . (general-music event))
436         )) 
437     (SustainEvent
438      . (
439         (description . "")
440         (internal-class-name . "Event")
441         (types . (general-music pedal-event sustain-pedal-event))
442         ))
443     (SostenutoEvent
444      . (
445         (description . "")
446         (internal-class-name . "Event")
447         (types . (general-music pedal-event sostenuto-pedal-event))
448         ))
449     (UnaCordaEvent
450      . (
451         (description . "")
452         (internal-class-name . "Event")
453         (types . (general-music pedal-event una-corda-pedal-event))
454         ))
455     (StringNumberEvent
456      . (
457         (description .  "")
458
459         (internal-class-name . "Event")
460         (types . (general-music string-number-event event))
461         )) 
462     (TempoEvent
463      . (
464         (description .  "")
465         (length . #f)
466         (internal-class-name . "Event")
467         (types . (general-music tempo-event event))
468         )) 
469     (TextScriptEvent
470      . (
471         (description .  "")
472         (internal-class-name . "Event")
473         (types . (general-music script-event text-script-event event))
474         )) 
475     (TieEvent
476      . (
477         (description .  "A tie.  Entered as ~.")
478         (internal-class-name . "Event")
479         (types . (general-music tie-event event))
480         ))
481     (NewTieEvent
482      . (
483         (description .  "A tie.  Entered as @var{note}-~.")
484         (internal-class-name . "Event")
485         (types . (general-music new-tie-event event))
486         ))
487     (TremoloEvent
488      . (
489         (description . "Un measured tremolo.")
490         (internal-class-name . "Event")
491         (types . (general-music event tremolo-event))
492         ))
493     (VoiceSeparator
494      . (
495         (description .  "")
496
497         (internal-class-name . "Music")
498         (types . (separator general-music))
499         ))
500
501     (VoltaRepeatedMusic
502      . (
503         (iterator-ctor . ,Volta_repeat_iterator::constructor)
504         (internal-class-name . "Repeated_music")
505         (description . "")
506         (start-moment-function .  ,Repeated_music::first_start)
507         (length . ,Repeated_music::volta_music_length)
508         (types . (general-music repeated-music volta-repeated-music))
509         ))
510     
511     (UnfoldedRepeatedMusic
512      . (
513         (iterator-ctor . ,Unfolded_repeat_iterator::constructor)
514         (description .  "")
515         (start-moment-function .  ,Repeated_music::first_start)
516         (internal-class-name . "Repeated_music")
517         (types . (general-music repeated-music unfolded-repeated-music))
518         (length . ,Repeated_music::unfolded_music_length)
519         ))
520     (PercentRepeatedMusic
521      . (
522         (internal-class-name . "Repeated_music")
523         (description .  "")
524         (iterator-ctor . ,Percent_repeat_iterator::constructor)
525         (start-moment-function .  ,Repeated_music::first_start)
526         (length . ,Repeated_music::unfolded_music_length)
527         (types . (general-music repeated-music percent-repeated-music))
528         ))
529     
530     (TremoloRepeteadMusic
531      . (
532         (iterator-ctor . ,Chord_tremolo_iterator::constructor)
533         (description .  "")
534         (internal-class-name . "Repeated_music")
535         (start-moment-function .  ,Repeated_music::first_start)
536
537         ;; the length of the repeat is handled by shifting the note logs
538         (length . ,Repeated_music::folded_music_length)
539         (types . (general-music repeated-music tremolo-repeated-music))
540         
541         ))
542     (FoldedRepeatedMusic
543      . (
544         (internal-class-name . "Repeated_music")
545         (description .  "")
546         (iterator-ctor  . ,Folded_repeat_iterator::constructor)
547         (start-moment-function .  ,Repeated_music::minimum_start)
548         (length . ,Repeated_music::folded_music_length)
549         (types . (general-music repeated-music folded-repeated-music))
550         ))
551     ))
552
553 (set! music-descriptions
554       (sort music-descriptions alist<?))
555
556 (define music-name-to-property-table (make-vector 59 '()))
557
558
559 ;; init hash table,
560 ;; transport description to an object property.
561 (set!
562  music-descriptions
563  (map (lambda (x)
564         (set-object-property! (car x)
565                               'music-description
566                               (cdr (assq 'description (cdr x))))
567         (let
568             ((l (cdr x)))
569           (set! l (assoc-set! l 'name (car x)))
570           (set! l (assq-remove!  l 'description))
571           (hashq-set! music-name-to-property-table (car x) l)
572           (cons (car x) l)
573           ))
574       music-descriptions))
575
576
577
578 (define-public (make-music-by-name x)
579   (if (not (symbol? x))
580       (error (format "Not a symbol: ~a" x)))
581   (let*
582       (
583        (props (hashq-ref music-name-to-property-table x '()))
584        (name (if (pair? props)
585                  (cdr (assoc 'internal-class-name props))
586                  (error "Can not find music object" x)))
587        )
588
589     (if (eq? props '())
590         (ly:warn (format "Could not find music type `~a'" x)))  
591     (ly:make-bare-music name props)
592     ))
593
594
595
596 (define-public (make-repeated-music name)
597   (let*
598       (
599        (handle (assoc
600                 name
601                 '(("volta" . VoltaRepeatedMusic)
602                   ("unfold" . UnfoldedRepeatedMusic)
603                   ("percent" . PercentRepeatedMusic)
604                   ("tremolo" . TremoloRepeteadMusic)
605                   ("fold" . FoldedRepeatedMusic)
606                   )))
607        (music-name
608         (if (pair? handle)
609             (cdr handle)
610             (begin
611               (ly:warn
612                (string-append "Unknown repeat type `" name
613                               "'\nSee music-types.scm for supported repeats"))
614               'VoltaRepeatedMusic)
615             )
616         )
617        )
618
619     (make-music-by-name music-name)
620     ))
621