X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fmusic-functions.scm;h=57f17baaa2a6588777d535457f07c06ab2ae4d47;hb=f57ce7a426d8255f3856fde708227ff6fcf25fbf;hp=78bcd753e26c7b3432d622c782238c3dd360405c;hpb=b7a0cffbf9d1069860368f289a5b50e9d1d90ba8;p=lilypond.git diff --git a/scm/music-functions.scm b/scm/music-functions.scm index 78bcd753e2..57f17baaa2 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2009 Jan Nieuwenhuizen +;;;; Copyright (C) 1998--2010 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify @@ -36,6 +36,14 @@ (make-procedure-with-setter ly:grob-property ly:grob-set-property!)) +(define-public ly:grob-object + (make-procedure-with-setter ly:grob-object + ly:grob-set-object!)) + +(define-public ly:grob-parent + (make-procedure-with-setter ly:grob-parent + ly:grob-set-parent!)) + (define-public ly:prob-property (make-procedure-with-setter ly:prob-property ly:prob-set-property!)) @@ -303,17 +311,15 @@ through MUSIC." ;; repeats. (define-public (unfold-repeats music) - " -This function replaces all repeats with unfold repeats. " + "This function replaces all repeats with unfolded repeats." (let ((es (ly:music-property music 'elements)) - (e (ly:music-property music 'element)) - ) + (e (ly:music-property music 'element))) + (if (memq 'repeated-music (ly:music-property music 'types)) - (let* - ((props (ly:music-mutable-properties music)) - (old-name (ly:music-property music 'name)) - (flattened (flatten-alist props))) + (let* ((props (ly:music-mutable-properties music)) + (old-name (ly:music-property music 'name)) + (flattened (flatten-alist props))) (set! music (apply make-music (cons 'UnfoldedRepeatedMusic flattened))) @@ -321,20 +327,22 @@ This function replaces all repeats with unfold repeats. " (if (equal? old-name 'TremoloRepeatedMusic) (let* ((seq-arg? (memq 'sequential-music (ly:music-property e 'types))) - (count (ly:music-property music 'repeat-count)) + (count (ly:music-property music 'repeat-count)) (dot-shift (if (= 0 (remainder count 3)) - -1 0))) + -1 0)) + (child-count (if seq-arg? + (length (ly:music-property e 'elements)) + 0))) (if (= 0 -1) (set! count (* 2 (quotient count 3)))) - (shift-duration-log music (+ (if seq-arg? 1 0) + (shift-duration-log music (+ (if (= 2 child-count) + 1 0) (ly:intlog2 count)) dot-shift) (if seq-arg? - (ly:music-compress e (ly:make-moment (length (ly:music-property - e 'elements)) 1))))))) - + (ly:music-compress e (ly:make-moment child-count 1))))))) (if (pair? es) (set! (ly:music-property music 'elements) @@ -668,7 +676,7 @@ inside of and outside of chord construct." ;; Make a function that checks score element for being of a specific type. (define-public (make-type-checker symbol) (lambda (elt) - (not (eq? #f (memq symbol (ly:grob-property elt 'interfaces)))))) + (grob::has-interface elt symbol))) (define-public ((outputproperty-compatibility func sym val) grob g-context ao-context) (if (func grob)