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)
'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?)