]> git.donarmstrong.com Git - lilypond.git/blobdiff - ly/music-functions-init.ly
Admin: run yearly grand-replace.
[lilypond.git] / ly / music-functions-init.ly
index ad53afe592f626f3c0b092010846ca429ac8bac0..8cfaa81d31bf4708cda3488e74a00efa60cc1df2 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
 %% this file is alphabetically sorted.
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-%% need SRFI-1 for filter;
-%% optargs for lambda*;
-%% regex for string-match
+%% need SRFI-1 for filter; optargs for lambda*
 #(use-modules (srfi srfi-1)
-             (ice-9 optargs)
-             (ice-9 regex))
+             (ice-9 optargs))
 
 %% TODO: using define-music-function in a .scm causes crash.
 
@@ -201,13 +198,14 @@ bookOutputSuffix =
    (set! book-output-suffix newsuffix)
    (make-music 'SequentialMusic 'void #t))
 
-%% why a function?
+%% \breathe is defined as a music function rather than an event identifier to
+%% ensure it gets useful input location information: as an event identifier,
+%% it would have to be wrapped in an EventChord to prevent it from being
+%% treated as a post_event by the parser
 breathe =
 #(define-music-function (parser location) ()
    (_i "Insert a breath mark.")
-   (make-music 'EventChord
-              'origin location
-              'elements (list (make-music 'BreathingEvent))))
+   (make-music 'BreathingEvent))
 
 
 
@@ -216,6 +214,15 @@ clef =
    (_i "Set the current clef to @var{type}.")
    (make-clef-set type))
 
+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?)
@@ -226,8 +233,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))
 
 
 
@@ -304,7 +323,33 @@ grace =
 #(def-grace-function startGraceMusic stopGraceMusic
    (_i "Insert @var{music} as grace notes."))
 
-
+harmonicByFret = #(define-music-function (parser location fret music) (number? ly:music?)
+  (let* ((fret (number->string fret))
+         (pitch (fret->pitch fret)))
+        (make-sequential-music
+         (list
+          #{
+            \override TabNoteHead #'stencil = #(tab-note-head::print-custom-fret-label $fret)
+          #}
+          (make-harmonic
+            (calc-harmonic-pitch pitch music))
+          #{
+            \revert TabNoteHead #'stencil
+          #}))))
+
+harmonicByRatio = #(define-music-function (parser location ratio music) (number? ly:music?)
+  (let ((pitch (ratio->pitch ratio))
+        (fret (ratio->fret ratio)))
+       (make-sequential-music
+        (list
+         #{
+           \override TabNoteHead #'stencil = #(tab-note-head::print-custom-fret-label $fret)
+         #}
+         (make-harmonic
+           (calc-harmonic-pitch pitch music))
+         #{
+            \revert TabNoteHead #'stencil
+         #}))))
 
 instrumentSwitch =
 #(define-music-function
@@ -364,33 +409,27 @@ label =
 
 
 language =
-#(define-music-function (parser location str) (string?)
-   (_i "Select note-names language.")
-   ;; This function is a hack around the old language
-   ;; selection system, using separate .ly files for each
-   ;; supported languages.
-   ;; TODO: re-implement language selection in a cleaner way.
-   (let* ((file-name (string-append (string-downcase! str) ".ly"))
-
-         ; Ugh.  ly:gulp-file's "file not found" error message
-         ; won't be much informative in this specific case.
-         (raw-string (ly:gulp-file file-name))
-
-         ; extract the pitchnames alist.
-         (delim-alist (string-match "`\\(.*\\)\\)\\s[ |\n]?\\)" raw-string ))
-         (extract-alist (if delim-alist
-                            (match:substring delim-alist)
-                            #f)))
-
-     (if extract-alist
-        (let ((lang-alist (eval-string extract-alist)))
-          (if (ly:get-option 'verbose)
-              (ly:message (_ "Using ~a note names...") str))
-          (set! pitchnames lang-alist)
-          (ly:parser-set-note-names parser lang-alist))
-        (ly:error (_ "Cannot process ~a as a language file.
-Use \\include \"~a\" instead.") file-name file-name))
-     make-void-music))
+#(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 =
@@ -444,17 +483,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)
@@ -631,7 +670,6 @@ that they share a staff.")
    (make-part-combine-music parser
                             (list part1 part2)))
 
-#(define (symbol-or-boolean? x) (or (symbol? x) (boolean? x)))
 partcombineForce =
 #(define-music-function (location parser type once) (symbol-or-boolean? boolean?)
    (_i "Override the part-combiner.")
@@ -722,12 +760,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?)