]> git.donarmstrong.com Git - lilypond.git/blobdiff - ly/music-functions-init.ly
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / ly / music-functions-init.ly
index b910223f68ea87604c3b25edf85fc50814f9f71e..b2780027c72da8200d11510756dea89e831fc1f7 100644 (file)
@@ -1,93 +1,72 @@
 % -*-Scheme-*-
 
-\version "2.9.12"
+\version "2.7.39"
 
 %% need SRFI-1 filter 
 
 #(use-modules (srfi srfi-1))  
-%% FIXME: guile-1.7 required?
-%#(use-modules (scm display-lily))invalid module name for use-syntax ((srfi srfi-39))
 
-#(use-modules (scm display-lily))
-#(display-lily-init parser)
 
+tweak = #(define-music-function (parser location sym val arg)
+          (symbol? scheme? ly:music?)
 
-acciaccatura =
-#(def-grace-function startAcciaccaturaMusic stopAcciaccaturaMusic)
+          "Add @code{sym . val} to the @code{tweaks} property of @var{arg}."
 
-addquote =
-#(define-music-function (parser location name music) (string? ly:music?)
-   "Add a piece of music to be quoted "
-   (add-quotable name music)
-   (make-music 'SequentialMusic 'void #t))
+          
+          (set!
+           (ly:music-property arg 'tweaks)
+           (acons sym val
+                  (ly:music-property arg 'tweaks)))
+          arg)
 
+tag = #(define-music-function (parser location tag arg)
+   (symbol? ly:music?)
 
-afterGraceFraction =
-#(cons 6 8)
+   "Add @var{tag} to the @code{tags} property of @var{arg}."
 
-afterGrace =
-#(define-music-function
-  (parser location main grace)
-  (ly:music? ly:music?)
+   (set!
+    (ly:music-property arg 'tags)
+    (cons tag
+         (ly:music-property arg 'tags)))
+   arg)
 
-  (let*
-      ((main-length (ly:music-length main))
-       (fraction  (ly:parser-lookup parser 'afterGraceFraction)))
-    
-    (make-simultaneous-music
-     (list
-      main
-      (make-sequential-music
-       (list
+clef =
+#(define-music-function (parser location type)
+   (string?)
+   
+   "Set the current clef."
 
-       (make-music 'SkipMusic
-                   'duration (ly:make-duration
-                              0 0
-                              (* (ly:moment-main-numerator main-length)
-                                 (car fraction))
-                              (* (ly:moment-main-denominator main-length)
-                                 (cdr fraction)) ))
-       (make-music 'GraceMusic
-                   'element grace)))))))
+   (make-clef-set type))
+
+bar =
+#(define-music-function (parser location type)
+   (string?)
+   (context-spec-music
+    (make-property-set 'whichBar type)
+    'Timing))
 
 applyMusic =
 #(define-music-function (parser location func music) (procedure? ly:music?)
                (func music))
 
+oldaddlyrics =
+#(define-music-function (parser location music lyrics) (ly:music? ly:music?)
 
-applyOutput =
-#(define-music-function (parser location ctx proc) (symbol? procedure?)
-                (make-music 'ApplyOutputEvent
-                  'origin location
-                  'procedure proc
-                  'context-type ctx))
+              (make-music 'OldLyricCombineMusic 
+                          'origin location
+                          'elements (list music lyrics)))
 
+grace =
+#(def-grace-function startGraceMusic stopGraceMusic)
+
+acciaccatura =
+#(def-grace-function startAcciaccaturaMusic stopAcciaccaturaMusic)
 appoggiatura =
 #(def-grace-function startAppoggiaturaMusic stopAppoggiaturaMusic)
 
-
-
-% for regression testing purposes.
-assertBeamQuant =
-#(define-music-function (parser location l r) (pair? pair?)
-  (make-grob-property-override 'Beam 'positions
-   (ly:make-simple-closure
-    (ly:make-simple-closure
-     (append
-      (list chain-grob-member-functions `(,cons 0 0))
-      (check-quant-callbacks l r))))))
-    
-% for regression testing purposes.
-assertBeamSlope =
-#(define-music-function (parser location comp) (procedure?)
-  (make-grob-property-override 'Beam 'positions
-   (ly:make-simple-closure
-    (ly:make-simple-closure
-     (append
-      (list chain-grob-member-functions `(,cons 0 0))
-      (check-slope-callbacks comp))))))
-
-
+partcombine =
+#(define-music-function (parser location part1 part2) (ly:music? ly:music?)
+                (make-part-combine-music (list part1 part2)))
 
 autochange =
 #(define-music-function (parser location music) (ly:music?)
@@ -99,184 +78,40 @@ applyContext =
                    'origin location
                    'procedure proc))
 
-bar =
-#(define-music-function (parser location type)
-   (string?)
-   (context-spec-music
-    (make-property-set 'whichBar type)
-    'Timing))
-
-
-barNumberCheck =
-#(define-music-function (parser location n) (integer?)
-   (make-music 'ApplyContext 
-              'origin location
-              'procedure 
-              (lambda (c)
-                (let*
-                    ((cbn (ly:context-property c 'currentBarNumber)))
-                  (if (and  (number? cbn) (not (= cbn n)))
-                      (ly:input-message location "Barcheck failed got ~a expect ~a"
-                                        cbn n))))))
-
-
-%% why a function?
-breathe =
-#(define-music-function (parser location) ()
-            (make-music 'EventChord 
-              'origin location
-              'elements (list (make-music 'BreathingEvent))))
-
-bendAfter =
-#(define-music-function (parser location delta) (integer?)
-             
-  (make-music 'BendAfterEvent
-   'delta-step delta))
-
-clef =
-#(define-music-function (parser location type)
-   (string?)
-   
-   "Set the current clef."
-
-   (make-clef-set type))
-
-
-compressMusic =
-#(define-music-function
-                 (parser location fraction music) (number-pair? ly:music?)
-                 (ly:music-compress music (ly:make-moment (car fraction) (cdr fraction))))
-
-
-cueDuring = 
-#(define-music-function
-  (parser location what dir main-music)
-  (string? ly:dir? ly:music?)
-  (make-music 'QuoteMusic
-             'element main-music 
-             'quoted-context-type 'Voice
-             'quoted-context-id "cue"
-             'quoted-music-name what
-             'quoted-voice-direction dir
-             'origin location))
-
-
-displayLilyMusic =
-#(define-music-function (parser location music) (ly:music?)
-   (display-lily-music music)
-   music)
-
-displayMusic =
-#(define-music-function (parser location music) (ly:music?)
-                (display-scheme-music music)
-                music)
-
-featherDurations=
-#(define-music-function (parser location factor argument) (ly:moment? ly:music?)
+shiftDurations =
+#(define-music-function (parser location dur dots arg) (integer? integer? ly:music?)
+   ""
 
-   "Rearrange durations in ARGUMENT so there is an
-acceleration/deceleration. "
    
-   (let*
-       ((orig-duration (ly:music-length argument))
-       (multiplier (ly:make-moment 1 1)))
-
-     (music-map 
-      (lambda (mus)
-       (if (and (eq? (ly:music-property mus 'name) 'EventChord)
-                (< 0 (ly:moment-main-denominator (ly:music-length mus))))
-           (begin
-             (ly:music-compress mus multiplier)
-             (set! multiplier (ly:moment-mul factor multiplier)))
-           )
-       mus)
-      argument)
-
-     (ly:music-compress
-      argument
-      (ly:moment-div orig-duration (ly:music-length argument)))
-
-     argument))
-
-grace =
-#(def-grace-function startGraceMusic stopGraceMusic)
-
-
-"instrument-definitions" = #'()
-
-addInstrumentDefinition =
-#(define-music-function
-   (parser location name lst) (string? list?)
-
-   (set! instrument-definitions (acons name lst instrument-definitions))
-
-   (make-music 'SequentialMusic 'void #t))
-
-
-instrumentSwitch =
-#(define-music-function
-   (parser location name) (string?)
-   (let*
-       ((handle  (assoc name instrument-definitions))
-       (instrument-def (if handle (cdr handle) '()))
-       )
-
-     (if (not handle)
-        (ly:input-message "No such instrument: ~a" name))
-     (context-spec-music
-      (make-music 'SimultaneousMusic
-                 'elements
-                 (map (lambda (kv)
-                        (make-property-set
-                         (car kv)
-                         (cdr kv)))
-                      instrument-def))
-      'Staff)))
-
-
-keepWithTag =
-#(define-music-function
-  (parser location tag music) (symbol? ly:music?)
-  (music-filter
-   (lambda (m)
-    (let* ((tags (ly:music-property m 'tags))
-           (res (memq tag tags)))
-     (or
-      (eq? tags '())
-      res)))
-   music))
-
-
-
-killCues =
-#(define-music-function
-   (parser location music)
-   (ly:music?)
    (music-map
-    (lambda (mus)
-      (if (string? (ly:music-property mus 'quoted-music-name))
-         (ly:music-property mus 'element)
-         mus)) music))
-   
-
-makeClusters =
-#(define-music-function
-               (parser location arg) (ly:music?)
-               (music-map note-to-cluster arg))
+    (lambda (x)
+      (shift-one-duration-log x dur dots)) arg))
 
 musicMap =
 #(define-music-function (parser location proc mus) (procedure? ly:music?)
             (music-map proc mus))
 
+displayMusic =
+#(define-music-function (parser location music) (ly:music?)
+                (display-scheme-music music)
+                music)
 
+%% FIXME: guile-1.7 required?
+%#(use-modules (scm display-lily))invalid module name for use-syntax ((srfi srfi-39))
 
-oldaddlyrics =
-#(define-music-function (parser location music lyrics) (ly:music? ly:music?)
-
-              (make-music 'OldLyricCombineMusic 
-                          'origin location
-                          'elements (list music lyrics)))
+#(use-modules (scm display-lily))
+#(display-lily-init parser)
+displayLilyMusic =
+#(define-music-function (parser location music) (ly:music?)
+   (display-lily-music music)
+   music)
 
+applyOutput =
+#(define-music-function (parser location ctx proc) (symbol? procedure?)
+                (make-music 'ApplyOutputEvent
+                  'origin location
+                  'procedure proc
+                  'context-type ctx))
 
 overrideProperty =
 #(define-music-function (parser location name property value)
@@ -298,15 +133,38 @@ or @code{\"GrobName\"}"
           (set! grob-name (string->symbol (list-ref name-components 1)))
           (set! context-name (string->symbol (list-ref name-components 0)))))
 
-     (make-music 'ApplyOutputEvent
-                'origin location
-                'context-type context-name
-                'procedure
-                (lambda (grob orig-context context)
-                  (if (equal?
-                       (cdr (assoc 'name (ly:grob-property grob 'meta)))
-                       grob-name)
-                      (set! (ly:grob-property grob property) value))))))
+     (context-spec-music
+      (make-music 'ApplyOutputEvent
+                 'origin location
+                 'procedure
+                 (lambda (grob orig-context context)
+                   (if (equal?
+                        (cdr (assoc 'name (ly:grob-property grob 'meta)))
+                        grob-name)
+                       (set! (ly:grob-property grob property) value))))
+
+      context-name)))
+
+breathe =
+#(define-music-function (parser location) ()
+            (make-music 'EventChord 
+              'origin location
+              'elements (list (make-music 'BreathingSignEvent))))
+
+
+unfoldRepeats =
+#(define-music-function (parser location music) (ly:music?)
+                 (unfold-repeats music))
+
+compressMusic =
+#(define-music-function
+                 (parser location fraction music) (number-pair? ly:music?)
+                 (ly:music-compress music (ly:make-moment (car fraction) (cdr fraction))))
+
+makeClusters =
+#(define-music-function
+               (parser location arg) (ly:music?)
+               (music-map note-to-cluster arg))
 
 
 removeWithTag = 
@@ -318,24 +176,68 @@ removeWithTag =
            (res (memq tag tags)))
      (not res)))
  music))
+             
+keepWithTag =
+#(define-music-function
+  (parser location tag music) (symbol? ly:music?)
+  (music-filter
+   (lambda (m)
+    (let* ((tags (ly:music-property m 'tags))
+           (res (memq tag tags)))
+     (or
+      (eq? tags '())
+      res)))
+   music))
+
 
 %% Todo:
 %% doing
 %% define-music-function in a .scm causes crash.
 
-octave =
-#(define-music-function (parser location pitch-note) (ly:music?)
-   "octave check"
+cueDuring = 
+#(define-music-function
+  (parser location what dir main-music)
+  (string? ly:dir? ly:music?)
+  (make-music 'QuoteMusic
+             'element main-music 
+             'quoted-context-type 'Voice
+             'quoted-context-id "cue"
+             'quoted-music-name what
+             'quoted-voice-direction dir
+             'origin location))
+
+
+transposedCueDuring = #
+(define-music-function
+  (parser location what dir pitch-note main-music)
+  (string? ly:dir? ly:music? ly:music?)
+
+  "Insert notes from the part @var{what} into a voice called @code{cue},
+using the transposition defined by @var{pitch-note}.  This happens
+simultaneously with @var{main-music}, which is usually a rest.  The
+argument @var{dir} determines whether the cue notes should be notated
+as a first or second voice."
+
+  (make-music 'QuoteMusic
+             'element main-music
+             'quoted-context-type 'Voice
+             'quoted-context-id "cue"
+             'quoted-music-name what
+             'quoted-voice-direction dir
+             'quoted-transposition (pitch-of-note pitch-note)
+             'origin location))
+
+
+quoteDuring = #
+(define-music-function
+  (parser location what main-music)
+  (string? ly:music?)
+  (make-music 'QuoteMusic
+             'element main-music
+             'quoted-music-name what
+             'origin location))
 
-   (make-music 'RelativeOctaveCheck
-              'origin location
-              'pitch (pitch-of-note pitch-note) 
-              ))
-partcombine =
-#(define-music-function (parser location part1 part2) (ly:music? ly:music?)
-                (make-part-combine-music (list part1 part2)))
 
-             
 pitchedTrill =
 #(define-music-function
    (parser location main-note secondary-note)
@@ -362,16 +264,81 @@ pitchedTrill =
           (display sec-note-events)))
 
      main-note))
+
+killCues =
+#(define-music-function
+   (parser location music)
+   (ly:music?)
+   (music-map
+    (lambda (mus)
+      (if (string? (ly:music-property mus 'quoted-music-name))
+         (ly:music-property mus 'element)
+         mus)) music))
    
-parenthesize =
-#(define-music-function (parser loc arg) (ly:music?)
-   "Tag @var{arg} to be parenthesized."
 
-   (set! (ly:music-property arg 'parenthesize) #t)
-   arg)
+afterGraceFraction =
+#(cons 6 8)
+
+afterGrace =
+#(define-music-function
+  (parser location main grace)
+  (ly:music? ly:music?)
+
+  (let*
+      ((main-length (ly:music-length main))
+       (fraction  (ly:parser-lookup parser 'afterGraceFraction)))
+    
+    (make-simultaneous-music
+     (list
+      main
+      (make-sequential-music
+       (list
+
+       (make-music 'SkipMusic
+                   'duration (ly:make-duration
+                              0 0
+                              (* (ly:moment-main-numerator main-length)
+                                 (car fraction))
+                              (* (ly:moment-main-denominator main-length)
+                                 (cdr fraction)) ))
+       (make-music 'GraceMusic
+                   'element grace)))))))
+
+
+barNumberCheck =
+#(define-music-function (parser location n) (integer?)
+   (make-music 'ApplyContext 
+              'origin location
+              'procedure 
+              (lambda (c)
+                (let*
+                    ((cbn (ly:context-property c 'currentBarNumber)))
+                  (if (not (= cbn n))
+                      (ly:input-message location "Barcheck failed got ~a expect ~a"
+                                        cbn n))))))
+
+
+
+% for regression testing purposes.
+assertBeamQuant =
+#(define-music-function (parser location l r) (pair? pair?)
+  (make-grob-property-override 'Beam 'positions
+   (ly:make-simple-closure
+    (ly:make-simple-closure
+     (append
+      (list chain-grob-member-functions `(,cons 0 0))
+      (check-quant-callbacks l r))))))
+    
+% for regression testing purposes.
+assertBeamSlope =
+#(define-music-function (parser location comp) (procedure?)
+  (make-grob-property-override 'Beam 'positions
+   (ly:make-simple-closure
+    (ly:make-simple-closure
+     (append
+      (list chain-grob-member-functions `(,cons 0 0))
+      (check-slope-callbacks comp))))))
 
-%% for lambda*
-#(use-modules (ice-9 optargs))
 
 parallelMusic =
 #(define-music-function (parser location voice-ids music) (list? ly:music?)
@@ -442,7 +409,7 @@ Example:
               voices)
     ;;
     ;; check sequence length
-    (apply for-each (lambda* (#:rest seqs)
+    (apply for-each (lambda (. seqs)
                       (let ((moment-reference (ly:music-length (car seqs))))
                         (for-each (lambda (seq moment)
                                     (if (not (equal? moment moment-reference))
@@ -463,152 +430,60 @@ Example:
 
 
 
-quoteDuring = #
-(define-music-function
-  (parser location what main-music)
-  (string? ly:music?)
-  (make-music 'QuoteMusic
-             'element main-music
-             'quoted-music-name what
-             'origin location))
-
-
-
-resetRelativeOctave  =
-#(define-music-function
-    (parser location reference-note)
-    (ly:music?)
-    "Set the octave inside a \\relative section."
-
-   (let*
-    ((notes (ly:music-property reference-note 'elements))
-     (pitch (ly:music-property (car notes) 'pitch)))
-
-    (set! (ly:music-property reference-note 'elements) '())
-    (set! (ly:music-property reference-note
-       'to-relative-callback)
-       (lambda (music last-pitch)
-        pitch))
-
-    reference-note))
-
-
-
-shiftDurations =
-#(define-music-function (parser location dur dots arg) (integer? integer? ly:music?)
-   ""
-
-   
-   (music-map
-    (lambda (x)
-      (shift-one-duration-log x dur dots)) arg))
 
+%% this is a stub. Write your own to suit the spacing tweak output.
 spacingTweaks =
 #(define-music-function (parser location parameters) (list?)
-   "Set the system stretch, by reading the 'system-stretch property of
-   the `parameters' assoc list."
-   #{
-      \overrideProperty #"Score.NonMusicalPaperColumn"
-        #'line-break-system-details
-        #$(list (cons 'alignment-extra-space (cdr (assoc 'system-stretch parameters))))
-   #})
-
-%% Parser used to read page-layout file, and then retreive score tweaks.
-#(define page-layout-parser #f)
-
-includePageLayoutFile = 
-#(define-music-function (parser location) ()
-   "If page breaks and tweak dump is not asked, and the file
-   <basename>-page-layout.ly exists, include it."
-   (if (not (ly:get-option 'dump-tweaks))
-       (let ((tweak-filename (format #f "~a-page-layout.ly"
-                                    (ly:parser-output-name parser))))
-        (if (access? tweak-filename R_OK)
-            (begin
-              (ly:message "Including tweak file ~a" tweak-filename)
-               (set! page-layout-parser (ly:clone-parser parser))
-              (ly:parser-parse-string page-layout-parser
-                                       (format #f "\\include \"~a\""
-                                               tweak-filename))))))
    (make-music 'SequentialMusic 'void #t))
 
-scoreTweak =
-#(define-music-function (parser location name) (string?)
-   "Include the score tweak, if exists."
-   (if (and page-layout-parser (not (ly:get-option 'dump-tweaks)))
-       (let ((tweak-music (ly:parser-lookup page-layout-parser
-                                            (string->symbol name))))
-         (if (ly:music? tweak-music)
-             tweak-music
-             (make-music 'SequentialMusic)))
-       (make-music 'SequentialMusic)))
-
-transposedCueDuring =
-#(define-music-function
-  (parser location what dir pitch-note main-music)
-  (string? ly:dir? ly:music? ly:music?)
-
-  "Insert notes from the part @var{what} into a voice called @code{cue},
-using the transposition defined by @var{pitch-note}.  This happens
-simultaneously with @var{main-music}, which is usually a rest.  The
-argument @var{dir} determines whether the cue notes should be notated
-as a first or second voice."
-
-  (make-music 'QuoteMusic
-             'element main-music
-             'quoted-context-type 'Voice
-             'quoted-context-id "cue"
-             'quoted-music-name what
-             'quoted-voice-direction dir
-             'quoted-transposition (pitch-of-note pitch-note)
-             'origin location))
-
-
-
-transposition =
+octave =
 #(define-music-function (parser location pitch-note) (ly:music?)
-   "Set instrument transposition"
-
-   (context-spec-music
-    (make-property-set 'instrumentTransposition
-                      (ly:pitch-diff (ly:make-pitch 0 0 0) (pitch-of-note pitch-note)))
-        'Staff
-))
-
-tweak = #(define-music-function (parser location sym val arg)
-          (symbol? scheme? ly:music?)
-
-          "Add @code{sym . val} to the @code{tweaks} property of @var{arg}."
+   "octave check"
 
-          
-          (set!
-           (ly:music-property arg 'tweaks)
-           (acons sym val
-                  (ly:music-property arg 'tweaks)))
-          arg)
+   (make-music 'RelativeOctaveCheck
+              'origin location
+              'pitch (pitch-of-note pitch-note) 
+              ))
 
-tag = #(define-music-function (parser location tag arg)
-   (symbol? ly:music?)
+addquote =
+#(define-music-function (parser location name music) (string? ly:music?)
+   "Add a piece of music to be quoted "
+   (add-quotable name music)
+   (make-music 'SequentialMusic 'void #t))
 
-   "Add @var{tag} to the @code{tags} property of @var{arg}."
+   
+parenthesize =
+#(define-music-function (parser loc arg) (ly:music?)
+   "Tag @var{arg} to be parenthesized."
 
-   (set!
-    (ly:music-property arg 'tags)
-    (cons tag
-         (ly:music-property arg 'tags)))
+   (set! (ly:music-property arg 'parenthesize) #t)
    arg)
 
 
-unfoldRepeats =
-#(define-music-function (parser location music) (ly:music?)
-                 (unfold-repeats music))
+featherDurations=
+#(define-music-function (parser location factor argument) (ly:moment? ly:music?)
 
+   "Rearrange durations in ARGUMENT so there is an
+acceleration/deceleration. "
+   
+   (let*
+       ((orig-duration (ly:music-length argument))
+       (multiplier (ly:make-moment 1 1)))
 
+     (music-map 
+      (lambda (mus)
+       (if (and (eq? (ly:music-property mus 'name) 'EventChord)
+                (< 0 (ly:moment-main-denominator (ly:music-length mus))))
+           (begin
+             (ly:music-compress mus multiplier)
+             (set! multiplier (ly:moment-mul factor multiplier)))
+           )
+       mus)
+      argument)
 
-withMusicProperty =
-#(define-music-function (parser location sym val music) (symbol? scheme? ly:music?)
-   "Set @var{sym} to @var{val} in @var{music}."
+     (ly:music-compress
+      argument
+      (ly:moment-div orig-duration (ly:music-length argument)))
 
-   (set! (ly:music-property music sym) val)
-   music)
+     argument))