%%%% This file is part of LilyPond, the GNU music typesetter.
%%%%
-%%%% Copyright (C) 2003--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%%%% Copyright (C) 2003--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
%%%% Jan Nieuwenhuizen <janneke@gnu.org>
%%%%
%%%% LilyPond is free software: you can redistribute it and/or modify
breathe =
#(define-music-function (parser location) ()
(_i "Insert a breath mark.")
- (make-music 'BreathingEvent
- 'midi-length
- (lambda (len context)
- ;;Shorten by half, or by up to a second, but always by a power of 2
- (let* ((desired (min (ly:moment-main (seconds->moment 1 context))
- (* (ly:moment-main len) 1/2)))
- (scale (inexact->exact (ceiling (/ (log desired) (log 1/2)))))
- (breath (ly:make-moment (expt 1/2 scale))))
- (ly:moment-sub (ly:make-moment (ly:moment-main len)) breath)))))
+ (make-music 'BreathingEvent))
clef =
#(define-music-function (parser location type) (string?)
(ly:moment-main-denominator mlen))))
#{
\once \override Timing.TimeSignature.stencil = #(lambda (grob)
- (grob-interpret-markup grob (format-compound-time args)))
+ (grob-interpret-markup grob (make-compound-meter-markup args)))
\set Timing.timeSignatureFraction = #timesig
\set Timing.baseMoment = #beat
\set Timing.beatStructure = #beatGrouping
in the format of @code{all-grob-descriptions}.")
(ly:make-context-mod
(map (lambda (p)
- (list 'assign (car p) (list (cdr p))))
- descriptions)))
+ (list 'assign (car p) (ly:make-grob-properties (cdr p))))
+ descriptions)))
harmonicByFret = #(define-music-function (parser location fret music) (number? ly:music?)
(_i "Convert @var{music} into mixed harmonics; the resulting notes resemble
keepWithTag =
-#(define-music-function (parser location tag music)
+#(define-music-function (parser location tags music)
(symbol-list-or-symbol? ly:music?)
- (_i "Include only elements of @var{music} that are either untagged
-or tagged with one of the tags in @var{tag}. @var{tag} may be either
-a single symbol or a list of symbols.")
+ (_i "Include only elements of @var{music} that are tagged with one
+of the tags in @var{tags}. @var{tags} may be either a single symbol
+or a list of symbols.
+
+Each tag may be declared as a member of at most one tag group (defined
+with @code{\\tagGroup}). If none of a @var{music} element's tags
+share a tag group with one of the specified @var{tags}, the element is
+retained.")
(music-filter
- (if (symbol? tag)
- (lambda (m)
- (let ((music-tags (ly:music-property m 'tags)))
- (or (null? music-tags)
- (memq tag music-tags))))
- (lambda (m)
- (let ((music-tags (ly:music-property m 'tags)))
- (or (null? music-tags)
- (any (lambda (t) (memq t music-tags)) tag)))))
+ (tags-keep-predicate tags)
music))
key =
;; these props ARE allowed to shrink below default size
(define shrinkable-props
- '(
- ;; TODO: uncomment spacing-increment here once Issue 3987 is fixed
- ;; override at the 'Score level
- ;(SpacingSpanner spacing-increment)
-
- ;; lengths and heights
- (Beam length-fraction)
- (Stem length-fraction)
- (Stem beamlet-default-length)
- (Slur height-limit)
- (Slur minimum-length)
- (PhrasingSlur height-limit)
- (PhrasingSlur minimum-length)
-
- ;; Beam.beam-thickness is dealt with separately below
- ))
+ (let ((baseline-skip-props
+ (find-named-props 'baseline-skip all-grob-descriptions))
+ (word-space-props
+ (find-named-props 'word-space all-grob-descriptions)))
+ (append
+ baseline-skip-props
+ word-space-props
+ '(
+ ;; TODO: uncomment spacing-increment here once Issue 3987 is fixed
+ ;; override at the 'Score level
+ ;(SpacingSpanner spacing-increment)
+
+ ;; lengths and heights
+ (Beam length-fraction)
+ (Stem length-fraction)
+ (Stem beamlet-default-length)
+ (Stem double-stem-separation)
+ (Slur height-limit)
+ (Slur minimum-length)
+ (PhrasingSlur height-limit)
+ (PhrasingSlur minimum-length)
+
+ ;; Beam.beam-thickness is dealt with separately below
+ ))))
#{
\context Bottom {
%% TODO: uncomment \newSpacingSection once Issue 3990 is fixed
;; these props ARE allowed to shrink below default size
(define shrinkable-props
- (let ((space-alist-props
- (find-all-space-alist-props all-grob-descriptions)))
+ (let* ((baseline-skip-props
+ (find-named-props 'baseline-skip all-grob-descriptions))
+ (word-space-props
+ (find-named-props 'word-space all-grob-descriptions))
+ (space-alist-props
+ (find-named-props 'space-alist all-grob-descriptions)))
(append
+ baseline-skip-props
+ word-space-props
space-alist-props
'(
;; override at the 'Score level
(BarLine hair-thickness)
(BarLine thick-thickness)
(Stem beamlet-default-length)
+ (Stem double-stem-separation)
))))
#{
shrinkable-props))
%% scale settings
- %% (but only if staff magnification is changing)
+ %% (but only if staff magnification is changing
+ %% and does not equal 1)
#(scale-fontSize 'magnifyStaff mag)
#(scale-props 'magnifyStaff mag #f unshrinkable-props)
#(scale-props 'magnifyStaff mag #t shrinkable-props)
arg)
partcombine =
-#(define-music-function (parser location part1 part2) (ly:music? ly:music?)
- (_i "Take the music in @var{part1} and @var{part2} and typeset so
-that they share a staff.")
+#(define-music-function (parser location chord-range part1 part2)
+ ((number-pair? '(0 . 8)) ly:music? ly:music?)
+ (_i "Take the music in @var{part1} and @var{part2} and return
+a music expression containing simultaneous voices, where @var{part1}
+and @var{part2} are combined into one voice where appropriate.
+Optional @var{chord-range} sets the distance in steps between notes
+that may be combined into a chord or unison.")
(make-part-combine-music parser
- (list part1 part2) #f))
+ (list part1 part2) #f chord-range))
partcombineUp =
-#(define-music-function (parser location part1 part2) (ly:music? ly:music?)
+#(define-music-function (parser location chord-range part1 part2)
+ ((number-pair? '(0 . 8)) ly:music? ly:music?)
(_i "Take the music in @var{part1} and @var{part2} and typeset so
that they share a staff with stems directed upward.")
(make-part-combine-music parser
- (list part1 part2) UP))
+ (list part1 part2) UP chord-range))
partcombineDown =
-#(define-music-function (parser location part1 part2) (ly:music? ly:music?)
+#(define-music-function (parser location chord-range part1 part2)
+ ((number-pair? '(0 . 8)) ly:music? ly:music?)
(_i "Take the music in @var{part1} and @var{part2} and typeset so
that they share a staff with stems directed downward.")
(make-part-combine-music parser
- (list part1 part2) DOWN))
+ (list part1 part2) DOWN chord-range))
partcombineForce =
#(define-music-function (location parser type once) (symbol-or-boolean? boolean?)
'element music))
removeWithTag =
-#(define-music-function (parser location tag music)
+#(define-music-function (parser location tags music)
(symbol-list-or-symbol? ly:music?)
(_i "Remove elements of @var{music} that are tagged with one of the
-tags in @var{tag}. @var{tag} may be either a single symbol or a list
+tags in @var{tags}. @var{tags} may be either a single symbol or a list
of symbols.")
(music-filter
- (if (symbol? tag)
- (lambda (m)
- (not (memq tag (ly:music-property m 'tags))))
- (lambda (m)
- (let ((music-tags (ly:music-property m 'tags)))
- (or (null? music-tags)
- (not (any (lambda (t) (memq t music-tags)) tag))))))
+ (tags-remove-predicate tags)
music))
resetRelativeOctave =
(style-note-heads heads style music))
tag =
-#(define-music-function (parser location tag music) (symbol-list-or-symbol? ly:music?)
- (_i "Tag the following @var{music} with @var{tag} and return the
-result, by adding the single symbol or symbol list @var{tag} to the
+#(define-music-function (parser location tags music) (symbol-list-or-symbol? ly:music?)
+ (_i "Tag the following @var{music} with @var{tags} and return the
+result, by adding the single symbol or symbol list @var{tags} to the
@code{tags} property of @var{music}.")
(set!
(ly:music-property music 'tags)
- ((if (symbol? tag) cons append)
- tag
+ ((if (symbol? tags) cons append)
+ tags
(ly:music-property music 'tags)))
music)
+tagGroup =
+#(define-void-function (parser location tags) (symbol-list?)
+ (_i "Define a tag group comprising the symbols in the symbol list
+@var{tags}. Tag groups must not overlap.")
+ (let ((err (define-tag-group tags)))
+ (if err (ly:parser-error parser err location))))
+
temporary =
#(define-music-function (parser location music)
(ly:music?)