]> git.donarmstrong.com Git - lilypond.git/blob - scm/music-functions.scm
98127c076f23fb94654ba1c020141a108ee1b462
[lilypond.git] / scm / music-functions.scm
1
2 (define (denominator-tuplet-formatter mus)
3   (number->string (ly-get-mus-property mus 'denominator)))
4
5 (define (fraction-tuplet-formatter mus)
6   (string-append (number->string (ly-get-mus-property mus 'numerator))
7                  ":"
8                  (number->string (ly-get-mus-property mus 'denominator))
9                  ))
10
11 (define (unfold-repeats music)
12 "
13 This function replaces all repeats  with unfold repeats. It was 
14 written by Rune Zedeler. "
15   (let* ((es (ly-get-mus-property music 'elements))
16          (e (ly-get-mus-property music 'element))
17          (body (ly-get-mus-property music 'body))
18          (alts (ly-get-mus-property music 'alternatives))
19          (n  (ly-music-name music)))
20
21     (if (equal? n "Repeated_music")
22         (begin
23           (ly-set-mus-property
24            music 'length Repeated_music::unfolded_music_length)
25           (ly-set-mus-property
26            music 'iterator-ctor Unfolded_repeat_iterator::constructor)))
27
28     (if (pair? es)
29         (ly-set-mus-property
30          music 'elements
31          (map unfold-repeats es)))
32
33     (if (music? alts)
34         (ly-set-mus-property
35          music 'alternatives
36          (unfold-repeats alts)))
37
38     (if (music? body)
39         (ly-set-mus-property
40          music 'body
41          (unfold-repeats body)))
42
43     (if (music? e)
44         (ly-set-mus-property
45          music 'element
46          (unfold-repeats e)))
47
48
49     music))
50
51 (define  (pitchify-scripts music)
52   "Copy the pitch fields of the Note_requests into  Text_script_requests, to aid
53 Fingering_engraver."
54   (define (find-note musics)
55     (filter-list (lambda (m) (equal? (ly-music-name m) "Note_req")) musics)
56     )
57   (define (find-scripts musics)
58     (filter-list (lambda (m) (equal? (ly-music-name m) "Text_script_req")) musics))
59
60   (let* (
61          (e (ly-get-mus-property music 'element))
62          (es (ly-get-mus-property music 'elements))
63          (notes (find-note es))
64          (pitch (if (pair? notes) (ly-get-mus-property (car  notes) 'pitch) #f))
65          )
66
67     (if pitch
68         (map (lambda (x) (ly-set-mus-property x 'pitch pitch)) (find-scripts es))
69         )
70         
71     (if (pair? es)
72         (ly-set-mus-property
73          music 'elements
74          (map pitchify-scripts es)))
75
76     (if (music? e)
77         (ly-set-mus-property
78          music 'element
79          (pitchify-scripts e)))
80
81     music))