]> git.donarmstrong.com Git - lilypond.git/blobdiff - ly/music-functions-init.ly
Implement compound time signatures
[lilypond.git] / ly / music-functions-init.ly
index 67ff1282d476401aebefbd4e3abab1b33ee49a45..a307f0ca89e7f66c24d08423be32b5202e7f265c 100644 (file)
@@ -2,7 +2,7 @@
 
 %%%% This file is part of LilyPond, the GNU music typesetter.
 %%%%
-%%%% Copyright (C) 2003--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%%%% Copyright (C) 2003--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %%%%                          Jan Nieuwenhuizen <janneke@gnu.org>
 %%%%
 %%%% LilyPond is free software: you can redistribute it and/or modify
@@ -214,6 +214,43 @@ clef =
    (_i "Set the current clef to @var{type}.")
    (make-clef-set type))
 
+
+compoundMeter =
+#(define-music-function (parser location args) (pair?)
+  (_i "Create compound time signatures. The argument is a Scheme list of 
+lists. Each list describes one fraction, with the last entry being the 
+denominator, while the first entries describe the summands in the 
+enumerator. If the time signature consists of just one fraction, 
+the list can be given directly, i.e. not as a list containing a single list.
+For example, a time signature of (3+1)/8 + 2/4 would be created as 
+@code{\\compoundMeter #'((3 1 8) (2 4))}, and a time signature of (3+2)/8 
+as @code{\\compoundMeter #'((3 2 8))} or shorter 
+@code{\\compoundMeter #'(3 2 8)}.")
+  (let* ((mlen (calculate-compound-measure-length args))
+         (beat (calculate-compound-base-beat args))
+         (beatGrouping (calculate-compound-beat-grouping args))
+         (timesig (cons (ly:moment-main-numerator mlen)
+                        (ly:moment-main-denominator mlen))))
+  #{
+    \once \override Staff.TimeSignature #'stencil = #(lambda (grob)
+               (grob-interpret-markup grob (format-compound-time $args)))
+    \set Timing.timeSignatureFraction = $timesig
+    \set Timing.baseMoment = $beat
+    \set Timing.beatStructure = $beatGrouping
+    \set Timing.beamExceptions = #'()
+    \set Timing.measureLength = $mlen
+  #} ))
+
+
+cueClef =
+#(define-music-function (parser location type) (string?)
+  (_i "Set the current cue clef to @var{type}.")
+  (make-cue-clef-set type))
+cueClefUnset =
+#(define-music-function (parser location) ()
+  (_i "Unset the current cue clef.")
+  (make-cue-clef-unset))
+
 cueDuring =
 #(define-music-function
    (parser location what dir main-music) (string? ly:dir? ly:music?)
@@ -224,8 +261,20 @@ in a CueVoice oriented by @var{dir}.")
               'quoted-context-type 'Voice
               'quoted-context-id "cue"
               'quoted-music-name what
-              'quoted-voice-direction dir
-              'origin location))
+              'quoted-voice-direction dir))
+
+cueDuringWithClef =
+#(define-music-function
+   (parser location what dir clef main-music) (string? ly:dir? string? ly:music?)
+   (_i "Insert contents of quote @var{what} corresponding to @var{main-music},
+in a CueVoice oriented by @var{dir}.")
+   (make-music 'QuoteMusic
+              'element main-music
+              'quoted-context-type 'Voice
+              'quoted-context-id "cue"
+              'quoted-music-name what
+              'quoted-music-clef clef
+              'quoted-voice-direction dir))
 
 
 
@@ -388,19 +437,27 @@ label =
 
 
 language =
-#(define-music-function (parser location str) (string?)
-   (_i "Select note names language.")
-   (let ((language (assoc-get (string->symbol str)
-                             language-pitch-names
-                             '())))
-     (if (pair? language)
-        (begin
-          (if (ly:get-option 'verbose)
-              (ly:message (_ "Using ~a note names...") str))
-          (set! pitchnames language)
-          (ly:parser-set-note-names parser language))
-        (ly:warning (_ "Could not find language ~a. Ignoring.") str))
-     (make-music 'Music 'void #t)))
+#(define-music-function (parser location language) (string?)
+   (_i "Set note names for language @var{language}.")
+   (note-names-language parser language)
+   (make-music 'Music 'void #t))
+
+languageSaveAndChange =
+#(define-music-function (parser location language) (string?)
+  (_i "Store the previous pitchnames alist, and set a new one.")
+  (set! previous-pitchnames pitchnames)
+  (note-names-language parser language)
+  (make-music 'Music 'void #t))
+
+languageRestore =
+#(define-music-function (parser location) ()
+   (_i "Restore a previously-saved pitchnames alist.")
+   (if previous-pitchnames
+       (begin
+        (set! pitchnames previous-pitchnames)
+        (ly:parser-set-note-names parser pitchnames))
+      (ly:warning (_ "No other language was defined previously. Ignoring.")))
+   (make-music 'Music 'void #t))
 
 
 makeClusters =
@@ -454,17 +511,17 @@ ottava =
 
 overrideTimeSignatureSettings =
 #(define-music-function
-   (parser location context time-signature base-moment beat-structure beam-exceptions)
-   (symbol? pair? pair? cheap-list? cheap-list?)
+   (parser location time-signature base-moment beat-structure beam-exceptions)
+   (pair? pair? cheap-list? cheap-list?)
 
-   (_i "Override @code{timeSignatureSettings} in @var{context}
+   (_i "Override @code{timeSignatureSettings}
 for time signatures of @var{time-signature} to have settings
 of @var{base-moment}, @var{beat-structure}, and @var{beam-exceptions}.")
 
    ;; TODO -- add warning if largest value of grouping is
    ;;      greater than time-signature.
   (let ((setting (make-setting base-moment beat-structure beam-exceptions)))
-    (override-time-signature-setting time-signature setting context)))
+    (override-time-signature-setting time-signature setting)))
 
 overrideProperty =
 #(define-music-function (parser location name property value)
@@ -731,12 +788,12 @@ resetRelativeOctave =
 
 revertTimeSignatureSettings =
 #(define-music-function
-   (parser location context time-signature)
-   (symbol? pair?)
+   (parser location time-signature)
+   (pair?)
 
-   (_i "Revert @code{timeSignatureSettings} in @var{context}
+   (_i "Revert @code{timeSignatureSettings}
 for time signatures of @var{time-signature}.")
-     (revert-time-signature-setting time-signature context))
+   (revert-time-signature-setting time-signature))
 
 rightHandFinger =
 #(define-music-function (parser location finger) (number-or-string?)