X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=input%2Fregression%2Foptional-args.ly;fp=input%2Fregression%2Foptional-args.ly;h=1fbce42da962db0ce46da318f5eb6099aa7ffe28;hb=32a34dcef0c0041c6d62677487a380b5c8b85712;hp=0000000000000000000000000000000000000000;hpb=f41973ff763d5972a85995b6d40c864281ec6714;p=lilypond.git diff --git a/input/regression/optional-args.ly b/input/regression/optional-args.ly new file mode 100644 index 0000000000..1fbce42da9 --- /dev/null +++ b/input/regression/optional-args.ly @@ -0,0 +1,33 @@ +\version "2.16.0" + +\header{ + texidoc= "Test optional music function arguments. +The output is nonsensical, but if you wrack your brain, +you'll figure it out. Remember that optional arguments +are matched left to right, and after the first non-match, +the rest is skipped." +} + +\layout { ragged-right = ##t } + +% Get following pitch into Scheme +pitch = #(define-scheme-function (parser location p) (ly:pitch?) p) +% The same with a duration +dur = #(define-scheme-function (parser location p) (ly:duration?) p) + +% Just like \relative, but defaulting to f as reference, making the +% first note of the music the same as if written as absolute pitch +ablative = +#(define-music-function (parser location ref music) + ((ly:pitch? #{ \pitch f #}) ly:music?) + #{ \relative $ref $music #}) + +% Let's take a duration and four pitches, defaulting to 2 c' d' e' +zap = +#(define-music-function (parser location dur a b c d) + ((ly:duration? #{ \dur 2 #}) (ly:pitch? #{ \pitch c' #}) + (ly:pitch? #{ \pitch d' #}) (ly:pitch? #{ \pitch e' #}) + ly:music?) #{ $a $dur $b $c ^\markup{!} $d #}) + +\new Voice { \relative c' e' \relative { e' } \ablative c' e' \ablative { e' } + \zap 8. c'' d'' {e''4..} \zap f''8 g'' \zap 4 a'' b'' c''' d'''2 }