X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ly%2Fmusic-functions-init.ly;h=fc49725f07d395cf4eec1832db6b9283a96f3a55;hb=b69dbbc66da069134b9e1e4047cbf74d5a9ac50b;hp=8ac1deda0113e19ca9676a17cbcf573d5e0eeb09;hpb=7a57acf2755504cfb0813ca02662ad43e7456506;p=lilypond.git diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index 8ac1deda01..fc49725f07 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -2,7 +2,7 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2003--2010 Han-Wen Nienhuys +%%%% Copyright (C) 2003--2011 Han-Wen Nienhuys %%%% Jan Nieuwenhuizen %%%% %%%% LilyPond is free software: you can redistribute it and/or modify @@ -91,7 +91,6 @@ applyContext = #(define-music-function (parser location proc) (procedure?) (_i "Modify context properties with Scheme procedure @var{proc}.") (make-music 'ApplyContext - 'origin location 'procedure proc)) applyMusic = @@ -103,7 +102,6 @@ applyOutput = #(define-music-function (parser location ctx proc) (symbol? procedure?) (_i "Apply function @code{proc} to every layout object in context @code{ctx}") (make-music 'ApplyOutputEvent - 'origin location 'procedure proc 'context-type ctx)) @@ -170,7 +168,6 @@ barNumberCheck = #(define-music-function (parser location n) (integer?) (_i "Print a warning if the current bar number is not @var{n}.") (make-music 'ApplyContext - 'origin location 'procedure (lambda (c) (let ((cbn (ly:context-property c 'currentBarNumber))) @@ -198,13 +195,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)) @@ -213,6 +211,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?) @@ -223,8 +258,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)) @@ -301,7 +348,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 @@ -360,6 +433,29 @@ label = 'page-label label)))) +language = +#(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 = #(define-music-function (parser location arg) (ly:music?) @@ -401,7 +497,6 @@ octaveCheck = #(define-music-function (parser location pitch-note) (ly:music?) (_i "Octave check.") (make-music 'RelativeOctaveCheck - 'origin location 'pitch (pitch-of-note pitch-note))) ottava = @@ -412,17 +507,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) @@ -443,7 +538,6 @@ or @code{\"GrobName\"}.") (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) @@ -599,7 +693,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.") @@ -661,8 +754,7 @@ of the quoted voice, as specified in an @code{\\addQuote} command. usually contains spacers or multi-measure rests.") (make-music 'QuoteMusic 'element main-music - 'quoted-music-name what - 'origin location)) + 'quoted-music-name what)) removeWithTag = #(define-music-function (parser location tag music) (symbol? ly:music?) @@ -690,12 +782,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?) @@ -781,8 +873,7 @@ as a first or second voice.") 'quoted-context-id "cue" 'quoted-music-name what 'quoted-voice-direction dir - 'quoted-transposition (pitch-of-note pitch-note) - 'origin location)) + 'quoted-transposition (pitch-of-note pitch-note))) transposition = #(define-music-function (parser location pitch-note) (ly:music?)